Monday, March 15, 2010

Presentation

I'm presenting a session at EJA tomorrow, entitled "Choose Your Cloud". I'll be comparing the different cloud vendors, with a particular focus on Google App Engine.

As an experiment, I've done my presentation in Prezi. I'm not sure if its cool or distracting. I'll check with my audience tomorrow to find out :)

Thursday, February 25, 2010

How predictable are you?

Ars Technica has posted about research that has been conducted about prediction your location, based upon data gathered from mobile phone towers.  The research shows that it is possible to predict where you will be at any given time with 93% accuracy, even before additional information such as calendars is taken into consideration.  That is spectacularly good, and just goes to show how good the information that is being gathered by our gadgets really is.  What this article makes me think about is how well adaptive user interfaces, once provided with the appropriate data, will be.  I want it... now.

Saturday, February 13, 2010

How I would design a forms workflow system for google wave

Yesterday, I posted a quick reply to a post on the google wave developer blog about creating a form based workflow system for google wave.  I was quite busy at the time and i think in my haste I may have been a bit brusque.    By way of making amends, here is how I would set up such a system.

A forms workflow engine needs a number of components in order to operate correctly.  In particular:

  1. A way of specifying relationships between people.  The Manager-Employee relationship is probably the most important here, but there are others too (like whom is in the HR department).
  2. A way of specifying what information is needed in the form.  What fields, how they are validated, that sort of thing.  Calculated fields would be important here.
  3. A way of specifying the workflow for the form, and working out which relationships to use and which form to use in that workflow.
  4. A way for a participant in a group to select which form he wants to fill in.  A particular person may be engaged in multiple organisations, so having a single form library to choose from isn't enough
All of this could be managed in Google Wave, but it would not be trivial.  If set up correctly, it could work quite smoothly however.  First, we need a bot that performs multiple functions, or multiple bots that co-operate to provide the functions listed above.  I think it would be more understandable for users to just have one bot, so lets use that model.  For the purposes of this discussion, I'll call it FormBot.

Next, we need a way of creating the models that are specified above.  An operator would create a wave, tag it with its function (so that the bot can tell what purpose the wave serves) and then adds FormBot to the wave.  FormBot adds a gadget to the wave which allows the operator to edit the data.

For the relationship diagram, the gadget/bot combo would be able to work out which users they were dealing with by looking at the participants of the wave.  This effectively becomes your personnel database, in lieu of having it hooked up to an LDAP server.  The gadget would then allow the operator to drop people into relationships.  The robot would detect any changes, and then suck up the information into its own database (this bit is quite important, as it is how the bot, when processing an instance of a form, will be able to find the information in needs).

The Form & Workflow models are linked together in a one-one relationship, so they can be added on another wave, this time tagged with workflowmodel.  There would be a couple of gadgets to allow the models to be edited, which are then sucked into the database again.

So finally, how does the bot process an instance of a workflow form?  A user would have an extension installed on his client which adds an entry to the "new wave" menu which would say "New Form".  This would create a new wave and add FormBot.  FormBot would check its database to see what Form Waves it has which are linked to relationship models with the user as a participant.  It would then present these as a list to the user to allow him to choose which form he wanted to fill in.  The Bot would then create the form and allow the user to edit it and progress through the workflow.  

In summary, what we've done here is create a couple of setting waves that the bot uses to configure the application, and to allow it to provide different form libraries to different groups of people.  I think its quite elegant and would work really well.  There'd be a lot of work to get it implemented though.  The gadgets to allow the editing of the models would be the key bit.  I'd love to do it but I doubt I'll find enough time to do it myself.  I did create a proof of technology some time ago, but it wasn't configurable, nor did it hook up to a proper user database.

Friday, February 12, 2010

Google wants a workflow engine/robot for wave too.

Google just posted on their Wave Developer Blog that their "wishlist" would have on it a way to process document workflow using google wave.  This reminds me of a post I wrote a while back on what google wave could be used for.  I did a proof of concept, but taking the concept to production would take too much effort for one guy in his spare time.  Probably the biggest barrier is integrating with HR systems.  How does the system plug into your corporate HR system to work out who your manager is when you post?

Either way, its good to see that other people see the same value in wave that I do.

Wednesday, February 3, 2010

Toshiba announces 'digital secretary' functionality

Last week, I ranted about how our cellphones will start adapting to what we are doing based upon the information they can gather on our behaviour.  Right on cue, Toshiba have now announced that they are building exactly this technology, and it will be available by the end of the year.  I'm impressed.  I wonder if they will introduce it only into the Japanese market, or more widely on Android or something similar.

Tuesday, January 26, 2010

My google wave post just broke :( but google fixed it :)

About 3 months ago, I wrote a google wave gadget, which allows users to collaboratively work on a google wave gadget within google wave.  I've gotten a bit of publicity out of it and its all been great.   Sadly, tonight, the wave that I created to document my gadget has crapped itself, collapsing under the publicity of its own popularity, with more than 200 blips and 500 participants.   The main blip in the wave now has no content whatsoever, and I can't view its history to repair its view.

This is a bad sign.  I like google wave, and I want to support it as a new way of communicating that is easy, effective and efficient.  The problem is that I can't trust it.  If its going to destroy information on me, how can I rely upon it?  Sure, its in beta at the moment, and I probably shouldn't complain, but I'm disappointed.  Its got a truckload of participants now, and I understand that that brings a lot of complexity, but I don't want to loose data.  If I could restore its state it would be fine... The really sad thing is that I'm due to deliver a presentation on my gadget tomorrow night, espousing how good google wave is and how it can be used.   What am I going to do now?

Time to address reliability issues Google.

Update: I've asked google to look into the problem, and it looks like somebody accidentally deleted all of the content in the wave.  This could have been a simple PEBKAC, or a more complex interaction of network latency causing the google wave software to do something unexpected.  It is beta software after all, so these things are to be expected.  It wouldn't be a problem at all, except I can't get access to playback to retrieve an older copy.

Never fear however, the dynamic chaps at google have had a look at my wave, and apparently there are over 30000 revisions to it.  This was a bit much for the javascript engine's tiny little brain and it broke.  They've fixed it now, and all is back as it was.  Thanks Christian!

The time is now for inference engines in user interfaces

I've been thinking the last couple of days about the future of phone user interfaces, and I suppose the future of interfaces in general.  At the moment we have fairly static interfaces, with a scrolling list of applications with the occasional widget to tell us the weather forecast or what not.  We set it up how we like it and thats it.  Some user interfaces (in particular, I'm thinking of Android's pages) provide different screens to cater for different use cases, but it is still a manual affair.

What I'm looking forward to is the day when my phone can infer things about what I'm doing.  Our phones (and our extended computer networks)  know an incredible amount of information about us.  They know where we are, and if we are moving or not, and they can remember where we have been before and at what times.  They have our calendar, they know what time it is now.  That there is enough information to begin to infer things.

For example, I tend to finish work at roughly the same time every day.  When I finish, I walk to Flinders St train station and catch a train home.  During the day, I couldn't give a tinkers cuss what the train timetables look like, but when I walk out the door, all of a sudden I'm keen.  My phone, based upon my previous history of movement, detecting when I start moving from the building I've been in for the last few hours, could easily infer that I am leaving, and that my most likely destination is home.  Wouldn't it be cool if it could alter its home page to show timetable information because thats where it thinks I'm going.

We can get more sophisticated here by adding in additional information too.  If I throw my calendar into the equation, the destination guesser has more information available to it.  If I have an appointment at 5:30pm in a different part of town, it can logically infer that I'm not going home, but rather that I'm going to this location.  Instead of showing me the train timetables for my home line, it could show me a tram route to my meeting, or the location of the nearest taxi rank.  It could even choose which option to show me based upon the time until my meeting.  If I've left myself lots of time then I can take public transport, but if time is running short perhaps I should take a taxi.  My phone becomes a true digital assistant, rather than a window on to information that I have to instruct how to operate.

I want my phone to do this now, and there's no reason it couldn't be done.  I'm sorely tempted to get venture capital funding and go do this.  Its where the action is going to be in the near future, in my opinion.  I've got a whole bunch of ideas about what sorts of information could be fed into an inference engine.

We do need be careful to remember the lesson of Microsoft's clippy however.  In order for an inference engine to work, it needs to be accurate.  It needs to provide value to the user.  It should also be unobtrusive.  if the user simply wants to get to his email, or his web browser, it should be no more difficult to get to than it is on today's interfaces.  Clippy failed on both counts here, and was widely lampooned and hated for it.  The amount of information that the clippy inference engine had to work with was limited, so therefore the assistance it could provide was worthless.

No inference engine will be perfect.  If I walk out the door and start walking towards the train station, I might not actually be going home.  Instead, I might be going to a bar on the way to the train station to meet a friend that just phoned me up.  There's no way my phone is going to be able to guess that (unless it monitors my phone conversation, and understands what we are talking about.  We can't do that yet...).  The secret here is to be unobtrusive.  The phone should offer information on what it thinks I'm doing, but in such a way that if I want to do something completely different it doesn't get in the way.  Phone user interfaces are getting sophisticated now(e.g. SlideScreen) so I see no reason why inferred information can not be incorporated.

One final thought about this is privacy. In order for this to work properly, our computer/phone needs to collect, store (for pattern analysis) and cross-check a lot of really private information.  Where does this information get stored and analysed?  at Google/Yahoo/Facebook?  The inference engine will then construct a model of my behaviour to predict what I'm doing.  I'm not sure I want a big corporation like Google to be able to make these sorts of inferences for me...  but thats naive.  Big corporations like Google already construct models of our behaviour, and every time we sign up to a new service like Google calendar or gmail we give them more information to model us.  I'd prefer to run such a service on my own hardware, but that isn't the way that the industry is going.

But as I ranted recently, perhaps that isn't an issue any more.  Are we willing to give up fundamental privacy in order to get the advantages?  I'm not sure...