Last week at TechEd Bangalore, Marilyn Pratt and I were having a conversation about Gravity Collaborative Business Process Modelling within Google Wave, we talked about how innovative it was and how such collaborative user interfaces could be useful in various different business applications, in addition to just BPM. During this discussion, I expressed to her that I don't understand why Google Wave was chosen as a platform for building Gravity ... don't get me wrong, I really like Wave and I'm very excited about its potential, but at the same time I realize that Wave will probably not become a reality in our workplace for another few years. Gravity, on the other hand is something people have a need for today and that is the reason I wonder why it was not built on a platform that can be delivered sooner.
Looking at the Gravity Collaborative Business Process Modelling within Google Wave I can make out that the core functionality Gravity needs from Wave is the ability of keeping multiple clients synchronized to create a realtime collaborative environment, which is what makes me wonder, since creating such an environment should be feasible outside of Wave, I'm thinking XMPP, JMS or even a simple custom protocol.
Later that night, I spent some time actually writing a rudimentary prototype of such a server. I've been learning Erlang for the past month or so and creating such a server seemed like an interesting learning exercise. So 47 lines of erlang code later, here's what I had ...
As you watch the above video, note as I drag a rectangle in any one Flash application, its sends messages to the server and the server multicasts those messages to other connected clients and those clients update in almost realtime. While in the example above all the application instances are running on the same system, they could just as easily be running on different system in the browser and still communicate via the server.