Blog & Articles

Blog Post

Good arguments for SPA frameworks

I love SPAs when they are used with a clear purpose. I hate them when they are not. This blog post tries to explain my personal conflict.

Article

Gut gesiebt

Für die komplexe Infrastruktur großer Microservice-Umgebungen versprechen Service Meshes eine einfache Lösung. Aber nur mit dem Blick für die richtigen Eigenschaften lässt sich der beste Ansatz für die eigene Architektur finden.

Article

Modernes funktionales Programmieren in Java

Blog Post

Anatomy of a Good Test

In our last post, we focused on why we should write tests and what value they provide. This time we will go far more technical and take a look at a single test. We will show what makes a test a good one and describe desired and unwanted properties. Interestingly enough, all those properties hold, no matter how isolated or integrated the test is. This already gives us a hint that all tests are alike, we should remember that. Unfortunately, as the topic is very broad, we will have to skip some aspects that play a role when we’re talking about test suites. We will get back to them in one of our next posts.

Article

Unbekannte Besonderheiten von Java

So gut wie jede Programmiersprache, die ich kenne, besitzt Dinge, die so erstaunlich sind, dass ich oft denke „Was? Das geht?“. In dieser Kolumne wollen wir uns acht solche Besonderheiten von Java anschauen und verstehen, wieso diese funktionieren und wozu sie gut sein können.

Article

Developers are Irresponsible and Childish!

About Respect and Trust

Blog Post

Why you should write automated tests

This blog post gives an overview of the most common benefits gained by writing automated tests. It starts in a place where most of the projects we’ve seen so far are: tests are written as a last step of the development process. Then it shows additional benefits that could be gained if we all gave the tests a bit more focus and care.

Blog Post

Visualizing the progress of a refactoring into a hexagonal architecture using jQAssistant

In my last project, we decided to refactor the inner structure of one of our services into a Hexagonal Architecture. It was clear that this was no task that could be done within a couple of days. During this long-running refactoring, we wanted to make our progress visible. Where are we now? What did we already have achieved? What do we still have to do? In this blog post, I describe the approach we took and how it helped us with our task.

Blog Post

Ganz sichere Verbindungen

Teil 2: Aufsetzen von nginx unter der Verwendung eines Yubikey HSMs

Article

Images für Java-Anwendungen bauen

Vielfach werden für den Betrieb von Java-Anwendungen Container verwendet. Das setzt voraus, dass die Anwendung als Container-Image zur Verfügung gestellt wird. Doch wie entsteht ein solches Image? Und worauf sollten wir achten? Dieser Artikel zeigt mehrere Wege, wie wir für eine Anwendung zu einem solchen Image gelangen können und worauf wir dabei achten sollten.

Blog Post

Ganz sichere Verbindungen

Blog Post

Cookie-based Spring Security Session

Blog Post

Does “Broken” Agility Help?

Agile software development is often insufficiently implemented and executed. Does it help anyway?

Blog Post

Happy without a Service Mesh

It does not always have to be a service mesh. Even microservices are not a good idea per se. For good decisions we have to get a deep understanding of the problem first.

Article

Domain-driven Design in the Large

A Structured Approach to DDD

Article

Mit offenen Augen und offenem Geist

In Deutschland leben ca. 7,8 Mio. schwerbehinderte Menschen. Hierbei handelt es sich um eine enorme Zahl potenzieller künftiger Kunden. Software, die unter Missachtung ihrer Accessibility entwickelt wurde, schließt diese Menschen als Nutzer aus. Und nicht nur diese: Die barrierefreie Gestaltung von Softwareprodukten birgt häufig übersehene Vorteile sowohl für Unternehmen als auch für sämtliche Nutzer.

Article

Machine Learning Daten in den Griff bekommen

Für viele Verfahren im Bereich Datenanalyse und Machine Learning werden mehrdimensionale Arrays benötigt. Da oft mit großen Datenmengen gearbeitet wird, ist es, neben anderen Optimierungen, wünschenswert eine Array Implementierung zu verwenden, die auf hohe Performance und geringen Speicherverbrauch optimiert ist. Viele Frameworks setzen deshalb auf ndarrays von numpy oder eigene Implementierungen statt die Standard Listen- oder Arrayimplementierungen von Python zu verwenden.

Blog Post

Sicher vernetzte Remote-Arbeit

Verteilte Knoten verbinden durch ein Nebula VPN

Blog Post

Automating Dependency Updates with GitHub Actions

This describes setting up a GitHub Actions workflow from scratch to schedule automated dependency updates.

Blog Post

Wenn Customizing zur Legacy wird

In diesem Blog-Post visualisiere ich ein regelrechtes Schlamassel mit Hilfe von Wardley Maps und Elementen aus dem strategischem Domain-driven Design.

Article

Das Ammenmärchen der Verschlüsselung

Bitcoin-Sicherheit durch Verschlüsselung?

Blog Post

Architektur, die mitwächst

Architektur sollte wachsen und gepflegt werden. Die Geschichte eines Shops.

Article

React: Lessons Learned

This article describes React from a backend programmers' perspective. It is not meant to be a tutorial, and it also does not present any new, fancy patterns or features. Rather, it is an interpretation of React with focus on shedding light on its functional aspects. Many experienced React developers appreciate the framework for being pragmatic, simple and easy to get work done with. This article unveils some of the theory behind this simplicity and shows how the core ideas behind the framework can be carried over to the lower levels of a Javascript application.

Article

Domain-driven Design to the code

Umsetzung des Domänenmodells ohne Technologie-Einfluss

Article

String-Vergleich gegen Timing-Angriffe härten

Der String-Vergleich über die Methode String#equals in Java ist anfällig für Timing-Angriffe. Der oft empfohlene Lösungsansatz ist schwierig korrekt zu implementieren. Aber selbst eine korrekte Implementierung kann bei der Ausführung noch für Timing-Angriffe anfällig sein. Die hier vorgestellte Methode schließt diese Probleme prinzipiell aus.