Stealth Startup “Register For Interest” Pattern

Has anyone else noticed the Ajaxian “Register for Interest” pattern sported by the new-skool stealth startups? The new Firefox+++ project, Flock (via Ajaxian) is doing it right now.

Essentially, “This is happening in a few weeks, leave your mail, we won’t spam you, and we’ll tell you about it.”

I submit my email.

Then the page morphs and thanks you for your interest. (Not altogether different from Lazy Registration.)

And if Flock is different to the last one I tried, they’ll actually send something back.

Update: They’ve auto-mailed me an invite to join a mailing list. I guess they can’t do RSS due to auth issues, but I’m going to skip on the mailing list offer.

Rhythmbox – Usability Lessons Learned

Currently trying to delete about 50 playlists on Rhythmbox. (Rhythmbox doesn’t yet have podcast-friendly features like sorting by date, so I end up creating a daily playlist via a bashpodder hack, leading to numerous playlists).

The program’s nice overall, but deleting the playlists is a bit slow. I’m manually navigating to each item, right-clicking to open the menu, clicking delete, and confirming. Lessons learned here:

  • Keyboard shortcuts are good. Like “Del” for delete.
  • Multiple selection is good. Even for things you didn’t think anyone would need to do in bulk. You can’t anticipate everything users will do, so as a general rule of thumb … assume that if a user can do something to one thing, they will probably want to do it to many things.
  • Expose the configuration files so I can work out where all this stuff is stored, and manually delete them on the command line. I wish more Linux GUI apps would make it more obvious how the config maps to the filesystem – knowing that should be one of the main benefits of working in Linux.

An API-Only Business Model?

Amazon, Yahoo, and Ebay all have E-Commerce APIs, right? The model is “You can create a UI and if it fits a niche better than us, you make money”. It’s one of those odd models where you’re competing and partnering at the same time. Some other examples where this hsa occurred:

  • Phone companies forced by government regulations to open up to third-party DSL providers.
  • Microsoft providing APIs for competitors to use.

Hmmm. These previous examples have not been without controversy. Ultimately, a company under this model can make a bit of money, but things get antagonistic once they start to be serious competition. Does this logic apply with Amazon, Yahoo, and Ebay? I haven’t heard too much about it, but one thing’s for sure: whatever you can build with their API, they can build too, and they have the data and background knowledge to go much further.

So as pure speculation, what would happen if a startup offered a pure API-only E-Commerce platform? No web interface, their entire revenue derived from third-party clients. Maybe there already is such a thing, I don’t know. The only way they make money is if the third-party clients are making money.

This came up because I’ve been thinking about the Ajax-WebServices/SOA tie-in. It seems that many people are talking about creating generic web APIs and handling the entire UI in Javascript. (I’m ignoring whether the API is REST or RPC or whatever for now – that’s a side issue.) That being the case, the browser-based Ajaxian UI becomes nothing more than one of infinite possible clients for the web API.

Ajax Periodic Refresh, Chat, and Multiplayer Gaming

First, a quick update on yesterday’s book anouncement: Thanks for your interest. Yes, it will be published as a physical book. In the O’Reilly animal format. And no, I don’t know which animal.

Periodic Refresh is a pattern where the page runs a loop to continuously grab fresh data from the server (Ajaxify Time Demo).

As that pattern explains, there are quite a few chat systems that work that way. And a slashdot poster pointed out that many Japanese chat apps worked the same way in the late-90s, albeit with full page refreshes instead of [XMLHttpRequest](XMLHttpRequest Calls), because the web handled the character set better than desktop GUIs.

When I first heard of Google Talk, I thought “Hello, Google’s doing Ajaxian chat”. But, no, the text/IM component for now is a windows-only Jabber client. There’s a great opportunity for a hybrid approach here – provide a rich client which will stay on 24×7, pop up when a message occurs, and show an appropriate icon in the system tray, and also provide a web client which can be used wherever you are. Google is well-placed to do it because (a) they certainly know how to Ajaxify; (b) they need to Ajaxify – windows clients are fine and dandy, but in order to sustain its advantage, Google has to change the rules of the game by establishing the web as the platform, not the desktop; (c) Periodic Refresh is expensive because frequent requests must be handled and Google, well, they can take the hit better than most.

So in a way, I feel like Google’s missed a trick here (but then, you can never be sure what they have up their sleeves). There’s already JWChat, an open-source Ajaxian Jabber Client. While JWChat’s demo is really just a demo, I wouldn’t be surprised to see someone picking it up and creating a serious public website based on it. Meanwhile, there are offerings like QWAD Chat which are taking the business model for Ajaxian chat very seriously.

Yesterday, another interesting announcement:

We are working on an open source project to develop a peer to peer graphical adventure game, using AJAX! Looking for AJAX developers of any skill level who want to pitch in and help out! Interested? Download the first version (single player) at

With Periodic Refresh, Ajaxian multi-player is feasible. I’m curious to see how far it can go. There’s a few game examples already, including Crisp’s stupendous DHTML Lemmings effort. In their inaugural Ajaxian podcast, the Ajaxians discuss SVG, which is finally about to become a reality on Firefox 1.1. Combine SVG with Periodic Refresh and we’ll be gaming like it’s 1995. (But without the sound effects. Playstation and X-Box have nothing to fear.)

As an aside, a thread a while back on Google Groups discussed whether unique URLs are worthwhile for Ajax apps. The argument was, why bookmark your state within an app? Of course, one answer is that you want to bookmark a particular object, like a location in Google Maps. But, when you think about it, why not bookmark the state in an app. I mention this because it would be sweet if you could have a unique URL for a position in a game. So you just bookmark it instead of saving it or you can mail it to your mates.

As another aside, I’m glad Google Talk went with Jabber and I hope they really do move to SIP for voice as they’ve hinted. IM today is popular, but it could easily have been ubiquitous by now if not for the fragmentation caused by AIM/ICQ/MSN/Yahoo/IRC/Jabber splitting the market, thus exponentially dropping the value of using a given solution. Now, voice has skype, Gizmo (SIP-based), Google Talk, as well as the offerings from the IM incumbents.

Ajax Design Patterns Book

Click to download the Podcast. You can also subscribe to the
feed if you want future podcasts automatically downloaded - check out the
podcast FAQ at

I’m pleased to announce the in-progress patterns at will be completed and published as an O’Reilly book: “Ajax Design Patterns”. The accompanying podcast explains the details, here’s a summary:

  • I’ll be completing full-text descriptions for all the listed patterns, give or take some restructuring.
  • will remain online, with full content – before, during and after the book’s release. I’ll continue building up the text on there. O’Reilly’s fully on board with this.
  • A Creative Commons license will apply throughout, with the non-commercial restriction possibly lifted after the book’s published. Contrary to John Dvorak’s recent rant, the CC license cannot, should not, and does not, preclude others from reusing the content commercially under fair use.
  • Some pages on the wiki are already open The main pattern pages will remain me-only until full-text is there, at which time I am hoping to take a branch, refine some things offline (mediawiki is painful for batch changes), and open everything up for editing.
  • The editor is Brett Mclaughlin and he too will be able to make edits. You might have seen that I’m highlighting patterns with full text on the main page. Brett will highlight them in a different colour once edited, hopefully leading to something resembling a “progress heatmap” and not a pile of visual mess.
  • I’ll continue to post updates about the patterns here, using the tags “Ajax”, “Patterns”, and, I’ve decided, “AjaxPatterns”.
  • I intend to podcast about the patterns and the corresponding examples at Ajaxify. I’m looking forward to being able to supplement the text with audio commentaries. Some prefer audio, some prefer text, but I think the best learning style is a multimodal combo deal.
  • Writing this in public will allow ample opportunity for feedback – as Dan Gillmor says, my readers are smarter than me. I know lots of you are using Ajax in different ways and for different tasks, so please tell me what sucks about the patterns. Comment in the Discussion tab for a given pattern (which I’ll pick up via RSS), leave a comment on my blog, or mail to
  • Do you have any comments or suggestions about this writing strategy? Please leave them here or mail

Click to download the Podcast. You can also subscribe to the
feed if you want future podcasts automatically downloaded - check out the
podcast FAQ at

This entry has a Podcast attached- an embedded MP3 link. On Internet Explorer, Click on the Podcast icon to listen, or click the right mouse button and “Save As…” to download. Better yet, you can subscribe for updates straight into your PC or ipod – it’s easy, open, and free. Install the free, open-source, Ipodder client and when it starts, just paste this in: “”. Or search for “software” under the ITunes Podcast Directory. More info in the Podcast FAQ.

Protopage as Portal

I mentioned Protopage yesterday. It’s look-and-feel has so much more appeal than the standard Ajaxian portals (Google Homepage, Backbase, Start, etc.). Considering the others are more powerful functionally – given that you can do stuff like grab RSS feeds and search history – I wondered why I like Protopage so much more. There’s a lot to like, but I’ve decided one particular design decision was critical:

The portlets are free-floatingI.

By portlets, I mean all the little bits of self-managing content. In the standard Ajaxian portlet apps, you can drag-and-drop, but you’re constrained to a three-column layout, and each column must begin at the top and continue unbroken. Eschewing that approach and going for completely arbitary positioning gives Protopage several advantages:

  • It’s classical direct manipulation, the idea that made windowing desktops so popular. The user feels in control when they can move and drop content anywhere instead of being constrained by the desktop traffic laws. I’m saying “desktop” rather than web page because I can’t help thinking of protopage as a desktop right now (despite its name!).

  • Not only does the user feel in control, but the free-range arrangement makes protopage more valuable as a portal. With content arranged according to the user’s mindset, it’s easier to navigate and manage.

  • The design exploits whitespace. As building architects and town planners know, some space is good. It helps structure things and is visually appealling. The 3-column portals do contain space, but only by virtue of there being no content there yet – the user can’t directly create space.

  • Another benefit of the space is the background actually becomes useful. You can have a personalised desktop image, which can be any image URL. And the user has the power to work around any blurring effect because they are in complete control: they can move portlets around, change the background, and even change the colour scheme. Users can even arrange the portlets around the structure of the background image.

All in all, I’m impressed! Protopage is pure Ajax, one of the finest production-level Ajax apps to arrive since the hype began.

Greasing Greasemonkey Scripts

Tweaking a Greasemonkey script is easy. It’s just a single file, so you download the file locally, edit it, and install it the same way you’d install any other script.

I did this because I needed a quick fix for the super-helpful XMLHttpRequest Debugging script. Sometimes the console has a little trouble with positioning – using it with Google Maps caused it to sit behind the upper portion of the page due to layering. So I made two quick fixes – increased the z-index in the embedded stylesheet so it would appear in front and also changed the default coordinates (I’d adjusted them with “about:config”, but somehow that wasn’t picked up.)

All in all, I was able to tweak the script, not knowing anything about the GM API, and have it running in my browser in about 10 minutes. Had it been a standard Firefox extension, I would have been out of luck. I’d presumably have to download the original source, set up a dev/testing environment, and be able to package it all up including meta-info. Furthermore, I’d have to restart Firefox to test it, unlike Greasemonkey which works straight away. I’ve never tried all that with extensions, but that’s my perception from a little looking around.

I’m nowhere near as bullish as some about Greasemonkey, at least in the medium-term, as some people, because I think the whole Firefox extension mechanism is way too complex for most end-users, let alone the idea that you have to install Greasemonkey scripts on top of one of those extensions. But in any event, once you have the Greasemonkey extenstion installed, it’s a cinch to remould a script you come across.

The Ajax Desktop

I know. “The Ajax Desktop” sounds like I’m taking things just a bit too far. But I wanted to point out that people are experimenting with things you’d associate more with the web.

To wit:

  • Protopage:I was triggered to write this after discovering an awesome new Ajaxian app: Protopage (via FloatingSun). It’s essentially a start page, similar to the portal efforts. However, it feels more like your desktop, with configurable background, colour schemes, and sticky notes. One really nice feature is an “Add to Protopage” link for website owners – an update of the old “Bookmark This Page!” (Does delicious have this?). Some patterns here include:
    • Lazy Registration Register all you want, but the homepage really comes down to a unique URL, which is established immediately.
    • Drag-And-Drop Another desktop-like feature.
    • Popup For configuration.
  • Ajaxian Screensaver: A post on creating an Ajaxian Screensaver. I made a comment in the Ajaxian Blog posting that linked to it about the possibility of a SETI webapp. Mostly tongue-in-cheek, but I can see it happening. It would be trivial to create (and critics might say it would be sufficiently slow to make a trivial contribution too).
  • JSCalc: A calculator bookmarklet.

How far can it go? All we need now is a web-based splash-screen. Oh, wait!

Full-Text for Widgets

The other day, I noted the Ajax Patterns widgets have been broken down into content, form, and page architecture. The patterns for those are now complete. Give me yellow! Yellow is the colour for full-text descriptions, and the bottom of the page is starting to look a nice shade of yellow.

There are full summaries for each pattern on the homepage too. So the upshot is there’s a description for each of these:

Content Widgets

  • Drilldown To let the user locate an item within a hierarchy, provide a dynamic drilldown.
  • Microcontent Compose the page of “Microcontent” blocks – small chunks of content that can be edited in-page.
  • Microlink Provide Microlinks that open up new content on the existing page rather than loading a new page.
  • Popup Support quick tasks and lookups with transient Popups, blocks of content that appear “in front of” the standard content.
  • Portlet Introduce “Portlets” – isolated blocks of content with independent conversational state.

Form Widgets

  • Live Command-Line In command-line interfaces, monitor the command being composed and dynamically modifying the interface to support the interaction.
  • Live Form Validate and modify a form throughout the entire interaction, instead of waiting for an explicit submission.
  • Live Search As the user refines their search query, continuously show all valid results.
  • Query-Report Table Report on some data in a table, and support common querying functions.
  • Slider Provide a Slider to let the user choose a value within a range.
  • Suggestion Suggest words or phrases which are likely to complete what the user’s typing.

Page Architecture

  • Drag-And-Drop Provide a drag-and-drop mechanism to let users directly rearrange elements around the page.
  • Sprite Augment the display with “sprites”: small, flexible, blocks of content.
  • Status Area Include a read-only status area to report on current and past activity.
  • Virtual Workspace Provide a browser-side view into a server-side workspace, allowing users to navigate the entire workspace as if it were held locally.

The Story Behind “Developers, Developers, Developers!!!!”

You’re right, Jason – the voice behind “Developers, Developers, Developers” is Microsoft CEO Steve Ballmer. I thought it would be fun to include the clip over my podcast theme. Hearing Jason explain he had to pull over while laughing so hard makes it all worthwhile! I’ve seen few things that make people laugh so hard as the Ballmer performances, especially when you explain exactly who the guy is (“No, really!”). (Boris Yeltsin’s election campaign dance also comes to mind, though online footage is poor.)

In the podcast, I didn’t explain it, leaving listeners to either nod their heads knowingly or tilt their heads curiously. One thing I didn’t expect was a few people thought it was me (huh?)!!!! If you haven’t seen these clips, the Developers clip is actually tame compared to the “I love this company!” woo-woo effort. And if you listen carefully, there’s a little clip from that performance right at the end of the Ajax podcast.

Check out the mixup on that site too – I realy need to play it on the podcast sometime. Anyway, my podcasts are all speech for now until I work out a faster production mechanism. (Another reason to make the switch from Linux.)

Jeff Attwood was on the money when he blogged about “Steve Ballmer: Sweatiest Billionaire Ever”: “You have to respect a man with that much unbridled enthusiasm. I certainly can’t see staid, boring old Michael Dell dancing around on stage, screaming about how much he loves his company at the top of his lungs.” Dig the passion – I couldn’t agree more.

I’ve never heard the full story behind the “Developers” mantra, but I suspect it’s not what I initally assumed. Like most people, I originally assumed Ballmer was rallying the MS developers. But then I came across Joel Spolsky’s article where he uses the “Developers, Developers, Developers” catch-phrase to signify the company’s commitment to external MS developers. Joel’s an ex-Microsoftie and has great insight into the company. So, who exactly are all those clapping people in the clip? I’m guessing they’re the programmers who develop MS’s development tools, the managers who partner up with external developers, the marketing types who guide future directions … not just the MS developer community at large. Anyone, anyone?