Hi NUI Group, Hi Martin,
I’ve talked with a few of you already, but wanted to join in on this conversation. I am well aware of the need for a protocol that extends beyond the current version of TUIO. There are a lot of ways we can go, so it’s great to discuss it all openly and design it together as we move forward.
Over the past few months I’ve been developing a very low-cost, easy-to-setup tag tracking system called Trackmate. I’ve spent a lot of time combing through the protocol layer (TUIO in particular) trying to look at how it could scale to a large variety of spatial input devices (interfaces in physical space that senses objects, fingers, materials, shapes, motion, etc.).
I think there are many great design decisions in TUIO, but it is very Reactable-centric (understandably) and as a community we need to politely fork. I realize that sounds a bit harsh, but the impact of such a protocol is vast and will greatly determine which new interface ideas are enabled or constrained as this community (and many other interface research groups) move forward. Forking should not be seen as disrespectful; it is simply the decision to take an open source project in a new direction. The new direction I propose is an open, community-centric, evolving protocol that works across all (as many as practically possible) spatial input devices—it’s more than changing a few profile names or adding a few message parameters; it’s a change of mindset.
Why is the protocol layer so important? Most of you probably have thought about this to some degree, but I think it is worth saying. The protocol layer sits between spatial input devices (such as Reactable, SenseTable, g-speak, various NUI Group tables, Trackmate, Nabaztag, MS Surface, etc.) and user-level applications. If every spatial input device has its own profile, then in essence, each system is vertically integrated with its own special applications, developer-base, and community. This is detrimental with so many new interfaces emerging since it spreads us too thin. Developers are writing specialized software (some of it quite amazing!) for each input device and risk their code being obsolete when a new interface is adopted. Ideally, the protocol layer needs to have a common ground for all spatial input devices (such as the most basic id, position, and rotation), which can then be easily extended (for pressure, temperature, velocity, shape, motion, gestures, etc.) without giving up compatibility (backwards, but more importantly, forwards).
This new initiative to extend the ideas of TUIO, but with an open, flexible, scalable, community-centric view is being developed at LusidOSC. The second version is already underway and everyone is encouraged to join in its development (see the “LusidOSC v1.1 document” on the website).
As for the comments so far in this thread, I’d like to express my opinion about some of the design decisions we face.
* UDP/TCP/OSC: What’s it all mean? UDP is fast, but can lose packets. TCP is reliable but often functions in bursts since it depends on acknowledgment of data received. For interface applications, UDP seems like the best choice since: 1. the process switching time would greatly affect the transmission rate locally over TCP since data uses flow control (potentially adding between 5-100mSec additional delay, depending on how your OS is setup); and 2. UDP pretty much never loses data when run locally or within the same local network (as long as things aren’t congested). OSC is a layer on top of either (although, UDP is the one almost always used because of the aforementioned reasons). OSC has a ton of implementations in various programming languages so it makes for pretty straight-forward development (that’s great!).
* Large data transport, like sending entire images, sounds, videos, etc.? OSC would definitely choke on this, but it seems beyond the scope of the interface layer. Perhaps a secondary layer that has different design constraints would be a good decision for handling this. (i.e., you could serve and stream the data, similar to streaming video, and your app could request/use it when desired). I personally think that trying to pack too much data into the interface protocol layer would be breaking a layer of abstraction (the data and the control information should generally be in separate pipes), but that’s a big question and definitely needs some more discussion.
* Ad-hoc protocol extending? It is inevitable that next month, or next year, technology will change and there will be new data that people want to add to the protocol. This brings up two important points: 1. when a system is first being developed, how difficult will it be for the developers to extend the protocol in an ad-hoc way for their needs?; and 2. when the technology is adopted, how can things stay nicely backwards compatible so that every application doesn’t need to be modified to stay up with the latest trends? I think LusidOSC v1.1 is starting to have some nice ideas with respect to this.
Let’s keep the dialog open and feel free to join the effort at LusidOSC.
Adam