<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>Nimble Code: Category Web Services</title>
  <subtitle type="html">Jacob Harris' Weblog</subtitle>
  <id>tag:www.nimblecode.com,2005:Typo</id>
  <generator version="4.0" uri="http://typo.leetsoft.com">Typo</generator>
  <link href="http://www.nimblecode.com/xml/atom10/category/web-services/feed.xml" rel="self" type="application/xml+atom"/>
  <link href="http://www.nimblecode.com/articles/category/web-services" rel="alternate" type="text/html"/>
  <updated>2008-11-20T03:03:46-08:00</updated>
  <entry>
    <author>
      <name>Jacob Harris</name>
      <email>harrisj@nimblecode.com</email>
    </author>
    <id>urn:uuid:f0298e47-ec19-4a66-9ee0-1a7113806171</id>
    <published>2006-01-24T17:12:00-08:00</published>
    <updated>2008-11-20T03:03:46-08:00</updated>
    <title>The Future of Feeds</title>
    <link href="http://www.nimblecode.com/articles/2006/01/24/the-future-of-feeds" rel="alternate" type="text/html"/>
    <category term="web-services" scheme="http://www.nimblecode.com/articles/category/web-services" label="Web Services"/>
    <category term="rss" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="atom" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="syndication" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="prediction" scheme="http://www.nimblecode.com/articles/tag"/>
    <content type="html">&lt;p&gt;Earlier this year, I made a &lt;a href="http://www.mcsweeneys.net/links/lists/6TeddyWayneandGregWayne.html"&gt;New Year&amp;#8217;s Resolution&lt;/a&gt; to write more postings to the blog, but I have failed abjectly at that so far sadly. January is sadly a busy month for me, and I usually don&amp;#8217;t feel like coming home after a long day to stare at a computer screen some more. But occaisionally inspiration strikes, and I feel like sharing some thoughts I have about the future of Syndication via &lt;span class="caps"&gt;RSS&lt;/span&gt; and Atom feeds in the next few years.&lt;/p&gt;


	&lt;p&gt;I have to agree with my company&amp;#8217;s &lt;span class="caps"&gt;CEO &lt;/span&gt;&lt;a href="http://www.alacrablog.com/"&gt;Steve Goldstein&lt;/a&gt; when he says that &lt;a href="http://www.alacrablog.com/alacrablog/2006/01/trends_in_the_i.html"&gt;increasing &lt;span class="caps"&gt;RSS&lt;/span&gt;/Atom adoption will be one of the big trends in the information industry in 2006&lt;/a&gt;. Speculating wildly, I think that 2006 will be &lt;strong&gt;The Year of &lt;span class="caps"&gt;RSS&lt;/span&gt; and Atom&lt;/strong&gt;. And so, I&amp;#8217;m going to make a few bold predictions of my own about the state of syndication and the software industry. To avoid spending even longer without posting to the blog, I have decided to not bother with &lt;em&gt;research&lt;/em&gt;, so if something I have predicted has actually &lt;em&gt;happened&lt;/em&gt; already, be sure to make a snarky comment about it  to me below. Thanks. And now here are big things I see happening in the next year or so:&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Mainstream Feed Adoption&lt;/strong&gt; &amp;#8211; Currently, most of the sites producing feeds are still blogs and news sites –- those for whom the article paradigm within feeds is a natural fit. However, non-newsy sites like &lt;a href="http://del.icio.us/"&gt;del.icio.us&lt;/a&gt; and &lt;a href="http://www.flickr.com/"&gt;Flickr&lt;/a&gt; have earned a lot of buzz not just for their front-end interfaces but for their innovative and pervasive use of feeds &lt;em&gt;everywhere&lt;/em&gt; and using syndication for non-article content. But this is still under the radar of the typical Internet user for now. I think this will change this year. I expect a major online site to follow suit this year and provide syndication of their data in a similar fashion. For instance, I would not be surprised if &lt;a href="http://www.amazon.com/"&gt;Amazon&lt;/a&gt; began to offer feeds for user wishlists or upcoming recommendations or music alerts. That would rock.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;More People Will Embrace &lt;span class="caps"&gt;RSS&lt;/span&gt;, But Still Not Know It&lt;/strong&gt; &amp;#8211; A survey from last year by Yahoo! revealed that &lt;a href="http://slashdot.org/articles/06/01/01/1424220.shtml?tid=126"&gt;only 4% of Internet users knew what &lt;span class="caps"&gt;RSS&lt;/span&gt; was&lt;/a&gt;, but this will most certainly change. The name is obviously somewhat to blame (there&amp;#8217;s a joke that if it were called SpeedFeed more people would use it), but I think it&amp;#8217;s not the real problem. In truth, most people just don&amp;#8217;t care. For your typical web user, the Web is a toy more than a place to siphon information from; they are therefore not exactly vexed enough by the slowness of visiting sites to want to setup an aggregator. Instead, I think some different killer app beyond mere aggregation will be the only thing to make most people want to use &lt;span class="caps"&gt;RSS&lt;/span&gt;. I have no idea what that app might be, but I&amp;#8217;m sure one of you could think of something awesome.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;RSS Is A Terrible Business Though&lt;/strong&gt; &amp;#8211; For companies that produce or sell content, &lt;span class="caps"&gt;RSS&lt;/span&gt; will be a good fit, providing additional ways for users to access the site and contributing a small boost in sales or page visits. But companies in the &lt;span class="caps"&gt;RSS&lt;/span&gt; software business (particularly online aggregators) will have a terrible time. There are just very few barriers to entry for competitors, and the whole &lt;em&gt;we&amp;#8217;ll make money through advertising&lt;/em&gt; model seems so very pre-boom to me. That said, there are still some promising markets for companies doing &lt;span class="caps"&gt;RSS&lt;/span&gt; software. Software that allows filters or other mechanisms for mitigating information overload from feeds will find a market. Bridges from the pull-based mechanism of &lt;span class="caps"&gt;RSS&lt;/span&gt;/Atom to push-based messaging services like &lt;span class="caps"&gt;SMS&lt;/span&gt;, Email, or IM will probably also do well. And of course, it would be smart for makers of web analytics software to also look at measuring conversions and clickthroughs from feed links.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Syndication Will Drive &lt;span class="caps"&gt;REST &lt;/span&gt;Web Services&lt;/strong&gt; &amp;#8211; One of the common complaints leveled against &lt;a href="http://www.xfront.com/REST-Web-Services.html"&gt;REST-based Web Services&lt;/a&gt; is that the simple model of &lt;a href="http://www.prescod.net/rest/encoding/"&gt;REST does not specify the &lt;span class="caps"&gt;XML&lt;/span&gt; representation for data&lt;/a&gt; (unlike the case of &lt;span class="caps"&gt;XML&lt;/span&gt;-RPC and &lt;span class="caps"&gt;SOAP&lt;/span&gt;). This will never officially change, but I think it will become increasingly more common to see &lt;span class="caps"&gt;REST &lt;/span&gt;Web Services that return &lt;span class="caps"&gt;RSS&lt;/span&gt;-like data for searches. Indeed, throw in Amazon&amp;#8217;s &lt;a href="http://opensearch.a9.com/"&gt;OpenSearch extensions for &lt;span class="caps"&gt;RSS&lt;/span&gt;&lt;/a&gt; and you have support for presenting pagination within &lt;span class="caps"&gt;RSS&lt;/span&gt; documents. The practical upshot of this is that programmers can use the exact same code for &lt;span class="caps"&gt;RSS&lt;/span&gt;, Search Engine Plugins (&lt;em&gt;if any other engines besides A9.com support OpenSearch_&lt;/em&gt;), and &lt;span class="caps"&gt;REST&lt;/span&gt;-based Web Services. More significantly, this makes &lt;span class="caps"&gt;REST&lt;/span&gt; more compelling to these programmers, since supporting &lt;span class="caps"&gt;SOAP&lt;/span&gt;&amp;#8217;s data encoding would require supporting an additional data format for searches and more code to implement. Similarly, the arrival of the &lt;a href="http://www.xml.com/pub/a/2005/12/07/catching-up-with-the-atom-publishing-protocol.html"&gt;Atom Publishing Protocol&lt;/a&gt; will also bring awareness of &lt;span class="caps"&gt;REST &lt;/span&gt;Web Services to a wider market of people who will be using it without even knowing it.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Feed Extensions Will Get Wider Support&lt;/strong&gt; &amp;#8211; As &lt;span class="caps"&gt;RSS&lt;/span&gt;/Atom grows in its usage, it should be possible to find more aggregators and process that also support the more popular extensions to feeds (these are normally specified within the document in a separate namespace). I think a few extensions will become essential in the years ahead (and I don&amp;#8217;t even know if they exist currently!): support for threading of &lt;span class="caps"&gt;RSS&lt;/span&gt; items (for feeds based on email lists); partial encryption of &lt;span class="caps"&gt;RSS&lt;/span&gt; documents to be decrypted in the reader (would allow banks to offer feeds for instance); geographic tagging for marking stories (see the breaking news/photos on a map). In any event, I think good aggregators will show in some fashion all tags embedded in the feed so that users could search or filter based upon them.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Syndication in the Enterprise&lt;/strong&gt; &amp;#8211; Finally, it is obvious that &lt;span class="caps"&gt;RSS&lt;/span&gt;/Atom will become more common within corporate intranets as well. And the &lt;a href="/articles/2005/09/23/rss-comes-to-the-enterprise"&gt;credit for this belongs to Microsoft&lt;/a&gt; of all companies. Mainly, by placing &lt;span class="caps"&gt;RSS&lt;/span&gt; within all aspects of Windows Vista, Microsoft will drag all sorts of big &lt;span class="caps"&gt;IT &lt;/span&gt;Departments into accepting &lt;span class="caps"&gt;RSS&lt;/span&gt; as a solution for messaging and event notification. This will in turn make them more likely to also accept other solutions based on syndication. In fact, I&amp;#8217;m optimistic enough to think that &lt;span class="caps"&gt;B2B &lt;/span&gt;Syndication-based products will do better than &lt;span class="caps"&gt;B2C &lt;/span&gt;(remember that vexing 4% recognition rate from above; CTOs can mandate use in their companies). Smaller companies will be quick to embrace the immediacy of &lt;span class="caps"&gt;RSS&lt;/span&gt; and larger companies will also enjoy it for Windows Vista integration.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Atom vs. &lt;span class="caps"&gt;RSS2&lt;/span&gt;.0 Holy Wars Won&amp;#8217;t Matter&lt;/strong&gt; I know it vexes some readers of this posting that I&amp;#8217;m using &lt;span class="caps"&gt;RSS&lt;/span&gt; sometimes as a shorthand phrase for &lt;span class="caps"&gt;RSS2&lt;/span&gt;.0 or Atom-based syndication. And I agree with them that Atom is technically superior while &lt;span class="caps"&gt;RSS2&lt;/span&gt;.0 has better market share. But my ultimate feeling is that the differences between the two for the consumer will be largely academic (like caring about whether your audio player is playing &lt;span class="caps"&gt;MP3&lt;/span&gt; or &lt;span class="caps"&gt;AAC&lt;/span&gt;), since any good aggregator or processor should just be able to handle both formats effortlessly.&lt;/p&gt;


	&lt;p&gt;I will probably follow up on some of these points in more depth anon, but feel free to comment and quibble in the comments section below. I am no industry expert, but I do so like to make guesses about the business. And I&amp;#8217;m curious what you think as well. Check in next year and we&amp;#8217;ll how well they turned out.&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Jacob Harris</name>
      <email>harrisj@nimblecode.com</email>
    </author>
    <id>urn:uuid:56366957-9a6d-44f3-b885-3f31b3e114c0</id>
    <published>2005-12-14T17:42:00-08:00</published>
    <updated>2008-11-17T23:11:18-08:00</updated>
    <title>Amazon Shakes Things Up</title>
    <link href="http://www.nimblecode.com/articles/2005/12/14/amazon-shakes-things-up" rel="alternate" type="text/html"/>
    <category term="web-services" scheme="http://www.nimblecode.com/articles/category/web-services" label="Web Services"/>
    <category term="search" scheme="http://www.nimblecode.com/articles/category/web-services" label="Search"/>
    <category term="amazon" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="alexa" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="a9" scheme="http://www.nimblecode.com/articles/tag"/>
    <content type="html">&lt;p&gt;I really must hand it to Amazon/A9/Alexa. They have consistently delivered more innovation to the developer than those two combined. Amazon started to impress me when they allowed any application to search their extensive database of product information. Directly they have earned nothing from this, but it more than makes up for itself in good will and inspired purchases. Amazon understands Web Services.&lt;/p&gt;


	&lt;p&gt;Amazon also has a search engine. But here they are not the market leader like they are for books. Poor A9, always ignored while Google and Yahoo and &lt;span class="caps"&gt;MSN&lt;/span&gt; get copious amounts of press and praise.  But this has been good to spur on Amazon and Alexa (their search company) into creative new territory for their search engine. A9 has already received some attention for their YellowPages data that includes photos of storefronts; that&amp;#8217;s certainly cool, but it&amp;#8217;s just content. On the other hand, OpenSearch is a cool change to the spider-driven notion of search content. Google may have specified their &lt;a href="https://www.google.com/webmasters/sitemaps/login"&gt;sitemap standard&lt;/a&gt; for giving hints to spiders. But A9 did that one better with their &lt;a href="http://opensearch.a9.com/"&gt;OpenSearch &lt;span class="caps"&gt;RSS&lt;/span&gt; extensions&lt;/a&gt;, which allowed any site to package itself as a channel for A9.com. This allows sites to handle search requests dynamically at the time of request, rather than creating documents to then be spidered and cached.&lt;/p&gt;


	&lt;p&gt;To illustrate why this is a cool idea, suppose I had a site that did hotel bookings. I could create an A9 channel that could accomodate search requests for things like &amp;#8220;nyc hotels&amp;#8221; with actual  hotels and rates from that moment. If people had date information, I could be more clever, but the key of this is that Amazon is handing over control of their search results to the end sites. As long as a user is willing to trust a channel enough to add it, A9 is happy to get out of the way.&lt;/p&gt;


	&lt;p&gt;Of course, there is nothing to make syndicated OpenSearch sites obey search rules in the same way A9 does, but who cares? As Google&amp;#8217;s success with a single bar shows, people care less about all the little details of searching (boolean vs. web syntax, stemming, relevance scoring) than just being able to find stuff. Amazon gets this, but Google seems to have forgotten it.&lt;/p&gt;


	&lt;p&gt;But Amazon/A9/Alexa&amp;#8217;s latest move has really blown me away. In recent years, a lot of search providers have found additional revenue in peddling search appliances to companies. Essentially, you sign a contract with a company Google and buy a local web spider that crawls content you specify. You then pay  Google a price based on support, how many documents you plan to index, and how many users will search your index. There are limitations to keep you from turning Google against themselves and all pricing is set up front rather than growing with use, and prices can approach up to $2 million up front. More importantly, you are not actually using Google&amp;#8217;s index, just recreating part of it independently. And while Google has much vaunted data centers across the globe, enterprise customers get only a single box or two to place in their own data centers if they have them.&lt;/p&gt;


	&lt;p&gt;Amazon has been interested in entering the enterprise market, but they did not want to be in the business of creating hardware servers for enterprise clients (Google will always be better at that). And that&amp;#8217;s when someone at Alexa had the brilliant idea of opening up &lt;a href="http://websearch.alexa.com/"&gt;their entire search index data to the outside world&lt;/a&gt;. And what makes it additionally brilliant is that you install nothing locally (everything is done via Web Services) and pricing is set by consumption and not by contract, meaning even the most modest users can do something with the backend data. Users can write programs to process data sets, implement their own additional indices on top of A9&amp;#8217;s basic web search, or even just analyze a massive collection of web pages for statistical goals. In some sense, Amazone allows customers to not just outsource spidering but also maintenance of indices they&amp;#8217;ve built.&lt;/p&gt;


	&lt;p&gt;It&amp;#8217;s a brilliant move, and I must applaud Amazon for the creativity of their vision. Forget Google and Yahoo, Amazon is doing more to turn Search into a utility than the any other company around.&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Jacob Harris</name>
      <email>harrisj@nimblecode.com</email>
    </author>
    <id>urn:uuid:e28be0e8-8e39-44fd-8427-1e243441332d</id>
    <published>2005-11-10T09:06:00-08:00</published>
    <updated>2008-11-17T23:08:19-08:00</updated>
    <title>The Silliness of SOA</title>
    <link href="http://www.nimblecode.com/articles/2005/11/10/the-silliness-of-soa" rel="alternate" type="text/html"/>
    <category term="web-services" scheme="http://www.nimblecode.com/articles/category/web-services" label="Web Services"/>
    <category term="soa" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="soap" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="xml" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="alacra" scheme="http://www.nimblecode.com/articles/tag"/>
    <content type="html">&lt;p&gt;There seems to be a lot of buzz around the concept of Service-Oriented Architecture (SOA), as long as you don&amp;#8217;t ask any of its proponents what it actually means. For an example of the ways in which English can be mangled by technical jargon beyond recognition, check out some of the definitions from &lt;a href="http://searchwebservices.techtarget.com/originalContent/0,289142,sid26_gci1017004,00.html"&gt;A Defining Moment for &lt;span class="caps"&gt;SOA&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://searchwebservices.techtarget.com/originalContent/0,289142,sid26_gci1044083,00.html"&gt;Revisiting the Definitive &lt;span class="caps"&gt;SOA &lt;/span&gt;Definition&lt;/a&gt; to see what I mean. My personal favorite from the bunch is&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;SOA is a form of technology architecture that adheres to the principles of service orientation. When realized through the Web services technology platform, &lt;span class="caps"&gt;SOA&lt;/span&gt; establishes the potential to support and promote these principles throughout the business process and automation domains of an enterprise.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;which really tells me nothing at all about why this is cool and where you would start if your &lt;span class="caps"&gt;CEO&lt;/span&gt; suddenly decided you needed it. Cutting through the bombast and hype, it seems like &lt;span class="caps"&gt;SOA&lt;/span&gt; is basically&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;Wrapping a backend database or similar resource in a small component for business logic you can talk to with &lt;span class="caps"&gt;XML&lt;/span&gt;.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;This is definitely cool for many reasons (loose coupling, security, building big things from small parts), but I don&amp;#8217;t understand why there&amp;#8217;s so much hype about it now. Not to boast, but we&amp;#8217;ve been doing this at &lt;a href="http://www.alacra.com"&gt;Alacra&lt;/a&gt; for &lt;strong&gt;8 years&lt;/strong&gt; now, and I&amp;#8217;m really gobsmacked that this sort of architecture would be a revelation to anyone, especially since it builds on design patterns good sense and the older Unix and later Internet philosophy that &lt;a href="http://www.smallpieces.com/"&gt;Small Pieces Loosely Joined&lt;/a&gt; can make great things. And &lt;span class="caps"&gt;SOA&lt;/span&gt; is pretty much what the earliest &lt;span class="caps"&gt;XML&lt;/span&gt;-driven web services were.&lt;/p&gt;


	&lt;p&gt;I can only assume that the latest hype about &lt;span class="caps"&gt;SOA&lt;/span&gt; is less about what the technology is, but what it is not. Hint: add a P and you can see what businesses find so refreshing about &lt;span class="caps"&gt;SOA&lt;/span&gt;. SOAP is a heavyweight protocol that can be good for some external APIs, but is a lot more work than a simple quick and dirty internal application often needs. Imagine being able to drop the requirements of &lt;span class="caps"&gt;WSDL&lt;/span&gt; bindings, &lt;span class="caps"&gt;XML&lt;/span&gt; typing, even limited data structures to get the most lightweight, low-ceremony solutions you can feel comfortable with using. And since it&amp;#8217;s internal, you don&amp;#8217;t have to worry about the &amp;#8220;shame&amp;#8221; of not being fully &lt;span class="caps"&gt;SOAP&lt;/span&gt;+WS-whatever compliant for your &lt;span class="caps"&gt;API&lt;/span&gt;. Looking at it this way, no wonder they&amp;#8217;re excited. I&amp;#8217;d be excited too if I were able to stop documenting and start hacking for change.&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Jacob Harris</name>
      <email>harrisj@nimblecode.com</email>
    </author>
    <id>urn:uuid:21e83a8e0820389c1fe331156a4bdf60</id>
    <published>2005-09-30T00:09:00-07:00</published>
    <updated>2008-11-19T18:19:23-08:00</updated>
    <title>Great Picture, But One Quibble</title>
    <link href="http://www.nimblecode.com/articles/2005/09/30/great-picture-but-one-quibble" rel="alternate" type="text/html"/>
    <category term="web" scheme="http://www.nimblecode.com/articles/category/web-services" label="Web"/>
    <category term="web-services" scheme="http://www.nimblecode.com/articles/category/web-services" label="Web Services"/>
    <category term="web2.0" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="rss" scheme="http://www.nimblecode.com/articles/tag"/>
    <content type="html">&lt;div style="float:left; padding-right: 0.5em;" class="flickrplugin"&gt;&lt;a href="http://www.flickr.com/photos/36521959321@N01/44349798"&gt;&lt;img src="http://static.flickr.com/28/44349798_0e487287bc_s.jpg" width="75" height="75" alt="Web2MemeMap" title="Web2MemeMap"/&gt;&lt;/a&gt;&lt;/div&gt; Courtesy of Tim O&amp;#8217;Reilly&amp;#8217;s &lt;a href="http://wiki.oreillynet.com/foocamp05/index.cgi"&gt;Foo Camp&lt;/a&gt; (which I am definitely not cool enough to be invited to), there is now a picture to match the exciting flow of ideas and themes coalescing into &lt;strong&gt;Web 2.0&lt;/strong&gt;. I think this assemblage of bubbles and trends is a great thing to see, especially since it serves as a better executive summary of high-level ideas than gleaning bits and pieces of the big picture from blogs and demo sites across the web.

	&lt;p&gt;That said, I think one thing is missing from the picture they provide. Maybe I am a bit &lt;a href="/articles/tag/rss"&gt;preoccupied&lt;/a&gt; with the subject, but I think &lt;span class="caps"&gt;RSS &lt;/span&gt;(&lt;em&gt;or Atom here, I&amp;#8217;m just using &lt;span class="caps"&gt;RSS&lt;/span&gt; as shorthand for syndication&lt;/em&gt;) is really one of the biggest things driving Web2.0 services and adoption these days, but it hasn&amp;#8217;t even gotten a mention in the top as an influencing technology (unlike blogs or Gmail). I think blogs were great at establishing &lt;span class="caps"&gt;RSS&lt;/span&gt; as a way of keeping track of changes, but the really influential aspect of Del.icio.us and Flickr is not just tagging, but establishing &lt;span class="caps"&gt;RSS&lt;/span&gt; as a &lt;a href="/articles/2005/09/23/rss-comes-to-the-enterprise"&gt;mechanism for tracking any possible view of the system you might want&lt;/a&gt; in as light-weight and user-friendly mechanism as possible (as opposed to the awkwardness of &lt;span class="caps"&gt;SOAP&lt;/span&gt; or even &lt;span class="caps"&gt;REST&lt;/span&gt; to the end user).&lt;/p&gt;


	&lt;p&gt;I think the source of my unease here is that I&amp;#8217;m mostly a backend guy. A lot of my work at Alacra has been making sure that all sorts of information flows agilely between processes and servers. Backend stuff. It makes it happen, but if it&amp;#8217;s working, you never notice how critical it is to success. Similarly, &lt;span class="caps"&gt;AJAX&lt;/span&gt; and other front-end browser mechanisms are very nice in my mind. But the biggest joys and successes of Web2.0 are all driven by the fluidity and ease of &lt;span class="caps"&gt;RSS&lt;/span&gt; and &lt;span class="caps"&gt;REST&lt;/span&gt;. &amp;#8220;Hackability&amp;#8221;, &amp;#8220;Data as Intel Inside&amp;#8221;, &amp;#8220;Right to Remix&amp;#8221; ... &lt;span class="caps"&gt;RSS&lt;/span&gt; made this a possibility and these are what drives me to take Web2.0 seriously and not just as another wave of web hype. All I&amp;#8217;m asking for is a little recognition. Thanks.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; The good news is that it seems like I&amp;#8217;m not alone in this view. The bad news is my company is &lt;a href="http://archive.scripting.com/2005/09/27#web20IsReallySimple"&gt;Dave Winer&lt;/a&gt;.&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Jacob Harris</name>
      <email>harrisj@nimblecode.com</email>
    </author>
    <id>urn:uuid:4c4d8884fc1cb6e3f43f69fb16d443f5</id>
    <published>2005-09-23T03:03:00-07:00</published>
    <updated>2008-11-17T23:45:26-08:00</updated>
    <title>RSS Comes to the Enterprise</title>
    <link href="http://www.nimblecode.com/articles/2005/09/23/rss-comes-to-the-enterprise" rel="alternate" type="text/html"/>
    <category term="web-services" scheme="http://www.nimblecode.com/articles/category/web-services" label="Web Services"/>
    <category term="enterprise" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="rss" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="microsoft" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="flickr" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="delicious" scheme="http://www.nimblecode.com/articles/tag"/>
    <content type="html">&lt;p&gt;As you may have guessed from this site, I am hardly a person you would expect to praise Microsoft for their technical insight and forward thinking. Like the story about generals, they always seem to be fighting the last war, with their late arrival to the Internet and Web being a current and recurring example (now, rather than Netscape, it&amp;#8217;s Google that is seen as their greatest threat). However, occasionally they get a thing right along the way, and I feel honor-bound to note it in this case.&lt;/p&gt;


	&lt;p&gt;Over at &lt;a href="http://www.theregister.co.uk/"&gt;The Register&lt;/a&gt;, there is an article &lt;a href="http://www.theregister.co.uk/2005/09/22/rss_business_apps/"&gt;RSS Goes To Work In Windows&lt;/a&gt; detailing the ways in which Microsoft has jumped onto the &lt;span class="caps"&gt;RSS&lt;/span&gt; bandwagon with Windows Vista (shipping next year, maybe?). For those of you following along at home, Microsoft is planning to ship a built in &lt;span class="caps"&gt;RSS&lt;/span&gt;-store capability in Windows which will allow any application compiled against the appropriate &lt;span class="caps"&gt;API&lt;/span&gt; to be an &lt;span class="caps"&gt;RSS&lt;/span&gt; aggregator and manipulate feeds programmatically. This is a nice touch, but hardly a stretch yet.&lt;/p&gt;


	&lt;p&gt;What is interesting to me is that Microsoft discusses their plans to have the next release of their Dynamics &lt;acronym title="Customer Relationship Management"&gt;CRM&lt;/acronym&gt; software to create &lt;span class="caps"&gt;RSS&lt;/span&gt; feeds that can be syndicated to. Other server applications with &lt;span class="caps"&gt;RSS&lt;/span&gt; extensions in the works are Sharepoint Portal, Exchange, and possible Office. As the article quotes it&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;&amp;#8220;CRM is one of the first examples of how we see &lt;span class="caps"&gt;RSS&lt;/span&gt; unlocking data in the back end data systems,&amp;#8221; Amar Gandhi, Microsoft Internet Explorer group program manager, told The Register during a recent interview. Microsoft revealed plans to &lt;span class="caps"&gt;RSS&lt;/span&gt;-enable its &lt;span class="caps"&gt;CRM&lt;/span&gt; last week at the Professional Developers&amp;#8217; Conference (PDC)&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;blockquote&gt;
		&lt;p&gt;Chris Caposella, vice president for Microsoft&amp;#8217;s information worker product management group, told software developers attending &lt;span class="caps"&gt;PDC &lt;/span&gt;Microsoft believes &lt;span class="caps"&gt;RSS&lt;/span&gt; would be transformed into a platform that embraces business applications.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;That last paragraph was something I&amp;#8217;d never see. Because honestly, I never thought people would &amp;#8220;accept&amp;#8221; &lt;span class="caps"&gt;RSS&lt;/span&gt; in the Enterprise. While we can joke about how &lt;a href="http://37signals.com/svn/archives2/define_enterprise_in_10_words_or_less.php"&gt;meaningless the term Enterprise Software is&lt;/a&gt;, &lt;span class="caps"&gt;RSS&lt;/span&gt; is definitely not it by any usual sense of the term for several reasons:&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;&lt;span class="caps"&gt;RSS&lt;/span&gt; in general has no typing or generalized schema. It&amp;#8217;s really a schema for news stories that can be generalized for events, but it&amp;#8217;s not for serialization of complex typed objects like &lt;span class="caps"&gt;SOAP&lt;/span&gt;.&lt;/li&gt;
		&lt;li&gt;The &lt;span class="caps"&gt;RSS&lt;/span&gt; model is extremely simple. Pull requests over &lt;span class="caps"&gt;HTTP&lt;/span&gt;. No pushing, no notification mechanism for new content.&lt;/li&gt;
		&lt;li&gt;In itself, &lt;span class="caps"&gt;RSS&lt;/span&gt; has no security for content (I know, Atom has support for encrypted content), and access security is generally only done through obscurity (giving an individual user a feed with a long unique token in it, maybe unguessable, but not unsniffable)&lt;/li&gt;
		&lt;li&gt;Finally, &lt;span class="caps"&gt;RSS&lt;/span&gt; is not really controlled. There are no authorization lists, no ACLs or &lt;span class="caps"&gt;DRM&lt;/span&gt; or other such mechanisms to control who can subscribe and where they can do it.&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;That said, I think all of these aspects are why &lt;span class="caps"&gt;RSS&lt;/span&gt; has succeeded so widely in the world of the Web2.0, &lt;a href="/articles/2005/04/16/radical-simplification"&gt;while &lt;span class="caps"&gt;SOAP&lt;/span&gt; has largely failed to gain traction&lt;/a&gt;. In fact, considering that one of &lt;span class="caps"&gt;SOAP&lt;/span&gt;&amp;#8217;s biggest backers is Microsoft, this &lt;span class="caps"&gt;RSS&lt;/span&gt; announcement reveals what a disappointment &lt;span class="caps"&gt;SOAP&lt;/span&gt; has been as a web service platform. So, why is a company like Microsoft so willing to reject one of its software initiatives and embrace &lt;span class="caps"&gt;RSS&lt;/span&gt; so, in effect giving &lt;span class="caps"&gt;RSS&lt;/span&gt; an mantle of legitimacy in the Enterprise it might&amp;#8217;ve taken years to achieve?&lt;/p&gt;


	&lt;p&gt;I think that if we want to consider the &lt;a href="/articles/2005/09/20/web2-0-gets-pragmatic"&gt;biggest Web2.0 trend for the coming year&lt;/a&gt;, it won&amp;#8217;t be the proliferation of &lt;span class="caps"&gt;AJAX&lt;/span&gt; or increasing maturity of Web Frameworks. It&amp;#8217;ll be the proliferation of &lt;span class="caps"&gt;RSS&lt;/span&gt; into every aspect of server-side content. One of the greatest things about &lt;a href="http://www.flickr.com"&gt;Flickr&lt;/a&gt; and &lt;a href="http://del.icio.us/"&gt;Del.icio.us&lt;/a&gt; is that you can subscribe to an &lt;span class="caps"&gt;RSS&lt;/span&gt; feed for every possible page. And since pages are dynamic content (combinations of photos, groups, tags, users), what you are really subscribing to is not a list of documents, but &lt;strong&gt;the latest matches for a search&lt;/strong&gt; (ie, &amp;#8220;find me all photos tagged Italy by this user&amp;#8221;). And it&amp;#8217;s easy to do, regardless of the site.&lt;/p&gt;


	&lt;p&gt;One of the cool features of Mac &lt;span class="caps"&gt;OSX &lt;/span&gt;Tiger&amp;#8217;s Spotlight (and probably Windows Vista) is the ability to save searches as virtual folders which can be opened and browsed like regular folders in the Finder. This is a really cool way to manage ever-growing content. Now, imagine being able to do similar functionality with server-side content, and suddenly the appeal of &lt;span class="caps"&gt;RSS&lt;/span&gt; makes a lot of sense (admittedly since &lt;span class="caps"&gt;RSS&lt;/span&gt; usually shows only the last 20 items or so, there is a &lt;em&gt;you snooze, you lose&lt;/em&gt; problem, the general metaphor holds). Most of the Web2.0 is about taking the applications of the desktop into the browser, this brings the web back into the machine and applications.&lt;/p&gt;


	&lt;p&gt;No wonder Microsoft suddenly has the &lt;a href="http://blogs.msdn.com/rssteam/"&gt;RSS Religion&lt;/a&gt;. Done well, this might be their best chance to keep people hooked into Windows &lt;strong&gt;and&lt;/strong&gt; all their software products for business. Of course, they are trying to do the old &lt;a href="http://dannyayers.com/archives/2005/06/24/ms-rss/"&gt;embrace, extend, extinguish trick&lt;/a&gt;, but this time it may not fly because Microsoft&amp;#8217;s not in the driver&amp;#8217;s seat for the technology. That said, I must admit that Microsoft has made a smart and proactive move for the future here, and I think it&amp;#8217;ll benefit them well. But more importantly, it lends a large amount of authority to &lt;span class="caps"&gt;RSS&lt;/span&gt; in the Enterprise, which makes &lt;span class="caps"&gt;RSS&lt;/span&gt; and the Open Source Standards-Based community the biggest winner of all. At Alacra, we&amp;#8217;ve felt that &lt;a href="http://www.alacrablog.com/alacrablog/2005/07/rss_is_new_medi.html"&gt;RSS will be much bigger in the Enterprise&lt;/a&gt; for a while. It&amp;#8217;s neat to see we&amp;#8217;re not alone.&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>harrisj</name>
    </author>
    <id>urn:uuid:a90a2f89530e65c38316e5fb1c69922f</id>
    <published>2005-07-17T18:37:00-07:00</published>
    <updated>2008-11-19T05:59:32-08:00</updated>
    <title>RSS as an Error Reporting Mechanism</title>
    <link href="http://www.nimblecode.com/articles/2005/07/17/rss-as-an-error-reporting-mechanism" rel="alternate" type="text/html"/>
    <category term="web-services" scheme="http://www.nimblecode.com/articles/category/web-services" label="Web Services"/>
    <category term="rss" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="syslog" scheme="http://www.nimblecode.com/articles/tag"/>
    <content type="html">&lt;p&gt;An &lt;em&gt;interesting&lt;/em&gt; idea occurred to me the other day...

&lt;/p&gt;&lt;p&gt;First, a disclaimer. This is not a specification. Specifications are fixed and obsessively spelled out, and I would rather explore the idea fully first. Besides, specifications are notoriously boring and opaque, and I think that's part of the problem I want to address. So, let's get started.&lt;/p&gt;

&lt;h2&gt;The Wonders of RSS&lt;/h2&gt;

&lt;p&gt;RSS is a pretty neat thing when you think about it. In the past 3 years we have seen a veritable explosion of sites that create RSS feeds and interesting readers that consume them. It's led to some pretty sophisticated ways of reading the web, and your standard aggregator allows grouping, regular checking, unicode support and searching. In addition, newer apps even allow users to do things like create "virtual feeds" by specifying search queries that can be run across multiple feeds, while services like Bloglines allow you to take your subscriptions anywhere around the globe and will probably soon over ways of transposing RSS items into emails or SMS content or such. I imagine the next big thing will be helping us to better cope with information overload from RSS feeds. Which is fascinating stuff. Especially fascinating is that this is in spite of (&lt;em&gt;or rather because of&lt;/em&gt;) RSS is painfully stupid. It's not the first or the "best" mechanism for distributing content across the Internet (I think many would argue that NNTP is far more elegant and scalable), but its basic simplicity and ease of manipulation has made it a winner (although IMHO it took the further simplification of RSS2.0 and Atom vs. RSS1.0 to ensure this.)&lt;/p&gt;

&lt;p&gt;So, what was my point in a nutshell? There are several awesome things about RSS that I think should be noted in a bullet list:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Very simple. The RSS2.0 spec is so basic that deserves the name &lt;strong&gt;Really Simple Syndication&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Doesn't care about transport. If HTTP is good enough for everybody else, it's good enough for us. Of course, you could put RSS on top of other things, but the important thing is that we don't need to worry about implementing the transport layer here.&lt;/li&gt;
&lt;li&gt;Extensible. One good thing about RSS is that you can embed additional content in the basic RSS feed. As long as you use a namespace for your elements, any good RSS reader &lt;em&gt;should&lt;/em&gt; ignore them, but savvy ones can use them.&lt;/li&gt;
&lt;li&gt;Regular checks. One of the common complaints about RSS is that it's a dumb pull-based mechanism and thus can cause many redundant server accesses from every RSS client checking a feed once an hour. This however is a virtue in my mind. It keeps things simple (&lt;em&gt;no subscription tracking&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;Time management. With RSS you're not so much browsing the web; instead you are &lt;strong&gt;monitoring&lt;/strong&gt; it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Read that last point again. Because this is where I went from Modern Web 101 to a Reese's peanut butter cup moment (&lt;em&gt;I'll explain the product plug in a bit&lt;/em&gt;). When you get down to it, there is nothing in RSS2.0 (&lt;em&gt;or RSS1.0 or Atom; I &lt;strong&gt;don't care&lt;/strong&gt; which RSS spec you prefer&lt;/em&gt;) that says the items in an RSS channel have to be documents somewhere (ie, new stories, new photos, etc.). And in fact, I would argue that the meaning of an RSS item is really as an &lt;strong&gt;event&lt;/strong&gt; which just happens to be tied to a particular story in many cases. &lt;em&gt;But it doesn't have to be&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;RSS and Error Reporting&lt;/h2&gt;

&lt;p&gt;Okay, the title here gives away where I'm going with this, but I still want to provide a little more background on things. In my office, I'm a backend guy. This means I do a lot of work tying together various systems and making sure data flows around smoothly and efficiently. It works really well actually and I'm quite proud of our simple system (more on that later). But errors are inevitable, and they occur in many different areas. Imagine you have a web server farm with applications. You can think of where errors occur in terms of domains (listed below with some standard error reporting mechanisms)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Hardware - if the underlying machine has problems, the OS will hopefully catch it. If you're using Unix-based systems, you can configure &lt;code&gt;syslog&lt;/code&gt;*. Otherwise, on a Windows-machine it might get logged into the System Events and perhaps picked up by a third-party tool like &lt;code&gt;Patrol&lt;/code&gt; or such.&lt;/li&gt;
&lt;li&gt;Network - Routers, firewalls, etc. can go down. &lt;code&gt;SNMP&lt;/code&gt; seems to be the standard mechanism for reporting problems in the network. &lt;/li&gt;
&lt;li&gt;Availabilty - A machine may be up but unreachable due to high load or other things. &lt;code&gt;NAGIOS&lt;/code&gt; is a way of catching this.&lt;/li&gt;
&lt;li&gt;Web Server - the web server may have problems with some requests. This are generally logged to a local HTTP log. Logs from multiple HTTP servers can be sent to another host via &lt;code&gt;syslog&lt;/code&gt;, but this is rarely done.&lt;/li&gt;
&lt;li&gt;Web Application errors - in the best cases these might be logged to a local file on the server, but usually they are just displayed on the screen to the user.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There are a few interesting things to note here: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Some of these error reporting solutions also include a networking protocol in addition to an error format, meaning you could assemble a centralized console for error reporting; no such luck in the web server.&lt;/li&gt;
&lt;li&gt;For applications, it's pretty much left to each developer. As a result, errors if they are logged are often local, since not many people think to use &lt;code&gt;syslog&lt;/code&gt; for error reporting. &lt;/li&gt;
&lt;li&gt;I think the ideal thing for site maintenance is to have some sort of centralized view of errors in the system as they occur.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Anyhow, to cut an already long story somewhat short, I was working on an application that would automatically generate and process RSS feeds that I wanted to be robust and I wanted to know whenever errors occurred without having to login to the machine (ala &lt;code&gt;syslog&lt;/code&gt;). So, I looked into some ways of reporting/logging errors when it struck me: &lt;strong&gt;why not use RSS as an error reporting mechanism&lt;/strong&gt;? &lt;/p&gt;

&lt;h2&gt;You Got Your RSS in My Syslog, You Got Your Syslog in My RSS!&lt;/h2&gt;

&lt;p&gt;And so we get to my Reese's Peanut Butter Cup reference. Think about it, RSS has some real advantages to error reporting:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Very simple. RSS has a lot of support across many platforms and with a wide range of viewers/aggregators. Does syslog or other networked error reporting mechanism. And it has support in programming language libraries too.&lt;/li&gt;
&lt;li&gt;Doesn't care about transport. HTTP is established and allowed through most corporate firewalls. No dumb network debugging or NAT fiddling and such.&lt;/li&gt;
&lt;li&gt;Extensible. One size doesn't fit all. I might want to record basic messages in some cases (ie, "printer on fire") or capture detailed stack traces in another (Rails logging). XML + Namespaces is a great way of layering stuff in there (&lt;em&gt;although you need an RSS reader that will allow you to look at the underlying XML to get the extra data&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Regular Checks. I like the pull communication of RSS because it acts like a heartbeat to your error reporting services; when something is wrong with one of my sources, I &lt;em&gt;know&lt;/em&gt; it because my RSS reader tells me so. (&lt;em&gt;to make an analogy, suppose you had a phone to be called for emergencies; does not getting any calls mean that there are no emergencies or might the line be dead?&lt;/em&gt;). Granted, I might not get an error &lt;em&gt;immediately&lt;/em&gt;, but to be honest I don't think I've encountered many errors that a 5 minute delay would've made impossible to handle; don't use it your nuclear reactor though I guess.&lt;/li&gt;
&lt;li&gt;Time Management. So, if I wanted to I could have errors, warning, statistics and other things coming into my central console. I don't have an insight into the best way to manage all this information effectively, but I have a pretty good idea that problems of information overload will be tackled much sooner in the RSS world than they have been in the Syslog user base.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So, here's the idea. Define a basic set of RSS error fields in a particular XML namespace (like &lt;em&gt;http://www.nimblecode.com/rsserror&lt;/em&gt;). This will have a set of optional tags that could be added to items. If users want to define their own extra tags they could just by declaring a new NS like (like &lt;em&gt;http://www.nimblecode.com/rsserror/syslog&lt;/em&gt;) and add them. Really, you can add anything to XML, but the NS tags help consumers of the information to know what to expect (so, if I want to look for syslog-type errors). An example of this might be produced soon.&lt;/p&gt;

&lt;h2&gt;The Minimum Error Fields&lt;/h2&gt;

&lt;p&gt;So, if we were to make a minimal RSS error specification, what optional and required tags would it include. I have an idea:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;error:msg&amp;gt;&lt;/code&gt; The text of an error message. Note that this could also be put in the &lt;code&gt;title&lt;/code&gt; or &lt;code&gt;description&lt;/code&gt; of the regular RSS &lt;code&gt;item&lt;/code&gt;, but I think it's good to define an explicit place in a namespace it will always be.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And that's it. Obviously, there are other things we might want to record. For instance in my case, I think of optional tags like &lt;code&gt;timestamp&lt;/code&gt;, &lt;code&gt;extended&lt;/code&gt;, &lt;code&gt;code&lt;/code&gt;, &lt;code&gt;hostIp&lt;/code&gt;, &lt;code&gt;application&lt;/code&gt;, etc. Not to mention some of the error information available with syslog traces, but I want to weigh what tags should go in a given namespace before I start adding options willy-nilly (indeed, there's no reason why you couldn't define your own extensions.) &lt;/p&gt;

&lt;p&gt;So for instance, if we were defining an addition &lt;code&gt;syslog&lt;/code&gt; RSS error namespace, we could also add the following &lt;code&gt;syslog&lt;/code&gt; fields as tags:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;timestamp&lt;/code&gt; - a timestamp for the error&lt;/li&gt;
&lt;li&gt;&lt;code&gt;priority&lt;/code&gt; - the priority of the message (EMERG, ERR, WARNING, INFO, etc.)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;facility&lt;/code&gt; - the facility option for syslog (AUTH, MAIL, USER, etc.)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On the other hand, if I were working on extensions for Ruby on Rail's logging format, I could include the following tags:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;timestamp&lt;/code&gt; - the time the error occurred.     &lt;/li&gt;
&lt;li&gt;&lt;code&gt;severity&lt;/code&gt; - the severity of the error&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sql&lt;/code&gt; - the SQL executed against the backend server&lt;/li&gt;
&lt;li&gt;&lt;code&gt;backtrace&lt;/code&gt; - the call stack where the error occurred&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Both of these would still use &lt;code&gt;error:msg&lt;/code&gt; for the main message with the error. It looks like I should also make &lt;code&gt;timestamp&lt;/code&gt; part of the standard set.&lt;/p&gt;

So there you have it. I will probably be working on this a bit more, but it's an interesting idea and I'm curious what other people might think.</content>
  </entry>
  <entry>
    <author>
      <name>harrisj</name>
    </author>
    <id>urn:uuid:0fd93f5836f86ffbb25fc29b7709d57b</id>
    <published>2005-04-25T00:06:00-07:00</published>
    <updated>2008-11-20T05:19:43-08:00</updated>
    <title>The New Web Math, Or How SOAP Adds Up To Nothing</title>
    <link href="http://www.nimblecode.com/articles/2005/04/25/the-new-web-math-or-how-soap-adds-up-to-nothing" rel="alternate" type="text/html"/>
    <category term="web-services" scheme="http://www.nimblecode.com/articles/category/web-services" label="Web Services"/>
    <category term="soap" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="craigslist" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="google" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="gmail" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="rest" scheme="http://www.nimblecode.com/articles/tag"/>
    <content type="html">Last week saw the intriguing web mashups of combining two popular web services in one place. So, first there was &lt;a href="http://www.paulrademacher.com/housing/"&gt;combining Craigslist Real Estate listings with Google Maps&lt;/a&gt;, which although slow is really quite amazing to behold. Then someone else hacked &lt;a href="http://llimllib.f2o.org/blog/serve/entry/delbackup"&gt;Gmail + Del.icio.us&lt;/a&gt;, using Google's mail service to capture contents on bookmarked pages at the bookmarking time. Not to mention &lt;a href="http://www.holovaty.com/blog/archive/2005/04/19/0216"&gt;Adrian's trailblazing mix of Google Maps and Chicago transit info&lt;/a&gt;.

&lt;p&gt;All of these are amusing and technically well-executed hacks, but what is most amazing to me is not the front-end combinations, but the ease in which it is possible to mix web tools in the back end to create new powerful services. And I have been especially struck by how SOAP has been utterly unnecessary for this to happen. In fact, I would argue that the strict COM-style model of SOAP is exactly the problem here, in that SOAP requires such effort and planning, it resists such freeform discovery of capabilities beyond what the creators of products imagine. REST seems to have a natural advantage here in that it builds on the inherent procedural model of HTTP and thus can evolve as naturally as websites do. Combine that with dynamic HTML tricks and we can see how nimble code can outmaneuver the heavyweight mechanics of SOAP again and again.

&lt;p&gt;For a more lengthy and detailed critique of SOAP, see my earlier post, &lt;a href="/blog/?p=17"&gt;Radical Simplification&lt;/a&gt;</content>
  </entry>
  <entry>
    <author>
      <name>harrisj</name>
    </author>
    <id>urn:uuid:7107de4a1709cb2f44e643262e2456ca</id>
    <published>2005-04-16T10:43:00-07:00</published>
    <updated>2008-11-07T17:15:58-08:00</updated>
    <title>Radical Simplification</title>
    <link href="http://www.nimblecode.com/articles/2005/04/16/radical-simplification" rel="alternate" type="text/html"/>
    <category term="web-services" scheme="http://www.nimblecode.com/articles/category/web-services" label="Web Services"/>
    <category term="soap" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="rss" scheme="http://www.nimblecode.com/articles/tag"/>
    <content type="html">&lt;p&gt;David Heinemeier Hansson has posted an interested find over at his blog &lt;a href="http://www.loudthinking.com/"&gt;Loud Thinking&lt;/a&gt; about &lt;span class="caps"&gt;IBM&lt;/span&gt;&amp;#8217;s stated new goal to pursue &lt;a href="http://www.loudthinking.com/arc/000439.html"&gt;Radical Simplification&lt;/a&gt; in their enterprise work. Essentially, Big Blue is starting to acknowledge that most enterprise web development is just too cumbersome and daunting for agile and powerful web development. Things like &lt;span class="caps"&gt;SOAP&lt;/span&gt; and &lt;span class="caps"&gt;WSDL&lt;/span&gt; are examples of this. What should be a simple task like &lt;em&gt;retrieve a weather forecast from a remote site&lt;/em&gt; becomes a complicated mess of debugging &lt;span class="caps"&gt;SOAP&lt;/span&gt; calls, tweaking &lt;span class="caps"&gt;WSDL&lt;/span&gt; specifications and using wizards on the server to generate code that is impossible for the end user to debug, let alone understand.&lt;/p&gt;


	&lt;p&gt;Or as Sam Ruby puts in his excellent presentation to &lt;span class="caps"&gt;IBM&lt;/span&gt; on the topic &lt;a href="http://intertwingly.net/slides/2005/rs/"&gt;Hello From The Open Source World&lt;/a&gt;:&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;For normal people, the perceived usefulness of a computer language is inversely proportional to the amount of theory the language forces you to learn.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;Sam illustrates this in his slides by showing the classic &amp;#8220;Hello World&amp;#8221; example in a variety of programming languages on different slides. But when he reaches &lt;span class="caps"&gt;WSDL&lt;/span&gt; to specify it, it&amp;#8217;s a blank. Because, quite frankly, &lt;span class="caps"&gt;WSDL&lt;/span&gt; is so unwieldy to use, it&amp;#8217;s hard to just build it on the fly, forcing many people to plunk down bucks to Microsoft or &lt;span class="caps"&gt;IBM&lt;/span&gt; to get their compilers to build it for them. It&amp;#8217;s good business for those companies, but bad news for the Internet as a whole I think.&lt;/p&gt;


	&lt;p&gt;Ruby says that essentially for a framework to succeed on the web, it has to enable a situation he terms &lt;strong&gt;Zero Training&lt;/strong&gt;, a state where it is easy to get going in the language and to adapt examples to your own needs. Good programming languages have it, some web technologies have it, &lt;span class="caps"&gt;SOAP&lt;/span&gt; and &lt;span class="caps"&gt;WSDL&lt;/span&gt; don&amp;#8217;t. Indeed, I feel like the growth of &lt;span class="caps"&gt;SOAP&lt;/span&gt;/WSDL in the enterprise has been in spite of the difficulties of developing for it (mainly because of Microsoft and &lt;span class="caps"&gt;IBM&lt;/span&gt; pushing it). Because, quite frankly, it&amp;#8217;s a beast for anything but the most basic &lt;span class="caps"&gt;RPC&lt;/span&gt;-style calls. The reasons:&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;&lt;span class="caps"&gt;SOAP&lt;/span&gt; allows you to abstract away the underlying transport protocol. But for 99% of &lt;span class="caps"&gt;SOAP&lt;/span&gt; communication, this protocol is &lt;span class="caps"&gt;HTTP&lt;/span&gt;, and the abstraction limits the control you have over &lt;span class="caps"&gt;HTTP&lt;/span&gt;.&lt;/li&gt;
		&lt;li&gt;&lt;span class="caps"&gt;SOAP&lt;/span&gt; needs to validate the entire message before applications can operate on it. This usually means it has to load it up into a &lt;span class="caps"&gt;DOM&lt;/span&gt; as well, so calls that return lots of data or might take a while (&lt;em&gt;the fun ones&lt;/em&gt;) are frowned upon&lt;/li&gt;
		&lt;li&gt;&lt;span class="caps"&gt;SOAP&lt;/span&gt; also assumes the &lt;span class="caps"&gt;COM&lt;/span&gt;/CORBA marshalling mechanism, so no streaming data or parsing data until the entire document has been received, parsed into an &lt;span class="caps"&gt;XML DOM&lt;/span&gt; tree, and then mapped into an in-memory object tree. For large amounts of data, forget it.&lt;/li&gt;
		&lt;li&gt;&lt;span class="caps"&gt;WSDL&lt;/span&gt; has a lot of syntax to map procedure names/arguments onto &lt;span class="caps"&gt;HTTP&lt;/span&gt;. Contrast this to &lt;span class="caps"&gt;REST&lt;/span&gt;, which embraces the inherent naming conventions of &lt;span class="caps"&gt;HTTP&lt;/span&gt; and applies them to a simple procedural call model&lt;/li&gt;
		&lt;li&gt;The assumption of these tools is that you will use their &lt;span class="caps"&gt;SOAP&lt;/span&gt; wizards instead of rolling your own code. The wizard is meant to be the only way, not an additional way.&lt;/li&gt;
		&lt;li&gt;In fact, the idea that &lt;span class="caps"&gt;SOAP &lt;/span&gt;= Simple Object Access Protocol has become a profound irony.&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;In his presentation, Mr. Ruby points to &lt;span class="caps"&gt;PHP&lt;/span&gt; as an alternate model. &lt;span class="caps"&gt;PHP&lt;/span&gt; is not really a pretty programming model and it tends to shy away from enforcing higher-level abstractions in favor of lower-level models. But, it is precisely for this reason that &lt;span class="caps"&gt;PHP&lt;/span&gt; has succeeded where many other dynamic web application programming models have failed. Indeed, as it says in the page &lt;a href="http://www.oracle.com/technology/pub/articles/php_experts/rasmus_php.html"&gt;Do You &lt;span class="caps"&gt;PHP&lt;/span&gt;?&lt;/a&gt;&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;Database abstraction is mostly a myth. There is nothing wrong with direct database calls&amp;#8217; making use of all the tricks and cheats your chosen database has to offer, to tweak as much performance as possible out of it.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;And this is the kicker here. Complicated database models tend to abstract away the lower level details of individual databases, even when those details can be the difference between fast and sluggish performance. Remote invocation models like &lt;span class="caps"&gt;SOAP&lt;/span&gt; abstract away the details of the underlying calling mechanism, even when tweaking &lt;span class="caps"&gt;HTTP&lt;/span&gt; requests can be the difference between a fast web app and a slow one. The lower-level mechanism might require more work for the developer, it might be ugly as sin, and it might be wrong and inefficient on some levels, but it works, and more importantly, it works &lt;em&gt;quickly&lt;/em&gt;. Because ultimately, the customer doesn&amp;#8217;t care what technology is used on the backend, they just want their data fast.&lt;/p&gt;


	&lt;p&gt;Bringing it back to my own experience, I once had to work on an application where we searched a remote document repository via &lt;span class="caps"&gt;SOAP&lt;/span&gt; and got metadata back on matching documents in &lt;span class="caps"&gt;XML&lt;/span&gt;. The service would send back all matching results for a query and in some cases, this would result in returning 150000 documents over 5 minutes of streaming &lt;span class="caps"&gt;XML&lt;/span&gt; to us. Knowing that the user probably would want to see data as quickly as possible, I decided it would be good to render whatever data I got after I received 10000 documents and tell the user to perhaps narrow their search down. And I tried to do this in &lt;span class="caps"&gt;SOAP&lt;/span&gt; in Visual Studio, and I failed. I could error out completely, but the mechanism had abstracted away the underlying &lt;span class="caps"&gt;XML&lt;/span&gt;-over-HTTP communication that I had no hooks to get lower level.&lt;/p&gt;


	&lt;p&gt;And so, I chucked it out and went back to basics. The upcoming call to the remote service was faked by filling in an &lt;span class="caps"&gt;XML&lt;/span&gt; string I grabbed from the original &lt;span class="caps"&gt;SOAP&lt;/span&gt; call via a packet sniffer. On the return, my program screams through the data with stream-based &lt;span class="caps"&gt;XML&lt;/span&gt; parsing. Once I hit 10000 records, then I can stop reading the input stream, display what I have, and tell the user that they need to narrow their search criteria. All within 30 seconds.&lt;/p&gt;


	&lt;p&gt;Those people who use &lt;span class="caps"&gt;SOAP&lt;/span&gt; are probably horrified by this and would rightly point out that I had to do a lot of lower-level work to get some of the same functionality promised by the one-click higher-level &lt;span class="caps"&gt;SOAP&lt;/span&gt; abstraction. But I think that&amp;#8217;s precisely the problem. I needed something to work, and I didn&amp;#8217;t need as much for it to be pretty. The &lt;span class="caps"&gt;SOAP&lt;/span&gt; framework locked me into a particular model, and once I needed more than that, it failed to deliver. Abstraction is nice, but abstraction always reduces speed, abstraction always reduces flexbility. In most cases, it is possible to strike a balance where the abstraction helps more than it hurts, but until &lt;span class="caps"&gt;SOAP&lt;/span&gt; is able to handle the heavy lifting needed for serious web work, it isn&amp;#8217;t worth my time.&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>harrisj</name>
    </author>
    <id>urn:uuid:6f4646a4d511a7b8164ecbde9e6dadde</id>
    <published>2005-04-07T10:05:24-07:00</published>
    <updated>2008-11-02T00:09:33-07:00</updated>
    <title>Google Maps and the User Experience</title>
    <link href="http://www.nimblecode.com/articles/2005/04/07/google-maps-and-the-user-experience" rel="alternate" type="text/html"/>
    <category term="web-services" scheme="http://www.nimblecode.com/articles/category/web-services" label="Web Services"/>
    <content type="html">&lt;a href="http://www.kottke.org/"&gt;Jason Kottke&lt;/a&gt; nails one of the reasons why Google Maps has generated such excitement in the last few days with the addition of satellite data. Certainly it's not that the technology is especially new (Microsoft and other companies have had satellite data on the web, and some localities like &lt;a href="http://about.dc.gov/"&gt;Washington, DC&lt;/a&gt; have provided maps that mix GIS information with aerial views). But the thing about Google Maps that inspires people and creates such a possibility for &lt;em&gt;serious play&lt;/em&gt; is the user interface. In &lt;a href="http://www.kottke.org/05/04/google-maps-and-user-experience"&gt;his post on Google's user experience&lt;/a&gt;, Kottke quotes an earlier post with a statement I like so much, I'm going to quote it here:

&lt;blockquote&gt;Advances on the internet and the web are typically heralded as technology-driven. Robert Morris from IBM argued last year at Etech 2002 that -- and I'm paraphrasing from memory here -- most significant advances in software are actually advances in user experience, not in technology. Mosaic was not an advancement in technology over TBL's original browser. Blogger is a highly-specialized FTP client. IM is IRC++ (or IRC for Dummies, depending on your POV). The advantages that these applications offered people were user experience-oriented, not technology-oriented.&lt;/blockquote&gt;

&lt;p&gt;Packaging and interface do matter. Indeed, I think the most successful online web applications ultimately will be those with the best interfaces, those that allow people to easily grasp what they can be used for &lt;em&gt;and&lt;/em&gt; to dream up new ways to extend their functionality and uses in ways the designers haven't conceived of.&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>harrisj</name>
    </author>
    <id>urn:uuid:556fbc6abd48ec9be3a6f00a74980a93</id>
    <published>2005-04-07T07:00:00-07:00</published>
    <updated>2008-11-14T19:57:14-08:00</updated>
    <title>I Can See My House From Here. And Yours Too.</title>
    <link href="http://www.nimblecode.com/articles/2005/04/07/i-can-see-my-house-from-here-and-yours-too" rel="alternate" type="text/html"/>
    <category term="web-services" scheme="http://www.nimblecode.com/articles/category/web-services" label="Web Services"/>
    <category term="search" scheme="http://www.nimblecode.com/articles/category/web-services" label="Search"/>
    <category term="google" scheme="http://www.nimblecode.com/articles/tag"/>
    <category term="flickr" scheme="http://www.nimblecode.com/articles/tag"/>
    <content type="html">&lt;p&gt;Second day blogging and I am already late to the party in talking about the changes Google has made to the Maps program by incorporating the satellite imagery from Keyhole. The result is very cool, not just because it's neat to see things from space, but because the map functionality is overlaid right onto the satellite data as well (as &lt;a href="http://www.docuverse.com/blog/donpark/EntryViewPage.aspx?guid=6744e802-6a07-4507-b952-30cb40684928"&gt;John Park shows with his bike route&lt;/a&gt;). What I like about this is what I also like about people using the maps with Flickr's annotation capabilities to present &lt;a href="http://www.flickr.com/photos/tags/memorymap"&gt;memory maps&lt;/a&gt; or people doing "virtual tourism" of sorts to get a feel of geography from afar, in that there's a real sense of play and fun and hacking going on with Google Maps that I haven't seen with a web service for a while. I will talk more about this later, since I think it's the difference between a successful web service and a dud.&lt;/p&gt;</content>
  </entry>
</feed>
