<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0.2" -->
<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/"
	>

<channel>
	<title>Insights</title>
	<link>http://atownley.org</link>
	<description>Andrew's way of looking at the world</description>
	<pubDate>Thu, 15 May 2008 16:45:21 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.2</generator>
	<language>en</language>
			<item>
		<title>ROS KO&#8217;s 64-bit Linux</title>
		<link>http://atownley.org/2008/05/ros-kos-64-bit-linux/</link>
		<comments>http://atownley.org/2008/05/ros-kos-64-bit-linux/#comments</comments>
		<pubDate>Thu, 15 May 2008 16:45:21 +0000</pubDate>
		<dc:creator>AST</dc:creator>
		
	<category>Rants</category>
	<category>Linux</category>
		<guid isPermaLink="false">http://atownley.org/2008/05/ros-kos-64-bit-linux/</guid>
		<description><![CDATA[I&#8217;ve been meaning to write this post for a few weeks now, but I&#8217;ve just been too busy.  Now that I&#8217;m finally starting to get a bit more caught up (and after I thought about it again today when using Windows XP on VMWare to access ROS) I figured I&#8217;d better write it.
Previously, I&#8217;d [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been meaning to write this post for a few weeks now, but I&#8217;ve just been too busy.  Now that I&#8217;m finally starting to get a bit more caught up (and after I thought about it again today when using Windows XP on VMWare to access ROS) I figured I&#8217;d better write it.</p>
<p>Previously, <a href="http://atownley.org/2007/01/ros-vs-linux-making-it-work/">I&#8217;d figured out a way to convince ROS to work under Linux</a>.  What I didn&#8217;t realize at the time, was that it only works on 32-bit Linux and not 64-bit.  <a id="more-46"></a>There are probably a couple of reasons for this sorry state of affairs.  First, Sun isn&#8217;t going to provide a 64-bit Java plug-in until the release of Java 7 (or 1.7 if you&#8217;re one of us old-timers that&#8217;s worked with it since the beginning).  Second, I&#8217;d say that the core &#8220;kcrypto&#8221; part of the way ROS works hasn&#8217;t been revisited in a while (since it&#8217;s built on Baltimore&#8217;s crypto stuff, and they haven&#8217;t been in this space for about 5 years).</p>
<p>Therefore, if you must have access to the Irish Revenue&#8217;s ROS business services from Linux, you&#8217;d better stick with either a 32-bit OS, or at least the 32-bit version of Firefox.  I&#8217;ve tried every 64-bit Java plug-in that I can get my hands on, but to no avail.  I&#8217;m harboring secret hopes that maybe when Sun releases Java 7, it&#8217;ll break ROS and they&#8217;ll have to revisit it in a way that makes it more accessible to non-Windows hosts, but I don&#8217;t think I&#8217;ll be holding my breath.</p>
<p>The closest I&#8217;ve gotten is with the gcj/icedtea version, but I get the following error:</p>
<pre class="code-example">
jvmcheckerurl /java/javachecker.jsp
readBrowserDetails:: JVM Vendor: Sun Microsystems Inc., JVM Version: 1.6.0Kcrypto Installed? trueKCrypto Version: 8,0,1,0
Crypto release KeyTools Crypto v5.2
Crypto version 5.2
KCrypto present
getBrowserDetails:: JVM Vendor: Sun Microsystems Inc., JVM Version: 1.6.0Kcrypto Installed? trueKCrypto Version: null
getJVMVendor().trim().equals(browserDetail.getJVMVendor().trim()) true
getJVMVersion().trim().equals(browserDetail.getJVMVersion().trim() true
this.isKcryptoInstalled()==browserDetail.isKcryptoInstalled() true
 readBrowserDetails().equals(getBrowserDetails()) true
readBrowserDetails:: JVM Vendor: Sun Microsystems Inc., JVM Version: 1.6.0Kcrypto Installed? trueKCrypto Version: 8,0,1,0
Crypto release KeyTools Crypto v5.2
Crypto version 5.2
KCrypto present
getBrowserDetails:: JVM Vendor: Sun Microsystems Inc., JVM Version: 1.6.0Kcrypto Installed? trueKCrypto Version: null
getJVMVendor().trim().equals(browserDetail.getJVMVendor().trim()) true
getJVMVersion().trim().equals(browserDetail.getJVMVersion().trim() true
this.isKcryptoInstalled()==browserDetail.isKcryptoInstalled() true
matchBrowserDetails==true
GCJ PLUGIN: thread 0x622920: plugin_in_pipe_callback
GCJ PLUGIN: thread 0x622920: plugin_in_pipe_callback: setting status exception: java.security.AccessControlException: access denied (java.security.SecurityPermission putProviderProperty.JCRYPTO).
  PIPE: plugin read: status exception: java.security.AccessControlException: access denied (java.security.SecurityPermission putProviderProperty.JCRYPTO).
GCJ PLUGIN: thread 0x622920: plugin_in_pipe_callback return
  PIPE: appletviewer wrote: status exception: java.security.AccessControlException: access denied (java.security.SecurityPermission putProviderProperty.JCRYPTO).
java.security.AccessControlException: access denied (java.security.SecurityPermission putProviderProperty.JCRYPTO)
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:342)
	at java.security.AccessController.checkPermission(AccessController.java:553)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
	at java.lang.SecurityManager.checkSecurityAccess(SecurityManager.java:1715)
	at java.security.Provider.check(Provider.java:403)
	at java.security.Provider.put(Provider.java:326)
	at com.baltimore.jcrypto.provider.JCRYPTO.&lt;init>([DashoPro-V1.3-013000])
	at com.baltimore.psd.revenue.applet.AuthenticateApplet.init(Unknown Source)
	at sun.applet.AppletPanel.run(AppletPanel.java:436)
	at java.lang.Thread.run(Thread.java:636)
</pre>
<p>Doing a bit of digging on Google is actually kinda difficult, but eventually just searching for the <code>putProviderProperty.JCRYPTO</code> part yields the following gem (on the <a href="http://forum.java.sun.com/thread.jspa?threadID=261190&#038;messageID=1872797">Java Forums from 1998</a>!):</p>
<blockquote><p>
If you take the cert that either KeyTools or BouncyCastle is signed with and look at the netscape cert type extension you can see that it has the following fields set:</p>
<pre class="code-example">
SSL Client Authentication,SSL CA,SMIME CA,Signature CA (87)
</pre>
<p>You will note that ObjectSigning is not there which is really odd for a &#8220;codesigning&#8221; certificate.</p>
<p>A bit of a google search brings up this link (I can&#8217;t find this doc on sun&#8217;s site)</p>
<p>http://www.archive.cc.yamaguchi-u.ac.jp/apl/jce1.2.1/BUGS.html</p>
<blockquote><p>
The JCE Code Signing CA uses Netscape CMS 4.1 to import Certificate Signing Requests (CSRs) from users and generate code-signing certificates that the users can utilize to sign their providers or exempt applications. The CSRs generated by keytool are in the PKCS#10 format. A bug in Netscape CMS 4.1 causes it to be unable to import a PKCS#10 request if it is directed to generate an object (code) signing certificate. But it can import a PKCS#10 request if it is directed to generate an SSL server certificate. This problem is expected to be fixed in Netscape CMS 4.2.</p>
<p>Workaround: The JCE Code Signing CA will issue SSL server certificates for code signing for now. It will be able to issue object signing certificates once we upgrade to Netscape CMS 4.2 after it becomes generally available
</p></blockquote>
<p>I presume that both we (baltimore) and BouncyCastle would need to get our codesigning certificates re-issued by Netscape CMS 4.2 before they would be accepted as individually signed jars by the java plugin.</p>
<p>Note:I emailed the java-security list about this almost 2 weeks ago with no response to date.</p>
<p>regards</p>
<p>kevin</p>
<p>Kevin O&#8217;Regan<br />
Team Lead<br />
KeyTools Pro Java, Baltimore Technologies.
</p></blockquote>
<p>Not wanting to take the time to figure out how to turn on the security debugging for the plugin (mentioned by Kevin earlier in his reply), I don&#8217;t know if this is the same issue or not, but my guess is that someone&#8217;s decided that Java 7 should actually get rid of some of the workarounds included over the years (at least for the pre-releases).  This choice could very well cause really old code (presumably like ROS&#8217;s kcrypto.jar) to break in new (or old) and exciting ways.</p>
<p>Even if I did take it further and figured out what was actually wrong, I&#8217;m not sure I could fix it this time.  In the amount of time I&#8217;ve spent arsing around with trying to get it working, I could&#8217;ve bought VMWare Workstation (twice!), so it isn&#8217;t really a very good use of my time.</p>
<p>It is a shame to see how poor 64-bit client operating system support is at the moment.  Even Vista doesn&#8217;t come pre-installed on new machines in 64-bit mode.  If I wanted a 32-bit machine, I&#8217;d have kept my old ones.  I don&#8217;t understand the mentality of why vendors think this is a good thing because 32-bit code works in backwards-compatible mode.  That&#8217;s like buying a V8 and then unhooking the fuel injectors to half the cylinders.  It just doesn&#8217;t make any sense.</p>
<p>Maybe after 64-bit x86 processors have been out for 5-6 years&mdash;oh wait&#8230;
</p>
]]></content:encoded>
			<wfw:commentRSS>http://atownley.org/2008/05/ros-kos-64-bit-linux/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>URI Opacity Revisited</title>
		<link>http://atownley.org/2008/04/uri-opacity-revisited/</link>
		<comments>http://atownley.org/2008/04/uri-opacity-revisited/#comments</comments>
		<pubDate>Mon, 28 Apr 2008 20:29:04 +0000</pubDate>
		<dc:creator>AST</dc:creator>
		
	<category>Web</category>
		<guid isPermaLink="false">http://atownley.org/2008/04/uri-opacity-revisited/</guid>
		<description><![CDATA[The question regarding &#8220;meaningful&#8221; or &#8220;human friendly&#8221; URIs comes up a lot if you&#8217;re trying to design a Website or Web-accessible information architecture (including a Web service).  This subject came up again recently on the SOA mailing list (I didn&#8217;t see the beginning of the thread, but this is where I started paying attention).
There [...]]]></description>
			<content:encoded><![CDATA[<p><img class="floatright" src="/images/pig-kisses-small.png" alt="Lipstick on a pig"/>The question regarding &#8220;meaningful&#8221; or &#8220;human friendly&#8221; URIs comes up a lot if you&#8217;re trying to design a Website or Web-accessible information architecture (including a Web service).  This subject <a href="http://tech.groups.yahoo.com/group/service-orientated-architecture/message/10215">came up again recently</a> on the <a href="http://tech.groups.yahoo.com/group/service-orientated-architecture/">SOA mailing list</a> (I didn&#8217;t see the beginning of the thread, but this is where I started paying attention).</p>
<p>There are some key points about URIs and opacity that anyone who&#8217;s really going to the trouble to design them should keep in mind (<a href="http://www.w3.org/2000/12/drm-ws/pp/connolly/slide7-0.html">originally presented by <a href="http://www.w3.org/People/Connolly/">Dan Connolly</a> at a W3C event back in 2001</a>):</p>
<h4>DO</h4>
<ul>
<li>&#8230;make URIs mnemonic when it&#8217;s convenient</li>
</ul>
<h4>DON&#8217;T</h4>
<ul>
<li>&#8230;depend on finding metadata in URIs</li>
<li>&#8230;depend on search engine heuristics regarding query parameters</li>
<li>&#8230;depend on file extensions</li>
<li><em>&#8230;depend on URIs for user interface</em></li>
</ul>
<p>Basically, don&#8217;t peek inside the URI.<a id="more-45"></a>  Notice there&#8217;s a lot more &#8220;don&#8217;ts&#8221; than &#8220;dos&#8221;.  Also notice if you&#8217;re tempted to provide mnemonic names like so (based on the example from the discussion thread):</p>
<pre class="code-example">
  http://www.example.com/parts/sku1234/orders/order56789
</pre>
<p>the natural extension is to start writing clients based on &#8220;constructing&#8221; URIs something like this:</p>
<pre class="code-example">
  def to_s
    "#{baseuri}/parts/sku#{sku}/orders/order#{order_id}"
  end
</pre>
<p>Taken a little further and you&#8217;ve a &#8220;REST API&#8221; (from <a href="http://www.flickr.com/services/api/misc.urls.html">flikr&#8217;s API documentation</a>):</p>
<blockquote><p>
Photo Source URLs</p>
<p>You can construct the source URL to a photo once you know its ID, server ID, farm ID and secret, as returned by many API methods.</p>
<p>The URL takes the following format:</p>
<pre>
http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{secret}.jpg
	or
http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{secret}_[mstb].jpg
	or
http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{o-secret}_o.(jpg|gif|png)
</pre>
</blockquote>
<p>Now, if you think this is a &#8220;hypermedia application&#8221;, you need some serious help.  The above represents an application programming interface with an explicit contract between the client and the server about what parameters it will accept and where they can be placed.  Notice as well where this explicit contract is defined:  <em>in another resource&mdash;the API specification</em>.  There&#8217;s no other source of information on how to retrieve a particular photo other than this documentation.  You, as the service consumer, also need to know a whole lot about flickr&#8217;s infrastructure layout (retrieved from somewhere), or you won&#8217;t be able to retrieve the photo.</p>
<p>Once you know the API, making the specified requests to the specified URIs &ndash; <em>constructed by the client</em> &ndash; will result in a predictable response from the server.  Functionally, it&#8217;s equivalent to:</p>
<pre class="code-example">
  server_ref = naming.get_remote_interface_ref("server-id")
  result = server_ref.get_photo(photo_id)
</pre>
<p>The only thing that&#8217;s different is the transport and the invocation mechanism.</p>
<h3>Hypermedia Applications</h3>
<p>Consider instead that a hypermedia application is &#8220;an application which uses associative relationships amongst information contained within multiple media data for the purpose of facilitating access to, and manipulation of, the information encapsulated by the data.&#8221; (<a href="http://users.ecs.soton.ac.uk/lac/LoweNHall/extracts/Hypermedia.html">Lowe &#038; Hall, 1998</a>).  They go on to say:</p>
<blockquote><p>
&#8220;The second aspect of the definition relates to the associative relationships amongst the information. What makes hypermedia different from other information management systems is that it utilises the complex associative inter-relationships amongst the information which underlies hypermedia applications - hence the common focus on non-linearity and networks.&#8221;
</p></blockquote>
<p>The only &#8220;complex associative inter-relationships&#8221; present in an API are its method name and parameters.  Even the preconditions and postconditions have to come from somewhere else.  Also, each function has no relationship to any other function in the API (unless it represents methods in a class).  Even if it&#8217;s a class and you determine the methods and signatures via reflection, there&#8217;s still no description of the order in which those methods should be called or how they relate to each other obtainable based on the API itself.</p>
<p>To me, the big thing about hypermedia is that the service provider &#8220;owns&#8221; all of the URIs and the resources, and the client only has a limited, uniform interface that it can use to talk to the server.  The interesting thing about this uniform interface isn&#8217;t the transfer protocol (HTTP in this case), it&#8217;s the hypermedia resource format exchanged between the client and the server that defines what operations are available and allows the client (which only knows how to render the content, follow links and submit forms, for example) to navigate the hypermedia application.  This format might be XHTML, it might be RDF, it might be XTM or it might be something totally different, but the point is that the client doesn&#8217;t go making <em>any</em> assumptions about how to access the information architecture of the service.</p>
<p>This characteristic is why hypermedia applications scale, and this is also why hypermedia applications don&#8217;t generally break if you start at the front door rather than trying to climb in the window by starting in the &#8220;middle&#8221; of the information space.  The service may choose to allow you multiple entry points (&#8221;front doors&#8221;) that it&#8217;s willing to guarantee (at least for a while), e.g. permalinks for blogs or other dynamic services, but that choice is entirely up to the service provider and the client can&#8217;t do anything to influence it.  The operations it performs should be totally bounded by the operations provided by the last hypermedia document received from the service, e.g. the service&#8217;s current application state.  It&#8217;s <em>totally</em> dependent on the service to tell it what it can do when and to what.</p>
<h3>The Big Problem</h3>
<p>While all the above discussion about hypermedia applications is great stuff, the big problem with interesting hypermedia applications is that you need to understand what all the links do.  With people, it&#8217;s easier, but with automated service consumers, it&#8217;s much harder.</p>
<p>Semantic technology is making progress in this area, and you can describe the available operations using RDF or XTM, but the &#8220;dark side&#8221; of the API is just sooo much simpler to develop, test and deploy.  Unfortunately, there&#8217;s no easy solution for this problem now, so there&#8217;s a lot of people building a lot of HTTP-based APIs, and there&#8217;s eventually going to be a lot of brittle, hard to gracefully evolve services out there that miss the real benefits of the uniform hypermedia interface.</p>
<h3>Final Thoughts</h3>
<p>The two most important things you need to remember about URIs are that:</p>
<ol>
<li>Whoever creates the URI (and I don&#8217;t mean the template), really owns the URI, and anyone&#8217;s interpretation of it other than its creator can&#8217;t be guaranteed to have the same semantics.</li>
<li>If you build &#8220;friendly&#8221;, non-opaque URIs, people <strong><em>will</em></strong> write clients that attempt to construct URIs based on either explicit documentation from the service provider, or based on implicit assumptions about how it works gained from observation.  If you don&#8217;t want this to happen because you&#8217;re not prepared to support it, then you&#8217;d better use really opaque URIs for your service&#8217;s information architecture.</li>
</ol>
<p>Ultimately, the service is still the final authority on what the URI means, because it is the one that does something interesting with it.  Once the client gives the URI to the service, it&#8217;s lost any control over what happens.  Sure, with HTTP-based APIs, there&#8217;s documentation, and certain things are supposed to happen, but there&#8217;s an awful lot of room for things to get out of sync.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://atownley.org/2008/04/uri-opacity-revisited/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Facelift</title>
		<link>http://atownley.org/2008/04/facelift/</link>
		<comments>http://atownley.org/2008/04/facelift/#comments</comments>
		<pubDate>Mon, 28 Apr 2008 08:38:14 +0000</pubDate>
		<dc:creator>AST</dc:creator>
		
	<category>About the Site</category>
		<guid isPermaLink="false">http://atownley.org/2008/04/facelift/</guid>
		<description><![CDATA[No, I&#8217;m not dead, and no, this blog isn&#8217;t abandoned&#8212;more like neglected&#8230;
Hard to believe that I haven&#8217;t posted anything since Feb &#8216;07.  I&#8217;ve  a few draft posts that I&#8217;d written last year that I may or may not finish and post at some stage, but there are a few things I want to [...]]]></description>
			<content:encoded><![CDATA[<p>No, I&#8217;m not dead, and no, this blog isn&#8217;t abandoned&mdash;more like neglected&#8230;<a id="more-44"></a></p>
<p>Hard to believe that I haven&#8217;t posted anything since Feb &#8216;07.  I&#8217;ve  a few draft posts that I&#8217;d written last year that I may or may not finish and post at some stage, but there are a few things I want to talk about again, so I&#8217;m making the time.</p>
<p>First off, the facelift.  One of the things I&#8217;ve been playing around with for some time is getting more into visual design.  Having spent some time doing this and being frustrated by not being able to get what was in my head out on to some kind of medium, things have recently started to get a bit better.  I&#8217;ve had some ideas for a new blog theme for a while now, but I just hadn&#8217;t gotten to it.</p>
<p>Overall, I&#8217;m pretty happy with this one.  The CSS is a lot cleaner before and so&#8217;s the layout, but I will say that PHP and I are <em>not</em> friends.  There&#8217;s still a few minor tweaks to do where I have to dig inside some wordpress functions since it insists on outputting embedded markup.  I have to say that I&#8217;m not too impressed with the way it generates content, but I&#8217;m sure it was done to make it as easy as possible.  Unfortunately, those things often turn out to be difficult to change once you change your context.</p>
<p>There&#8217;s more changes to come, but they&#8217;re more like minor surgery than a facelift and they&#8217;ll all be under the covers (hopefully).  I expect things to stabilize pretty quickly though.  In getting a bit more serious about managing the blog, I&#8217;ve come up with some wordpress tools that I&#8217;ll probably share once I&#8217;ve tested them a bit more.  I found that it was a RPITA to move wordpress through a normal release cycle from a dev to a staging and then production environment without interactively tweaking a bunch of things, so I&#8217;ve written some scripts to make this process a bit easier.</p>
<p>Hope you like the new look.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://atownley.org/2008/04/facelift/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Catching A Breath</title>
		<link>http://atownley.org/2007/02/catching-a-breath/</link>
		<comments>http://atownley.org/2007/02/catching-a-breath/#comments</comments>
		<pubDate>Fri, 02 Feb 2007 15:05:06 +0000</pubDate>
		<dc:creator>AST</dc:creator>
		
	<category>About the Site</category>
	<category>Life</category>
		<guid isPermaLink="false">http://atownley.org/2007/02/catching-a-breath/</guid>
		<description><![CDATA[Needless to say that the end of 2006 and the beginning of 2007 has been a little hectic.  Most sane people wouldn&#8217;t try to move house, start a company and have a baby all at the same time, but nobody in this household ever made many claims to sanity. 

I&#8217;ve now updated both the [...]]]></description>
			<content:encoded><![CDATA[<p>Needless to say that the end of 2006 and the beginning of 2007 has been a little hectic.  Most sane people wouldn&#8217;t try to move house, start a company and have a baby all at the same time, but nobody in this household ever made many claims to sanity. <img src='http://atownley.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<a id="more-42"></a><br />
I&#8217;ve now updated both the <a href="http://archistry.com/">Archistry website</a> and this one with some recent news.  First, <a href="http://www.innoq.com/blog/st/">Stefan Tilkov</a> and the rest of the good folks over at <a href="http://www.infoq.com/">InfoQ.com</a> published an article I wrote at the end of the year to try and cut through some of the then-current hype around BPM as being the &#8220;cure-all&#8221; enabler for business agility titled <a href="http://www.infoq.com/articles/townley-hard-look-at-bpm">&#8220;A Hard Look at the Organizational Implications of BPM&#8221;</a>.  From the inbound web traffic, a few people have been reading it, but there aren&#8217;t any comments to date.  Granted, the article is more business focused than the majority of the content on the InfoQ site, so maybe that&#8217;s the problem.  I&#8217;d be interested in any feedback from people who read the article, either here or on the InfoQ site.  I will warn would-be commentors that I don&#8217;t automatically receive notifications of comments on that site, so it may take a few days before I see them.</p>
<p>Secondly, I&#8217;m very happy to say that OASIS has accepted my proposal for a presentation at the OASIS Symposium in April.  I&#8217;ll be expanding on some of the ideas that I discussed in my <a href="http://atownley.org/2006/12/is-rest-api-an-oxymoron/">&#8220;Is &#8216;REST API&#8217; an Oxymoron?&#8221;</a> post and putting them more solidly in a business context.  The presentation, &#8220;Interactive SOA:  Towards Content-Centric Services&#8221;, will be part of the session on the challenges ahead for e-Business and e-Government.  The presentation represents some on-going research into the challenges around enabling information services within an SOA using hypermedia.  Hopefully, sometime in 2007 I&#8217;ll be able to publish some more technical information relating to the research, but doing so without understanding how it will deliver measurable value to organizations isn&#8217;t in line with what we&#8217;re about.</p>
<p>Finally, I&#8217;ve updated the <a href="/calendar/">Event Calendar</a> to include links to the presentation slides that are publicly available.  I&#8217;ve added my slides from both the first US Government&#8217;s SOA for E-Government conference as well as the OASIS Adoption Forum in London.  I need to check with the InfoSeCon organizers to see if I can publish my presentations from last year or not, because the proceedings were only made available to conference attendees.</p>
<p>If you have any questions/comments/problems with accessing any of the information, please drop me an email at any of the addresses on the <a href="/about/">About page</a>.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://atownley.org/2007/02/catching-a-breath/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>ROS vs. Linux: Making It Work</title>
		<link>http://atownley.org/2007/01/ros-vs-linux-making-it-work/</link>
		<comments>http://atownley.org/2007/01/ros-vs-linux-making-it-work/#comments</comments>
		<pubDate>Sun, 28 Jan 2007 18:16:11 +0000</pubDate>
		<dc:creator>AST</dc:creator>
		
	<category>Rants</category>
		<guid isPermaLink="false">http://atownley.org/2007/01/ros-vs-linux-making-it-work/</guid>
		<description><![CDATA[
Updated 2007-24-05:  After trying to do this again, I realized that I left out some pretty crucial stuff that cost me about 30 min to try and find again when I was setting up a new machine.  Apologies for this. &#8212; ast

I finally completed the convoluted identity proofing process required by the Irish [...]]]></description>
			<content:encoded><![CDATA[<div class="ed">
Updated 2007-24-05:  After trying to do this again, I realized that I left out some pretty crucial stuff that cost me about 30 min to try and find again when I was setting up a new machine.  Apologies for this. &#8212; ast
</div>
<p>I finally completed the convoluted identity proofing process required by the Irish Revenue Commissioners&#8217; <a href="http://www.ros.ie/">Revenue Online System (ROS)</a> so that I could view/file all of the necessary tax forms for <a href="http://www.archistry.com/">Archistry</a> myself.  The registration process/identity proofing for business customers theoretically involves the following 3 steps:<a id="more-41"></a></p>
<ol>
<li>Application for a ROS Access Number</li>
<li>Apply for your digital certificate</li>
<li>Retrieve your digital certificate</li>
</ol>
<p>Each one of the first two steps involves submission of details to the ROS site and waiting for a letter from Revenue with a code or password that must be used to get to the next step, so there can be a considerable amount of time involved in completing the whole process before you can actually <em>use</em> the service.</p>
<p>&#8220;For your own security&#8221;, ROS requires 2-factor authentication to enter the site as well as to submit any particular tax form.  The authentication is based on the digital certificate you retrieve from ROS as well as a password you create for the certificate.  This password can be subsequently changed after you initially provide it.  Since you need to store this certificate locally, ROS decided that the best way to implement the authentication mechanism was using both a Java Applet and a custom package, KCrypto (not to be confused with the KDE package by the same name), that includes software from Baltimore to handle the certificate operations.</p>
<p>Problems arise when you aren&#8217;t running Windows or MacOS, and, according to the <a href="http://www.ros.ie/PublisherServlet/requirements/">system requirements page</a> even though you can execute the pre-requisite applet, Unix or Linux isn&#8217;t yet a supported platform&mdash;even though it is promised &#8220;soon&#8221;.  The root of the issue is really two-fold:  first, on an operating system where you just can&#8217;t throw files higgledy-piggledy anywhere you like, the applet installer doesn&#8217;t have the permissions to write the files, and the running applet doesn&#8217;t appear to make any attempt to put the certificates anywhere other than &#8220;C:\ROS&#8221;.  Even if MacOS X is a supported platform, from the comments on <a href="http://www.tomrafteryit.net/irelands-revenue-online-service-ros-and-mac-os-x/">a blog post from Tom Raftery in 2004</a>, people are still having trouble using ROS under MacOS X in September 2006.  <a href="http://www.winehq.com/pipermail/wine-users/2006-December/024082.html">Other people have tried using Wine</a> to get the ROS applet to work under Linux, but they didn&#8217;t have much luck either.</p>
<p>What&#8217;s that?  &#8220;Java is platform independent; you know, &#8216;write once, run anywhere&#8217;,&#8221; you say?  &#8220;But, it&#8217;s a Web application,&#8221; you say?</p>
<p>Not quite.</p>
<p>Even with all those obstacles, it <em>is</em> possible to get it working natively under Linux if you have a little patience and can tolerate a few display glitches.</p>
<h3>
Making ROS work under Linux<br />
</h3>
<p><em>NOTE:  ROS does not officially support Linux, so these instructions are provided &#8220;as is&#8221; and do not imply any sort of warranty or liability by me if you have problems with your taxes if you try and use Linux to access ROS.  Use at your own risk.</em></p>
<p>I&#8217;m using Firefox 2 under Linux with the JRE 1.4 plug-in.  Everything works up until you attempt to install the applet as part of Step #3 for Retrieval of your Certificate.  I managed to make everything work, but I had to re-trace my steps back to retrieval of the certificate because once the required libraries are installed, it kept asking me to log in.  I hadn&#8217;t gotten the certificate yet, so the log in drop-down for certificates was empty.</p>
<p>When attempting to download and install the supporting applet, you will first encounter an error.  Using information from the Java Console, you can identify exactly what the issue is.  Because I wasn&#8217;t clever enough to save them, I can&#8217;t tell you exactly what they were, but you will see lots of &#8220;permission denied&#8221; errors at various points during the install.  To display the Java Plug-in Console, run <code>$JAVA_HOME/jre/bin/ControlPanel</code> and set it to &#8220;always display&#8221; before you start trying to install the ROS applet.</p>
<p>At some point, you will get a message about downloading kcrypto-sun-1.4.jar.  You will need to manually download this file from <a href="https://www.ros.ie/applets/kcrypto-sun-1.4.jar">https://www.ros.ie/applets/kcrypto-sun-1.4.jar</a> and copy it to:  <code>$JAVA_HOME/jre/lib/ext/</code>.</p>
<p>This is the key step.  Once you have done this, the applet installation will work and you should be able to start at the ROS &#8220;Home Page&#8221; and start the process of retrieving your certificate again.</p>
<h3>
Issues<br />
</h3>
<p>Once the installation issue is solved, you will have to deal with a set of applets built using absolute positioning with the Windows control metrics.  This means that there are overlaps between the controls and the height of some of the text fields will prevent you from seeing what you&#8217;re typing.  Most of these aren&#8217;t anything but annoying.</p>
<p>As previously mentioned, your certificates will be stored in <code>$HOME/C:/ROS/</code>, which, while annoying, seems to work.</p>
<p>If I notice anything else as I use the service more, I&#8217;ll update this article with the new information.  Otherwise, if you&#8217;re determined to use Linux for running your business in Ireland, I hope this article helps you get around some lazy coding on the part of the ROS team.</p>
<p>It is quite clear that ROS was intended first and foremost as a Windows service.  Having written real cross-platform Java applications using JFC in the past, it isn&#8217;t generally too hard to do it, if that&#8217;s what you&#8217;re starting out to do and you have some understanding of the target platforms.  Bolting it on later nearly always results in a number of places where people make assumptions about where things live (having a drive C: on something which isn&#8217;t Windows, for example) that could&#8217;ve been avoided with a bit more planning at the beginning.</p>
<div class="ed">
Fixed the following errors:</p>
<ul>
<li>It is nearly impossible to find the download URL for the kcrypto jar if you miss it the first time.  I thought it was easier than it was, but, on trying to do it again, it should&#8217;ve been part of the post.</li>
<li>I erroneously stated the extension directory was <code>$JAVA_HOME/jre/lib/extensions</code> rather than <code>$JAVA_HOME/jre/lib/ext</code>.</li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRSS>http://atownley.org/2007/01/ros-vs-linux-making-it-work/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Alexandre Ralph Townley</title>
		<link>http://atownley.org/2007/01/alexandre-ralph-townley/</link>
		<comments>http://atownley.org/2007/01/alexandre-ralph-townley/#comments</comments>
		<pubDate>Sun, 21 Jan 2007 19:15:03 +0000</pubDate>
		<dc:creator>AST</dc:creator>
		
	<category>Life</category>
		<guid isPermaLink="false">http://atownley.org/2007/01/alexandre-ralph-townley/</guid>
		<description><![CDATA[After keeping us in suspense since 3 AM Saturday morning, Alexandre Ralph Townley finally made his appearance in the world at 7:15 PM.  He weighed ~7.5 lbs (3.5 kg) and was 19.7 inches (50 cm) long.
All of us are tired, but doing very well.  We would like to thank Geraldine and all of [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/images/alex1.jpg" alt="Alexandre Ralph Townley" align="right"/>After keeping us in suspense since 3 AM Saturday morning, Alexandre Ralph Townley finally made his appearance in the world at 7:15 PM.  He weighed ~7.5 lbs (3.5 kg) and was 19.7 inches (50 cm) long.</p>
<p>All of us are tired, but doing very well.  We would like to thank Geraldine and all of the other midwives and staff who helped bring little Alex into the world.</p>
<p>For family and friends who want to keep track of how the little fella is doing, we&#8217;ll be putting up a separate site for the family soon.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://atownley.org/2007/01/alexandre-ralph-townley/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Remote Support with WebEx</title>
		<link>http://atownley.org/2006/12/remote-support-with-webex/</link>
		<comments>http://atownley.org/2006/12/remote-support-with-webex/#comments</comments>
		<pubDate>Fri, 22 Dec 2006 11:09:02 +0000</pubDate>
		<dc:creator>AST</dc:creator>
		
	<category>Enabling the Enterprise</category>
		<guid isPermaLink="false">http://atownley.org/2006/12/remote-support-with-webex/</guid>
		<description><![CDATA[While I was going through some news articles about the latest ramifications of security breaches for identity theft (and waiting impatiently for Firefox to render the undulating, add-ridden, non-printer-friendly website page from a major publisher), I actually read one of the banner adds:  Use WebEx for remote support.

I used to use WebEx when I [...]]]></description>
			<content:encoded><![CDATA[<p>While I was going through some news articles about the latest ramifications of security breaches for identity theft (and waiting impatiently for Firefox to render the undulating, add-ridden, non-printer-friendly website page from a major publisher), I actually read one of the banner adds:  Use WebEx for remote support.<br />
<a id="more-39"></a><br />
I used to use WebEx when I worked for BearingPoint for meetings with the teams in the US, and while I was annoyed that it doesn&#8217;t really support Linux, I did find that it was a relatively effective way to facilitate remote meetings for both presentations and product demos.  However, I hadn&#8217;t really considered that you could use it for remote support, but obviously, <a href="http://www.webex.com/web-seminars/view_recording/662405818">the WebEx folks certainly have</a> (btw, I didn&#8217;t watch it, I just did a search on their site to see what I could find about it).</p>
<p>Anyone who&#8217;s been in IT for a while and who has had to try and help a family member do something &#8220;obvious and simple&#8221; under Windows knows the frustration of trying to do remote support the &#8220;old way&#8221;.  You can talk to the person, but you&#8217;ve no idea what they&#8217;re doing, and you&#8217;ve no idea what they really see in front of them if they&#8217;re not an experienced computer user and know hot to accurately describe the problem they&#8217;re having (and if they were, you probably wouldn&#8217;t be talking to them about computer problems anyway).</p>
<p>Enter WebEx.  I have to say that I think this is a brilliant idea.  For those of you who haven&#8217;t used WebEx, it provides you with a Java client that allows two or more parties to hold virtual meetings.  The meeting moderator can share their desktop with the rest of the meeting, but they can also pass control for desktop sharing to other members of the group, so that they can give presentations or whatever.  The installation of the WebEx client is relatively easy based on following a URL that can be sent in an email, and then all the other people need to do is connect to the virtual meeting and dial into the conference call number or any other number that you choose to set up.  Imagine then if you, as a meeting moderator, could give control of desktop sharing to your mother who couldn&#8217;t figure out where the &#8220;www bar&#8221; went in her Web browser.  In about 5 seconds you would realize that somehow it had been either full-screened or that it had been disabled from the View menu.  Problem solved.</p>
<p>Now, if you&#8217;re a professional support organization, compare the actual cost of 10,000 5-10 minute support calls vs. the cost of 3500 20-30 minute support calls&mdash;not only in terms of time, but in terms of the effectiveness of your customer support function.  The benefits and cost savings would be fairly significant any way you cut it.</p>
<p>Of course, WebEx isn&#8217;t without its problems as well.  A few people at BearingPoint had trouble getting it installed/upgraded or just using it&mdash;and these were well-paid, experienced IT professionals, so maybe the reality isn&#8217;t quite in line with the vision yet.  However, I don&#8217;t think it would take much effort on the part of WebEx to address these issues to make the installation and usability much better for the non-technical user.  Also, since broadband in the home is becoming more ubiquitous, it means that you potentially can offer this level of support to more than just your corporate customers with a high-speed Internet connection.</p>
<p>The down side is that WebEx isn&#8217;t exactly cheap, but then you need to evaluate that cost against the benefits your organization can achieve in improving the overall efficiency and quality of its customer support.  For some organizations, this will not be an option, but I think it is something that any company offering any kind of IT product support to end users should really consider carefully.  It isn&#8217;t perfect, but it is a whole lot better than the situation painted by the very old computer support joke about the computer not working and the user eventually needing a flashlight to see if it was plugged in or not.  Why?  Well, you see, the power had been cut to the building&#8230;  Many times seeing the situation for yourself is worth more than 1,000 words; it can actually be worth cold, hard cash.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://atownley.org/2006/12/remote-support-with-webex/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>V for Vendetta</title>
		<link>http://atownley.org/2006/12/v-for-vendetta/</link>
		<comments>http://atownley.org/2006/12/v-for-vendetta/#comments</comments>
		<pubDate>Sat, 16 Dec 2006 23:00:12 +0000</pubDate>
		<dc:creator>AST</dc:creator>
		
	<category>Politics</category>
		<guid isPermaLink="false">http://atownley.org/2006/12/v-for-vendetta/</guid>
		<description><![CDATA[Watch it.  Think about it.  Don&#8217;t let it happen to us.

]]></description>
			<content:encoded><![CDATA[<p>Watch it.  Think about it.  Don&#8217;t let it happen to us.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://atownley.org/2006/12/v-for-vendetta/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Is &#8220;REST API&#8221; an Oxymoron?</title>
		<link>http://atownley.org/2006/12/is-rest-api-an-oxymoron/</link>
		<comments>http://atownley.org/2006/12/is-rest-api-an-oxymoron/#comments</comments>
		<pubDate>Sat, 16 Dec 2006 12:41:18 +0000</pubDate>
		<dc:creator>AST</dc:creator>
		
	<category>SOA</category>
		<guid isPermaLink="false">http://atownley.org/2006/12/is-rest-api-an-oxymoron/</guid>
		<description><![CDATA[Even though I had to temporarily drop out of the ongoing discussion on the service-orientated-architecture Yahoo group/mailing list, which prompted my last post, to focus on a few high-priority interrupts for a while, my brain hasn&#8217;t fully disengaged from the discussion.
One of the light bulbs that went off in my head during the aforementioned discussion [...]]]></description>
			<content:encoded><![CDATA[<p>Even though I had to temporarily drop out of the ongoing discussion on the <a href="http://tech.groups.yahoo.com/group/service-orientated-architecture/">service-orientated-architecture</a> Yahoo group/mailing list, which prompted <a href="http://atownley.org/2006/12/socio-political-and-commercial-motivations-for-ws/">my last post</a>, to focus on a few high-priority interrupts for a while, my brain hasn&#8217;t fully disengaged from the discussion.</p>
<p>One of the light bulbs that went off in my head during the aforementioned discussion was it <em>finally</em> clicked as to what the uniform interface constraint <em>&#8220;hypermedia as the engine of application state&#8221;</em> (<a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_1_5">Fielding 2000, &sect;5.1.5</a>) actually means (to me, anyway).  Now that I think I understand it, I also understand why it is so hard for people to really get what it means:  most of the people trying to figure this out are experienced, traditional programmers.  What do traditional programmers do?  If they&#8217;re any good and they&#8217;re dealing with large-scale distributed systems, they spend an awful lot of time on the design of the &#8220;perfect&#8221; API for their remote components.    Perfect in this context means that it is the optimal trade-off between all of the architectural constraints and system requirements to deliver an efficient distributed system.</p>
<h3>
API Brain Damage<br />
</h3>
<p>I&#8217;m going to go out on a limb here, but I think this &#8220;API brain damage&#8221; is part of why we haven&#8217;t been able to significantly advance the state of the art of software system design over the last 30 years.  We all have it, because from the moment you learn what a compiler is and get started with programming they&#8217;re all around you.  As you develop your own skills and experience, you&#8217;re exposed to both good and bad API design, and this all gets mixed in together in our little brains so that each of us develops their own perspective on what is a &#8220;good&#8221; vs. a &#8220;bad&#8221; API.  Most of us can, by this stage, pass such a judgment in 30 minutes or less.</p>
<p>However, I think the effects of this brain damage are to create some pretty fundamental assumptions about how computer systems work.  If you need programmatic access (here it is again, reinforced by the terms we use to describe our requirements) to a set of functionality (for kicks, lets call it a <em>service</em>), then the <em><strong>first</strong></em> thing we as programmers want to know is &#8220;where&#8217;s the API?&#8221;.  It&#8217;s ingrained in our very being because of years and years of positive reinforcement.  We all have it&#8230;and I think it&#8217;s a tragic mistake.</p>
<p>Even people who have a pretty good understanding of what REST is get pulled back into the primordial slime just as they&#8217;re about to sprout legs and walk upright.  Joe Gregorio&#8217;s really good article on building a RESTful system, <a href="http://www.xml.com/pub/a/2005/04/06/restful.html"><em>Constructing or Traversing URIs?</em></a>, is a prime example of this type of thinking.  I&#8217;m not criticizing Joe here, I&#8217;m criticizing the way we, as software architects and developers, have been trained to think.</p>
<p>The point of Joe&#8217;s article is that hypermedia is about link traversal, but that because the possible URI space is nearly infinite, it&#8217;s reasonable to publish recipes for link construction <em>under the argument that this is what HTML Forms using the GET method do anyway</em> (emphasis added).  This &#8220;optimization&#8221; undermines what to me is the whole point of &#8220;hypermedia as the engine of application state&#8221;: link traversal, and this is recognized by the rest of the article Joe wrote.  As soon as you start down this slippery slope, you&#8217;ve lost all of the advantages I see in even bothering with hypermedia at all.  It no longer becomes part of the application, it&#8217;s just data that&#8217;s shipped around via some transfer mechanism, in this case HTTP.</p>
<h3>
Hypermedia Applications<br />
</h3>
<p>Many things have contributed to my opinion about this topic, including this statement by Eric Newcomer recently on the mailing list:</p>
<blockquote><p>I should just note that comparing the Web to WS-* is an apples-to-oranges comparison (one being an application and the other being a collection of specifications).</p></blockquote>
<p>With apologies to Eric, I initially sorta dismissed this statement because I was focused on my conversation with Steve Jones&mdash;but I shouldn&#8217;t have.  Eric is exactly right here.  The World Wide Web is a hypermedia <em>application</em>, not just a collection of specifications.  Again, our software development training doesn&#8217;t help us here very much.  Good ol&#8217; functional decomposition makes us (well, me at least) want to see the Web as HTTP (<a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html">RFC 2616</a>), URIs (<a href="http://www.gbiv.com/protocols/uri/rfc/rfc3986.html">RFC 3986</a>), MIME types (<a href="http://en.wikipedia.org/wiki/MIME">Wikipedia entry to set of related RFCs</a>), HTML/XHTML (<a href="http://www.w3.org/MarkUp/">W3C markup specifications</a>) and HTML forms (<a href="http://www.w3.org/TR/html4/interact/forms.html">W3C recommendation</a> and <a href="http://tools.ietf.org/html/rfc2388">RFC 2388</a>).</p>
<p>In actual fact, it&#8217;s all of those working together to provide, as Eric said, the Web as a distributed hypermedia application (which, if I remember correctly is a point also made by Roy Fielding himself in the dissertation).  The Web works because both user agents (browsers) and the server applications use all of these specifications together to expose a set of functionality to the interactive user.  There is no a priori agreement between the browser and the Web server as to how the <em>information service</em> built on these specifications used, but because of agreement on how these specifications are used <em>together, as an application</em>, it doesn&#8217;t matter if today, CNN.com is built using Microsoft ASP, and tomorrow it&#8217;s built on PHP.  Apart from the application of the <a href="http://www.w3.org/Provider/Style/URI">&#8220;Cool URIs Don&#8217;t Change&#8221; principle</a>, if a user starts from <a href="http://www.cnn.com/">http://www.cnn.com</a>, they will <em>always</em> be able to utilize the CNN news service via their browser&#8217;s implementation of those specifications and the implicit agreement of CNN to publish its service in accordance with them too.</p>
<p>The moment that CNN or any other service provider publishes a recipe, guideline or specification of how to access specific parts of that service, e.g. the latest headlines may be found at <code>http://www.cnn.com/headlines/</code> or <code>http://headlines.cnn.com/</code> or whatever, as Joe points out in the article, they&#8217;ve made an implicit commitment to support that API (because that&#8217;s what it essentially is) for a period of time.  When someone comes along an implements a specialized headline grabber that follows that API, and CNN decides to change it due to idle whim or genuine business need, that headline grabber client is now broken.  If it&#8217;s just a single user, maybe this isn&#8217;t a big deal, but if it is every 3rd-party trading partner of your organization, the impact is a bit more significant.</p>
<p>A hypermedia application such as <a href="http://www.atomenabled.org/developers/syndication/atom-format-spec.php">Atom</a> or <a href="http://blogs.law.harvard.edu/tech/rss">RSS</a> and content negotiation via MIME types, HTTP accept headers and embedded <code>&lt;link/></code> tags mean that this sort of evolution could happen without breaking the client&mdash;provided there is agreement on the application semantics of how those things should be both used and interpreted between clients and servers.  Anything else means you&#8217;re back to brittle, API based systems that can no longer evolve independently of each other.</p>
<h3>
Closing Thoughts<br />
</h3>
<p>I don&#8217;t have all of the answers here, but I think that the notion of a &#8220;REST API&#8221; is an oxymoron because REST is about dynamic evolvability of clients and servers based on codified understandings of previously agreed application semantics.  This means that HTML browsers and Web servers agree to provide the Web application in a way that both can understand and use, but it also means that RSS/Atom feed readers and server feeds agree on the way they interact to both access and provide the syndication application.</p>
<p>What I&#8217;m saying is that the nature and specification of the hypermedia application is as key to REST as how you use the HTTP verbs.  However, since the HTTP verbs are essentially an API that programmers can get their heads around, that&#8217;s where everyone&#8217;s focus is at the moment.  I think this is a diversion from where people should be thinking about REST.  As long as you agree the semantics of the hypermedia application (HTML+Forms+MIME+HTTP or Atom+XHTML+MIME+HTTP), the way that application is implemented <em><strong>on the server</em></strong> should be an <em>implementation detail</em> and not something exposed to clients in terms of an API.</p>
<p>If the hypermedia constructs being used to describe the interaction between the clients and servers are not rich enough to abstract these things so the client needs to <em>know</em> that it&#8217;s supposed to POST data to URI <em>x</em> rather than being able to simply traverse hypermedia provided by the server (meaning the operation, data and location are provided to the client in a way it can understand rather than having any of this hard-coded as client implementation logic), then the hypermedia application being used (and <em>not</em> the information service) has not been sufficiently defined.  Using the existing and emerging specifications for describing content and interaction, it should be possible to specify the application.  If it isn&#8217;t, then we need to be spending our efforts on a way to do that rather than arguing about the RESTfulness of so-and-so&#8217;s latest HTTP-based API.</p>
<p>To me, this is the real problem to be solved in implementing RESTful systems.  I think there are people who are starting to realize this need implicitly, but I think it&#8217;s time we made that need an explicit requirement of systems implemented in the REST style.  If you can&#8217;t describe the interaction via hypermedia and link traversal semantics <em>only</em>, then I don&#8217;t think the system truly meets the requirements of REST as I understand them today.  The uniform interface is hypermedia, not HTTP.  Focusing on HTTP is not seeing the forest for the trees.</p>
<p>Comments, flames and discussion are more than welcome.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://atownley.org/2006/12/is-rest-api-an-oxymoron/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Socio-political and Commercial Motivations for WS-*</title>
		<link>http://atownley.org/2006/12/socio-political-and-commercial-motivations-for-ws/</link>
		<comments>http://atownley.org/2006/12/socio-political-and-commercial-motivations-for-ws/#comments</comments>
		<pubDate>Sat, 09 Dec 2006 13:50:23 +0000</pubDate>
		<dc:creator>AST</dc:creator>
		
	<category>SOA</category>
		<guid isPermaLink="false">http://atownley.org/2006/12/socio-political-and-commercial-motivations-for-ws/</guid>
		<description><![CDATA[I can appreciate Gervas&#8217; position as a &#8220;neutral, non-technical observer&#8221; to the whole ROA/SOA thread, but I think the root of the problems in bright people having difficulty clarifying basic issues about REST is entirely one of &#8220;what they know&#8221; and &#8220;where they are coming from&#8221;.
I have tremendous respect for Steve and everyone else on [...]]]></description>
			<content:encoded><![CDATA[<p>I can appreciate <a href="http://tech.groups.yahoo.com/group/service-orientated-architecture/message/6720">Gervas&#8217; position as a &#8220;neutral, non-technical observer&#8221;</a> to the whole ROA/SOA thread, but I think the root of the problems in bright people having difficulty clarifying basic issues about REST is entirely one of &#8220;what they know&#8221; and &#8220;where they are coming from&#8221;.</p>
<p>I have tremendous respect for Steve and everyone else on the list [<a href="http://tech.groups.yahoo.com/group/service-orientated-architecture/">the service-oriented-architecture list</a>] that I&#8217;ve interacted with, so this isn&#8217;t personal in any way.  I think it is important to understand a bit of industry history in light of lots of smart people and vendors trying to figure out how to field an SOA that works.</p>
<p>A lot of us on this list have been doing distributed computing for a long time.  Most of us have done a lot of one or more of CORBA and DCOM before RMI/EJB came on the scene and certainly before XML-RPC and SOAP came on the scene (some people have been doing it earlier than that).</p>
<p>The thing about a programming paradigm is that to get any good at actually doing something with it, it takes a lot of time and effort to learn how to think and design in a way that takes advantage of it.  CORBA, DCOM and EJB and the like are about extending the local programming model to remote systems in a more-or-less coherent way.</p>
<p>All of them are object-oriented in that you create a service with a defined set of capabilities and a given interface.  This interface is normally designed in similar ways to local interfaces in that it exposes a fairly rich and domain-specific API for interaction between clients and servers.  Most of the early mistakes people make in developing CORBA, DCOM and EJB projects are in the granularity of those interfaces because they forget or don&#8217;t consider the effect of the cost and overhead of communicating over the network vs the costs within the same address space, e.g. &#8220;normal&#8221; objects.</p>
<p>Learning how to optimize the tradeoff between a rich, domain-specific interface and one that is efficient is one of the key things in learning how to design and develop successful distributed object systems.</p>
<p>If you take a look at <a href="http://www-128.ibm.com/developerworks/library/co-tmline/index.html">the history involved in developing these systems</a>, formalization of CORBA started in 1990 at the OMG, DCOM surfaced around 1993 and RMI and EJB emerged in 1997.  Getting all of these technologies implemented took a lot of work because most of them are naturally fairly complex.  It isn&#8217;t easy trying to make a remote system look like it is a local one.  Lots of vendors produced a lot of products, and some companies were founded around some of these technologies.</p>
<p>While each of these technologies is good (to varying degrees) at providing a distributed object computing platform within a local physical environment, they didn&#8217;t scale very well over long distances or between enterprises.  Most of them required a large number of proprietary ports to be opened in company networks, which has security implications not to mention just the operational issues of making it happen.</p>
<p>On the other hand, HTTP and Web pages nicely sailed through port 80 which, in most cases, was already open.  Both vendors and customers said, &#8220;Wouldn&#8217;t it be great if we could do things like CORBA, but using HTTP?&#8221;  Enter XML, XML-RPC and SOAP in 1999-2000.</p>
<p>Now, if you were a vendor that had spent millions in R&#038;D in getting distributed objects computing working in CORBA, DCOM and EJB but had come up against limiting factors such as complexity of deployment (all those ports), lack of interoperability between CORBA, DCOM and EJB and the way the Web was influencing the development of applications, what would you do?</p>
<p>I bet you&#8217;d figure out how to take all those things you&#8217;d been doing and make them work over ubiquitous Web protocols.  I&#8217;m not saying this is necessarily bad and doesn&#8217;t have its place, but there are two other big reasons why you might think it would be reasonable to do this:</p>
<ul>
<li>it is the way major software vendors had been developing systems since as early as 1990, meaning</li>
<li>there was a legion of software developers who understood how to develop distributed systems using those concepts and mechanisms</li>
</ul>
<p>Vendors are protecting their investment because they need to stay in business and keep their shareholders happy, but somehow make their distributed computing technologies work together as more and more people are running heterogeneous environments not only internally, but across trading partners.</p>
<p>The Web is different, however.</p>
<p>In the same way that messaging-oriented middleware (MOM) isn&#8217;t the same way of thinking about solving distributed computing problems as using distributed objects, building successful distributed hypermedia applications using REST for either human/computer or computer/computer interaction requires a shift in the way you think about the problem.</p>
<p>If you can&#8217;t suspend your assumptions about how things ought to work to understand how they do work in a different environment, e.g. MOM or REST, you&#8217;ll forever be frustrated and not understand the advantages and disadvantages of this approach over any other.  From my perspective on the recent ROA/SOA thread, this is where we are and why reaching any sort of common understanding is and will continue to be so difficult.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://atownley.org/2006/12/socio-political-and-commercial-motivations-for-ws/feed/</wfw:commentRSS>
		</item>
	</channel>
</rss>
