I have been busy designing a new application for Glassomium. I’m not sure of how I’m going to call it, but it’s going to work as follow:
- A user places his/her phone on the table.
- The table recognizes the phone, confirms the identity of the person.
- A menu pops out, providing the user with the ability to pull out pictures, videos, contact information and a business card.
- The menu responds to movements of the phone on the table.
- Other users can do the same.
- Information can be viewed and shared by throwing it to a person’s phone.
- The phone is taken off the table, the menu disappears.
Now there’s a crucial point to consider in designing this application, and that is minimizing user effort to interact with the system. But how do you make communication happen without having user interaction? Let’s consider the choices of communication for a phone:
Text and call are out of the discussion (good luck sending a movie with these two). Bluetooth was added to phones to solve the need of phones communicating with each other, but it’s slow, and only allows a dual communication channel. That leaves us with 3G or WiFi.
3G/EDGE would work, it’s available on a lot of phones. WiFi is normally turned off to minimize battery usage, but turning it on is not a painful task for the user.
There’s some implications when it comes to designing the communication protocol. The multi-touch table that hosts the application is the server. When a phone (the client) is placed on the table, it needs to find the hostname/IP of the table that is placed upon, so that communication can be established. That’s a nontrivial task, assumed we want to minimize user interaction. Of course you could simply ask the user, “Type the hostname of the table”. Now that’s a scary question to answer for my grandma, or even my dad. It would be extremely annoying and time consuming for myself as well. Technology should make it easier for us to do our activities. If to share a video I have to start typing hostnames, I might as well just send an e-mail with the video attached.
The phone could download a list of available servers from a central location and then discard those servers that are not within range (saving geo-location information about the server and comparing it with the phone’s GPS signal). This will give the user a (hopefully small) list of servers to choose from. Better, no typing required, but still undesirable.
The issue with mobile phones (and virtually any other device) is that there’s no way to identify close proximity. Using GPS coordinates to find the distance between two devices within a few meters of accuracy is simply not sufficient. If two tables are next to each other, a GPS signal will be of no help in identifying which table a phone is placed on. If there existed a way for phones to continuously communicate their relative position to other devices around them, this issue could be easily solved.
Having a phone connecting to a hostname/IP has also several security implications. How would you differentiate between a legitimate phone and a malicious remote user connecting to the table? That’s where you need to type in passcodes, draw patterns, and so forth. Undesirable.
What about WiFi?
Every table could be provided with a wireless card to setup an access point. This way the only way somebody could connect to the table is that if the person is physically next to the table (which does not remove the problem of security, but mitigates it). When users place their phone on the table, the accelerometer could detect that a steady 90 degrees position is in place and start scanning for WiFi networks. If a valid pattern in the name of the access point is found, it could connect to it and start the communication. There’s still the problem of having two tables next to each other, without proximity detection the phone would have no idea of which table it is currently placed on. WiFi signal strength could be compared for a better guess, but how accurate is that? This approach is risky in that malicious users could spoof the access point. Thus some form of authentication would still be required. If the phone somehow had a list of trusted tables (using certificates) then spoofing will not be possible. But how would you keep such a list? And who would be the one to judge who is trusted? And how would you judge? It doesn’t seem practical for large scale (although it would work for small scale).
Following from these thoughts, it seems to me that the lack of “knowledge of what’s near me” is key to make this application work in an ideal way. I believe that such a feature will exist in the near future and it’s going to be necessary if we want to aim at creating an ecosystem of devices that interact with each other. I would love someday to contribute to this development.0