<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet href="http://duncan-cragg.org/css/atom.css" type="text/css" ?>
<!-- Copyright (c) 2006 Duncan Cragg -->

<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-gb">
    <id>http://duncan-cragg.org/blog/</id>
    <title>What Not How - Posts tagged 'web2.0'</title>
    <subtitle>Duncan Cragg on Declarative Architectures</subtitle>
    <author><name>Duncan Cragg</name></author>
    <logo>/favicon.gif</logo>
    <icon>/favicon.ico</icon>
    <rights>All content including photos and images by Duncan Cragg. Copyright (c) Duncan Cragg, your rights preserved: see /CXL.html</rights>
    <generator uri="http://www.djangoproject.com">A Django Production.</generator>
    <link rel="alternate" type="text/html" href="http://duncan-cragg.org/blog/" title="What Not How" />
    <link rel="self" type="application/atom+xml" href="http://duncan-cragg.org/blog/atom/web2.0/" />

    <updated>2007-10-05T11:22:00Z</updated>


    <entry>
        <id>http://duncan-cragg.org/blog/post/google-micro-conference/</id>
        <title>Google Micro Conference</title>
        <published>2007-10-05T11:22:00Z</published>
        
        <updated>2007-10-05T11:22:00Z</updated>
        
        <link rel="alternate" type="text/html" href="http://duncan-cragg.org/blog/post/google-micro-conference/" title="Google Micro Conference" />
        
        <category term="web2.0" />
        
        <category term="atom" />
        
        <category term="ajax" />
        
        <category term="rest" />
        
        <category term="event-driven" />
        
        <category term="publishsubscribe" />
        
        <category term="p2p" />
        
        <category term="architecture" />
        
        <category term="declarative" />
        
        <category term="app" />
        
        <category term="microformats" />
        
        <category term="scalability" />
        
        <category term="json" />
        
        <category term="openid" />
        
        <category term="microweb" />
        
        <category term="google" />
        
        <summary type="xhtml">
            <div xmlns="http://www.w3.org/1999/xhtml">

<p>

Last night&#39;s 
<a href="http://osjam.truemesh.com/">Google London Open Source Jam</a>
(also <a href="http://www.red-bean.com/ospowiki/LondonOpenSourceJam05Talks">here</a>)
was on the subject of the &#39;Web&#39; (didn&#39;t they invent that? Oh no,
that was Microsoft).
</p><p>
This event has been getting better and better each time I&#39;ve
attended. There were some very interesting lightning talks held
together with a tight structure and plenty of chance to chat,
drink cold Leffe and eat cold pizza. And nick [<i>transatlantic
translation: &#39;steal&#39;</i>] the 
<a href="http://www.greenandblacks.com/uk/productdetails.php?pageid=27&amp;cid=6&amp;pid=11">Green &amp; Black&#39;s chocolate</a>.
</p><p>
An ideal Micro Conference...
 &#160; ...
</p>

            </div>
        </summary>
        <content type="xhtml" xml:space="preserve">
            <div xmlns="http://www.w3.org/1999/xhtml">

<p>
</p><div class="summary"><p>
Last night&#39;s 
<a href="http://osjam.truemesh.com/">Google London Open Source Jam</a>
(also <a href="http://www.red-bean.com/ospowiki/LondonOpenSourceJam05Talks">here</a>)
was on the subject of the &#39;Web&#39; (didn&#39;t they invent that? Oh no,
that was Microsoft).
</p><p>
This event has been getting better and better each time I&#39;ve
attended. There were some very interesting lightning talks held
together with a tight structure and plenty of chance to chat,
drink cold Leffe and eat cold pizza. And nick [<i>transatlantic
translation: &#39;steal&#39;</i>] the 
<a href="http://www.greenandblacks.com/uk/productdetails.php?pageid=27&amp;cid=6&amp;pid=11">Green &amp; Black&#39;s chocolate</a>.
</p><p>
An ideal Micro Conference...
</p></div><p>
I arrived late (it starts at 6pm) and spent some time catching up with
<a href="http://www.flickr.com/photos/92443667@N00/1488471991/in/set-72157602268864450/">ex-Thoughtworks colleagues</a>,
so I missed Dion &quot;Ajaxian&quot; Almaer&#39;s 
<a href="http://www.slideshare.net/dion/future-of-web-apps-google-gears">Google Gears slideset from FOWA</a>.  
Go there now and check it out.
</p><p>
Thus the first talk I saw
was a nifty piece of widgetry by Steven Goodwin called 
<a href="http://www.bluedust.com/minerva/">WARP</a>. In WARP, interacting with a page of
&#39;applets&#39; changed the URL to encode those applets&#39; current state. If
you link to the current page, it will always show that state.
Very long URLs, you can imagine. None of that fancy Ajax stuff.
RESTful, dare I say. Nice API server-side for unpacking your
applet params. 
</p><p>
A trip to the lavatories [<i>transatlantic translation:
&#39;restroom&#39;/&#39;bathroom&#39;</i>] revealed that they are, indeed, doing that
<a href="http://googletesting.blogspot.com/2007/01/introducing-testing-on-toilet.html">Testing in the Toilet</a>
project in Google. It works, too! I learned something. Other intelligence on
Google&#39;s Inner Workings include confirmation of the beanbags and of
the high quality, free grub to which I have already alluded.
</p><p>
A nice bloke from Yahoo! (<a href="http://kid666.com/blog">Tom Hughes-Croucher</a>:
another spy?) came along to sell his idea that, in the
collaborative world of open-minded hackers, we who run websites
could help each other with our 404s. If I get a 404, I use the
referrer link to tell you, via some RESTful POST, that your link to
me is bust (assuming I don&#39;t intend to fix it myself).
</p><p>
I think the world is a little more selfish, so you need to decide
who hurts more - the site who sends their visitors to a dead-end,
or the site delivering that dead-end to a new visitor. I suspect
the latter, by a small margin, as it&#39;s not exactly a nice welcome.
So it&#39;s up to them to let the new visitor down more gently, and to
notify the publisher of the broken link with little or no cost to
them. For example, a really sociable 404-ing site could just
redirect the hapless visitor back to the referring page, adding
&#39;?broken=links&#39; to the URL - hopefully to be picked up by log
scanning scripts at the referring site.
</p><p>
Next up, <a href="http://duncan-cragg.org/">yours truly</a> taking 
<a href="http://www2007.org/prog-Developers.php#saturday">yet another chance</a>
to promote his excellent 
<a href="http://the-u-web.org">Micro Web</a> thingy. 
Couple of people asked about it afterwards - including that nice
chap from Yahoo! Also, a smart - and nice - chap called Toby 
(<a href="http://www.thetobe.com/">this one?</a>) got me into a deep discussion
on imperative vs. event-driven vs. state-driven programming. He was
apparently an old-timer like me, as he was able to engage in
dewy-eyed Functional Programming recollections. I managed to give
out about four full colour printouts about the
<a href="http://the-u-web.org">Micro Web</a>, 
and to collect some good calling cards.
</p><p>
However, <a href="http://joe.truemesh.com">Joe Walnes</a>, even a pint down in
the pub afterwards, still refused to sign up for Micro Web duties.
This in spite of over three years of intensive lobbying, including
eight months of me working Trojan-horse-like in his kitchen, on The 2005
Implementation.
</p><p>
Another ex-Thoughtworks colleague, 
<a href="http://www.pubbitch.org/blog">Simon Stewart</a>
took yet another chance to promote his promising
<a href="http://code.google.com/p/webdriver/">Webdriver</a> thingy. And a very
interesting project it is becoming. Still needs more work - on IE
support, etc - but I&#39;ll probably be using it in my new job at the
<a href="http://www.ft.com">Financial Times</a>.
</p><p>
Another ex-Thoughtworks colleague, 
<a href="http://abc.truemesh.com/">Chris Matts</a> took a chance to promote
his and Andy Pols&#39; interesting new
<a href="http://demo.pols.co.uk/dream/">Dream Machine</a> thingy.
Perhaps a bit like <a href="http://www.cambrianhouse.com">Cambrian House</a> - you put 
your dreams and ideas into it and people expand on them.
Chris is a natural on-stage - and even used the age-old trick of
promising lots of money for no effort, to get our attention at the start.
</p><p>
All I could come up with for the <a href="http://the-u-web.org">Micro Web</a>
was &#39;Cheaper, Wider, Faster&#39;...
</p><p>&#160;</p><p>
<i>Updated: added reference to Dion Almaer, details about WARP, swapped in the 
picture of TWers that I was waiting for and fixed a minor blunder thanks to that 
ever-sharp ThoughtWorker,  
<a href="http://dan.bodar.com/">Dan Bodart</a>..</i>

</p>

            </div>
        </content>
    </entry>
    
    <entry>
        <id>http://duncan-cragg.org/blog/post/how-ruby-can-enable-web-20-platform/</id>
        <title>How Ruby can enable the Web 2.0 Platform</title>
        <published>2007-06-26T15:17:00Z</published>
        
        <updated>2007-06-26T15:17:00Z</updated>
        
        <link rel="alternate" type="text/html" href="http://duncan-cragg.org/blog/post/how-ruby-can-enable-web-20-platform/" title="How Ruby can enable the Web 2.0 Platform" />
        
        <category term="django" />
        
        <category term="web2.0" />
        
        <category term="atom" />
        
        <category term="ajax" />
        
        <category term="yaml" />
        
        <category term="rest" />
        
        <category term="event-driven" />
        
        <category term="publishsubscribe" />
        
        <category term="architecture" />
        
        <category term="declarative" />
        
        <category term="socialsoftware" />
        
        <category term="strest" />
        
        <category term="app" />
        
        <category term="microformats" />
        
        <category term="scalability" />
        
        <category term="json" />
        
        <category term="openid" />
        
        <category term="redux" />
        
        <category term="ruby" />
        
        <summary type="xhtml">
            <div xmlns="http://www.w3.org/1999/xhtml">

<p>

<a href="http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html">Web 2.0&#39;s definition</a>
includes seeing the Web as an application platform. Which means it
is in competition with Java and .Net, and with SOA, for both local
and widely distributed applications.
</p><p>
If the Web is going to be a platform, the skills you need to learn
to program it are the core Web 2.0 technologies such as Ajax, JSON,
Atom, Microformats and OpenID.
</p><p>
And Ruby. This language, that&#39;s capturing the hearts of many Web 2.0
programmers, is ideal for easing the transition from the Java
and .Net platforms to the Web platform, as I will show.
</p><p>
Even if you&#39;re part of a big company that is generally immune to the
latest trends, the marriage of Ruby and the Web-as-platform may be
something to prepare for. It could even displace your SOA agenda...
 &#160; ...
</p>

            </div>
        </summary>
        <content type="xhtml" xml:space="preserve">
            <div xmlns="http://www.w3.org/1999/xhtml">

<p>
</p><div class="summary"><p>
<a href="http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html">Web 2.0&#39;s definition</a>
includes seeing the Web as an application platform. Which means it
is in competition with Java and .Net, and with SOA, for both local
and widely distributed applications.
</p><p>
If the Web is going to be a platform, the skills you need to learn
to program it are the core Web 2.0 technologies such as Ajax, JSON,
Atom, Microformats and OpenID.
</p><p>
And Ruby. This language, that&#39;s capturing the hearts of many Web 2.0
programmers, is ideal for easing the transition from the Java
and .Net platforms to the Web platform, as I will show.
</p><p>
Even if you&#39;re part of a big company that is generally immune to the
latest trends, the marriage of Ruby and the Web-as-platform may be
something to prepare for. It could even displace your SOA agenda...
</p></div><p>
Few would disagree that the Ruby language is riding the wave generated
by Ruby-on-Rails. In turn, Rails is riding the Web 2.0 wave, coming
as it does from underpinning the very Web 2.0 
<a href="http://www.37signals.com">37signals</a> 
product suite.  
</p><p>
Rails and Ruby have tapped into the tech Zeitgeist of friendly,
simple and powerful. The speed with which the Ruby and Rails
communities have delivered the key components of Web 2.0 is matched
by the speed at which 
<a href="http://radar.oreilly.com/archives/2007/05/state_of_the_co_10.html">Ruby and Rails books are leaving the shelves</a>.
</p><p>
What is the ideal platform of Web 2.0? Will it be Rails and Ruby?
Will Ruby ride the Web 2.0 wave into the mainstream in the same way
Java rode the Web 1.0 wave?
</p><p>
Well, here&#39;s the problem with that question: Web 2.0 is supposed to
be primarily about the <i>Web</i> itself as the platform, as 
<a href="http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html">explained first</a>
by Tim O&#39;Reilly and then by a thousand Web 2.0 vendors and industry
watchers after him.
</p><p>
Web-as-platform is not just vendor hype or pundit hand-waving.
Let&#39;s think about what O&#39;Reilly meant by that.
</p><p>&#160;</p><p>
<b>Web as Platform</b>
</p><p>
Web 2.0 is about making the Web more interactive, and thus able to
support applications where Java and .Net would once have been
considered the sole delivery platforms.
</p><p>
The fact that the technologies of the Web can be turned to this
use is a shift with far-reaching implications.
</p><p>
Broadly, the shift we are seeing is from the one-way, static
document delivery of Web 1.0 towards the two-way, dynamic data
exchange of Web 2.0.
</p><p>
This fundamental repurposing is delivering more complex, interactive
applications that work inside our browsers and which fully leverage
the benefits of online operation. 
</p><p>
Web 2.0 is bringing the user and their stuff <i>into</i> the very Web
that they hitherto only passively consumed.  This network-enablement
of the user in turn enables their <i>social</i> networking and their
shared creativity and self-expression. 
</p><p>
Web 2.0 has tapped into a deep human need - a fact reflected in the
vast traffic volumes and correspondingly vast valuations of Web 2.0
startups that we&#39;re currently seeing.
</p><p>
But Web 2.0 is not just for the startups: Enterprise Web 2.0 is
coming! The bigco.com site is going to be looking a little, well,
static and lifeless when compared to the new sites that are
springing up everywhere, and that most of BigCo&#39;s employees are
using. Further, BigCo can gain huge benefits from Web 2.0 approaches
empowering and connecting those employees on the Intranet. And that
Intranet is an ideal platform for deploying company-wide, interactive
applications.
</p><p>
This shift in the Web to two-way dynamic data is being powered by a
set of technologies that a Web platform programmer is going to have
to learn.
</p><p>&#160;</p><p>
<b>Web 2.0 Platform Technologies</b>
</p><p>
Anything that claims to be an application platform must support
data. Web 2.0 is above all the data Web. Web 2.0 is about
semantics, not free text and font sizes. Hence, it inevitably starts
with data-oriented formats such as 
<a href="http://en.wikipedia.org/wiki/XHTML">XHTML</a>, 
<a href="http://www.yaml.org/">YAML</a> and 
<a href="http://json.org/">JSON</a>.  In Web 2.0
more than ever, we talk about data not documents and about
separating data from its presentation.  CSS is big in Web 2.0, for
good reason (not just for gradient fills). Inside the page of a
self-respecting Web 2.0 application, you&#39;ll often find 
<a href="http://microformats.org/">Microformats</a> - again, 
semantics in the page: publishing concise data of widely-understood
standard formats. Some of those Microformats may be 
<a href="http://support.technorati.com/support/siteguide/tags">tags</a>, and in
Web 2.0 the simplest and most powerful semantics are those little
pivot points in Webspace.
</p><p>
Again, if you&#39;re going to be a general purpose platform, you need to
be able to fetch, update, notify and display that data.  Web 2.0
integration usually happens via JSON data structures and 
<a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">REST</a>
interfaces (some of which, especially those based on 
<a href="http://atompub.org/">AtomPub</a>,
are true REST).  Following on from the data-like pages we serve to
browsers, come the data-like feeds we publish to feed readers and to
other applications.  After feeds, the core technology that gives
Web 2.0 its dynamism and interactivity is 
<a href="http://en.wikipedia.org/wiki/Ajax_(programming)">Ajax</a> and 
<a href="http://en.wikipedia.org/wiki/DHTML">DHTML</a>, and
increasingly 
<a href="http://en.wikipedia.org/wiki/Comet_(programming)">Comet</a>
(server push to the browser). The core technology
that gives Web 2.0 its users is increasingly 
<a href="http://openid.net/">OpenID</a>.
</p><p>
All of the above are open technologies. You can do Web 2.0 without
proprietary technologies, just like Web 1.0. Indeed, keeping to the
principles that made the Web successful is also essential to the
success of Web 2.0. The Web platform is the first application
platform that has to consider scalability and interoperability, and
will ignore them at its cost.  I have written before about open
data, use of standard data formats and using REST properly to avoid
creating unscalable, walled-garden sites. You don&#39;t need Flash or
SilverLight, you don&#39;t need vast amounts of custom Javascript, you
don&#39;t need function calls tying you to your servers.
</p><p>&#160;</p><p>
<b>Programming the Web 2.0 Platform</b>
</p><p>
So, we&#39;ve got the dynamic data that you&#39;d expect of a would-be
platform. But how to drive changes in those data? How do we
program the Web platform to animate all this data?
</p><p>
All Rails programmers will know the above technology list; it comes
with the territory. The Web 2.0 Platform can be very succesfully
powered by Rails and Ruby. Ruby and Rails make Web 2.0
applications simple and quick to program, addressing many of the
needs of simple Web 2.0 applications out of the box. There&#39;s little
doubt that Ruby and Rails will have a secure future riding the
Web 2.0 wave.
</p><p>
However, for many Web 2.0 applications, programming may not even be
necessary, at least not in the procedural or imperative style
programmers expect. 
</p><p>
Look back to the early 90&#39;s: &#39;Web 1.0&#39; made a whole class of
applications easy to write without programming: applications for
navigating information. You just wrote in HTML, declaratively.
</p><p>
Now look back at the long path of evolution of Java, through J2EE,
Spring, AOP, IoC, Domain Driven Design, POJOs. All trying to
achieve the simple goal of &#39;remove all that MVC and persistence
stuff and let us concentrate on business or domain objects&#39;. But
they never quite seemed to get it right. 
</p><p>
But then Rails comes along, and has succeeded by simple virtue of
concentrating on easy manipulation of the 
&#39;<a href="http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html?page=3">Intel Inside</a>&#39;
of Web 2.0 - data. 
</p><p>
It&#39;s reminiscent of the 
&#39;<a href="http://nakedobjects.org/wiki/Main_Page">Naked Objects</a>&#39;
approach to application building with minimal programming (just
business or domain code in POJOs that expose state into the GUI and
are transparently persisted). The 
<a href="http://ajaxian.com/archives/streamlined-naked-objects-for-the-web">Streamlined</a>
project takes Rails even further down this path. Rails&#39; nearest
competitor, <a href="http://www.djangoproject.com/">Django</a>,
has an admin interface that works in a similar way, automatically
generating edit pages based on the data model.
</p><p>
Web 2.0 is about data, about semantics. Web 2.0 is inherently
declarative.  So Web 2.0 applications can be written declaratively -
Web 2.0 mashups can be just wired together and their data animated
by business rules. A bit like programming spreadsheets. 
</p><p>
<a href="http://www.techcrunch.com/2007/03/02/5-ways-to-mix-rip-and-mash-your-data/">Teqlo</a>, 
<a href="http://www.techcrunch.com/2007/04/16/coghead-announces-17000-developers-building-applications-visually/">Coghead</a>, 
<a href="http://www.techcrunch.com/2007/03/02/5-ways-to-mix-rip-and-mash-your-data/">Pipes</a>, 
<a href="http://www.techcrunch.com/2006/03/11/dabbledb-online-app-building-for-everyone/">DabbleDB</a>, 
<a href="http://www.techcrunch.com/2007/06/19/new-site-jumps-into-the-application-creation-space/">LongJump</a>, 
<a href="http://www.techcrunch.com/2007/05/18/microsoft-launches-popfly-mashup-app-creator-built-on-silverlight/">Popfly</a>, 
<a href="http://www.techcrunch.com/2006/08/21/salesforce-dives-deep-into-google-adwords/">AppExchange</a> and
<a href="http://www.techcrunch.com/2006/04/30/wyaworks-app-builder-for-non-coders/">Wyaworks</a> 
are all examples of the different ways to program the new Web 2.0
platform without imperative code.
</p><p>
That&#39;s what we mean by Web-as-platform - not only is the underlying
programming language irrelevant, it will often not even be needed,
certainly for simple data manipulation applications and for many
simple mashups. Being RESTful gives you a massive head start in
this, of course.
</p><p>
While Rails is already in the game with its innate understanding of
Web 2.0 techniques and philosophies, Ruby itself has a huge amount
to offer the would-be declarative programmer, who is making the
transition to this new Web platform from their traditional Java
or .Net platform.  In particular, it is easy to write your domain
logic in a declarative style in Ruby: they call them &#39;DSLs&#39; these
days, but the idea is the same in most examples I&#39;ve seen.
</p><p>&#160;</p><p>
<b>Web 2.0 - The Web Redux</b>
</p><p>
Now, if you&#39;ve been following this blog, you&#39;ll know I have a
few opinions on 
<a href="http://duncan-cragg.org/blog/post/right-way-to-do-ajax-is-declaratively/">Declarative Web 2.0</a> and on
<a href="http://duncan-cragg.org/blog/post/distributed-observer-pattern-rest-dialogues/">patterns for programming REST</a>.
Essentially I argue that, if you want to play in the Web 2.0
platform game, you don&#39;t want to be writing screeds of Javascript
functions that call more functions on your servers. 
</p><p>
I recently presented some ideas along these lines at
the WWW2007 conference, entitled 
&#39;<a href="http://www2007.org/prog-Developers.php#saturday">The Micro Web: putting the Web back into Web 2.0</a>&#39;,
where I also showed a demo written in Python.
</p><p>
This approach combines my 
<a href="http://duncan-cragg.org/blog/post/distributed-observer-pattern-rest-dialogues/">Distributed Observer Pattern</a>
with Comet push to enable highly dynamic Web 2.0 applications to be
coded RESTfully and declaratively, with zero Javascript.  The
Distributed Observer Pattern offers a clean programming model for
animating the Web 2.0 dynamic-data technology set I described above. 
</p><p>
I believe the Observer Pattern is core to the way we&#39;ll be
programming when the Web 2.0 Platform hits mainstream.  It enables
the kind of event- and rule-driven programming that matches the
characteristics of the Web 2.0 dynamic data platform. As a 
further killer benefit, it also directly addresses the optimal
utilisation of multicore processors.
</p><p>
I am currently porting my Python implementation of this approach to
Ruby, in the
<a href="http://rubyforge.org/projects/redux/">Redux</a> 
project on Rubyforge.  Redux stands for &#39;Ruby Event-Driven Update
Exchange&#39;.  It uses the highly scalable
<a href="http://rubyforge.org/projects/eventmachine">EventMachine</a>
epoll-based event loop to power its event-driven architecture.
This will be essential when Redux is asked to scale up a 
Comet-based application.
</p><p>
Like Rails, Redux will be a Web (2.0) application framework, but
unlike Rails, it puts the Observer Pattern and event- and
rule-driven programming at its core. 
</p><p>
Redux&#39;s headline is &#39;Web 2.0 in-a-box&#39; or &#39;Naked Objects on the Web&#39;.
</p><p>&#160;</p><p>
<b>Conclusion</b>
</p><p>
If you&#39;re in BigCo, and are responsible for setting BigCo&#39;s
technical strategy, then train your Java devs up on Web 2.0 core
technologies such as Ajax, JSON, Atom, Microformats and OpenID.  
</p><p>
And fire up their enthusiasm by tapping into Ruby (perhaps via
JRuby) on your way to the Web 2.0 platform. 
</p><p>
Learn patterns for mashing and integrating. Learn about REST and
event- and rule-driven programming, including declarative DSLs.
</p><p>
When this Web platform hits BigCo, you will probably find that its
REST or ROA style make your SOA integration strategy look rather
complex and unweildy.
</p><p>
Check out the
<a href="http://duncan-cragg.org/blog/post/distributed-observer-pattern-rest-dialogues/">Distributed Observer Pattern</a>,
and download
<a href="http://rubyforge.org/projects/redux/">Redux</a>
when it&#39;s done (I&#39;ll let you know if you subscribe here!).
</p><p>
In 2007 and beyond, its the Web itself that&#39;s the platform, not
Java or .Net. But if you want to get there via a language-based
platform, Ruby could be the best way to transition to it.
</p><p>
<i>Note: Everything I said about Ruby and Rails applies equally in
technical terms to Python and Django, but regardless of the
significant benefits of the latter, Ruby and Rails have the Web 2.0
market and mindshare. I&#39;ll probably switch this blog from Django to
Redux sometime this year..</i>
</p><p>
<i>(c) 2007 Duncan Cragg</i>
</p><p>

</p>

            </div>
        </content>
    </entry>
    
    <entry>
        <id>http://duncan-cragg.org/blog/post/lighter-wins-2007/</id>
        <title>Lighter-than Wins in 2007</title>
        <published>2007-01-18T11:12:00Z</published>
        
        <updated>2007-01-18T11:12:00Z</updated>
        
        <link rel="alternate" type="text/html" href="http://duncan-cragg.org/blog/post/lighter-wins-2007/" title="Lighter-than Wins in 2007" />
        
        <category term="cyberspace" />
        
        <category term="architecture" />
        
        <category term="declarative" />
        
        <category term="web2.0" />
        
        <category term="yaml" />
        
        <category term="identity" />
        
        <category term="app" />
        
        <category term="microformats" />
        
        <category term="ajax" />
        
        <category term="rest" />
        
        <category term="atom" />
        
        <category term="json" />
        
        <category term="openid" />
        
        <category term="rajmo" />
        
        <summary type="xhtml">
            <div xmlns="http://www.w3.org/1999/xhtml">

<p>

What do all the MAJOR Web 2.0 technologies of 2007 have in
common? 
</p><p>
Let me list them first:
</p><pre>
    M.icroformats (including tags)
    A.jax (including Comet)
    J.SON (plus YAML)
    O.penID (plus SXIP, LID, Yadis)
    R.EST (including Atom, APP)
</pre><p>
What these technologies have in common is that they&#39;re
all <i>lighter</i> than their competitors:
</p><table class="two-col-table"><tr><td><p>Microformats </p></td><td><p> Lighter than the Semantic Web</p></td></tr>
<tr><td><p>Ajax </p></td><td><p> Lighter than Fat Client (!)</p></td></tr>
<tr><td><p>JSON </p></td><td><p> Lighter than XML</p></td></tr>
<tr><td><p>OpenID </p></td><td><p> Lighter than SAML/Liberty Alliance</p></td></tr>
<tr><td><p>REST </p></td><td><p> Lighter than SOA</p></td></tr>
</table><p>
 &#160; ...
</p>

            </div>
        </summary>
        <content type="xhtml" xml:space="preserve">
            <div xmlns="http://www.w3.org/1999/xhtml">

<p>
</p><div class="summary"><p>
What do all the MAJOR Web 2.0 technologies of 2007 have in
common? 
</p><p>
Let me list them first:
</p><pre>
    M.icroformats (including tags)
    A.jax (including Comet)
    J.SON (plus YAML)
    O.penID (plus SXIP, LID, Yadis)
    R.EST (including Atom, APP)
</pre><p>
What these technologies have in common is that they&#39;re
all <i>lighter</i> than their competitors:
</p><table class="two-col-table"><tr><td><p>Microformats </p></td><td><p> Lighter than the Semantic Web</p></td></tr>
<tr><td><p>Ajax </p></td><td><p> Lighter than Fat Client (!)</p></td></tr>
<tr><td><p>JSON </p></td><td><p> Lighter than XML</p></td></tr>
<tr><td><p>OpenID </p></td><td><p> Lighter than SAML/Liberty Alliance</p></td></tr>
<tr><td><p>REST </p></td><td><p> Lighter than SOA</p></td></tr>
</table><p>
</p></div><p>
I&#39;m reminded of Tim Bray&#39;s 
<a href="http://www.tbray.org/ongoing/When/200x/2004/01/03/TPM1">Technology Predictor Success Matrix</a>
and his appreciation of the 
<a href="http://www.tbray.org/ongoing/When/200x/2004/01/14/TPSM-8020">80:20 phenomenon</a>.
If hitting the sweet spot of achieving a lot with only a little
is the main test of potential, then these five Web 2.0
technologies are all set for success.
</p><p>
So it&#39;s no surprise to see Tim supporting
<a href="http://www.tbray.org/ongoing/When/200x/2006/06/07/Microformats">Microformats</a>
<a href="http://www.tbray.org/ongoing/When/200x/2006/01/08/No-New-XML-Languages">once or</a>
<a href="http://www.tbray.org/ongoing/When/200x/2005/10/06/Whats-Happening">twice</a>
and even
<a href="http://www.tbray.org/ongoing/When/200x/2006/12/21/JSON">JSON</a>,
in spite of his, um, XML background. He also understands and uses
<a href="http://www.tbray.org/ongoing/When/200x/2006/04/19/The-Cost-of-AJAX">Ajax</a>
and backs
<a href="http://www.tbray.org/ongoing/When/200x/2004/09/18/WS-Oppo">REST</a>
(in particular via <a href="http://www.tbray.org/ongoing/When/200x/2005/11/21/Atom-Status">Atom</a>).
Tim has not yet mentioned OpenID, instead referring to 
<a href="http://www.tbray.org/ongoing/When/200x/2006/04/28/SAML-Days">SAML</a> and 
<a href="http://www.tbray.org/ongoing/When/200x/2005/05/15/WS-Federation">Liberty Alliance</a>
(please don&#39;t be crass by leaving a comment speculating on the reason for this...).
</p><p>
These MAJOR Web 2.0 technologies should form the basis of
the two-way, interactive data Web or the Web-as-a-platform
vision that we&#39;ve all been promised.
</p><p>
However, they will need taking a little further this year, in
order to bring them closer together and to make this vision
happen in a seamless way.
</p><p>
A synergy between these 80:20 technologies can potentially
produce much more than just the &#39;next version of the Web&#39;, if
engineered well.
</p><p>
I have already discussed the 
<a href="http://duncan-cragg.org/blog/post/microformats-challenge-web-feeds-and-web-apis/">Subversive Microformat</a>,
I&#39;ve promoted
<a href="http://duncan-cragg.org/blog/post/right-way-to-do-ajax-is-declaratively/">Declarative Ajax</a>
and currently I&#39;m slowly working up to 
<a href="http://duncan-cragg.org/blog/post/getting-data-rest-dialogues/">Symmetric REST</a>.
</p><p>
Next up, I&#39;ll be asking you to consider a web of
<a href="http://www.google.com/search?q=json+microformat&amp;num=100">JSON Microformats</a>
and ways to merge
<a href="http://www.google.com/search?q=hcard+openid&amp;num=100">hCard and OpenID</a>
into active user personas - even avatars...
</p><p>
<i>I&#39;ll tag this acronym as &#39;<a href="http://technorati.com/tag/rajmo">rajmo</a>&#39;
instead of &#39;major&#39;, for obvious reasons.</i>
</p><p>

</p>

            </div>
        </content>
    </entry>
    
    <entry>
        <id>http://duncan-cragg.org/blog/post/setting-data-rest-dialogues/</id>
        <title>Setting Data | The REST Dialogues</title>
        <published>2006-11-15T23:37:00Z</published>
        
        <updated>2006-11-15T23:37:00Z</updated>
        
        <link rel="alternate" type="text/html" href="http://duncan-cragg.org/blog/post/setting-data-rest-dialogues/" title="Setting Data | The REST Dialogues" />
        
        <category term="architecture" />
        
        <category term="declarative" />
        
        <category term="web2.0" />
        
        <category term="strest" />
        
        <category term="app" />
        
        <category term="microformats" />
        
        <category term="dialogue" />
        
        <category term="rest" />
        
        <category term="atom" />
        
        <summary type="xhtml">
            <div xmlns="http://www.w3.org/1999/xhtml">

<p>

In an exclusive nine-part dialogue with <i>an imaginary eBay
Architect</i>, we present an accessible discussion of the 
REST vs. SOA issue.
</p><p>
Although eBay have what they call a &#39;REST&#39; interface, it is, in
fact, a 
<a href="http://duncan-cragg.org/blog/post/strest-service-trampled-rest-will-break-web-20/">STREST</a>
interface, and only works for one of the many function calls
that they make available via SOAP (GetSearchResults).
</p><p>
In this <a href="http://duncan-cragg.org/blog/post/getting-data-rest-dialogues/">dialogue series</a>,
I argue the case for eBay to adopt a truly REST approach to
their integration API. 
</p><p>
<b>Part 2: Setting Data</b>
 &#160; ...
</p>

            </div>
        </summary>
        <content type="xhtml" xml:space="preserve">
            <div xmlns="http://www.w3.org/1999/xhtml">

<p>
</p><div class="summary"><p>
In an exclusive nine-part dialogue with <i>an imaginary eBay
Architect</i>, we present an accessible discussion of the 
REST vs. SOA issue.
</p><p>
Although eBay have what they call a &#39;REST&#39; interface, it is, in
fact, a 
<a href="http://duncan-cragg.org/blog/post/strest-service-trampled-rest-will-break-web-20/">STREST</a>
interface, and only works for one of the many function calls
that they make available via SOAP (GetSearchResults).
</p><p>
In this <a href="http://duncan-cragg.org/blog/post/getting-data-rest-dialogues/">dialogue series</a>,
I argue the case for eBay to adopt a truly REST approach to
their integration API. 
</p><p>
<b>Part 2: Setting Data</b>
</p></div><p>
</p><p>
<b>Duncan Cragg:</b> Now, let&#39;s look at those calls in eBay&#39;s SOAP
API that are expected to change data. There is often a
corresponding &#39;Get&#39; function.  
</p><p>
Examples are GetTaxTable, SetTaxTable and GetMyMessages,
ReviseMyMessages, ReviseMyMessagesFolders, DeleteMyMessages,
etc. 
</p><p>
Here, there is an implicit model of data (or lists of data)
that you can look at, modify, delete, etc.
</p><p>
<b>eBay Architect:</b> It&#39;s not just data: Tax Tables and Messages
have meaning and behaviour internally to the server.
</p><p>
<b>DC:</b> Yes, but we&#39;re talking about what the API is telling
us, here. It says things like GetTaxTable and SetTaxTable!
</p><p>
We&#39;ll come on to business processes later, but just look at
the simple stuff first.
</p><p>
<b>eA:</b> OK, so what&#39;s the benefit of doing these calls in
HTTP, through POST or whatever?
</p><p>
<b>DC:</b> Again, scalability and interoperability.
</p><p>
In the same way as with GET, you can partition your POST
handling across the URI space. Have your Tax Tables and Message
folders handled by many machines, split by their URIs. This is
an example of the inherent parallelisability of the Web&#39;s
architecture.
</p><p>
<b>eA:</b> We do partition by function: search, display, sell.
</p><p>
<b>DC:</b> Sure, but you had to &#39;hard-code&#39; this partition: to use
specific heuristics and code to achieve it: URI-based
partitioning is much more generic and flexible, and can be much
finer-grained. You seldom get single-point of failure or
bottleneck issues with good REST architectures.
</p><p>
<b>eA:</b> If you say so.
</p><p>
<b>DC:</b> Interoperability again derives from the standardisation
of the Content-Types and the schemas of POSTed data. When you
know the meaning of the data you fetch, you also know how to
try and change it, if you can.
</p><p>
<b>eA:</b> In HTML, you actually get presented a form in some
GET data which explicitly tells you what to POST back - what
the &#39;schema&#39; is.
</p><p>
What&#39;s the equivalent in a general REST integration context
where it&#39;s machines that are doing the POSTing?
</p><p>
<b>DC:</b> Well, the same applies, insofar as the GET data
effectively tells you what any return data should look like.
However, this time it&#39;s in an <i>implicit</i> way.
</p><p>
Where, in the read context, you understood what to do with a
given content type you&#39;d fetched, now, in the write context,
you further understand what you can send back to it again.
</p><p>
<b>eA:</b> Can you give examples, please? The Tax Table perhaps?
</p><p>
<b>DC:</b> Straightforward data updating is the simplest case -
it&#39;s the same content type coming out as going back in. You see
a Tax Table at some URI, then you just PUT a new Tax Table back
at that URI to try and replace it.
</p><p>
All the API function calls beginning &#39;Set&#39; should probably
be implemented this way.
</p><p>
<b>eA:</b> OK, so how does REST implement our Message API
functions?
</p><p>
<b>DC:</b> An example of a data format that implies its edit
capabilities by reference to a standard is Atom syndication.
</p><p>
You can GET a list of Atom entries, then POST a new one
according to the Atom Publishing Protocol (APP) specification.
You POST, not to a &#39;service&#39; or handler, but to the URI of
the actual collection you&#39;re adding to.
</p><p>
<b>eA:</b> So what&#39;s that got to do with our Messages?
</p><p>
<b>DC:</b> The eBay Message lists are a great candidate for using
this approach, with the benefit that any (recent) feed reader
can be used to view them, and an APP-compliant client used to
manage them. 
</p><p>
All the API function calls beginning &#39;Add&#39; should probably
be implemented in the same way APP adds new entries, or you
should consider using APP itself to implement them.
</p><p>
<b>eA:</b> OK, so we can replace some calls with a standard set of
REST interactions. But clients still have to know about Tax
Table schemas, User Preferences schemas, Message schemas, etc. 
</p><p>
It&#39;s not enough to simply know about HTTP and HTML to be
interoperable any more, like a browser does. It&#39;s not even
enough to just know APP.
</p><p>
Surely interoperability stops when the content types and
schemas start to proliferate like this?
</p><p>
<b>DC:</b> Schema proliferation is SOA&#39;s problem - so I&#39;m glad you
brought it up!  It&#39;s baked in to the SOA mindset that it&#39;s OK
to design your own interfaces and schemas from scratch each time.
</p><p>
Conversely, the expectation and culture in the Web and especially
in the REST-aware community is to constantly look out for
opportunities to conform and to standardise schemas and
interactions, and to build on layers below that are already
standardised. It&#39;s a side-effect of the shareability of URIs.
</p><p>
With REST you get interoperability at many levels above the
byte-transfer of HTTP. Content type understanding and
standardisation can occur all the way up from characters to Tax
Tables.
</p><p>
<b>eA:</b> I&#39;m not sure I get this.
</p><p>
<b>DC:</b> OK: there is some code that understands basic HTTP GET
and PUT, and UTF-8 characters - and doesn&#39;t need to know what a
Tax Table is - some that understands UTF-8 plus XML, some that
understands that plus Atom, or plus XHTML, then XHTML tables
and Microformats like hCalendar, hCard (and hAtom!), then
conference schedules using hCalendar and hCard. Tax Tables
can perhaps use XHTML tables.
</p><p>
Clients may or may not need to know what the schema of a
Message looks like internally in order to be able to do useful
work with Messages at their level of understanding - from
character stream up to APP.
</p><p>
<b>eA:</b> I&#39;m not sure how general auction schemas fit in there.
</p><p>
<b>DC:</b> You never know, your eBay schemas might be taken into
account when coming up with new standard content types for
e-commerce!
</p><p>
<b>eA:</b> Hopefully. We could always put everything into XHTML
tables for you!
</p><p>
<b>DC:</b> Ha! Go for it. Having done some HTML scraping myself,
I&#39;d welcome such semantics!
</p><p>
<b>eA:</b> Right, it&#39;s OK when we&#39;re just talking data that you
can read and write - HTTP, APP, REST, whatever may be great for
that - but our API has much more complex business functions in
it that don&#39;t fit that simplistic model.
</p><p>
There&#39;s a whole load of functions in our API that aren&#39;t just
about getting and setting data or collections of data. Some are
eBay- or auction-specific.
</p><p>
<b>DC:</b>  This is one of the Myths of REST - that it&#39;s just for
simplistic reading and writing of data. 
</p><p>
It&#39;s a actually a myth that&#39;s often propagated by the REST
community itself, especially with their over-emphasis on the
Four HTTP Verbs, which seem to map so conveniently onto Create,
Read, Update and Delete.
</p><p>
<b>eA:</b> But they <i>do</i> map so well - I thought that was &#39;good&#39;
REST...
</p><p>
<b>DC:</b> It is often good, but can detract from the whole goodness! 
</p><p>
One consequence of this mapping it that people inevitably go on
to see an analogy between REST and databases, and then start to
expect transactions and other database features.
</p><p>
Another consequence of the database analogy is that resources
are seen as lifeless servants of the active client: it takes
away responsibility from a resource to be master of its own
destiny. 
</p><p>
This then causes confusion (even within the REST community)
about the power of the client and even the very meaning of such
basics as 
<a href="http://www.imc.org/atom-protocol/mail-archive/msg05425.html">the PUT method</a>.
</p><p>
The fact is, GET and POST are more than enough to be REST
compliant. This cut-down pair also help focus the mind on URIs,
two-way content transfer, content type or schema and on the
responsibilities of each resource as active players in an
integration scenario.
</p><p>
<b>eA:</b> Sounds like a minority REST view - any support from a
REST luminary for that?
</p><p>
<b>DC:</b>  Tim Bray 
<a href="http://www.tbray.org/ongoing/When/200x/2003/07/03/HTTP-RSS">has a</a>
<a href="http://www.tbray.org/ongoing/When/200x/2006/03/26/On-REST#p-5">history</a>
<a href="http://www.intertwingly.net/wiki/pie/CarrotVsOrangeDiscuss">of</a>
<a href="http://www.imc.org/atom-syntax/mail-archive/msg02869.html">suggesting</a>
that GET and POST are enough.
</p><p>
And recently, there has been further high-level support from
Sam Ruby and Leonard Richardson in their manifesto for an 
<a href="http://www.crummy.com/writing/REST-Web-Services/">upcoming book</a>.
</p><p>
<b>eA:</b> I bet you still get told off, but it sounds reasonable
to me.
</p><p>
<b>DC:</b> So, to summarise: use GET to read data, then POST back
to the <i>same</i> URI to <i>suggest</i> changes to the resource there.
</p><p>
All based on a given level of understanding and interpretation
of the content type and any corresponding interaction standards.
</p><p>
Interoperability and scalability in a nutshell!
</p><p>
Now I will explain how there&#39;s more to REST than simple reading
and (attempted) writing of resources. We&#39;re still only
two-ninths done...
</p><p>
<i>(c) 2006 Duncan Cragg</i>
</p><p>&#160;</p><p>
In Part 3: <a href="http://duncan-cragg.org/blog/post/business-functions-rest-dialogues/">Business Functions</a>.
</p><p>
<i>Note that the opinions of our imaginary eBay Architect don&#39;t
necessarily represent or reflect in any way the official
opinions of eBay or the opinions of anyone at eBay.</i>
</p><p>
<i>Indeed, I can&#39;t guarantee that the opinions of our real blogger
necessarily represent or reflect in any way the official
opinions of Roy Fielding...</i>
</p><p>

</p>

            </div>
        </content>
    </entry>
    
    <entry>
        <id>http://duncan-cragg.org/blog/post/getting-data-rest-dialogues/</id>
        <title>Getting Data | The REST Dialogues</title>
        <published>2006-11-14T00:05:00Z</published>
        
        <updated>2006-11-14T00:05:00Z</updated>
        
        <link rel="alternate" type="text/html" href="http://duncan-cragg.org/blog/post/getting-data-rest-dialogues/" title="Getting Data | The REST Dialogues" />
        
        <category term="architecture" />
        
        <category term="declarative" />
        
        <category term="web2.0" />
        
        <category term="strest" />
        
        <category term="app" />
        
        <category term="microformats" />
        
        <category term="dialogue" />
        
        <category term="rest" />
        
        <category term="atom" />
        
        <summary type="xhtml">
            <div xmlns="http://www.w3.org/1999/xhtml">

<p>

In an exclusive nine-part dialogue with <i>an imaginary eBay
Architect</i>, we present an accessible discussion of the 
REST vs. SOA issue.
</p><p>
Although eBay have what they call a &#39;REST&#39; interface, it is, in
fact, a 
<a href="http://duncan-cragg.org/blog/post/strest-service-trampled-rest-will-break-web-20/">STREST</a>
interface, and only works for one of the many function calls
that they make available via SOAP (GetSearchResults).
</p><p>
In this <a href="http://duncan-cragg.org/blog/post/getting-data-rest-dialogues/">dialogue series</a>,
I argue the case for eBay to adopt a truly REST approach to
their integration API. 
</p><p>
<b>Part 1: Getting Data</b>
 &#160; ...
</p>

            </div>
        </summary>
        <content type="xhtml" xml:space="preserve">
            <div xmlns="http://www.w3.org/1999/xhtml">

<p>
</p><div class="summary"><p>
In an exclusive nine-part dialogue with <i>an imaginary eBay
Architect</i>, we present an accessible discussion of the 
REST vs. SOA issue.
</p><p>
Although eBay have what they call a &#39;REST&#39; interface, it is, in
fact, a 
<a href="http://duncan-cragg.org/blog/post/strest-service-trampled-rest-will-break-web-20/">STREST</a>
interface, and only works for one of the many function calls
that they make available via SOAP (GetSearchResults).
</p><p>
In this <a href="http://duncan-cragg.org/blog/post/getting-data-rest-dialogues/">dialogue series</a>,
I argue the case for eBay to adopt a truly REST approach to
their integration API. 
</p><p>
<b>Part 1: Getting Data</b>
</p></div><p>
</p><p>
<b>Duncan Cragg:</b> So - let&#39;s get straight to my argument: I
claim that your SOAP APIs, as instances of the SOA style,
won&#39;t scale or interoperate as well as they would if they were
implemented in the REST style. Which, in the form of the Web,
has largely proven scalability and interoperability.
</p><p>
<b>eBay Architect:</b> SOA won&#39;t scale or interoperate and REST
will?  You&#39;ve got some explaining to do there: the whole
industry is going SOA crazy, and we&#39;re following that trend.
You&#39;ll need to give specific examples. 
</p><p>
<b>DC:</b> OK.
</p><p>
<b>eA:</b> And even if it is true, we don&#39;t care about
scalability and interoperability: we have quite low traffic on
our APIs - certainly compared to port 80; plus we&#39;re eBay so we
don&#39;t need to interoperate with anyone.
</p><p>
<b>DC:</b> That&#39;s true now, but if the Web 2.0 vision comes
together, you may care: your API traffic could increase
dramatically.  It would be better to be the one prepared for
the scale of the API-Web! 
</p><p>
Can you really argue in your company that you don&#39;t need to be
scalable? What if your port 80 traffic needs to be routed to
your APIs for some reason?
</p><p>
<b>eA:</b> Maybe.
</p><p>
<b>DC:</b>  As for interoperability, you could be excluded from
Web 2.0 industry-boosting consortia, or excluded from perhaps
hugely popular Web 2.0 applications in the future...
</p><p>
Interoperability raises the level of the market as a whole.
Market players shouldn&#39;t differentiate on what&#39;s common to
them, they should differentiate on the level above. 
</p><p>
It also depends on the value you place on having happy
customers who don&#39;t have to do the same thing multiple ways or
multiple times.
</p><p>
<b>eA:</b> Ha! I&#39;m sure there&#39;s a name for that style of argument!
</p><p>
So, let&#39;s say we want to be good scalable and interoperable
citizens in a future Web 2.0 world: show me how REST can help
us more than SOA and SOAP do!
</p><p>&#160;</p><p>
</p><p>
<b>Getting Data</b>
</p><p>
<b>DC:</b> OK, let&#39;s look at your SOAP API.  There are 72 function
calls in there that begin with &#39;Get&#39;. Each one specifies a
particular piece of data that you can fetch.
</p><p>
<b>eA:</b> Yes, our API is extremely rich.
</p><p>
<b>DC:</b> Sure, but you don&#39;t need a new function call for
everything you can get from your system: you can just use HTTP
GET!
</p><p>
<b>eA:</b> OK, but it&#39;s just data going in to request the
information, then data coming back out again. What difference
does it make whether we use HTTP or SOAP to carry those
messages?  You&#39;ve just moved the name onto your URI!
</p><p>
<b>DC:</b> It&#39;s not just any &#39;data going in&#39;: the URI can be
passed around for anyone to re-use. This URI is more
interoperable because so much deployed software understands it.
No-one understands &#39;GetSearchResults()&#39;!
</p><p>
<b>eA:</b> OK.
</p><p>
<b>DC:</b> Another example of how the URI can glue things together
is that the data returned from your GETs can have more URIs in
them, ready to go!  You won&#39;t get data from your Web Service
with &#39;GetItem()&#39; in it..
</p><p>
<b>eA:</b> Heh - I s&#39;pose not.
</p><p>
<b>DC:</b> REST also talks about the formats of the data behind a
URI. In a GET, the response data is given a Content-Type, and
there&#39;s an expectation that clients will understand the types
of data being returned: interoperability comes from broad
standardisation of return data.
</p><p>
<b>eA:</b> But we return XML, and our schemas are published.
They&#39;re specific to our application anyway.  That wouldn&#39;t
change with REST.
</p><p>
<b>DC:</b>The explicit statement of Content-Type reflects a
culture of agreement forced by the sharability of URIs: your
URIs are more sharable when more clients understand the data
they dereference to.
</p><p>
On the other hand, the culture of SOA is to declare custom
WSDL and custom XML schemas.
</p><p>
Like I said, one day you may care about interoperability, and
having an architecture that puts a high value on content type
and schema standardisation, as REST does, puts you one step
ahead. 
</p><p>
<b>eA:</b> We&#39;ll see.
</p><p>
<b>DC:</b> You can also gain scalability by partitioning on those URIs.
</p><p>
<b>eA:</b> We already do plenty of partitioning of our data and functions.
</p><p>
<b>DC:</b> Yes, but URI partitioning cuts right through the system
in a very simple way: your partitioning is an application-specific 
optimisation which has to be hand-coded behind the SOAP interface.
</p><p>
<b>eA:</b> Mmm. Maybe.
</p><p>
<b>DC:</b> Another benefit of using HTTP over using SOAP is
that you get cacheing built in to the architecture, which you
can start using as soon as you ask for it in the headers.
This boosts scalability.
</p><p>
<b>eA:</b> OK, that&#39;s fair. Our clients would have to write their
own caches, should they need them. But in general we advise
against cacheing our data and don&#39;t put expiry on them or
have not-modified checks.
</p><p>
<b>DC:</b> Which is where you&#39;re potentially inefficient.
</p><p>
<b>eA:</b> Maybe. We internally cache things like the data behind 
GetCategories, and advise our users how to cache it themselves.
</p><p>
<b>DC:</b> Again - it&#39;s application-specific.
</p><p>
So - even in the simple cases of fetching data, REST has given
you much greater scalability and interoperability than your
SOAP interface - as well as a simpler, more generic approach.
</p><p>
And we&#39;re only one-ninth of the way through our conversation!
</p><p>
<b>eA:</b> How do you know that??
</p><p>
<b>DC:</b> Aaah...
</p><p>
<i>(c) 2006 Duncan Cragg</i>
</p><p>&#160;</p><p>
In Part 2: <a href="http://duncan-cragg.org/blog/post/setting-data-rest-dialogues/">Setting Data</a>.
</p><p>
<i>Note that the opinions of our imaginary eBay Architect don&#39;t
necessarily represent or reflect in any way the official
opinions of eBay or the opinions of anyone at eBay.</i>
</p><p>
<i>Indeed, I can&#39;t guarantee that the opinions of our real blogger
necessarily represent or reflect in any way the official
opinions of Roy Fielding...</i>
</p><p>

</p>

            </div>
        </content>
    </entry>
    
    <entry>
        <id>http://duncan-cragg.org/blog/post/right-way-to-do-ajax-is-declaratively/</id>
        <title>The Right Way to do Ajax is Declaratively</title>
        <published>2006-07-13T14:33:00Z</published>
        
        <updated>2006-07-13T14:33:00Z</updated>
        
        <link rel="alternate" type="text/html" href="http://duncan-cragg.org/blog/post/right-way-to-do-ajax-is-declaratively/" title="The Right Way to do Ajax is Declaratively" />
        
        <category term="architecture" />
        
        <category term="xtech" />
        
        <category term="declarative" />
        
        <category term="web2.0" />
        
        <category term="microformats" />
        
        <category term="microsummaries" />
        
        <category term="ajax" />
        
        <category term="event-driven" />
        
        <category term="rest" />
        
        <summary type="xhtml">
            <div xmlns="http://www.w3.org/1999/xhtml">

<p>

Don&#39;t write your interactive Web application in custom
Javascript! The Web&#39;s Declarative nature needn&#39;t be
broken just because you want two-way dynamic data instead of
one-way documents on your site.
</p><p>
Instead, write Declaratively to generic Javascripts, plugins
and browser features such as 
<a href="http://domscripting.com/presentations/xtech2006/">Hijax</a>,
<a href="http://www.mnot.net/javascript/hinclude.html">hInclude</a>,
<a href="http://www.formfaces.com/">XForms</a>,
SVG, XBL, etc.
 &#160; ...
</p>

            </div>
        </summary>
        <content type="xhtml" xml:space="preserve">
            <div xmlns="http://www.w3.org/1999/xhtml">

<p>
</p><div class="summary"><p>
Don&#39;t write your interactive Web application in custom
Javascript! The Web&#39;s Declarative nature needn&#39;t be
broken just because you want two-way dynamic data instead of
one-way documents on your site.
</p><p>
Instead, write Declaratively to generic Javascripts, plugins
and browser features such as 
<a href="http://domscripting.com/presentations/xtech2006/">Hijax</a>,
<a href="http://www.mnot.net/javascript/hinclude.html">hInclude</a>,
<a href="http://www.formfaces.com/">XForms</a>,
SVG, XBL, etc.
</p></div><p>
This is the last of my 
<a href="http://xtech06.usefulinc.com/">XTech 2006</a>-inspired articles.
(I know: XTech was some weeks ago now, but I&#39;m sure you&#39;ll have
noticed that this is a &#39;contemporary article&#39; blog, not a news
blog!)
</p><p>
The theme for XTech 2006 was &#39;Building Web 2.0&#39;, and as a Web 2.0
Conference  
(<a href="http://www.flickr.com/photo_zoom.gne?id=153074441&amp;size=l">don&#39;t</a> tell 
<a href="http://radar.oreilly.com/archives/2006/05/controversy_about_our_web_20_s.html">O&#39;Reilly</a>),
there was tons of Ajax... And as this is essentially an XML
Conference, there was also a strong Declarative theme. 
</p><p>
And the right way to do Ajax <i>is</i> Declaratively!
</p><p>&#160;</p><p>
<b><a href="http://xtech06.usefulinc.com/schedule/detail/206">Ajax Lightning Demos</a></b>
</p><p>
Simon Willison presided over this session.  The demo that
impressed me most was 
<a href="http://domscripting.com/presentations/xtech2006/">Hijax: Progressive Enhancement with Ajax</a>,
whose paper is 
<a href="http://xtech06.usefulinc.com/schedule/paper/29">here</a>.
</p><p>
Hijax takes the view that you should design for no Ajax, then
hijack the links, form posts and page construction in Ajax to
speed it up, rather than designing for Ajax in the first place
and excluding users without a capable browser. This is related 
to the <a href="http://microformats.org/wiki/rest/ahah">AHAH</a> idea.
</p><p>
So you don&#39;t build your application in Javascript, but simply
enhance the existing Web model, running all the page&#39;s behaviour
back on the server which owns it. Much more Declarative!
</p><p>&#160;</p><p>
<b><a href="http://xtech06.usefulinc.com/schedule/detail/203">Web 2.0 On Speed</a></b>
</p><p>
<a href="http://www.mnot.net/blog/">Mark Nottingham</a> is one of those
people whose blogs are top of my feed list. He currently works
for Yahoo! This talk was about using some basic techniques to
ensure Web 2.0 doesn&#39;t grind to a halt with all those dynamic
and personalised pages. Simple fixes can get you very far:
faster servers like <a href="http://www.lighttpd.net/">lighttpd</a>,
various cacheing tricks, etc.  Yahoo! should be implementing
his ideas and insights on their sites (hopefully Mark will then
go on to tell their API designers how to do REST...)
</p><p>
The main idea that interested me was using Ajax for
client-side page construction (think client-side 
<a href="http://www.opensymphony.com/sitemesh/">SiteMesh</a>)
and for inserting personalised URLs into the page.
</p><p>
It&#39;s a bit like Hijax, that I mentioned above. Mark
<a href="http://www.mnot.net/blog/2006/05/16/web_2_caching">says</a>:
</p><blockquote class="others-content"><div><p>What I would like to see is for common JS functions like this
to be sifted out and standardised as declarative markup...</p></div></blockquote><p>
</p><p>
This is good stuff (assuming you agree with us that Declarative
is good!). See more in the 
<a href="http://www.mnot.net/blog/2006/05/16/web_2_caching">summary and slides</a>,
and in Mark&#39;s 
<a href="http://www.mnot.net/javascript/hinclude.html">hInclude proposal</a>.
</p><p>&#160;</p><p>
<b><a href="http://xtech06.usefulinc.com/schedule/detail/19">Ditching the database: XML and the PHP webapp</a></b>
</p><p>
David Megginson basically said we should work in XML throughout
our web apps: cache XML as your datastore, keeping all the
little snippets that make up your pages - dynamic and static -
cached in memory, then just send XML snippets from the server
cache to the Ajax client to render, etc. This is rather like Mark
Nottingham&#39;s tip above on client-side page assembly to achieve
greater cacheability.
</p><p>
<a href="http://xtech06.usefulinc.com/schedule/paper/19">Paper here</a>.
</p><p>&#160;</p><p>
<b><a href="http://xtech06.usefulinc.com/schedule/detail/189">Introduction to XHTML2 and XForms</a></b>
</p><p>
The flamboyant-looking and entertaining 
<a href="http://homepages.cwi.nl/~steven/">Steven Pemberton</a> of
the W3C presented a fast-paced and in-depth overview of XHTML2
and XForms.
</p><p>
Unless I missed something, it looks to me like XHTML2 has taken
a perfect trajectory between backwards-compatible concepts,
semantics and syntax and abstract idealism.  XHTML2 appears to
cleanly fix all the outstanding problems with HTML once and for
all.
</p><p>
Now, part of XHTML2 is XForms. XForms does the same cleaning up
job on HTML forms that XHTML2 does on HTML. 
</p><p>
The important thing to know is that it works as an XML &#39;schema
constraints engine&#39;. That is, it returns to the server a
fully-semantically-valid chunk of XML on a form submission.
The &#39;schema&#39; can include some static data pulled in from
a separate URL to populate drop-downs, etc.
</p><p>
Yet it is more than this: I asked if it was Turing Complete,
and Steven said yes. You can program an application using it.
</p><p>
And that application will be programmed Declaratively!
</p><p>
I can define the constraint that some output element be
dependent on some input, then if the user changes the input,
the output changes accordingly.
</p><p>
It&#39;s like Declarative Ajax. There were further talks on XForms
which I cover just below.
</p><p>
Of course, I asked if it was RESTful, and it seems it was,
mostly. The issue was that a URL may bring you in an editor
XForms page, which then itself brings in some data underneath.
</p><p>
The editor XForms page is the bookmarkable thing but you don&#39;t
see the URL of the <i>populating data</i>, so that&#39;s not
bookmarkable.  The page may change according to this data, but
bookmarking what you see still only bookmarks the editor, not
the editor plus the current visible data.
</p><p>
Also, even though XForms is amazingly programmable, it is still
a forms system at heart. For example, you have explicit input
and output elements; you can&#39;t get input events off the DOM and
rewrite the DOM as output.
</p><p>
Slides <a href="http://www.w3.org/2006/Talks/05-16-steven-XHTML2-XForms/">here</a>.
</p><p>
Read more about XHTML2 <a href="http://www-128.ibm.com/developerworks/xml/library/x-futhtml2.html">here</a>.
</p><p>
Read more on XForms from Mark Birbeck (a Pemberton collaborator)
<a href="http://internet-apps.blogspot.com/2006/02/flickr-search-hello-world-for-ajax.html">starting here</a>.
</p><p>&#160;</p><p>
</p><p>
<b><a href="http://xtech06.usefulinc.com/schedule/detail/137">Building Rich, Encapsulated Widgets Using XBL, XForms and SVG</a></b>
</p><p>
Mark Birbeck showed us how to create a Declarative client-side
mash of Flickr. OK, there&#39;s a tiny bit of script in there, but
I&#39;m sure it&#39;s unnecessary, as it only does some simple DOM
manipulation and event handling. Perhaps it can be replaced
somehow, or made part of a generic library.
</p><p>
<a href="http://xtech06.usefulinc.com/schedule/paper/137">Paper here</a>.
</p><p>&#160;</p><p>
</p><p>
<b><a href="http://xtech06.usefulinc.com/schedule/detail/133">XForms: an alternative to Ajax?</a></b>
</p><p>
Since XForms is so amazingly programmable, you can use it
instead of Ajax.
</p><p>
Instead of coding a special script on top of an Ajax library,
you can bring in a 
<a href="http://www.formfaces.com/">generic (Ajax) script</a>
that gives you XForms today, and write your application
Declaratively on top of that.
</p><p>
Alternatively, you can do some pre-processing on the server,
which is the approach Erik Bruchez explained here.
</p><p>
<a href="http://xtech06.usefulinc.com/schedule/paper/133">Paper here</a>
</p><p>&#160;</p><p>
</p><p>
<b><a href="http://xtech06.usefulinc.com/schedule/detail/93">The Power of Declarative Thinking</a></b>
</p><p>
This talk was more from Steven Pemberton giving us a little
history of his work and showing us how XForms can be used
for Declarative programming.
</p><p>
Some good quotes from the <a href="http://www.w3.org/2006/Talks/05-24-steven-declarative/">slides</a>:
</p><p>
</p><blockquote class="others-content"><div><p>.. a program that is 10 times longer is 32 times
harder to write.
</p><p>
Or put another way: a program that is 10 times smaller needs
only 3% of the effort. </p></div></blockquote><p>
And of course, the point is that Declarative programs are
usually 10 times smaller.
</p><blockquote class="others-content"><div><p>.. no one writes applications except programmers.
</p><p>
Interesting exception: spreadsheets
</p><p>
Mostly because they use a declarative programming
model.
</p><p>
The nice part about declarative programming is that the
computer takes care of all the boring fiddly detail.
</p></div></blockquote><p>
Now I&#39;m as aware as anyone of the dangers of giving
non-technical people the power to program. Spreadsheets are,
let&#39;s say, a mixed blessing.  There&#39;s probably a long way
to go before we can give the business the reins over their own
business rules.
</p><p>
But it will happen: it means splitting programmers into
(Declarative) Business Analysts and (Imperative) Those That
Enhance and Maintain The Underlying Processing Fabric. I 
can tell you now which group will get paid more.
</p><p>&#160;</p><p>
<b><a href="http://xtech06.usefulinc.com/schedule/detail/79">Standardising Web Applications: Rich Web Clients at W3C</a></b>
</p><p>
Dean Jackson gave a talk about what the W3C are doing to play
catch-up with all the latest goings-on in the Wide World of
Web 2.0.
</p><p>
Here&#39;s a quick list of things they&#39;re standardising:
XMLHttpRequest, Networking, Timers, Client-Side Storage, File
Upload, the Window class, DOM Level 3 Events and XPath,
Drag&#39;n&#39;Drop, Remote Events for XML (REX); XBL2, XUL (possibly
alongside XAML, MXML and LZX); Compound Document Formats.
</p><p>
Again, the magic word Declarative came up in the talk.
</p><p>
The Declarative aspects of Rich Web Clients centre around the
<a href="http://www.w3.org/2006/webapi/">DOM Level 3 work, Drag&#39;n&#39;Drop, Remote Events for XML (REX)</a>,
<a href="http://www.w3.org/2006/appformats/">XBL2 and XUL</a> and
<a href="http://www.w3.org/2004/CDF/">Compound Document Formats</a>.
SVG is a common theme between many of these (once again, Sam
Ruby is 
<a href="http://www.intertwingly.net/blog/2006/06/17/Inline-SVG">on</a> the
<a href="http://www.intertwingly.net/blog/2006/06/23/Sculpting-the-Future">case</a>).
</p><p>
The <a href="http://www.whatwg.org/specs/web-apps/current-work/">WHATWG</a>
is an independent collaboration of browser builders (Opera,
Mozilla, Apple) that has its own initiatives in this space -
including HTML 5 and Web Forms 2.0, the Canvas object,
server-sent DOM events, network connections, client-side state,
drag&#39;n&#39;drop, etc. They are happy to work with the W3C to ensure
compatibility and W3C standardisation.
<a href="http://www-128.ibm.com/developerworks/xml/library/x-futhtml1/">Here</a>
is an article covering some of these WHATWG ideas.
</p><p>&#160;</p><p>
<b>Other Declarative Browser-Driving Work</b>
</p><p>
When you look around outside of the Conference, you suddenly
discover numerous further examples of Declarative browser-driving:
</p><p>
<a href="http://www.tbray.org/ongoing/When/200x/2006/02/14/AJAX-Performance">Tim Bray</a>
has been stitching pages together with Ajax.
</p><p>
<a href="http://www.intertwingly.net/blog/2006/06/23/Sculpting-the-Future">Sam Ruby</a>
says Declarative is more mashable.
</p><p>
<a href="http://microformats.org/wiki/rest/ahah">AHAH</a> is &#39;Asychronous
HTML and HTTP&#39;, an apparent attempt to make a big deal out of
rewriting the DOM on receipt of an Ajax HTML response. Same ideas
as above.
</p><p>
<a href="http://blog.ingy.net/2006/02/jemplate_a_template_toolkit_fo.html">Jemplate</a>
looks like a similar kind of thing.
</p><p>
<a href="http://www.nexaweb.com/open/xap/index.aspx?id=382">XAP (Extensible Ajax Platform)</a>
is an interesting project that was given by Nexaweb Technologies
<a href="http://incubator.apache.org/xap/">to Apache</a>. Here&#39;s the elevator pitch:
</p><ul>
<li>Declarative rich user interface via XML;</li>
<li>Data binding for connecting UI to data;</li>
<li>Incremental update of web pages declaratively and programmatically;</li>
</ul><p>
</p><p>
<a href="http://www.readwriteweb.com/archives/widgets_are_the.php">Widgets</a>
intersect with this whole dynamic, client-side page-assembly
space. There are now numerous examples of commercial Widget
approaches.  Some Widgets may be driven by a Web Feed, some may
get their data from a Microformat or from a Web API.
</p><p>
<a href="http://my.opera.com/community/dev/widgets/first/">Opera Widgets</a>
are DHTML packages that break free from the browser and run on
the desktop.  The WHATWG 
<a href="http://listserver.dreamhost.com/pipermail/whatwg-whatwg.org/2006-June/006553.html">could even end up</a>
taking them as the basis of their play in this game.
</p><p>
Of course, we&#39;ve already seen how to do Widgets right, in Mark
Birbeck&#39;s talk above. In general, Compound Documents and
dynamic, POSTable 
<a href="http://duncan-cragg.org/blog/post/microformats-challenge-web-feeds-and-web-apis/">Microformats</a>
are the (Declarative) future of Widgets...
</p><p>&#160;</p><p>
</p><p>
<b>Declarative Meme</b>
</p><p>
We need the &#39;Declarative&#39; meme to consolidate and create a
movement out of all this, otherwise apparently disparate,
work.  Once we have a meme to gather around, we gain
collaborative and cognitive power from its mere existence.
This could work in the same way that the label &#39;Ajax&#39; itself
consolidated (and launched into orbit) techniques that a large
number of us had already been doing for months or years.
</p><p>
The &#39;Declarative&#39; meme also includes and extrapolates the
&#39;REST&#39; meme. REST is Declarative, but not something you may
normally associate with Ajax application programming. Yet
programming a dynamic Web interface Declaratively goes
hand-in-hand with the linkability, cacheability and mashability
of a RESTful back-end interaction, as Mark Nottingham and
others above have shown.
</p><p>&#160;</p><p>
</p><p>
<b>The Right Way to do Web Applications is Declaratively</b>
</p><p>
Specialist client-side Javascripts are a mistake. They break
the generic Web client model: hand-crafted thick clients are
hard to make cross-browser compatible, they add to download
times, they are tied to specific application servers, they
break the browsing experience (bookmarking, linking, history)
and miss the benefits of the Web&#39;s cacheing architecture.
</p><p>
We should be writing Declarative pages to exploit generic
Javascripts and plugins or extensions (such as SVG, XForms
and other Declarative technologies).  These generic facilities
will effectively extend the concept of the browser, from one
that deals primarily with one-way static documents, to one that
deals with two-way dynamic data.
</p><p>
After some time, the browsers themselves will be written to new
standards that make those browser-redefining Javascripts and
plugins irrelevant.
</p><p>
By a &#39;two-way dynamic data&#39; browser, I mean a browser that
constructs pages from several sources - several snippets,
microcontents and widgets.  It will show those pages updating
in real-time as those sources update.
</p><p>
It will be aware of the user&#39;s key and mouse events on the
visible DOM, and relay them back to the affected source, which
may in turn update - for everyone viewing the page.
</p><p>
Programming the behaviour behind the data can be completely
Declarative; rule-driven and event-driven. The programs will
run both on the server, where the Resources are owned, as well
as on the client, as in XForms.
</p><p>
I&#39;ve shown many examples in this article that are heading in
exactly this direction.
</p><p>
New Web (2.0) standards, that respect and extend Web
architecture, can one day replace hand-crafted thick client
scripts and generic scripts and browser extensions, allowing us
to program our dynamic applications Declaratively - directly to
a Web 2.0 browser.
</p><p>
Such a Web 2.0 architecture and platform will still be as
scalable and interoperable as the current Web architecture -
more so, in fact. And it will be much more fun to program for!
</p><p>

</p>

            </div>
        </content>
    </entry>
    
    <entry>
        <id>http://duncan-cragg.org/blog/post/web-20-and-our-digital-rights/</id>
        <title>Web 2.0 and our Digital Rights</title>
        <published>2006-06-23T17:58:00Z</published>
        
        <updated>2006-06-23T17:58:00Z</updated>
        
        <link rel="alternate" type="text/html" href="http://duncan-cragg.org/blog/post/web-20-and-our-digital-rights/" title="Web 2.0 and our Digital Rights" />
        
        <category term="copyright" />
        
        <category term="xtech" />
        
        <category term="declarative" />
        
        <category term="web2.0" />
        
        <category term="socialsoftware" />
        
        <category term="digital-rights" />
        
        <category term="rest" />
        
        <summary type="xhtml">
            <div xmlns="http://www.w3.org/1999/xhtml">

<p>

<a href="http://duncan-cragg.org/blog/post/imperative-declarative-inversion-open-data-ok/">Open Data</a> ..
<a href="http://www.techcrunch.com/2006/06/15/myspace-nukes-singlestatus/">has</a> ..
<a href="http://www.techcrunch.com/2006/06/16/why-is-flickr-afraid-of-zoomr/">recently</a> ..
<a href="http://www.tomcarroll.org/?p=125">been</a>..
<a href="http://jeremy.zawodny.com/blog/archives/006920.html">all</a> ..
<a href="http://www.intertwingly.net/blog/2006/06/18/Accidentally-Closed">over</a> ..
<a href="http://diveintomark.org/archives/2006/06/16/juggling-oranges">the</a> ..
<a href="http://blogs.guardian.co.uk/technology/archives/2006/06/17/schofields_first_law_revisited_and_why_mark_pilgrim_finally_gave_up_on_apple.html">blog</a> ..
<a href="http://ebiquity.umbc.edu/blogger/2006/05/11/were-the-children-of-shoemakers/">o</a> ..
<a href="http://tantek.com/log/2006/06.html#d17t2231">sphere</a>!
</p><p>
Openness is a classic Us-and-Them issue. Big, nasty
Apple/MySpace/Flickr is trying to control what little
me/SingleStatus/Zoomr can do with my/our own stuff.
</p><p>
Open Data vs. Closed; Open Source vs. Proprietary; P2P vs. DRM;
privacy vs. surveillance.  The battles between the freedom of
the pioneer, the individual and the minority against the rules
and stability of the establishment and the majority form the
endless shape of human history.
</p><p>
Us beating Them is Hollywood&#39;s favourite subject on-screen -
and ironically Them fighting Us Hollywood&#39;s favourite battle
off-screen.
</p><p>
As an Us-and-Them issue, with Us less powerful than Them, it&#39;s
also tempting to give up and to follow the crowd - to do what
we&#39;re told, to not ask for or sieze the privacy and open data
we feel entitled to.
</p><p>
However, at XTech 2006 recently, there was a set of talks on
the subject with a more positive approach.
 &#160; ...
</p>

            </div>
        </summary>
        <content type="xhtml" xml:space="preserve">
            <div xmlns="http://www.w3.org/1999/xhtml">

<p>
</p><div class="summary"><p>
<a href="http://duncan-cragg.org/blog/post/imperative-declarative-inversion-open-data-ok/">Open Data</a> ..
<a href="http://www.techcrunch.com/2006/06/15/myspace-nukes-singlestatus/">has</a> ..
<a href="http://www.techcrunch.com/2006/06/16/why-is-flickr-afraid-of-zoomr/">recently</a> ..
<a href="http://www.tomcarroll.org/?p=125">been</a>..
<a href="http://jeremy.zawodny.com/blog/archives/006920.html">all</a> ..
<a href="http://www.intertwingly.net/blog/2006/06/18/Accidentally-Closed">over</a> ..
<a href="http://diveintomark.org/archives/2006/06/16/juggling-oranges">the</a> ..
<a href="http://blogs.guardian.co.uk/technology/archives/2006/06/17/schofields_first_law_revisited_and_why_mark_pilgrim_finally_gave_up_on_apple.html">blog</a> ..
<a href="http://ebiquity.umbc.edu/blogger/2006/05/11/were-the-children-of-shoemakers/">o</a> ..
<a href="http://tantek.com/log/2006/06.html#d17t2231">sphere</a>!
</p><p>
Openness is a classic Us-and-Them issue. Big, nasty
Apple/MySpace/Flickr is trying to control what little
me/SingleStatus/Zoomr can do with my/our own stuff.
</p><p>
Open Data vs. Closed; Open Source vs. Proprietary; P2P vs. DRM;
privacy vs. surveillance.  The battles between the freedom of
the pioneer, the individual and the minority against the rules
and stability of the establishment and the majority form the
endless shape of human history.
</p><p>
Us beating Them is Hollywood&#39;s favourite subject on-screen -
and ironically Them fighting Us Hollywood&#39;s favourite battle
off-screen.
</p><p>
As an Us-and-Them issue, with Us less powerful than Them, it&#39;s
also tempting to give up and to follow the crowd - to do what
we&#39;re told, to not ask for or sieze the privacy and open data
we feel entitled to.
</p><p>
However, at XTech 2006 recently, there was a set of talks on
the subject with a more positive approach.
</p></div><p>
<b><a href="http://xtech06.usefulinc.com/schedule/detail/176">Ignorance Is Not A Defence</a></b>
</p><p>
I&#39;m counted amongst the &#39;founding members&#39; of the UK&#39;s 
<a href="http://www.openrightsgroup.org/">Open Rights Group</a>, having
signed the pledge in <a href="http://www.pledgebank.com/rights">PledgeBank</a>.
So I was delighted to see <a href="http://strange.corante.com/">Suw Charman</a>&#39;s
name on the XTech programme.
</p><p>
Suw gave a talk about the issues they/we are tackling:
ISPs and Telcos tracking our traffic, DRM controlling our media
and even our computers, ID cards, Patents, various government
schemes to undermine our privacy, Copyright extension,
Trusted Computing, etc., etc.
</p><p>
<a href="http://www.openrightsgroup.org/orgwiki">Read about the issues</a>,
then <a href="http://www.openrightsgroup.org/support-org">join the group</a>
(or the <a href="http://www.eff.org">EFF</a>, etc., depending on where you live).
</p><p>&#160;</p><p>
<b><a href="http://xtech06.usefulinc.com/schedule/detail/60">OpenStreetMap: The First Year</a></b>
</p><p>
Now, this was cool. I&#39;ll start right off by noting that they
have a <a href="http://wiki.openstreetmap.org/index.php/REST">REST</a>
API, not a <a href="http://duncan-cragg.org/blog/post/strest-service-trampled-rest-will-break-web-20/">STREST</a> API..
</p><p>
And it just gets better from there.. OpenStreetMap is like a Geo
Wiki of GPS trails around the world.  The centre of London was
mapped by attaching GPS devices to couriers and plotting the
slug-trails they left behind.  Steve Coast showed an animation
of a day&#39;s tracking.  The trails shot off to various points out
of town at the end of the day. But the animation continued..
</p><p>
And at pub closing time, another burst of trails as the
couriers came home!
</p><p>
A few weeks ago, a crowd of OpenStreetMap volunteers descended
on the Isle of Wight in England to walk around mapping it.  The
enthusiasm generated by this project seems likely to give it
enough momentum that it will very soon be good enough for us to
use for real. A complete, reliable dataset created by the
people, for the people, unencumbered by copyright and
restrictive licensing.
</p><p>
I suggested an idea I had about five years ago in my dot-com
days: let people upload mobile-snapped pictures with GPS
coordinates attached. Central servers scan the pictures for
text and OCR them into a searchable database.
</p><p>
People would snap-and-upload their own street name signs, house
name plaques, shop fronts, station name signs, company office
signs, etc.  Even menus in the local restaurant. We could
construct a &#39;GeoGoogle&#39; of public, mappable, searchable text.
</p><p>
However, Steve told me that OCR and mobile GPS technology still
isn&#39;t up to it; that manual tagging of GPS trails is enough to
make OpenStreetMap work well. Ah well, I&#39;ve waited five years,
so I can wait a bit longer...
</p><p>
<a href="http://www.opengeodata.org/?p=65">Slides, MP3 here</a>.
</p><p>&#160;</p><p>
<b><a href="http://xtech06.usefulinc.com/schedule/detail/125">An Open (Data) Can of Worms</a></b>
</p><p>
Paul Hammond (ex-BBC, Yahoo!) gave a good talk on how to
motivate companies to open up their data to the Mashable Data
Web, hopefully through nice shiny new Web 2.0 APIs.
</p><p>
Here&#39;s your takeaway 
<a href="http://strange.corante.com/archives/2006/05/18/xtech_2006_paul_hammond_an_open_data_can_of_worms.php">quote</a>
courtesy of Suw Charman&#39;s amazing typing:
</p><blockquote class="others-content"><div><p></p><ul>
<li>Be aware of the problems</li>
<li>Demonstrate usefulness, screen scrape if you need to, but don&#39;t get yourself cease-and-desisted</li>
<li>Don&#39;t assume it&#39;s a technology problem</li>
<li>Target the right people, find someone on the inside who can help you</li>
<li>Talk about benefits to the provider, not the consumer. If you talk about the benefits to you, they&#39;ll see you just as someone who wants something for free.</li>
<li>Have patience. It is getting better every day, and it takes time for business to come round.</li>
</ul><p></p></div></blockquote><p>
The Data Web will be created mostly from the edges, but the
middle should be encouraged to see the benefits, too.
</p><p>&#160;</p><p>
<b><a href="http://xtech06.usefulinc.com/schedule/detail/178">Native to a Web of Data: Designing a Part of the Aggregate Web</a></b>
</p><p>
Yahoo! had a big presence at XTech - as did the BBC - and this
Yahoo! - and ex-BBC - presenter was 
<a href="http://www.plasticbag.org/">Tom Coates</a>.
</p><p>
Tom&#39;s talk extended the previous one of his colleague, Paul
Hammond, by going over some principles of opening data and
helping build the Data Web.
</p><p>
Principles such as finding data sources, giving them nice
representations and URLs then distributing them in a most
accessible and navigable way.
</p><p>
A bit Web 1.0, in truth; he looked rather blankly at me when I
suggested adding some concept of data events or updates to his
list of data-opening principles.
</p><p>
Again, Suw has this
<a href="http://strange.corante.com/archives/2006/02/08/fowa_native_to_a_web_of_data_tom_coates.php">written up</a>
(actually, a better-looking version of the same talk from 
<a href="http://www.carsonworkshops.com/summit/">FoWA</a>).
</p><p>
Oh - here&#39;s a good article by Tom on the power of 
<a href="http://www.plasticbag.org/archives/2005/04/the_age_of_pointatthings.shtml">pointability</a>
</p><p>&#160;</p><p>
<b>Harnessing the Collective</b>
</p><p>
All of these talks had a positive spin on the Us-and-Them issue.
</p><p>
We <i>can</i> do something about the creeping imbalance of Digital
Rights, tipping slowly but persistently from Us to Them.
</p><p>
Web 2.0 and the Social Software it underpins <i>can</i>
actually empower those of us that are willing to use it.
</p><p>
As taxpayers, voters, shareholders, pensionholders, customers
and employees, we really do own and control Them. We are just
one Social Networking movement away from realising that - in
both senses of the word.
</p><p>
So: stop staring at YouTube, sign up to your local Digital Rights
organisation, get out on your bike with your GPS, understand
and talk nicely to that unenlightened, data hoarding corporation
and start a bottom-up revolution to take back control over your
own data...
</p><p>
Above all, design your systems to put 
<a href="http://duncan-cragg.org/blog/post/imperative-declarative-inversion-open-data-ok/">Open Data</a>
at the top of your list of priorities...
</p><p>

</p>

            </div>
        </content>
    </entry>
    
</feed>

