The Artima Developer Community
Sponsored Link

Visions and Sawdust
Project Atom, Amazon, Mobile Web Services, and Fireflies at REST
by Sean Neville
October 24, 2003
The buzz and crackle of mating unrelated new excitements: Experiences with Amazon web services, Project Atom, and a J2ME camera phone application that acts as a bar code scanner to transform all physical goods into mere floor demos.


This isn't anything so coherent as an essay, just a loose collection of things that I've found exciting over the past few weeks, akin to a jar of fireflies that may congregate into a single holy shining globe of brilliance, or on the other hand may just as likely wink out without further notice...

Smarter indexing == More value for books I already have

Amazon allowing me to search the text contents of a gazillion books makes the old books in my own library more useful. If I vaguely recall a passage, a quote, a character, a witty line or somesuch but can't remember the location, I need only to execute a few text searches in Amazon to locate the source and find the exact page number. It's like an instant index. Great for religious debates, standardized tests, arguments with the in-laws, cheating at trivia contests, or just general casual re-education.

Here's an example that queries Ed Roman's book Mastering Enterprise JavaBeans to see if he had any mentions of SOAP.

Personally I dislike the notion of having to go to the site and digging down into specific HTML-based entries to begin such a query, but fortunately for me Amazon seems to sympathize; how long 'til we see MS Office plugins that can take advantage of this feature via a few RESTful requests to Amazon while you're working in Word or Outlook, or perhaps even a few SOAP-based requests to new operations in the Amazon web services? Amazon has taken another step closer to becoming the central commerce engine for mobilized and service-oriented applications everywhere. By aggregating Google and Amazon's offerings, a developer could have intelligent, query-able access to a content repository unlike any previously assembled. If the apps ran on unobtrusive and ubiquitous mobile devices, such a device could become not a replacement for books (so much folly, wasn't it?) but a sort of satellite aid for enriching the reading experience, working along with books. If only there were a pleasantly simple yet extensible way to develop such apps...

Project Atom

I don't intend to pick sides between RSS 2.0 and Project Atom, because as a product vendor I think it's best if both are successful so that I have more interesting things to support and simplify in tools a layer above the standards. I have been spending a good deal of time playing with Atom lately, though, so I'll mention my experience with it -- meaning no disrespect to RSS 2.0 (things Winer and Ruby tend to get religious, and religion tends to get violent; this caveat is more necessary than some may know).

That said... wow! A simple, extensible format is emerging for content publishing and syndication, editing, and archiving that relies on the RESTful approach of using HTTP GET/POST/PUT/DELETE for its operations, replacing the blog world's current mixed bag of RSS/XML-RPC/WebLog APIs/HTML forms. Nicely extensible via reasonable namespace support, easily managed through tools and XPath/XQuery engines, supportive of multiple locales and content types, etc. Based on asynchronous doc/literal web services rather than RPC. All this is to my liking. My purpose here is not to explain what it is or consider its status, though. If you haven't seen it, browse through the wikki. I mention it because it helps me get to something I've been wanting for myself...

Offline Queries of XML Schema-compliant content delivered from Amazon, Google, Exchange, and...

What I want is my Amazon and Google (and others, but keeping it to just these two for simplicity's sake) services to return data in the form of a content model that conforms to something like Atom, making it easier for tools and client platforms to manage it intelligently. I want to be able to execute an XPath expression or a full XQuery statement in some sort of explorer window (that is, a file window in any OS or device) to grab relevant data. And I want to be able to update that data even while offline, and have it later synchronize (if using Atom, via a POST or PUT) when I reconnect. And I want the data to find me automatically based possibly on some subscription settings, and I want... well, I want a lot of the things that ex-Microsoft and current-BEA visionary Adam Bosworth speaks about when he talks of a Web Services Browser. Atom takes a pretty good stab at suggesting a content model and an HTTP-based API for approaching such things, stopping short of features or modules such as intermittently connected data and services, which of course we could add (or hijack from WS-Whatever) and integrate using Atom's namespace support. And at Macromedia I have been spending a great deal of time helping design a client-side container named Central to manage just this sort of functionality on the client, and see much headway there as we evolve the web browser (more on Central another time). It will take the right remote services, content model, friendly API, and client container to make it all come together.

I fully admit that I'm too enthusiastic to think clearly about this just now, but am comforted by the knowledge that my more familiar cynicism will certainly return -- and that's when I'll probably be able to get something real implemented. In terms of actual code using these sorts of services, though, I did pull together something based on these thoughts and the realization that...

Camera Phones are Barcode Scanners!

A few weeks ago I built my first real J2ME application: a simple app that uses the Mobile Media API to grab a picture of a book's bar code, perform some image recognition to rip the ISBN (you can also just enter the ISBN or UPC code manually if you don't happen to have a camera phone), send the ISBN to Amazon, and receive reviews and pricing info on the book. I provided the option to add the book to an Amazon cart, assuming it's less expensive than the copy I happen to be holding, and can even make the purchase via One-Click from the phone if I so desire. Mostly I just use it for the reviews so far, and I had to do some hacking to get the One-Click and purchase stuff to work (Amazon's RESTful and SOAP services don't expose enough features yet), but I found this to be a good use of the available technology to create a service-based mobile app that's not just a game (no offense to game designers). Works great on my Nokia 3650.

Better: I could hook this up to the service endpoint for an open source UPC database I recently located, and theoretically do the same for all types of products, not just books and CD's and DVD's. All the world's for-sale goods become mere floor demos.

Sadly, however, my friend Jeremy Allaire has informed me that this idea has been patented, which I should have guessed. I'm only a mobile developer by night and weekend, and haven't the inclination to battle some angry company that intends to market the thing, even if my version ends up being decently strong. Ah well, it was still a terrific experiment and it left me bitten by the mobile bug -- I see many mobile apps in my future. Not sure what my official day job employer will think of this...

And, and, and...

A couple of fireflies escaped the jar: Location-Based Services such as Zingo are chief among them. I'll recapture that one in some future entry. Meanwhile, even if nothing comes of these random thoughts, I feel great excitement, which is non-trivial in a world in which I was staring at implementing another wave of J2EE specs, the Red Sox broke my heart, and a fierce Autumn storm prematurely defoliated our New England trees. I'm just too mobile to be dragged down by it all -- there's random exciting stuff flying around out there!

Talk Back!

Have an opinion? Readers have already posted 5 comments about this weblog entry. Why not add yours?

RSS Feed

If you'd like to be notified whenever Sean Neville adds a new entry to his weblog, subscribe to his RSS feed.

About the Blogger

Sean Neville is a software architect at Macromedia where he is focused on creating the Flex platform. His previous projects include the JRun application server and Flash-related products for J2EE and .NET. His experiences include membership in the JCP Executive Committee and numerous JSR expert groups; authoring articles, contributing to books, and speaking on enterprise topics; financial services app consulting; building doomed yet fun web startups; maintaining open source projects; and half-decent fiddling of Irish jigs and reels.

This weblog entry is Copyright © 2003 Sean Neville. All rights reserved.

Sponsored Links


Copyright © 1996-2019 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use