<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://it-hempel.de/feed.xml" rel="self" type="application/atom+xml" /><link href="https://it-hempel.de/" rel="alternate" type="text/html" /><updated>2026-03-12T15:47:30+01:00</updated><id>https://it-hempel.de/feed.xml</id><title type="html">IT-Consulting Hempel</title><subtitle>Software-Entwicklung aus dem Fichtelgebirge</subtitle><author><name>Sebastian Hempel</name><email>shempel@it-hempel.de</email></author><entry><title type="html">Digital Crafts Day 2026 - Vortrag zum Thema PQC</title><link href="https://it-hempel.de/security/pqc-vortrag-auf-dcd-2026/" rel="alternate" type="text/html" title="Digital Crafts Day 2026 - Vortrag zum Thema PQC" /><published>2026-03-12T14:56:00+01:00</published><updated>2026-03-12T14:56:00+01:00</updated><id>https://it-hempel.de/security/pqc-vortrag-auf-dcd-2026</id><content type="html" xml:base="https://it-hempel.de/security/pqc-vortrag-auf-dcd-2026/"><![CDATA[<div class="paragraph">
<p>Am 13. März 2026 findet zum 4. mal der
<a href="https://dc-nordoberpfalz.de/DigitalCraftsDay/2026">Digital Crafts Day</a> statt. Die
vom Meetup <a href="https://dc-nordoberpfalz.de/">Digital Craftsmanship Nordoberpfalz</a> in
Zusammenarbeit mit der IHK Regensburg für Oberpfalz organisierte 1 tägige
Konferenz nutzt dafür wieder zwei Hörsäle der Ostbayerischen Technischen
Hochschule Amberg-Weiden. Ich habe bereits die letzten drei Digital Crafts Days
besucht war jedesmal von den Vorträgen und der Organisation begeistert.</p>
</div>
<div class="paragraph">
<p>Bisher war es mir allerdings nicht gelungen, dort auch selbst einen Vortrag zu
halten. Dieses Jahr hat es nun geklappt. Ich werde in meinem Vortrag "Post
Quantum Cryptography (PQD) - Es ist Zeit zu handeln" erläutern, warum wir
bereits jetzt - weit vor der Verfügbarkeit von Quanten Computern - auf die
Nutzung von Post Quantum Kryptographie umsteigen müssen. Ich Beschreibe die
Gefahren, die von Quanten Computern für unsere derzeitige Kryptographie ausgehen
und was wir dagegen tun können.</p>
</div>
<div class="paragraph">
<p>Die Folien stehen bereits zum <a href="https://it-hempel.de/files/talks/Post_Quantum_Kryptographie_DCD2026.pdf">Download</a> zur Verfügung.</p>
</div>
<iframe src="/files/talks/Post_Quantum_Kryptographie_DCD2026.pdf#toolbar=0&Fit" width="710" height="460">
</iframe>]]></content><author><name>Sebastian Hempel</name><email>shempel@it-hempel.de</email></author><category term="security" /><category term="java" /><category term="security" /><category term="cryptografie" /><category term="talks" /><summary type="html"><![CDATA[Am 4. Digital Crafts Day halte ich einen Vortrag zum Thema Post Quantum Cryptography (PQC)]]></summary></entry><entry><title type="html">JCON 2024</title><link href="https://it-hempel.de/software-development/jcon-2024/" rel="alternate" type="text/html" title="JCON 2024" /><published>2024-05-18T16:26:00+02:00</published><updated>2024-05-18T16:26:00+02:00</updated><id>https://it-hempel.de/software-development/jcon-2024</id><content type="html" xml:base="https://it-hempel.de/software-development/jcon-2024/"><![CDATA[<div class="paragraph">
<p>Ich hatte das Vergnügen auch in diesem Jahr an der Community <a href="https://2024.europe.jcon.one/Konferenz" target="_blank" rel="noopener">JCON</a> in Köln teilnehmen zu können.</p>
</div>
<div class="paragraph">
<p>Die Konferenz fand vom 14. bis 16. Juni im Cinedom Köln statt.
Am Tag vor der eigentlichen Konferenz bestand die Möglichkeit an Workshops teilzunehmen.</p>
</div>
<div class="paragraph">
<p>Die Konferenz bietet ein breites Spektrum an allen Themen rund um das Java Ökosystem.
Die Teilnehmer und Speaker sind international.
Der Community Charakter wird hoch gehalten und es gibt viele Möglichkeiten mit Teilnehmern und Speakern ins Gespräch zu kommen.
Ich hatte die Gelegenheit viele Gespräche zu führen.</p>
</div>
<iframe src="/files/talks/Software_Bill_of_Materials_JCON2024.pdf#toolbar=0&Fit" width="710" height="460">
</iframe>
<div class="paragraph">
<p>Am dritten Tag der Konferenz durfte ich einen Vortrag über Software Bill of Materials (SBOM) halten.
In diesem Vortrag habe ich auf die in Zukunft bestehende Verpflichtung zur Erstellung von SBOMs für die meiste Software hingewiesen.
Diese Verpflichtung kann im Java Ökosystem aber relativ einfach erfüllt werden.
Weiterhin habe ich auf die Möglichkeiten hingewiesen, mit SBOMs die Erkennung, Verwaltung und Behebung von CVEs zu verwalten.</p>
</div>
<div class="paragraph">
<p>Die Folien zum Vortrag können als <a href="https://it-hempel.de/files/talks/Software_Bill_of_Materials_JCON2024.pdf">PDF</a> herunter geladen werden.</p>
</div>]]></content><author><name>Sebastian Hempel</name><email>shempel@it-hempel.de</email></author><category term="software-development" /><category term="java" /><category term="security" /><category term="talks" /><summary type="html"><![CDATA[Auch in 2024 fand die JCON Europe in Köln statt. In diesem Jahr habe ich einen Vortrag über SBOMs gehalten.]]></summary></entry><entry><title type="html">ZED stellt Java-Extension zur Verfügung</title><link href="https://it-hempel.de/software-development/zed-java-extension/" rel="alternate" type="text/html" title="ZED stellt Java-Extension zur Verfügung" /><published>2024-05-01T19:12:00+02:00</published><updated>2024-05-01T19:12:00+02:00</updated><id>https://it-hempel.de/software-development/zed-java-extension</id><content type="html" xml:base="https://it-hempel.de/software-development/zed-java-extension/"><![CDATA[<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Seit wenigen Tagen steht die Extension <a href="https://github.com/ABckh/zed-java-language-support-jdtls" target="_blank" rel="noopener">Java with Eclipse JDTLS</a> für den OpenSource Editor <a href="https://zed.dev/" target="_blank" rel="noopener">ZED</a> zur Verfügung.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="/assets/images/posts/ZED-Editor.png" alt="ZED Editor">
</div>
</div>
<div class="paragraph">
<p>Ich beobachte die Entwicklung dieser neuen, vielversprechenden IDE bereits seit einiger Zeit.
Mit der neuen Extension kann ich auch für die Java-Entwicklung auf ZED zurück greifen.
Noch reicht der Funktionsumfang der Extension nicht an die Funktionalität von entsprechenden Extension for Visual Studio Code oder ausgewachsenen Java IDEs wie IntelliJ oder Eclipse heran.
Für die erste veröffentlichte Version funktioniert aber bereits mehr als ich vermutet hatte.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="was-ist-zed">Was ist ZED?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>ZED ist ein neuer Editor / IDE für die Entwicklung von Software.
Der Editor wird vom Unternehmen ZED Industries entwickelt.
Die Software wurde am 24.01.2024 unter OpenSource (GPL) zur Verfügung gestellt.
Davor war die Software Closed Source.
Derzeit steht nur eine Version für macOS zur Verfügung.
Die Unterstützung anderer Plattformen ist allerdings geplant.</p>
</div>
<div class="paragraph">
<p>Die Macher stellen heraus, dass der Editor für hohe Performance konzipiert worden ist.
Durch die eigens erstellte Library GPUI wird zum Rendering des Texte die GPU statt die CPU verwendet.
Auch sonst nutzt der in der Programmiersrpache Rust entwickelt Editor so viel Cores wie möglich, um schnelle Antwortzeiten zu ermöglichen.</p>
</div>
<div class="paragraph">
<p>Über einen integrierten Chat können mehrere Entwickler:innen gleichzeitig am Code arbeiten.
Wer möchte kann ChatGPT von OpenAI mittels seines eigenen OpenAI API keys integrieren.</p>
</div>
<div class="paragraph">
<p>Für mich besonders angenehm ist der fest in die Software integrierte VIM Modus.
Somit entfällt die Suche nach einer entsprechenden Extension.
Auch gibt es so weniger Kollisionen zwischen VIM Funktionen und evtl. Short-Cuts.</p>
</div>
<div class="paragraph">
<p>ZED kann als Nachfolger von Atom gesehen werden.
Viele Mitglieder des Teams rund um ZED waren auch an der Entwicklung des Atom Editors von GitHub beteiligt.
Es ist somit einiges Wissen rund um die Entwicklung von Editoren vorhanden.</p>
</div>
<div class="paragraph">
<p>Seit der Freigabe des Codes als OpenSource werden immer mehr Exension veröffentlicht.
Auch liest man immer wieder von neuen Entwickler:innen auf dem Projekt bei GitHub.
Somit hat sie der OpenSource Schritt mehr als positiv für die Entwicklung des Editors ausgewirkt.</p>
</div>
<div class="paragraph">
<p>Ein ausführlicher Bericht über den Editor finden sich bei heise.de: <a href="https://www.heise.de/hintergrund/Sourcecode-Editor-Zed-Erfahrungen-aus-einem-Jahr-mit-einem-Underdog-9623943.html" target="_blank" rel="noopener">Sourcecode-Editor Zed: Erfahrungen aus einem Jahr mit einem Underdog</a></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="funktionsumfang-der-extension">Funktionsumfang der Extension</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Die Extension zur Unterstützung der Programmiersprache Java wurde erst vor wenigen Tagen veröffentlicht.
Noch sind nicht alle (notwendigen) Funktionen enthalten.
Es geht aber schon recht viel.</p>
</div>
<div class="paragraph">
<p>Die Extension nutzt den von Visual Studio Code verwendeten Language Server, der auf dem Eclipse JDT aufbaut.
Damit profitiert die Extension von der langjährigen Erfahrung von Eclipse.
Durch die Nutzung des Language Servers fällt der notwendige Code recht gering aus.
Einzig für das Syntax Highlightning enthält die Extension entsprechende Definitionen für ZED.</p>
</div>
<div class="paragraph">
<p>Es funktioniert für das tägliche Arbeiten bereits sehr viel:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Erkennen von Syntax-Fehlern mit Vorschlägen zur Behebung</p>
</li>
<li>
<p>Erstellen von import Statements für Typen</p>
</li>
<li>
<p>Organisieren von Imports</p>
</li>
<li>
<p>Code-Vervollständigung</p>
</li>
<li>
<p>Anzeige von JavDoc für Klassen und Methoden</p>
</li>
<li>
<p>einfache Refactorings</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Die gesamte Funktionalität wird vom Language Server zur Verfügung gestellt, dessen Integration in ZED ohne Probleme verläuft.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="was-noch-fehlt">Was noch fehlt?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Grundsätzlich kann ZED aber noch nicht als "vollständige" IDE eingesetzt werden.
Dazu fehlen dem Projekt noch grundlegende Funktionen, die sich in Konzeption bzw. Entwicklung befinden.</p>
</div>
<div class="paragraph">
<p>So gibt es noch keine Unterstützung zur Ausführung von Programmen oder Unit-Tests.
Das kann derzeit nur durch direkte Kommandos im integrierten Terminal erfolgen.
Gerade das Ausführen von Unit-Tests ist dadurch recht umständlich.</p>
</div>
<div class="paragraph">
<p>Genausowenig wird derzeit das Debugging untersützt.
Diese Funktion befindet sich in Diskussion.
Es ist nicht abzuschätzen ob und wenn ja in welcher Form das in Zukunft erfolgen wird.</p>
</div>
<div class="paragraph">
<p>Die Informationen aus der pom.xml eines Maven Projekts werden gelesen und verwendet.
Somit werden auch in Maven definierte Dependencies erkannt und können beim Bearbeiten von Java Code verwendet werden.
Es gibt aber keine direkte Intregration in ZED um Maven Befehle auszuführen.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="fazit">Fazit</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Alles in Allem bin ich mit der ersten veröffentlichten Version der Extension recht zufrieden.
Ich habe damit schon etwas Code geschrieben und freue mich auf zukünftige Versionen mit weiterm Funtkionsumfangs.</p>
</div>
<div class="paragraph">
<p>Einige Dinge müssen aber erst von ZED selbst unterstüzt werden.
Daher wird es sicherlich noch einige Zeit dauern, bis ich ZED als Alternative zu Visual Studio Code nutzen kann.</p>
</div>
<div class="paragraph">
<p>Ich finde es aber gut, wenn ein weiterer "PLayer" auf dem Markt erscheint.
Ich selbst würde mich freuen, wenn ich irgendwann einmal mit dem wirklich sehr flotten und minimalistisch gestalteten Editor arbeiten könnte.</p>
</div>
</div>
</div>]]></content><author><name>Sebastian Hempel</name><email>shempel@it-hempel.de</email></author><category term="software-development" /><category term="java" /><category term="opensource" /><summary type="html"><![CDATA[Seit kurzem steht die Extension Java with Eclipse JDTLS für die neue OpenSource IDE ZED zur Verfügung.]]></summary></entry><entry><title type="html">20 Jahre IT-Consulting Hempel</title><link href="https://it-hempel.de/it-hempel/20-jahre-it-consulting-hempel/" rel="alternate" type="text/html" title="20 Jahre IT-Consulting Hempel" /><published>2023-11-26T02:00:00+01:00</published><updated>2023-11-26T02:00:00+01:00</updated><id>https://it-hempel.de/it-hempel/20-jahre-it-consulting-hempel</id><content type="html" xml:base="https://it-hempel.de/it-hempel/20-jahre-it-consulting-hempel/"><![CDATA[<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Am 2. August 2023 wurde IT-Consulting Hempel 20 Jahre alt.</p>
</div>
<div class="paragraph">
<p>Ich bin stolz nach 20 Jahren immer noch als Selbständiger unterwegs zu sein.
Viel hat sich in diesen Jahren geändert, aber meine Leidenschaft für die Software-Entwicklung und die Möglichkeit Kunden mit meinem Wissen und meiner Erfahrung zu unterstützen hat nie nachgelassen.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="was-war-vor-20-jahren">Was war vor 20 Jahren</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Um das Alter besser einordnen zu können, habe ich bei <a href="https://de.wikipedia.org/wiki/2003" target="_blank" rel="noopener">Wikipedia</a>‚ einige Ereignisse des Jahres 2003 - dem Gründungsjahr von IT-Consulting Hempel - zusammen gesucht.
Dabei finden sich interessante Parallelen zu Ereignissen im Jahr 2023 und den Jahren davor.</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">20.06.2003</dt>
<dd>
<p>Die Wikimedia Foundation wird gegründet. Sie ist die Organisation hinter allen Wikipedias weltweit.</p>
</dd>
<dt class="hdlist1">10.04.2003</dt>
<dd>
<p>Die Fluggesellschaften Air France und British Airways kündigen an, den Linienflug mit der Concorde in 2003 einzustellen.</p>
</dd>
<dt class="hdlist1">08.08.2003</dt>
<dd>
<p>Hitzewelle in Deutschland. Es wird die bis dahin höchste Temperatur mit 40,3 Grad in Deutschland gemessen.</p>
</dd>
<dt class="hdlist1">18.12.2003</dt>
<dd>
<p>Der Linux Kernel erscheint in der Version 2.6.</p>
</dd>
<dt class="hdlist1">12.03.2003</dt>
<dd>
<p>Die WHO stuft die in Ostasien ausgebrochene Lungenkrankheit SARS als weltweite Bedrohung ein.</p>
</dd>
</dl>
</div>
<div class="paragraph">
<p>Alan Kay bekommt unter anderem für seine Arbeit an der Programmiersprache Smalltalk den Turing Award.</p>
</div>
<div class="paragraph">
<p>Es ist interessant und erschreckend, dass wir seit 20 Jahren mit Wetterextremen zu kämpfen haben und bis heute nicht gewillt sind, gegen die Ursachen mit aller Kraft vorzugehen.
Der Ausbruch von SARS im Jahr 2003 hatte nur einen winzigen Bruchteil der Auswirkungen wie der Ausbruch von SARS-COV2 im Jahr 2019.</p>
</div>
<div class="paragraph">
<p>Eine der Konstanten in den letzten 20 Jahren ist die stetige <a href="https://en.wikipedia.org/wiki/Linux_kernel_version_history" target="_blank" rel="noopener">Weiterentwicklung</a> des Linux Kernels.
Der Kernel ist inzwischen bei der Version 6.6 angekommen.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rückblick-auf-den-vorausblick">Rückblick auf den Vorausblick</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Vor 10 Jahren konnte ich den 10. Geburtstag von IT-Consulting Hempel und meiner Selbständigkeit feiern.
Bei dieser Gelegenheit habe ich ein <a href="/it-hempel/10-jahre-it-consulting-hempel/">Ausblick</a> auf die Zukunft gewagt.
Vor einem Rückblick auf die letzten 10 Jahre möchte ich prüfen, was von meinen Voraussagen eingetreten ist und was nicht.</p>
</div>
<div class="paragraph">
<p>Das Interesse am Aufbau von <strong>Build Umgebungen</strong> ist weiterhin vorhanden.
Allerdings hat sich der Schwerpunkt geändert.
Waren früher häufig Umgebungen mit Jenkins oder ähnlichen CI-Servern gefragt, werden Build-Umgebungen immer öfter in der Cloud aufgebaut.</p>
</div>
<div class="paragraph">
<p>Die Nachfrage an Dienstleistungen zum <strong>Konfigurationsmanagement System Puppet</strong> hat vor 10 Jahren stark angezogen.
In den letzten Jahren merkt man aber auch in diesem Bereich den Einsatz von Cloudlösungen.
Es werden ab und an noch Schulungen in diesem Bereich nachgefragt.
Die große Menge arbeitet aber inzwischen mit Lösungen wie Ansible oder greift auf fertig konfigurierte As-A-Service Dienste zurück.
Das Wissen um Puppet ist immer noch wertvoll.
Es gibt immer weniger Berater in diesem Bereich.</p>
</div>
<div class="paragraph">
<p>Die Nutzung von <strong>OpenSource</strong> Software in Unternehmen hat nicht nachgelassen.
Ich würde behaupten, dass OpenSource in so gut wie jedem Unternehmen eingesetzt wird.
Es ändert sich allerdings auch hier die Art des Einsatzes.
Betriebssysteme und Dienste wie z.B. Apache treten in den Hintergrund.
Die Nutzung von speziellen Diensten und Tools dominiert.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="rückblick-auf-die-letzten-10-jahre">Rückblick auf die letzten 10 Jahre</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Die letzten 10 Jahre haben viele spannende Projekte gebracht.
Die Projekte lassen sich in zwei Gruppen aufteilen: Software-Entwicklung und Operations.</p>
</div>
<div class="paragraph">
<p>Im Bereich <strong>Operations</strong> habe ich mich vor allem mit dem Konfigurationsmanagement System Puppet beschäftigt.
Hier habe ich zwei verschiedene Schulungen konzipiert.
Eine Schulung für die Grundlagen und eine mit erweiterten Themen wie eigene Erweiterungen.
Die Schulungen habe ich mehrfach für verschiedene Schulungsunternehmen und Kunden durchgeführt.
Die Einsatzorte reichten von Karlsruhe im Süden bis Bremen im Norden.</p>
</div>
<div class="paragraph">
<p>Zwei Kunden habe ich beim Aufbau einer Puppet-Umgebung und beim laufenden Betrieb unterstützt.
Dazu gehörte auch ein umfangreiches Modulsystem zur einfachen Konfiguration von JavaEE / JakartaEE Application-Servern.</p>
</div>
<div class="paragraph">
<p>Es gab in diesem Bereich aber auch Projekte, bei denen ich mit Hilfe des CI-Servers Jenkins eine Lösung zum einfachen Bau von RPM Paketen erstellt habe.
Hier habe ich mich intensiver mit den Jenkins Pipelines und der Programmierung in Groovy beschäftigt.</p>
</div>
<div class="paragraph">
<p>Im Bereich <strong>Software-Entwicklung</strong> durfte ich mich in den letzten 10 Jahren wieder auf das Java Ökosystem konzentrieren.
Besonders reizvoll war hier die Unterstützung eines Kunden beim Umstieg von C# auf Java.
Dazu gehörte ein kurzer Ausflug in die Welt von Industrie 4.0 und BigData Architekturen.
Hier habe ich viele neue Konzepte kennen gelernt.
Bei der Schulung von alteingesessenen C# Entwicklern habe ich selbst Java neue kennen gelernt.</p>
</div>
<div class="paragraph">
<p>Das wohl größte Projekt war die Entwicklung einer RA (Registration Authority) zur automatischen Ausstellung von TLS-Zertifikaten.
Die Anwendung durfte ich von Anfang an konzipieren und entwickeln.
In einem zweiten Schritt stand die Implementierung des ACME Protokolls an, das ich während der Corona-Zeit so gut wie alleine umsetzten durfte.
Dieses Projekt ist weiterhin am laufen und macht immer noch sehr viel Spass.
Das Projekt hat inzwischen mehrere Phasen hinter sich mit wechselnden Projektmitgliedern und Aufgaben.
Die Anwendung hat sich von einer JakartaEE Lösung hin zu einer Quarkus Anwendung entwickelt.</p>
</div>
<div class="paragraph">
<p><strong>Corona</strong> hat meinen Alltag beeinflusst und geändert.
War ich vor Corona jeden Tag unterwegs um meine Arbeit beim Kunden vor Ort zu verrichten, kann ich jetzt so gut wie alle Projekte aus meinem eigenen Büro erledigen.
Während der Pandemie und darüber hinaus werden Schulungen immer öfter rein online abgehalten.
Auch Konferenzen nutzten und nutzen diese Konstellation.
Ich bin aber froh, seit einiger Zeit auch wieder zur "normalen" Konferenzen zu fahren.
Der Austausch mit Software-Entwickler:innen ist mir sehr wichtig.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="was-bringt-die-zukunft">Was bringt die Zukunft?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Rückblickend gesehen, lag ich mit meinen Gedanken für die Zukunft vor 10 Jahren nicht so falsch.
Was werden die nächsten Jahre für mich bringen?</p>
</div>
<div class="paragraph">
<p>Ich möchte weiter versuchen sowohl im Bereich der Software-Entwicklung als auch von Operations tätig zu sein.
Den Schwerpunkt möchte ich auf den Bereich der Software-Entwicklung setzen.
Konzentrieren werde ich mich auf das Java Ökosystem.
Ich bin aber auch noch Sprachen wie Go, Rust oder Swift gegenüber offen.</p>
</div>
<div class="paragraph">
<p>Neben dem reinen Programmieren möchte ich in Zukunft vermehrt im Bereich der Konzeption und Architektur arbeiten.
In den letzten Projekten konnte ich schon die ersten Schritte in diese Richtung unternehmen.</p>
</div>
<div class="paragraph">
<p>Der Einfluss von KI in den verschiedensten Varianten wird zunehmen.
Noch kann ich nicht abschätzen, wie ich in Zukunft mit dieser Technologie umgehen werde.
Ich informiere mich laufend über den aktuellen Stand der Dinge.
Angst, dass mir diese Technologie die Arbeit weg nehmen wird, habe ich nicht.
Es wird sicherlich noch einige Zeit dauern, bis der Einsatz klar wird.
Derzeit ist das Thema getrieben vom Hype.</p>
</div>
<div class="paragraph">
<p>Ich freue mich auf die nächsten Jahre und hoffe bestehende Kunden weiter unterstützen zu können und auch neuen Kunden mit Rat und Tat zur Seite zu stehen.</p>
</div>
</div>
</div>]]></content><author><name>Sebastian Hempel</name><email>shempel@it-hempel.de</email></author><category term="it-hempel" /><category term="ithempel" /><summary type="html"><![CDATA[Am 2. August 2023 feierte IT-Consulting Hempel sein 20-jähriges Bestehen. Ein Blick zurück und voraus.]]></summary></entry><entry><title type="html">Kryptographie für Einsteiger</title><link href="https://it-hempel.de/software-development/Kryptographie-fuer-Java-Einsteiger/" rel="alternate" type="text/html" title="Kryptographie für Einsteiger" /><published>2021-10-06T15:04:00+02:00</published><updated>2021-10-06T15:04:00+02:00</updated><id>https://it-hempel.de/software-development/Kryptographie-fuer-Java-Einsteiger</id><content type="html" xml:base="https://it-hempel.de/software-development/Kryptographie-fuer-Java-Einsteiger/"><![CDATA[<div class="paragraph">
<p>Nach langer Zeit habe ich wieder einmal einen Vortrag für eine Konferenz eingereicht.
Der Vortrag wurde angenommen und so habe ich am 06.10.2021 meinen Vortrag Kryptographie for Einsteiger auf der <a href="https://jcon.one" target="_blank" rel="noopener"><em>JCON-ONLINE 2021</em></a> gehalten.</p>
</div>
<div class="paragraph">
<p>Ich habe die Erfahrung gemacht, dass viele Entwickler das Thema meiden.
Kommen sie dann aber doch nicht darum herum, fehlen oft die Grundlagen um Probleme lösen zu können.</p>
</div>
<iframe src="/files/talks/Kryptographie_fuer_Einsteiger.pdf#toolbar=0&Fit" width="710" height="460">
</iframe>
<div class="paragraph">
<p>Mein Vortrag führt in die Grundlagen der Kryptografie ein: Symmetrische- und Asymmetrische Verschlüsslung, Hash-Funktionen, Chains und Ciphers werden erläutert.
Am Ende gibt es noch Tipps, was bei den üblichen Fehlern zu tun ist.</p>
</div>
<div class="paragraph">
<p>Die Folien können auch als <a href="https://it-hempel.de/files/talks/Kryptographie_fuer_Einsteiger.pdf">PDF</a> heruntergeladen werden.</p>
</div>]]></content><author><name>Sebastian Hempel</name><email>shempel@it-hempel.de</email></author><category term="software-development" /><category term="java" /><category term="cryptografie" /><category term="devops" /><category term="talks" /><summary type="html"><![CDATA[Vortrag über die Grundlagen der Verschlüsselung auf der JCON 2021]]></summary></entry><entry><title type="html">Kryptografie für (Java-)Entwickler</title><link href="https://it-hempel.de/software-development/Kryptografie-fuer-Java-Entwickler/" rel="alternate" type="text/html" title="Kryptografie für (Java-)Entwickler" /><published>2018-09-07T14:57:00+02:00</published><updated>2018-09-07T14:57:00+02:00</updated><id>https://it-hempel.de/software-development/Kryptografie-fuer-Java-Entwickler</id><content type="html" xml:base="https://it-hempel.de/software-development/Kryptografie-fuer-Java-Entwickler/"><![CDATA[<div class="paragraph">
<p>Auch im Jahr 2018 wurde mein Vortrag beim Herbstcampus angenommen.
In diesem Jahr war mein Ziel die Angst von Entwicklern vor der Verschlüsselung zu nehmen.
Ich habe die Erfahrung gemacht, dass viele Entwickler das Thema meiden.
Kommen sie dann aber doch nicht darum herum, fehlen oft die Grundlagen um Probleme lösen zu können.</p>
</div>
<iframe src="/files/talks/Kryptografie_fuer_Java-Entwickler.pdf#toolbar=0&Fit" width="710" height="460">
</iframe>
<div class="paragraph">
<p>Mein Vortrag führt in die Grundlagen der Kryptografie ein: Symmetrische- und Asymmetrische Verschlüsslung, Hash-Funktionen, Chains und Ciphers werden erläutert.
Am Ende gibt es noch Tipps, was bei den üblichen Fehlern zu tun ist.</p>
</div>
<div class="paragraph">
<p>Die Folien können auch als <a href="https://it-hempel.de/files/talks/Kryptografie_fuer_Java-Entwickler.pdf">PDF</a> heruntergeladen werden.</p>
</div>]]></content><author><name>Sebastian Hempel</name><email>shempel@it-hempel.de</email></author><category term="software-development" /><category term="java" /><category term="cryptografie" /><category term="devops" /><category term="talks" /><summary type="html"><![CDATA[Mein Vortrag über Verschlüsselungstechnik auf dem Herbstcampus 2018]]></summary></entry><entry><title type="html">Java Forum Stuttgart 2016</title><link href="https://it-hempel.de/software-development/java-forum-stuttgart-2016/" rel="alternate" type="text/html" title="Java Forum Stuttgart 2016" /><published>2016-07-18T20:09:00+02:00</published><updated>2016-07-18T20:09:00+02:00</updated><id>https://it-hempel.de/software-development/java-forum-stuttgart-2016</id><content type="html" xml:base="https://it-hempel.de/software-development/java-forum-stuttgart-2016/"><![CDATA[<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Das Jahr 2016 entwickelt sich für mich zu dem Jahr mit den bisher meisten Konferenzbesuchen.
Nach den Voxxed Days in Berlin im Januar, der JavaLand im März und der building IoT im Mai stand im Juli das Java Forum Stuttgart auf dem Programm.
Nach mehreren Anläufen habe ich es in diesem Jahr endlich geschafft die Veranstaltung zu besuchen.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="/assets/images/JFS-Logo.jpg" alt="JFS Logo">
</div>
</div>
<div class="paragraph">
<p>Die von der Java User Group Stuttgart organisierte eintägige Konferenz fand in diesem Jahr zum 19. Mal statt.
Wie auf jeder Konferenz hatte ich in jedem Slot die Qual der Wahl welchen Vortrag ich mir anschauen möchte.
Bereits im Vorfeld hatte ich eine Auswahl getroffen, die praktischerweise auch auf meinem Ausweis aufgedruckt war.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="neues-von-junit-architektur-api-und-erweiterbarkeit-in-der-version-5">Neues von JUnit: Architektur, API und Erweiterbarkeit in der Version 5</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Ich habe mich an der Crowdfunding Kampagne zur Weiterentwicklung von JUnit im Jahr 2015 beteiligt.
Anfang diesen Jahres konnte ich bereits die ersten Neuerungen in Blogbeiträgen erfahren.
Der Vortrag von Marc Philipp und Matthias Merdes war die Gelegenheit sich endlich intensiver mit der in diesem Jahr erscheinenden neuen Version von JUnit zu beschäftigen.</p>
</div>
<div class="paragraph">
<p>Zu Beginn des Vortrags stellte Marc Philipp die neue Architektur von JUnit 5 vor.
Innerhalb der Platform findet die eigentliche Ausführung der Unit-Tests statt.
Die Kontrolle der Ausführung wurde von der eigentlichen Ausführung entkoppelt.
Somit müssen IDEs und Build-Tools nichts mehr über die Ausführung wissen.</p>
</div>
<div class="paragraph">
<p>Die Plattform nutz verschiedene &#8220;Laufzeitumgebungen&#8221; für Tests.
Neben der Vintage genannten Umgebung für JUnit Tests vor der neuen Version 5 gibt es die neue Jupiter genannte Umgebung.
In dieser Umgebung finden sich alle Neuerungen für die Programmierung von Tests.</p>
</div>
<div class="paragraph">
<p>Es gibt verschiedene neue Annotationen mit denen z.B. eine ausführliche Bezeichnung von Testklassen und Tests gesetzt werden kann.
Über <code>@Tag</code> können Tests markiert und anschließend nur mit einem bestimmten Tag versehene Tests ausgeführt werden.
Interessant ist auch die Möglichkeit Tests zu verschachteln.
So können Test mit einer gemeinsamen &#8220;Vorgeschichte&#8221; in einer Unterklasse gesammelt werden.
Mit der Annotation <code>@TestFactory</code> steht ein interessanter Mechanismus zur dynamischen Erstellung von Tests zur Verfügung.
Im Vortrag erwähnten Marc und Matthias noch viele weitere Mechanismen und Annotationen, die am besten den <a href="http://2016.java-forum-stuttgart.de/_data/D1_PhilippMerdes.pdf">Folien</a> entnommen werden können.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="spark-vs-flink-rumble-in-the-big-data-jungle">Spark vs. Flink - Rumble in the (Big Data) Jungle</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Einen unterhaltsamen Vergleichen zwischen den Big Data Frameworks Spark und Flink stellten Konstantin Knauf und Michael Pisula vor.
Sie verglichen anhand einer praktischen Aufgabe die beiden Frameworks aus dem Apache Projekt.
So musste in beiden Framework sowohl eine Batch- als auch eine Stream-Verarbeitung umgesetzt werden.
Weiterhin sollten bestehende Daten zur Analyse herangezogen werden.</p>
</div>
<div class="paragraph">
<p>Vorteil von Flink ist dabei, dass es ein &#8220;echtes&#8221; Streaming Framework ist.
Spark hingegen realisiert Streams durch Micro Batches.
Die gestellte Aufgabe konnte von beiden Framework realisiert werden.
Jedes Framework hat dabei in einzelnen Bereichen seine Stärken und Schwächen.</p>
</div>
<div class="paragraph">
<p>Die Antwort welches Framework das bessere ist, kann nur mit einem klaren &#8220;it depends&#8221; beantwortet werden.
Für die eigene Entscheidung sollten dabei auch die Größe der Community mit berücksichtigt werden.</p>
</div>
<div class="paragraph">
<p>Für das konkrete Projekt wurde von den Beiden Apache Flink gewählt.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="klappe-auf-was-macht-die-jvm-denn-da">Klappe auf! Was macht die JVM denn da?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Sehr viel mitnehmen konnte ich vom Vortrag von Tobias Frech.
Er stellte in seinem Vortrag die verschiedenen Werkzeuge des JDK vor, mit denen man Laufzeitproblemen auf den Grund gehen kann.</p>
</div>
<div class="paragraph">
<p>Nach einer kurzen Beschreibung der Tools jps, jinfo, jstat, jstack, jmap und dem zukünftigen Allrounder jcmd beschrieb Tobias am Beispiel eines konkreten Szenarios deren Einsatz.
Mittels Elastic Search wurden die Panama Papers nach bestimmten Personen durchsucht.
In der ersten Konstellation lief Elastic Search unter dem (Open)JDK 7.
Mittels der Befehle zeigte Tobias den Speicher- und CPU-Verbrauch.</p>
</div>
<div class="paragraph">
<p>Nun wurde die Umgebung unter (Open)JDK 8 gestartet.
In dieser Konstellation wurde ein wesentlich niedriger Durchsatz erreicht.
Mittels der Befehle konnte das Bottleneck im Just-In-Time Compiler gefunden werden.
Eine Erläuterung der Ursache und Hinweise zur deren Behebung liefert viele interessante Informationen über die Konfiguration der Java Virtual Machine.</p>
</div>
<div class="paragraph">
<p>Es lohnt sich auf jeden Fall die <a href="http://2016.java-forum-stuttgart.de/_data/D3_Frech.pdf">Folien</a> von Tobias als Grundlage für das weitere Erforschen der JVM-Tools zu nutzen.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="monitoringmetrics-101-leveraging-on-the-power-of-jmx">MonitoringMetrics 101 - Leveraging on the Power of JMX</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Eine Einführung in das Monitoring von Systemen mittels JMX gab Martin Gutenbrunner in seinem <a href="http://2016.java-forum-stuttgart.de/_data/C4_Gutenbrunner.pdf">Vortrag</a>.
Zu Beginn stellte Martin die Unterschiede zwischen Debugging und Monitoring dar.
Auch ging er auf die Unterschiede zwischen aktivem Monitoring (JMX) und passivem Monitoring (z.B. Icinga) ein.
Danach folgte eine kurze Beschreibung der Geschichte von JMX.
Eine Liste mit möglichen JMX Quellen durfte nicht fehlen.
Hier kann man feststellen, dass so gut wie alle in der Java Welt eingesetzten Technologien bereits entsprechende MBeans mitbringen.</p>
</div>
<div class="paragraph">
<p>Interessant waren die Erläuterungen zur Nutzung von JMX.
Dabei wurden die Anforderungen an eine Monitoring aus Sicht von Entwicklern (Dev), dem Betrieb (Ops) und der Fachanwender (Business) beschrieben.
Für alle Zielgruppen stellte Martin Metriken vor, mit denen Aussagen zum Zustand des Systems für die jeweilige Zielgruppe getroffen werden können.
Mit einem interessanten Ausblick auf weitere Techniken zum Monitoring endete der Vortrag.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="apache-kafka-skalierbare-nachrichtenverarbeitung-und-mehr">Apache Kafka - Skalierbare Nachrichtenverarbeitung und mehr!</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Guido Schmutz stellt in seinem <a href="http://2016.java-forum-stuttgart.de/_data/A5_Schmutz.pdf">Vortrag</a> den Message Broker Apache Kafka vor.</p>
</div>
<div class="paragraph">
<p>Sehr schön fand ich dabei die Überleitung von der klassischen Enterprise Architektur hin zur &#8220;modernen&#8221; verteilten Architektur mit Micro Services.
Auf dem Weg vom klassischen Monolithen zu über Messages kommunizierende Micro Services wird es schnell klar, dass hierzu Broker wie Apache Kafka benötigt werden.</p>
</div>
<div class="paragraph">
<p>Nach dieser Einführung beschrieb Guido die grundlegende Architektur von Kafka.
Die Nutzung von Topics und das dahinter stehende <em>publish subscribe</em> wurden dabei ebenso angesprochen wie die Partitionierung eines Topics im Kafka Cluster.
Interessant auch die verschiedenen Strategien zum Löschen von über Kafka verteilten Informationen.</p>
</div>
<div class="paragraph">
<p>Der Vortrag endete mit einem Einblick in das Kafka Ökosystem mit seinen verschiedenen Connectoren.
Es wurde aber auch die neue Entwicklung Kafka Streams kurz erwähnt.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="solid-mit-java-8">SOLID mit Java 8</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Die SOLID Prinzipien sind sicherlich jedem bekannt.
Sie wurden von Robert C. Martin für die Entwicklung <em>stabiler</em> Software definiert.
Roland Mast nahm sich jede der fünf Prinzipien an und stellte dar, wie die Prinzipien mit Java 8 genutzt bzw. umgesetzt wurden.</p>
</div>
<div class="paragraph">
<p><em>Single Responsibility</em> lässt sich am besten mit den Lambda Ausdrücken von Java 8 realisieren.
Lambdas in Streams kapseln dabei die Verantwortlichkeiten &#8220;Streamverarbeitung&#8221; und &#8220;Bearbeitung der Entities&#8221;.
Das <em>Open Closed Principle</em> wird sehr schön durch die Default Implementierung im Collection Interface implementiert.
Das Interface wird um die Methode <code>forEach</code> erweitert ohne die bereits bestehenden Klassen ändern zu müssen.
Für das <em>Liskov&#8217;s Substitution Principle</em> stellt Roland die &#8220;Umwandlung&#8221; von IOExceptions in Unchecked Exceptions vor.
Das <em>Interface Segregation Principle</em> findet bei der Nutzung von Functional Interfaces Anwendung.
So implementiert die neue <code>LocalTime</code> Klasse fünf Interfaces mit verschiedenen Aspekten der Zeitbearbeitung.
Schlussendlich fehlt noch das <em>Dependency Inversion Principle</em>.
Hier wird auf das Tool <code>jdeps -jdkinternals</code> hingewiesen.
Mit ihm lässt sich erkennen, welche internen nicht zu nutzenden Klassen in einem Java Programm verwendet werden.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="streamprocessing-plattformen-und-die-qual-der-wahl">StreamProcessing Plattformen und die Qual der Wahl</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Zum Abschluss gab es für mich noch einen <a href="http://2016.java-forum-stuttgart.de/_data/A7_Niehoff.pdf">Vortrag</a> zum Thema Big Data.
Nach dem Vergleich von Apache Spark mit Apache Flink stellt Matthias Niehoff weitere Frameworks vor.
Er konzentrierte sich aber rein auf die Verarbeitung von Streams.</p>
</div>
<div class="paragraph">
<p>Zu Begin erläuterte er das Thema des Stream Processing etwas genauer.
Die Daten werden hierbei beim Eintreffen sofort verarbeitet.
Es findet keine Speicherung und nachgeschaltete Verarbeitung statt.
Die Rohdaten werden aber häufig für eine weitere, nachgelagerte Verarbeitung aufgehoben.
Das <em>distributed stream processing</em> stellt sicher, dass die Daten kontinuierlich verarbeitet werden.
Durch die Verarbeitung in-memory werden sehr geringe Latenzzeiten erreicht.</p>
</div>
<div class="paragraph">
<p>Problematisch ist die Unterscheidung zwischen <em>Event Time</em> und <em>Processing Time</em>.
Die meisten Frameworks arbeiten nur mit der Processing Time.
Hierbei wird die Zeit für das Datum verwendet, zu dem es bei der Plattform eingetroffen ist.
Im Unterschied hierzu nutzen Frameworks die Event Time wenn die die tatsächliche Zeit des Ereignisses genutzt wird.</p>
</div>
<div class="paragraph">
<p>Ein weiteres interessantes Feld ist die Art und Weise wie das <em>Windowing</em> durchgeführt wird.
In diesem Zusammenhang muss ein State verwaltet werden.
Auch hierzu gibt es unterschiedliche Ansätze wie <em>Tumbling</em>, <em>Sliding</em> oder <em>Session</em>.
Besonders Problematisch wird die Definition des States, wenn man die Zeit (Event oder Processing) mit ins Spiel bringt.</p>
</div>
<div class="paragraph">
<p>Im Anschluss vergleicht Matthias die Kandidaten:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Apache Storm</p>
</li>
<li>
<p>Apache Spark</p>
</li>
<li>
<p>Apache Samza</p>
</li>
<li>
<p>Apache Flink</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>basierend auf den Grundlagen.</p>
</div>
<div class="paragraph">
<p>Man kann die Frameworks grob in Stream und Micro Batches orientierte unterscheiden.
Auch kann man aufgrund der API in komponentenbasierte und deklarative aufteilen.</p>
</div>
<div class="paragraph">
<p>Matthias empfiehlt klar deklarative Plattformen.
Weiterhin sollte man seiner Meinung nach die hinter einer Plattform stehende Community nicht unterschätzen.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="fazit">Fazit</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Ich bin mit dem Besuch des Java Forum Stuttgart sehr zufrieden.
Die von mir besuchten Vorträge haben meine Erwartungen erfüllt.
Ich konnte neue Informationen mit nehmen und wurde bei bestehenden Themen bestätigt.</p>
</div>
<div class="paragraph">
<p>Die Veranstaltung fand in einer angenehmen Atmosphäre statt.
Trotz der großen Anzahl an Besuchern wirkte das Veranstaltungszentrum nicht überfüllt.
Man merkt den Veranstaltern die langjährige Erfahrung bei der Organisation an.</p>
</div>
<div class="paragraph">
<p>Ich komme wieder.</p>
</div>
</div>
</div>]]></content><author><name>Sebastian Hempel</name><email>shempel@it-hempel.de</email></author><category term="software-development" /><category term="java" /><category term="architecture" /><summary type="html"><![CDATA[Meine Eindrücke vom Java Forum Stuttgart, dass ich in diesem Jahr zum ersten mal besucht habe.]]></summary></entry><entry><title type="html">building IoT 2016</title><link href="https://it-hempel.de/software-development/building-iot-2016/" rel="alternate" type="text/html" title="building IoT 2016" /><published>2016-05-23T20:10:00+02:00</published><updated>2016-05-23T20:10:00+02:00</updated><id>https://it-hempel.de/software-development/building-iot-2016</id><content type="html" xml:base="https://it-hempel.de/software-development/building-iot-2016/"><![CDATA[<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Ich war vom 11.05. bis 12.05.2016 auf der building IoT in Köln.
Die Softwareentwickler Konferenz zu Internet of Things (IoT) und Industrie 4.0 wurde dieses Jahr zum ersten mal vom d.punkt Verlag und dem Heise Verlag veranstaltet.
Die Konferenz beleuchtet das Thema IoT aus der Sicht des Softwareentwicklers oder Architekten.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="/assets/images/buildingiot.png" alt="buildingiot">
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="innovation-begins-at-home">Innovation Begins at Home</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Eine kurzweilige aber durchaus interessante Einführung in das Thema bot die Keynote am ersten Tag.
Andy Stanford-Clark beschäftigt sich sowohl beruflich als auch privat mit dem Thema IoT.
Anhand mehrerer Beispiele aus seinem privaten Umfeld stellte er verschiedene IoT Anwendungen vor.
Elegant leitete er danach auf die professionellen Aspekte von IoT um.
Die Keynote bot für mich wenig neues, stellte aber eine gute Zusammenfassung der Möglichkeiten und der Herausforderungen dar.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="das-internet-der-dinge-aus-architekturperspektive">Das Internet der Dinge aus Architekturperspektive</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Einen Blick aus 10.000 Metern auf die Architektur von IoT Anwendungen und Systemen stellt Michael Stal in seinem Talk vor.
Nach einer Schilderung der technischen Herausforderungen präsentierte Michael Stal verschiedenen Pattern zur Lösung der verschiedenen Herausforderungen.
Die &#8220;Schlagzahl&#8221; der Patterns war groß aber äußerst interessant.
Ich werde mir die verschiedenen Patterns anhand der Slides noch einmal ansehen.
Der Vortrag erfüllte meine Erwartungen zu 100%.
Die Auflistung der Herausforderungen und Probleme zusammen mit möglichen Patterns zur Lösung stellt eine gute Grundlage für eigene Architekturen dar.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="iot-protokolle">IoT Protokolle</h2>
<div class="sectionbody">
<div class="paragraph">
<p>In zwei Vorträgen stellt Maik Wojcieszak die im IoT Umfeld verwendeten Protokolle vor.
Im ersten Teil konzentrierte er sich auf die grundlegenden IP Protokolle.
Er betonte dabei vor allem die Unterschiede zwischen UDP und TCP und deren Vor- und Nachteile im Bezug auf IoT.
Im zweiten Teil wurden die IoT Protokolle anhand verschiedener Kriterien verglichen.
Anstatt der tabellarischen Auflistung hätte mir persönlich eine Auflistung der Vor- und Nachteile pro Protokoll besser gefallen.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="wahrscheinlichkeiten-vorhersagen-und-user-experience">Wahrscheinlichkeiten, Vorhersagen und User Experience</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Boris Adryan kümmerte sich in seinem Vortrag um die User Experience (UX) in IoT Anwendungen.
Anhand eines fiktiven Szenarios stellt er verschiedene Aspekte der UX vor.
Es kommt darauf an dem Benutzer immer die erwarteten Informationen anzuzeigen.
Dabei ist der richtige Weg zwischen zu wenig und zu viel Informationen zu finden.
Wichtig ist die Informationen im aktuellen Kontext des Benutzers einzubetten.
Seine Erläuterungen gingen nicht in die Tiefe und waren daher für mich genau richtig.
Durch den Vortrag bin ich auf einige Aspekte aufmerksam geworden, die ich in Zukunft beachten sollte.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="container-management-basierend-auf-cassandra">Container Management basierend auf Cassandra</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Einen ersten Praxisbericht boten für mich Thomas Gregg und Negib Marhoul.
Sie stellten in ihrem Vortrag eine IoT Anwendung zum Management von Hochsee Containern vor.
In den Container wird ein kleines Kästchen eingebaut.
Dieses mist laufend Temperatur, Luftfeuchtigkeit und weitere Zustände des Containers.
Über einen Hub auf einem Container Schiff werden die Daten zu einem Rechenzentrum übertragen.
Dort werden die Daten mittels Apache Cassandra gesammelt und ausgewertet.</p>
</div>
<div class="paragraph">
<p>Die Daten bieten die Möglichkeit jederzeit über den Ort und den Zustand eines Containers informiert zu sein.
Apache Cassandra wird um Apache Spark zu einer schnellen Auswertung kombiniert.</p>
</div>
<div class="paragraph">
<p>Ein interessanter Vortrag der die für mich bisher "abstrakten" Technologien in der Praxis zeigt.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="software-updates-im-internet-der-dinge">Software-Updates im Internet der Dinge</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Der letzte Vortrag am ersten Konferenztag beschäftigte sich mit dem Management von Software Updates auf IoT Geräten.
Kai Zimmermann von Bosch stellt dabei das von Bosch entwickelte System vor.
Er erläuterte Anhand des Systems die Herausforderungen und die Anforderungen an ein derartiges System.
Das System muss zuverlässig tausende von Geräten aktualisieren.
Es ist zu beachten, dass die Lebensdauer der Geräte sehr lang sein kann.
Auch gehen viele Geräte erst Jahre nach ihrer Fertigung in Produktion.</p>
</div>
<div class="paragraph">
<p>Ein durchaus praxisnaher Vortrag, der für mich klar gemacht hat, dass dieses Thema nicht zu vernachlässigen ist.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="wir-haben-doch-keinen-zeit">Wir haben doch keinen Zeit</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Der zweite Tag begann mit einem unterhaltsamen aber trotzdem sehr informativem Vortrag von Jochen Mader und Jens Deters.
Die beiden stellten den von Ihnen eingesetzten Technologiestack für die Fast-Data Pipeline vor.
Der Stack besteht aus einem MQTT Broker (Hive MQ) zur &#8220;Sammlung&#8221; der Daten.
Über eine Vert.x Applikation werden die Daten von Diesem nach Kafka transportiert.
Die von Kafka gesammelten Daten werden anschließend mittels Apache Spark verarbeitet.
Zu persistierende Daten werden mittels Cassandra gespeichert.
Der Stack wurde von den beiden mittels Mesos / DCOS betrieben.
In einer Live-Demo zeigten sie den Import von Daten sowie die Verarbeitung und Speicherung.</p>
</div>
<div class="paragraph">
<p>Der Vortrag hat mich stark motiviert in einem Projekt auf den gleichen Stack aufzusetzen.
Interessant ist daher, dass die beiden Ihre Lösung (Konfiguration und Scripte) auf Github veröffentlichen werden.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="spark-und-cassandra">Spark und Cassandra</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Im anschließenden Vortrag von Matthias Niehoff konnte ich mein Wissen über Apache Spark und Cassandra noch weiter vertiefen.
Matthias zeigte anhand von Billboard-Daten die Verarbeitung von Streams mit Spark.
Die Daten wurden von Spark in Cassandra gespeichert.
In einem weiteren Schritt konnte er aber auch Daten aus dem Stream mit Daten aus Cassandra anreichern und diesen neuen Stream dort wieder speichern.</p>
</div>
<div class="paragraph">
<p>Zusammen mit dem vorherigen Vortrag von Jens und Jochen hat mich dieser Vortrag davon überzeugt, dass Spark das richtige Tool für mein aktuelles Projekt ist.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="das-große-sammeln">Das große Sammeln</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Passend zu den beiden vorherigen Vorträgen berichteten Michael Bauer und Henning Böger von ihrem Projekt.
Auch dort haben Sie Spache Spark und Cassandra eingesetzt.
Der Blick auf diese beiden Technologien aus einem abgeschlossenen Projekt war sehr interessant.
Die von den beiden in dem Projekt gelösten Probleme waren sehr aufschlussreich.</p>
</div>
<div class="paragraph">
<p>Die Ähnlichkeit der in den letzten drei Vorträgen gezeigten Lösungen war sehr überzeugend.
Derzeit gibt es für die Verarbeitung von Streamdaten kaum Alternativen.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="security">Security</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Die beiden letzten Vorträge auf der building IoT beschäftigten sich mit der Sicherheit.</p>
</div>
<div class="paragraph">
<p>Christian Zenger zeigte mit seinem Vortrag neue Möglichkeiten zur Nutzung von Kryptographie auf leistungsschwachen Geräten.
Durch die Nutzung von Sensoren als Entropie Quellen können auch auf kleinen Microcontrollern relativ starke Verschlüsselungen eingesetzt werden.
Für das vorgestellt Verfahren ist erst vor kurzem der Patentschutz abgelaufen.
Es ist zu beobachten, wie das Verfahren in nächster Zeit umgesetzt wird.</p>
</div>
<div class="paragraph">
<p>Sascha Schmidt zeigte anschießend noch Möglichkeiten, vorgefertigte Schlüssel in der Produktion auf IoT Geräte auszurollen.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="fazit">Fazit</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Die building IoT 2016 hat meine Erwartungen mehr als erfüllt.
So gut wie alle Vorträge haben das Thema Internet of Things aus der Perspektive einen Softwareentwicklers oder Architekten beleuchtet.
Die Referenten waren durchweg kompetent und kannten sich in Ihren Bereichen aus.
Die Atmosphere lud zum Netzwerken und Informationsaustausch ein.</p>
</div>
<div class="paragraph">
<p>In einer abschließenden Besprechung in meinem aktuellen Projekten haben wir anhand der building IoT 2016 sofort das Conference Driven Development praktiziert.</p>
</div>
</div>
</div>]]></content><author><name>Sebastian Hempel</name><email>shempel@it-hempel.de</email></author><category term="software-development" /><category term="java" /><category term="iot" /><category term="architecture" /><summary type="html"><![CDATA[Mein Bericht von der (neuen) Konferenz building IoT 2016 die im Mai in Köln stattgefunden hat.]]></summary></entry><entry><title type="html">Entwickler-Schulung - Maven und Jenkins</title><link href="https://it-hempel.de/software-development/entwickler-schulung-maven-und-jenkins/" rel="alternate" type="text/html" title="Entwickler-Schulung - Maven und Jenkins" /><published>2016-04-17T18:13:00+02:00</published><updated>2016-04-17T18:13:00+02:00</updated><id>https://it-hempel.de/software-development/entwickler-schulung-maven-und-jenkins</id><content type="html" xml:base="https://it-hempel.de/software-development/entwickler-schulung-maven-und-jenkins/"><![CDATA[<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Anfang des Jahres hatte ich die Gelegenheit eine neue Schulung zu konzipieren.
Im Auftrag eines Schulungsunternehmens, hielt ich eine Grundlagenschulung zum Thema Maven und Jenkins bei einem Kunden in München.
Ziel der Schulung war es bestehende und neue Mitarbeiter des Kunden fit für die Erstellung von Software mittels Maven zu machen.
In einem zweiten Schritt wurde in Continuous Integration mit Jenkins eingeführt.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="maven">Maven</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Am ersten Tag der dreitägigen Schulung drehte sich alles um Apache Maven.
Nach einer Einführung in die Konzepte und Ideen von Maven ging es an die Erstellung einer ersten, einfach <code>pom.xml</code>.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="/assets/images/maven_logo.png" alt="maven logo">
</div>
</div>
<div class="paragraph">
<p>Im nächsten Schritt wurde ein Build-Scripts für eine typische JavaEE Applikation erstellt.
Das Script besteht aus mehrerem Projekten.
Jedes Projekt wird mit einer eigenen POM beschrieben.
Alle POMs sind von einer Parent POM abgeleitet.
In diesem Parent werden die von allen POMs verwendeten Definitionen zentral abgelegt.
Das eigentliche Artefakt (EAR-File) wird ebenfalls durch ein eigenes Build-Script erstellt.</p>
</div>
<div class="imageblock middle">
<div class="content">
<img src="/assets/images/jee-pom.png" alt="jee pom" width="279" height="251">
</div>
</div>
<div class="paragraph">
<p>Durch die Abhängigkeit des &#8220;ear module&#8221; von den beiden eigentlichen Projekten &#8220;crm&#8221; und &#8220;report&#8221; wird bei jeder Änderung an diesem Projekten ein neues EAR-File erstellt.
Da alle Projekte vom &#8220;project&#8221; abgeleitet sind, nutzen diese die dort festgelegten Plugin-Versionen und sonstigen Einstellungen.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="jenkins">Jenkins</h2>
<div class="sectionbody">
<div class="paragraph">
<p>An den restlichen beiden Tagen wurde das am ersten Tag erstellte Skript in einer Continuous Integration Umgebung mit Jenkins eingesetzt.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="/assets/images/jenkins_logo.png" alt="jenkins logo">
</div>
</div>
<div class="paragraph">
<p>Zuvor erläuterte ich die Grundlagen von Jenkins.
Dabei wurden die verschiedenen Job-Typen ebenso angesprochen wie die grundlegende Konfiguration von Jenkins.
Eingegangen wurde auf die Anbindung von Jenkins an Version Control Systeme wie Subversion oder Git.
Dabei kann nicht oft genug wiederholt werden, dass hierzu ein eigener (technischer) Benutzer zu verwenden ist.</p>
</div>
<div class="paragraph">
<p>Als Übung wurde das am ersten Tag erstellte Script verwendet und hierzu ein Job in Jenkins erstellt.
Durch Änderungen in der Quellcodeverwaltung wurde der automatische Bau des Projekts nach dem Einchecken einer Änderung in Subversion getestet.</p>
</div>
<div class="paragraph">
<p>Jetzt war es an der Zeit eine Einführung in Continuous Integration zu geben.
Dabei orientierte ich mich an der Struktur des Buches <a href="http://www.amazon.de/Continuous-Integration-Improving-Software-Signature/dp/0321336380" target="_blank" rel="noopener">&#8220;Continuous Integration&#8221;</a> von Paul Duvall.
Damit wird die Motivation zum Einsatz einer Continous Integration Pipeline beschrieben.
Jeder einzelnen Schritt wird erläutert und der dahinter stehende Nutzen für die Entwicklung der Software erklärt.
Im einzelnen handelt es sich um die folgenden Schritte:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>compile source code</p>
</li>
<li>
<p>integrate database</p>
</li>
<li>
<p>run tests</p>
</li>
<li>
<p>run inspections</p>
</li>
<li>
<p>deploy software</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Am Ende der Pipeline steht ein einsatzfähiges Artefakt, dass bereits grundlegende Tests bestanden hat.
Durch das Deployment auf ein Testsystem können nun weitere Tests und Prüfungen durchgeführt werden.</p>
</div>
<div class="paragraph">
<p>Die einzelnen Stufen der Pipeline wurden durch entsprechende Jobs in Jenkins abgebildet.
Die Jobs bauen aufeinander auf und sind wie Glieder einer Kette aneinander gehängt.
Durch die Nutzung von Plugins werden die Abläufe der einzelnen Stufen realisiert.
Zur Visualisierung der Pipeline kommt das <a href="https://wiki.jenkins-ci.org/display/JENKINS/Build+Pipeline+Plugin" target="_blank" rel="noopener">Build Pipeline Plugin</a> zum Einsatz.</p>
</div>
<div class="paragraph">
<p>Das Feedback der Teilnehmer war nach den drei Tagen Schulung durchwegs positiv.
Mir hat es viel Spass gemacht eine Schulung zu den Themen zu halten, mit denen ich mich gerne beschäftige.
Wie bei jeder Schulung habe auch ich einiges dazugelernt.</p>
</div>
</div>
</div>]]></content><author><name>Sebastian Hempel</name><email>shempel@it-hempel.de</email></author><category term="software-development" /><category term="puppet" /><category term="devop" /><category term="java" /><summary type="html"><![CDATA[Ich habe eine Schulung zu Maven und Jenkins gehalten. Themen waren der Bau von JavaEE Software sowie die Erstellung einer Continuos Integration Pipeline.]]></summary></entry><entry><title type="html">JavaLand 2016 - Immer wieder gut</title><link href="https://it-hempel.de/software-development/java-land-2016/" rel="alternate" type="text/html" title="JavaLand 2016 - Immer wieder gut" /><published>2016-04-09T17:46:00+02:00</published><updated>2016-04-09T17:46:00+02:00</updated><id>https://it-hempel.de/software-development/java-land-2016</id><content type="html" xml:base="https://it-hempel.de/software-development/java-land-2016/"><![CDATA[<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Die unter anderem von den deutschen Java User Groups organisierte Konferenz <a href="http://www.javaland.eu" target="_blank" rel="noopener">JavaLand</a> hat im Jahr 2016 zum dritten mal statt gefunden.
Aufgrund des frühen Termins von Ostern in diesem Jahr, fand das JavaLand bereits Anfang März statt.
Die kühleren Temperaturen haben die Veranstaltung nicht geschadet.</p>
</div>
<div class="paragraph">
<p>Wie im letzten Jahr war das Konferenz Programm gefüllt mit interessanten Vorträgen.
Bei den bis zu 7 parallel laufenden Tracks sind Überschneidungen nicht zu vermeiden.
So habe ich versucht die für mich interessantesten Vorträge zu besuchen.
Wie im letzten Jahr hier ein kurzer Bericht zu diesen Vorträgen.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="docker">Docker</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Ich beschäftige mich schon länger mit Docker.
Auf Konferenzen lerne ich immer wieder neue Dinge zu den verschiedenen Technologien rund um die Virtualisierung von Applicationen mit Docker kennen.
Auf den Voxxed Days Anfang des Jahres in Berlin gab es z.B. Vorträge zum Thema Docker Swarm.
Im Vortrag &#8220;Patterns für Docker&#8221; von Roland Huß wurde ein Aspekt beleuchtet, den ich bisher vermisst habe.</p>
</div>
<div class="paragraph">
<p><strong>Welche wiederkehrenden Muster gibt es beim Einsatz von Docker?</strong></p>
</div>
<div class="paragraph">
<p>Roland hat seine Erfahrungen beim Einsatz von Docker in drei Patterns zusammen gefasst:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Wie kann ich die Applikation in einem Container konfigurieren bzw. an die Umgebung anpassen?</p>
</li>
<li>
<p>Wie finden sich die einzelnen Services gegenseitig?</p>
</li>
<li>
<p>Wie baue ich am effizientesten Docker Images?</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Zur Konfiguration von Images gibt es die Möglichkeit die einzelnen Konfigurationswerte als Environment-Variablen zu definieren.
Diese Variablen können beim Bau eines Images oder beim Start eines Containers übergeben werden.
Weiterhin besteht die Möglichkeit Konfigurationsdateien in einem sogenannten &#8220;Sidecar Container&#8221; zu verpacken.
Dieser wird beim Starten des Container mit dem eigentlichen Container verbunden.
Die letzte Möglichkeit zur Konfiguration von Container besteht durch die Nutzung von Key-Value Stores wie z.B. Zookeeper, Consul, etcd oder Redis.</p>
</div>
<div class="paragraph">
<p>Docker wird zur Realisierung von Microservice Architekturen eingesetzt.
Hierzu ist es notwendig, dass sich die einzelnen Microservices gegenseitig finden können.
Zur Lösung dieser Anforderung besteht die Möglichkeit die Adressen der benötigten Services über Environment-Variablen beim Starten zu &#8220;injizieren&#8221;.
In umfangreicheren Installationen kommen Orchestrierungstools wie Kubernetes von Google zum Einsatz.
Wie schon bei der Konfiguration können aber auch Key-Value Stores eingesetzt werden.
Die einzelnen Dienste registrieren sich bei diesen Services und können umgekehrt andere registrierte Dienste abfragen.
Interessant ist auch die Möglichkeit die Abfrage von Services über den guten alten DNS Dienst mittels <code>_srv</code> Records zu realsieren.</p>
</div>
<div class="paragraph">
<p>Aufgrund der fortgeschrittenen Zeit konnte Roland nur kurz auf die Lösungen zum effizienten Bau von Docker Images eingehen.</p>
</div>
<div class="paragraph">
<p>Über Dockerfile Templates können sehr einfach mehrere Variationen von Images erstellt werden.
So kann ein und dasselbe Image z.B. mit einem JDK7 oder JDK8 erstellt werden.
Mit der von Roland &#8220;Image Factory&#8221; genannten Techniken wird auf bestehende Techniken zurückgegriffen.
Basierend auf einem Base Image werden die einzelnen Images automatisiert gebaut.
Zum Einsatz kommen klassische Werkzeuge zum Konfigurationsmanagement wie Puppet, Chef oder Ansible.
Letzteres hat den Vorteil, dass es direkt von Docker eingebunden wird.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="microservices">Microservices</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Gleich im Anschluss wurde das Thema &#8220;Microservices&#8221; von Lars Röwekamp intensiver besprochen.
Ich habe schon einiges zu diesem Thema gelesen und gehört.
Lars hat das ganze Thema sehr kompakt und anschaulich in einen Vortrag verpackt.</p>
</div>
<div class="paragraph">
<p>Wichtig finde ich den Bezug zu Domain Driven Design herzustellen.
Die Sprache zur Definition der Architektur wird dabei zusammen mit den Fachleuten der Domäne erstellt.
Ziel ist es eine für das Problem passende Sprache zu erstellen.
Die Sprache umfasst dabei nicht die gesamte Mächtigkeit der fachlichen Domäne.
Es werden nur die Aspekte berücksichtigt, die für die Lösung des fachlichen Problems notwendig sind.
Das Modell der Anwendung basiert auf dieser von allen entwickelten Sprache.
Ändert sich die Sprache muss sich dadurch auch das Modell ändern.</p>
</div>
<div class="paragraph">
<p>Intensiver hat sich Lars mit dem Begriff des &#8220;bounded context&#8221; beschäftigt.
Diesen Kontext zu finden gehört zur Definition der Sprache.
Es handelt sich dabei um einen in sich abgeschlossenen, fachlichen Bereich.
Ein Context beschreibt dabei keinen &#8220;Service&#8221; sondern eher einen Use Case oder einen Business Prozess.</p>
</div>
<div class="paragraph">
<p>Abschließend hat Lars noch die Frage behandelt, wie mit den Gemeinsamkeiten von mehreren Bounded Context umgegangen wird.
Kann hier ein &#8220;Haupteigner&#8221; der Daten ermittelt werden?
Evtl. ist auch der Einsatz eines &#8220;shared kernel&#8221; interessant.
Dieser beinhaltet die gemeinsamen Entities.
Ein Microservice wird als federführend für die Entities bestimmt.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="cdi-2-0">CDI 2.0</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Mark Struberg und Thorben Janssen berichteten vom aktuellen Stand der Arbeiten an der neuen CDI Version 2.0.
Beide gehören zur &#8220;Java EE Expert Group&#8221; und arbeiten am neuen Standard für Context und Dependency Injection mit.</p>
</div>
<div class="paragraph">
<p>Ihr Vortrag behandelte hauptsächlich die Neuerung der asynchronen Events.
Neben Beispielen zur Implementierung dieser neuen Events wurde auch auf die Hintergründe der Realisierung eingegangen.
Interessant waren dabei vor allem die Aspekte wie die Handhabung der Event-Objekte über mehrere Threads gehandhabt wird.
Welche Objekte haben der sendende und der empfangende Teil der Event-Kommunikation gemeinsam?</p>
</div>
<div class="paragraph">
<p>Noch befindet sich bei der neuen Version von CDI wie bei allen neuen Standards für Java EE 8 alles im Fluss.
Die Möglichkeiten klingen aber sehr vielversprechend und machen auf alle Fälle Lust sich möglichst bald mit der neuen Version zu beschäftigen.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="modelle-der-nebenläufigkeit">Modelle der Nebenläufigkeit</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Einen für mich sehr aufschlussreichen Einblick in die verschiedenen Möglichkeiten in Java mit Nebenläufigkeit umzugehen lieferte Lutz Hühnken mit seinem Vortrag &#8220;Neue JVM-Concurrency-Modelle wie Aktoren und Verticles&#8221;.
Er stellte verschiedene Modelle vor, mit denen man auf einer abstrakteren Ebene als Threads und dem <code>java.util.concurrent</code> Package arbeiten kann.</p>
</div>
<div class="paragraph">
<p>Mit dem Modell der Fibers von Quasar lässt sich ähnlich wie mit Threads arbeiten.
Fibers dienen hierbei als Abstraktion der tatsächlichen Threads.
Diese haben aber keine direkte Bindung an Threads.
Man bezeichnet sie als &#8220;extended&#8221; Threads oder Coroutines.
Die Programmierung erfolgt weiterhin imperativ wie bei Threads auch.</p>
</div>
<div class="paragraph">
<p>Eine höhere Abstraktion bieten Channels, deren Konzept aus dem Jahr 1978 stammt.
In der Programmiersprache Go ist dieses Modell fest integriert.
Eine Go-Routine lauscht hierbei an einem Channel.
Daten werden von anderen Routinen durch das Schreiben in den Channel übergeben.
Es wird damit eine Datenfluss orientierte Programmierung realisiert.
Die Daten werden hierbei im Channel und nicht im Thread gehalten.</p>
</div>
<div class="paragraph">
<p>Ein bekannter Vertreter des Modell des Event Loop stellt vert.x dar.
Der Code befindet sich in Verticles.
Diese kommunizieren über einen MessageBus, über den sie sich gegenseitig Event senden.
Der Bus ermöglicht die Kommunikation von Verticles in einem Netzwerk.
Für blockierende Aufrufe stellt vert.x sogenannte Worker Threads zur Verfügung.</p>
</div>
<div class="paragraph">
<p>Als letztes Modell stellt Lutz Actors vor, das ebenfalls aus den 70ern (1973) stammt.
Weite Verbreitung findet dieses Modell durch die Programmiersprache Erlang.
In der Java Welt setzt Akka dieses Modell um.
Aktoren kommunizieren über Messages miteinander.
Ein Supervisor überwacht alle laufenden Aktoren.</p>
</div>
<div class="paragraph">
<p>Der Vortrag hat mein Wissen zu diesem Thema wieder etwas weiter gebracht.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="java-ee-connectors">Java EE Connectors</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Sehr inspirierend war für mich der Vortrag von David Blevins &#8220;Java EE Connectors: The Secret Weapon Reloaded&#8221;.
Bisher bin ich mit Java Connectors nur selten in Berührung gekommen.
Gerade bei der Anbindung von ActiveMQ an einen WildFly Application Server musste ich mich damit beschäftigen.
Die API hatte aber auch bei mir den Ruf einer komplizierten Sache.</p>
</div>
<div class="paragraph">
<p>Mit der Überarbeitung der API mit Java EE 7 hat sich das aber grundlegend geändert.
David zeigte in seinem Vortrag wie einfach inzwischen die Erstellung eines Connectors ist.
Dadurch, dass der Connector direkten Zugriff auf die Message Driven Bean bekommt, die die vom Connector &#8220;empfangene&#8221; Nachricht verarbeiten soll, ergeben sich ungeahnte Möglichkeiten.</p>
</div>
<div class="paragraph">
<p>David stellte in seinem Vortrag verschiedene Connectoren vor.
Alle nutzen ein an JAX-RS angelehntes Programmiermodell.
Durch Annotationen an die Methoden einer Message Driven Bean wird festgelegt, für welche Art von Messages die Methode aufgerufen werden soll.
Das Empfangen der Message übernimmt der Connector.
Durch das Evaluieren der Annotationen kann er die passende Methode aufrufen.</p>
</div>
<div class="paragraph">
<p>In einer Life Demo zeigte David die Verarbeitung von E-Mails.
Die Kommunikation ist aber auch über Twitter möglich.
Durch die Anbindung an Google Hangouts (Jabber) konnte er mit seinem Application Server - natürlich TomEE - quasi chatten.
Fehlen durfte natürlich auch nicht eine Anbindung an Slack.</p>
</div>
<div class="paragraph">
<p>Der Quellcode der von David vorgestellten Connectoren zusammen mit einer den Connector nutzenden Message Driven Bean findet sich unter <a href="https://tomitribe.io/projects/chatterbox" class="bare">https://tomitribe.io/projects/chatterbox</a>.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="reactive-microservices">Reactive Microservices</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Weiter geht es mit Microservices.
Jochen Mader beschrieb in seinem Vortrag &#8220;Mit Vert.x vom Monolithen zum reaktiven Microservice&#8221; die Entwicklung von Microservices.</p>
</div>
<div class="paragraph">
<p>Zu Beginn lieferte Jochen seine Definition eines Microservice.
Für ihn wichtig sind die folgenden Gesichtspunkte:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Realisierung eines Bounded Context (Domain Driven Design)</p>
</li>
<li>
<p>jeder Microservice hat eine eigene Datenhaltung</p>
</li>
<li>
<p>Jeder Microservice wird von einem Team entwickelt</p>
</li>
<li>
<p>Das Deployment kann für jeden Microservice unabhängig stattfinden</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Seiner Meinung nach sind bei der Implementierung eines verteilten Systems die folgenden Mythen zu beachten.</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Netzwerk sind zuverlässig</p>
</li>
<li>
<p>Der Datendurchsatz eines Netzwerks ist unendlich</p>
</li>
<li>
<p>Das Netzwerk ist sicher</p>
</li>
<li>
<p>Die Latenz ist nahe 0</p>
</li>
<li>
<p>Die Netzwerktopologie ist unveränderlich</p>
</li>
<li>
<p>Es gibt nur 1 Netzwerkadministrator</p>
</li>
<li>
<p>Der Datentransport ist kostenlos</p>
</li>
<li>
<p>Das Netzwerk ist homogen</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Alle diese Probleme lassen sich mit Vert.x in den Griff bekommen.
Die Applikation besteht aus Verticles.
Jedes Verticle läuft im (immer gleichen) Thread.
Die einzelnen Verticles kommunizieren über einen Bus.
Der Bus kann über das Netzwerk verteilt sein.
Über einen Broadcast finden sich die Teilnehmer selbst.
Durch das dynamische Hoch- und Runterfahren von weiteren Instanzen kann das System elastisch auf veränderte Last reagieren.</p>
</div>
<div class="paragraph">
<p>Gut findet Jochen, dass eine Applikation als Fat JAR verpackt und damit sehr einfach deployt werden kann.
Die Erstellung des JAR erfolgt mit dem Maven Shade Plugin.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="event-sourcing">Event Sourcing</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Ein Thema, das oft zusammen mit Microservices verwendet wird ist das Event Sourcing.
Eine Einführung in dieses Konzept der Speicherung von Daten haben Jörg Herbst und Jan Sauer in Ihrem Vortrag gegeben.</p>
</div>
<div class="paragraph">
<p>Bei der Nutzung von Event Sourcing werden die Datensätze nicht geändert.
Stattdessen werden die Ereignisse, die zur Änderung von Datensätzen / deren Zuständen führen gespeichert.
Um den aktuellen Zustand zu ermitteln, müssen alle Ereignisse durchgegangen und daraus der Zustand ermittelt werden.
Die Lese- und Schreiboperationen werden voneinander getrennt.</p>
</div>
<div class="paragraph">
<p>Vorteil dieser Art der Speicherung ist, dass jederzeit die Ursache für die Änderung eines Zustandes / eines Datensatzes ermittelt werden kann.
Auch führen Änderungen am Datenmodell nicht zu umfangreichen Migrationen.
Die Ereignisse sind weitestgehend vom Schema der Datensätze getrennt.</p>
</div>
<div class="paragraph">
<p>Zur Verarbeitung werden die Events mit den Änderungen im sogenannten EventStore gespeichert.
Die Events werden aber auch auf einen EventBus veröffentlicht.
Dort können EventHandler andocken und aufgrund der Ereignisse weitere Operationen durchführen.
Die EventHandler bauen somit das Lesemodell auf.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="fazit">Fazit</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Wie bereits in den letzten beiden Jahren hat sich für mich der Besuch des JavaLand mehr als gelohnt.
Ich werde auch im nächsten Jahr auf dem <a href="http://www.javaland.eu" target="_blank" rel="noopener">JavaLand</a> sein.
Dies findet vom vom 28.03. - 30.03.2017 wieder im Phantasialand in Brühl statt.</p>
</div>
</div>
</div>]]></content><author><name>Sebastian Hempel</name><email>shempel@it-hempel.de</email></author><category term="software-development" /><category term="puppet" /><category term="devop" /><category term="java" /><summary type="html"><![CDATA[In diesem Jahr fand das JavaLand zum dritten mal statt. Auch ich habe wieder an der Community-Konferenz teilgenommen.]]></summary></entry></feed>