Upload
dominik-renzel
View
1.519
Download
0
Embed Size (px)
DESCRIPTION
A presentation of ROLE technologies at the Apache Rave Hackathon in Utrecht, Netherlands on Jun 13, 2012
Citation preview
© www.role-project.eu
ROLE Technologies – A possible contribution to Apache Rave?
Dominik RenzelChair of Computer Science 5
Advanced Community Information Systems (ACIS)RWTH Aachen University, Germany
Apache Hackathon June 13, 2012, Utrecht, Netherlands
This work by Dominik Renzel is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported.
Sten GovaertsDepartment of Computer Science
Katholieke Universiteit Leuven, Belgium
ROLE Background & Motivation
Currently happening: significant shift in education From passive lectures to interactive (online) group work Online learning tools cherry-picked or handcrafted by educators & learners DIY motto “create, disassemble, repurpose“ applied to educational products Learners & educators create mash-up learning apps, lessons & processes
More collaboration, personalization, freedom, effectiveness ROLE: Inherent DIY support using widget-based Personal Learning
Environments
© www.role-project.eu
ROLE Vision
© www.role-project.eu
•Empower learners to build their own responsive learning environments
ROLE Vision
•Awareness and reflection of own learning process
Responsiveness
•Individually adapted composition of personal learning environment
User-Centered
ROLE Technologies – How to sustain?
© www.role-project.eu
??
© www.role-project.eu
The ROLE Sandbox (role-sandbox.eu)
Public installation of ROLE SDK for development & testing purposes ROLE Reference Container for Widget-based PLE
SpaceWidget List(add/remove)
Member List(join/leave)
Space Chat
Widgets(max/minimize)
Does this already remind you of Apache Rave?
ROLE APIsHow to make your widget communicate in real-time – The ROLE Interwidget Communication (IWC) API
© www.role-project.eu
ROLE APIs
ROLE XMPP-based Real-time Communication & Collaboration
ROLE Interwidget Communication – Concept
© www.role-project.eu
Message-based communication between widgets Two different forms
Single-user-single-browser: Integration of local widget instances to full applications Realized with HTML5 Web Messaging (other mechanisms realizable, too)
Multi-user-multi-browser: Remote user collaboration in real-time Realized with XMPP Publish-Subscribe
Message types Events: what happened upon sending message Intents: what should happen on receiving message (Use of semantic descriptions in message representations)
Context In general: XMPP Publish-Subscribe Channel ROLE Reference Implementation: ROLE Spaces
Refers to Epic RAVE-25
ROLE Interwidget Communication – Facts
ROLE Interwidget Communication – Client API
Function Description
connect(callback)
Connects the client to local interwidget communication. After successful call, the client is able to publish and receive intents. Received intents are passed to the callback function.
disconnect() Disconnects the client from interwidget communication.
publish(intent) Publishes a JSON-encoded intent.
Initialize ROLE IWC Client
var iwcClient = new iwc.Client(); iwcClient.connect(function(intent){
// process intent });
Publish ROLE IWC Intent
iwcClient.publish(intent);
© www.role-project.eu
ROLE IWC – Intent Message Format
Google Android-like Intents component(*) (String) - the component name of a specific recipient widget
(explicit intent) or the empty string to indicate broadcasting (implicit intent) sender (String) - sender & sender widget. action (String) - the action to be performed by receivers (e.g. ACTION_UPDATE) data(*) (String) - data in form of a URI (e.g. http://myresource.org/microblogs/1) dataType(*) (String) - the data type in MIME notation (e.g. text/html) categories (Array) - categories of widgets to process the intent (e.g. ["editor"]) flags (Array) - flags controlling intent processing (e.g. ["PUBLISH GLOBAL"]) extras (JSON) - auxiliary data (e.g. {"examplekey":"examplevalue“})
var intent = { "component": "", "sender":"[email protected]?
http://widget.org/sender.xml", "data":"http://data.org/some/data",
"dataType":"text/xml", "action":"ACTION_UPDATE", "categories":
["category1","category2"],"flags" :["PUBLISH_GLOBAL", "own_flag"],"extras":{"key1":"val1", "key2":"val2"}
};
© www.role-project.eu
Efforts in XMPP Community: XMPP over WebSocket
XMPP over WebSocket Gateway (WXG) Based on "An XMPP Sub-protocol for WebSocket" (J. Moffit, E. Cestari) Jetty-based implementation (supporting RFC 6455) Source: https://github.com/hocken/wxg
Web Client Library Extension (strophe.js) (Semi-)transparent BOSH/XMPP over WS Refers to Strophe Issue 68: Source: https://github.com/Gordin/strophejs
(XMPP over) BOSH vs. WebSocket
Property BOSH WebSocket
Connections Two concurrent One
Connection Persistence Repeated open/close Persistent
Transportable Data Textual only Textual, binary
Latency High Low
Package Overhead High (180+ bytes for headers per roundtrip)
Low (2 bytes for frame headers)
Uptake High Low
XMPP Servers Most Few
XMPP JS Libraries All Only some experimental
Browser support Most Few
XMPP over WebSocket to obsolete BOSH with stable specifications and implementations
ROLE Interwidget Communication – Online Resources
Documentation ROLE SDK API Docs (SDK Download) Sourceforge MediaWiki (Wiki Page) Overview Paper (PDF)
Demonstration ROLE SDK Trailer (youTube Video) Demo Space in ROLE Sandbox: http://role-sandbox.eu/spaces/iwc
Code Libraries
Proxy Part (code) Client Part (code)
Tools ROLE IWC Test Stub Widget (code)
Demo Widgets (cf. Demonstration) Synchronized Video Player (code) Synchronized Map Navigation (code) Collaborative Sketching Widget (code) Real-time Shared Note-Taking (code)
© www.role-project.eu
ROLE APIsHow to make widgets manage Linked Data resources – The OpenApp API
© www.role-project.eu
ROLE APIs
OpenApp – Concept
API for Linked Data-style resource management Everything is a Resource
URI Representation Metadata Data
Resources can have sub-resources Access to sub-resources filtered by type or relation to parent
Special Resources Space is topmost resource in a space (shared) User is topmost personal resource (protected)
OpenApp – Client API
Get current space & user as resources
Get resource information (JSON object with key/value pairs)
var space = new openapp.oo.Resource(openapp.param.space());
space.getInfo(function(info) {alert(info);
});
openapp.oo.Resource create del getSubResources refresh
getInfo setInfo getMetadata setMetadata getRepresentation setRepresentation
var user = new openapp.oo.Resource(openapp.param.user());
OpenApp – Client API (Code Samples continued)
Create data sub-resource under space
Get space resource metadata
Find sub-resources via relation and type
space.create({relation: openapp.ns.role + "data", type: "my:data:namespace:uri", metadata: meta, callback: function(sub){
//do something with new sub-resource}
});
space.getSubResources({relation: openapp.ns.role + "data", type: "my:data:namespace:uri", onAll: function(arr) { //alternatively use onEach
//Do something with array of found subresources
}});
OpenApp – Browsing Resources with the Index Page
For any resource open index page with <RESOURCE_URI>/:index
CfP – ROLE Widget Enchantment Competition
© www.role-project.eu
Visit the ROLE project pagerole-project.eu
Download the ROLE SDK sourceforge.net/projects/role-project
Try the ROLE Sandboxrole-sandbox.eu
Enter the ROLE Widget Competitionrole-project.eu/WidgetCompetition
Join ROLE on LinkedInlinkedin.com/groups?gid=1590487
Share your widgets in the ROLE Widget Storerole-widgetstore.eu/
© www.role-project.eu