Hi all,
Good news for node fans! :) I'm porting our demo app (/ sdk / reference implementation),
myfavouritesandwich.org, to node.js+redis again.
First of all a word about BrowserId, I sort of slipped that in last week without giving it a lot of mention i think. BrowserId changes a lot for us. It removes the need for the whole 'log in with your unhosted account' UI, as well as for the 'Go Crypto' UI. So that's an awesome game changer. I'll write up my more elaborate opinion on BrowserId soon, but I can tell you already that it's a positive one. In general, for the web as a whole, and especially for us specifically, because it solves many of our UI problems. I think we should support it. If you think we shouldn't, then now would be a good time to speak up. :)
So assuming for the moment that we'll have BrowserId available, marketing for end users no longer needs to be focused on 'Log in with your unhosted account' (making people understand where they need to type in their user address with a special icon and such), and can instead focus on "ToS;DR", the idea that we should do for Terms Of Service what Creative Commons does for art work licenses: make them human-readable (as well as machine-readable). One of the icons could simply be 'we allow you to choose where your data is stored', or something like that, whenever a website allows unhosted accounts. Anyway, i think the best way to turn end-users into critical customers is by giving them a set of 'green' icons/labels and inform them that they should look out for these labels before using a website. For this topic too, discussion is very welcome.
Now about node, and marketing for devs. I am trying to build a stack of web technologies into the myfavouritesandwich demo, that people can easily reuse, and that will resonate with our target dev audience. On the server side, I think node.js is a good choice, partly because it's the only platform for which there currently exists a good in-browser IDE (cloud9ide), partly because it's a good, scalable webserver, and partly because it is much more flexible than apache to do the stuff we want to do (like making the response headers depend on the request headers, as well as on dynamic data, etcetera). the things we were doing in apache config and php are much easier to do well in node.js. I'm using redis as the storage backend for the moment, because it's light-weight and has append-only backup. I want to try out Backbone.js for the MVC, it looks cool and very relevant. Also, appcache manifests work quite well for improving the web app UX.
Then there's "browsermail", an smtp-to-websocket bridge. For people to be able to sign up through BrowserId, we need to offer mailboxes. The easiest way to do that, I think is by piping port 25 to the browser over a web socket, and then use some of the stuff that Max Ogden was looking at for Couchmail. basically, converting email messages into json objects. Now, we need this to display the BrowserId validation email, so that the user can prove that they have access to that email address. It doesn't queue up messages yet, and it doesn't yet allow sending of outgoing messages. But in the future, it can form the basis for a webmail alternative, delivering your emails directly and in real-time to your client-side app, over a websocket. Possibly integrated with other forms of messaging in a common UI. there are many possibilities for cool hack projects there. Check out the draft version here:
https://github.com/unhosted/unhosted/blob/syncStorage/node/browsermail.js
Contrary to previous weeks, i'm not going to showcase these things on live URLs, since it's not ready for production-grade publishing yet, and i think we should strictly separate things we are working on from things that are ready for actual publication. I will keep working on the edge cases and implementation of components that are still missing, and document and test it all, until this is ready to show to the public. it's tempting to only think forward and work on prototypes, but i think now is a good time to let the current prototype crystalize into a stable version.
Cheers!
Michiel