Apache DeviceMap - Web-Dev-BBQ Stuttgart

37
Apache DeviceMap Lasst uns Mobile Inhalte gemeinsam optimieren Werner Keil @wernerkeil | [email protected] @DeviceMap

Transcript of Apache DeviceMap - Web-Dev-BBQ Stuttgart

Page 1: Apache DeviceMap - Web-Dev-BBQ Stuttgart

Apache DeviceMap

Lasst uns Mobile Inhalte gemeinsam optimieren

Werner Keil@wernerkeil | [email protected]

@DeviceMap

Page 2: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Einleitung

Geschichte

Projektvergleiche

Grundlagen

Anwendungsbeispiele

Benchmarks

Demos

Zusammenfassung

Links

Agenda

2

Page 3: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Einleitung

Consultant – Coach Creative Cosmopolitan Open Source Evangelist Software Architect JCP EC Member UOMo Project Lead JSR 363 Co Spec Lead DevOps Guy …

Email [email protected]

Twitter @wernerkeilWas bin ich?Werner Keil

3

Page 4: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Einleitung

Das Wachstum an Geräten, die den Markt überschwemmen schreitet beinahe täglich voran.

Von Mobiltelefonen, Tablets über Smart TV bis zum Auto oder gar zur Smart Watch reichen vernetzte Geräte im IoT Zeitalter.

Lasst uns Mobile Inhalte gemeinsam optimierenApache DeviceMap

4

Page 5: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Page 6: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Einleitung

Die Spezifikation jedes Einzelnen genau zu verfolgen ist ein Knochenjob. Diese Mühe kann reduziert werden, wenn zur Erkennung Informationen bereitstehen, die möglichst vieleAnwender/Entwickler selbst mit verwaltet können.

Wenn Sie ansprechende Benutzererlebnisse schaffen wollen, benötigen Sie dynamisch anpassbare Inhalte gemäß den Hardware-und Browser Spezifikationen des jeweiligen Geräts.

Apache DeviceMapLasst uns Mobile Inhalte gemeinsam optimieren

6

Page 7: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Einleitung

DDR

7

Page 8: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Einleitung

DDR

8

Page 9: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Einleitung

DDR

9

Page 10: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Einleitung

DDR

10

Page 11: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Es hilft, wenn zur Erkennung ein Device Description Repository – kurz DDR beigezogen wirdDevice Description Repository (DDR) ist eine Datenbank, die große Mengen an Information über Mobiltelefone, Tablets, Interactive TV, Set-Top-Boxen und jedes Gerät mit einem Web-Browser speichert. DDR ermöglichen es Entwicklern, Anwendungen mit angemessenem Benutzererlebnis für jeden Client zu realisieren.

Apache DeviceMap ist das derzeit beste Open Source Repository zur Geräteerkennung für die Nutzung mit Java (und anderen) APIs,das den W3C Standard DDR Simple API implementiert.

Einleitung

DDR

11

Page 12: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Titolo presentazione - data

Geschichte

12

Page 13: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Titolo presentazione - data

Geschichte

13

Page 14: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Geschichte

14

Page 15: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Geschichte

Ende 2011 wurde ein paar Monate nach dem Start von OpenDDR auch die Apache Foundation auf das Thema aufmerksam. Und beschloss, ein Device Repository sowie APIs für die wichtigsten Plattformen und Sprachen zu schaffen.

OpenDDR gehörte zu den Gründungsmitgliedern des DeviceMap Inkubators und stellte wesentliche Grundlagen des Client Code (Java, .NET) sowie DDR Ressource Daten und damit verbundenen Quellcode als Initial Contribution zur Verfügung.

Ursprüngliches Proposal im Apache Wiki: http://wiki.apache.org/incubator/DeviceMapProposal

15

Page 16: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Es gibt einige DDR oder DDR-artige Projekte, aber:die meisten davon erheben Lizenzen oder eine Gebühr für „ihre“ Datenbanken und APIs

ODER

Gewähren Zugriff auf diese Informationen kostenlos nur für die Entwicklung von nicht-kommerzielle Anwendungen

Einer der wenigen Auswege aus diesem Dilemma:Das Apache DeviceMap Projekt

Projektvergleiche

16

Page 17: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Titolo presentazione - data

Projekt Stärken Schwächen LizenzMaDDR Projekt Kompatibel zu W3C

StandardDevice Repository funktioniert nur mit kommerziellem mobileAware DDR (APIs beinhalten einfaches Beispiel DDR) Das maDDR Projekt bietet keine adaptive Technologie für optimierte Geräteerkennung

Repository: Nur kommerzielle LizenzAPI: Kommerzielle Lizenz oder Simple DDR API mit LGPL Lizenz

DeviceAtlas Daten werden von verschiedenen , führenden Partnern aus der Industrie geliefert

Nur kommerzielle Lizenz Repository: Kommerzielle LizenzAPI: Kommerzielle Lizenz

Volantis Relativ breite Geräteabdeckung

Nur kommerzielle Lizenz Repository: Kommerzielle LizenzAPI: Kommerzielle Lizenz

WURFL Ehemals Community Projekt (bis Aug 2011)

Die Lizenz erlaubt keine Nutzung des Repositories ohne das kommerzielle APIDie API erlaubt keine Nutzung in Projekten mit eigener Lizenz!

Repository: Nutzung ohne WURFL API unzulässigAPI: Kommerzielle Lizenz, „Alibi“ AGPL, kommerzielle Nutzung unzulässig

51Degrees.mobi Vorhersehbare Produktpalette, .NET Unterstützung

Eingeschränkter Umfang und Nutzungsmöglichkeit freier Daten

Repository: MPL oder Kommerziell („Pro Edition“)API: Mozilla Public Lizenz

Projektvergleiche

17

Page 18: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Grundlagen

DeviceMap basiert auf Offenen Standards: Repository ist kompatibel zum W3C DDR StandardClient Bibliothek implementiert W3C DDR Simple APIs

Aus Entwicklersicht:Erlaubt es Anwendungen im Vertrauen darauf zu entwickeln, dass

diese kompatibel zu anderen W3C DDR Simple API Implementationen sind, also man sich nicht fix an jene von DeviceMap binden muss.

Adaptiert W3C Standard, demnach sind Schnittstellen definiert und geschützt durch W3C sowie Apache Foundation gegen IP oder Patentansprüche.

DeviceMap unterliegt der Apache License 2.0. APIs und Daten sind in freier oder kommerzieller Software nutzbar.

18

Page 19: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Grundlagen

Anwender können bzw. müssen Betriebssysteme ihrer Geräten aktualisieren (auch eigene Builds) und / oder einen neuen Web-Browser installieren. Die Identifizierung eines Gerätes durchden ursprünglichen User Agent, der von Herstellern bereitgestellt wird, ist oft nicht mehr ausreichend. DeviceMap betrachtet das Gerät als ein Kombination dreier wichtiger Aspekte: Physical DeviceOperating SystemWeb Browser

19

Page 20: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Grundlagen

DeviceMap kann spezielle Versionen ihres Betriebssystems und Webbrowser von Drittherstellern erkennen. Falls die Version eines bestimmten Browsers oder ein Betriebssystem nicht genau bekannt ist, liefert DeviceMap die Information der nächst gelegenen Version, statt gar keiner.

DeviceMap erkennt ein Gerät, einen Browser oder ein Betriebssystem mit einem gewissen Vertrauensgrad. Sie können dessen gewünschte Präzision beim Erkennungsprozess selbst bestimmen. Größerer Vertrauensgrad kann längere Erkennungszeiten bewirken; während geringerer Vertrauensgrad die Erkennung beschleunigt, dabei aber das Risiko weniger präziser Erkennung birgt.

DeviceMap erlaubt auch das Patchen der Datenquelle.

20

Page 21: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Titolo presentazione - data

MetroFür .NET

Grundlagen

C#VB.NET

21

Page 22: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

DeviceMap implementiert die W3C Simple API Schnittstelle. Es unterstützt dasBasisvokabular, das im DDR W3C Recommendation Dokument festgelegt wurde.

Um DeviceMap Simple API zu nutzen, müssen Sie lediglich Werte einer derartigen Property Datei anpassen:oddr.ua.device.builder.path=PATH_TO_FILE/BuidlerDataSource.xmloddr.ua.device.datasource.path=PATH_TO_FILE/DeviceDataSource.xmloddr.ua.device.builder.patch.paths=PATH_TO_FILE/BuilderDataSourcePatch.xmloddr.ua.device.datasource.patch.paths=PATH_TO_FILE/DeviceDataSourcePatch.xmloddr.ua.browser.datasource.path=PATH_TO_FILE/BrowserDataSource.xmlddr.vocabulary.core.path=PATH_TO_FILE/coreVocabulary.xmloddr.vocabulary.path=PATH_TO_FILE/oddrVocabulary.xmloddr.limited.vocabulary.path=PATH_TO_FILE/oddrLimitedVocabulary.xmloddr.vocabulary.device=http://www.DeviceMap.org/oddr-vocabularyoddr.threshold=70

Die oddr.threshold Eigenschaft erlaubt dem Entwickler, den gewünschten Vertrauensgrad festzulegen. In diesem Fall wählten wir einen Vertrauensgrad von zumindest 70%.

W3C DDR Simple

22

Page 23: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

W3C DDR Simple (2)

Zur Erstellung eines Identification Service nutzen wir die ServiceFactory der W3C DDR-Simple-API.jarService identificationService = ServiceFactory.newService("org.apache.devicemap.simpleapi.ODDRService", ODDR_VOCABULARY_IRI, initializationProperties);

Das erste Argument ist die implementierende Klasse des DDRService; das zweite Argument ist das Standardvokabular zur Identifikation, falls kein Vokabular explizit angegeben wurde; das dritte Argument ist die DeviceMap Properties Datei.Hier ein kurzes Beispiel um “displayWidth”, “model” und “vendor” Eigenschaften aus dem Standardvokabular zu erhalten. PropertyRef displayWidthRef; PropertyRef vendorRef; PropertyRef modelRef; try { displayWidthRef = identificationService.newPropertyRef("displayWidth"); vendorRef = identificationService.newPropertyRef("vendor"); modelRef = identificationService.newPropertyRef("model"); } catch (NameException ex) { throw new RuntimeException(ex); } […]

23

Page 24: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Java Classifier (aka Java client)

24

While departing from W3C compliance a new Java client offersmore flexibility e.g. when it comes to ways of loading device data.

Data can be loaded via: • URL• JAR file• File system

Get client using data from a URL DeviceMapClient client = DeviceMapFactory.getClient(LoaderOption.URL, "http://devicemap-vm.apache.org/data/latest");

Page 25: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Java Classifier (2)

25

Get the client using JAR data sourceDeviceMapClient client = DeviceMapFactory.getClient(LoaderOption.JAR);

Get client using data from file systemDeviceMapClient client = DeviceMapFactory.getClient(LoaderOption.FOLDER,"/some/path/devicemap/latest/devicedata");

The last option is closest to the W3C DDR Simple client.

Page 26: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

HTML 5 Unterstützung

26

Basierend auf Betriebssystem, Gerätefamilie oderkonkretem Gerät können Mobile Webanwendungenentscheiden, ob HTML 5 nutzbar ist oder nicht:

if (<Supports HTML5>) { // Browser supports native HTML5 canvas.} else { // Fallback to another solution, such as Flash, static image, download link,…}

Page 27: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

HTML 5 Unterstützung – Canvas

27

Dieses GWT Beispiel zeigt wie man einen geräte-spezifischen HTML5 Canvas darstellen kann:private void createCanvas(){  PropertyRef widthRef = service.newPropertyRef("displayWidth"); PropertyRef heightRef = service.newPropertyRef("displayHeight"); PropertyRef[] refs = new PropertyRef[] {widthRef, heightRef}; Evidence evidence = new ODDRHTTPEvidence(); PropertyValues values = service.getPropertyValues(evidence, refs); PropertyValue width = values.getValue(widthRef); PropertyValue height = values.getValue(heightRef);  canvas.setWidth(width + "px");  canvas.setHeight(height + "px");  canvas.setCoordinateSpaceWidth(width.getInteger());  canvas.setCoordinateSpaceHeight(height.getInteger());        RootPanel.get(canvasHolderId).add(canvas);[…]}

Page 28: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Profiling für WURFL

Benchmarks

28

Page 29: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Profiling für unreduced DeviceMap

Benchmarks

29

Page 30: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Profiling für reduced DeviceMap

Benchmarks

30

Page 31: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Benchmarks

Wir wählten für den Test das limitierte W3C core vocabulary

Der Speicherbedarf von DeviceMap mit limited vocabulary ist lediglich 50MB und nach einer initialen Startphase hat DeviceMap keinen erhöhten Speicherbedarf mehr.

Beide APIs konnten alle User Agents aus den HTTP requestskorrekt erkennen.

31

Page 32: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Titolo presentazione - data

Demo

32

Page 33: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Demo

DeviceMap Servlet Beispiel auf Apache VM:http://devicemap-vm.apache.org/dmap-servlet

DeviceMap Spring Beispiel auf Apache VM :http://devicemap-vm.apache.org/dmap-spring

33

Page 34: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Zusammenfassung

Offen, Frei und basierend auf W3C Standards.Unter der Apache Lizenz.Aktualisierung des DDR erfolgt durch Mitglieder der

Gemeinschaft oder GeräteherstellerDie Erkennung erfolgt nicht nur für das Gerät als Einzelnes,

sondern in Erweiterter Form zusammen mit Webbrowser und Betriebssystem. DeviceMap kann darüber hinaus Browser von Drittherstellern und speziell angepasste Versionen von Betriebssystemen erkennen → Embedded/Automotive,…

Entwickler können das Vokabular zur Erkennung angeben, sowie Aspekte und Eigenschaften, die sie darin nutzen wollen.

34

Page 35: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Zusammenfassung

Basierend auf identification threshold. Falls eine bestimmte Version des Browsers oder Geräts nicht gefunden wird, liefert DeviceMap die Eigenschaften der nächst gelegenen Version, so lange diese Annahme die vom Entwickler gewünschte Genauigkeit erfüllt.

Entwickler können entscheiden, welche und wie viele Eigenschaften sie benötigen, und so ein limitiertes Vokabular nutzen → Keine Speicherverschwendung.

Patch Unterstützung: Falls eine geänderte oder neuere Version des Repositories erforderlich ist, kann diese Änderung einfach durch Anpassung der entsprechenden Eigenschaften vorgenommen werden. Und neues Repository und Vokabular werden genutzt.

35

Page 36: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Links

DeviceMap Site:http://devicemap.apache.org

DeviceMap Quellcode und Ressourcen:http://devicemap.apache.org/source.html

Mailing Listen:http://devicemap.apache.org/mailing-lists.html

BrowserMap GitHub Mirror:https://github.com/apache/devicemap-browsermap

36

Email [email protected] @wernerkeil | @DeviceMap

Page 37: Apache DeviceMap - Web-Dev-BBQ Stuttgart

#WebDevBBQ

Links (2)

Apache Sling DeviceMap Demo auf GitHub:https://github.com/raducotescu/devicemap-demo

Wikimedia LogCapturehttps://github.com/wikimedia/mediawiki-extensions-DeviceMapLogCapture

DDR Compare auf GitHub:https://github.com/keilw/ddr-compare

Ruby Client für DeviceMaphttps://github.com/soylent/device_map

Clojure Wrapper für DeviceMap Clienthttps://github.com/timgalebach/clj-devicemap

37