CloudProxy: The Secret Sauce In the Actionatr Recipe

Monday was fabulous thanks to Adobe. They released new database support in AIR, formerly known as Apollo. This removes lots of complexity for the desktop version of Actionatr as well as making the installation story simple once again. Given this new tidbit plus all of the other goodness that was announced and released regarding Flex 3, I have more specifics to share with you.

Ubiquity First

Instead of building all of Actionatr before launching, I am starting with ubiquity (the central, killer feature) as step one, followed by regular releases to add features and include progressively more users in the beta. What I mean by ubiquity is a list that goes everywhere, online or offline, in or out of the browser, in its simplest form. It will be similar to the Actiontastic inbox, spread over multiple operating systems and devices in order to demonstrate the concept and get some code out there for other interested hackers.

CloudProxy

The secret sauce for the first release is something that I hope to extract into an independent open source set of components for JavaScript, ActionScript3, Ruby, and possibly Java (for J2ME) when the time is right. It is tentatively called CloudProxy, an abstraction from data storage that delegates to a REST web service and/or local SQL storage as appropriate. Because REST and SQL behave as semantic siblings, a transparent blend of the two works out quite well.

The sequence in code for adding a new inbox item (in the desktop app) goes like this:

Step 1) A user adds an inbox item.
Step 2) A CloudProxy object checks for network availability. If found, a POST is issued against the REST API hosted at actionatr.com which stores the inbox item and returns its remote identifier.
Step 3) The inbox item is stored locally in the SQLite database using its own local identifier plus the remote identifier, if available, from Step 2.

Any time the network state changes from offline to online, any objects with missing remote identifiers or timestamps newer than those on the server are pushed. Any objects on the server with timestamps newer than those on the local app are pulled.

Now you have the recipe. The code is next.

Two Scoops

My Oblique Strategies widget just suggested that I “change ambiguities to specifics.” While this certainly applies to getting things done, it can also apply to communicating software plans and progress. And, speaking of news scoops, I was recently interviewed by Ed Arnold regarding Actiontastic, GTD, the open source announcement, etc. and would like to link the article and say thank you for taking it easy on me.

The Scoop: Actiontastic

Actiontastic is going to continue on its announced open source path. If you’ve been wondering about the source code release, it is still on the way but involves more than the simple mechanics of publishing some code. The goal is to make it GPL and that involves rewriting GPL-incompatible third party code prior to release.

It occurred to me today that instead of targeting a source release that matches the existing free version, I might do better to remove some of the third party code in question and replace it with something that could be used by interested developers sooner rather than later. Then, when everything is up to par, the source code base and the binary releases could move in sync with one another. I still have some thinking and experimenting to do in this regard so I will keep you posted on the progress as it happens.

The Scoop: Actionatr

The real news is that Actionatr will not only be running in your browser as planned, but also on the desktop and not just on the Mac. It will also run on Windows and Linux. This is all thanks to the previously blogged REST architecture on the server plus Adobe’s Flex and Apollo technologies. One way (Flash Lite) or another (J2ME a la the Gmail app for the BlackBerry) or another (in the browser), Actionatr will also be running on mobile phones.

I believe strongly that a ToDo list that isn’t available anytime, anywhere, online or offline, is a step backward from a folded sheet of paper in your pocket. Conversely, a ubiquitous set of checkboxes and idea capturing tools will be a welcome step forward…at least in my little world.

The important pieces of this are already running on my trusty laptop and communicating with each other. Screenshots will be posted as soon as the UI gets a little more love.