Universität
Montag, der 8. Dezember 2008, war der Beginn einer Woche voller Informationen. Nachdem ich im letzten Jahr die gesamte Konferenz (einschließlich der Universitätssitzungen) besucht hatte, hielt ich es für eine gute Sache, dies auch in diesem Jahr zu tun. Die Universitätssitzungen geben mir die Möglichkeit, mich mit einigen der Themen eingehender zu beschäftigen. Für diesen ersten Tag hatte ich mir die Sitzungen zu Scala und Java Power Tools ausgesucht.
Scala
Die Sitzung über Scala hat mein Interesse an dieser (für mich) neuen Sprache geweckt. Die Kombination aus objektorientierter und funktionaler Programmierung, die enge Integration mit Java (schließlich handelt es sich um Java-Bytecode) und die Prägnanz machen es für mich lohnenswert, mir die Sprache einmal näher anzusehen. Wie Ted Neward in seinem Vortrag erwähnte: 'Beginnen Sie heute mit Scala, um zu experimentieren und Prototypen zu erstellen, damit Sie im nächsten Jahr den Vorteil haben, Scala zu kennen, um es in Produktionssystemen einsetzen zu können.
Java Power Tools
Der Titel Java Power Tools hat mich ein wenig verwirrt. Ich erwartete eine Sitzung über einige der Tools im jdk, die Ihnen helfen können, leistungsfähiger zu programmieren, aber stattdessen war es eine Sitzung über automatisierte Builds, Codeabdeckung und Qualitätsmetriken. Diese Dinge sind in den von Xebia durchgeführten Projekten gängige Praxis. Die einzigen Dinge, die für mich neu waren, waren der Teil der Sitzung über die Hamcrest Asserts und das Behavior Driven Development Framework easyB.
Hamcrest behauptet
JUnit 4.4 führt die assertThat-Methode ein, mit der Behauptungen auf eine lesbarere und verständlichere Weise ausgedrückt werden können. Anstatt zu sagen
assertEquals(10,x)
können Sie sagen
assertThat(x, is(10))
was für englischsprachige Menschen viel mehr Sinn ergibt.
easyB
Durch die Verwendung einer auf Spezifikationen basierenden domänenspezifischen Sprache will easyb eine ausführbare und dennoch lesbare Dokumentation ermöglichen. Die Beschreibung einer Zipcodevalidierung kann folgendermaßen erfolgen:
eine "ungültige Postleitzahl" angegeben,
{ invalidzipcode = "221o1" }
und "wenn der Zipcodevalidator initialisiert ist",
{ zipvalidate = new ZipCodeValidator() }
wenn "validate mit der ungültigen Postleitzahl aufgerufen wird",
{ value = zipvalidate.validate(invalidzipcode) }
dann "sollte die Validator-Instanz false zurückgeben",
{ value.shouldBe false }
Später in der Woche wurde in einer Sitzung über das Gefühl von Scala ein ähnlicher Ansatz beschrieben, der im ScalaTest-Framework verwendet wird. Mit diesem Ansatz kann die Existenz eines Schlüssels in einer Map wie folgt ausgedrückt werden:
map sollte den Schlüssel 'a'// haben, denn alles in Scala ist ein Methodenaufruf und ein Ausdruck
// Dies führt zu einem java-ähnlichen Aufruf
map.should(have).key('a')
// die Methode should existiert natürlich nicht, so dass dies ein potenzieller Compilerfehler ist.
// Scalas Verwendung von impliziten Konvertierungen ermöglicht es Ihnen, eine Wrapper-Methode zu erstellen
// die die Methode should zu einer Klasse hinzufügt.
Für den zweiten Tag der Universitätssitzungen wählte ich Java Performance Tooling und Filthy Rich Clients beyond Java.
Java-Leistungstools
Diese Sitzung war eine Mischung aus einem IBM-Werbevortrag über IBM Monitoring and Diagnostic Tools - Health Center (das übrigens gut aussieht). Und eine allgemeine Einführung in die Analyse von Leistungsproblemen und die Tools, die Sie dabei einsetzen können. Insgesamt vermittelte mir die Sitzung ein besseres Verständnis von Speicherverwaltung und Garbage Collection und den Schwierigkeiten, auf die man bei der Untersuchung von Leistungsproblemen stößt. Die interessanteste Aussage kam von Kirk Pepperdine: Der Zweck der Verwendung von Warteschlangen ist nicht die Erledigung der Arbeit!
Filthy Rich Clients (jenseits von java)
Diese Sitzung war eine Einführung in Android und Flex und wie diese beiden Rich Clients erstellen können. Das Buch Filthy Rich Client verwendet Java-Beispiele und in dieser Sitzung wollten Chet Haase und Romain Guy einige Beispiele in Android und Flex zeigen.
Android
Android ist keine Java-Plattform, aber es verwendet die Programmiersprache Java. Der Java-Bytecode wird in dex-Bytecode kompiliert, der auf der Dalvik VM läuft. Diese VM interpretiert den Dex-Bytecode, aber es gibt noch keine JIT-Kompilierung. Außerdem ist die Garbage Collection ein einfacher Mark-Sweep-Typ. Jede Anwendung läuft in einem eigenen Prozess mit einer eigenen virtuellen Maschine und aus Sicherheitsgründen als separater Benutzer. Aus den kleinen Programmierbeispielen, die ich gesehen habe, fühlt es sich sehr nach Swing-Programmierung an, aber das muss ich noch genauer untersuchen, um sicher zu sein. Es war eine nette erste Einführung, aber für mich persönlich nichts, in das ich mich vertiefen möchte.
Flex
Ich habe schon ein wenig mit Flex gespielt, seit ich die erste Einführung auf der Konferenz im letzten Jahr bekommen habe. Das einzig Neue waren die Arbeiten an Flex 4 und einige interessante Beispiele zu den Möglichkeiten von Pixelbender und Filtering in Flex. Einige der anderen Flex-Sessions in dieser Woche lassen mich auf die Veröffentlichung von Flex 4 und seine verbesserten Möglichkeiten gespannt sein.
Konferenz
In diesem Abschnitt werde ich einige der Sitzungen hervorheben, an denen ich teilgenommen habe.
JavaFX
Da JavaFX 1.0 kurz vor der Konferenz veröffentlicht wurde, gab es eine Vielzahl von Sitzungen zu diesem Thema. Auch die Keynote des ersten Konferenztages drehte sich hauptsächlich um JavaFX (neben einem wirklich kommerziellen Vortrag von IBM darüber, wie sie RFID zur Überwachung der Konferenz implementiert haben) . Die interessantesten Teile der Präsentation betrafen die Plugins, die für Adobe Photoshop und Illustrator verfügbar sind, um Design und Zeitleisten in ein Format zu exportieren, das in Ihre JavaFX-Anwendung importiert werden kann. Die Demonstration zeigte eine Art "Plug and Play"-Erfahrung - wirklich cooles Zeug! Das größte Problem ist meiner Meinung nach das Fehlen eines UI-Toolkits mit Widgets, das die Erstellung von Unternehmensanwendungen mit einem reichhaltigen Benutzererlebnis unterstützt. Deshalb bin ich der Meinung, dass Flex immer noch weit voraus ist.
Gleichzeitigkeit
Das neue Fork-Join-Framework, das in Java 7 eingeführt wurde, kann bei der Programmierung für mehrere Kerne helfen. Mit der zunehmenden Anzahl von Kernen in den nächsten Jahren wird es nicht mehr ausreichen, auf der Ebene der Benutzeranfragen zu trennen. Das bedeutet, dass Anwendungen in kleine Arbeitseinheiten zerlegt werden müssen, die separat ausgeführt werden können. Die vielversprechendsten Kandidaten sind das Sortieren und Suchen. Die neue Klasse ParallelArray abstrahiert die Parallelität von Ihnen. Das Fork-Join-Framework reduziert die Konkurrenz um die Arbeitswarteschlange durch eine Technik, die als Work Stealing bekannt ist. Jeder Worker-Thread hat seine eigene Arbeitswarteschlange, die mit einer doppelendigen Warteschlange implementiert ist. Wenn eine Aufgabe einen neuen Thread forkt, schiebt sie ihn an den Anfang ihrer eigenen Warteschlange. Wenn eine Aufgabe eine Join-Operation mit einer anderen Aufgabe ausführt, die noch nicht abgeschlossen ist, schläft sie nicht, bis die Zielaufgabe abgeschlossen ist (wie es bei Thread.join() der Fall wäre), sondern schiebt eine andere Aufgabe an den Anfang ihrer Warteschlange und führt diese aus. Falls die Aufgabenwarteschlange des Threads leer ist, versucht er dann, eine andere Aufgabe aus dem Ende der Warteschlange eines anderen Threads zu stehlen.
Zukunft der RIA
Mit der Einführung von Flash Player 10 stehen viele neue Möglichkeiten für Flex-Anwendungen zur Verfügung: 3D (oder zumindest 2.5D), der Pixelbender, die Flash-Text-Engine und das Textlayout-Framework und Sound. Mit der Veröffentlichung von AIR 1.5 sind alle Funktionen des Flash Player 10 auch auf dem Desktop verfügbar, einschließlich der verschlüsselten lokalen Speicherung. Die neue Flex-Version (Codename Gumbo) wird Flash Catalyst (die Integration zwischen Photoshop/Illustrator und FlexBuilder), ein neues Zustandsmodell, ein neues Animationsmodell und mehr unterstützen... Außerdem arbeitet Adobe mit springsource zusammen, um eine bessere Integration zwischen Spring und Flex zu erreichen. Es wurde eine interessante Demo über die Model Driven Architecture-Funktionen der neuen LiveCycleDataServices-Suite gezeigt. Später in der Woche zeigte James Ward eine sehr beeindruckende Demo, bei der ein PDF aus einer Flex-Anwendung erstellt wurde, ohne dass die Funktionalität der Flex-Anwendung verloren ging. Alle Rich-User-Experience-Funktionen funktionierten weiterhin (ein Flash-Film kann problemlos in das PDF integriert werden) und auch die Aktualisierung der Daten konnte weiterhin durchgeführt werden. Wow! Sprachlos.
Effektives Java
In dieser Keynote ging es um die zweite Auflage des Buches mit neu geschriebenen Beispielen, die die aktuellen Best Practices widerspiegeln. Der interessanteste Teil handelte von Enums. Zunächst ging es darum, dem Enum-Typ einen Konstruktor hinzuzufügen, um zusätzliche Informationen über das Enum-Element hinzufügen zu können. Dies kann Ihnen helfen, die Verwendung der Ordinalfunktion zu vermeiden, die ohnehin eine schlechte Praxis ist, da eine Änderung des Enums Ihre Anwendung beeinflussen kann, wenn die Ordinalfunktion verwendet wird.
public Enum Ensemble {
SOLO(1), DUETT(2), TRIO(3), QUARTETT(4), QUINTETT(5), SEXTETT(6), SEPTETT(7),
OCTET(8), DOUBLE_QUARTET(8), NONET(9), DECTET(10), TRIPLE_QUARTET(12); private final int numberOfMusicians;
Ensemble(int size) {
numberOfMusicians = size;
}
public int getNumberOfMusicians() {
return numberOfMusicians;
}
}
Zweitens ging es um Singletons, die serialisiert werden müssen. Die Verwendung der readResolve-Methode zur Rückgabe der Instanzvariable ist offen für sorgfältig ausgearbeitete Angriffe. Auf diese Weise ist es möglich, mehrere Instanzen dieses Singletons zu haben, wenn nicht alle Felder transient sind. Der einfachste Weg, ein Singleton zu erstellen, ist die Verwendung einer Enum-Klasse. Alle Enum-Klassen sind serialisierbar und die JVM garantiert, dass Enum ein Singleton ist.
public Enum Elvis {
INSTANZ;
private String[] favoriteSongs = { "Hound Dog", "Heartbreak Hotel" };
public String[] getFavoriteSongs() {
return favoriteSongs;
}
}
Java 7
Java 7 wird enthalten:
- Modularität
- JSR 292: VM-Unterstützung für dynamische Sprachen
- JSR 203: weitere neue IO-APIs
- einige kleine Sprachänderungen wie sichere Rückwürfe, bessere Typinferenz und Multi-Catch.
- JSR 296: Swing-App-Framework
- Vorwärts-Portierung von jdk6_u10-Funktionen
- Swing Updates
- SCTP (Stream Control Transmission)
- SDP (Sockets Direkt Protokoll)
- Upgrade der Classloader-Architektur
- Unterstützung von Unicode 5
- Verbesserungen bei der Hotspot-Laufzeitkompilierung
- G1 Müllabfuhr
- JSR 308: Anmerkungen zu Javatypen
- JSR 166: Gleichzeitigkeit und Sammlungs-Updates wie das Fork-Join-Framework.
Aber das war's auch schon. Und das Enttäuschendste an diesem Vortrag war, dass Java 7 für 2010 erwartet wird. Ja, das ist noch mehr als ein Jahr hin!
Klug sein
Diese Sitzung von Ivar Jacobson war die unterhaltsamste Sitzung. Vor einem vollbesetzten Saal hielt er einen sehr guten Vortrag über Being Smart (Untertitel: Was man Ihnen in der Schule nicht über Software beibringt). Nach OO, UML, Rup & CMMI und XP geht es jetzt nur noch um Scrum. Alle sind gut, aber keines ist alles, was Sie brauchen. Smart bedeutet, dass die Dinge so einfach wie möglich gemacht werden sollten (aber nicht einfacher). Agile bietet einfache und leichtgewichtige Ausgangspunkte. Smart zu sein bedeutet, zu wissen, wann man die Regeln brechen muss. Smart ist Agile++. Es war sehr gut zu hören, dass all die Dinge, die wir bei Xebia bereits praktizieren, als Smart bezeichnet werden.
Fazit
Diese Devoxx-Konferenz war insgesamt eine gute Konferenz. Der kleine Wermutstropfen war, dass es nichts wirklich Neues gab, das erwähnt wurde. Für mich sind die Themen, mit denen ich mich in nächster Zeit beschäftigen werde, Scala und die neue Flex-Version. JavaFX wird eine gute Sache sein, die ich mir danach ansehen werde, denke ich.
Verfasst von
Kris Geusebroek
Unsere Ideen
Weitere Blogs
Contact



