SlideShare ist ein Scribd-Unternehmen logo
1 von 17
At the
16th International Conference on Human-Computer Interaction
2014 Crete, Greece
Implementers’ hackathon
A Implementer's Story
Steve Lee
OpenDirective Ltd.
Maavis
• Simple access to media and communications
• Research tech for people living with dementia
• People with cognitive disabilities
• People with low digital literacy
2
Demo
• Standalone
• With GPII
3
What we did
• Understand architecture
• Figure how to integrate
• Install and test GPII
• Create a few declarative docs
• Create a new settings handler
4
Effort
A User Profile
{
"display": {
"screenEnhancement": {
"applications": {
"net.opendirective.maavis": {
"name": "maavis",
"priority": 100,
"parameters": {
"theme": "bw"
}
}
}
}
}
}
Solution life cycle (dev version)
• User Logs in (simulates listener)
• Retrieve user settings
– Set Maavis settings
– Launch Maavis
• User logs out (simulates listener)
– Restore Maavis settings
– Exit Maavis
Solution
{
"name": "maavis",
"id": "net.opendirective.maavis",
"contexts": {
"OS": [
{
"id": "win32",
"version": ">=5.0"
}
]
},
"settingsHandlers": [
{
"type": "gpii.settingsHandlers.noSettings",
"capabilities": [
"display.screenEnhancement.applications.net.opendirective.maavis.name"
]
}
] }
}
+ Common Terms
Maavis Settings
{"userType":"touch",
"theme":“colour",
"speakTitles":"yes",
"speakLabels":"no",
"showLabels":"yes",
"showImages":"yes",
"useSkype":"no",
"scanMode":"AUTO1SWITCHAUTOSTART",
"scanRate":"2500",
"selectionsSetSize":"2x3",
"language": "en"}
10
Settings Handler
gpii.settingsHandlers.JSONSettingsHandler.set = function(profile) {
var app = fluid.copy(profile);
for (var appId in app) {
for (var j = 0; j < app[appId].length; j++) {
// load the default settings used by MAAVIS
var path = app[appId][j].options.path;
var defaultSettings = require(path);
// record differences between required and default settings
// so that they default settings can be restored
var requiredSettings = app[appId][j].settings;
var changedSettings = fluid.copy(requiredSettings);
for (var settingKey in requiredSettings) {
var oldValue = defaultSettings[settingKey];
var newValue = requiredSettings[settingKey];
changedSettings[settingKey] = {
"oldValue": oldValue,
"newValue": newValue
};
}
app[appId][j].settings = changedSettings;
// merge the required settings and default settings
// this means required settings overwrite default settings
fluid.merge(null, defaultSettings, requiredSettings);
// Write the new settings to a file for MAAVIS to read
fs.writeFileSync(path, JSON.stringify(defaultSettings));
}
Lifecycle manager
"lifecycleManager": {
"start": [
"setSettings",
{
"type": "gpii.launch.exec",
"command": "${{environment}.ComSpec} /c "cd ${{environment}.MAAVIS_HOME} &&
MaavisPortable.cmd""
}
],
"stop": [
{
"type": "gpii.launch.exec",
"command": "${{environment}.SystemRoot}System32taskkill.exe /f /im firefox.exe"
},
"restoreSettings"
]
}
Common Terms mapping
In solution registry entry
• HighContrast -> "theme"
• Speech -> "speakTitles“ + "speakLabels"
13
In summary
Easily done and low impact
• Modified Maavis installer so GPII can find it
• Entry in the Solution Registry
• New JSON Settings handler
• Configure Lifecycle Manager
• Test Profiles
Challenges
• Early adopter – high churn
– A: Engage with the architecture team!
• Lack of documentation
– A: Get architecture team to do the work for you!
15
Contribution
• Reduce your maintenance costs
• Best way to learn
• Open Source skills
• Fun
16
Further Developments
• Dynamic reading of settings
– eg for context awareness
• Prosperity4All + low digital literacy
– Framework and Components
• Porting to HTML components
– Move to browser context
Thank You
This research was funded by the European Union's Seventh Framework Programme (FP7/2007-
2013) grant agreement 289016 (Cloud4all)
18

Weitere ähnliche Inhalte

Was ist angesagt?

Api docs v4.0
Api docs v4.0Api docs v4.0
Api docs v4.0
Anh Tuan
 
Short intro to JQuery and Modernizr
Short intro to JQuery and ModernizrShort intro to JQuery and Modernizr
Short intro to JQuery and Modernizr
Jussi Pohjolainen
 

Was ist angesagt? (18)

[AzureCamp 24 Juin 2014] Cache Distribué par Thomas Conté
[AzureCamp 24 Juin 2014] Cache Distribué par Thomas Conté[AzureCamp 24 Juin 2014] Cache Distribué par Thomas Conté
[AzureCamp 24 Juin 2014] Cache Distribué par Thomas Conté
 
HTML5 DRAG AND DROP
HTML5 DRAG AND DROPHTML5 DRAG AND DROP
HTML5 DRAG AND DROP
 
Api docs v4.0
Api docs v4.0Api docs v4.0
Api docs v4.0
 
Html5 For Jjugccc2009fall
Html5 For Jjugccc2009fallHtml5 For Jjugccc2009fall
Html5 For Jjugccc2009fall
 
Azure Web Camp : Cache Distribué
Azure Web Camp : Cache DistribuéAzure Web Camp : Cache Distribué
Azure Web Camp : Cache Distribué
 
Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)
Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)
Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)
 
Upgrade your javascript to drupal 8
Upgrade your javascript to drupal 8Upgrade your javascript to drupal 8
Upgrade your javascript to drupal 8
 
Short intro to JQuery and Modernizr
Short intro to JQuery and ModernizrShort intro to JQuery and Modernizr
Short intro to JQuery and Modernizr
 
Dicoding Developer Coaching #27: Android | Membuat Aplikasi Support Online Ma...
Dicoding Developer Coaching #27: Android | Membuat Aplikasi Support Online Ma...Dicoding Developer Coaching #27: Android | Membuat Aplikasi Support Online Ma...
Dicoding Developer Coaching #27: Android | Membuat Aplikasi Support Online Ma...
 
JQuery
JQueryJQuery
JQuery
 
Opencast Admin UI - Introduction to developing using AngularJS
Opencast Admin UI - Introduction to developing using AngularJSOpencast Admin UI - Introduction to developing using AngularJS
Opencast Admin UI - Introduction to developing using AngularJS
 
Drupal.js: Best Practices for Managing Javascript in Drupal
Drupal.js: Best Practices for Managing Javascript in DrupalDrupal.js: Best Practices for Managing Javascript in Drupal
Drupal.js: Best Practices for Managing Javascript in Drupal
 
20141002 delapsley-socalangularjs-final
20141002 delapsley-socalangularjs-final20141002 delapsley-socalangularjs-final
20141002 delapsley-socalangularjs-final
 
[NodeConf.eu 2014] Scaling AB Testing on Netflix.com with Node.js
[NodeConf.eu 2014] Scaling AB Testing on Netflix.com with Node.js[NodeConf.eu 2014] Scaling AB Testing on Netflix.com with Node.js
[NodeConf.eu 2014] Scaling AB Testing on Netflix.com with Node.js
 
Drupal as a web framework
Drupal as a web frameworkDrupal as a web framework
Drupal as a web framework
 
NoSQL meets Microservices - Michael Hackstein
NoSQL meets Microservices - Michael HacksteinNoSQL meets Microservices - Michael Hackstein
NoSQL meets Microservices - Michael Hackstein
 
Kharkivpy#3: Javascript and Python backend
Kharkivpy#3: Javascript and Python backendKharkivpy#3: Javascript and Python backend
Kharkivpy#3: Javascript and Python backend
 
AngularJS Compile Process
AngularJS Compile ProcessAngularJS Compile Process
AngularJS Compile Process
 

Ähnlich wie A Implementer's Story - Integrating Maavis with the GPII

Big Data for each one of us
Big Data for each one of usBig Data for each one of us
Big Data for each one of us
OSCON Byrum
 

Ähnlich wie A Implementer's Story - Integrating Maavis with the GPII (20)

A Groovy Kind of Java (San Francisco Java User Group)
A Groovy Kind of Java (San Francisco Java User Group)A Groovy Kind of Java (San Francisco Java User Group)
A Groovy Kind of Java (San Francisco Java User Group)
 
Building a Dev/Test Cloud with Apache CloudStack
Building a Dev/Test Cloud with Apache CloudStackBuilding a Dev/Test Cloud with Apache CloudStack
Building a Dev/Test Cloud with Apache CloudStack
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
 
Building a Dev/Test Cloud with Apache CloudStack
Building a Dev/Test Cloud with Apache CloudStackBuilding a Dev/Test Cloud with Apache CloudStack
Building a Dev/Test Cloud with Apache CloudStack
 
Running Vue Storefront in production (PWA Magento webshop)
Running Vue Storefront in production (PWA Magento webshop)Running Vue Storefront in production (PWA Magento webshop)
Running Vue Storefront in production (PWA Magento webshop)
 
Infrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and OpsInfrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and Ops
 
AngularJS and SPA
AngularJS and SPAAngularJS and SPA
AngularJS and SPA
 
Big Data for each one of us
Big Data for each one of usBig Data for each one of us
Big Data for each one of us
 
Config/BuildConfig
Config/BuildConfigConfig/BuildConfig
Config/BuildConfig
 
Config BuildConfig
Config BuildConfigConfig BuildConfig
Config BuildConfig
 
Spring and Cloud Foundry; a Marriage Made in Heaven
Spring and Cloud Foundry; a Marriage Made in HeavenSpring and Cloud Foundry; a Marriage Made in Heaven
Spring and Cloud Foundry; a Marriage Made in Heaven
 
Quick and Easy Development with Node.js and Couchbase Server
Quick and Easy Development with Node.js and Couchbase ServerQuick and Easy Development with Node.js and Couchbase Server
Quick and Easy Development with Node.js and Couchbase Server
 
Zero to Sixty: AWS CloudFormation (DMG201) | AWS re:Invent 2013
Zero to Sixty: AWS CloudFormation (DMG201) | AWS re:Invent 2013Zero to Sixty: AWS CloudFormation (DMG201) | AWS re:Invent 2013
Zero to Sixty: AWS CloudFormation (DMG201) | AWS re:Invent 2013
 
Pyramid patterns
Pyramid patternsPyramid patterns
Pyramid patterns
 
Vaadin 7
Vaadin 7Vaadin 7
Vaadin 7
 
Document Validation in MongoDB 3.2
Document Validation in MongoDB 3.2Document Validation in MongoDB 3.2
Document Validation in MongoDB 3.2
 
Introduction to Palm's Mojo SDK
Introduction to Palm's Mojo SDKIntroduction to Palm's Mojo SDK
Introduction to Palm's Mojo SDK
 
SOLID Principles
SOLID PrinciplesSOLID Principles
SOLID Principles
 
Config BuildConfig
Config BuildConfigConfig BuildConfig
Config BuildConfig
 
Puppet and Apache CloudStack
Puppet and Apache CloudStackPuppet and Apache CloudStack
Puppet and Apache CloudStack
 

Kürzlich hochgeladen

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Kürzlich hochgeladen (20)

TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 

A Implementer's Story - Integrating Maavis with the GPII

  • 1. At the 16th International Conference on Human-Computer Interaction 2014 Crete, Greece Implementers’ hackathon A Implementer's Story Steve Lee OpenDirective Ltd.
  • 2. Maavis • Simple access to media and communications • Research tech for people living with dementia • People with cognitive disabilities • People with low digital literacy 2
  • 4. What we did • Understand architecture • Figure how to integrate • Install and test GPII • Create a few declarative docs • Create a new settings handler 4
  • 6. A User Profile { "display": { "screenEnhancement": { "applications": { "net.opendirective.maavis": { "name": "maavis", "priority": 100, "parameters": { "theme": "bw" } } } } } }
  • 7. Solution life cycle (dev version) • User Logs in (simulates listener) • Retrieve user settings – Set Maavis settings – Launch Maavis • User logs out (simulates listener) – Restore Maavis settings – Exit Maavis
  • 8. Solution { "name": "maavis", "id": "net.opendirective.maavis", "contexts": { "OS": [ { "id": "win32", "version": ">=5.0" } ] }, "settingsHandlers": [ { "type": "gpii.settingsHandlers.noSettings", "capabilities": [ "display.screenEnhancement.applications.net.opendirective.maavis.name" ] } ] } } + Common Terms
  • 10. Settings Handler gpii.settingsHandlers.JSONSettingsHandler.set = function(profile) { var app = fluid.copy(profile); for (var appId in app) { for (var j = 0; j < app[appId].length; j++) { // load the default settings used by MAAVIS var path = app[appId][j].options.path; var defaultSettings = require(path); // record differences between required and default settings // so that they default settings can be restored var requiredSettings = app[appId][j].settings; var changedSettings = fluid.copy(requiredSettings); for (var settingKey in requiredSettings) { var oldValue = defaultSettings[settingKey]; var newValue = requiredSettings[settingKey]; changedSettings[settingKey] = { "oldValue": oldValue, "newValue": newValue }; } app[appId][j].settings = changedSettings; // merge the required settings and default settings // this means required settings overwrite default settings fluid.merge(null, defaultSettings, requiredSettings); // Write the new settings to a file for MAAVIS to read fs.writeFileSync(path, JSON.stringify(defaultSettings)); }
  • 11. Lifecycle manager "lifecycleManager": { "start": [ "setSettings", { "type": "gpii.launch.exec", "command": "${{environment}.ComSpec} /c "cd ${{environment}.MAAVIS_HOME} && MaavisPortable.cmd"" } ], "stop": [ { "type": "gpii.launch.exec", "command": "${{environment}.SystemRoot}System32taskkill.exe /f /im firefox.exe" }, "restoreSettings" ] }
  • 12. Common Terms mapping In solution registry entry • HighContrast -> "theme" • Speech -> "speakTitles“ + "speakLabels" 13
  • 13. In summary Easily done and low impact • Modified Maavis installer so GPII can find it • Entry in the Solution Registry • New JSON Settings handler • Configure Lifecycle Manager • Test Profiles
  • 14. Challenges • Early adopter – high churn – A: Engage with the architecture team! • Lack of documentation – A: Get architecture team to do the work for you! 15
  • 15. Contribution • Reduce your maintenance costs • Best way to learn • Open Source skills • Fun 16
  • 16. Further Developments • Dynamic reading of settings – eg for context awareness • Prosperity4All + low digital literacy – Framework and Components • Porting to HTML components – Move to browser context
  • 17. Thank You This research was funded by the European Union's Seventh Framework Programme (FP7/2007- 2013) grant agreement 289016 (Cloud4all) 18

Hinweis der Redaktion

  1. Standard handlers support simple config documents
  2. Wizard
  3. Maavis - Ultra simple UI HTML Wookie Templates allow maximum deployment flexibility
  4. Maavis - Ultra simple UI HTML Wookie Templates allow maximum deployment flexibility