-----------------------

                                   ContextKit



















-------------------------
Context and Conversations

* The stuff that happens around you.

* Shared by the people that you interact with.

* Implicit part of a conversation.

* Ignoring context makes you look absent minded.












-------------------------
Context and Computers

* Conversation between Man and Machine also has context.

* What has the user done with the computer?  "Recent documents",
  "Browsing history", "Recently written emails", ...

* Getting additional clues without help from user: time of day, day of
  week, geographical location, sitting still or moving, holding like a
  camera or like a phone, Internet connectivity, ..

* Use those clues to improve the Man / Machine conversation.

* "Essential Digital Companion".  (Yeah, right)

* Quite fuzzy, experimentation should be easy.





-------------------------
Context and Connecting People

* Computers facilitate conversations between people

* People want to share their context with their peers.

* Computers should help share the context of a conversation between
  people as well.













-------------------------
So?

* Bring together 'context providers'

  - DeviceKit, GeoClue, Meta tracker, Telepathy, BlueZ, ConnMan, oFono,
    Sensors, ...

* Standardize high-level interfaces across desktops

  - GNOME, KDE, Maemo, Moblin, Sugar, ...

* With bindings for all languages

  - C, Glib, Qt, Python, Perl, JavaScript, C#, ...

* No silver bullet, regular programming, no magic enabler needed.

* Restrict, simplify, do the minimal useful thing



-------------------------
ContextKit

* "Global variables for the Desktop"

* Disciplined way of 'setting' those variables

* Concrete list of variables

* Rich type system

* Well integrated into many languages










-------------------------
Status

* First generation framework done

* Some properties defined

* Some buy in from other Nokia research projects. 

* Only for Qt / C++  (sorry)

* A bit too static still










-------------------------
Architecture

* Decoupled

* Publish/subscribe for property values

* Run-time introspection 

* XML property declarations with cache
 
* No central daemon










-------------------------
Demo and Docs

* Context Commander

* Subscriber

* Provider














-------------------------
Desktop Types

* Little hobby of mine

* Intersect a number of dynamic type systems to find the core

  - Null, numbers, strings, lists, maps

  Missing: association lists, turn out to be more useful
           than maps for interchange.

* Define language neutral static types

  - Enums, time, coordinates, ...

* Write bindings of static types for static languages, documentation
  systems, introspection APIs.




-------------------------
Nano-DOM

* Mapping of subset of XML into Desktop Types.

* Used to define context properties

  <key name="Battery.ChargeLevel"
       type="percentage">
    <doc>...</doc>
  </key>

  <key>
    <name>Battery.ChargeLevel</name>
    <type>percentage</type>
    <doc>...</doc>
  </key>

  "key", { "name": "Battery.ChargeLevel", "type": "percentage",
           "doc": "..." }


-------------------------
Static Desktop Type

* Dynamic desktop types: simple, fixed.

* Static desktop types: expressive, extensible

* Hierarchy, parameters.

  <type name="uniform-list" base="list">
    <params>
      <type doc="Type of the elements"/>
    </params>
    <doc>...</doc>
  </type>

  <key name="Use.RecentDocuments">
    <type>
      <uniform-list type="nepomuk-uri"/>
    </type>
    <doc>...</doc>
  </key>

-------------------------
Future

* Finding a home on freedesktop.org

* Lobbying for mind share

* Adding GVariant and Python into the picture

* Getting the D-Bus protocol right

* Simple aggregation in client, maybe

  (Sum, append, average, max, ...)

* 'Context Cron'

