Majority of web applications today are data owners. Yes, even if data is mine, it’s still owned by application, since all the ways to interact with it go through application. In some cases application kindly allows to export and import data, sometimes even delete or access it with other applications, but the point is, that somehow it is always between me, my tooling and my data. For example I just can’t simply move my social activity data access privileges from Facebook to MySpace or vise versa.
Still not sure weather this is fundamentally wrong or just can be better. One way or another, Taskhub is an experiment, trying to make it differently. With Taskhub I am an owner of my data and application itself is just a tool of my choice to interact with my data. To achieve this, Taskhub takes Jekyll like approach and saves tasks as Markdown formatted, plain text [gist]s. This way application respects my freedom of choice by allowing me to switch to any alternative task manager at any moment, making switch as painless as it can get, just stop using it. And if I’ll decide to switch back, Taskhub will just work. Think in summary, data is just mine and it should not bound me to any application. One can say here that it’s bounded to github, but it’s not true, because github in this case is just wire that connects my data to the cloud. In ideal world we will have “Data Clouds”, virtual hard drives with standard data access APIs. Users will buy them to store their data, just like they do with hard drives today.
For the moment Taskhub is just a geek toy, but I hope to see it’s decedents, being more useful to a regular users, one way of doing this is through adding support of saving data in less geeky storage, for example saving data to files in [Dropbox], will make a trick, besides it’s a step towards “Data Clouds”.
I’m not in illusions that, high performance will be easy to achieve with this model, but I do believe in smart people :).
###Under the hood###
HTML5 Offline web applications
As I mentioned high performance with this model is not easy. To reach acceptable performance application uses HTML5 localStorage for a live data, that concurrently gets synchronized with a gist storage. HTML5 offline application caching APIs are used to make it possible to run application while being offline. All the data is synchronized once user goes back online. So far there is no conflict resolutions, because of limited gist APIs, so browser always gets priority, which leads to a funny results when used with multiple clients. Fixing this is on my taskhub list, so stay tuned.
Application is build on top of CommonJS. It uses yet another CommonJS module loader Teleport, which asynchronously delivers modules from mapped CommonJS packages. One of the main components / packages is [github library] allowing to list, read and write gists straight from a browser and I’ll be posting details about it in the next post.
One of the interesting moments of architecture is in it’s selfhostness. That makes it possible to run app from any server, it even can be dropped to [dropbox] or can be used directly from local filesystem.