07.12.2016 - KaffeeKlatsch

KaffeeKlatsch
Das Magazin rund um Software-Entwicklung
ISSN 1865-682X
11/2016
Jahrgang 9
KaffeeKlatsch
Das Magazin rund um Software-Entwicklung
Sie können die elektronische Form des KaffeeKlatschs
monatlich, kostenlos und unverbindlich
durch eine E-Mail an
[email protected]
abonnieren.
Ihre E-Mail-Adresse wird ausschließlich für den Versand
des KaffeeKlatschs verwendet.
Editorial
Retro ist in!
N
eulich bin ich auf der
Suche nach Weihnachtsgeschenken – so früh vor
Weihnachten eigentlich
völlig untypisch für mich
– erneut auf Nintendos
Classic Mini gestoßen.
Dieser kleine Kasten versetzte mich sofort wieder in die Vergangenheit, als man
mit dieser Art von Konsolenspielen aufwuchs bzw. das
erste Mal damit in Berührung kam. Eventuell kennen
Sie, liebe Leserinnen und Leser, auch (noch) dieses Gefühl: pixelige Grafiken und 8-Bit-Sounds. Da kann man
schon ins nostalgische Schwärmen geraten. Da die Konsole zurzeit ausverkauft und windige Drittanbieter Wucherpreise verlangen, komme ich zu dem Schluss: Retro
ist in! Möglicherweise ist dies ja auch für den einen oder
anderen Retro-Gamer eine nette Geschenkidee.
Falls das aber noch nicht retro genug ist, dem möchte ich den Künstler Love Hulten ans Herz legen. Dieser stellt u. a. auf Basis des Raspberry-Pi Retro-Gameboys her. Auf seiner Website www.lovehulten.com lassen
sich einige extravagante und schön designte Beispiele
betrachten. Vielleicht ist das auch für die Bastlerinnen
und Bastler unter Ihnen eine willkommene Anregung,
ein eigenes Projekt zu beginnen.
Kommen wir aber nun von der Vergangenheit wieder zur Gegenwart und den aktuellen Themen unserer
neuen Ausgabe. Zeeshan Ali befasst sich in seinem
Seite 3
Artikel „Von 0 auf 100 mit JaCoCo/EclEmma“ (Seite 6)
mit den Kernfunktionalitäten von EclEmma und JaCoCo in Eclipse. Dabei zeigt er, wie schnell ein Entwickler
einen Überblick zum Umfang seiner Unit und Integra­
tionstests bekommen kann und wie er dadurch die Qualität dieser Tests verbessert.
Abderrahmen Dhouibi stellt in seinem Beitrag
„Einführung in die Welt von Ceylon“ die Programmiersprache Ceylon vor (Seite 14). Anhand von Beispielen
zeigt er die potenziellen Vorteile dieser Sprache auf.
In „Reaktiv statt nur aktiv“ (Seite 17) setzt sich David Maier mit dem Thema Big Data auseinander und
erläutert, was sich sich hinter einem operativen BigData-System verbirgt und wie reaktive Programmierung mit Couchbase Server zusammenhängt. Dieser
Artikel ist zudem ein Ausblick auf das kommende JavaUser-Group-Treffen der Metropolregion Nürnberg am
15. Dezember, bei dem David Maier ausführlich auf
dieses Thema eingehen wird.
Darüber hinaus erreichte uns ein weiterer Leserbrief
(Seite 18) zum Thema „Das Geheimnis des Einhorn-Entwicklers“ von Tim Bourguignon, den wir Ihnen natürlich nicht vorenthalten möchten.
Und zum Abschluss haben wir auch wieder unser Kolumne „Das Allerletzte“ für Sie. Ich wünsche Ihnen nun
viel Spaß mit unserer Lektüre.
Ihr Oliver Klosa
Chefredakteur
KaffeeKlatsch Jahrgang 9 / Nr. 11 / November 2016
Beitragsinformation
Der KaffeeKlatsch dient Entwicklern, Architekten, Projektleitern und Entscheidern als Kommunikationsplattform. Er soll neben dem Know-how-Transfer von Technologien (insbesondere Java
und .NET) auch auf einfache Weise die Publikation von Projektund Erfahrungsberichten ermöglichen.
Beiträge
Um einen Beitrag im KaffeeKlatsch veröffentlichen zu können,
müssen Sie prüfen, ob Ihr Beitrag den folgenden Mindestanforderungen genügt:
•Ist das Thema von Interesse für Entwickler, Architekten, Projektleiter oder Entscheider, speziell wenn sich diese mit der Java- oder
.NET-Technologie beschäftigen?
•Ist der Artikel für diese Zielgruppe bei der Arbeit mit Java oder
.NET relevant oder hilfreich?
•Genügt die Arbeit den üblichen professionellen Standards für
Artikel in Bezug auf Sprache und Erscheinungsbild?
Wenn Sie uns einen solchen Artikel, um ihn in diesem Medium zu
veröffentlichen, zukommen lassen, dann übertragen Sie Bookware
unwiderruflich das nicht exklusive, weltweit geltende Recht
•diesen Artikel bei Annahme durch die Redaktion im KaffeeKlatsch zu veröffentlichen
•diesen Artikel nach Belieben in elektronischer oder gedruckter
Form zu verbreiten
•diesen Artikel in der Bookware-Bibliothek zu veröffentlichen
•den Nutzern zu erlauben diesen Artikel für nicht-kommerzielle
Zwecke, insbesondere für Weiterbildung und Forschung, zu kopieren und zu verteilen.
Wir möchten deshalb keine Artikel veröffentlichen, die bereits in
anderen Print- oder Online-Medien veröffentlicht worden sind.
Selbstverständlich bleibt das Copyright auch bei Ihnen und
Bookware wird jede Anfrage für eine kommerzielle Nutzung direkt
an Sie weiterleiten.
Die Beiträge sollten in elektronischer Form via E-Mail an
[email protected] geschickt werden.
Auf Wunsch stellen wir dem Autor seinen Artikel als unveränderlichen PDF-Nachdruck in der kanonischen KaffeeKlatschForm zur Verfügung, für den er ein unwiderrufliches, nicht-exklusives Nutzungsrecht erhält.
Leserbriefe
Leserbriefe werden nur dann akzeptiert, wenn sie mit vollständigem
Namen, Anschrift und E-Mail-Adresse versehen sind. Die Redaktion behält sich vor, Leserbriefe – auch gekürzt – zu veröffent­lichen,
wenn dem nicht explizit widersprochen wurde.
Sobald ein Leserbrief (oder auch Artikel) als direkte Kritik zu
einem bereits veröffentlichten Beitrag aufgefasst werden kann, behält sich die Redaktion vor, die Veröffentlichung jener Beiträge zu
verzögern, so dass der Kritisierte die Möglichkeit hat, auf die Kritik
in der selben Ausgabe zu reagieren.
Leserbriefe schicken Sie bitte an [email protected]. Für
Fragen und Wünsche zu Nachdrucken, Kopien von Berichten oder
Referenzen wenden Sie sich bitte direkt an die Autoren.
Seite 4
Werbung ist Information
Firmen haben die Möglichkeit Werbung im KaffeeKlatsch unterzubringen. Der Werbeteil ist in drei Teile gegliedert:
•Stellenanzeigen
•Seminaranzeigen
•Produktinformation und -werbung
Die Werbeflächen werden als Vielfaches von Sechsteln und Vierteln einer DIN-A4-Seite zur Verfügung gestellt.
Der Werbeplatz kann bei Herrn Oliver Klosa via E-Mail
an [email protected] oder telefonisch unter 09131/8903-0
gebucht werden.
Abonnement
Der KaffeeKlatsch erscheint zur Zeit monatlich. Die jeweils aktuelle Version wird nur via E-Mail als PDF-Dokument versandt.
Sie können den KaffeeKlatsch via E-Mail an abo@book­ware.de
oder über das Internet unter www.bookware.de/abo bestellen.
Selbstverständlich können Sie das Abo jederzeit und ohne Angabe
von Gründen sowohl via E-Mail als auch übers Internet kündigen.
Ältere Versionen können einfach über das Internet als Download unter www.bookware.de/archiv bezogen werden.
Auf Wunsch schicken wir Ihnen auch ein gedrucktes Exemplar. Da es sich dabei um einzelne Exemplare handelt, erkundigen Sie sich bitte wegen der Preise und Versandkosten bei
Oliver Klosa via E-Mail unter [email protected] oder
telefonisch unter 09131/8903-0.
Copyright
Das Copyright des KaffeeKlatsch liegt vollständig bei der
Bookware. Wir gestatten die Übernahme des KaffeeKlatsch
in Datenbestände, wenn sie ausschließlich privaten Zwecken dienen. Das auszugsweise Kopieren und Archivieren zu gewerblichen
Zwecken ohne unsere schriftliche Genehmigung ist nicht gestattet.
Sie dürfen jedoch die unveränderte PDF-Datei gelegentlich
und unentgeltlich zu Bildungs- und Forschungszwecken an Interessenten verschicken. Sollten diese allerdings ein dauerhaftes Interesse am KaffeeKlatsch haben, so möchten wir diese herzlich
dazu einladen, das Magazin direkt von uns zu beziehen. Ein regelmäßiger Versand soll nur über uns erfolgen.
Bei entsprechenden Fragen wenden Sie sich bitte per E-Mail
an [email protected].
Impressum
KaffeeKlatsch Jahrgang 9, Nummer 11, November 2016
ISSN 1865-682X
Bookware – eine Initiative der
MATHEMA Software GmbH
Henkestraße 91, 91052 Erlangen
Telefon: 0 91 31 / 89 03-0
Telefax: 0 91 31 / 89 03 -99
E-Mail: [email protected]
Internet: www.bookware.de
Herausgeber /Redakteur: Dr. Oliver Klosa
Anzeigen: Dr. Oliver Klosa
Grafik: Nicole Delong-Buchanan
KaffeeKlatsch Jahrgang 9 / Nr. 11 / November 2016
Inhalt
Von 0 auf 100 mit JaCoCo/EclEmma
Code Coverage für Unit und Integrationstests
verbessern von Zeeshan Ali
Editorial
3
Beitragsinfo
4
Inhalt
5
Leserbrief 18
User Groups
19
Werbung
18
Das Allerletzte
20
6
EclEmma [1] ist ein Eclipse-Plug-in und stellt
Code-Coverage-Features (Code-Umfang) zur Verfügung. Beim Code Coverage geht es darum, wie viele
Befehle einer Klasse sich in einem Projekt befinden
und von den anderen Klassen ausgeführt werden.
Es verwendet JaCoCo [1] und beinhaltet die CodeCoverage-Bibliothek. Mit Hilfe von EclEmma und
JaCoCo kann ein Entwickler schnell einen Überblick
zum Umfang seiner Unit und zu seinen Integrationstests bekommen sowie konsequent die Qualität dieser
Tests verbessern. JaCoCo kann auch außerhalb von
Eclipse mit gängigen Build Tools wie Maven verwendet werden.
Einführung in die Welt von Ceylon
von Abderrahmen Dhouibi
14
Neuere Sprachen beinhalten gelernte Lektionen von
vorherigen Sprachgenerationen, um die Programmierung leichter und effizienter zu machen. Zu dieser Welle der neueren Programmiersprachen gehört
Ceylon.
Artikel
Von 0 auf 100 mit JaCoCo/EclEmma
Code Coverage für Unit und Integrationstests
verbessern
6
Einführung in die Welt von Ceylon
14
Reaktiv statt nur aktiv
Couchbases Java-SDK
Seite 5
17
Reaktiv statt nur aktiv
Couchbases Java-SDK von David Maier
17
Wenn man beginnt sich mit Big-Data auseinanderzusetzen, dann stolpert man unweigerlich über
das Programmiermodell Map-Reduce oder über verteilte Programmierung im Allgemeinen. Darüber
hinaus trifft man bei operativen Big-Data-Systemen
auch auf das Programmierparadigma der reaktiven
Programmierung. Was ist ein operatives Big-DataSystem? Wie hängt reaktive Programmierung mit
Couchbase Server zusammen? Der folgende Artikel
gibt Antworten auf diese Fragen.
KaffeeKlatsch Jahrgang 9 / Nr. 11 / November 2016
Von 0 auf 100 mit
JaCoCo/EclEmma
Code Coverage für Unit und
Integrationstests verbessern
E
von Zeeshan Ali
clEmma [1] ist ein
Eclipse-Plug-in und
stellt Code-CoverageFeatures (Code-Umfang)
zur Verfügung. Beim
Code Coverage geht es
darum, wie viele Befehle einer Klasse
sich in einem Projekt befinden und
von den anderen Klassen ausgeführt
werden. Es verwendet JaCoCo [1]
und beinhaltet die Code-CoverageBibliothek. Mit Hilfe von EclEmma
und JaCoCo kann ein Entwickler schnell
einen Überblick zum Umfang seiner
Unit und zu seinen Integrationstests
bekommen sowie konsequent die
Qualität dieser Tests verbessern. JaCoCo
kann auch außerhalb von Eclipse
mit gängigen Build Tools wie Maven
verwendet werden.
In diesem Artikel werden die Kernfunktionalität von
EclEmma/JaCoCo in Eclipse und eine kleine JavaAnwendung mit Maven gezeigt. Dabei ist ein sicherer
Umgang in der Java-Entwicklung in Eclipse und Maven
Voraussetzung.
Die Test-Anwendung
Unsere Test-Anwendung basiert auf einer einfachen
Klasse. Diese Klasse präsentiert einen Punkt mit X- und
Y-Koordinaten in zwei Dimensionen und hat eine Methode, die einen Punkt mit einem anderen vergleicht, um
sicher zu stellen, ob beide Punkte die gleichen Punkte
sind oder nicht.
Seite 6
package de.mathema.www.myjacoco;
public class Punkt {
private Double x;
private Double y;
public Punkt(Double x,Double y) {
this.x = x;
this.y = y;
}
public Punkt(Punkt zweiterPunkt) {
this.x = zweiterPunkt.x;
this.y = zweiterPunkt.y;
}
public Double getX() {
return x;
}
public void setX(Double x) {
this.x = x;
}
public Double getY() {
return y;
}
public void setY(Double y) {
this.y = y;
}
public boolean punkteVergleichen(
Punkt zweiterPunkt
){
return this.getX().equals(zweiterPunkt.getX())
&& this.getY().equals(zweiterPunkt.getY());
}
public String toString() {
return "("+this.x+","+this.y+")";
}
}
Abbildung 1: Eine Punkt-Klasse
Installation von EclEmma in Eclipse IDE:
Der nächste Schritt ist die Installation des EclEmmaPlug-ins in Eclipse. Dazu müssen wir das Help-Menü
öffnen und die Option Eclipse Market auswählen.
Help->Eclipse Market
Wir können auch Help->Install New Software auswählen. Diese Aktion öffnet ein Dialogfenster, bei dem man
im Feld Work With (links oben) die URL: http://update.
eclemma.org [2] eintragen muss. Nach dem Eintrag wählen wir im unteren Feld die Option EclEmma aus und
klicken unten rechts auf Next.
KaffeeKlatsch Jahrgang 9 / Nr. 11 / November 2016
Code Coverage für Unit- und Integartionstests mit EclEmma/JaCoCo
Abbildung 2: Installation von EclEmma in Eclipse
Danach wird die Software heruntergeladen und nach
Erteilung der Installationsgenehmigung installiert. Nach
einem Neustart von Eclipse steht das Plug-in zur Verfügung. (Siehe Abblidung 2)
Unit-Tests für die Punkt-Klasse mit Junit
Im folgenden Schritt schreiben wir eine Klasse für UnitTests für die Punkt-Klasse mit JUnit.
public class PunktUnitTest {
@Test
public void PunkteVergleichen()
throws Exception {
//a(10.0, 20.0)
Punkt a = new Punkt(10.0,20.0);
//b(30.0,40.0)
Punkt b = new Punkt(30.0,40.0);
//Der Fall X1!=X2 und Y1!=Y2
//a(10.0,20.0) und b(30.0,40.0) sind unterschiedlich
assertFalse(a.punkteVergleichen(b));
//Der Fall X1 == X2 && Y1 == Y2
//a(10.0,20.0) und c(10.0,20.0) sind gleich
Punkt c = new Punkt(a);
assertTrue(a.punkteVergleichen(a));
}
}
Abbildung 3: Unit-Tests für die Punkt-Klasse
Seite 7
Um diese Testklasse mit Code Coverage auszuführen und
den Klassen-Namen auszuwählen, muss man rechts klicken und von der Liste die Option Coverage As->JUnit
Test auswählen. (Siehe Abbildung 5)
Diese Aktion führt die Unit-Tests aus und zeigt die
Coverage-Statistiken bezüglich der Unit-Tests im Coverage-Panel. (Siehe Abbildung 6)
Dieses Panel hat fünf Spalten, das verschiedene Statis­
tiken sammelt:
Spalte Nr Spalte Name
Inhalt
1
Element
Die Klassen des Projekts
unter Package Struktur
2
Coverage
Code Coverage als Prozent
3
Covered
Instructions
Die Zahl der ausgeführten
Befehle einer Klasse
Missed
Instructions
Die Zahl der nicht ausgeführten Befehle einer
Klasse
Total
Instructions
Die gesammte Zahl von
Befehle einer Klasse
4
5
Abbildung 4: Erklärung der Statistik-Spalten im Coverage-Panel
KaffeeKlatsch Jahrgang 9 / Nr. 11 / November 2016
Code Coverage für Unit- und Integartionstests mit EclEmma/JaCoCo
Abbildung 5: Ausführung von JUnits Tests mit Coverage
Abbildung 6: Die Coverage-Statistiken im Coverage-Panel
Seite 8
KaffeeKlatsch Jahrgang 9 / Nr. 11 / November 2016
Code Coverage für Unit- und Integartionstests mit EclEmma/JaCoCo
Im konktreten Beispiel für unsere Klasse mit Unit-Tests
sehen wir, dass es 100 Prozent Coverage hat. Aber in der
Punkt-Klasse, die tatsächlich getestet wurde, wurden
nicht alle Befehle ausgeführt. Mit einem Doppelklick auf
die Punkt-Klasse in der ersten Spalte des Coverage-Panels wird diese Klasse geöffnet und wir sehen folgendes:
public class Punkt {
private Double x;
private Double y;
public Punkt(Double x,Double y) {
this.x = x;
this.y = y;
}
public Punkt(Punkt zweiterPunkt) {
this.x = zweiterPunkt.x;
this.y = zweiterPunkt.y;
}
public Double getX() {
return x;
}
public void setX(Double x) {
this.x = x;
}
public Double getY() {
return y;
}
public void setY(Double y) {
this.y = y;
}
public boolean punkteVergleichen(
Punkt zweiterPunkt
){
return this.getX().equals(zweiterPunkt.getX())
&& this.getY().equals(zweiterPunkt.getY());
}
public String toString() {
return "("+this.x+","+this.y+")";
}
}
Abbildung 7: Code-Coverage für die Punkt-Klasse nach Unit-Tests
Die ausgeführten Code-Zeilen sind grün und die nicht
ausgeführten rot markiert. Die gelb-markierte Zeile ist
ein Sonderfall. Diese enthält Conditionale-Befehle und
das Gelb zeigt, dass nicht alle möglichen Kombina­tionen
getestet wurden. Fährt man mit der Maus über das Dia­
mant-Symbol am Anfang dieser Zeile, erscheint die
Meldung „1 of 4 branches missed “. (Siehe Abbildung 10)
Seite 9
Alle mögliche Kombinationen, um zwei Punkte (X1,Y1)
und (X2,Y2) zu vergleichen, sehen wie folgt aus:
Condition Was wird geprüft
1
X1 == X2 && Y1!= Y2
2
X1!=X2 && Y1!=Y2
(Die Prüfung für Y Koordinatoren
wird nicht gemacht)
2
X1!=X1 && Y1==Y2
(Die Prüfung für Y Koordinatoren
wird nicht gemacht)
3
X1==X2 && Y1!=Y2
Abbildung 8: Alle Vergleichskombinationen von zwei Punkten
Die Prüfungen in der blauen Zeile haben eigentlich die
gleiche Bedingung. Wenn X1!=X2 wahr ist, findet die
zweite Prüfung nicht statt. Dies ist das Standard-Verhalten der Java-Operatoren &&.
Wir vergleichen nun die obere Tabelle mit unseren
Unit-Tests und sehen, dass wir nur geprüft haben, ob die
X - und Y-Koordinaten der beiden Punkte identisch sind
oder nicht. Wir haben aber nicht den 3. Fall in der oberen
Tabelle geprüft, bei dem die X-Koordinaten gleich sind,
aber die Y-Koordinaten nicht. Deswegen ergänzen wir
unseren Unit-Test mit diesem Fall und führen die Coverage As Option noch einmal aus.
//Der Fall X1 == X2 && Y1 != Y2
//a(10.0,20.0) und c(10.0,90.0) sind unterschiedlich
c.setX(10.0);c.setY(90.0);
assertFalse(a.punkteVergleichen(c));
Abbildung 9: Die Ergänzung des Unit-Tests
Diesmal sieht die Coverage der Punkt-Klasse wie folgt
aus:
public class Punkt {
private Double x;
private Double y;
public Punkt(Double x,Double y) {
this.x = x;
this.y = y;
}
public Punkt(Punkt zweiterPunkt) {
this.x = zweiterPunkt.x;
this.y = zweiterPunkt.y;
}
KaffeeKlatsch Jahrgang 9 / Nr. 11 / November 2016
Code Coverage für Unit- und Integartionstests mit EclEmma/JaCoCo
Abbildung 10: Gelbe Zeile im Coverage-Bericht
public Double getX() {
return x;
}
public void setX(Double x) {
this.x = x;
}
public Double getY() {
return y;
}
public void setY(Double y) {
this.y = y;
}
public boolean punkteVergleichen(
Punkt zweiterPunkt
){
return this.getX().equals(zweiterPunkt.getX())
&& this.getY().equals(zweiterPunkt.getY());
}
public String toString() {
return "("+this.x+","+this.y+")";
}
}
Abbildung 11: Verbesserte Code-Coverage für Punkt-Klasse
Seite 10
Diesmal ist die Zeile mit Conditions in der Method
PointsAreSame auch Grün. Zusätzlich sehen wir, dass
die Zeilen der setX()- und setY()-Methoden auch grün
sind, da wir gerade in unserem neuen Test diese Methoden benutzt haben, um die Koordinaten des Punkt
Cs einzusetzen. Nun bleibt in unserer Punkt-Klasse nur
eine Methode rot, die toString()-Methode, da sie nirgendswo verwendet wurde.
Dieses einfaches Beispiel zeigt, wie wir dieses Werkzeug nutzen können, um den Umfang und die Qualität
unseres Codes bzw. Unit-Tests zu sehen und zu verbessern. Zusätzlich kann auch Dead-Code schnell gefunden
werden, besonders in größen Klassen.
Die gelbe Zeile ist nun grün geworden. Die rote Zeile hingegen bedeutet, dass die toString()-Methode nirgendwo
aufgerufen wurde.
JaCoCo mit Maven
Die Verwendung von JaCoCo mit Maven unterscheidet
sich von EclEmma in Eclipse. Dazu müssen wir ein Maven-Plug-in verwenden und folgendes im POM.xml-File
des Projektes eintragen:
KaffeeKlatsch Jahrgang 9 / Nr. 11 / November 2016
Code Coverage für Unit- und Integartionstests mit EclEmma/JaCoCo
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.6.201602180812</version>
<configuration>
<outputDirectory>${project.basedir}/coverage-reports/
jacoco</outputDirectory>
</configuration>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Abbildung 12: Verwendung von JaCoCo mit Maven-Plug-in
Danach können wir unser Projekt mit dem Befehl mvn
clean install ausführen. Per Default generiert das JaCoCo-Plug-in seine Berichte als CSV-, XML- und HTMLDateien im Ordner PROJECT_ORDNER/target/site/jacoco, wie in Abbildung 13 dargestellt.
Wenn wir das File index.html in einem Browser öffnen, werden die gleichen Statistiken wie im CoveragePanel in Eclipse durch eine einfache Webseite angezeigt.
Hier kann man auf Projektebene die Statistiken für alle
Packages des Projekts einsehen. (Siehe Abbildung 14)
Beim Klick auf ein Package werden die Statistiken
aller Klassen dieses Packages aufgelistet. (Siehe Abbildung 15)
Wenn man auf eine einzelne Klasse klickt, dann
werden die Coverage-Statistiken aller Methoden dieser
Klassen geöffnet. (Siehe Abbildung 16)
Auf einer einzelnen Package-Ebene, bei der alle Klassen des Packages aufgelistet sind, sieht man rechts oben
einen Source-File-Link. Mit einem Klick auf diesen Link
wird eine Liste aller Klassen dieses Packages angezeigt.
Klickt man anschließend auf eine Klasse, erscheint der
Quellcode dieser Klasse in den Farben grün, gelb und rot.
(Siehe Abbildung 18)
Natürlich können wir den Ordner, in dem die Berichte vom JaCoCo- und Maven-Plug-in generiert werden, beliebig konfigurieren:
Abbildung 13: Inhalt des Ordners PROJECT_ORDNER/ target/site/jacoco
Seite 11
KaffeeKlatsch Jahrgang 9 / Nr. 11 / November 2016
Code Coverage für Unit- und Integartionstests mit EclEmma/JaCoCo
Abbildung 14: Statistiken auf der Projekt-Packages-Ebene
Abbildung 15 : Gesamte Statistiken der Klassen in einem Package
Abbildung 16: Statistiken einer Klasse auf der Methodenebene
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.6.201602180812</version>
<configuration>
<outputDirectory>${project.basedir}/coverage-reports/
jacoco</outputDirectory>
</configuration>
Abbildung 17
Seite 12
Änderung des Bericht-Ordners von JaCoCo
Hier im ${project.basedir} ist eine Maven-Umgebungs­
variable, die die oberste Ebene des Projektordners darstellt oder besser gesagt der PROJEKT_ORDNER ist. Nach
dieser Änderung führen wir den Befehl mvn clean install
und sehen, dass die Coverage-Berichte wie gewünscht im
PROJECT_ORDNER/coverage-reports/jacoco Ordner generiert wurden. (Siehe Abbildung 19)
KaffeeKlatsch Jahrgang 9 / Nr. 11 / November 2016
Code Coverage für Unit- und Integartionstests mit EclEmma/JaCoCo
Abbildung 18: Code-Coverage einzelne Klasse mit Quellcode
Abbildung 19: Änderung des Zeil-Ordners von JaCoCo
Fazit
JaCoCo ist ein nützliches und leichtgewichtes Werkzeug
für die Code Coverage, dass wir verwenden können, um
den Umfang und die Qualität unserer Unit- und Integrationstests zu verbessern. Es kann innerhalb von EclipseIDE mit dem EclEmma-Plug-in und auch mit den Build
Tools wie Maven genutzt werden.
Seite 13
References
[1] EclEmma Java Code Coverage for Eclipse,
http://www.eclemma.org/index.html
[2] EclEmma Installation im Eclipse
http://www.eclemma.org/installation.html#updatesite
Kurzbiografie
Zeeshan Ali ist als Software-Entwickler bei MATHEMA Software
GmbH tätig. Nach dem Informatik-Studium hat er erste Erfahrungen im Bereich OOP mit Android-Entwicklung gesammelt. Aktuell beschäftigt er sich mit der Entwicklung und dem Testen von
Java-Enterprise Anwendungen. Neben der Arbeit reist er sehr viel und interessiert
sich für andere Kulturen.
KaffeeKlatsch Jahrgang 9 / Nr. 11 / November 2016
Einführung in die Welt von Ceylon
von Abderrahmen Dhouibi
N
euere Sprachen beinhalten gelernte Lektionen
von vorherigen Sprachgenerationen, um die
Programmierung leichter und effizienter
zu machen. Zu dieser Welle der neueren
Programmiersprachen gehört Ceylon.
Was ist Ceylon
Ceylon ist eine von Red Hats entwickelte Programmiersprache, die im November 2011 erschien.
Sie ist ein direkter Nachkomme von Java. Die Sprache wurde in vielen verschiedenen Varianten und Umgebungen (in kleinen und sehr großen Anwendungen)
getestet. Die Ergebnisse haben gezeigt, dass Ceylon ein
gutes Werkzeug ist, um fast jede Art von Anwendung zu
entwickeln.
Ceylon verbessert Javas Fundament. Sie pickt dabei
die besten Elemente aus Java heraus, entfernt das, was
nicht gut ist und fügt neue Konzepte hinzu. Das macht
das Programmieren sehr angenehm.
Ceylon wurde entwickelt, um auf mindestens zwei
verschiedenen Plattformen zu funktionieren:
• JVM ( Java Virtual Machine) – die Java-Runtime.
des Plug-ins wird eine neue Perspective und der CeylonEditor in Eclipse erstellt.
Erstellung eines Ceylon-Moduls
Um ein Programm mit Ceylon umzusetzen, muss zuerst
ein Ceylon-Modul erstellt werden. Ein Modul in Ceylon
ist ein Container von Packages. Es enthält QuellcodeDateien, Bilder, Konfigurationsdateien und kann andere
Module importieren oder benutzen. Ein neues Modul
hat drei Dateien:
• module.ceylon: Modul Deskriptor
• package.ceylon: Package Deskriptor
• run.ceylon: Source File (Extension .ceylon)
Ein paar Eigenschaften
• JavaScript Engines – Internet-Browser und node.js.
Typesafe
Dieser Aspekt ist äußerst interessant, weil es bedeutet,
dass wenn wir einmal etwas entwickelt haben, läuft es
ohne Änderungen überall.
Die aktuelle stabile Version ist die 1.3.0, die im September 2016 freigegeben wurde.
Beispiel 1:
Ceylons IDE und Voraussetzungen
Ceylon verlangt Java 7 oder Java 8. Sie hat keine neue
IDE und wird durch ein Plug-in in Eclipse integriert.
Seit der Version 1.3.0 ist Ceylon auf IntelliJ IDEA und
auch auf Android Studio verfügbar. Nach der Installation
Seite 14
Es gibt keine NullPointerException in Ceylon. Wenn ein
Wert eine Variable Null sein könnte oder wenn eine Methode Null zurückliefern könnte, dann verlangt Ceylon,
dass wir das explizit deklarieren müssen.
String? Name;
Das entspricht:
String | Null name;
Falls es ein Attribut von Type String? gibt, verlangt Ceylon, dass eine Prüfung durch das Konstrukt if (exists …)
gemacht werden muss.
KaffeeKlatsch Jahrgang 9 / Nr. 11 / November 2016
Code-Coverage für Unit- und Integartionstests mit EclEmma/JaCoco
Beispiel 2:
void hallo(String? name) {
if (exists name) {
//Hier ist Name von Typ String
print("Hallo, ``name``!");
// Oder print("Hallo, " + name + "!");
}
else {
print("Hallo, Welt!");
}
}
hallo(null);
hallo("KaffeeKlatsch Lesende");
OutPut:
> Hallo, Welt!
> Hallo, KaffeeKlatsch Lesende!
Es gibt auch in Ceylon keine ClassCastException. Damit der Typ der Variable beschränkt wird, muss eine
Prüfung durch if (is …) und/oder case (is …) gemacht
werden.
Beispiel 3:
void hallo(String? name) {
if (is String name) {
//Hier hat Name String als Typ
print("Hallo, ``name``!");
}
else {
print("Hallo, Welt!");
}
}
hallo(null);
hallo("KaffeeKlatsch Lesende");
OutPut:
> Hallo, Welt!
> Hallo, KaffeeKlatsch Lesende!
Die Beschränkung des Typs einer Variablen durch Bedingungen (wie is oder exists) heißt flow-sensitive typing.
Enumerated Subtypes
In Ceylon muss man nicht lange Switch-Statements
schreiben oder das Visitor-Entwurfsmuster implementieren, wenn es um Subtypes-Probleme geht. Man muss
nur eine Aufzählungsliste von Subtypes deklarieren.
Seite 15
Beispiel 4:
abstract class Magazin() of KaffeeKlatsch | AndereMagazin {}
class KaffeeKlatsch() extends Magazin() {…}
class AndereMagazin () extends Magazin() {…}
Magazin magazin = KaffeeKlatsch() ;
switch (magazin)
case (is KaffeeKlatsch) {print("KaffeeKlatsch");}
case (is AndereMagazin) {print("Anderes Magazin");}
OutPut:
> KaffeeKlatsch
Type aliases
Alias in Ceylon sind ähnlich wie in C typedef. Alias können einen generischen Typ zusammen mit seinem Typ
Argumente handeln.
Beispiel 5:
interface StringListe => List<String>;
Ein Typ eines Alias kann parametriert werden.
Beispiel 6:
class Name<Wert>(String name, Wert wert)
given Wert satisfies String
=> Entry<String,Wert>(name,wert);
Name<String> magazin = Name("Magazin", "KaffeeKlatsch");
print(magazin);
OutPut:
> Magazin->KaffeKlatsch
Funktionen höherer Ordnung
Ceylon unterstützt Funktionen höherer Ordnung, das
heißt, eine Funktion kann Funktionen als Argumente erhalten oder Funktionen als Ergebnis liefern.
Beispiel 7:
void repeat(Integer times, void iterate(Integer i)) {
for (i in 1..times) {
iterate(i);
}
}
void printQuadrat(Integer i ) {
print(i^2);
}
repeat(5, printQuadrat);
// Oder die Kompaktform: ohne die Methode “printQuadrat“
// repeat(5, (i)=>print(i^2));
OutPut:
> 1 4 9 16 25
KaffeeKlatsch Jahrgang 9 / Nr. 11 / November 2016
Code-Coverage für Unit- und Integartionstests mit EclEmma/JaCoco
Tupel
Ein Tupel ist eine Art von Linked List, bei der der statische Typ der Liste dem statischen Typ jedes Elements
der Liste entspricht:
Beispiel 8:
[Float, Float, Float, String] quelle = [0.0, 1.0, 2.0,
"Quelle"];
print(quelle[3]);
OutPut:
> Quelle
Ohne den Bedarf zum Type-Casting hat man Zugriff auf
alle Elemente.
Beispiel 9:
[Float, Float, String] quelle = [0.0, 1.0, "Quelle"];
[Float, String] teil = [quelle[0],quelle[2]];
print(teil[1]);
OutPut:
> Quelle
Klare Ausdrücke
Um einen Stream von Werten zu filtrieren und umzuwandeln, stellt Ceylon spezielle Syntax zur Verfügung,
die diese Operationen praktisch und einfach machen.
Beispiel 10: Sequenz von Name und Paradigmen
// Drei Programmiersprache hat drei Attribute(
Name, Paradigmen und Jahr
)
class Sprache(
String name, String paradigmen, Integer jahr
) {…}
// Drei Programmiersprache(C, Java und Ceylon)
[Sprache, Sprache, Sprache] programmierspracheListe =
[Sprache("C", "imperativ und strukturiert", 1972),
Sprache(
"Java", "Objektorientierte Programmiersprache", 1995
),
Sprache(
"Ceylon", "Objektorientierte Programmiersprache", 2011
)];
value sequenz2 = [for (sprache in programmierspracheListe)
if (sprache.jahr > 2010) sprache.name + " " + sprache.
paradigmen];
print(sequenz2);
OutPut:
> [Ceylon Objektorientierte Programmiersprache]
Hier wird ein Map<String,Sparche> erstellt.
value map = { for (sprache in programmierspracheListe)
sprache.name + " " + sprache.paradigmen -> sprache};
Operator Polymorphism
Ceylon bietet einen Satz von Operatoren einschließlich
der, die in C und Java unterstützt werden.
Jeder vordefinierte Operator ist definiert, um nach
bestimmten Klassen- oder Schnittstellentyp zu handeln.
Das erlaubt die Anwendung der Operatoren zu jeder
Klasse, die diesen Typ erweitert oder hat. Wir nennen
diesen Ansatz Operator Polymorphism.
Beispiel 11:
Ceylon definiert die Schnittstelle Summable.
shared interface Summable<Other> of Other
given Other satisfies Summable<Other> {
shared formal Other plus(Other that);
}
Der „+“ Operator ist definiert für die Summable-Werte:
> X+Y ist eine Abkürzung von X.plus(Y)
Der Operator “ <“ ist in der Schnittstelle Comparable
definiert, „*“ ist in der Schnittstelle Numeric definiert usw.
Fazit
Zwischen 2011 und 2016 wurden mehr als 1.010 Issues
gefixt. Ceylon 1.3.0 ist ein Major-Release. Es ist das erste
Release, das Android Development, Node Package Manager (npm) und Wildfly Swarm unterstützt. Das Projekt
ist immer noch aktuell und wird weiterentwickelt. Jedoch
findet man außerhalb der offiziellen Webseite kaum Dokumentationen.
// Sequenz von Name und Paradigmen
value sequenz1 = [for (
sprache in programmierspracheListe
) sprache.name + " " + sprache.paradigmen + " ``sprache.jahr``"];
Referenzen
OutPut:
[2] Athaydes, Renato Learn Programming in Ceylon – Part 1
http://renatoathaydes.github.io/Learn-Programming-In-Ceylon-Part-1
print(sequenz1);
> [C imperativ und strukturiert 1972, Java
Objektorientierte Programmiersprache 1995, Ceylon
Objektorientierte Programmiersprache 2011]
Die Sequenz von Name und Paradigmen für die Sprache,
die ein Erscheinungsjahr ab 2009 haben.
Seite 16
[1] Ceylon home
http://ceylon-lang.org
Kurzbiografie
Abderrahmen Dhouibi ist als Consultant und Entwickler bei
MATHEMA Software GmbH tätig. Er interessiert sich für objekt­
orientierte Programmierung und beschäftigt sich mit der Java Standard- und Enterprise-Entwicklung.
KaffeeKlatsch Jahrgang 9 / Nr. 11 / November 2016
Reaktiv statt nur
aktiv
Couchbases Java-SDK
W
von David Maier
enn man beginnt
sich mit Big-Data
auseinanderzusetzen,
dann stolpert man
unweigerlich über das
Programmiermodell Map-Reduce oder
über verteilte Programmierung im
Allgemeinen. Darüber hinaus trifft man bei
operativen Big-Data-Systemen auch auf
das Programmierparadigma der reaktiven
Programmierung. Was ist ein operatives
Big-Data-System? Wie hängt reaktive
Programmierung mit Couchbase Server
zusammen? Der folgende Artikel gibt
Antworten auf diese Fragen.
Statt einfach nur Buzzwords in den Raum zu werfen, beginnen wir mit der folgenden Fragestellung: Was ist eigentlich Big-Data? Während diese Frage nicht so einfach
zu beantworten ist, wie es auf den ersten Blick scheint,
macht die folgende grobe Definition Sinn: Big-Data-Systeme sind Systeme zur Datenverarbeitung, die im Stande
sind, Probleme unter bestimmten Rahmenbedingungen
besser zu lösen als die traditional existierenden Systeme.
Diese Rahmenbedingungen können unterschiedlicher Natur sein. Im folgenden unterscheiden wir zwischen analytischen und operativen Big-Data-Systemen,
wobei die Grenze zwischen beiden Systemarten nicht
scharf ist und die beiden auch oft miteinander kombiniert werden. Bei analytischen Big-Data-Systemen ist
eine typische Rahmenbedingung die Quantität der zu
verarbeitenden Daten. Ein Qualitatives Merkmal eines
solchen Systems ist die Zeit, in der die Gesamtheit der
Daten verarbeitet werden kann. Es geht also meist darum
große Datenmengen in kürzerer Zeit zu verarbeiten. Die
Konsumenten der Ergebnisse sind eher wenige Nutzer.
Typischer Vertreter eines solchen Systems ist Hadoop.
Die Daten werden eher starr in einem verteilten Dateisystem abgelegt, um dann verteilt verarbeitet zu werden.
Seite 17
Bei operativen Big-Data-Systemen geht es nicht rein
um die Datenmenge. Rahmenbedingungen sind Anzahl
der Konsumenten und Durchsätze. Qualitative Merkmale sind das Bedienen möglichst vieler Konsumenten
zur gleichen Zeit und individuell geringe Antwortzeiten.
Vertreter solcher Systeme sind NoSQL-Datenbank­
systeme wie Couchbase Server. Im Falle von Couchbase
Server sind 100-tausende Operationen pro Sekunde bei
Sub-Millisekunden-Latenz keine Seltenheit.
Die Fähigkeit einen hohen Durchsatz auf der ServerSeite zu erreichen ist jedoch nur ein Teil eines Ganzen.
Die Client-Seite ist hier nicht minder wichtig. Couchbases Java SDK verwendet RxJava und integriert somit
die eigene Kern-API mit einer API zur asynchronen Programmierung auf Basis von observierbaren Datenströmen (Observable Streams).
Das Observable-Pattern ist recht leicht erklärt: Es
gibt ein zu observierendes Subjekt und einen Observierenden. Sobald das Subjekt etwas tut, kann der Observierende auf das Verhalten reagieren. Im Rahmen der asynchronen Operationsverarbeitung muss der Aufrufende
nun nicht mehr auf ein Ergebnis warten, sondern das
Ergebnis wird vom Observierenden gehandhabt. Dies
bewirkt einen höheren Durchsatz je Client und geringere
Latenzen über mehrere Operationen hinweg.
Da eine Datenbankoperation mehrere Elemente (Dokumente in Couchbase) liefern kann, werden diese als observierbarer Datenstrom geliefert. Ein solcher Datenstrom
kann z. B. gemappt (Transformation der Elemente, Filtern
von Elementen, ...) oder z. B. reduziert werden (Aggregation von Elementen, ...). Jede Transformation eines Datenstroms liefert erneut einen Datenstrom. Dies erlaubt es, die
Operationen kontrolliert nebenläufig auszuführen, ohne
bei Abhängigkeiten zwischen individuellen Operationen
in der sogenannten Callback-Hölle zu landen.
Couchbase Server ist ein verteiltes und dokumentenorientiertes NoSQL-Datenbanksystem mit Schwerpunkten auf Flexibilität, Performanz, Skalierbarkeit und
Hochverfügbarkeit. Die Performanzanforderungen enden nicht auf der Server-Seite. Dieser Artikel hat einen
Einblick gegeben, weshalb Couchbase Server auf der
Client-Seite auf reaktive Programmierung setzt.
Kurzbiografie
David Maier ist ein kreativer Software-Entwickler und Berater mit
Projektleitungserfahrung in der Produktentwicklung und in Kundenprojekten. Darüber hinaus besitzt er einen soliden Datenbank-Background, wobei er sich im Laufe der Zeit auf NoSQL-Datenbanksysteme spezialisiert hat. Er arbeitet momentan als Principal Solutions Engineer für
‚Couchbase‘, der Firma hinter dem Open-Source NoSQL-Datenbanksystem
‚Couchbase Server‘.
KaffeeKlatsch Jahrgang 9 / Nr. 11 / November 2016
Leserbriefe
Leserbrief
von Aleksandar Drakulic
KaffeeKlatsch 2016/11
bezogen auf den Artikel
Das Geheimnis des Einhornerntwicklers
Eine Schatzkarte für die eigene Entwicklerreise
von TimBourguignon
KaffeeKlatsch 2016/07
Sehr geehrter Herr Bourguignon,
Ich habe Ihren Artikel mit großem Interesse gelesen. Zuerst einmal, ja ich glaube, dass Einhörner existieren, aber
leider nur ohne Horn. Warum? Wir Menschen wollen
immer mehr und das, was wir mehr wollen, bewerten wir
immer subjektiv. Das liegt in unserer Natur.
Würden wir uns einen fiktiven Wunschkollegen zusammenzustellen, wünschten wir uns einen Fleißigen, jedoch nicht zu Fleißigen, immerhin wollen wir uns nicht
in einem schlechten Licht präsentieren. Jemand der guten Code schreibt, uns jedoch nicht komplett überflügelt,
nett ist und (immer) das tut was man ihm sagt. Unser
Chef wünschte sich einen Arbeitnehmer, der seine Arbeit verrichtet, ordentlich und pünktlich ist, die ihm anvertrauten Aufgaben gewissenhaft erfüllt und so wenig
Geld wie möglich kostet. Selbstverständlich befinden wir
uns hier im Reich der Utopie.
Woher sollen diese Menschen kommen? Aus der
Hochschule/Uni natürlich!
Die AbstractFactory der Unternehmenswelt, zumindest in unseren Köpfen. Die Bildungspolitik will uns
weismachen, dass dies möglich ist. Aus meiner Sicht, leider falsch.
An den Hochschulen wird Studenten Wissen vermittelt, denn dies ist die Aufgabe der Hochschulen. Seit
der Einführung des Bachelor sogar unter Hochdruck. Es
gilt, keine Zeit mehr zu verschwenden. Die Zeiten in denen Studenten 20+ Semester benötigten sind vorüber. Es
herrscht somit Lernzwang. Eine Klausur folgt der nächSeite 18
sten. Es werden vor allem Klausuren geschrieben die einen kompakten Wissenskatalog abfragen. Denn das Problem ist: Hochschulen sind gezwungen ihre Studenten
zu bewerten. Wie können unabhängige Bewertungen in
Klausuren stattfinden? Richtig: Menge durch Zeit. Dies
führt selbstverständlich zu Bulimie-Lernen. Eigentlich
das genaue Gegenteil von dem, was alle wollen. Die
Hochschulen vermitteln kein Wissen, sie fragen es ab.
Die Studenten lernen kein Wissen, sie lernen im Eiltempo Wissen zu ersetzen. Und die Unternehmen glauben
fest daran, dass diese neue Generation besser wird als die
vorherige und wundern sich, dass ihre Erwartungen nicht
erfüllt werden, da die Studenten nicht auf den Berufsalltag vorbereitet werden. Trotzdem spielen alle dieses irre
Spiel mit dem Kalkül, es wird sich schon auszahlen. Alle
verlieren, tun aber so, als wären sie Gewinner. Natürlich
haben einige gute Hochschulen und Unternehmen dies
erkannt und bemühen sich dem Problem Herr zu werden. Vor allem ist es einigen Professorinnen und Professoren zu verdanken, die sich sehr engagieren, mehr als
von ihnen verlangt würde. Dennoch könnte auf diesem
Gebiet mehr gemacht werden.
Für Softwareentwicklung benötigt man vor allem
eines: Zeit. Abstrakte Konzepte lassen sich zwar lehren,
um sie wirklich zu verstehen, muss man sie jedoch anwenden. Wer jedoch kontinuierlich Zeit investiert, hat
qualitativ bessere Lernerfolge, die vor allem langfristig
allen nutzen. Die bekommt man nur, indem man sich
hinsetzt und etwas macht oder auch ab und zu währenddessen steht.
Hier schließt sich der Kreis und wir sind wieder in
der Realität angelangt. Chefs und Kollegen haben ihre
Liste mit Wünschen im Kopf, die leider vollkommen
­realitätsfremd ist, da sie auf Menschen stoßen, die gerade
frisch durch eine Bildungseinrichtung gepresst wurden.
Wir müssen vor allem unsere Erwartungen hinterfragen.
Nicht ob ein Kandidat die eigenen Anforderungen erfüllt, sondern ob meine Anforderungen realistisch sind.
Würde ich mein vergangenes Ich heute nach 20 Jahren
Berufserfahrung einstellen? Die Antwort muss darauf
aus verschiedenen Gründen immer „nein!“ lauten. Dennoch sollten wir es tun!
Vielmehr fängt jeder von uns als „Esel“ an und wandelt sich hoffentlich durch das Studium oder eine Ausbildung in ein Pferd. Ja, und mit viel Glück, gutem Zureden
und einigen Schlägen, über eine laaaange Zeit verteilt,
auf den Hinterkopf, wird man dann durch Schweiß und
Schmerz vielleicht zum Einhorn.
Aleksandar Drakulic
KaffeeKlatsch Jahrgang 9 / Nr. 11 / November 2016
User Groups
Fehlt eine User Group? Sind Kontaktdaten falsch? Dann geben Sie uns doch bitte Bescheid.
Bookware, Henkestraße 91, 91052 Erlangen
Telefon: 0 91 31 / 89 03-0, Telefax: 0 91 31 / 89 03-55
E-Mail:
Java User Groups
JUG Hamburg
Java User Group Hamburg
http://www.jughh.org
Deutschland
JUG Berlin Brandenburg
http://www.jug-bb.de
Kontakt: Herr Ralph Bergmann (
JUG Karlsruhe
Java User Group Karlsruhe
http://jug-karlsruhe.de
(
)
)
Java UserGroup Bremen
http://www.jugbremen.de
Kontakt: Rabea Gransberger (
JUGC
Java User Group Köln
http://www.jugcologne.org
Kontakt: Herr Michael Hüttermann
(
)
)
JUG DA
Java User Group Darmstadt
http://www.jug-da.de
Kontakt:
jugm
Java User Group München
http://www.jugm.de
Kontakt: Herr Andreas Haug (
Java User Group Saxony
Java User Group Dresden
http://www.jugsaxony.de
Kontakt: Herr Falk Hartmann
(
)
rheinjug e.V.
Java User Group Düsseldorf
Heinrich-Heine-Universität Düsseldorf
http://www.rheinjug.de
Kontakt: Herr Heiko Sippel (
JUG Münster
Java User Group für Münster und das Münsterland
http://www.jug-muenster.de
Kontakt: Herr Thomas Kruse (
)
JUG MeNue
Java User Group der Metropolregion Nürnberg
c/o MATHEMA Software GmbH
Henkestraße 91, 91052 Erlangen
http://www.jug-n.de
Kontakt: (
)
)
JUG Deutschland e.V.
Java User Group Deutschland e.V.
c/o Stefan Koospal
http://www.java.de (
)
ruhrjug
Java User Group Essen
Glaspavillon Uni-Campus
http://www.ruhrjug.de
Kontakt: Herr Heiko Sippel (
JUGF
Java User Group Frankfurt
http://www.jugf.de
Kontakt: Herr Alexander Culum
(a
)
JUG Görlitz
Java User Group Görlitz
http://www.jug-gr.de
[email protected]
Seite 19
)
JUG Ostfalen
Java User Group Ostfalen
(Braunschweig, Wolfsburg, Hannover)
http://www.jug-ostfalen.de
Kontakt: Uwe Sauerbrei (
)
)
JUGS e.V.
Java User Group Stuttgart e.V. , c/o Dr. Michael Paus
http://www.jugs.org, Kontakt: Herr Dr. Micheal Paus
(
) , Herr Hagen Stanek (
),
Rainer Anglett (
)
Schweiz
JUGS
Java User Group Switzerland
http://www.jugs.ch (
)
KaffeeKlatsch Jahrgang 9 / Nr. 11 / November 2016
User Groups
.NET User Groups
.NET Developers Group Stuttgart
http://www.devgroup-stuttgart.net
Deutschland
Kontakt: Herr Michael Niethammer
.NET User Group Bonn
.NET User Group "Bonn-to-Code.Net"
http://www.bonn-to-code.net (
Kontakt: Herr Roland Weigelt
)
.NET User Group Dortmund (Do.NET)
c/o BROCKHAUS AG
http://do-dotnet.de
Kontakt: Paul Mizel (
)
.NET Developer-Group Ulm
c/o artiso solutions GmbH
http://www.dotnet-ulm.de
Kontakt: Herr Thomas Schissler (
)
Österreich
.NET User Group Austria
c/o Global Knowledge Network GmbH,
http://usergroups.at/blogs/dotnetusergroupaustria/default.aspx
Kontakt: Herr Christian Nagel (
)
Die Dodnedder
.NET User Group Franken
http://www.dodnedder.de
Kontakt: Herr Udo Neßhöver, Frau Ulrike Stirnweiß
(
)
Software Craftsmanship
Communities
.NET UserGroup Frankfurt
http://www.dotnet-usergroup.de
Deutschland, Schweiz, Österreich
Softwerkskammer – Mehrere regionale Gruppen und
Themengruppen unter einem Dach
http://www.softwerkskammer.org
Kontakt: Nicole Rauch (
)
.NET User Group Friedrichshafen
http://www.dotnet-fn.de
Kontakt: Tobias Allweier
([email protected])
.NET User Group Hannover
http://www.dnug-hannover.de
Kontakt:
INdotNET
Ingolstädter .NET Developers Group
http://www.indot.net
Kontakt: Herr Gregor Biswanger
(
)
DNUG-Köln
DotNetUserGroup Köln
http://www.dnug-koeln.de
Kontakt: Herr Albert Weinert (
.NET User Group Leipzig
http://www.dotnet-leipzig.de
Kontakt: Herr Alexander Groß (
Herr Torsten Weber (
.NET Developers Group München
http://www.munichdot.net
Kontakt: Hardy Erlinger (
.NET User Group Oldenburg
c/o Hilmar Bunjes und Yvette Teiken
http://www.dotnet-oldenburg.de
Kontakt: Herr Hilmar Bunjes
(
)
Frau Yvette Teiken (
Seite 20
)
)
)
)
)
Die Java User Group
Metropolregion Nürnberg
trifft sich regelmäßig einmal im Monat.
Thema und Ort werden über
www.jug-n.de
bekannt gegeben.
Weitere Informationen
finden Sie unter:
www.jug-n.de
KaffeeKlatsch Jahrgang 9 / Nr. 11 / November 2016
meet the
experts
of
enterprise infrastructure
HTML5, CSS3 und JavaScript
23. Jan. 2017, 26. Juni 2017, 1.650,– € (zzgl. 19 % MwSt.)
Scrum Basics
950,– € (zzgl. 19 % MwSt.)
Entwicklung mobiler Anwendungen mit iOS
6. Feb. 2017, 17. Juli 2017, 1.250,– € (zzgl. 19 % MwSt.)
Scrum im Großen – Agiles Organisationsdesign nach LeSS, 950,– € (zzgl. 19 % MwSt.)
Einführung in die objektorientierte
Programmiersprache Java – Eine praxisnahe Einführung
13. Feb. 2017, 10. Juli 2017, 2.150,– € (zzgl. 19 % MwSt.)
Anwendungsentwicklung mit der Java Enterprise Edition
27. März 2017, 11. Sept. 2017, 2.150,– € (zzgl. 19 % MwSt.)
Lesen bildet. Training macht fit.
Software GmbH
Henkestraße 91, 91052 Erlangen
Telefon: 09131/ 89 03- 0
Telefax: 09131/ 89 03- 55
Internet: www.mathema.de
E-Mail: [email protected]
„Ich bin bei MATHEMA, weil hier ­gelebt
wird, dass Software auch etwas mit
Softskills zu tun hat.“
Thomas Bertz, Senior Consultant
Wir sind ein Consulting- Unternehmen mit Schwerpunkt in der Entwicklung unternehmenskritischer, verteilter Systeme und Umsetzung von
Service-orientierten Architek­turen und Applikationen von Frontend bis
Backend. Darüber hinaus ist uns der Wissenstransfer ein großes Anliegen:
Wir verfügen über einen eigenen Trainingsbereich
the s
n
joi t
exper
ture
infrastruc
se
enterpri
of
Software GmbH
Henkestraße 91, 91052 Erlangen
und unsere Consultants sind regelmäßig als
Autoren in der Fachpresse sowie als Speaker
auf zahlreichen Fachkonferenzen präsent.
Telefon: 09131 / 89 03- 0
Telefax: 09131 / 89 03- 55
Internet: www.mathema.de
E-Mail: [email protected]
Ansprechpartnerin:
Britta Kolb
Trends, Lösungen und
Know-how für Profi-Entwickler
05. – 07.12.2016, Köln
Kaffee
klatsch
- Lese
r
erhalt
en
10 % R
abatt
mit Co
de DD
DevSessions
Konferenz
Workshops
05.12.2016
8 halbtägige
Workshops
06.12.2016
1 Keynote,
12 Vorträge
07.12.2016
Ganztägiges
Praxistraining
C16KK
Ihre Experten (u.a.):
Bernd Marquardt
Consultant und
Autor
IT-Visions.de
Dr. Holger
Schwichtenberg
Fachlicher Leiter
IT-Visions.de
Gernot Starke
Gründungsmitglied
des iSAQB e.V.
dotnet-developer-conference.de
Veranstalter:
David Tielke
Trainer & Berater
david-tielke.de
#netdc16
Präsentiert von:
Ralf Westphal
Mitgründer der
Clean Code Developer Initiative
DDConference
Das Allerletzte
Dies ist kein Scherz!
Dieses Ergebnis erzielte die
Stack Overflow-Entwicklerumfrage –
Deutschland Report 2016.
Ist Ihnen auch schon einmal ein Exemplar dieser
­Gattung über den Weg gelaufen?
Dann scheuen Sie sich bitte nicht, uns das mitzuteilen.
Der nächste KaffeeKlatsch erscheint im Dezember.
Seite 23
KaffeeKlatsch Jahrgang 9 / Nr. 11 / Novemver 2016
Herbstcampus
Wissenstransfer
par excellence
5. – 7. September 2017
in Nürnberg