Blog & Artikel

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.

Artikel

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.

Artikel

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

Artikel

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.

Artikel

Mit offenen Augen und offenem Geist

Accessibility als Vorteil für das Software-Engineering

Artikel

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

Remote Arbeit ist in der aktuellen Situation opportun. In der digitalen Arbeitswelt bieten sich dafür eigentlich eine optimale Möglichkeiten. Ein Problem kann allerdings sein, dass essentielle Systeme, welche für die Arbeitsvorgänge notwendig sind, nicht im Kontext einer Remote-Arbeit verwenden werden können. Es haben bisher noch nicht alle Unternehmen ihre Infrastruktur nach dem Zero Trust Model aufgesetzt, so dass zentrale Systeme nur über ein - meist von der Außenwelt abgeschottetes - internes Netzwerk erreichbar sind. Existiert die Möglichkeit sich über eine VPN Verbindung einzuwählen, steht diese meist nur einer Handvoll Mitarbeitern zur Verfügung, oder ist durch die Leistungsfähigkeit eines zentralen Einwahlknotens beschränkt.

Blog-Post

Automating Dependency Updates with GitHub Actions

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.

Artikel

Das Ammenmärchen der Verschlüsselung

Immer wieder liest man, wie stark die Verschlüsselung von Bitcoin und wie sicher dadurch die Nutzung der Kryptowährung sei. Aber was ist denn nun in Bitcoin tatsächlich verschlüsselt? Dieser Artikel soll etwas Licht ins Dunkel bringen.

Blog-Post

Architektur, die mitwächst

Artikel

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.

Artikel

Domain-driven Design to the code

Beim strategischen Domain-driven Design fokussieren wir uns in der Modellierung sehr stark darauf, die Fachlichkeit möglichst passend zu identifizieren und im Design abzubilden. Leider verlieren wir Entwickler bei der technischen Umsetzung diesen fachlichen Fokus dann aber allzu oft wieder aus den Augen und lassen uns (zu) stark vom neusten hippen Framework begeistern, leiten und beeinflussen und verschmutzen so das fachliche Modell mit unzähligen Technologien. Die Ideen der Onion Architecture und der Einsatz von Stereotypen in der Code-Basis erlauben es, eine Trennung des fachlichen Code vom technisch bedingten Code zu erreichen. Dieser Artikel beleuchtet diese Konzepte und zeigt auf, wie dank Stereotypen in Verbindung mit den taktischen Mustern von DDD diese Trennung konkret erreicht werden kann.

Artikel

String-Vergleich gegen Timing-Angriffe härten

Sichere Software erstellen

Artikel

Aus Erfahrung gut

Kubernetes hat sich in den letzten vier Jahren zur Standardlösung für Container-Management entwickelt. Vor allem zustandslose Anwendungen, die lokal keine Daten speichern müssen, sind mit Kubernetes einfach zu betreiben. Datenbanken und andere Komponenten der Persistenzschicht werden jedoch oft weiterhin klassisch betrieben oder als Service bei einem Cloud-Anbieter hinzugebucht. Operatoren bieten unter anderem die Möglichkeit, auch zustandsbehaftete Software verlässlich auf Kubernetes zu betreiben.

Artikel

Kubeless - FaaS auf Kubernetes

Kubernetes und Serverless sind zwei der bedeutendsten Trends beim Betrieb von Software. Kubeless verspricht sogar, beides zu vereinen, und lohnt daher eine nähere Betrachtung.

Blog-Post

Injecting polyfills for missing JavaScript functions into WKWebView

Artikel

Design- und Entwicklungs­prinzipien für ein besseres Frontend

Moderne Frontends sollen wartbar und zukunftsfreundlich sein, unabhängig vom Gerät oder Browser gut aussehen und performant sein. Es gibt eine Reihe von Design- und Entwicklungsprinzipien, die dabei helfen, diese Ziele besser zu erreichen. Im folgenden Artikel sollen einige Prinzipien vorgestellt werden, die sich in der Praxis als tragfähig erwiesen haben. Dabei treffen wir neben alten Bekannten wie Responsive Web Design und Mobile First auch auf neuere Ansätze wie Atomic Design und Pattern Libraries.