Sunday, 25 November 2012

Nexus and distributed computing


“Nexus is the name of the humanoid robots in Blade Runner. Taking this name discloses Google’s strategy: To turn Android into an indistinguishable part of our lives. Nexus are stronger and weaker at the same time, they are us on speed. A prosthesis or Surrogate (to bring another movie reference). Our technology systems will become a prosthesis, and as such not only ubiquitous and seamless but also versatile to changes. Ubiquitous and seamless we are working on, in the terms of affective computing and responsive design, but versatility is still a big issue. In a world changing faster and faster, the Achilles heel of contemporary technology is change.”

That’s the paragraph I forgot to mention in my W-Jax Keynote. This is going to be a post on what I meant with that example of the prosthesis. It would have continued on how Android is facilitating change, with message driven API’s and data update functionality; on how Google wants to introduce Web Intents and cloud providers start early concepts of application and data versioning. Let’s leave this aside for a while. Let’s talk about mobile apps and how we could start to embrace chance in them.

There should be no extremely complicated mobile apps from user perspective. Not due to platform or performance restrictions but context restrictions. What you want to use on mobile devices should be the happy case. Mobile Applications should allow deep-diving into information because "the value of interfaces today is the information it wants to present", even simple rules can get you anywhereIn Desktop interfaces with an exact mouse pointer, every page can contain multiple actions. With mobile and tablets, this actions have to be morphed into flows (which can be event- and gesture-triggered). That's why I think metaphors of urbanism are better suited to describe mobile application architecture then concepts derived from, in the end, military structures.

This flow is the link to the left out paragraph above. I am not a believer in Singularity, and I do not think we will end up in a Blade Runner world. In it's current state it's much more likely that the technology will be so resistant to change that we will have to learn to innovate completely without out. Luckily, some systems, like Android, start to introduce concepts of flows, messaging - generally, versatility. This can only be achieved by decoupling data representations from functions and human interfaces, for instance by leveraging CQRS, Mixed-Model-Mobile-Apps or ROCA. All of those three towers (I would draw them 90° turned to what we call tiers today because they would be accessible from everywhere) would be decoupled, freely linkable and versioned. The technology itself would become a truly representative tool. Just like the Nexus, but focused on what computers can do best: data and functions.

I imagine something like Erlang actors, OSGi or Server-Side-JavaScript (think Cocktails or Calatrava) to exchange business logic. A concept where data and logic can be exchanged seamlessly and across versions; a concept that could up to this point not make it into any statically typed programming platform. However there is a chance that Java (after JRebel, Jigsaw and Nashorn) could natively support versioned interfaces one day, maybe together with richer declarations for layers, tiers or towers. That fine day might be the brink of a new era of pervasive computing.