Senior Entwickler / Architekt (Scala, Java, TypeScript, Spring, Akka, ZIO, JEE, SQL, NoSQL, Web-Technologien, XML-Technologien)
Aktualisiert am 28.05.2023
Profil
Referenzen (4)
Freiberufler / Selbstständiger
Remote-Arbeit
Verfügbar ab: 15.03.2025
Verfügbar zu: 100%
davon vor Ort: 10%
Java
Scala
TypeScript
Spring
Play Framework
Akka
Angular
AWS
ZIO
Deutsch
Muttersprache
Englisch
fließend

Einsatzorte

Einsatzorte

Deutschland

Bevorzugt in D6, D7, D8

möglich

Projekte

Projekte

1 Jahr 7 Monate
2022-01 - 2023-07

Weiterentwicklung und Betrieb eines Internetshops

Software- und Infrastruktur-Entwickler Scala TypeScript Groovy
Software- und Infrastruktur-Entwickler

Technologie: Scala, TypeScript, Spring-Boot, AWS, Jenkins

Die Arbeit bestand aus 2 Schwerpunkten:

1. Weiterenwicklung / Wartung der Microservices eines Internetshops

Die Microservices sind backendseitig mit Scala / Spring-Boot und frontendseitig mit HTML/CSS/TypeScript implementiert.

Es wurde an Microservices im Bereich der Zahlung und Lieferung gearbeitet. Das Verhalten des Shops bei Lastspitzen wurde untersucht und verbessert.

2. Migration / Wartung des Infrastruktur-Codes

Eine selbstgeschriebene Anwendung zum Aufsetzen der Infrastruktur soll abgelöst werden. Die bisherige Anwendung basiert auf AWS-CloudFormation. Zur Ablösung wurden mehrere AWS-CDK-Anwendungen in TypeScript implementiert.

AWS Docker Jenkins Gradle Spring Gattling MongoDB Atlassian JIRA Atlassian Confluence
Scala TypeScript Groovy
Otto
1 Jahr 5 Monate
2020-08 - 2021-12

Weiterentwicklung und Wartung eine Netzwerk-Management-Systems

Entwickler Java Kotlin TypeScript
Entwickler

Neben Wartungsarbeiten bestand der Einsatz aus den folgenden Phasen mit Weiterentwicklungen:


Phase: Weiterentwicklung des Kernels und der Konfiguration eines IoT-Devices

Technologie: Java, Kotlin, Docker, Azure


Das IoT-Device enthält einen in Kotlin geschriebenen Kernel und läuft unter Linux entweder auf einem Hardware-Device oder innerhalb einer VM. Der Kernel lädt Docker-Images und kontrolliert die Ausführung von Docker-Containern, die die eigentiche Anwendungslogik enthalten.

Durch eine Azure-Cloud-Anwendung werden mit Azure-Functions und dem Azure-IoT-Hub die IoT-Devices konfiguriert.


Phase: Weiterentwicklung einer Streaming-Anwendung zur Aggregation von Netflow-Daten und der zug. Visualisierung

Technologie: Java, Apache Beam, Flink, Kafka, ElasticSearch, Grafana


In einer mit Apache Beam implementierten Streaming-Anwendung werden Netflow-Daten zeitlich aggregiert und die Hosts / Anwendungen mit den höchsten Kommunikationsvolumina bestimmt. Die Anwendung läuft auf Flink-Clustern und kann mehrere 100.000 NetFlow-Pakete pro Sekunde verarbeiten.

Es wurde eine weitere Aggregation nach "Differentiated Service Code Points" (DSCP) und die Berücksichtigung der "Explicit Congestion Notification" (ECN) implementiert. Durch Optimierung der Streaming-Pipeline-Struktur konnte die Last der Pipeline trotz der zusätzlichen Funktionalität reduziert werden.

Flow-Aggregate werden in ElasticSearch gespeichert. Ein ElasticSearch-Plugin wurde angepasst, das die Abfrage der Flow-Aggregate als Zeitreihen erlaubt. Ein Grafana-Plugin wurde erweitert, um die Abfrage und Visualisierung der zusätzlichen DSCP-Aggregation und ECN-Information zu ermöglichen.


Phase: Signierung von Multi-Architektur-Docker-Images

Technologie: Docker, Notary, CircleCI


Die auf den oben beschriebenen IoT-Devices laufenden Docker-Images werden mit Docker Content Trust signiert. Dazu wurden die benötigten Public/Private-Key-Paare eingerichtet und der Build-Vorgang entsprechend angepasst.

Da das IoT-Device auf unterschiedlichen Prozessoren laufen kann, handelt es sich bei den Docker-Images um Multi-Architektur-Images. Signierte Multi-Architektur-Images konnten zur Zeit der Umsetzung noch nicht durch Docker selbst erzeugt werden sondern verlangten den direkten Einsatz des zugrundeliegenden Notary-Service.


Phase: Nutzung von Cortex zur Speicherung und Visualisierung von Netflow-Daten

Technologie: Java, Apache Beam, Flink, Kafka, Cortex, Prometheus, Grafana


Es wurde eine Sink-Transformation für Apache-Beam implementiert, um Flow-Aggregate in Cortex zu speichern. Hauptprobleme bei der Umsetzung waren die zeitliche Ordnung von Ergebnissen und Kardinalitätsbeschränkungen.

Cortex verlangt, dass Samples, die zur gleichen Zeitreihe gehören, zeitlich geordnet geschrieben werden. Apache-Beam garantiert jedoch keine zeitliche Ordnung von Ergebnissen. Zur Lösung wurden ein weiteres Attribut in Zeitreihen eingeführt, das "verspätete" Ergebnisse anderen Zeitreihen zuordnet. Über dieses Attribut kann bei der späteren Abfrage aggregiert werden.

Cortex verlangt, dass das Produkt der Attribut-Kardinalitäten einer Metric nicht zu groß wird. Um dieses Problem zu mildern wurde ein Teil der Attribute in die Metrik-Namen kodiert.


OpenNMS Karaf Microsoft Azure Elastic Search Grafana Cortex Flink Docker Pometheus Kafka Apache Beam Protobuf
Java Kotlin TypeScript
OpenNMS Group
Remote
3 Monate
2020-05 - 2020-07

ScalaTs Plugin

Entwickler Scala TypeScript ScalaJS
Entwickler

Es wurde ein SBT Plugin entwickelt, um die Verwendung von ScalaJS-Code in TypeScript-Code zu erleichtern. Dazu leitet das Plugin aus ScalaJS-Sourcen eine entsprechende TypeScript-Declaration-Datei ab. Die TypeScript-Declaration-Datei wird zusammen mit der ScalaJS-Ausgabe in ein Node-Modul gebündelt, das in TypeScript-Code importiert werden kann. Dadurch kann aus TypeScript-Code typsicher auf ScalaJS-Code zugegriffen werden.

SBT
Scala TypeScript ScalaJS
OpenSource
1 Jahr
2019-07 - 2020-06

KFZ-Versicherungsanwendung

Entwickler / Architekt Java Scala Property Based Testing ...
Entwickler / Architekt

Die Anwendung besteht aus einem Spring-Boot-Backend und Angular-Clients für Administratoren bzw. Versicherungsverkäufer.

Die Anwendung wurde durch folgende Maßnahmen modernisiert:

  • Migration: Spring Boot 1.5 -> 2.0; Angular 2 -> Angular 9
  • Deployment: Tomcat 8 -> Kubernetes / OpenShift
  • Aufsetzen einer CI-Umgebung: Jenkins-Pipeline innerhalb von OpenShift; inkl. Backend-Integration-Tests und Chrome-Headless-Browser-Tests; SonarQube-Integration
  • OAuth 2.0 Authentifizierung in vorgeschaltetem Apache mit mod_auth_openidc

Am Code wurden zahlreiche Verbesserungen durchgeführt:

  • Verwendung von Springfox zur automatischen REST-API-Beschreibung. Automatische Angular-Client-Generierung.
  • Verbesserung der Validierungslogik durch Einsatz von Cats Validated.
  • Verbesserte Testabdeckung durch generierte Test-Fälle (property based testing; tool: Scala Check).
  • Bessere Nutzung von Angular-Mechanismen (insbesondere vermehrter Einsatz von Services und Dependency-Injection)
  • Vermehrter Einsatz von Observables
Spring Angular Jenkins OpenShift Kubernetes H2 MySQL Gradle mod_auth_openidc Apache Jenkins SonarQube
Java Scala Property Based Testing TypeScript SQL OAuth 2.0
Mercedes-Benz Bank
Stuttgart
9 Monate
2018-10 - 2019-06

Mitarbeit an einer Big-Data-Analytics Plattform

Entwickler / Architekt Streaming Scala ScalaJS ...
Entwickler / Architekt

Während des Einsatzes wurden einzelne Features full-stack bearbeitet (Frontend und Backend). Dabei wurden bestehende Features überarbeitet und neue Features entworfen und entwickelt. Die Frontend-Entwicklung fand mit TypeScript, ScalaJS und Angular statt. In der Backend-Entwicklung kam hauptsächlich Scala und etwas Go zum Einsatz.

Eine weiterer wichtiger Beitrag war die Einführung von Integration-Tests, in denen Plattform-Bestandteile in lokalen Kubernetes Clustern deployt und getestet werden. Dazu wurde Kubernetes in Docker (kind) innerhalb von Gitlab-CI eingesetzt.

Der Einsatz gliederte sich grob in 3 Phasen:


Phase: Überarbeitung der Kommunikation mit Jupyter Kernels

Die Umsetzung basierte auf Akka. Der Kommunikationszustand wurde durch Aktoren repräsentiert, die für eine verlässliche Sitzungs- / Jupyter-Kernel-Verwaltung sorgten.


Phase: Entwicklung eines Ingress für die Funktionsausführung

Die Plattform erlaubt es, wiederkehrende Auswertungen als HTTP-Funktionen zu deployen (basierend auf OpenFaaS). Es wurde ein Ingress entwickelt, der die Authorisierung der Aufrufe vornimmt und Aufrufergebnisse sowie zug. Log-Ausgaben persistiert. Der Ingress unterstützt sowohl synchrone als auch asynchrone Funktionsaufrufe. Ergebnisse können weitergeleitet, weitergeleitet und persistiert oder nur persistiert werden. Durch Streaming ist sichergestellt, dass der Ingress auch bei sehr großen Datenmengen mit begrenztem Speicher auskommt.


Phase: Rechte/Rollen-Konzept für Repository

Das Repository basiert auf Apache Oak. Es wurde ein Rechte/Rollen-Konzept umgesetzt, das private, gemeinsame und geschützte Arbeitsbereiche unterstützt.

Kubernetes Docker kind Helm OpenFaaS Oak Gitlab-CI Angular Keycloak Play Akka Jupyter SBT PostgreSQL
Streaming Scala ScalaJS TypeScript Go Bash OAuth 2.0
Katana USU
Karlsuhe / Remote
3 Jahre 6 Monate
2015-04 - 2018-09

Entwicklungen und Evaluierungen im Bereich des Internet der Dinge (IoT)

Entwickler, Architekt Scala LWM2M Streaming ...
Entwickler, Architekt

Während der Projektlaufzeit wurden 4 unabhängige Unterprojekte bearbeitet.

Unterprojekt: Proof of Concept von Authorisierungsszenarien im IoT-Umfeld

  • Laufzeit: 2018/06-2018/09 (4 Monate)
  • Rolle im Projekt: Entwickler, Architekt
  • Technologie: Scala, Akka-HTTP, Scala.js, SBT, OAuth 2.0, OpenID Connect, UMA 2.0, Keycloak

Detaillierte Beschreibung: Es wurden Nutzungsszenarien für EBikes untersucht. Ein Fahrradbesitzer authorisiert mittels "User Managed Access" (UMA) eine andere Person zur Nutzung des Fahrrads. Das Fahrrad wird mittels OAuth 2.0 "Device Flow" authorisiert, auf Besitzer- und Nutzer-Daten zuzugreifen. Verschiedene Nutzer authorisieren sich mittels UMA gegenseitig, auf bestimmte Daten (z.B. aufgezeichnete Fahrten) zuzugreifen.

Alle User-Interfaces wurden als "Single-Page Application" mittels Scala.js umgesetzt. Das Backend (der Resource-Server) wurde mittels Akka-HTTP implementiert. Die Kommunikation erfolgte mittels JSON und der circe-JSON-Bibliothek, wodurch dieselben Datenmodelle sowohl in den User-Interfaces als auch im Backend genutzt werden konnten.

Unterprojekt: Entwicklung eines Handshake-Endpunktes für IoT Devices und eines zug. Konfigurationstools

  • Laufzeit: 2018/03 - 2018/05 (3 Monate)
  • Rolle im Projekt: Entwickler
  • Technologie: Java, SpringBoot 1.5 / 2, Card Verifiable Certificates (CVC), Certificate-Chains, EdDSA, Diffie-Hellman

Detaillierte Beschreibung: Mittels eines 2-Schritt-Handshakes wird ein "shared secret" zwischen IoT-Devices und einem Backend etabliert und beide Seiten zugleich authentisiert. Der Handshake ist an den Diffie-Hellman Key-Exchange-Algorithmus angelehnt. Da es sich um "Constrained Devices" handelt und um Bandbreite zu sparen, werden CVCs und EdDSA-Schlüssel verwendet.

Unterprojekt: Bewertung möglicher Protokoll-Stacks, Kommunikationspatterns, Kommunikationssetups und System-Architekturen für IoT-Devices

  • Laufzeit: 2018/01 - 2018/02 (2 Monate)
  • Rolle im Projekt: Rechercheur, Entwickler, Tester
  • Technologie: Scala, Eclipse Californium, UDP, DTLS, COAP(S), TCP, TLS, HTTP(S), LWM2M

Detaillierte Beschreibung: Die verschiedenen Protokoll-Stacks wurden anhand der folgenden Kriterien bewertet: Direktheit, Sicherheit, Zustandslosigkeit, Cloud-Support, Reifegrad, Kosten-Effizienz, Robustheit und geeignete Nachrichtengrößen. Bei den Kommunikationspatterns wurde untersucht, wie mit Devices kommuniziert werden kann, die die meiste Zeit nicht erreichbar sind. Dabei wurde das Konzept "Digital Twin" beleuchtet. Die Bewertung des Kommunikationssetup befasste sich damit, wie eine sichere Kommunikation zwischen Devices und Backend hergestellt werden kann. Hier wurden "pre-shared keys" bei denen Devices vorab im System registriert werden müssen, mit der Verwendung von Zertifikatsketten verglichen. Schließlich wurde eine Software-Architektur aufgestellt, die dem Konzept des "Digital Twin" Rechnung trägt.

Unterprojekt: Anbindung von Devices an das Internet der Dinge (IoT)

  • Laufzeit: 2015/04 - 2017/12 (33 Monate)
  • Rolle im Projekt: Entwickler, Architekt
  • Technologie: Scala, Akka, Streaming, Event Sourcing, MongoDB, RabbitMQ, Redis, Docker, Cloud Foundry, ELK-Stack, Grafana, Kamon, InfluxDB, LWM2M, Maven, SBT, Gatling

Detaillierte Beschreibung: Es wurde ein Backend zur Anbindung von Devices entwickelt, die Status-Informationen senden (Telemetry) und Befehle entgegennehmen können (Control). Die Devices sind nur zu bestimmten Zeitpunkten erreichbar. Alle Events werden aufgezeichnet, um daraus ein Bild vom momentanen Device Zustand ableiten zu können.

Das Backend ist in Form eines Flussgraphen implementiert, an das die Ein- und Ausgaben als Daten-Sourcen bzw. -Senken angebunden sind. Backpressure verhindert, dass das System überladen werden kann. Das Backend kann in einer geclusterten Umgebung laufen, da zusätzliche Instanzen ohne Datenverlust jederzeit gestartet und wieder beendet werden können.

Die Implementierung des Backend basiert auf Akka Streams und Aktoren. Außerdem kommen die Bibliotheken Shapeless, Cats und Monocle zum Einsatz.

Akka MongoDB RabbitMQ Redis Docker CloudFoundry Elastic Search Logstash Kibana Grafana InfluxDB Maven SBT Keycloak Kamon Gatling
Scala LWM2M Streaming Event Sourcing UDP DTLS COAP OAuth 2.0 OpenID Connect UMA 2.0
Bosch Software Innovations
Waiblingen (Rems)

Aus- und Weiterbildung

Aus- und Weiterbildung

1 Monat
2014-12 - 2014-12

Software-Architekt

iSAQB Certified Professional for Sofware Architecture - Foundation Level (CPSA-F), Integrata AG
iSAQB Certified Professional for Sofware Architecture - Foundation Level (CPSA-F)
Integrata AG
3 Jahre 3 Monate
1994-04 - 1997-06

Promotion im Bereich Maschinensehen

Dr. rer. nat., Hochschule Karlsruhe (TH)
Dr. rer. nat.
Hochschule Karlsruhe (TH)
Mitarbeiter am Lehrstuhl für Kognitive Systeme und am Fraunhofer Institut (IITB). Thema der Promotion: Verfolgung von Personen in monokularen Bildfolgen.
6 Jahre 7 Monate
1987-09 - 1994-03

Informatik-Studium

Diplom-Informatiker, Hochschule Karlsruhe (TH)
Diplom-Informatiker
Hochschule Karlsruhe (TH)
Maschinensehen, Robotik, formale Systeme; Nebenfach Mathematik

Position

Position

Meine Hauptstärken liegen im Design und in der Umsetzung von Software-Lösungen. Als Architekt kann ich den Entwurfsprozess begleiten und als Senior-Entwickler an der Umsetzung mitwirken. Bei Bedarf kann ich kleinere Entwicklerteams koordinieren und mein Wissen an andere Teammitglieder weitergeben.

 

Kompetenzen

Kompetenzen

Top-Skills

Java Scala TypeScript Spring Play Framework Akka Angular AWS ZIO

Produkte / Standards / Erfahrungen / Methoden

Akka
Angular
Apache
AWS
CloudFoundry
COAP
Docker
DTLS
Elastic Search
Event Sourcing
Gatling
Gitlab-CI
Gradle
Grafana
Helm
Jenkins
Jupyter
Kamon
Keycloak
Kibana
kind
Kubernetes
Logstash
Maven
mod_auth_openidc
Oak
OAuth 2.0
OpenFaaS
OpenID Connect
OpenShift
Play
Property Based Testing
RabbitMQ
SBT
SonarQube
Spring
Streaming
UMA 2.0
ZIO
Apache Beam
Flink
CircleCI
Cortex
Kafka
Karaf
Produkte:

  • Scala-Bibliotheken: ZIO, Cats, Shapeless, Monocle
  • XML-Tools: Xerxes, Xalan, Saxon, XML Spy, XEP, FOP
  • Applikationsserver, Servletcontainer: Tomcat, JBoss, Bea WebLogic, Jetty, Felix, WebObjects
  • Apache (inkl. mod_jk)
  • Persistenz-Frameworks: Hibernate, Slick
  • Webapplikationsframework: JSF 2.0, Play, Struts, Pustefix
  • HTML-Frontend: Google-Web-Toolkit (GWT), Scala.js, PrimeFaces, Twitter Bootstrap
  • JavaScriptframework: jQuery
  • Versionskontrolle: Git, SVN, CVS, VSS
  • Entwicklungsumgebungen: NetBeans, Eclipse, IntelliJ IDEA
  • Build-Tools: Ant, Maven, Gradle, SBT, Jenkins
  • Ticket-Systeme: Bugzilla, Jira
  • Suche: Elastic Search, Lucene
  • RuleEngines: JESS, JRule
  • Compiler-Compiler: Antlr, JavaCC, jay, jlex
  • UML: TogetherJ
  • Spring
  • WebServices: JaxWs, CXF, Axis
  • Tests: JUnit, EasyMock, Mockito, ScalaTest, ScalaCheck
  • Netbeans Profiler, IntelliJ Profiler
  • OSGi container: Felix, Karaf
  • Java Content Repository: Jackrabbit
  • Zabbix Server; Entwicklung eines Java-Zabbix-Clients
  • VMWare Workstation
  • OpenNMS

 

Linux:

Ich entwickle hauptsächlich unter Linux

Standards:

  • Reactive Streams
  • JEE: JSF, JSP, Servlets, JPA, EJB
  • XML: DTD, XML Schema, XSLT, XPath, XSL-FO, JAXP, JAXB, SAX, DOM
  • Web: HTML, DHTML, XHTML, CSS, W3C, OpenAPI
  • Persistenz: JPA, JDBC, JCR
  • WebServices: JaxWs / REST / SOAP
  • JSON
  • UML

Erfahrungen:

  • Funktionale Programmierung; Effekt-Systeme
  • Internet der Dinge
  • Entwickeln von Internet-/Intranet-Applikationen
  • Betrieb großer geclusterten Web-Anwendungen und zug. Dienste
  • Tiefes Verständnis von OO/OOA/OOD und Entwurfsmustern (Design Patterns)
  • DSL-Entwicklung: interne DSLs (realisiert in Scala); externe DSLs (realisiert mit ANTLR, JavaCc oder Scala-Parser-Combinators)
  • Entwicklung eines open-source Java-XML Data-Binding-Frameworks (beinhaltet einen validierenden XML Parser). Dadurch Expertenwissen im Bereich XML Schema und XML-APIs
  • Entwicklungs eines XSLT (2.0) Prozessors. Dadurch Expertenwissen im Bereich XSLT
  • Web-Applikations Framework-Design und -Realisierung basierend auf XML-Technologien und Codegenerierung
  • Sehr große Erfahrungen im Bereich Machinensehen (Computer Vision) und Mustererkennung (Pattern Recognition), da dies Inhalte der Promotion waren

Betriebssysteme

SUN OS, Solaris
Unix, Linux
Windows

Programmiersprachen

Bash
C#
Emacs
Go
Java
seit 1999
JavaScript
Scala
seit 2010
ScalaJS
Shell
TeX, LaTeX
TypeScript
yacc/lex
Rule-Engine: JRule von ILog
Rule-Engine: JESS (Java Expert System Shell; ging aus CLIPS hervor)
XML
DTD
XSD (XML Schema)
XSLT (2.0)
XSL-FO
JavaCC (Java Compiler-Compiler)
Antlr (Compiler-Compiler)

Scriptsprachen

Datenbanken

Access
H2
InfluxDB
JDBC
MongoDB
MS SQL Server
MySQL
ODBC
PostgreSQL
Redis
SQL
Sybase

Datenkommunikation

AMQP
Internet, Intranet
LWM2M
TCP/IP
UDP
Kafka

Hardware

PC
SUN

Branchen

Branchen

Automotive
Bank
Banken
Big-Data Analytics
EDV
Finanzinstitut

Finanzdienstleistung

Handel

Internet

IT
IT-Dienstleister
Logistik
Netzwerkmanagement
SAP
Softwarehersteller
Telekommunikation
Versandhandel
Zeitungen

Einsatzorte

Einsatzorte

Deutschland

Bevorzugt in D6, D7, D8

möglich

Projekte

Projekte

1 Jahr 7 Monate
2022-01 - 2023-07

Weiterentwicklung und Betrieb eines Internetshops

Software- und Infrastruktur-Entwickler Scala TypeScript Groovy
Software- und Infrastruktur-Entwickler

Technologie: Scala, TypeScript, Spring-Boot, AWS, Jenkins

Die Arbeit bestand aus 2 Schwerpunkten:

1. Weiterenwicklung / Wartung der Microservices eines Internetshops

Die Microservices sind backendseitig mit Scala / Spring-Boot und frontendseitig mit HTML/CSS/TypeScript implementiert.

Es wurde an Microservices im Bereich der Zahlung und Lieferung gearbeitet. Das Verhalten des Shops bei Lastspitzen wurde untersucht und verbessert.

2. Migration / Wartung des Infrastruktur-Codes

Eine selbstgeschriebene Anwendung zum Aufsetzen der Infrastruktur soll abgelöst werden. Die bisherige Anwendung basiert auf AWS-CloudFormation. Zur Ablösung wurden mehrere AWS-CDK-Anwendungen in TypeScript implementiert.

AWS Docker Jenkins Gradle Spring Gattling MongoDB Atlassian JIRA Atlassian Confluence
Scala TypeScript Groovy
Otto
1 Jahr 5 Monate
2020-08 - 2021-12

Weiterentwicklung und Wartung eine Netzwerk-Management-Systems

Entwickler Java Kotlin TypeScript
Entwickler

Neben Wartungsarbeiten bestand der Einsatz aus den folgenden Phasen mit Weiterentwicklungen:


Phase: Weiterentwicklung des Kernels und der Konfiguration eines IoT-Devices

Technologie: Java, Kotlin, Docker, Azure


Das IoT-Device enthält einen in Kotlin geschriebenen Kernel und läuft unter Linux entweder auf einem Hardware-Device oder innerhalb einer VM. Der Kernel lädt Docker-Images und kontrolliert die Ausführung von Docker-Containern, die die eigentiche Anwendungslogik enthalten.

Durch eine Azure-Cloud-Anwendung werden mit Azure-Functions und dem Azure-IoT-Hub die IoT-Devices konfiguriert.


Phase: Weiterentwicklung einer Streaming-Anwendung zur Aggregation von Netflow-Daten und der zug. Visualisierung

Technologie: Java, Apache Beam, Flink, Kafka, ElasticSearch, Grafana


In einer mit Apache Beam implementierten Streaming-Anwendung werden Netflow-Daten zeitlich aggregiert und die Hosts / Anwendungen mit den höchsten Kommunikationsvolumina bestimmt. Die Anwendung läuft auf Flink-Clustern und kann mehrere 100.000 NetFlow-Pakete pro Sekunde verarbeiten.

Es wurde eine weitere Aggregation nach "Differentiated Service Code Points" (DSCP) und die Berücksichtigung der "Explicit Congestion Notification" (ECN) implementiert. Durch Optimierung der Streaming-Pipeline-Struktur konnte die Last der Pipeline trotz der zusätzlichen Funktionalität reduziert werden.

Flow-Aggregate werden in ElasticSearch gespeichert. Ein ElasticSearch-Plugin wurde angepasst, das die Abfrage der Flow-Aggregate als Zeitreihen erlaubt. Ein Grafana-Plugin wurde erweitert, um die Abfrage und Visualisierung der zusätzlichen DSCP-Aggregation und ECN-Information zu ermöglichen.


Phase: Signierung von Multi-Architektur-Docker-Images

Technologie: Docker, Notary, CircleCI


Die auf den oben beschriebenen IoT-Devices laufenden Docker-Images werden mit Docker Content Trust signiert. Dazu wurden die benötigten Public/Private-Key-Paare eingerichtet und der Build-Vorgang entsprechend angepasst.

Da das IoT-Device auf unterschiedlichen Prozessoren laufen kann, handelt es sich bei den Docker-Images um Multi-Architektur-Images. Signierte Multi-Architektur-Images konnten zur Zeit der Umsetzung noch nicht durch Docker selbst erzeugt werden sondern verlangten den direkten Einsatz des zugrundeliegenden Notary-Service.


Phase: Nutzung von Cortex zur Speicherung und Visualisierung von Netflow-Daten

Technologie: Java, Apache Beam, Flink, Kafka, Cortex, Prometheus, Grafana


Es wurde eine Sink-Transformation für Apache-Beam implementiert, um Flow-Aggregate in Cortex zu speichern. Hauptprobleme bei der Umsetzung waren die zeitliche Ordnung von Ergebnissen und Kardinalitätsbeschränkungen.

Cortex verlangt, dass Samples, die zur gleichen Zeitreihe gehören, zeitlich geordnet geschrieben werden. Apache-Beam garantiert jedoch keine zeitliche Ordnung von Ergebnissen. Zur Lösung wurden ein weiteres Attribut in Zeitreihen eingeführt, das "verspätete" Ergebnisse anderen Zeitreihen zuordnet. Über dieses Attribut kann bei der späteren Abfrage aggregiert werden.

Cortex verlangt, dass das Produkt der Attribut-Kardinalitäten einer Metric nicht zu groß wird. Um dieses Problem zu mildern wurde ein Teil der Attribute in die Metrik-Namen kodiert.


OpenNMS Karaf Microsoft Azure Elastic Search Grafana Cortex Flink Docker Pometheus Kafka Apache Beam Protobuf
Java Kotlin TypeScript
OpenNMS Group
Remote
3 Monate
2020-05 - 2020-07

ScalaTs Plugin

Entwickler Scala TypeScript ScalaJS
Entwickler

Es wurde ein SBT Plugin entwickelt, um die Verwendung von ScalaJS-Code in TypeScript-Code zu erleichtern. Dazu leitet das Plugin aus ScalaJS-Sourcen eine entsprechende TypeScript-Declaration-Datei ab. Die TypeScript-Declaration-Datei wird zusammen mit der ScalaJS-Ausgabe in ein Node-Modul gebündelt, das in TypeScript-Code importiert werden kann. Dadurch kann aus TypeScript-Code typsicher auf ScalaJS-Code zugegriffen werden.

SBT
Scala TypeScript ScalaJS
OpenSource
1 Jahr
2019-07 - 2020-06

KFZ-Versicherungsanwendung

Entwickler / Architekt Java Scala Property Based Testing ...
Entwickler / Architekt

Die Anwendung besteht aus einem Spring-Boot-Backend und Angular-Clients für Administratoren bzw. Versicherungsverkäufer.

Die Anwendung wurde durch folgende Maßnahmen modernisiert:

  • Migration: Spring Boot 1.5 -> 2.0; Angular 2 -> Angular 9
  • Deployment: Tomcat 8 -> Kubernetes / OpenShift
  • Aufsetzen einer CI-Umgebung: Jenkins-Pipeline innerhalb von OpenShift; inkl. Backend-Integration-Tests und Chrome-Headless-Browser-Tests; SonarQube-Integration
  • OAuth 2.0 Authentifizierung in vorgeschaltetem Apache mit mod_auth_openidc

Am Code wurden zahlreiche Verbesserungen durchgeführt:

  • Verwendung von Springfox zur automatischen REST-API-Beschreibung. Automatische Angular-Client-Generierung.
  • Verbesserung der Validierungslogik durch Einsatz von Cats Validated.
  • Verbesserte Testabdeckung durch generierte Test-Fälle (property based testing; tool: Scala Check).
  • Bessere Nutzung von Angular-Mechanismen (insbesondere vermehrter Einsatz von Services und Dependency-Injection)
  • Vermehrter Einsatz von Observables
Spring Angular Jenkins OpenShift Kubernetes H2 MySQL Gradle mod_auth_openidc Apache Jenkins SonarQube
Java Scala Property Based Testing TypeScript SQL OAuth 2.0
Mercedes-Benz Bank
Stuttgart
9 Monate
2018-10 - 2019-06

Mitarbeit an einer Big-Data-Analytics Plattform

Entwickler / Architekt Streaming Scala ScalaJS ...
Entwickler / Architekt

Während des Einsatzes wurden einzelne Features full-stack bearbeitet (Frontend und Backend). Dabei wurden bestehende Features überarbeitet und neue Features entworfen und entwickelt. Die Frontend-Entwicklung fand mit TypeScript, ScalaJS und Angular statt. In der Backend-Entwicklung kam hauptsächlich Scala und etwas Go zum Einsatz.

Eine weiterer wichtiger Beitrag war die Einführung von Integration-Tests, in denen Plattform-Bestandteile in lokalen Kubernetes Clustern deployt und getestet werden. Dazu wurde Kubernetes in Docker (kind) innerhalb von Gitlab-CI eingesetzt.

Der Einsatz gliederte sich grob in 3 Phasen:


Phase: Überarbeitung der Kommunikation mit Jupyter Kernels

Die Umsetzung basierte auf Akka. Der Kommunikationszustand wurde durch Aktoren repräsentiert, die für eine verlässliche Sitzungs- / Jupyter-Kernel-Verwaltung sorgten.


Phase: Entwicklung eines Ingress für die Funktionsausführung

Die Plattform erlaubt es, wiederkehrende Auswertungen als HTTP-Funktionen zu deployen (basierend auf OpenFaaS). Es wurde ein Ingress entwickelt, der die Authorisierung der Aufrufe vornimmt und Aufrufergebnisse sowie zug. Log-Ausgaben persistiert. Der Ingress unterstützt sowohl synchrone als auch asynchrone Funktionsaufrufe. Ergebnisse können weitergeleitet, weitergeleitet und persistiert oder nur persistiert werden. Durch Streaming ist sichergestellt, dass der Ingress auch bei sehr großen Datenmengen mit begrenztem Speicher auskommt.


Phase: Rechte/Rollen-Konzept für Repository

Das Repository basiert auf Apache Oak. Es wurde ein Rechte/Rollen-Konzept umgesetzt, das private, gemeinsame und geschützte Arbeitsbereiche unterstützt.

Kubernetes Docker kind Helm OpenFaaS Oak Gitlab-CI Angular Keycloak Play Akka Jupyter SBT PostgreSQL
Streaming Scala ScalaJS TypeScript Go Bash OAuth 2.0
Katana USU
Karlsuhe / Remote
3 Jahre 6 Monate
2015-04 - 2018-09

Entwicklungen und Evaluierungen im Bereich des Internet der Dinge (IoT)

Entwickler, Architekt Scala LWM2M Streaming ...
Entwickler, Architekt

Während der Projektlaufzeit wurden 4 unabhängige Unterprojekte bearbeitet.

Unterprojekt: Proof of Concept von Authorisierungsszenarien im IoT-Umfeld

  • Laufzeit: 2018/06-2018/09 (4 Monate)
  • Rolle im Projekt: Entwickler, Architekt
  • Technologie: Scala, Akka-HTTP, Scala.js, SBT, OAuth 2.0, OpenID Connect, UMA 2.0, Keycloak

Detaillierte Beschreibung: Es wurden Nutzungsszenarien für EBikes untersucht. Ein Fahrradbesitzer authorisiert mittels "User Managed Access" (UMA) eine andere Person zur Nutzung des Fahrrads. Das Fahrrad wird mittels OAuth 2.0 "Device Flow" authorisiert, auf Besitzer- und Nutzer-Daten zuzugreifen. Verschiedene Nutzer authorisieren sich mittels UMA gegenseitig, auf bestimmte Daten (z.B. aufgezeichnete Fahrten) zuzugreifen.

Alle User-Interfaces wurden als "Single-Page Application" mittels Scala.js umgesetzt. Das Backend (der Resource-Server) wurde mittels Akka-HTTP implementiert. Die Kommunikation erfolgte mittels JSON und der circe-JSON-Bibliothek, wodurch dieselben Datenmodelle sowohl in den User-Interfaces als auch im Backend genutzt werden konnten.

Unterprojekt: Entwicklung eines Handshake-Endpunktes für IoT Devices und eines zug. Konfigurationstools

  • Laufzeit: 2018/03 - 2018/05 (3 Monate)
  • Rolle im Projekt: Entwickler
  • Technologie: Java, SpringBoot 1.5 / 2, Card Verifiable Certificates (CVC), Certificate-Chains, EdDSA, Diffie-Hellman

Detaillierte Beschreibung: Mittels eines 2-Schritt-Handshakes wird ein "shared secret" zwischen IoT-Devices und einem Backend etabliert und beide Seiten zugleich authentisiert. Der Handshake ist an den Diffie-Hellman Key-Exchange-Algorithmus angelehnt. Da es sich um "Constrained Devices" handelt und um Bandbreite zu sparen, werden CVCs und EdDSA-Schlüssel verwendet.

Unterprojekt: Bewertung möglicher Protokoll-Stacks, Kommunikationspatterns, Kommunikationssetups und System-Architekturen für IoT-Devices

  • Laufzeit: 2018/01 - 2018/02 (2 Monate)
  • Rolle im Projekt: Rechercheur, Entwickler, Tester
  • Technologie: Scala, Eclipse Californium, UDP, DTLS, COAP(S), TCP, TLS, HTTP(S), LWM2M

Detaillierte Beschreibung: Die verschiedenen Protokoll-Stacks wurden anhand der folgenden Kriterien bewertet: Direktheit, Sicherheit, Zustandslosigkeit, Cloud-Support, Reifegrad, Kosten-Effizienz, Robustheit und geeignete Nachrichtengrößen. Bei den Kommunikationspatterns wurde untersucht, wie mit Devices kommuniziert werden kann, die die meiste Zeit nicht erreichbar sind. Dabei wurde das Konzept "Digital Twin" beleuchtet. Die Bewertung des Kommunikationssetup befasste sich damit, wie eine sichere Kommunikation zwischen Devices und Backend hergestellt werden kann. Hier wurden "pre-shared keys" bei denen Devices vorab im System registriert werden müssen, mit der Verwendung von Zertifikatsketten verglichen. Schließlich wurde eine Software-Architektur aufgestellt, die dem Konzept des "Digital Twin" Rechnung trägt.

Unterprojekt: Anbindung von Devices an das Internet der Dinge (IoT)

  • Laufzeit: 2015/04 - 2017/12 (33 Monate)
  • Rolle im Projekt: Entwickler, Architekt
  • Technologie: Scala, Akka, Streaming, Event Sourcing, MongoDB, RabbitMQ, Redis, Docker, Cloud Foundry, ELK-Stack, Grafana, Kamon, InfluxDB, LWM2M, Maven, SBT, Gatling

Detaillierte Beschreibung: Es wurde ein Backend zur Anbindung von Devices entwickelt, die Status-Informationen senden (Telemetry) und Befehle entgegennehmen können (Control). Die Devices sind nur zu bestimmten Zeitpunkten erreichbar. Alle Events werden aufgezeichnet, um daraus ein Bild vom momentanen Device Zustand ableiten zu können.

Das Backend ist in Form eines Flussgraphen implementiert, an das die Ein- und Ausgaben als Daten-Sourcen bzw. -Senken angebunden sind. Backpressure verhindert, dass das System überladen werden kann. Das Backend kann in einer geclusterten Umgebung laufen, da zusätzliche Instanzen ohne Datenverlust jederzeit gestartet und wieder beendet werden können.

Die Implementierung des Backend basiert auf Akka Streams und Aktoren. Außerdem kommen die Bibliotheken Shapeless, Cats und Monocle zum Einsatz.

Akka MongoDB RabbitMQ Redis Docker CloudFoundry Elastic Search Logstash Kibana Grafana InfluxDB Maven SBT Keycloak Kamon Gatling
Scala LWM2M Streaming Event Sourcing UDP DTLS COAP OAuth 2.0 OpenID Connect UMA 2.0
Bosch Software Innovations
Waiblingen (Rems)

Aus- und Weiterbildung

Aus- und Weiterbildung

1 Monat
2014-12 - 2014-12

Software-Architekt

iSAQB Certified Professional for Sofware Architecture - Foundation Level (CPSA-F), Integrata AG
iSAQB Certified Professional for Sofware Architecture - Foundation Level (CPSA-F)
Integrata AG
3 Jahre 3 Monate
1994-04 - 1997-06

Promotion im Bereich Maschinensehen

Dr. rer. nat., Hochschule Karlsruhe (TH)
Dr. rer. nat.
Hochschule Karlsruhe (TH)
Mitarbeiter am Lehrstuhl für Kognitive Systeme und am Fraunhofer Institut (IITB). Thema der Promotion: Verfolgung von Personen in monokularen Bildfolgen.
6 Jahre 7 Monate
1987-09 - 1994-03

Informatik-Studium

Diplom-Informatiker, Hochschule Karlsruhe (TH)
Diplom-Informatiker
Hochschule Karlsruhe (TH)
Maschinensehen, Robotik, formale Systeme; Nebenfach Mathematik

Position

Position

Meine Hauptstärken liegen im Design und in der Umsetzung von Software-Lösungen. Als Architekt kann ich den Entwurfsprozess begleiten und als Senior-Entwickler an der Umsetzung mitwirken. Bei Bedarf kann ich kleinere Entwicklerteams koordinieren und mein Wissen an andere Teammitglieder weitergeben.

 

Kompetenzen

Kompetenzen

Top-Skills

Java Scala TypeScript Spring Play Framework Akka Angular AWS ZIO

Produkte / Standards / Erfahrungen / Methoden

Akka
Angular
Apache
AWS
CloudFoundry
COAP
Docker
DTLS
Elastic Search
Event Sourcing
Gatling
Gitlab-CI
Gradle
Grafana
Helm
Jenkins
Jupyter
Kamon
Keycloak
Kibana
kind
Kubernetes
Logstash
Maven
mod_auth_openidc
Oak
OAuth 2.0
OpenFaaS
OpenID Connect
OpenShift
Play
Property Based Testing
RabbitMQ
SBT
SonarQube
Spring
Streaming
UMA 2.0
ZIO
Apache Beam
Flink
CircleCI
Cortex
Kafka
Karaf
Produkte:

  • Scala-Bibliotheken: ZIO, Cats, Shapeless, Monocle
  • XML-Tools: Xerxes, Xalan, Saxon, XML Spy, XEP, FOP
  • Applikationsserver, Servletcontainer: Tomcat, JBoss, Bea WebLogic, Jetty, Felix, WebObjects
  • Apache (inkl. mod_jk)
  • Persistenz-Frameworks: Hibernate, Slick
  • Webapplikationsframework: JSF 2.0, Play, Struts, Pustefix
  • HTML-Frontend: Google-Web-Toolkit (GWT), Scala.js, PrimeFaces, Twitter Bootstrap
  • JavaScriptframework: jQuery
  • Versionskontrolle: Git, SVN, CVS, VSS
  • Entwicklungsumgebungen: NetBeans, Eclipse, IntelliJ IDEA
  • Build-Tools: Ant, Maven, Gradle, SBT, Jenkins
  • Ticket-Systeme: Bugzilla, Jira
  • Suche: Elastic Search, Lucene
  • RuleEngines: JESS, JRule
  • Compiler-Compiler: Antlr, JavaCC, jay, jlex
  • UML: TogetherJ
  • Spring
  • WebServices: JaxWs, CXF, Axis
  • Tests: JUnit, EasyMock, Mockito, ScalaTest, ScalaCheck
  • Netbeans Profiler, IntelliJ Profiler
  • OSGi container: Felix, Karaf
  • Java Content Repository: Jackrabbit
  • Zabbix Server; Entwicklung eines Java-Zabbix-Clients
  • VMWare Workstation
  • OpenNMS

 

Linux:

Ich entwickle hauptsächlich unter Linux

Standards:

  • Reactive Streams
  • JEE: JSF, JSP, Servlets, JPA, EJB
  • XML: DTD, XML Schema, XSLT, XPath, XSL-FO, JAXP, JAXB, SAX, DOM
  • Web: HTML, DHTML, XHTML, CSS, W3C, OpenAPI
  • Persistenz: JPA, JDBC, JCR
  • WebServices: JaxWs / REST / SOAP
  • JSON
  • UML

Erfahrungen:

  • Funktionale Programmierung; Effekt-Systeme
  • Internet der Dinge
  • Entwickeln von Internet-/Intranet-Applikationen
  • Betrieb großer geclusterten Web-Anwendungen und zug. Dienste
  • Tiefes Verständnis von OO/OOA/OOD und Entwurfsmustern (Design Patterns)
  • DSL-Entwicklung: interne DSLs (realisiert in Scala); externe DSLs (realisiert mit ANTLR, JavaCc oder Scala-Parser-Combinators)
  • Entwicklung eines open-source Java-XML Data-Binding-Frameworks (beinhaltet einen validierenden XML Parser). Dadurch Expertenwissen im Bereich XML Schema und XML-APIs
  • Entwicklungs eines XSLT (2.0) Prozessors. Dadurch Expertenwissen im Bereich XSLT
  • Web-Applikations Framework-Design und -Realisierung basierend auf XML-Technologien und Codegenerierung
  • Sehr große Erfahrungen im Bereich Machinensehen (Computer Vision) und Mustererkennung (Pattern Recognition), da dies Inhalte der Promotion waren

Betriebssysteme

SUN OS, Solaris
Unix, Linux
Windows

Programmiersprachen

Bash
C#
Emacs
Go
Java
seit 1999
JavaScript
Scala
seit 2010
ScalaJS
Shell
TeX, LaTeX
TypeScript
yacc/lex
Rule-Engine: JRule von ILog
Rule-Engine: JESS (Java Expert System Shell; ging aus CLIPS hervor)
XML
DTD
XSD (XML Schema)
XSLT (2.0)
XSL-FO
JavaCC (Java Compiler-Compiler)
Antlr (Compiler-Compiler)

Scriptsprachen

Datenbanken

Access
H2
InfluxDB
JDBC
MongoDB
MS SQL Server
MySQL
ODBC
PostgreSQL
Redis
SQL
Sybase

Datenkommunikation

AMQP
Internet, Intranet
LWM2M
TCP/IP
UDP
Kafka

Hardware

PC
SUN

Branchen

Branchen

Automotive
Bank
Banken
Big-Data Analytics
EDV
Finanzinstitut

Finanzdienstleistung

Handel

Internet

IT
IT-Dienstleister
Logistik
Netzwerkmanagement
SAP
Softwarehersteller
Telekommunikation
Versandhandel
Zeitungen

Vertrauen Sie auf GULP

Im Bereich Freelancing
Im Bereich Arbeitnehmerüberlassung / Personalvermittlung

Fragen?

Rufen Sie uns an +49 89 500316-300 oder schreiben Sie uns:

Das GULP Freelancer-Portal

Direktester geht's nicht! Ganz einfach Freelancer finden und direkt Kontakt aufnehmen.