TechDoc: SmartSpaces-Client design principles and the Core Library

Posted on May 10, 2011


What is a SmartSpaces Client?

A SmartSpaces Client runs on a Client computer and is used to connect to a Smart Space Application Pool.

More concrete:when you enter a Smart Space, you want to be able to connect to it. To do this, you open a specific application which is a SmartSpaces Client.

What is a Smart Space Application Pool?

Each Smart Space will have and expose one or more services you can use. These services can vary from: “A remote control to turn the light on and off” to complex applications managing entire buildings or environments.

The technology can also be used for more user-focused solutions, like Client Relationship Management tools and Appointment tools in practices to show the real time state on agendas, contacts and make: “applications move with you” when you move from room to room.

Modified web browser acting as an adaptable Remote Control

In the most basic configuration it is a modified web browser action as a receiver for Remote Controls to applications in the Smart Space Application Pool

More general: What does it do?

This client does the following:

  1. Discover SmartSpaces Servers – It scans the local network and discovers SmartSpaces Servers
  2. Act as a Remote Control – For all services publicly exposed
  3. Allow the SmartSpace to push web content to the Client – Using an embedded Web Browser in the Client, capable of intercepting SmartSpaces instructions from the browser

What does it consists of?

  1. A modified Web browser – Allowing the Client to receive and present Remote controls for Smart Spaces Objects and applications
  2. A SmartSpaces Socket Client – Allowing the Client to connect to SmartSpaces  including
    1. Autodetection – Scanning the network you are connected to for SmaretSpaces Servers
    2. Object to Object communication and synchronization – Allowing programmers to create Object Oriented representatives of objects in SmartSpaces

What more is it capable of?

As the client uses the SmartSpaces Core Library, you and other coders can also make that client to:

  1. Act as a simple Web Server – Allowing the Client to “push” content – like images made with the camera – to the Servers
  2. Act as a SmartSpaces Server – Expanding your local network with more processing power

How can the technology be abused?

It does not take a rocket scientist to think of the basic abuse options:

  1. Grabbing your local content – Like documents and files from your hard drive, contact data, phone numbers and your e-mails from Outlook or another mail client
  2. Downloading malware – Using the HTTP download in the framework
  3. Running local applications – This requires a SmartSpaces client that is coded specifically for this purpose.

The SmartSpaces client we provide – and which is open source – has some limitations built in to shield the user from specifically this kind of abuse.

In general, people who feel a need to build malware feel a need to anonymously abuse some kind of vulnerability or form of ignorance at the user-side: where the user installs something seemingly innocent that is the package of something else.

Protecting your users

Stealing and abusing the ignorance and trust of your users is the work of bullies and a display of weakness.

Don’t be stupid. Don’t do evil.

Basis design principles in our clients and servers

  1. Shield the user from abuse and malcontent – By:
    1. Limited access to local storage – Allowing the web server only limited access to a limited part of the local storage of your users machine (laptop, mobile phone, tablet)
    2. Not giving the option to run local applications – Whatever is on your users machines should not be started by the Client or Server
  2. Provide one solution that fits almost all – We basically use an enhanced web browser. Via that enhanced browser you can:
    1. Load HTML pages with Remote Controls – For Smart Spaces
    2. Use hyperlinks with a “smartspaces:” tag – Directing the content of the URL to the Smartspaces Client, which will cancel the “navigate to” action that would normally occur.
    3. Communicate directly to a SmartSpaces Server – Without having to understand how to do this from your web pages
    4.  Load Flash content – For when you want to step it one level up. Flash allows your user and client to stream audio and video to the client, record audio and video to a (local) server and communicate directly to a SmartSpaces client

When you want your SmartSpaces Client app to do more

In principle you can turn any device with network access into a SmartSpaces server. You can start using the possibilities of those devices like:

  1. Accessing the camera – To make pictures and store or stream them
  2. Accessing the USB port – To do stuff with USB devices
  3. Accessing specific devices – like sensors and modules (Arduino, IOIO) to read sensors and activate other devices

In most cases these applications run on devices specifically assigned for that task.

What the SmartSpaces Core Library offers

Like said: the SmartSpaces Library offers the code to create:

  1. A SmartSpaces client – based on an extended web browser
  2. A SmartSpaces Server – Distributing smartSpaces Messages
  3. A Simple HTTP Server – To offer access to HTML pages, binary data (like images and audio and video files) and Flash content

Each of them supports the other.

Supplemental things – not in the Core Library

We and the community will offer more and more easy to implement solutions to:

  1. Stream binary data – Like live feeds from cameras and high-resolution sensors
  2. Read sensors and manipulate devices – Using solutions like Arduino- and IOIO modules
  3. Do remote stuff – Like moving your mouse-pointer and sending keyboard events and mouse-clicks to your system

Design goals of the Core Library

The entire design of the Library is aimed at:

  1. Simplicity and speed of development – It should allow you  to build a specific simple SmartSpaces solution within 30 minutes
  2. Without external dependencies – All the basic things you would need (including serving web content) should be covered in the Library
Posted in: techdoc