Best Presentation Awards
Von der Community gefeiert, von uns ausgezeichnet.
Entdecke die Best Presentation Awards der vergangenen Jahre – ein Archiv voller Java-Exzellenz.
Architektur & Sicherheit
Wie wir mit bahn.de über 2000 Requests pro Sekunde beantworten
Das Vertriebssystem der Bahn wurde in den letzten Jahren komplett neu aufgebaut. Der DB Navigator, die bahn.de-Website, sowie die dazugehörigen Backend-Systeme wurden neu konzipiert und entwickelt. Anfang September 2023 erfolgte der erste große Livegang mit dem Austausch von bahn.de.
Bei der Plattform handelt es sich um eines der größten E-Commerce-Systeme in Deutschland, das täglich für sechs- und siebenstellige Nutzerzahlen Auskünfte und Angebote bereitstellt. In bestimmten Situationen ist das Aufrufaufkommen besonders groß, sodass wir bei der Angebotserstellung mit 2000 Requests pro Sekunde und teilweise noch mehr bombardiert werden, die wir alle beantworten möchten, um unsere Reisenden nicht im Unklaren zu lassen.
Aus diesem Grund wurde im Vorfeld sehr viel Aufwand für die Performance-Optimierung betrieben.
Wir wollen in dieser Session unsere praktischen Erfahrungen, Erkenntnisse und Learnings im Hinblick auf Architektur, Tools/Frameworks, Vorgehen und insbesondere auch dem produktiven Betrieb teilen, um anderen Einblicke zu geben, was der stabile Betrieb einer Plattform mit unseren nicht-funktionalen Anforderungen für Technik und Organisation bedeutet. Wir freuen uns auch über einen Austausch mit den Erfahrungen und Learnings anderer in vergleichbarem Umfeld.
Trends & neue Technologien
Von Zero zum ChatGPT Hero
- Verstehen und Optimieren für besseres Prompt Engineering
Sind Sie bereit, Ihre Fähigkeiten im Bereich Prompt Engineering auf ein neues Level zu bringen? In dieser Präsentation tauchen Sie in die faszinierende Welt von ChatGPT ein. Dabei werden die Sprecher auf die Grundlagen von GPT und auf die besonderen Fähigkeiten von einem der aktuell leistungsfähigsten textbasierten Dialogsysteme eingehen. Ein wichtiger Aspekt ist darüber hinaus, das Verständnis für Prompt Engineering zu fördern. Durch die Optimierung von Prompts lässt sich die Qualität der Antworten von ChatGPT drastisch verbessern. Wir behandeln einige bewährte Verfahren für die Konstruktion von Prompts, wie z.B. das Chain-of-Thought oder das deklarative Prompting. Sie gewinnen in dieser Präsentation ein tieferes Verständnis von ChatGPT. Praktische Tipps zur Verbesserung von Prompt Engineering runden den Vortrag ab.
Trends & neue Technologien
Deepfakes am Limit: Fake-Videocalls mit Künstlicher Intelligenz
- Fake-Videocalls mit Künstlicher Intelligenz
Stellen Sie sich das mal vor: Jemand nimmt mit einem digitalen Ebenbild Ihrer Person an einem Live-Videoanruf teil. Heutige Echtzeit-Deepfake-Technologie erlaubt es, mit bloßem Auge kaum noch unterscheidbare “Doppelgänger” einer Person zu erzeugen. Das TNG Innovation Hacking Team forscht seit dem Jahr 2019 intensiv an der künstlichen Intelligenz rund um Echtzeit-Deepfakes und entwickelt diese ständig weiter. Das Endergebnis und die einzelnen Schritte hin zum Fotorealismus werden in diesem Vortrag vorgestellt. Seit ihrer Entstehung im Jahr 2017 haben sich Deepfakes von einer KI-Spielerei zu einem mächtigen Werkzeug weiterentwickelt. Auch Medienformate wie Leschs Kosmos, Galileo und anderen Sendungen arbeiten inzwischen mit TNG-Deepfakes. In dem Vortrag zeigen wir die verschiedenen Evolutionsschritte der Deepfake-Technologie, beginnend mit dem “Ur”-Deepfake und endend mit Echtzeit-Deepfakes des gesamten Kopfes. Mehrere Live-Demos bringen dem Publikum einzelne Bestandteile der Software näher. Dabei gehen wir insbesondere auf verschiedene neue Technologien zur Verbesserung der Deepfake-Erzeugung wie zum Beispiel Tensorflow 2 und MediaPipe und die Unterschiede zu unseren früheren Umsetzungen ein.
Trends & neue Technologien
Workflow Automation Reinvented
Core Java & JVM-Sprachen
RxJava2: von 0 auf 100(?) in 45 Minuten
Reactive Programming – nur eine weitere Sau im Dorf? Oder doch gekommen um zu bleiben?
Ziel des Votrags ist es, geneigten Java-Entwicklern eine sehr praktische Einführung in Reactive Programming anhand von RxJava2 zu geben.
Keine langweilige Theorie, keine umschweifenden Erklärungen – sondern viele konkrete und unterhaltsame Beispiele.
Am Ende hat dann hoffentlich jede und jeder ein gewisses Gefühl dafür, in welchen Situationen und für welche Probleme Reactive Programming eine Erleichterung darstellt. Auch sind die ersten Synapsen für eine “reactive” Denke verdrahtet.
Und vielleicht reicht die Zeit auch noch für einen klitzekleinen Ausblick in verwandte Themen wie z.B. Coroutines.
Test & Betrieb
Gestern lief’s doch noch. Muss ich heute schon wieder alles testen?
- Forschungsergebnisse und eigene Erfahrungen mit Test-Impact-Analyse
Je älter und größer ein Softwaresystem ist, desto wichtiger ist eine verlässliche, automatisierte Testsuite. Insbesondere, wenn ich unter Zeitdruck viele Änderungen umsetze und kurze Release-Zyklen habe.
Wenn das System wächst, muss auch die Testsuite wachsen. Damit steigt aber auch die Ausführungsdauer. Wir sehen in der Praxis immer öfter Suites, die mehrere Stunden oder sogar Tage laufen. Langlaufende Suites werden aber typischerweise seltener ausgeführt als schnelle Suites, z.B. wöchentlich statt täglich. Leider muss ich als Entwickler dadurch immer länger auf Feedback warten, wodurch es immer aufwändiger wird, die Ursache für fehlschlagende Tests zu lokalisieren. Ironischerweise mindert das den Wert der Tests gerade für die Systeme, in denen sie eigentlich besonders wichtig sind.
Test-Impact-Analyse adressiert dieses Problem, indem sie Testfälle aussortiert, die bei der nächsten Ausführung höchstwahrscheinlich keine Fehler finden. Dazu werden die Code-Änderungen analysiert, die seit dem letzten Testlauf durchgeführt worden sind. Außerdem werden Tests so in Reihenfolge gebracht, dass sie möglichst schnell möglichst viele Änderungen durchlaufen. In unseren empirischen Studien konnten so über 90% der Fehler in weniger als 10% der Ausführungszeit gefunden werden.
Der Vortrag stellt Grundlagen, Forschungsergebnisse und empirische Studien zu Test-Impact-Analyse vor. Daneben berichten wir von unseren Erfahrungen damit in der eigenen Entwicklung, in Open-Source Projekten und bei Kunden.
Methodik & Praxis
Faktenbasiertes Debuggen von Software Teams
Passen Architektur einer Anwendung und Kommunikationsstrukturen ihres Entwicklungsteams nicht zueinander, führt das zu Problemen. Sowohl die Architektur, als auch die Teamorganisation entwickeln sich jedoch oft unabhängig voneinander weiter. Wie können wir früh merken wenn Probleme auftreten, um rechtzeitig reagieren zu können?
Im Vortrag stelle ich moderne Analysetechniken vor, die uns hierbei unterstützen. Die Analysen beziehen dabei eine Vielzahl von Daten ein, die wir in der Software-Entwicklung produzieren: Von Code, über Versionshistorien, bis hin zu Traces und Ausführungsinformationen aus Test- und Produktionssystemen. Dadurch erlauben sie faktenbasierte Entscheidungen in einem Umfeld, in dem gerade in Krisensituationen sonst oft emotionsgeladene Diskussionen geführt werden.
Ich stelle im Vortrag sowohl die Analysen, als auch Fallstudien und Beispiele aus 10 Jahren Praxiseinsatz vor. Dabei gehe ich auf Beispiele aus kommerzieller Software und Open-Source Systemen ein. Außerdem stelle ich dar, welche der Analysen wie einfach im eigenen Projekt eingesetzt werden können, und auch, wo ihre Grenzen liegen.
Der Vortrag richtet sich an alle Rollen, die in Software-Projekten mitarbeiten und ist nicht auf Entwickler-, Tester oder Manager beschränkt.
Core Java & JVM-Sprachen
Workflows mit BPMN & Business Rules mit DMN
- Open Source und in Action mit Camunda BPM
Erwarten Sie plumpes Marketing für unsere BPM Platform! Ähm – wie bitte? Nein – natürlich das genaue Gegenteil! Im Vortrag möchte ich live demonstrieren (und codieren!) wie bestimmte Sachverhalte in BPMN 2.0 (Workflows) und vor allem auch dem brandneuen DMN Standard (Business Rules mit Entscheidungstabellen) grafisch modelliert und dann direkt auf einer Java Engine ausgeführt werden. Dazu verwende ich die quelloffene Camunda BPM Platform – so dass alles direkt zu Hause nachgebaut werden kann! In der Session diskutiere ich mögliche Architekturen von klassischer SOA bis zu Spring Boot basierenden Microservices. Natürlich dürfen Best Practices sowie ein bisschen Meinung nicht fehlen, z.B. dass “Zero-Code-Lügen¿ in die Märchenbücher gehören – und nicht in Marketingmaterialien der Hersteller!
Architektur
Vom Wiegen allein wird die Sau nicht fett – von Qualitätsanalyse zu wirksamer Qualitätsverbesserung
Für Java gibt es Qualitätsanalysewerkzeuge wie Sand am Meer: Architektur-Konformitätsanalysen erkennen Verletzungen der Soll-Architektur im Code. Clone Detection erkennt Copy-Paste-Programmierung und damit zukünftige Wartungsprobleme. Strukturanalysen erkennen unverständliche Quelltextabschnitte. Und viele mehr. Richtig eingesetzt erkennen sie Probleme früh, wenn ihre Behebung noch kostengünstig ist. Oft sind die Werkzeuge dabei sogar kostenfrei.
Sie werden auch von vielen Teams eingesetzt. Meistens führen sie jedoch nicht zu Qualitätsverbesserungen. Was macht sie für wenige Teams wertvoll, für die meisten aber scheinbar nutzlos?
Die Ursachen sind vielfältig, aber interessanterweise bei den meisten Teams die gleichen. Dieser Vortrag stellt Erfahrungen, Lessons Learned und Best Practices aus sieben Jahren Praxiseinsatz in unterschiedlichen Teams, Domänen und Firmen vor.
Dabei gebe ich konkrete Empfehlungen und gehe neben technischen Faktoren auch auf Prozesse und Change-Management ein.
Sonstiges
Bessere Präsentationen für Entwickler und Architekten
Wer kennt sie nicht aus seinem beruflichen Alltag: tödlich langweilige, mit Details überhäufte PowerPoint Präsentationen, die die Zuhörer und Leser mit Bullet-Point Wüsten in den Schlaf treiben und primär der Selbstbeweihräucherung des Referenten dienen? Anders gefragt: wer ist als Entwickler oder Architekt schon einmal mit einer Präsentation, in der man seinem Management eine tolle neue Technologie schmackhaft machen wollte, an eine Wand gelaufen weil man einfach nicht die richtigen Worte fand um Zugang zu seinem Chef (Chef) zu erhalten?
Solche Situationen wird jeder, der im IT- oder Projektgeschäft tätig ist, nicht nur einmal in seiner Laufbahn erleben. Des Weiteren hat in den letzten Jahren das Buch Presentation Zen von Garr Reynolds insbesondere auf Konferenzen zu einer spürbaren Veränderung im Entwurf von Schaubildern geführt. Oft sind die eben genannten Bullet-Points verschwunden und wurden durch großflächige Bilder mit wenig Text ersetzt. Allerdings wirkt der eben genannte Stil im Geschäftsleben, welches sich auf das Tagesgeschäft konzentriert und sich abseits von Sales-Pitches o.ä. bewegt, oft unangebracht. Dabei ist das Erstellen guter Präsentationen kein Hexenwerk, welches nur Unternehmensberatern oder Design Spezialisten vorbehalten ist. Jeder kann gute Präsentationen erstellen. Stellen wir einmal das Layout und Design der Folien zurück, werden wir erkennen, dass die Basis eine solide Story und eine gute Argumentations-Kette sein muss. Genau an dieser Stelle setzt dieser Vortrag an und vermittelt Ihnen ausgehend von einer Idee oder einem Thema grundlegende Techniken zur Vorbereitung, Argumentation, Storybuilding und schließlich zum Entwurf einer gelungenen Präsentation.
Rich Clients
Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript
Get introduced to the Vaadin framework by one of its core developers. The Vaadin provides a desktop-like programming model on the server for creating Rich Internet Applications (RIAs) in plain Java – without the need for HTML, XML, plug-ins or JavaScript.
In this session, Joonas lays out the key concepts of the server-side RIA development model and compares it to client-side RIA. To demonstrate the use of framework, an example application is developed during the session step-by-step. The presentation is concluded with pointers on how to start developing your own applications with Apache-licensed Vaadin-framework.
You’ll learn:
- How to create a desktop like web application in Java
- Difference between page oriented, client-side RIA and server-side RIA architectures
- How Vaadin can be extended with Google Web Toolkit
Entwicklungsprozess
Liebling, ich habe den Build geschrumpft!
Softwareentwickler lieben Continuous Integration (CI): Jede Codeänderung wird innerhalb von Minuten bestätigt oder als fehlerhaft erkannt. Risiken werden kleiner, Projektleiter gelassener, Refactorings mutiger, Software besser.
Lange Buildzeiten sind jedoch die Achillesferse der CI. Praktisch jedes Entwicklerteam stellt sich daher irgendwann die Frage: “Leute, wie schrumpfen wir den Build zurück?”
Wir werden Ansätze betrachten, wie Buildzeiten verkürzt werden können und wie ein CI-System dabei helfen kann. Diese Vorschläge umfassen sowohl “tiefhängende Früchte”, die also mit wenig Aufwand schnelle Erfolge bringen können, aber auch ausbaubare Lösungen, die etwas mehr an strategischer Investition erfordern. Der Schwerpunkt wird auf der Parallelisierung von verteilten Builds liegen – und warum diese einfache Idee in der Praxis fast immer kniffliger ist als erwartet.
Die konkrete Umsetzung wird anhand von Live-Demos mit dem CI-System “Hudson” (http://hudson-ci.org) gezeigt. Und natürlich sind wieder eXtreme-Feedback-Devices mit von der Partie…
Butler und Baumeister – Kontinuierliche Integration mit Hudson
Hudson (https://hudson.dev.java.net) ist ein Java-basiertes Continuous-Integration-System. Entwickler und Teamleiter können damit wichtige Aspekte der Softwareerstellung automatisieren und so mehr Transparenz in IT-Projekte bringen.
Über 140 Plug-Ins sind bereits für unterschiedlichste Automatisierungsaufgaben verfügbar: vom Checkout zum Deployment, von der Codemetrik bis zur Ansteuerung von sprechenden Hasen.
Hudson muss den Vergleich mit den “üblichen Verdächtigen” seiner Gattung wie etwa CruiseControl nicht scheuen. Im Gegenteil: In vielen Fällen etabliert sich Hudson sogar als deren Ablösung. Für sein Potenzial spricht auch die Auszeichnung mit dem “Duke‘s Choice Award” in der Kategorie “Developer Solutions” auf der JavaOne 2008. Hudson ist kostenlos, Open Source, und wird von einer äußerst rührigen Entwicklergemeinde vorangetrieben – vor allem aber ist es praxiserprobt.
Hudson bietet insbesondere:
- Einfache Installation – im Extremfall mit nur einem Klick.
- Bequeme Konfiguration und Bedienung per Weboberfläche
- Direkte Unterstützung von Builds auf Basis von Ant, Maven, Shellskripten oder Windows-Batchdateien. Darüberhinaus existieren bereits Plug-Ins für Gant, Groovy, MSBuild, NAnt, Rake und Ruby.
- Umfangreiche Kommunikationsmittel wie E-Mail, RSS, IM-Integration oder Permalinks.
- Ansprechende Visualisierung von Statistiken, z.B. von JUnit- oder TestNG-Ergebnissen.
- Verteilte Builds über mehrere Rechner
- Fernsteuerbarkeit durch Remoting-Schnittstelle
Folgende Leitfragen der Präsentation werden illustriert durch eine durchgängige Live-Demonstration mit Extreme-Feedback-Anzeigen:
- Welche Vorteile bringt kontinuierliche Integration?
- Was macht Hudson so besonders?
- Wie gelingt die Hudson-Einführung sowohl aus technischer als auch aus kultureller Sicht?
- Welche Weiterentwicklungen für Hudson sind geplant?
Implementing Enterprise Integration Patterns with Apache Camel
In einer zunehmend vernetzten und automatisierten Welt wird die Integration von IT-Systemen immer bedeutender und stellt oft eine große Herausforderung für Software- Architekten und Entwickler dar. Mit dem Einsatz von Enterprise Integration Patterns (http://www.enterpriseintegrationpatterns.com), die bewährte Integrationslösungen beschreiben, kann diese Aufgabe wesentlich vereinfacht werden.
Nach einer kurzen Erläuterung einiger wichtiger Enterprise Integration Patterns, stellt Eduard Hildebrandt in diesem Vortrag das Open-Source Framework “Apache Camel” (http://activemq.apache.org/camel) vor und zeigt wie es unter Verwendung von minimalen Java oder XML Code dazu eingesetzt werden kann leistungsfähige Enterprise Integration Patterns zu implementieren um Systeme und Services über unterschiedliche Transport-Protokolle und Datenformate zu integrieren. Weiterhin wird auf die Einsatzmöglichkeiten von Apache Camel zur Überwachung und Test von Webservices eingegangen.
Programmieren mit Parametrisierten Typen in Java 5.0
Die Version 5.0 der Java Standard Edition hat einige Änderungen an der Sprache und den Plattform-Bibliotheken gebracht. Insbesondere die Einführung von parameterisierten Typen sowie deren konsequente Verwendung im Collection Framework und anderen Teilen des JDK betrifft nahezu jeden Java-Entwickler, der Java 5.0 einsetzen will. Zwar wurde mit parameterisierten Typen schon lange vor ihrer Freigabe im Herbst 2004 experimentiert. Ihre endgültige Form, wie seit Java 5.0 verfügbar, weicht aber stark von den anfänglichen Java Generics ab. Insbesondere die sogenannten Wildcards – seltsame syntaktische Konstrukte mit Fragezeichen – wurde erst kurz vor der Freigabe von Java 5.0 in die Sprache aufgenommen. Nun lachen diese Wildcards dem Java-Entwickler bei jedem Blick in die Java-API-Dokumentation entgegen.
In dieser Session sehen wir uns das Sprachmittel der parametrisierten Typen an. Da sicher die meisten Java-Entwickler bereits eine ungefähre Vorstellung von Java Generics haben werden, liegt der Schwerpunkt auf den weniger offensichtlichen Aspekten, wie zum Beispiel den Wildcard-Instantiierungen. Daneben werden neue Programmiertechniken diskutiert, die sich aus der Parametrisierung von Typen und Methoden ergeben. Dazu gehört die Nutzung von Typinformation in Form von Class<T>-Objekten, flexibles API-Design unter Verwendung von Wildcards sowie Kompatibilitätserwägungen bei der Generifizierung existierenden APIs.