<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Stefan Tilkov&apos;s Random Stuff</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/" />
    <link rel="self" type="application/atom+xml" href="http://www.innoq.com/blog/st/atom.xml" />
    <id>tag:www.innoq.com,2007-11-25:/blog/st//3</id>
    <updated>2009-06-29T06:47:08Z</updated>
    <subtitle>Thoughts on Architecture, REST and SOA, Model-Driven Development, and whatever else crosses my path</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Publishing Platform 4.0</generator>

<entry>
    <title>Devoxx &apos;08 REST Patterns and Antipatterns Talk</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/06/devoxx_08_rest_patterns_and_an.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2971</id>

    <published>2009-06-29T06:46:26Z</published>
    <updated>2009-06-29T06:47:08Z</updated>

    <summary>The good folks at Parleys have published a video of my talk at Devoxx &apos;08; watch it and be impressed by their super-slick viewer application. I put up the slides (12 MB PDF) a while ago....</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p>The good folks at Parleys have <a href="http://tinyurl.com/ksaksc">published a video</a> of my talk at Devoxx '08; watch it and be impressed by their super-slick viewer application. I put up <a href="http://www.innoq.com/blog/st/presentations/2008/2008-12-10-REST-Patterns--Devoxx.pdf">the slides</a> (12 MB PDF) a while ago.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Paul Downey&apos;s ETSI 2.0 Talk</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/06/paul_downeys_etsi_20_talk.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2970</id>

    <published>2009-06-26T16:51:20Z</published>
    <updated>2009-06-26T16:51:22Z</updated>

    <summary>Paul Downey&apos;s slides with explanations just rock....</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p>Paul Downey's <a href="http://blog.whatfettle.com/2009/06/22/etsi-2-0/">slides with explanations</a> just rock.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Do We Need Slides?</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/06/do_we_need_slides.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2969</id>

    <published>2009-06-23T19:35:05Z</published>
    <updated>2009-06-23T19:41:04Z</updated>

    <summary>I did an introductory session on REST at SEACON today – pretty much the stuff I&apos;ve been talking about for quite some time now. There was a twist, though: The projector (or my laptop, or the connection between them) didn&apos;t...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p>I did an introductory session on REST at <a href="http://www.sigs-datacom.de/sd/kongresse/seacon_2009/index.htm">SEACON</a> today – pretty much the stuff I've been talking about for quite some time now. There was a twist, though: The projector (or my laptop, or the connection between them) didn't work, so I fiddled around with it for a minute, and then decided to do the talk without slide support. </p>

<p>Interestingly, I think it went better than usual – I knew exactly what I wanted to say, and I didn't feel the need to get through any material. Feedback indicated that the audience liked it, too. </p>

<p>Maybe I should do this more often. Slides – even if they're not text-oriented bullet point catastrophes – may be overrated.</p>

<p>Update: <a href="http://www.innoq.com/blog/st/presentations/2009/2009-06-22-REST--SEACON.pdf">Here are the slides</a> in case you're interested (in fact, it's only the part that I think I covered).</p>
]]>
        

    </content>
</entry>

<entry>
    <title>REST and Transactions</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/06/rest_and_transactions.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2912</id>

    <published>2009-06-17T05:45:19Z</published>
    <updated>2009-06-17T05:47:01Z</updated>

    <summary>Arnon Rotem-Gal-Oz has a nice blog entry on RETRO (the whole rest-discuss thread is also neatly summarized by Mark Little for InfoQ): On the good side, I have to say, it is one of the best RESTful models I’ve seen...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p><a href="http://www.rgoarchitects.com/nblog/2009/06/15/TransactionsAreBadForREST.aspx">Arnon Rotem-Gal-Oz</a> has a nice blog entry on <a href="http://www.innoq.com/blog/st/2009/06/restful_transactions_with_retr.html">RETRO</a> (the whole <a href="http://tech.groups.yahoo.com/group/rest-discuss/message/12727">rest-discuss thread</a> is also neatly <a href="http://www.infoq.com/news/2009/06/rest-ts">summarized by Mark Little for InfoQ</a>):</p>

<blockquote>
  <p>On the good side, I have to say, it is one of the best RESTful models I’ve seen thus far. The authors took special care to satisfy the different REST constraints, unlike many “RESTful” services (e.g. twitter that returns identifier and not URIs). </p>
</blockquote>

<p>I agree, this is a very well-though out solution.</p>

<blockquote>
  <p>On the downside is I think a distributed transaction model is bad for REST or in other words I don’t see a reason for going through this effort and jumping through all these hoops.</p>
</blockquote>

<p>I tend to agree — I'm not at all sure we need standardization here.</p>

<blockquote>
  <p>Since using hypermedia as the engine of state change means that the hypermedia actually  describes the protocol, we clutter the business representations (the representations of real business entities like customer, order etc.) with transactional nitty-gritty.</p>
</blockquote>

<p>Now this is something I don't agree with — if it's done, this is the way to do it; not hiding the details somewhere else.</p>

<blockquote>
  <p>It seems to me that RETRO is a good mental exercise to show transactions can be RESTful. I think, however that it is an overkill for RESTful implementations.</p>
</blockquote>

<p>I agree again. In my opinion, transactions in REST should be a pattern, not an implementation (see <a href="http://www.innoq.com/blog/st/2006/02/22/hiding_complexity.html">this entry</a> for some motivation for this).</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Interview with Jim Webber and Ian Robinson</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/06/interview_with_jim_webber_and.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2911</id>

    <published>2009-06-17T05:35:48Z</published>
    <updated>2009-06-17T05:36:34Z</updated>

    <summary>At QCon London this year, I did an interview with Ian Robinson and Jim Webber. It was pretty hard for me to not step out of the interviewer role as of course everything they said was just plain wrong! Seriously...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p>At QCon London this year, I did <a href="http://www.infoq.com/interviews/robinson-webber-rest">an interview with Ian Robinson and Jim Webber</a>. It was pretty hard for me to not step out of the interviewer role as of course everything they said was just plain wrong! </p>

<p>Seriously though, I think this was very interesting, and I do in fact agree with almost everything. One thing I have a different opinion about is that I think the REST community should be grateful for the REST posse (or "REST djihadists", as I believe Jim likes to call them) – IMO, they saved REST from suffering a <a href="http://en.wikipedia.org/wiki/Betamax">Betamax</a> fate. </p>
]]>
        

    </content>
</entry>

<entry>
    <title>IBM Enters Cloud Computing</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/06/ibm_enters_cloud_computing.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2910</id>

    <published>2009-06-16T20:19:54Z</published>
    <updated>2009-06-16T20:19:55Z</updated>

    <summary>Joe Gregorio: Color me shocked, but IBM has just rolled out a cloud computing offering. Be sure to check out Joe&apos;s description of the process for trying it out....</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p><a href="http://bitworking.org/news/432/ibm-enters-cloud">Joe Gregorio</a>:</p>

<blockquote>
  <p>Color me shocked, but IBM has just rolled out <a href="http://www.ibm.com/cloud/">a cloud computing offering</a>.</p>
</blockquote>

<p>Be sure to check out Joe's description of the process for trying it out.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Ruby at ThoughtWorks</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/06/ruby_at_thoughtworks.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2909</id>

    <published>2009-06-15T09:15:12Z</published>
    <updated>2009-06-15T09:15:14Z</updated>

    <summary>Martin Fowler: ThoughtWorks started using Ruby for production projects in 2006, from then till the end of 2008 we had done 41 ruby projects. In preparation for a talk at QCon I surveyed these projects to examine what lessons we...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p><a href="http://martinfowler.com/articles/rubyAtThoughtWorks.html">Martin Fowler</a>:</p>

<blockquote>
  <p>ThoughtWorks started using Ruby for production projects in 2006, from then till the end of 2008 we had done 41 ruby projects. In preparation for a talk at QCon I surveyed these projects to examine what lessons we can draw from the experience. I describe our thoughts so far on common questions about Ruby's productivity, speed and maintainability. So far our conclusions are that Ruby is a viable platform that should be seriously considered for many forms of applications - in particular web applications using Ruby on Rails. I also go through some technical lessons, including some thoughts on testing with Active Record.</p>
</blockquote>

<p>Just keeping this around for reference.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Now What Does “M” Reinvent?</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/06/now_what_does_m_reinvent.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2908</id>

    <published>2009-06-15T06:09:34Z</published>
    <updated>2009-06-15T08:53:10Z</updated>

    <summary>William Vambenepe: I have given up, at least for now, on understanding what Microsoft wants Oslo (and more specifically the “M” part) to be. I used to pull my hair reading inconsistent articles and interviews about what M tries to...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p><a href="http://stage.vambenepe.com/archives/805">William Vambenepe</a>:</p>

<blockquote>
  <p>I have given up, at least for now, on understanding what Microsoft wants Oslo (and more specifically the “M” part) to be. I used to pull my hair reading inconsistent articles and interviews about what M tries to be (graphical programming! DSL! IT models! generic parser! application components! workflow! SOA framework! generic data layer! SQL/T-SQL for dummies! JSON replacement! all of the above!). Douglas Purdy makes a valiant 4-part effort (1, 2, 3, 4) but it’s still not crisp enough for my small brain. Even David Chapell, explainer extraordinaire, seems to throw up his hands (“a modeling platform that can be applied in lots of different ways”, which BTW is the most exact, if vague, description I’ve heard).</p>
</blockquote>

<p><a href="http://blog.jclark.com/2009/03/getting-involved-with-m.html">James Clark</a>:</p>

<blockquote>
  <p>The question at the back of my mind before I went was "Does M really have the potential in the long term to be an interesting and useful alternative to XML?".  My tentative answer is yes.</p>
</blockquote>

<p>I can't help wondering whether something that can replace both RDF and XML (and basically any kind of modeling language, too) might be just a little bit too generic.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>RESTful Transactions with RETRO</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/06/restful_transactions_with_retr.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2907</id>

    <published>2009-06-10T11:28:40Z</published>
    <updated>2009-06-10T11:29:05Z</updated>

    <summary>By far the most RESTful (or maybe REST-compatible?) transaction proposal I&amp;#8217;ve seen so far comes from Alexandros Marinos, Amir Razavi, Sotiris Moschoyiannis, and Paul Krause: RETRO: A RESTful Transaction Model (PDF). This is really cool work....</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p>By far the most RESTful (or maybe REST-compatible?) transaction proposal I&#8217;ve seen so far comes from Alexandros Marinos, Amir Razavi, Sotiris Moschoyiannis, and Paul Krause: <a href="http://www.opadoi.gr/RETROv0.1.pdf">RETRO: A RESTful Transaction Model</a> (PDF). This is really cool work.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Schemaless RDBMS</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/06/schemaless_rdbms.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2906</id>

    <published>2009-06-08T14:26:21Z</published>
    <updated>2009-06-08T14:27:04Z</updated>

    <summary>Alex Popescu, who is InfoQ.com&apos;s chief architect, makes a case for using a relational database without schemas: By now the solution should become quite obvious: instead of persisting the object by storing it field by field, we would just serialize...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p>Alex Popescu, who is InfoQ.com's chief architect, <a href="http://themindstorms.blogspot.com/2009/06/schema-less-relational-database.html">makes a case for using a relational database without schemas</a>:</p>

<blockquote>
  <p>By now the solution should become quite obvious: instead of persisting the object by storing it field by field, we would just serialize the whole object with all its properties. Basically, the table will need just 2 fields: an ID and a field that can store our serialized object.</p>
</blockquote>

<p>I'm usually a big fan of Alex's work and agree with almost everything he writes – but this time I couldn't disagree more: Using an RDBMS in this way is an <em>abuse</em> IMO, and in fact one of the examples I use as an anti-pattern when I rent about HTTP abuse. I know it's in no way cool to say so, but I'm in fact a big fan of relational databases. As with any technology, they're not always a good match, but in very many cases they are. (You might think you need a fast reliable replicated high-performance clustered key-value storage engine, but you're probably wrong as long as your app doesn't have a few hundred thousand users. [Which I admit InfoQ.com has, but I'm not sure that was Alex's context here.]) </p>

<p>Relational databases make sense when I can actually use them the way they were supposed to be used - namely, with the flexibility to select, filter, combine, update and delete available information in tabular form. If you can't do meaningful SELECTs anymore, why would you want to use a relational database? </p>
]]>
        

    </content>
</entry>

<entry>
    <title>REST at JBoss User Group Munich</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/06/rest_at_jboss_user_group_munic_1.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2905</id>

    <published>2009-06-07T20:39:24Z</published>
    <updated>2009-06-07T20:40:49Z</updated>

    <summary>Tomorrow evening, I&apos;ll give a talk on REST and JSR 311 (JAX-RS) at the Munich JBoss User Group - this time together with my colleague Serge Pagop, who will add RESTeasy-specific aspects. Very much looking forward to it – I&apos;ve come...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p>Tomorrow evening, I'll give a talk on REST and JSR 311 (JAX-RS) at the <a href="http://www.jbug-munich.org/index.php/home">Munich JBoss User Group</a> - this time together with my colleague Serge Pagop, who will add <a href="http://www.jboss.org/resteasy/">RESTeasy</a>-specific aspects. Very much looking forward to it – I've come to enjoy these informal talks at least as much as those at larger conferences.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Google Wave</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/06/google_wave.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2903</id>

    <published>2009-06-02T08:20:39Z</published>
    <updated>2009-06-02T08:20:44Z</updated>

    <summary>I wanted to write a longer post on Google Wave, but I basically have nothing to add to Nick Gall&apos;s take....</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p>I wanted to write a longer post on <a href="http://wave.google.com/">Google Wave</a>, but I basically have nothing to add to <a href="http://ironick.typepad.com/ironick/2009/06/my-2-on-google-wave-www-is-a-unidirectional-web-of-published-documents----wave-is-a-bidirectional-web-of-instant-messages.html">Nick Gall's take</a>.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>REST Book: References</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/05/rest_book_references.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2902</id>

    <published>2009-05-31T18:27:18Z</published>
    <updated>2009-05-31T18:34:47Z</updated>

    <summary>I just finalized the list of references for my book on REST (in case you don&apos;t know it: the first version is written in German and due to be available in July; I&apos;m currently talking to a few US publishers,...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p>I just finalized the list of references for my book on REST (in case you don't know it: the first version is written in German and due to be available in July; I'm currently talking to a few US publishers, too) – and I thought I might just as well post it here. Interestingly, you can make a very good guess at the outline from this list …</p>

<ol>
<li>Fielding, Roy Thomas: Architectural Styles and the Design of Network-based Software Architectures. Doctoral dissertation, University of California, Irvine, 2000, http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm</li>
<li>RFC 2616: Hypertext Transfer Protocol – HTTP/1.1, <a href="http://www.ietf.org/rfc/rfc2616.txt">http://www.ietf.org/rfc/rfc2616.txt</a></li>
<li>Vinoski, Steve: Serendipitous Reuse, IEEE Internet Computing, <a href="http://computer.org/portal/pages/dsonline/2008/02/w1tow.xml">http://computer.org/portal/pages/dsonline/2008/02/w1tow.xml</a></li>
<li>Megginson, David: „With REST, every piece of information has its own URL.“; <a href="http://www.megginson.com/blogs/quoderat/2007/02/15/rest-the-quick-pitch/">http://www.megginson.com/blogs/quoderat/2007/02/15/rest-the-quick-pitch/</a></li>
<li>Carlyle, Benjamin: REST Rewiring, <a href="http://soundadvice.id.au/blog/2008/04/18/">http://soundadvice.id.au/blog/2008/04/18/</a></li>
<li>RFC 3986: Uniform Resource Identifier (URI): Generic Syntax, <a href="http://www.ietf.org/rfc/rfc3986.txt">http://www.ietf.org/rfc/rfc3986.txt</a></li>
<li>Bray, Tim: The Universal Republic of Love, <a href="http://www.tbray.org/ongoing/When/200x/2003/02/27/URL">http://www.tbray.org/ongoing/When/200x/2003/02/27/URL</a></li>
<li>Yahoo! API Documentation, „Retrieving Partial Resources“, <a href="http://developer.yahoo.com/social/rest_api_guide/partial-resources.html#paging-collection">http://developer.yahoo.com/social/rest_api_guide/partial-resources.html#paging-collection</a></li>
<li>URI Templates, <a href="http://bitworking.org/projects/URI-Templates/spec/draft-gregorio-uritemplate-03.html">http://bitworking.org/projects/URI-Templates/spec/draft-gregorio-uritemplate-03.html</a></li>
<li>Nielsen, Jakob:URL as UI, <a href="http://www.useit.com/alertbox/990321.html">http://www.useit.com/alertbox/990321.html</a></li>
<li>RFC 893: Transmission Control Protocol, <a href="http://www.ietf.org/rfc/rfc0793.txt">http://www.ietf.org/rfc/rfc0793.txt</a></li>
<li>Ambler, Scott: Choosing a Primary Key: Natural or Surrogate?, <a href="http://www.agiledata.org/essays/keys.html">http://www.agiledata.org/essays/keys.html</a></li>
<li>Squid, <a href="http://www.squid-cache.org/">http://www.squid-cache.org/</a></li>
<li>Baker, Mark: Accidentally RESTful, <a href="http://www.markbaker.ca/blog/2005/04/accidentally-restful/">http://www.markbaker.ca/blog/2005/04/accidentally-restful/</a></li>
<li>Berners-Lee, Tim: Cool URIs don't change, <a href="http://www.w3.org/Provider/Style/URI">http://www.w3.org/Provider/Style/URI</a></li>
<li>Google Web Accelerator, <a href="http://webaccelerator.google.com/">http://webaccelerator.google.com/</a></li>
<li>Fried, Jason: Google Web Accelerator: Hey, not so fast, <a href="http://tinyurl.com/asntk">http://tinyurl.com/asntk</a></li>
<li>Fielding, Roy T.:, <a href="http://tech.groups.yahoo.com/group/rest-discuss/message/442?var=0">http://tech.groups.yahoo.com/group/rest-discuss/message/442?var=0</a></li>
<li>HTML 5: A vocabulary and associated APIs for HTML and XHTML, <a href="http://dev.w3.org/html5/spec/Overview.html">http://dev.w3.org/html5/spec/Overview.html</a></li>
<li>Ajax, Wikipedia-Definition: <a href="http://en.wikipedia.org/wiki/Ajax_(programming)">http://en.wikipedia.org/wiki/Ajax_(programming)</a></li>
<li>JQuery: The Write Less, Do More JavaScript Library, <a href="http://jquery.com/">http://jquery.com/</a></li>
<li>Prototype JavaScript framework: Easy Ajax and DOM manipulation for dynamic web applications, <a href="http://www.prototypejs.org/">http://www.prototypejs.org/</a></li>
<li>Google Data APIs (GData), <a href="http://code.google.com/apis/gdata/">http://code.google.com/apis/gdata/</a></li>
<li>RFC 3864: Registration Procedures for Message Header Fields, <a href="http://www.ietf.org/rfc/rfc3864.txt">http://www.ietf.org/rfc/rfc3864.txt</a></li>
<li>WebDAV, <a href="http://www.webdav.org/">http://www.webdav.org/</a></li>
<li>RFC 4918: HTTP Extensions for Web Distributed Authoring and Versioning, <a href="http://www.webdav.org/specs/rfc4918.html">http://www.webdav.org/specs/rfc4918.html</a></li>
<li>RFC 3253: Versioning Extensions to WebDAV, <a href="http://www.webdav.org/specs/rfc3253.html">http://www.webdav.org/specs/rfc3253.html</a></li>
<li>PATCH Method for HTTP, <a href="http://tools.ietf.org/id/draft-dusseault-http-patch-11.txt">http://tools.ietf.org/id/draft-dusseault-http-patch-11.txt</a></li>
<li>Sayre, Robert: Simple Synchronization Method for JSON Objects, <a href="https://bugzilla.mozilla.org/attachment.cgi?id=269420">https://bugzilla.mozilla.org/attachment.cgi?id=269420</a></li>
<li>Nottingham, Mark: Link Relations and HTTP Header Linking, Internet Draft, <a href="http://tools.ietf.org/id/draft-nottingham-http-link-header-03.txt">http://tools.ietf.org/id/draft-nottingham-http-link-header-03.txt</a></li>
<li>Fielding, Roy T.: „REST APIs must be hypertext-driven“,  <a href="http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven">http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven</a></li>
<li>RFC 2046: Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types, <a href="http://www.ietf.org/rfc/rfc2046.txt">http://www.ietf.org/rfc/rfc2046.txt</a></li>
<li>Associating Resources with Namespaces, W3C TAG Finding, <a href="http://www.w3.org/2001/tag/doc/nsDocuments/">http://www.w3.org/2001/tag/doc/nsDocuments/</a></li>
<li>RFC 3023: XML Media Types, <a href="http://www.ietf.org/rfc/rfc3023.txt">http://www.ietf.org/rfc/rfc3023.txt</a></li>
<li>IANA MIME Media Types, <a href="http://www.iana.org/assignments/media-types/">http://www.iana.org/assignments/media-types/</a></li>
<li>RFC 4288: Media Type Specifications and Registration Procedures, <a href="http://www.ietf.org/rfc/rfc4288.txt">http://www.ietf.org/rfc/rfc4288.txt</a></li>
<li>UBL (Universal Business Language) V2.0, <a href="http://docs.oasis-open.org/ubl/os-UBL-2.0/UBL-2.0.html">http://docs.oasis-open.org/ubl/os-UBL-2.0/UBL-2.0.html</a></li>
<li>HTML 4.01 Specification, <a href="http://www.w3.org/TR/html401/">http://www.w3.org/TR/html401/</a></li>
<li>XHTML™ 1.0 The Extensible HyperText Markup Language (Second Edition), <a href="http://www.w3.org/TR/xhtml1/">http://www.w3.org/TR/xhtml1/</a></li>
<li>Pilgrim, Mark: The Road to XHTML 2.0: MIME Types, <a href="http://www.xml.com/pub/a/2003/03/19/dive-into-xml.html">http://www.xml.com/pub/a/2003/03/19/dive-into-xml.html</a></li>
<li>RFC 5147: URI Fragment Identifiers for the text/plain Media Type, <a href="http://www.ietf.org/rfc/rfc5147.txt">http://www.ietf.org/rfc/rfc5147.txt</a></li>
<li>RFC 2483: URI Resolution Services Necessary for URN Resolution, <a href="http://www.ietf.org/rfc/rfc2483.txt">http://www.ietf.org/rfc/rfc2483.txt</a></li>
<li>RFC 4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files, <a href="http://www.ietf.org/rfc/rfc4180.txt">http://www.ietf.org/rfc/rfc4180.txt</a></li>
<li>JSON (JavaScript Object Notation), <a href="http://json.org/">http://json.org/</a></li>
<li>RFC 4627: The application/json Media Type for JavaScript Object Notation (JSON) <a href="http://www.ietf.org/rfc/rfc4627.txt">http://www.ietf.org/rfc/rfc4627.txt</a></li>
<li>RSS 2.0 Specification, <a href="http://cyber.law.harvard.edu/rss/rss.html">http://cyber.law.harvard.edu/rss/rss.html</a></li>
<li>RFC 4287: The Atom Syndication Format, <a href="http://www.ietf.org/rfc/rfc4287.txt">http://www.ietf.org/rfc/rfc4287.txt</a></li>
<li>RFC 5005: Feed Paging and Archiving, <a href="http://www.ietf.org/rfc/rfc5005.txt">http://www.ietf.org/rfc/rfc5005.txt</a></li>
<li>RFC 4685: Atom Threading Extensions, <a href="http://www.ietf.org/rfc/rfc4685.txt">http://www.ietf.org/rfc/rfc4685.txt</a></li>
<li>Microformats-Community, <a href="http://microformats.org/">http://microformats.org/</a></li>
<li>Resource Description Framework (RDF): <a href="http://www.w3.org/RDF/">http://www.w3.org/RDF/</a></li>
<li>Beckett, David: Turtle – Terse RDF Triple Language, <a href="http://www.dajobe.org/2004/01/turtle/">http://www.dajobe.org/2004/01/turtle/</a></li>
<li>Dublin Core Metadata Element Set, Version 1.1, <a href="http://dublincore.org/documents/dces/">http://dublincore.org/documents/dces/</a></li>
<li>RDF Vocabulary Description Language 1.0: RDF Schema, <a href="http://www.w3.org/TR/rdf-schema/">http://www.w3.org/TR/rdf-schema/</a></li>
<li>OWL Web Ontology Language, <a href="http://www.w3.org/TR/owl-ref/">http://www.w3.org/TR/owl-ref/</a></li>
<li>Allemang, Dean; Hendler, James A.:  Semantic Web for the Working Ontologist: Effective Modeling in RDFS and OWL, Morgan/Kaufman, 2008</li>
<li>Pilgrim, Mark: Should Atom Use RDF?, <a href="http://www.xml.com/pub/a/2003/08/20/dive.html">http://www.xml.com/pub/a/2003/08/20/dive.html</a></li>
<li>Mazzocchi, Stefano: A No-Nonsense Guide to Semantic Web Specs for XML People, <a href="http://www.betaversion.org/~stefano/linotype/news/57/">http://www.betaversion.org/~stefano/linotype/news/57/</a></li>
<li>RFC 5023: The Atom Publishing Protocol, <a href="http://www.ietf.org/rfc/rfc5023.txt ">http://www.ietf.org/rfc/rfc5023.txt   </a></li>
<li>Pilgrim, Mark: The myth of RSS compatibility, <a href="http://diveintomark.org/archives/2004/02/04/incompatible-rss">http://diveintomark.org/archives/2004/02/04/incompatible-rss</a></li>
<li>Tomoyako, Ryan: Things Caches Do, <a href="http://tomayko.com/writings/things-caches-do">http://tomayko.com/writings/things-caches-do</a></li>
<li>Nothingham, Mark: The State of Proxy Caching,  <a href="http://www.mnot.net/blog/2007/06/20/proxy_caching">http://www.mnot.net/blog/2007/06/20/proxy_caching</a></li>
<li>Nottingham, Mark: The State of Browser Caching, <a href="http://www.mnot.net/blog/2006/05/11/browser_caching">http://www.mnot.net/blog/2006/05/11/browser_caching</a></li>
<li>Nottingham, Mark: Caching Tutorial for Web Authors and Webmasters, <a href="http://www.mnot.net/cache_docs/">http://www.mnot.net/cache_docs/</a></li>
<li>RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2, <a href="http://tools.ietf.org/rfc/rfc5246">http://tools.ietf.org/rfc/rfc5246</a></li>
<li>Google APIs: Authentication for Installed Applications, <a href="http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html">http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html</a></li>
<li>RFC 2617: HTTP Authentication: Basic and Digest Access Authentication, <a href="http://www.ietf.org/rfc/rfc2617.txt">http://www.ietf.org/rfc/rfc2617.txt</a></li>
<li>RFC 2104: HMAC: Keyed-Hashing for Message Authentication, <a href="http://www.ietf.org/rfc/rfc2104.txt">http://www.ietf.org/rfc/rfc2104.txt</a></li>
<li>Amazon S3 REST Authentication, <a href="http://docs.amazonwebservices.com/AmazonS3/2006-03-01/index.html?RESTAuthentication.html">http://docs.amazonwebservices.com/AmazonS3/2006-03-01/index.html?RESTAuthentication.html</a></li>
<li>Google: How to use Post-Commit Web Hooks for your project, <a href="http://code.google.com/p/support/wiki/PostCommitWebHooks">http://code.google.com/p/support/wiki/PostCommitWebHooks</a></li>
<li>OpenID Authentication 2.0, <a href="http://openid.net/specs/openid-authentication-2_0.html">http://openid.net/specs/openid-authentication-2_0.html</a></li>
<li>RFC 2631: Diffie-Hellman Key Agreement Method, <a href="http://tools.ietf.org/rfc/rfc2631">http://tools.ietf.org/rfc/rfc2631</a></li>
<li>OAuth Core 1.0, <a href="http://oauth.net/core/1.0/">http://oauth.net/core/1.0/</a></li>
<li>Hammer-Lahav, Eran: Beginner’s Guide to OAuth, <a href="http://www.hueniverse.com/hueniverse/2007/10/beginners-guide.html">http://www.hueniverse.com/hueniverse/2007/10/beginners-guide.html</a></li>
<li>mod_authz_ldap: An Apache LDAP Authorization module, <a href="http://authzldap.othello.ch/">http://authzldap.othello.ch/</a></li>
<li>Clark, James: HTTP: what to sign?, <a href="http://blog.jclark.com/2007/10/http-what-to-sign.html">http://blog.jclark.com/2007/10/http-what-to-sign.html</a></li>
<li>XML Encryption Syntax and Processing, <a href="http://www.w3.org/TR/2002/REC-xmlenc-core-20021210">http://www.w3.org/TR/2002/REC-xmlenc-core-20021210</a></li>
<li>XML-Signature and Syntax Processing, <a href="http://www.w3.org/TR/2002/REC-xmldsig-core-20020212">http://www.w3.org/TR/2002/REC-xmldsig-core-20020212</a></li>
<li>Google Data APIs Authentication Overview, <a href="http://code.google.com/apis/gdata/auth.html">http://code.google.com/apis/gdata/auth.html</a></li>
<li>WSDL 1.1, W3C Note, <a href="http://www.w3.org/TR/wsdl">http://www.w3.org/TR/wsdl</a></li>
<li>WSDL 2.0, W3C Recommendation, <a href="http://www.w3.org/TR/wsdl20/">http://www.w3.org/TR/wsdl20/</a></li>
<li>WADL (Web Application Description Language), <a href="https://wadl.dev.java.net/">https://wadl.dev.java.net/</a></li>
<li>Resource Directory Description Language (RDDL), <a href="http://www.rddl.org/">http://www.rddl.org/</a></li>
<li>Advanced Message Queuing Protocol (AMQP), <a href="http://www.amqp.org">http://www.amqp.org</a></li>
<li>WS Reliable Messaging (WS RM), <a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsrm">http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsrm</a></li>
<li>UDDI Version 3 Specification, <a href="http://www.oasis-open.org/committees/uddi-spec/doc/tcspecs.htm#uddiv3">http://www.oasis-open.org/committees/uddi-spec/doc/tcspecs.htm#uddiv3</a></li>
<li>A Universally Unique Identifier (UUID) URN Namespace, <a href="http://tools.ietf.org/html/rfc4122">http://tools.ietf.org/html/rfc4122</a></li>
<li>Gregorio, Joe: RESTify DayTrader, <a href="http://bitworking.org/news/201/RESTify-DayTrader">http://bitworking.org/news/201/RESTify-DayTrader</a></li>
<li>Nottingham, Mark: POST Once Exactly, <a href="http://www.mnot.net/drafts/draft-nottingham-http-poe-00.txt">http://www.mnot.net/drafts/draft-nottingham-http-poe-00.txt</a></li>
<li>Goland, Yaron: SOA-Reliability (SOA-Rity) for HTTP, <a href="http://www.goland.org/soareliability/">http://www.goland.org/soareliability/</a></li>
<li>de hÓra, Bill: HTTPLR, <a href="http://dehora.net/doc/httplr/draft-httplr-01.html">http://dehora.net/doc/httplr/draft-httplr-01.html</a></li>
<li>Two-phase commit protocol, <a href="http://en.wikipedia.org/wiki/Two-phase_commit_protocol">http://en.wikipedia.org/wiki/Two-phase_commit_protocol</a></li>
<li>Musgrove, Michael: Transactional support for JAX RS based applications, <a href="http://www.jboss.org/community/wiki/TransactionalsupportforJAXRSbasedapplications">http://www.jboss.org/community/wiki/TransactionalsupportforJAXRSbasedapplications</a></li>
<li>Editing the Web: Detecting the Lost Update Problem Using Unreserved Checkout; <a href="http://www.w3.org/1999/04/Editing/">http://www.w3.org/1999/04/Editing/</a></li>
<li>Loughran, Steve; Smith, Edmund: Rethinking the Java SOAP Stack, <a href="http://www.hpl.hp.com/techreports/2005/HPL-2005-83.pdf">http://www.hpl.hp.com/techreports/2005/HPL-2005-83.pdf</a></li>
<li>Postel’sches Gesetz (Postel’s Law), auch Robustness Principle, <a href="http://en.wikipedia.org/wiki/Robustness\_Principle">http://en.wikipedia.org/wiki/Robustness_Principle</a></li>
<li>Bray, Tim; Dracon and Postel, <a href="http://www.tbray.org/ongoing/When/200x/2003/08/19/Draconianism">http://www.tbray.org/ongoing/When/200x/2003/08/19/Draconianism</a></li>
<li>Starke, Gernot; Tilkov, Stefan (Hrsg.): SOA-Expertenwissen, dpunkt-Verlag, <a href="http://soa-expertenwissen.de">http://soa-expertenwissen.de</a></li>
<li>MuleSource Galaxy, <a href="http://www.mulesource.org/display/GALAXY/Home">http://www.mulesource.org/display/GALAXY/Home</a></li>
<li>WSO2 Registry, <a href="http://wso2.org/projects/registry">http://wso2.org/projects/registry</a></li>
<li>HP Systinet 2, <a href="http://www.google.com/search?q=hp+systinet">http://www.google.com/search?q=hp+systinet</a></li>
<li>WS-BPEL: Web Services Business Process Execution Language Version 2.0, <a href="http://docs.oasis-open.org/wsbpel/2.0/OS/wsbpel-v2.0-OS.html">http://docs.oasis-open.org/wsbpel/2.0/OS/wsbpel-v2.0-OS.html</a></li>
<li>curl, <a href="http://curl.haxx.se/">http://curl.haxx.se/</a></li>
<li>GNU Wget, <a href="http://www.gnu.org/software/wget/">http://www.gnu.org/software/wget/</a></li>
<li>Stenberg, Daniel: curl vs. Wget, <a href="http://daniel.haxx.se/docs/curl-vs-wget.html">http://daniel.haxx.se/docs/curl-vs-wget.html</a></li>
<li>Netcraft, April 2009 Web Server Survey, <a href="http://news.netcraft.com/archives/2009/04/06/april_2009_web_server_survey.html">http://news.netcraft.com/archives/2009/04/06/april_2009_web_server_survey.html</a></li>
<li>nginx, <a href="http://nginx.net/">http://nginx.net/</a></li>
<li>lighttpd, <a href="http://www.lighttpd.net/">http://www.lighttpd.net/</a></li>
<li>W3C, ESI Language Specification 1.0, <a href="http://www.w3.org/TR/esi-lang">http://www.w3.org/TR/esi-lang</a></li>
<li>Nottingham, Mark: Cache Channels for Squid, <a href="http://www.mnot.net/cache_channels/">http://www.mnot.net/cache_channels/</a></li>
<li>The Varnish Project, <a href="http://varnish.projects.linpro.no/">http://varnish.projects.linpro.no/</a></li>
<li>Varnish: Notes from the Architect, <a href="http://varnish.projects.linpro.no/wiki/ArchitectNotes ">http://varnish.projects.linpro.no/wiki/ArchitectNotes    </a></li>
<li>JSR 311: JAX-RS: The JavaTM API for RESTful Web Services, <a href="http://jcp.org/en/jsr/detail?id=311">http://jcp.org/en/jsr/detail?id=311</a></li>
<li>Jersey, JAX-RS (JSR 311) Reference Implementation, <a href="https://jersey.dev.java.net/">https://jersey.dev.java.net/</a></li>
<li>JBoss RestEasy, <a href="http://www.jboss.org/resteasy/">http://www.jboss.org/resteasy/</a></li>
<li>JSR 311 Final, InfoQ, <a href="http://www.infoq.com/news/2008/09/jsr311-approved">http://www.infoq.com/news/2008/09/jsr311-approved</a></li>
<li>Tilkov, Stefan: RESTful Web Services mit Java; JavaMagazin 01/2009, <a href="http://www.innoq.com/files/JM_1.09_tilkov_jax-RS.pdf">http://www.innoq.com/files/JM_1.09_tilkov_jax-RS.pdf</a></li>
<li>Restlet – Lightweight REST framework, <a href="http://www.restlet.org/">http://www.restlet.org/</a></li>
<li>Spring MVC, <a href="http://www.springsource.org">http://www.springsource.org</a></li>
<li>Windows Communication Foundation (WCF), <a href="http://www.microsoft.com/net/WindowsCommunicationFoundation.aspx">http://www.microsoft.com/net/WindowsCommunicationFoundation.aspx</a></li>
<li>Skonnard, Aaron: A Guide to Designing and Building RESTful Web Services with WCF 3.5, <a href="http://msdn.microsoft.com/en-us/library/dd203052.aspx">http://msdn.microsoft.com/en-us/library/dd203052.aspx</a></li>
<li>Microsoft ASP.NET MVC, <a href="http://www.asp.net/mvc/">http://www.asp.net/mvc/</a></li>
<li>Ruby on Rails, <a href="http://rubyonrails.org">http://rubyonrails.org</a></li>
<li>Tilkov, Stefan: RESTful Web Services mit Rails; RailsWay 01/2009, <a href="http://www.innoq.com/files/RM_1.09_tilkov_REST.pdf">http://www.innoq.com/files/RM_1.09_tilkov_REST.pdf</a></li>
<li>httplib2, <a href="http://code.google.com/p/httplib2/">http://code.google.com/p/httplib2/</a></li>
<li>web.py, <a href="http://webpy.org/">http://webpy.org/</a></li>
<li>Django, <a href="http://www.djangoproject.com/">http://www.djangoproject.com/</a></li>
</ol>
]]>
        

    </content>
</entry>

<entry>
    <title>Paging XML with will_paginate for Rails </title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/05/paging_xml_with_will_paginate.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2901</id>

    <published>2009-05-22T17:06:46Z</published>
    <updated>2009-05-22T17:07:30Z</updated>

    <summary>I needed to paginate an Atom feed, and didn&amp;#8217;t want to build it myself (specifically because I&amp;#8217;m rendering the same content as HTML, anyway). So this fork adds pagination support for XML, usable in Atom feeds or other XML resource...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p>I needed to paginate an Atom feed, and didn&#8217;t want to build it myself (specifically because
I&#8217;m rendering the same content as HTML, anyway). So <a href="http://github.com/stilkov/will_paginate/tree/master">this fork</a> adds pagination support for XML, usable
in Atom feeds or other XML resource representations.</p>

<p>Usage example:</p>

<pre><code>xml.instruct! :xml, :encoding =&gt; "UTF-8"
xml.feed :xmlns =&gt; 'http://www.w3.org/2005/Atom', 'xml:base' =&gt; base_uri, 'xml:lang' =&gt; 'en-us' do
  xml.link :rel =&gt; 'self', :type =&gt; 'application/atom+xml', :href =&gt; request.url
  xml.link :rel =&gt; 'alternate', :type =&gt; 'text/html', :href =&gt; orders_url
  will_paginate(@orders, :xml =&gt; true, :builder =&gt; xml)
  xml.id orders_url
  xml.title 'Feed for OM order updates'
  xml.updated Order.maximum(:updated_at).iso8601
  for order in @orders do
    ... # render entries
  end
end
</code></pre>

<p>This will render something like this:</p>

<pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-us" xml:base="http://om.example.com/"&gt;
  &lt;link type="application/atom+xml" rel="self" href="http://om.example.com/orders.atom?page=2"/&gt;
  &lt;link type="text/html" rel="alternate" href="http://om.example.com/orders"/&gt;
  &lt;link rel="next" href="/orders.atom?page=3"/&gt;
  &lt;link rel="prev" href="/orders.atom?page=1"/&gt;
  &lt;id&gt;http://om.example.com/orders&lt;/id&gt;
  &lt;title&gt;Feed for OM order updates&lt;/title&gt;
  &lt;updated&gt;2009-04-07T07:44:56Z&lt;/updated&gt;
</code></pre>

<p>In other words, use will_paginate as you would use it in HTML (the controller code can stay 
unchanged), and add the :xml => true option. This will make will_paginate return an XML string
representation containing appropriate <link rel=...> elements. Alternatively, you can pass
in an XML builder and it will use that instead.</p>

<p>Works with Rails 2.3.2.</p>

<p>Note that my experience with git and GitHub is limited, I&#8217;m happy about suggestions on how to
make this more useful. I&#8217;m also entirely satisfied if there&#8217;s a better solution and someone points me to it.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Twitter Blog Aggregation</title>
    <link rel="alternate" type="text/html" href="http://www.innoq.com/blog/st/2009/05/twitter_blog_aggregation.html" />
    <id>tag:www.innoq.com,2009:/blog/st//3.2900</id>

    <published>2009-05-21T17:13:10Z</published>
    <updated>2009-05-21T17:20:31Z</updated>

    <summary>Following up on yesterday&apos;s thoughts (thanks for the comments, BTW), I&apos;ve made some changes to my blog - it&apos;s been a while; I forgot how easy it is to waste time doing so without any tangible benefit whatsoever … anyway;...</summary>
    <author>
        <name>Stefan Tilkov</name>
        <uri>http://www.innoq.com/blog/st/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://www.innoq.com/blog/st/">
        <![CDATA[<p>Following up on <a href="http://www.innoq.com/blog/st/2009/05/integrating_linksblog_poststwe.html">yesterday's thoughts</a> (thanks for the comments, BTW), I've made some changes to my blog - it's been a while; I forgot how easy it is to waste time doing so without any tangible benefit whatsoever … anyway; there's now an autodiscoverable link to <a href="http://twitter.com/statuses/user_timeline/5325152.rss">my Twitter updates feed</a>, as well as a small piece of JavaScript (pulled from <a href="http://remysharp.com/2007/05/18/add-twitter-to-your-blog-step-by-step/">this excellent posting</a>) that will pull the last ten tweets (excluding @replies) into the home page for those who visit the main index page instead of using the Atom or RSS feed. Hope you like it, tell me if you don't.</p>
]]>
        

    </content>
</entry>

</feed>
