Im Jahr 2014 habe ich die Devoxx in Antwerpen besucht.
Hier sind ein paar Notizen dazu:
Was ist Devoxx?
- Devoxx ist eine Konferenz der belgischen Java-User-Group
- Belgien ist dreisprachig, Konferenz aber 100% in Englisch
- Lokation in riesigem Kinokomplex guter Sound, gute Sitze, gute Projektoren, „cool“
- 8 tracks, bei Keynotes „overflow“
- Gut organisiert (dies Jahr sicher), unterhaltsamer als andere Konferenzen…
- Schwesterkonferenzen:
- Devoxx FR
- Devoxx PL
- Devoxx UK
- Voxxed (Berlin, Ticino,….)
Themen & Hauptsponsoren
- Java / Oracle
- Android / Oracle
- Startups, Business, IT in Großfirmen / ING-Bank
- Java-Server, JBoss, Deployment / Redhat
- JVM-Sprachen
- Web
- SW-Architektur
- Security
- Was sonst noch so ins Umfeld passt und sich jemand traut, vorzutragen…
Scala und Java8
- Viele Features von Scala sind mit java8-Lambdas auch in Java verfügbar
- Problem: verschiedene Implementierung, Interoperabilität
- Bestrebung Scala weiterzuentwickeln damit lambdas von Java und von Scala besser miteinander interoperabel sind.
Monads
- Konzept aus der Kategorientheorie (5% der Mathematiker machen Algebra, 5% der Algebraiker machen Kategorientheorie, aber für funktionale Programmiersprachen plötzlich relevant)
- Monoid (+, *, concat,…)
- Funktor
- Monad (de: Monade)
Wikipedia de
Wikipedia en - Beispiel List mit einem Functor
ist flatten:
;
Probability & Decisions
- Thema: Software für automatische Steuerung
- Heuristik auf Wahrscheinlichkeitstheorie
- False positives / false negatives: was tut weh? (meistens beide…)
- Wahrscheinlichkeitstheorie und Verwendung gut erklärt
Clojure
- Clojure ist eine andere JVM-Sprache
- Ein Lisp-Dialekt, zu erkennen daran, dass der Quelltext überwiegend aus runden Klammern besteht (+ (* 3 4) (* 5 6))…
- Funktionales Paradigma stark unterstützt
- Dynamische Typisierung (für uns: Alles als „Object“ deklariert, implizite Casts bei Methodenaufrufen)
- Nach Java selbst, Scala, Groovy und Javascript die mir am fünfthäufigsten begegnende JVM-Sprache
MapReduce
- „No one at Google uses MapReduce anymore“
- Google hat das verallgemeinert
- Optimierungen: spare Schritte, fasse zusammen etc.
- Als Cloud-Service angeboten (Cloud Dataflow)
Key Note ING
- ING versteht sich als „open bank“
- Nicht gemeint, dass das Geld „offen“ rumliegt, aber offen für neue Ideen
- Schnittstelle zur Bank ist Mobile-App
- IT hat viel Einfluss („IT driven business“)
- Man schaut, was gut machbar ist
- Agile Prozesse (Scrum) vs. Enterprise IT
- Umbau der IT auf diese agilen Prozesse schrittweise
- „Enterprise IT is what does not work“
Material Design
- Vortrag über GUI-Design mit Android und Web
Material Design - Visuelle Ideen für beide Plattformen verfügbar
- Polymerdesign für Web
SW-Architektur mit Spring
- Spring 4.1
- „works with WebSphere“
- DRY
- Lambda aus Java8 kann viele APIs vereinfachen statt anonymen inneren Klassen mit einer Methode
- Generic Messaging Interface (war JMS nicht schon das???)
- Caching, Achtung beim Testen abschaltbar
- Testen auf http://start.spring.io/
- Spring funktioniert mit Java gut, mit Groovy auch (aus demselben Haus…) mit Scala „experimentell“
Lambda_behave
- High-Level testing-Framework
- Verwendet Java8-Features (Lambda etc)
- Beschreibung in natürlicher Sprache
- Failure-Meldungen lesbar
- Wie Cucumber…
- Zufallsquelle konfigurierbar (extrem wichtig für manche Tests!!)
Builtin Types of Scala and Java
- In Java gibt es „primitive“ (long, int, byte, char, short, double,…)
- Probleme bei Arithmetik mit int, long & Co: Überlauf findet unerkannt statt
- Mit float und double Rundungsfehler
- Mit BigInteger, BigDecimal, Complex, Rational fehleranfällige, umständliche und unlesbare Syntax
- In Scala kann man a=b*c+d*e auch für neu definierte numerische Typen schreiben.
- Anmerkung dazu: Oracle-Java-Leute finden Idee von Operator-Überladen für numerische Typen inzwischen interessant, solange man nicht Exceptions mit Collections multipliziert und durch Swing-Komponenten dividiert…
- Spire library
Zukunft von Java (9, 10, …)
Teil I
- Q&A-Sitzung (Fragen per Twitter schreiben)
- Numerische Typen sind Thema. Dass primitive Typen sich so verhalten wie heute und quasi der „default“ sind, wird sich nicht ändern
- Thema Generics und Type-Erasure (wo ist das Problem)?
- Jigsaw vs. Jars vs. OSGi noch offen, aber jar bleibt
- Jigsaw-Repository Wird man wohl bei maven-Central, Oracle funktioniert nicht so, dass sie jigsaw-Repository für third-Party bei sich hosten
Teil II
- Benchmarking mit Java schwierig wegen hotspot-Optimierung
- JMH gutes Tool dafür
- Neue Ideen immer schwierig umzusetzen, weil man kompatibel zu alten Versionen sein will.
- Java bekommt vielleicht „repl“
Teil III
- Collection literals (für Java 7 versprochen!!!) sind für Java8 nicht gekommen, für Java9 unwahrscheinlich
- Mit Value-Types aber eher zu haben, daher nicht vorher…
- Für Set und List mittels
new TreeSet(Arrays.asList(m1, m2, m3,…., mn))
schon heute einigermaßen darstellbar - Für Maps wenn man sowas wie Pair-hätte, was wiederum auf „Tupel“ aufbaut, die kommen werden, wenn es Value-Types gibt
Teil IV
- Tail-Recursion kann nun optimiert werden
- Wegen Security-Manager, der Stacktrace analysiert hat, lange nicht möglich
- C und Lisp können das seit Jahrzehnten…
- Aussage: Generics sind schwierig, aber wenn man sie mal verstanden hat, sind sie leicht… Also „dranbleiben“
- Covarianz und Contravarianz (Bei Array falsch gelöst)
Teil V
- Arrays 2.0: Indizierung mit long möglich, ein bißchen wie List, aber mit Array-Syntax… (Studien und Papers, nicht konkret)
- Listen haben heute extrem-Implementierung ArrayList und LinkedList. Wir wollen „sophisticated“ List vielleicht Hybrid
- Checked-Exceptions: kritisches Thema, schwierig mit Generics und mit Lambda. Zu viele Exceptions sind checked. Z.B. bei close()
Semantische Quelltextanalyse
- Hilfreich für High-Level-Testing-Tools
- Statische und dynamische Analyse
- Dataflow-Analyse: ungeprüfte Daten von außen SQL-injection, aber auch CSS, HTML, JavaScript, JVM-Sprachen/Bytecode
Funktionale Ideen in Java
- Funktional:
- Funktionen oder Methoden sind „first class citizen“
- Higher order Functions (konnte schon C)
- Closure
- Immutability (Funktion gibt immer dasselbe raus)
- Unter der Tischdecke „lazy“-Konstrukte
- Bei großen Strukturen immer Frage: Immutability vs. Performance
- Aber Funktional ist Thread-freundlicher
50 new things in Java8
Teil I
- Lambda (s.u.)
- Streams (s.u.)
- Default-Implementierungen in Interfaces
- Date/Time (wie Joda-Time)
- Optional (besser als null)
- Libraries können mit Lambda arbeiten
- Parallel (mit Vorsicht verwenden)
Teil II
- String.join()
- So was wie „find“ in Unix/Linux
- Comparator schreiben einfacher
- Maps of Maps, Maps of Collections einfacher
- Sortieren besser: quicksort statt mergesort, parallelisierbar
Groovy für Android
- Problem bei JVM-Sprachen außer Java: Bibliothek muss in jeder App mitkommen
- Lösung: Tool zum jar-optimieren
- Zweites Problem: dynamische Sprachen müssen auf Device „on demand“ kompiliert werden
- Lösung: „statisch“ Programmieren, dynamische Features möglich, aber nicht performant
Lambdas
- Lambdas sind anonyme Funktionen
- Idee gegeben: Interface XY mit einer Methode uvw()
- Statt
XY xy = new XY() {
public long uvw(long x) { return x*x }
};
neu
XY xy = x -> x*x; - kürzer, lesbarer, wartbarer, man kann Interface oft sparen
- Closure bedeutet, dass (final-)Variablen aus dem umgebenden Kontext dort eingebunden werden
- Instanz-Methoden sind eigentlich auch Closure, sie binden die Instanz in der sie definiert sind Closure-mäßig ein.
Streams
- Streams sind im Dunstkreis von Collection, Iterable, Iterator, aber was anderes
- Erlauben Methoden, die „Funktion“ auf alle Elemente loslassen
- Elegant programmierbar sind Dinge wie
- Summe
- Produkt
- Maximum
- Erstes / Letztes Elment mit Eigenschaft
- alle mit Eigenschaft
- alle transformierten Elemente
…
- Sinnvoll: nicht dasselbe wie Iterable, Iterator, Collection,…
Schreibe einen Kommentar