Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase...

24
Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Programming mit Go Go Go Gadget

Transcript of Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase...

Page 1: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Catchphrase

29.09.2017, JUG Saxony Day

Cross Mobile Platform Programming mit Go

Go Go Gadget

Page 2: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Übersicht

Worüber wir reden werden:

Page 3: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Was machen wir so?

Unsere Kunden: Industrieunternehmen, die ihre Prozesse visualisieren wollen

Page 4: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Was machen wir so?

Unser Produkt: eine Suite um einfach solche Visualisierungen zu erzeugen

fertige App für Android, iOS, ...User definiert Verhalten und Interface

Codegenerierung

Page 5: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Was machen wir so?

Unser Team:

● 5 Vollzeit Entwickler + 4 Teilzeitkräfte

Unsere Architektur:

● modellgetriebener Ansatz -> Kunde beschreibt Businesslogik und User Interface● Codegeneratoren setzen Modell in konkrete App um● App besteht aus plattformabhängigen generiertem Code und statischen Code (Baselibs)● Baselibs für iOS und Android vorhanden

Page 6: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Welche Probleme haben wir?

Ausgangslage :

Model + DB +EventBus

UI Component 1 UI Component N

Connector 1

Connector N

Model + DB +EventBus

UI Component 1 UI Component N

Connector 1

Connector N

Page 7: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Was erwarten wir von einer Lösung?Einmal schreiben, überall verwenden

gute Performance einfach zu verwendenschnell zu lernen

ermöglicht inkrementellesersetzen alten Codes

läuft auf allenPlattformen

ermöglicht Ersetzen desgroßer Teile des alten Codes

gut zu debuggen und zu testen

viele vorhandene Bibliotheken

Page 8: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Nutzung von App-Frameworks:

● Xamarin von Microsoft○ C#

● Multi-OS Engine von Intel○ Java

● Ausschlusskriterien:○ Ganze App muss in der Sprache entwickelt

sein

Erste-Lösungsansätze

Multi-OS Engine (Intel)

Page 9: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Erste Lösungsansätze

Generierende Lösungen:

● J2ObjC von Google○ Übersetzt○ Java zu Objective-C Code

● EMF○ Modellierung von Skripten + Eigene Generierung

● Ausschlusskriterien:○ Performance○ Implementierungsaufwand○ Mächtigkeit

J2ObjC (Google)

Page 10: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Erste Lösungsansätze

Native Bibliotheken:

● C / C++, Rust, Go○ Kompilierung als native Bibliothek für

jeweilige Zielplattform

○ Anbindung über JNI (Android)

● Ausschlusskriterien:○ Sprachkomplexität

■ C++

○ Benutzbarkeit

Go (Google)

Page 11: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Go

Historisches:

● von Rob Pike, Robert Griesemer und Ken Thompson● 2007 als 20% Projekt bei Google begonnen● 2009 angekündigt● 2012 wurde Go 1.0 veröffentlicht● ...● 2017 wurde Go 1.9 veröffentlicht● Zukunft: Go 2.0

Page 12: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Go

Beliebtheit:

● Tiobe Index: 17 (1.567%) mit steigender Tendenz● Stack Overflow: 5. Platz Most loved Language, 3. Platz most wanted

...

Page 13: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Go

Merkmale:

● C-Ähnlich● 25 Keywörter

○ Java hat 53

● Garbage-Collected● Keine Vererbung (Komposition)● Integrierte Nebenläufigkeit● Duck Typing● Erzwungener Codestil

Page 14: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Go

Hello World:

Page 15: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Go

Duck Typing

Page 16: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Go

Nebenläufigkeit:

Page 17: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Welche Probleme haben wir?

Ausgangslage :

Model + DB +EventBus

UI Component 1 UI Component N

Connector 1

Connector N

Model + DB +EventBus

UI Component 1 UI Component N

Connector 1

Connector N

Page 18: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Lösungsarchitektur - App

UIComponent 1

JNIEventBus

UIComponent N

EventHandler

[ ]byte

Page 19: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Lösungsarchitektur - Go

Model-instance

(generated)

Connector 1[ ]byte

CGo Runtime

DB

Connector 2

User Code

Page 20: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Lösungsarchitektur

Nachrichtenformat:

● Übertragung von ○ Modelländerungen

■ Mapping Objekt + Attribut zu Topic

○ Methodenaufrufen○ Laufzeitevents

● Technische Details○ Nutzung von Flatbuffer

Page 21: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Erfahrungen

Vorher: Jetzt:

56 kLOC46 kLOC

40 kLOC30 kLOC

08 kLOC

BL + UI

BL + UI

BL

UI

UI

Page 22: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Erfahrungen

Pro:

● alle Teammitglieder können Businesslogik Code bearbeiten● neue Businesslogik-Features müssen nur einmal implementiert werden● Vereinfachung des nativen Teils● klarere Trennung zwischen Businesslogik und Views● einheitliches Verhalten der Plattformen

Contra:

● schwierigeres Debugging● komplexerer Buildprozess● schwieriger plattformspezifische APIs anzubinden

Page 23: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Fin

Danke für Ihre Aufmerksamkeit!

Page 24: Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase 29.09.2017, JUG Saxony Day Cross Mobile Platform Go Go Gadget Programming mit Go

Welche Probleme haben wir?

● kleine Firma -> Effizienz ist wichtig● pflegen von n Baselibs bedeutet n-fachen Aufwand

○ jede Funktionalität muss n-mal implementiert werden○ gleiches Verhalten auf allen Plattformen herstellen○ Bibliotheken auf verschiedenen Plattformen unterschiedlich implementiert (falls existent)○ höhere Chance auf Bugs da mehr Code○ eine neue Plattform hinzufügen ist sehr großer Aufwand○ Entwickler für manche Plattform zu finden kann schwierig sein○ bestimmte Bugs können nicht bearbeitet werden, wenn der entsprechende Entwickler

abwesend ist