© Mapbox, © OpenStreetMap

Speaker

Tim Zöller

Tim Zöller

Founder @ lambdaschmiede GmbH

Gründer @ lambdaschmiede GmbH

Freiburg, Germany

Tim founded the company lambdaschmiede GmbH. He helps his clients to digitalize their manual business processes with Java and is a co-founder of the Java Usergroup Mainz. In his free time, he accumulates new side projects with Java and Clojure and sometimes even finishes one of them.

Tim hat das Unternehmen lambdaschmiede GmbH gegründet. Er hilft Kunden dabei, ihre manuellen Geschäftsprozesse mit Java zu automatisieren und ist Mitgründer der Java Usergroup Mainz. In seiner Freizeit häuft er neue Nebenprojekte mit Java und Clojure an, und beendet sogar ab und zu eines davon.

Area of Expertise

  • Information & Communications Technology

Topics

  • java
  • bpmn
  • Clojure

Sessions

Why my technologically most boring project was also my most successful en de

In 2012, I started my first job after training as a software developer. As the only developer in an IT team of two people, I took over applications implemented in Delphi that managed processes in a small chemical company, with the goal of modernizing them and fixing some common issues.

When I left the company two years later, we had developed, based on standard JEE features, a warehouse management system with inventory mode, user interface for computers and handheld scanners, hazardous materials handling, reservations for production plans, printing functions for delivery notes and hazardous materials labels, ERP export, and shipping registration - all transaction-safe, on two Glassfish servers in a cluster and a database. Naturally, it was in productive use.

Almost 10 years later, I work on large projects for DAX-listed companies and government agencies. When I talk about "IT projects" in my environment, the first associations are blown budgets, missed deadlines, and many meetings. Indeed, looking back at the time described at the beginning, it shows me that higher productivity in software projects is possible. What was different in those projects? In this session, we will make a comparison and investigate whether we can learn something from my early days as a software developer for large software projects.

Embrace the func - How far has functional programming come in Java? en de

In recent Java releases, the focus has often been on features known from functional programming languages. Do these additions suffice to enable functional programming in Java? And if so, what are the advantages that this paradigm brings? Is it worthwhile to use functional Java constructs in our everyday lives, or are they purely theoretical gimmicks? We will examine these questions together in this live coding session, keeping a close eye on the readability and maintainability of the resulting code, as well as how Java compares to "real" functional languages like Clojure or Haskell in this discipline.

Embrace the func - funktionale Programmierung mit Java en de

In den Java-Releases der jüngeren Vergangenheit lag der Fokus oft auf Features, welche aus funktionalen Programmiersprachen bekannt sind. Reichen diese Ergänzungen aus, um in Java funktionale Programmierung zu betreiben? Und, falls ja, was sind die Vorteile, die dieses Paradigma mit sich bringt? Lohnt es sich, funktionale Java-Konstrukte in unserem Alltag einzusetzen, oder handelt es sich um rein theoretische Spielereien? Diese Fragen nehmen wir in dieser Livecoding-Session gemeinsam unter die Lupe, wobei wir auch ein scharfes Auge darauf werfen, wie les- und wartbar der resultierende Code ist und wie sich Java gegen "echte" funktionale Sprachen wie Clojure oder Haskell in dieser Disziplin schlägt.

Ruby and Java and Python, oh my! Polyglot programs with GraalVM en de

GraalVM, that's the one with native binaries and Native Image, right? In fact, when most people hear about Oracle's virtual machine, they first think of small and lightweight programs that start in no time. Besides this prominent feature, GraalVM is also a JDK and an execution environment for polyglot programming. Within the same VM, Java, JavaScript, Ruby, R, or Python can be executed.

In this talk, we will look at use cases where we go beyond the Java horizon and use features from other programming languages and their ecosystems to always use the right tool for the job without leaving our runtime environment. The examples come from both our productive experience and our curiosity about what is possible and what makes sense.

Ruby und Java und Python, oh weh! Polyglotte Programme mit GraalVM en de

GraalVM, das ist doch das mit den nativen Binaries und Native Image, oder? Tatsächlich dürfte den meisten Menschen bei der Nennung von Oracles virtueller Maschine zuerst an kleine und leichtgewichtige Programme denken, welche in kürzester Zeit starten. Neben diesem prominenten Feature ist GraalVM aber auch ein JDK und eine Ausführungsumgebungen für polyglotte Programmierung. In der selben VM kann Java, JavaScript, Ruby, R oder Python ausgeführt werden.

In diesem Vortrag werden wir uns Anwendungsfälle anschauen, in welchen wir über den Java Tellerrand hinausschauen und Funktionen aus anderen Programmiersprachen und deren Ökosystem nutzen um jeweils das geeignete Werkzeug für die jeweilige Aufgabe zu nutzen, ohne unsere Laufzeitumgebung zu verlassen. Die Beispiele stammen hierbei sowohl aus unserer produktiven Erfahrung, als auch aus unserer Neugierde was möglich und was sinnvoll ist.

Warum mein technologisch langweiligstes Projekt auch mein erfolgreichstes war en de

Im Jahr 2012 trat ich meinen ersten Job nach der Ausbildung zum Softwareentwickler an. Als einziger Entwickler in einem IT Team von zwei Personen übernahm ich Applikationen welche mit Delphi umgesetzt waren und die Abläufe in einem kleinen Chemieunternehmen regelten, mit dem Ziel, sie auf modernere Füße zu stellen und einige häufige Probleme zu beheben.

Als ich das Unternehmen nach zwei Jahren verließ, hatten wir, aufbauend auf Standard JEE Funktionen, eine Lagerverwaltung mit Inventurmodus, User Interface für Rechner und Handscanner, Gefahrgutbehandlung, Reservierung für Produktionspläne, Druckfunktion für Lieferscheine und Gefahrgutettiketten, ERP-Export und Versandanmeldung entwickelt - alles transaktionssicher, auf zwei Glassfish Servern im Cluster und einer Datenbank. Natürlich produktiv im Einsatz.

Fast 10 Jahre später bewege ich mich beruflich in Großprojekten von DAX-Konzernen und Behörden. Wenn ich in meinem Umfeld von "IT-Projekten" spreche, sind die ersten Assoziationen überzogene Budgets, gerissene Deadlines und viele Meetings. Und tatsächlich zeigt mir der Blick zurück auf die eingangs beschriebene Zeit, dass höhere Produktivität in Softwareprojekten möglich sein kann. Was war in diesen Projekten anders? In dieser Session wagen wir einen Vergleich und untersuchen, ob wir auch für große Softwareprojekte etwas aus meinen Anfängen als Softwareentwickler lernen können.

Zurück in die Zukunft! Zeitreisen mit bitemporalen Datenbanken de en

Für unsere Datenhaltung gibt es zwei Zeitachsen, welche wir Softwareentwickler mit hohem Aufwand verwalten müssen: Die Transaktionszeit und die Gültigkeitszeit eines Datensatzes. Während die Transaktionszeit festhält, wann ein Datensatz in den Speicher geschrieben wurde, sagt die Gültigkeitszeit aus, von wann bis wann ein Datensatz in der Programmlogik berücksichtigt werden soll. Treffen beide dieser Zeitachsen aufeinander, steigt die Komplexität unserer Persistierungs- und Abfragelogik oft exponentiell. Als Beispiel kann man eine rückwirkend eingetragene Gehaltserhöhung heranziehen: Einem Menschen in unserer Firma wird am 14. März eine Gehaltserhöhung gewährt, welche rückwirkend ab Januar gilt. Der Gültigkeitszeitraum ist klar, aber wie erklären wir dem Finanzamt, warum im Januar und Februar noch der geringere Betrag überwiesen wurde? Welche Gültigkeit konnten wir zur jeweiligen Transaktionszeit annehmen, und wir können wir den Fall in unserer Software nachstellen? Datenbanken welche Bitemporalität abbilden können helfen uns dabei, diese beiden Zeitachsen zu verwalten. In diesem Vortrag veranschauliche ich, wie sie benutzt werden können, welche Anwendungsfälle wir damit abbilden können und wie komplex solche Lösungen werden können, wenn wir sie uns mit Applikationslogik oder Datenbanktriggern selbst bauen.

Back to the Future! Time Travel with Bitemporal Databases de en

For our data storage, there are two time axes that we, as software developers, must manage with great effort: the transaction time and the validity time of a data record. While the transaction time records when a data set was written to storage, the validity time indicates from when to when a data record should be considered in the program logic. When both of these time axes intersect, the complexity of our persistence and query logic often increases exponentially. An example can be a retroactively recorded salary increase: An employee in our company is granted a salary increase on March 14th, which is retroactively effective from January. The validity period is clear, but how do we explain to the tax office why the lower amount was transferred in January and February? What validity could we assume at the respective transaction time, and how can we replicate the case in our software? Databases that can map bitemporality can help us manage these two time axes. In this talk, I will illustrate how they can be used, which use cases we can represent with them, and how complex such solutions can become if we build them ourselves with application logic or database triggers.

Die Datenbank-Performance Werkzeugkiste de en

Die Leistungsfähigkeit einer Datenbank ist für viele Anwendungen entscheidend, stellt jedoch oft eine Herausforderung für uns Entwickler dar. Wenn wir uns mit dem Thema beschäftigen, stoßen wir häufig auf Blogs und Artikel zu Themen wie Indizes, Partitionen, Sharding und Cache-Konfigurationen, die stark datenbankzentriert sind. Aber wo sollten wir ansetzen, wenn wir feststellen, dass unsere Anwendung zu langsam ist? Und wie erkennen wir einen Optimierungsbedarf überhaupt?

In dieser Session werden wir erkunden, wie wir unsere Anwendung kontinuierlich für eine bessere Datenbankleistung optimieren können. Wir werden damit beginnen, verschiedene Methoden zur korrekten Überwachung zu veranschaulichen, Probleme bei der Prüfung der Datenbankperformance auf unseren Entwicklungssystemen angehen und Muster sowie bewährte Verfahren zur Verbesserung der Datenbankleistung aus realen Situationen in Softwareprojekten, sowohl großen als auch kleinen, abzuleiten

The database performance tool belt de en

Database performance is crucial for many applications, but it is often daunting for us developers. When we delve into the topic, we are often confronted with blogs and articles about indexes, partitions, sharding, and cache configurations, which are highly database-centric. However, what is a good starting point if we realize that our application is too slow? And how do we even identify that our application is slow?

In this session, we will explore how to consistently optimize our application for database performance. We will start by discussing several methods to configure proper monitoring, address issues related to testing database performance on our development systems, and derive patterns and good practices for enhancing database performance from real situations in software projects, both big and small.

JAX 2024 Upcoming

April 2024 Mainz, Germany

Digital Crafts Day 2024 - by DCN Sessionize Event Upcoming

April 2024 Weiden, Germany

JCON WORLD 2023 Sessionize Event

November 2023

JAX 2023

May 2023 Mainz, Germany

Javaland 2023

March 2023 Brühl, Germany

Spring I/O

May 2022 Barcelona, Spain

JAX 2022

May 2022 Mainz, Germany

Javaland 2022

March 2022 Brühl, Germany

JAX 2021

May 2021 Mainz, Germany

Javaland 2021

March 2021 Brühl, Germany

CamundaCon 2020.2

October 2020

JAX 2020

September 2020 Mainz, Germany

JAX 2019

May 2019 Mainz, Germany

microXchg 2019 Sessionize Event

April 2019 Berlin, Germany

:clojureD 2019

February 2019 Berlin, Germany

JUG Saxony Day 2018

September 2018 Dresden, Germany

Tim Zöller

Founder @ lambdaschmiede GmbH

Freiburg, Germany