Schwerpunktthema

Softwareentwicklung

Fachartikel, Podcasts, Vorträge und mehr zum Thema Softwareentwicklung.
Blog-Post

Wie schult man ein Thema, das sich im Wochentakt ändert?

Seit einem Jahr schulen wir Entwicklungsteams darin, KI-Agenten über den gesamten Softwareentwicklungsprozess hinweg einzusetzen. 47 Trainings mit über 500 Teilnehmer:innen sind seitdem zusammengekommen. Wir erzählen, mit welchen Zielen Unternehmen zu uns kommen, was unser Training auszeichnet, welche Momente unseren Trainer:innen in Erinnerung geblieben sind und warum die eigentliche Arbeit nach dem Training beginnt.

Blog-Post

Alternativen zu KI aus den USA

Claude und GPT haben die Art, wie ich Software schreibe, grundlegend verändert. Doch ich fühle mich zunehmend unwohl angesichts steigender Kosten, des Vendor-Lock-ins und unserer wachsenden Abhängigkeit von einer Handvoll US-Anbieter. Nachdem ich lokale Modelle und in Europa gehostete Open-Weights-Alternativen ausprobiert habe, war ich überrascht: Einige weniger bekannte Modelle können bereits einen großen Teil meiner täglichen Arbeit abdecken.

Blog-Post

OpenProject: Eine Alternative zu Jira?

Podcast

Nebu: Self-made Souveränität

Ein Rezept zum DI.DAY

Podcast

Der mythische Bot-Monat – Teil 1

Brooks’ Thesen auf dem KI-Prüfstand

Blog-Post

Die 1%-Methode für Code und Architektur: Modernisierung als Gewohnheit

Podcast

KI Features für Jira Data Center

Ein Rezept ohne Atlassian Cloud

Blog-Post

Warum sich Domänenwissen nicht extrahieren lässt

KI-Agenten versprechen, wochenlange Requirements-Workshops durch wenige Stunden strukturierter Interviews zu ersetzen. Das klingt überzeugend. Die Kognitionswissenschaft spricht dagegen.

Blog-Post

Vom Vibe Coder zum Agentic Engineer

Wie du Ownership über KI-generierten Code übernimmst

Blog-Post

Gute Last, schlechte Last

Mehr Struktur, mehr Output, mehr Erschöpfung. Spec-driven Development hat mir zwar bessere Ergebnisse mit KI-Agenten beschert, aber auch gleichzeitig die Freude am Bauen genommen. Über gute Last, schlechte Last und versteckte Kosten, die keiner einplant.

Blog-Post

KI-Features für Jira Data Center – ohne Atlassian Cloud

Stell dir vor, nach jedem Kundenmeeting entstehen automatisch strukturierte Jira-Issues – einfach deine Notizen in eine KI kopieren und fertig. Atlassian bringt diese Magie bereits mit Jira Cloud: Sprachsuche, automatische Zusammenfassungen und Issue-Erstellung aus unstrukturierten Texten. Aber nicht jeder möchte in die Cloud. Viele setzen lieber auf das noch bis 2029 unterstützte Jira Data Center. In diesem Artikel zeigen wir, wie du dieselben Vorteile on-premise mit Jira Server und eigener KI bekommst: DSGVO-konform, Cloud-Act-sicher und ganz ohne Datenabfluss.

Podcast

Produktdenken für Plattformteams

Wie interne Plattformen echten Business-Mehrwert liefern

Podcast

KI-Agenten einsperren

Sandboxen und Prompt Injection

Blog-Post

Spec-Driven Development ist Domain-Driven Design für Ungeduldige

Spec-Driven Development Tools wie BMAD versprechen, den Requirements-Engpass zu beseitigen, mit dem agentische Entwicklungsteams konfrontiert sind. Aber passt das wirklich gut zu deiner Organisation?

Podcast

AI News

Wachstum bis zum Blackout. Das große Stühlerücken. Die Agents.md auf dem Prüfstand.

Blog-Post

Agenten gut, alles gut?

Softwareentwicklung besteht aus einer Aneinanderreihung von Kompromissen. Seit ich Systeme baue, gibt es immer diese Dinge, die man nicht macht, obwohl man sie eigentlich gern tun würde. Mit Agenten können wir jetzt plötzlich unsere Wünsche erfüllen und endlich alles umsetzen, was uns immer gefehlt hat. Spoiler: Das sollten wir aber nicht.

Blog-Post

Features für einen schnelleren JVM-Start

In diesem Artikel wollen wir uns mit dem Kritikpunkt der langsamen Startzeit der JVM beschäftigen. Dazu schauen wir uns an, was eigentlich beim Start passiert und mit welchen schon vorhandenen oder in Zukunft kommenden Features die Startzeit verbessert werden kann.

Blog-Post

Neuland reloaded

Blog-Post

Vom Vibe Coder zum Code Owner

KI-Agenten erzeugen in kürzester Zeit tausende Zeilen Code. Wer ihr Potenzial voll ausschöpfen will, kann nicht mehr jede Zeile reviewen – wird aber trotzdem für die Software verantwortlich sein. Wie übernimmt man Ownership für Code, den man nicht vollständig gelesen hat? Die Antwort liegt im Agent Harness: einem System aus deterministischen Checks, KI-Reviews und gezieltem menschlichem Review, das Qualität erzwingt statt erhofft.

Podcast

Worst of Breed

Mit der Blockchain Cookie-Handling implementieren

Blog-Post

Spec-Driven Architecture: Wenn Agenten bauen, muss Architektur sprechen

SDD beschreibt, wie ein System entsteht. SDA beschreibt, wie Systeme zusammenhalten

Blog-Post

Deine Datenbanktabelle ist eine schlechte API

Eine gemeinsam genutzte Datenbanktabelle wirkt wie die ultimative Abkürzung: kein API-Design, keine Verträge – nur ein Schema. Der Haken: Diese Bequemlichkeit wird über kurz oder lang zum Bumerang. Sie verwischt Grenzen, bremst Veränderungen aus und macht die unabhängige Weiterentwicklung unnötig schwer. Dieser Artikel zeigt, warum Tabellen (und datenmodellnahe „generierte APIs“) so verlockend sind – und warum sie selten als Integrationsgrenze taugen.

Blog-Post

Unsichere KI-Assistenten dürfen nicht zur Normalität werden

KI-Assistenten wie OpenClaw versprechen Komfort, Autonomie und immer stärker personalisierte Unterstützung. Doch hinter diesem Versprechen steht eine Architektur, die private Daten, Internetzugang und den Umgang mit nicht vertrauenswürdigen Inhalten kombiniert. Genau diese Konstellation bildet die „Lethal Trifecta“ des Sicherheitsrisikos. Sandboxing und physische Isolation können den Schaden begrenzen, beheben aber nicht das grundlegende Problem. Mit jeder zusätzlichen Fähigkeit vergrößert sich der potenzielle Schadensradius. Dieser Beitrag ist ein Plädoyer dafür, das Tempo zu drosseln, vermeintliche Selbstverständlichkeiten zu hinterfragen und unsichere Architekturen nicht als Normalfall zu akzeptieren.

Blog-Post

Die persönliche KI ist schon da

Wir sind vermutlich noch nicht darauf vorbereitet

Blog-Post

Was tun, während die KI nachdenkt

KI kann Code schreiben, während wir warten – aber das heißt nicht, dass wir plötzlich freie Zeit haben. Ob wir nachdenken, multitasken, reviewen oder pausieren sollten, hängt davon ab, welche Art von Arbeit wir gerade erledigen.

Blog-Post

Ich habe meine KI-Agenten in eine Sandbox gesteckt. Du solltest das auch tun.

KI-Agenten sind mächtig, weil sie Programme mit der entsprechenden Berechtigung auf unseren Rechnern ausführen können. Genau diese Stärke macht uns aber auch angreifbar. Ein einziger Fehler oder eine Prompt-Injection reicht, um das ganze System zu kompromittieren.

Blog-Post

Leave It Better Than You Found It

Ein unerwarteter Architekturgewinn

Blog-Post

Why not scatter @Transactional everywhere?

@Transactional — great when you know when not to use it. Use it consciously instead of sprinkling it everywhere!

Blog-Post

Was, da geht noch mehr? Noch mehr Besonderheiten von und mit Java

Bereits vor ein paar Jahren haben wir uns Dinge angeschaut, die in Java funktionieren, aber sehr ungewöhnlich sind. Diese Liste werden wir in dieser Folge des Praktikers ergänzen.

Blog-Post

Von FOMO zu Fokus

Mit AI Opportunity Mapping zu klaren Prioritäten im KI-Dschungel

Blog-Post

Menschenlesbare Datenformate mit Jackson verarbeiten

Wir nutzen tagtäglich Datenformate. Zum Austausch von Informationen mit anderen Systemen oder auch zur Definition von Dingen wie unserem Build oder zur Konfiguration unseres Systems. Manche davon sind binär, aber auch viele bis heute direkt von Menschen lesbar. Für die Verarbeitung von JSON in Java hat Jackson eine hohe Verbreitung erreicht. Aber Jackson kann mehr als nur JSON, wie wir in diesem Artikel sehen werden.

Blog-Post

Context Engineering: Umgang mit der Komplexität von KI-generiertem Code

KI-Tools steigern die Produktivität von Entwicklern beim Schreiben von Code, können jedoch Code-Reviewer mit zu umfangreichen Änderungen überlasten. Dieser Artikel zeigt praktische Strategien zur Kontextverwaltung in der KI-unterstützten Entwicklung, die Code verständlich, Reviews handhabbar und die Produktivität von Teams tatsächlich verbessern. Kleine Aufgabenbereiche waren schon immer gute Praxis – mit KI sind sie unerlässlich.

Blog-Post

Git Clarity: Aussagekräftige Commits und eine lineare Git-History erstellen

Ein persönlicher Workflow für bewusste Entwicklung und sauberere Git-Logs

Blog-Post

Managing Geopolitical Risks with Enterprise Architecture

IT leaders in Europe increasingly face questions about whether geopolitical developments – such as data protection disputes or trade conflicts between the EU and the US – threaten the viability of US cloud services. The risks range from price increases and legal uncertainties to potential usage restrictions. CIOs must not only ensure functional IT operations but also proactively assess external risks. This article demonstrates how enterprise architecture methods can help identify risks early and develop viable alternatives.

Blog-Post

Digitale Souveränität durch Standardsoftware erreichen

Digitale Souveränität wird im Kontext von IT-Systemlandschaften häufig mit Autarkie gleichgesetzt – also der völligen Unabhängigkeit von Dritten. Nach diesem Gedankenmodell wäre ein Unternehmen, das alle Anwendungen selbst entwickelt und betreibt, der Inbegriff eines digitalen Souveräns. Doch greift diese Vorstellung wirklich?

Podcast

Cloud Migrationsstrategien

6Rs in der Praxis

Blog-Post

Technische und andere Schulden in IT-Systemen

Dieser Artikel beleuchtet verschiedene Formen technischer Schulden, die IT-Teams bremsen – oft unbemerkt und weit über schlechten Code hinaus.

Blog-Post

Updating OWASP’s Microservice Security Cheat Sheet: Practical Considerations & Recommendations

Turning principles and patterns into practice — just as promised.

Blog-Post

Updating OWASP’s Microservice Security Cheat Sheet: Decision Dimensions for Authorization Patterns

Blog-Post

Updating OWASP’s Microservice Security Cheat Sheet: Identity Propagation Patterns

Without trustworthy identity propagation, even strong initial authentication can be undermined — weakening trust boundaries and ultimately impairing the system’s ability to make reliable authorization decisions.

Blog-Post

Updating OWASP’s Microservice Security Cheat Sheet: Authentication Patterns

Without knowing who the subject is, without verifying its identity, there is only a limited way to perform meaningful access decisions.

Blog-Post

What’s Wrong with the Current OWASP Microservice Security Cheat Sheet?

Blog-Post

Updating OWASP’s Microservice Security Cheat Sheet: Core Concepts

In part two of my series, I begin the journey to rethink the OWASP Microservice Security Cheat Sheet. This post focuses on core concepts, laying the groundwork for practical, real-world microservice security.

Blog-Post

Updating OWASP’s Microservice Security Cheat Sheet: Authorization Patterns

Authorization patterns explain how distributed systems organize their access control — where and how decisions happen, where policies live — and influence, in turn, how identities and related attributes travel between components.

Podcast

Testpyramide oder Testdiamant?

Welche Automatisierungsstrategie passt zu meinem Kontext?

Blog-Post

Macht die KI die Softwareentwicklung effizienter?

Millionen Zeilen Code für ein einfaches „Hallo Welt”? Dieser Post beschreibt, wie aufgeblähte Open-Source-Projekte unsere Softwareentwicklung verlangsamen und wie KI diesen Trend umkehren könnte. Ist unsere Software wirklich so effizient, wie wir wollen? Eine Analyse, die zum Nachdenken anregt.

Blog-Post

Enabling von Stakeholdern als Erfolgsfaktor

Soziotechnische Architekturen berücksichtigen sowohl technische als auch menschlich-organisatorische Aspekte und fördern deren zielgerichtete Zusammenarbeit. Um die erfolgreiche Ausgestaltung und Implementierung dieser Systeme zu gewährleisten, ist es entscheidend, die Stakeholder aktiv einzubeziehen und ihre Interessen zu adressieren. In diesem Artikel beleuchten wir, warum das Enabling von Stakeholdern eine Schlüsselfunktion in soziotechnischen Projekten darstellt und wie Sie diesen Ansatz gezielt vorantreiben können.

Blog-Post

Soziotechnische Architekturen: Informalität vom Bergbau bis heute

Blog-Post

Wieviel Denken erträgt ein Team?

Der Begriff Cognitive Load wird seit einigen Jahren regelmäßig verwendet, wenn es um Strukturen von Teams, Rollen und Aufgabenverteilung in IT-Organisationen geht. In der Diskussion wird häufig wenig zwischen den unterschiedlichen Zwecken der IT-Organisationen unterschieden, ebenso basiert die Diskussion oft auf einem stark reduzierten Konzept von Cognitive Load.

Blog-Post

Interne Entwicklungsplattformen – Shift Down statt Shift Left

Interne Entwicklungsplattformen (IDPs – Internal Developer Platforms) helfen uns, die Softwareentwicklung zu beschleunigen. Sie sind die natürliche Weiterentwicklung der Entwicklungen der letzten Jahrzehnte. Warum das so ist, möchten wir mit einem historischen Abriss zeigen und danach auf die aktuellen Herausforderungen blicken.

Blog-Post

Vergesst die Menschen nicht

Wenn Architekturänderungen zum Change Projekt werden

Blog-Post

Zu blöd für Vibe Coding?

Vibe Coding, also die Generierung von Code mit Hilfe von AI, gewinnt zunehmend an Popularität. Mit Claude Code hat Anthropic ein Tool entwickelt, welches mir zum ersten Mal das Gefühl gegeben hat, dass diese Art von Coding damit auch für mich funktionieren könnte. Ich hab’s ausprobiert, mit einer Problemstellung, die dafür wie gemacht zu sein schien. Lest nach, wie es mir dabei ergangen ist und welche Erkenntnisse ich gewonnen habe. Spoiler: es hat funktioniert, am Ende, irgendwie, aber war das noch Vibe Coding?

Blog-Post

Soziotechnische Architektur als Wettbewerbsvorteil

In der heutigen Geschäftswelt dient technologischer Fortschritt nicht nur der Effizienzsteigerung, sondern eröffnet auch neue Geschäftsfelder, die ohne diese Technologien undenkbar wären. Die optimale Nutzung neuer Technologien wird damit zu einem zentralen Wettbewerbsvorteil. IT-Entscheider:innen stehen jedoch zunehmend vor der Herausforderung, dass Technologie allein nicht ausreicht. Stattdessen müssen Unternehmen sich als soziotechnisches System verstehen, in dem technische Systeme und menschliche Interaktionen eng miteinander verzahnt sind. Dieser Artikel zeigt, warum soziotechnische Architekturen für IT-Entscheider:innen relevant sind und wie sie Unternehmen einen Wettbewerbsvorteil verschaffen können.

Blog-Post

Mit dem Model Context Protocol (MCP) standardisierte KI-Tools bauen

Blog-Post

Digitale Souveränität

Digitale Souveränität bedeutet letztlich, dass Europa die Kontrolle über seine digitale Zukunft behält – technologisch, wirtschaftlich und regulatorisch. Für Unternehmen ist dies nicht nur ein politisches Schlagwort, sondern ein handfester Faktor für Risiko- und Erfolgsbewertung. Doch warum genau sollten Unternehmen bei Entscheidungen zur digitalen Transformation den Aspekt der europäischen Souveränität berücksichtigen?

Blog-Post

Rules, Tools, and Teamwork

Static code analysis. A necessary evil? A lifesaver? A constant struggle? Let me show you a few important things that might make your life with code analysis easier.

Blog-Post

Plattformen, Teams und APIs: Wie passt das zusammen?

Blog-Post

Gängige Methoden im Umfeld soziotechnischer Architekturen

In der Ära der Digitalisierung und Modernisierung stehen Unternehmen vor der Herausforderung, sich nicht nur technologisch, sondern auch organisatorisch optimal auszurichten. Soziotechnische Architekturen spielen dabei eine Schlüsselrolle, da sie den Fluss von Arbeit, die Zusammenarbeit zwischen Teams und die Integration technischer und sozialer Systeme in den Fokus rücken. Dieser Artikel beleuchtet zwei zentrale Ansätze – Team Topologies und Domain-Driven Design (DDD) – und zeigt, wie sie Unternehmen helfen können, mit bewusster soziotechnischer Architekturarbeit zu starten.

Podcast

Vielschichtigkeit von Plattformen

Von Infrastruktur bis Business – eine Einordnung

Blog-Post

Spring Boot Actuator Endpoints

Was heißt eigentlich „production-ready“?

Blog-Post

Immer up to date

Das JDK 23 beinhaltet bereits die zweite Preview für das neue Class-File API, das vermutlich in JDK 24 fertig gestellt sein wird. Zeit also, sich einmal anzuschauen, worum es sich bei diesem API handelt und wie wir es nutzen können.

Blog-Post

LLMs mit Spring AI integrieren

Die gesamte Welt spricht aktuell über Generative KI und Large Language Models (LLMs). Und auch wenn ich persönlich das Thema aktuell als zu sehr gehypt empfinde, sollten wir solche Trends nicht komplett verschlafen. Daher zeigt dieser Artikel, wie sich LLMs mit Spring AI integrieren lassen.

Podcast

Die Reise der Zalando Reliability Organisation

Zu Gast: Heinrich Hartmann, 
Principal SRE
, Zalando

Blog-Post

Use webjars-locator-lite with internal WebJars

Switching to the new webjars-locator-lite, e.g. by following the Spring Boot 3.4 Release Notes, may result in errors when loading your internal WebJars. This post explains why that is the case and what you can and should do to fix that.

Blog-Post

Generative KI: Das Ende von „zu teuer“ in Unternehmenssoftware?

„Wir haben keine Use Cases gefunden.” — Nein, Sie haben zu viele. Betrachten wir doch mal, wie Generative KI die Unternehmenssoftware über Chatbots hinaus verändern wird. Welche Features werden möglich, die bisher nicht realisierbar oder einfach zu teuer waren?

Podcast

INNOQ Technology Day

Programm und Behind the Scenes

Blog-Post

Diverse Kommandozeilenwerkzeuge für Container und Kubernetes

Für den Umgang mit Containern und Kubernetes gibt es mittlerweile eine riesige Auswahl an Werkzeugen auf der Kommandozeile. So viele, dass es schwer ist, einen Überblick zu behalten und jedes neue Werkzeug mitzubekommen. Dieser Artikel stellt deswegen einige der vorhandenen Werkzeuge vor, die ich regelmäßig nutze.

Podcast

Team Communication Canvas

Orientierung für Teams in Softwareprojekten

Blog-Post

Java und seine Annotationen

Geschichten von Code vor und ohne Annotationen

Blog-Post

Spring Boot und explodierte JARs

Auf den ersten Blick scheint das Starten von Spring-Boot-Anwendungen nicht sehr schwer zu sein. Ein Aufruf von java -jar my.jar reicht dafür. Doch wie genau funktioniert das eigentlich? Und wie lässt sich die Softwareverteilung effizienter gestalten? Dieser Artikel beantwortet diese beiden Fragen und nimmt Sie dabei mit auf eine Reise durch die Geschichte von Spring Boot.

Blog-Post

Entwickler skalieren anders als Applikationen

Interne Plattformen können die unternehmenseigene Softwareentwicklung beschleunigen, indem sie die mentale Belastung der Entwicklungsteams reduzieren. Als Abstraktionsschichten konzentrieren sie sich auf die wesentliche Fach- und Laufzeitdomäne. Wenn sie sorgfältig gebaut sind, durchbrechen sie alte Konflikte und erlauben zum Beispiel den Entwicklungsteams viel Innovationsfreiheit trotz (oder dank) hoher Standardisierung. Allerdings erfordert dies ein Umdenken über den Wert von Wiederverwendung und auch eine Kehrtwende von Projekten hin zu internen Produkten. Organisationen, die der Versuchung erliegen, bestehende Betriebsschichten oder Frameworks in „Plattformen” umzubenennen, dürfen daher keine Wunder erwarten.

Blog-Post

Mehr aus Git machen

Einfache Konfigurationsanpassungen für mehr Komfort

Podcast

Movacar: Entwicklung einer Plattform in 3 Monaten

Zu Gast: Eustach von Wulffen, Founder und CEO, Movacar, und Karl Markiewicz, Founder und COO / CFO, Movacar

Blog-Post

Ist das Spring RestTemplate wirklich Deprecated?

Ist das Spring RestTemplate wirklich veraltet? Dieser Artikel beleuchtet die verwirrende Geschichte hinter der angeblichen Deprecation, klärt auf, was wirklich Sache ist und gibt praktische Empfehlungen für Entwickler. Erfahren Sie, warum Sie vielleicht doch nicht all Ihren Code umschreiben müssen.

Blog-Post

Was ist eigentlich htmx?

Das fehlende Puzzlestück von HTML?

Blog-Post

Zukünftige Features des JDK

Ich weiß nicht, wie es Ihnen geht, aber seitdem mit JDK 9 der Release-Zyklus des JDK auf sechs Monate verkürzt wurde und wir mittlerweile, dank Preview und Incubator, auch Features bereits vor der vollständigen Fertigstellung ausprobieren können, wirkt das JDK lebendiger als eh und je. In diesem Artikel wollen wir deswegen einen Blick in die Zukunft werfen und uns aktuelle Preview-Features anschauen, die es vermutlich in naher Zukunft final ins JDK schaffen werden.

Blog-Post

Entwickeln mit ChatGPT

In der Welt der Softwareentwicklung ist das Wissen darüber, wo man Informationen findet, oft wertvoller als alles auswendig zu wissen. Doch was, wenn ein Werkzeug nicht nur Informationen liefert, sondern auch lernt, Probleme zu lösen und beim Entwickeln zu assistieren? In diesem Blog Post berichte ich aus meinem Alltag als Entwicklerin und wie mich ChatGPT bei beruflichen Aufgaben unterstützt - sei es bei der Einarbeitung in neue Programmiersprachen, dem Schreiben von Skripten oder dem Umsetzen von kreativen Ideen.

Blog-Post

Rate Limiting with Spring Boot, Bucket4j, and Redis

Blog-Post

Lokale LLMs mit Ollama und Spring AI nutzen

Egal, ob wir wollen oder nicht, um AI und speziell Large Language Models (LLM) kommen wir aktuell nicht herum. Mich schrecken solche Hypes zwar aus Reflex eher ab. Allerdings sieht es so aus, als würde von diesem Hype mehr bleiben als vom letzten, der Blockchain. Deshalb wollen wir uns in diesem Post einmal anschauen, wie man ein LLM lokal aufsetzen kann und dieses mittels Spring AI in eine Spring Boot-Anwendung einbinden kann.

Blog-Post

Rate Limiting with Spring Boot

Let’s implement rate-limiting protection for your Spring Boot server without the need for any additional dependencies beyond those included in the Spring Boot Starter package.

Blog-Post

Es lebe die Bürokratie!

Soziotechnische Welten - Teil 10

Blog-Post

Kombinierbare Elemente für Benutzungsoberflächen im Web

Die Art und Weise, wie wir Benutzungsoberflächen im Web entwickeln, hat sich über die letzten Jahre stark verändert. In dieser Kolumne wollen wir uns deswegen ansehen, wie ein moderner Ansatz aussieht und vor welche Herausforderungen dieser, vor allem für klassische Templateengines der Java-Welt, uns stellt.

Blog-Post

Automatisierte Code-Wartung mit OpenRewrite

In Teil 1 dieser Serie habe ich gezeigt, wie OpenRewrite im Rahmen von Softwareentwicklungsprojekten zur Automatisierung von Code-Wartungsaufgaben verwendet werden kann. In diesem Beitrag zeige ich nun, wie man eigene OpenRewrite-Rezepte schreibt. Das hilft Dir nicht nur dabei, Refactoring-Aufgaben auszuführen, für die es keine öffentlich zugänglichen Rezepte gibt, sondern auch dabei, zu verstehen, wie OpenRewrite unter der Haube funktioniert.

Blog-Post

Abhängigkeitsupdates mit Renovate automatisieren

Immer auf dem neuesten Stand bleiben

Blog-Post

Rooting Out Issues: JPA and Lombok Combination Problems Demystified

Ever encountered perplexing issues with JPA and Lombok’s @Data annotation when handling entities in Java? This blog post explores unexpected behaviors, especially with auto-generated IDs, in conjunction with equals and hashCode methods. Learn about identity and uncover how you can resolve these challenges forever.

Blog-Post

Automatisierte Code-Wartung mit OpenRewrite

Bei der großen Anzahl von Softwareentwicklungsprojekten in den meisten Unternehmen kann es herausfordernd sein, diese Projekte mit den neuesten Sicherheitspatches und Framework-Updates aktuell zu halten. OpenRewrite ist eine Bibliothek, die eine automatisierte Lösung für dieses Problem bietet. In diesem Artikel erkläre ich, wie OpenRewrite funktioniert und wie Du es für die Wartung Deiner Code-Basis einsetzen kannst.

Blog-Post

Schema Evolution

mit Apache Avro

Podcast

Code Reviews

Ja oder Nein?

Blog-Post

JDK 21, das nächste Long-term Support Release

Am 19.9. ist mit Version 21 das nächste JDK erschienen. Verschiedene Hersteller betrachten es als Long-term Support Release, das damit mindestens für die nächsten fünf Jahre unterstützt wird. Da nun vermutlich viele Anwendungen von JDK 17, dem letzten Long-term Support Release, auf 21 upgedatet werden, wollen wir uns hier die relevanten Änderungen von 17 auf 21 gemeinsam anschauen.

Blog-Post

Container für Tests und die lokale Entwicklung mit Spring Boot 3.1

Spring Boot Testcontainers & Docker Compose

Podcast

Engineering Excellence

Softer als man denkt

Blog-Post

Testen in Spring Boot-Anwendungen

Normalerweise schreiben wir neben Produktionscode auch Tests, um mögliche Fehler so früh wie möglich im Entwicklungsprozess zu finden und zu beheben. Häufig schreiben wir sogar für eine neue Funktionalität mehr Test- als Produktionscode. Gleichzeitig sollen die Tests möglichst schnell sein, damit diese häufig ausgeführt werden können, ohne große Wartezeiten zu produzieren. In diesem Artikel betrachten wir, wie das in Spring Boot basierten Anwendungen umgesetzt werden kann.

Blog-Post

Remote Mob Programming

Zuhause, aber nicht allein

Podcast

Energiefresser dynamische Programmiersprache

Sind Python, Ruby und Co CO₂-Schleudern?

Blog-Post

An Introduction to TLA+ and Its Use in Parties

TLA+ is a system for modeling all possible states of a system. On this model, you can then verify certain properties of this system. Smart people can use this to check that their thread scheduling runs all threads equally, or that their work queue will never overflow. In this article, we’ll try and verify the fraught process of ordering pizza for a pizza party as a small introduction to the concepts and syntax of TLA+.

Podcast

Kubernetes Secrets

Schützenswerte Resscourcen

Blog-Post

Tracing in verteilten Anwendungen

Nicht nur, aber auch durch die DevOps-Bewegung machen sich Teams heute neben der Fachlichkeit vermehrt Gedanken um den Betrieb ihrer Anwendungen. Ein großes Thema ist hierbei Observability, also einen Einblick in den aktuellen Zustand des Systems zu haben. In dieser Kolumne betrachten wir mit Tracing einen der drei Bereiche von Observability und lernen anhand eines konkreten Beispiels, wie wir diesen umsetzen können.

Blog-Post

Automated code maintenance with OpenRewrite (Part 1)

With the large number of software development projects in most organisations, keeping these projects up to date with the latest security patches and framework updates can be quite a task. OpenRewrite is a library that provides an automated solution to this problem. Using recipes written in Java, it can perform large-scale source code refactoring during the build process, preserving as much of the original code as possible. In this blog post, I will explain how OpenRewrite works and how you can use it to refactor your code base.

Blog-Post

Container-Images mit Buildpacks erzeugen

Also, wat is en Buildpack? Da stelle mehr uns janz dumm

Blog-Post

Diverse Themen und Bibliotheken für Tests in und mit Java

In diesem Artikel betrachten wir bunt gemischt diverse Themen und Bibliotheken rund um Tests für und mit Java. Dabei folgen wir keinem roten Faden, sondern lassen uns durch das übergreifende Thema treiben.

Blog-Post

What is Sustainable Software?

Environmental sustainability is a very important issue, but software is something virtual, so it doesn’t seem to have an impact, right? Wrong! As software creators, we have a significant impact and can make a difference by incorporating the principles of eco-friendly software development into our understanding and practices.

Blog-Post

How AI will replace my job

I started using ChatGPT for my work. Here is what it taught me and what AI might hold for the future of software development and consulting

Blog-Post

Custom Elements are NOT for Templating

Custom elements are a main technology included in the Web Components Browser specification. They provide a set of APIs for adding custom behavior and interactions to an HTML element – and they do this very well. However, they often are unfairly compared with JavaScript component frameworks. Custom elements were never intended to be a drop-in replacement for a JavaScript framework. This article focuses on what custom elements are, what they do well, and, most importantly, what they do not do.

Blog-Post

Behaviour over structure

We, developers, often forget why we even exist. We quite often don’t remember that our purpose is not to write software, but to solve problems. Those come in different forms, but can be generalized as „we need to start doing this”, „we need to stop doing this” or „we need to do this differently”. Those „do” and „doing” are the key, whatever „this” is. It’s the behaviour our software exhibits that is most important, almost everything else is secondary.

Podcast

Advent of Code

25 weihnachtliche Programmier-Rätsel

Blog-Post

Typist wechsel dich (Remote Edition)

Beim Remote Mob Programming teilt typischerweise eine Person in der Rolle des Typist den Bildschirm mit der geöffneten IDE und tippt, vereinfacht gesagt, das, was die anderen wollen. Damit alle bei der Sache bleiben, muss die Rolle des Typist oft durch gewechselt und der aktuelle Stand vom bisherigen Typist an den nächsten übergeben werden. Unser einfaches CLI-Tool mob ermöglicht eine solche Übergabe in wenigen Sekunden, indem es die dafür notwendigen Git-Befehle zu prägnanten Befehlen zusammenfasst.

Blog-Post

Blaupausen

JavaScripts Art der Objektorientierung ist anders als die anderer Sprachen. Daran hat auch die Einführung von Klassen nichts geändert, obwohl es auf den ersten Blick so aussehen mag. So funktioniert das ungewöhnliche System.

Podcast

Wardley Maps

Softwarelandschaften kartographieren

Blog-Post

1×1 guter Architekturdiagramme

Sie wollen oder müssen Architektur dokumentieren und möchten dafür grafische Darstellungen verwenden? Sie wünschen sich verständliche Diagramme, die auch zukünftig noch leicht änderbar sind? Sie möchten, dass Ihre Diagramme für unterschiedliche Zielgruppen nützlich sind? Und wenn Sie ganz ehrlich sind, wollen Sie dieses Doku-Zeugs in möglichst kurzer Zeit erledigen, damit Sie sich wieder anderen Dingen zuwenden können.

Podcast

User Experience Design

Der Mensch im Fokus

Podcast

Dokumentation technisch umsetzen

Das Tooling macht’s aus

Blog-Post

Offline with redux

We’ve been writing a web application that supports users being offline without using a service worker. We’d love to share how we’ve done that and what we think are the advantages.

Blog-Post

Direnv: Automatische Umgebungspflege

Wer kennt es nicht — jedes Projekt braucht eine eigene Konfiguration. Umgebungsvariablen müssen gesetzt werden, ein Proxy muss verwendet werden, wichtige Skripte müssen sich im Pfad befinden. Oft wird das dann mit anderen Skripten erledigt, an deren Ausführung man aber denken muss.

Blog-Post

Logging in Java

Ein Einstieg in den Logging-Dschungel

Blog-Post

We Are Developers World Congress 2022 in Berlin

Our colleagues were on site, staffing the booth, speaking with fellow developers, and delivering two talks.

Blog-Post

Marktanalyse

Viele Webdienste bieten interessante Datenquellen, halten damit aber hinterm Berg. Wer weiß, wie’s geht, kann jedoch auch undokumentierte Quellen finden und mit Python anzapfen. Im zweiten Teil unserer Inspektion der eigenen Einkaufsdaten erforschen wir die APIs des Supermarktes anhand von Browser- und App-Analysen.

Blog-Post

Dependently-Typed TypeScript

Ein Blick in die Untiefen eines Typsystems für JavaScript

Blog-Post

Gemischtdatenladen

Genau wie das persönliche Surfverhalten sind die Einkaufsgewohnheiten eines Menschen sehr aufschlussreich – wenn man es schafft, die unhandlichen Daten zu analysieren. Wer so einen Datenschatz im Selbstversuch auswertet, bekommt Einblicke ins eigene Einkaufsverhalten, Erfahrung in der Analyse von Daten und obendrein ein unterhaltsames Programmierprojekt.

Blog-Post

DNS und LDAP mittels JNDI abfragen

Durch die Sicherheitslücke Log4Shell ist auch JNDI ins Rampenlicht gerückt worden. Obwohl JNDI bereits seit 1997 existiert, haben viele davon noch nie gehört oder wissen nicht genau, wofür es da ist. Um beides zu ändern, schauen wir uns in diesem Artikel gemeinsam an, was JNDI ist und wie wir es einsetzen können.

Security Podcast

OWASP Top 10

Die größten Security-Risiken für Webanwendungen

Blog-Post

TypeScript – Die Komplexität von JavaScript bändigen

2022 feiert TypeScript zehnjähriges Jubiläum. Anlass genug, auf die Anfänge zurückzublicken – und Einsteiger:innen alles an die Hand zu geben, was sie für die Arbeit mit der Programmiersprache brauchen.

Blog-Post

Der Nächste, bitte!

In der Regel läuft der Code von Webseiten in nur einem Thread, modernen Multicore-Prozessoren zum Trotz. Echte Parallelität gibt es so nicht, aber ein schlaues Programmiermodell erlaubt dennoch „asynchronen“ Code, der nicht linear abgearbeitet wird.

Blog-Post

JSON in Java verarbeiten

Ein Einstieg in vier JSON-Bibliotheken für Java

Blog-Post

Bibliotheken für Kommandozeilen­anwendungen

Kommandozeilenanwendungen in Java sind zwar, aufgrund der Startzeit der JVM, nicht die verbreitetsten. Allerdings kann die Entwicklung für interne Anwendungen, je nach Wissensstand des Teams, sinnvoll sein. Und dank der nativen Kompilierung mit der GraalVM wird die Startzeit beschleunigt. Neben der Fachlichkeit besteht ein Großteil der Arbeit einer Kommandozeilenanwendung darin, die übergebenen Argumente und Optionen auszulesen und anzuwenden. Dazu schauen wir uns vier mögliche Bibliotheken an.

Blog-Post

Java-HTTP-Clients im Vergleich

Neben der Einbindung von Datenbanken findet sich die Kommunikation per HTTP zu anderen Diensten mittlerweile in fast jedem Projekt wieder. Innerhalb von Java hat sich hierzu mittlerweile eine große Menge an Bibliotheken gebildet, die wir einsetzen können. In dieser Kolumne wollen wir uns darum vier dieser Kandidaten anschauen und sehen, in welchen Aspekten sich diese unterscheiden.

Podcast

CRDT

Konfliktfrei + Kollaborativ

Podcast

Schnell genug für GitHub

Aber nicht schnell genug für Dich?

Blog-Post

The Way of the Request

The Play Framework is a web application framework for Scala and Java inspired by Ruby on Rails. Although I like the official documentation, I always found it lacking in how requests runs through the framework. This article takes the reader on a journey tracing a request through the framework.

Podcast

Ruby on Rails today

Lebt das noch?

Blog-Post

Maven, das unbekannte Wesen – Teil 2

Bereits in der letzten Kolumne haben wir uns mit vier Themen zu Maven beschäftigt. Natürlich war diese nicht erschöpfend und es gibt noch viele weitere Themen, die eine Betrachtung wert sind. In dieser Kolumne betrachten wir deswegen fünf weitere Themen, die meiner Meinung nach wertvoll sind.

Blog-Post

Maven, das unbekannte Wesen - Teil 1

In sehr vielen Java-Projekten wird heute zum Bauen Maven als Build-Tool verwendet. Die grundlegende Nutzung von Maven ist dabei in der Regel schnell erlernt und auch die erste pom.xml schnell geschrieben. Die nächsten Schritte bestehen dann meiner Meinung nach darin, sich mit weiteren Details zu beschäftigen. Dazu wollen wir uns in diesem Artikel vier ausgewählte Themen zur Vertiefung von Maven anschauen.

Blog-Post

Widerstandsfähigen Java-Code mit Resilience4j schreiben

Stabilitätsmuster in Java

Blog-Post

Feature Flags mit FF4j, Togglz oder Unleash in Java einsetzen

Feature Flags haben mittlerweile in vielen Projekten einen festen Platz. In dieser Kolumne wollen wir uns anschauen, welche Probleme sich durch Feature Flags lösen lassen. Neben der reinen Theorie lernen wir dabei auch die drei Java-Bibliotheken FF4j, Togglz und Unleash kennen, mit denen sich Feature Flags in Java nutzen lassen.

Blog-Post

Persistente fachliche Validierungen mit Rails

Es war einmal ein RoR-Projekt. Dieses fristete lange Zeit ein Schattendasein und drohte, Opfer einer Sunk-Cost-Fallacy zu werden. Am Ende wurde es eingestampft. Einige darin umgesetzte Ideen waren jedoch gut gewesen und sollten weiterleben. In diesem zweiteiligen Post möchte ich die Idee der persistenten Warnmeldungen festhalten, damit sie in künftigen Projekten wieder aufgegriffen werden kann.

Blog-Post

Just add Code (Teil 2)

Github Catalyst für Progressive Enhancement mit Web Components

Blog-Post

Just add Code (Teil 1)

Will man in einer Webapplikation auf dem Browser Logik ausführen, so bieten sich mittlerweile Web Components an um mit sinnvollem Scoping Code und Markup zu senden. In den üblichen Beispielen führt das leider dazu, dass man im Browser ohne JavaScript nichts sieht, weil der gesamte Inhalt der Web Component in JavaScript generiert wird.

Blog-Post

Progressive Enhancement mit Hotwire

Ein REST basiertes Backend und oben drauf einen Javascript-Monolithen, ist heute der de-facto Standard für Webapplikationen. Mit Hilfe von hotwire lassen sich aber auch viel leichtgewichtiger Webapplikationen bauen, die die Vorteile von SPAs mitnehmen aber deren Nachteile vermeiden. Wir wollen zeigen, was Hotwire alles bietet.

Blog-Post

Mit Git die Vergangenheit manipulieren

Git auf der Kommandozeile

Blog-Post

Es muss nicht immer grafisch und klickbar sein

In dieser Kolumne geht es um Git. Genauer gesagt die Benutzung von Git auf der Kommandozeile. Neben Grundeinstellungen und vielen Kommandos wird hier und da auch ein Trick vorgestellt, um die Benutzung zu erleichtern.

Blog-Post

RESTful HAL APIs

Die Hypertext Application Language ist als Medientyp-Erweiterung zu Plain JSON/XML nicht neu und kommt in vielen Projekten mit Hypermedia-APIs zum Einsatz.

Blog-Post

Good arguments for SPA frameworks

When to use an SPA framework and when maybe not

Blog-Post

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.

Blog-Post

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

Cookie-based Spring Security Session

Blog-Post

Modernes funktionales Programmieren in Java

Erfahrene Java-Entwickler*innen können viele der Entwurfsmuster des „Gang of Four“-Buches aus dem Stand zitieren, identifizieren und anwenden. Trotzdem stehen diese praktisch seit der Erscheinung des Buches unter Kritik: da sie teils vage definiert sind, strotzen „moderne“ Codebasen nur so von Singletons, Factories und Buildern. Auf der anderen Seite stehen die Anhänger*innen der funktionalen Programmierung, die sich gerne über die objektorientierten Patterns lustig machen. Die Wahrheit liegt wie so oft in der Mitte: seit Version 8 lassen sich auch in Java die cleveren Gedanken aus der funktionalen Welt effektiv und komfortabel benutzen, ohne die Objektorientierung aufzugeben.

Blog-Post

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

Kubeless - FaaS auf Kubernetes

Blog-Post

Injecting polyfills for missing JavaScript functions into WKWebView

Hybrid apps often use the WKWebView to display the web app part. Unfortunately there is no console output to being able to debug it. This blog post provides a guide on how to add polyfills to WKWebView with native code interaction. As a result you will be able to catch the console output of a webpage loaded in a WKWebView and print it to the Xcode debug console.

Podcast

TypeScript

Was sind das denn für Typen?

Blog-Post

JSX-Komponenten mit Java nutzen

Eine Lingua franca für HTML-Views

Blog-Post

Architektur-Reviews remote durchführen

Software Reviews lassen sich dank moderner Arbeitsmittel remote durchführen und schaffen dabei auch neue Möglichkeiten.

Blog-Post

Cross-platform testing of TypeScript code with Jasmine and Karma

I like TypeScript. Writing code that already underwent basic checks (i.e. typechecking) before it can even touch an execution engine is a big win in my book. In particular, TypeScript is nice because it integrates well into the broader JavaScript ecosystem and comes with batteries (i.e. types) included. Unfortunately, most test runners require extra setup to work with tests written in TypeScript. Some even require staggering amounts of configuration.

Blog-Post

Dynamische Proxys mit dem JDK umsetzen

Der dynamische Stellvertreter

Blog-Post

Einführung in ReplicaSet und Service

Um eine Anwendung ausfallsicher in einem Kubernetes-Cluster zu betreiben, wird diese mit mehreren Pod-Instanzen betrieben. Dadurch stellt sich allerdings die Frage, wie wir anschließend dafür sorgen, dass diese Pods auch für Clients innerhalb des Clusters einfach erreichbar sind. Um diese Frage und um eine verbesserte Version zur Replizierung von Pods geht es in diesem Artikel.

Blog-Post

Das eierlegende Truffleschwein

Viele, die im Java-Umfeld unterwegs sind, werden von ihr gehört haben: der sagenumwobenen GraalVM. Diese magische neue Virtual Machine für Java soll vor allem für blanke Performance sorgen, indem sie den Java-Bytecode in nativen Code kompiliert. Dadurch fällt insbesondere der Startup-Overhead weg, da weite Teile der Initialisierung bereits vom Compiler erledigt werden. Doch das ist bei weitem nicht das einzige Feature, welches Oracle der GraalVM gegeben hat. Hinzu kommt, dass die GraalVM zu nicht weniger das Potential hat als eine neue Ära der polyglotten Programmierung auf der JVM einzuläuten. Die Rede ist von der Truffle API, einem generischen Framework zur Implementierung von Interpretern.

Blog-Post

Was ist die Magie von Spring Boot?

Ein Blick hinter die Kulissen

Blog-Post

Rails und DRY-Zugriffsrechte

CanCan(Can) ist ein mächtiges Authorisierungs-Framework im Rails-Umfeld, womit sehr feingranular Zugriffsrechte definiert werden können. mit feinerer Granularität dieser „can”-Regeln steigt jewoch die Gefahr, dass Status-Logik des Modells dupliziert wird, wenn die Anwendungs-Performanz eine Rolle spielen soll. In diesem Artikel möchte ich dazu einige Gedanken zu Lösungsmustern aufführen, die ich mir im Rahmen der Entwicklung unseres (künftigen) internen Rechnungstools gemacht habe.

Blog-Post

Warum Quarkus.io _nicht_ geiler ist als Spring

Quarkus.io ist ein neues Framework, das optimiert ist, um Java Anwendungen Cloud Native laufen zu lassen. Sollte ich meine Java-Anwendungen daher jetzt nicht mehr in Spring Boot sondern in Quarkus.io entwickeln?

Blog-Post

So you want to compose some functions

Blog-Post

An Introduction to TypeScript

An ongoing architecture trend towards smaller services and faster, agile feature development gives developers some freedom to try out new languages and frameworks. TypeScript and Node seem to have a bad reputation amongst some backend developers although the language can be a perfect fit for many challenges in modern software development.

Blog-Post

JUnit5 für das Testen von Spring Boot-Anwendungen

Bei der Entwicklung von Spring und Spring Boot wurde schon immer darauf geachtet, dass hiermit entwickelte Anwendungen testbar sind. Ab und zu reichen die im Standardumfang mitgelieferten Mittel jedoch nicht vollkommen aus. In diesem Artikel wollen wir uns deshalb an drei Anwendungsfällen aus der Praxis anschauen, wie sich die vorhandenen Mittel in Kombination mit JUnit5 erweitern lassen.

Blog-Post

Cloud native Java-Anwendungen mit Quarkus

Alles Quark?

Blog-Post

Type checking JSX: A can of props

In this post, I’d like to describe how JSX type checking in TypeScript actually works and the problems you’re going to encounter when implementing custom, non-React JSX components.

Blog-Post

Gute UX entsteht im Team

“Wir machen die UX Designs und dann kann das entwickelt werden” – solche und ähnliche Sätze hat sicherlich fast jeder von uns schon mal gehört oder sogar selber gesagt. In interdisziplinären Projektteams, in denen das Wort “User Experience” fällt, fühlen sich meist eine oder mehrere Personen für dieses Thema ausschließlich verantwortlich. Der Rest des Teams setzt um. Bedeutet User Experience aber nicht, eine ganzheitliche Lösung für den Benutzenden, den Menschen zu schaffen? Warum fühlen wir uns also nicht als gesamtes Team dafür verantwortlich?

Blog-Post

How to add Swift functions as polyfills in JavaScriptCore

Podcast

Secrets Management

Von der Herausforderung, Geheimnisse zu verwalten

Blog-Post

Integrating Logback with JLine

Logback is a popular logging library for Java. JLine can be used to create nice shell-like applications. Combining both is not as hard as it looks.

Blog-Post

Pragmatisch zum Praxiseinsatz von Machine Learning in der Cloud

Herausforderung Betrieb

Blog-Post

Die GraalVM: Javas Sprung in die Gegenwart?

Die Java Virtual Machine (JVM) gibt es jetzt seit über 24 Jahren. Mit den Jahrzehnten wuchs ihre Verbreitung und das SDK bekam immer neue Funktionen. Das alles hat die JVM aber auch groß und träge gemacht. Hoher RAM-Bedarf oder lange Startzeiten passen nicht mehr in die neue FaaS oder Container Welt. Die GraalVM macht da Hoffnung.

Blog-Post

Hadoop - Taming the Elephant (With a Whale)

In diesem Artikel wird der Inhalt des Vortrags „Hadoop - Taming the Elephant (With a Whale)” zusammengefasst. Er bietet einen Einstieg in die Welt von Hadoop und praktische Beispiele.

Blog-Post

Parametrizität in Java

Blog-Post

Ein praxisorientierter Einstieg in Kubernetes

Beim Deployment von Containern reicht es zu Beginn, diese – mehr oder weniger – manuell auf einer einzelnen Maschine laufen zu lassen. Mit der Zeit entstehen dann immer weitere Anforderungen an Automatisierung, Ausfallsicherheit und Strategien zum Deployment. Ein Cluster zur Verwaltung von Containern muss her. Genau für diese Aufgabe wurde Kubernetes entwickelt, und aktuell ist es nahezu unmöglich, daran vorbeizukommen, wenn Container verwendet werden. Dieser Artikel bietet einen praxisorientierten Einstieg in die Welt von Kubernetes.

Blog-Post

Ruby on Rails ist einfach am besten

Ein Loblied auf Ruby on Rails.

Blog-Post

Vielfältiges Git!

Git kann auch mehrere…

Blog-Post

Was sind eigentlich Web Components?

Für die Erstellung von Benutzeroberflächen im Web sind HTML, CSS und JavaScript gesetzt. Doch die Wiederverwendung und Kapselung von so erstellten Komponenten lässt zu wünschen übrig. Um eine fertige Komponente zu nutzen, muss man das HTML übernehmen und passendes CSS und JavaScript separat einbinden. Web Components versprechen, hier zu helfen. In dieser Kolumne schauen wir uns gemeinsam an, was Web Components sind und wie diese funktionieren.

Blog-Post

Microservices mit CherryPy, Teil 1: URL-Routing

CherryPy bietet diverse Möglichkeiten des URL-Routing an. Primär stellt CherryPy dazu drei verschiedene Dispatcher zur Wahl, auf die ich in diesem Blogbeitrag eingehen möchte.

Blog-Post

Die erste Java-Version mit Long-Term-Support seit Java 8

Java, die Elfte

Blog-Post

Serverless - The Vendor Is Not Your Enemy

Argumente für und gegen Serverless gibt es viele. Dieser Post behandelt konkret das Thema Vendor-Lock-in, welches bei der Entscheidung für oder gegen Serverless häufig diskutiert wird.

Blog-Post

Designer sind vom Mars, Entwickler von der Venus

Digitale Produkte werden von Designern und Entwicklern sowie Architekten und Projektleitern Hand in Hand erarbeitet. Alle tragen gleichermaßen die Verantwortung für das Endergebnis. Und doch, oder deshalb, stellt die Zusammenarbeit oft eine Herausforderung dar. Über Farben lässt sich streiten, über Frameworks auch, im besten Fall agil und aufs Pixel genau. Ein empathischer Umgang miteinander erleichtert sicherlich den Arbeitsalltag, aber grundlegende Kenntnisse, die über den Tellerrand der eigenen Disziplin hinausgehen, können die Qualität eines Produkts direkt beeinflussen.

Blog-Post

Java-Bibliotheken für den Einsatz in Tests

Testunterstützung

Blog-Post

Building a Load Test with Tsung for a Login and Post Session with dynamic url-encoded variables

If you want to test your website, app or API endpoint by simulating how it will perform when hundreds or more users visit it, you are probably writing a load test. This blogpost covers a step-by-step instruction on how to build a load test for a Ruby on Rails app with a login and post session and dynamic variables with Tsung, a distributed load testing tool.

Blog-Post

Prinzipien zur Entwicklung von unabhängigen Systemen

Viele Systeme werden aktuell mit einer Microservice-Architektur geplant und umgesetzt. Da jede Architektur Vor- und Nachteile aufweist, muss die gewählte jedoch auch zum Problem passen. Dieser Artikel zeigt, welchen primären Vorteil eine Microservice-Architektur hat und welche Prinzipien bei der Entwicklung beachtet werden sollten, um diesen Vorteil nicht zu neutralisieren.

Blog-Post

Server-sent Events in .NET mit Akka

Podcast

Spring Boot 2

Softwareentwicklung im Spring Ökosystem

Blog-Post

OpenID Connect Auth-Proxy

Mit OpenID Connect kann Single Sign-On in einem verteilten System erreicht werden. Ein Auth-Proxy kapselt den Aspekt Authentifizierung in einem eigenständigen Modul. Wir schauen uns an, wie das im Detail umgesetzt werden kann.

Podcast

50 Tipps

Ratschläge zu Software, Zusammenarbeit und Druckkaramellisierung

Podcast

Java by Comparison

Vorher/Nachher-Vergleiche zu Clean Code in Java

Blog-Post

Multiple Worktrees aus einem lokalen git-Repo.

Ein lokales Git-Repository auf der eigenen Festplatte kann bequem mehrere Worktrees parallel bedienen. Dieses praktische Git-Feature ist relativ unbekannt. Hier stellen wir es vor.

Blog-Post

Einsatz von Containern zum Testen

Testcontainers in JUnit-Tests verwenden

Blog-Post

A Playground for Testing OpenID Connect

This post describes how you can set up a development environment in order to play around with your OpenID client implementation. When running your application in a cluster, it can be difficult to test how it will behave behind a load balancer. One factor that can be particularly difficult to test is when you are communicating with an OAuth 2.0 or OpenID Connect server which expects that a request will be redirected back to the same application instance that it came from.

Blog-Post

Blockchain hausgemacht

120 Mitarbeiterinnen und Mitarbeiter bauen eine Blockchain in 12 Sprachen. Bei INNOQ veranstalten wir jedes Jahr einen so genannten Hands-On-Event. Dieser ist Teil unserer regulären Mitarbeiter-Events und findet typischerweise im Frühjahr statt. Wir treffen uns alle für zwei Tage an einem Ort und versuchen mit der Programmiersprache unserer Wahl in Gruppen eine definierte Aufgabe zu lösen. Optimal also, um neue Sprachen und neue Kolleginnen und Kollegen in Gruppenarbeit kennenzulernen. Die Aufgabenstellung lautete in diesem Jahr: Baue eine Blockchain!

Podcast

Transklusion

Frontendintegration im Web

Blog-Post

Spring-less testing

Spring is a great project, it helps a lot with common, usually mundane, tasks. But it’s not always unicorns and rainbows. Too much Spring in tests can cause a few issues like long execution time and fragility. Here, I’m showing how to avoid such pitfalls.

Blog-Post

Java 10 – Evolution statt Revolution

Gerade erst ist Java 9 erschienen, da steht auch schon das nächste Release, Java 10, an. Dieser Artikel betrachtet die Neuerungen von Java 10 und wagt einen kurzen Blick in die Zukunft.

Blog-Post

Taking Screenshots of DOM Elements

Blog-Post

FaaS und Kubernetes

Inzwischen gibt es bei den meisten Cloudanbietern die Möglichkeit kleine Codeteile als sogenannte Functions zu hinterlegen. Da kein expliziter Server existiert, dort spart das Kosten. Aber auch sonst bieten Functions eine interessante Abstraktion, deren Vorteile man ebenso gerne innerhalb eines Kubernetes Clusters nutzen möchte.

Blog-Post

The language of maths is not the language of your business

Abstractions from category theory can be powerful. But there are reasons why you may want to keep your domain model free of them.

Blog-Post

Domain- und Test-driven Development mit Spring Boot 2 Softwarearchitektur

Blog-Post

Proof of Existence via HTTPS

Übliche „Proof of existence” - Konzepte nutzen die Blockchain von Kryptowährungen. Das geht auch einfacher und billiger.

Podcast

twwwr

INNOQ Digital Art 2018

Blog-Post

Carbon dioxide monitoring with Rust, InfluxDB and Grafana

Blog-Post

Health-Checks in Java-Anwendungen

Health-Checks sind für den Betrieb von Anwendungen heute, insbesondere wenn sie als Container in einem Cluster deployt werden, unerlässlich. Dieser Artikel zeigt, wieso Health-Checks so wichtig sind, welche Details beachtet werden sollten und wie Health-Checks in Java mit drei gängigen Bibliotheken umgesetzt werden können.

Blog-Post

Logging mit Docker und Elasticsearch

Wenn eine Anwendung als Microservices oder Self-contained Systems in Docker-Containern läuft, stellt sich die Frage, wie auf die Log-Einträge der Anwendung zugegriffen wird. Die Antwort lautet in der Regel: „Elasticsearch”. Aber wie kommen die Logs in Elasticsearch?

Blog-Post

Tags für Docker Images ohne Registry

Blog-Post

Jepsen – verteilte Systeme testen

An verteilten Systemen kommt heute kein Entwickler mehr vorbei. Selbst wenn man keines baut, setzt man häufig Komponenten ein, die ein verteiltes System sind. Hierzu gehören vor allem viele Vertreter von neueren Datenbanken. Dieser Artikel zeigt, wie man diese mit Jepsen testen kann.

Blog-Post

Command Line Interfaces in Java

Die meisten neuen Anwendungen stellen eine Web- oder grafische Benutzungsoberfläche für die Interaktion mit dem Benutzer bereit. Doch gerade für Anwendungen, die Teil eines Batch-Jobs sind, automatisiert aufgerufen werden oder für sogenannte Powernutzer gemacht sind, bietet es sich an, eine Oberfläche für die Kommandozeile anzubieten. Dieser Artikel zeigt die Bestandteile einer solchen Anwendung und wie man diese in Java benutzt.

Blog-Post

Logging und Metriken in verteilten Systemen

Den Überblick behalten

Blog-Post

Elm in the wild: A Sandwich Delivery Game

New languages often look shiny and cool in their playground examples. But bringing them out into the wild and having to code more than just the examples in the tutorials, often reveals the true value of these new languages. So, in order to evaluate the shininess of Elm, a language compiled to JavaScript and used for building web front ends, we decided to use it for a scoped project: We programmed the Sandwich Delivery Game for the „Smart City” exhibition in Basel, Switzerland.

Podcast

Entwicklung im Feierabendmodus

Wie man neben dem Beruf ein Produkt entwickelt

Podcast

Der Reisekosten-Gorilla

Mitarbeiterinnovationsprogramm bei innoQ

Blog-Post

Tooling für JavaScript-Frontends

Nahezu jede Webanwendung besitzt einen Anteil an JavaScript im Frontend. Im Vergleich zu früher haben sich jedoch viele Dinge geändert. So sind heute zahlreiche Tools üblich, die den Entwickler unterstützen. Dieser Artikel gibt einen Überblick über aktuell genutzte Entwicklungswerkzeuge für die Entwicklung von JavaScript-Frontends.

Blog-Post

Marrying Rails, Turbolinks and JavaScript Custom Elements

Rails 5.1 just arrived and brought with it a curated setup for webpack. Think what you want about webpack, but it’s the new default for JavaScript module loading and bundling in Rails and therefore here to stay. So here’s a quick post on how to get the new JavaScript goodness up and running with your existing Turbolinks setup.

Blog-Post

Building Component-Based Front Ends with Rails

Blog-Post

Docker Compose – Komplette Systeme mit Docker managen

Der Einstieg in Docker ist einfach. Schnell hat man gelernt, mit Dockerfiles Images zu erzeugen und die ersten Container laufen bereits. Dann wird es wirklich spannend. Wie manage ich mehrere Container, die zusammen eine ganze Umgebung bilden? Dieser Artikel liefert Ihnen die Antwort auf diese Frage.

Blog-Post

Design Patterns: Noch nie so wertvoll wie heute?

In einem Gastbeitrag diskutiert Frank Buschmann, Co-Autor der Buchreihe “The "Pattern-Oriented Software Architecture”, warum Patterns zur Zeit eine Renaissance erleben.

Blog-Post

The Power of the HTML Form

Blog-Post

Serverless

Um den Begriff serverless gibt es immer noch hitzige Diskussionen. Einige halten ihn für einen Hoax und setzen ihn mit „useless” gleich, andere schwören darauf, dass serverless bald alle anderen Architekturstile ablösen wird.

Blog-Post

Implementierung einer einfachen Zustandsmaschine (state machine) in Java

Eine simple Zustandsmaschine (state machine) in Java

Blog-Post

Lokale Datenanalyse mit Data Frames

Am Anfang war die Frage

Blog-Post

Simplicity - Fighting Complexity At All Costs

My colleague recently wrote an excellent post discussing the functional and object-oriented paradigms. As someone who comes from a functional programming background, I definitely agreed with one thing: We need to stop building arbitrary walls that prevent us from learning from and helping each other.

Blog-Post

FP vs. OO

I recently came across a tweet stating that there were no people who „defend OO vs. FP” that actually used FP in real projects. This is not the first time I came across statements like this (like in a blog posts portraying functional programmers as being higher on the „evolutionary ladder” than object-oriented programmers). Another claim I hear again and again is that „only Functional Programming can solve the problems of the modern age (like multi-core computing)”. I disagree with both claims.

Blog-Post

Vault

Schlüsselkasten 2.0

Blog-Post

Wo bist du?

HashiCorp hat mit Consul eine inzwischen fest etablierte Service-Discovery-Lösung geschaffen. Ein Konsul ist ein entsandter Beamter, der in einem fremden Staat die Interessen der eigenen Bevölkerung wahrt und den Handel fördert. Betrachtet man eine Microservice-Landschaft als fremdes Land und die Einwohner als einzelne Services, die sich austauschen, kann man mit etwas Wohlwollen die Namensgebung nachvollziehen. Einen Überblick über Einsatzzweck, Features und Aufbau bietet dieser Artikel.

Blog-Post

Microservices à la Netflix

Netflix hat in den letzten Jahren sehr interessante Open Source Frameworks wie beispielsweise Eureka, Hystrix oder Zuul via GitHub publiziert. Parallel dazu hat das Spring Team mit Spring Boot und Spring Cloud zwei hoch interessante Module für Cloud basierte Microservice Architekturen veröffentlicht. Wie passen diese beiden Dinge nun zusammen?

Blog-Post

Microservice-Infrastruktur

Ein unvollständiger Überblick

Blog-Post

Command Line Tools in Swift: Words

Let’s write a simple command line utility in Swift.

Blog-Post

Spring Boot für Microservices

Die Implementierung von Microservices stellt im Vergleich zu monolithischen Anwendungen Entwickler vor einige Herausforderungen. Spezialisierte Technologien wie Spring Boot unterstützen die Umsetzung von Microservices und machen so den Projekten das Leben leichter.

Blog-Post

Horden von Zombies

Wenn es um die Wurst geht

Blog-Post

Features in Java 9

Passend zum Schwerpunktthema „Java – die Neunte” dreht sich auch diese Kolumne um Neuigkeiten, die uns mit Java 9 zur Verfügung gestellt werden. Da sich den großen neuen Themen wie Jigsaw, JShell und HTTP/2 in diesem Heft eigene Artikel widmen, stelle ich Ihnen ein paar der vielen weiteren, jedoch deutlich kleineren Neuerungen vor. Freuen Sie sich also auf ein buntes Sammelsurium.

Blog-Post

Deployment und Monitoring von Microservices

Beim Deployment von Microservices verschwimmen die Grenzen zwischen Mikro- und Makroarchitektur. Während das Team die Mikroarchitektur für jeden Service individuell entscheiden kann, muss man sich bei Makroarchitektur-Themen mit anderen Teams zusammensetzen, um die beste Lösung für Themen zu finden, die mehrere Services betreffen. In diesem Artikel wollen wir uns ansehen, welche Entscheidungen ein Team für sich treffen kann und welche mit anderen Teams abgestimmt werden müssen. Zu diesem Zweck möchte ich beispielhaft den Lernprozess beschreiben, den ich in Teams erleben durfte, die “einfach mal” mit Microservices angefangen haben.

Blog-Post

Zwei Jahre nach dem Tod der Java Application Server

Leben Todgesagte länger?

Blog-Post

Consumer-Driven Contracts – Testen von Schnittstellen innerhalb einer Microservices-Architektur

In einer Microservices-Architektur entstehen viele Services – potenziell in den verschiedensten Programmiersprachen. Um eine reibungslose Kommunikation zwischen diesen zu gewährleisten, müssen die Schnittstellen passen und auch über längere Zeit stabil bleiben. Consumer-Driven Contracts stellt hierzu einen Ansatz dar, der zudem die Schnittstellen und deren Aufrufer noch zusätzlich testet.

Blog-Post

Nachhaltige Webarchitekturen

Heutzutage gewinnt man leicht den Eindruck, dass es für moderne Webanwendungen nur einen einzig wahren Architekturansatz gibt: REST und Single-Page-Anwendungen (SPAs). Doch ist alles, was REST genannt wird, wirklich REST? Sind REST und SPAs immer die beste Lösung? Um diese Fragen beantworten zu können, sollte man sich anschauen, was REST eigentlich ist, wofür es gedacht ist und ob es möglicherweise auch Alternativen zu SPAs gibt; insbesondere mit dem Blick auf Nachhaltigkeit, also Wartbarkeit und Erweiterbarkeit.

Blog-Post

ROCA vs. SPA

Comparing two architectural styles with a concrete example

Blog-Post

AWS Lambda

Seit Kurzem gibt es von verschiedenen Cloud-Anbietern Services für die Entwicklung serverloser Event-getriebener Anwendungen in der Cloud: Google (Cloud Functions), IBM (OpenWhisk), Microsoft (Azure Functions) und allen voran AWS Lambda von Amazon. Dieser Artikel beschreibt am Beispiel von AWS Lambda das Programmiermodell und hilft bei der Beantwortung der Frage, ob sich der Einsatz für Ihre Anwendung lohnt.

Blog-Post

Eindrücke des Texteditors Atom

Ich vertrete ja die Meinung, dass es eine Gute Idee™ ist, immer mal wieder seine Werkzeuge zu wechseln. Dabei schließe ich auch Texteditoren ein. Das selbst ist ein Thema für ein anderes Mal, aber es ist auch der Grund, weshalb ich seit März eine Weile (etwa 7 Wochen) lang primär mit Atom gearbeitet habe.

Blog-Post

Java-Web-Frameworks von innen?

Im Maschinenraum

Blog-Post

Transklusion in Self-Contained Systems

Frontend-Integration im Web ist ein riesiges Themengebiet. Dieser Post befasst sich mit dem Teilaspekt der Transklusion „fremder” Inhalte in den DOM einer anderen Seite.

Blog-Post

Ein Domänenmodell für das SmartHome

Es gibt in der Domäne SmartHome viele unterschiedliche Sichtweisen, proprietäre Produktfamilien, einige offene Standards und verschiedene Konsortien, die versuchen, langfristig tragfähige, standardisierte Kommunikationsstandards zu definieren. Wir skizzieren für das Umfeld des sogenannten Ambient Assisted Living eine mögliche API für die relevanten Anwenderrollen.

Blog-Post

Konsumieren asynchroner HTTP-APIs mit Java 8

Blog-Post

Horizontal automation – a waste of time.

Automation of server administration tasks is a waste of time.

Blog-Post

Web Scraping

This blog post provides examples how to implement web scraping using HtmlUnit, Selenium or jaunt and compares them.

Blog-Post

git pull gotchas

Podcast

Redis in der Praxis

Überblick und praktischer Einsatz des schnellen Datenstruktur-Servers

Blog-Post

iOS: Writing to Core Data in your Today extension

This blog post gives guidance on how to propagate changes in Core Data made by a Today extension to the host app and handle them properly.

Blog-Post

Hands-On Integration mit openHAB

Teil 7, Artikelserie „Smart Home“

Blog-Post

Sicherheit und Datenschutz

Schon vor mehr als einem Jahr fragte sogar die Bild-Zeitung “Wie sicher ist das smarte Eigenheim”? Gestellt wurde diese Frage im Kontext der Übernahme von Nest - dem amerikanischen Hersteller smarter Raumthermostate - durch Google. Gemeint war hier allerdings weniger die Sicherheit im Sinne des Zugriffsschutzes, sondern vielmehr die der Privatssphäre. Seitdem hat sich die Situation eher verschlimmert denn verbessert. Der vorliegende Artikel erklärt warum und zeigt Lösungsmöglichkeiten auf.

Blog-Post

Steuerung und Automatisierung

“Ein Smart Home ist ein per Smartphone oder Tablet bedienbares Heim” - dies ist eine gängige Definition, die allerdings viel zu kurz greift. Auch wenn die Steuerung das augenfälligste Merkmal ist, so ist die Automatisierung doch ein viel wesentlicherer Bestandteil.

Blog-Post

Standards, Open Source und Forschung

Teil 4, Artikelserie „Smart Home“

Blog-Post

Geräteabstraktion und ihre Schwierigkeiten

Für den Softwareentwickler ist ein Schalter nichts weiter als ein boolscher Wert. Doch bei der Programmierung von Smart-Home-Hardware ist fast jedes System bzw. Gerät unterschiedlich anzusteuern. Woran das liegt und was man dagegen tun kann wollen wir im folgenden Artikel näher untersuchen.

Blog-Post

Marktüberblick über Systeme und Protokolle

“Bevor ich mich falsch entscheide, lasse ich es lieber gleich …” - ein häufig gehörtes Argument gegen das Smart Home. Richtig ist, dass der Markt schon jetzt unübersichtlich ist und sich das in Zukunft nicht verbessern wird. Wer allerdings die richtigen Fragen kennt, kann die Vielfalt einschränken und damit schließlich zu seiner Entscheidung kommen. In diesem Artikel stellen wir die wichtigsten Systeme vor und geben Entscheidungshilfen.

Blog-Post

Heimautomatisierung und das Internet der Dinge

Teil 1, Artikelserie „Smart Home“

Blog-Post

Amazon EC2 Container Service

Dank des Amazon EC2 Container Service finden Docker-Container nun auch bei den Amazon Web Services (AWS) Unterschlupf. In diesem Artikel stellen wir nach einem kurzen Überblick über die wichtigsten bisher verfügbaren Dienste den neuen Service vor, mit dem Docker-Container in der Cloud gehostet werden können.

Blog-Post

Auto Layout in iOS: How to avoid the common mistake

Creating and adding new views using Auto Layout often results in missing views when running the app because the flag that determines whether a view’s autoresizing mask is translated into Auto Layout constraints has not been turned off for each new view. This blog post provides a solution on how to never run into this situation again.

Blog-Post

Play 2.4 with Guice and MyBatis

Blog-Post

Reliable Web Clients

Microservices can make teams and systems more independent but also more vulnerable to the fallacies of distributed systems. Initially I thought this blog post is going to be about how to build reliable web clients with Akka and Akka Persistence. While this is an interesting topic by itself, I now think it is more crucial to first understand the underlying problems and trade-offs before we learn how to get around them.

Blog-Post

Bessere Web-Apps mit HTML5-APIs

Der Begriff HTML5 fasst eine bunte Sammlung aus verfügbaren und geplanten APIs zusammen, auf die im Browser von JavaScript aus zugegriffen werden kann. Einige dieser APIs ermöglichen heute, Anwendungen für den Browser zu realisieren, die vor wenigen Jahren noch Plugins erfordert hätten. Die prominentesten Vertreter sind sicherlich Video oder WebRTC. Zum Beispiel ist heute die Public-Key-Verschlüsselung bereits im Web-Client integrierbar oder das Reagieren auf Sensordaten der Betriebs-Hardware des Browsers möglich. Es folgt eine persönliche Auswahl an etablierten APIs und ein Ausblick auf einige noch recht frische.

Podcast

Erlang/OTP

Eine Programmiersprache für non-stop laufende Systeme

Blog-Post

Declarative HTTP API Testing with gabbi

While HTTP APIs are ubiquitous these days, testing and documenting such APIs remains somewhat awkward: Tests usually consist of procedural code that is specific to the respective language or even framework - which is neither very expressive nor easy to maintain.

Blog-Post

Batch-Computing in Java

Auch heute noch gibt es Bedarf für die wohl älteste Form der elektronischen Datenverarbeitung. Dass Batch immer noch relevant ist, zeigt der junge JSR 352 für Batch-Verarbeitung in Java EE 7. In diesem Beitrag diskutieren wir verschiedene Fragestellungen, die im Zusammenhang mit der Modernisierung bestehender und Umsetzung neuer Batch-Prozesse auftreten, und gehen auf Strategien und Technologieauswahl ein, die bei der Implementierung von Batch in der JVM auftreten können.

Blog-Post

Artenvielfalt

Das Node.js-Ökosystem im Überblick

Blog-Post

A day full of Clojure - organizing the first German ClojureBridge workshop

During the last years a lot of initiatives focusing on increasing diversity in IT and getting kids into IT have emerged. Last weekend the first German ClojureBridge workshop took place in Solingen. Another small but important step towards a diverse IT world.

Blog-Post

Apache Cassandra

In dieser Kolumne stellen wir Cassandra vor und zeigen, warum die Datenbank quasi beliebig skaliert und höchst performant ist. Cassandra wirkt für Kenner von relationalen Datenbanken auf den ersten Blick recht vertraut, weil hier auch von Tabellen und Spalten die Rede ist und die Abfragen einfachen SQL-Abfragen ähnlich sehen. Dennoch unterscheidet sich Cassandra konzeptionell von relationalen Datenbank-Management-Systemen (RDBMS).

Blog-Post

Per request debugging with Log4j 2 filters

Blog-Post

What’s in a Name: Reactive

The term reactivity is overloaded with several different meanings. This post tries to identify and clarify a few of them…

Podcast

Twelve-Factor App: Web-Applikationen auf die neue Art

Ein Ansatz für skalierbare, portable und leicht deploybare Web-Applikationen in der Cloud

Blog-Post

Rails gegen Grails

Webframeworks für JVM-Sprachen

Blog-Post

Using Vector Assets on iOS

Vector graphics provide numerous advantages, especially when developing for mobile devices in a constantly expanding array of different screen sizes and pixel ratios. How to get them to work in an iOS app?

Blog-Post

Functional Validation in Scala

Validation is something everybody needs eventually when working with domain models. The Scala ecosystems offers a wide rage of tools which can be used for this purpose. This blog post introduces some of the most common approaches by applying them to a domain model.

Blog-Post

Docker images for developers

Blog-Post

Play Anwendungen mit Docker & AWS Beanstalk in die Cloud bringen

Für skalierbare Webanwendungen bietet sich die Kombination aus zustandslosen, requestbasierten Webframeworks und einem automatisch skalierendem Cloud Deployment an. In diesem Post betrachten wir konkret Play in Kombination mit Amazons Elastic Beanstalk und Docker.

Blog-Post

Frontend Dependency-Management in Rails

Im letzten Blogpost über Bower sind viele Gründe für die Verwendung eines Dependency-Management Tools für Frontend-Komponenten genannt worden. Dieser Artikel soll dort anknüpfen, wo der letzte aufgehört hat, und eine Reihe von Möglichkeiten aufzeigen, mit denen Bower in ein fremdes Ökosystem integriert werden kann. Denn in der Regel trifft ein Webframework wie Ruby on Rails oder Play! eigene Vorgaben darüber wie Frontend-Artefakte von einer Webanwendung verwaltet und ausgeliefert werden. Im Folgenden wird Rails als populärer Vertreter eines Webframeworks für einige dieser Integrations-Strategien herhalten.

Blog-Post

Frontend Dependency-Management mit Bower

Blog-Post

Eureka Provisionierung mit AWS CloudFormation

In einer Microservice-Architektur muss dafür gesorgt werden, dass die einzelnen Services miteinander kommunizieren können. Eine Möglichkeit hierfür ist der Einsatz einer Service Registry. In diesem Post betrachten wir wie man mit Hilfe von AWS CloudFormation Eureka als ausfallsichere Service Registry in der Amazon Cloud provisioniert.

Blog-Post

Logging konsolidieren und Performance gewinnen

Apache Log4j 2.0 ist eine Neuimplementierung von Log4j zeichnet sich vor allem durch einen höheren Durchsatz – dank asynchronem I/O – aus. Die Neuerungen des Frameworks machen Lust darauf, Log4j2 einzusetzen. Da drängt sich die Frage auf, wie die Vorzüge von Log4j2 in einem System genutzt werden können, wenn Teile noch Log4J 1, commons-logging oder Ähnliches verwenden.

Blog-Post

Von Markdown zu Published

Wie mit Markdown und LaTeX ein Buch entsteht

Blog-Post

Ruby on Rails wird zehn Jahre alt

Das Webframework Ruby on Rails feiert sein zehnjähriges Bestehen. Dazu erscheint nun mit Rails 4.2 das zweite Minor-Release in diesem Jahr. Es bringt iterative Verbesserungen und einige neue Features mit.

Podcast

Ruby on Rails

Das Full-Stack-Web-Framework

Blog-Post

Grenzenlose Freiheit?

Polyglotte Programmierung mit Clojure

Blog-Post

Welten verbinden

Auch wenn inzwischen viele Voraussetzungen dafür geschaffen sind, dass sich der Smart Home Markt zum Massenmarkt entwickeln kann, sind noch längst nicht alle Probleme gelöst. Im Gegenteil, aufgrund der großen Fragmentierung haben die Nutzer häufig mehr Fragen als Antworten. Dieser Artikel soll dazu dienen, einige dieser Fragen zu klären und dabei eine Lösung an einem durchgängigen Beispiel vorzustellen.

Blog-Post

Durchbruch

Der Markt für Heimautomatisierung erlebt derzeit große Veränderungen, denn die Zahl der Geräte der neuen Gattung „IoT-Gadgets” wächst von Tag zu Tag. Im Jahr 2022 wird jeder Durchschnittshaushalt mit ungefähr 50 solcher Gadgets ausgestattet sein, die sinnvolle kleine Teilaufgaben erledigen. Fraglich ist, wie nützlich deren Einsatz ist, wenn keine übergreifenden Anwendungsszenarien möglich sind. Die gute Nachricht ist: Es gibt Lösungen, um diese neuen Geräte nahtlos in ein umfassendes Smart Home zu integrieren.

Blog-Post

Micro-Services in Java realisieren – Teil 2: Web-Apps in Docker-Umgebungen

Der goldene Käfig

Blog-Post

Attribut-basiertes Testen mit Scala

Das Testen eines Software-Systems ist eine alltägliche Aufgabe mit dem Ziel, dessen Konformität bezüglich einer Spezifikation nachzuweisen. Die grüne Ampel der Testumgebung ist in vielen Projekten das Fieberthermometer, welches die Normaltemperatur des Systems verkündet oder zu Warnungen bei Überschreitung führt. Doch können wir diesem Messgerät trauen? Das Attribut-basiertes Testen ist ein Werkzeug aus der Welt der funktionalen Entwicklung, welches uns helfen kann die Zuversicht in unsere Systeme zu erhöhen.

Blog-Post

Ceylon auf der JVM und node.js

Ceylon ist da! Eine neue Programmiersprache die sowohl im Java- als auch im JavaScript-Ökosystem zu hause ist. Ceylon möchte mit Klarheit, Modularisierung und einem ausgefeilten Metamodell punkten. Anvisiert ist der Einsatz in großen Softwareprojekten. In diesem Artikel werfen wir einen Blick in die Konzepte und schauen uns die Sprache an, welche vor kurzem das Licht der Welt erblickt hat.

Blog-Post

Hystrix – damit Ihnen rechtzeitig die Sicherung durchbrennt

Blog-Post

Micro-Services in Java realisieren – Teil 1: Leichtgewichtige Web-Apps mit DropWizard

Dieser Beitrag in zwei Teilen stellt zwei interessante Zutaten für den Bau von Micro-Services vor: Docker.io zum Bereitstellen von definierten Umgebungen für unsere Services und DropWizard zum Realisieren von Web-Anwendungen. In dieser Ausgabe beschäftigen wir uns zuerst einmal mit der Realisierung und einem dafür passenden Framework.

Blog-Post

Hystrix – Wider den Totalausfall

Michael T. Nygard hat in seinem Buch „Release It!” sehr anschaulich die Folgen von sich fortpflanzenden Fehlern beschrieben. Seine klare Empfehlung lautete, Isolationsmuster wie zum Beispiel Leistungsschutzschalter – engl. Circuit Breaker – in die Software zu integrieren, um Totalausfälle zu vermeiden. Mit Hystrix hat Netflix ein Framework bereitgestellt, das den Einbau von solchen Schaltern vereinfacht. Dieser Beitrag stellt das Framework vor.

Blog-Post

Die Renaissance von Erlang

99,9999999% Verfügbarkeit über 20 Jahre

Podcast

Wenn Systeme aus dem Ruder laufen

Mit Hystrix für stabile, verteilte Anwendungen sorgen

Podcast

Vom Dasein eines Apache Software Foundation-Mitglieds

Software für die ganze Welt

Blog-Post

Domain-Driven Design in Clojure

Gut bewertet

Podcast

Sicherheit von IT-Systemen

Allgemeine Aspekte der IT-Sicherheit und der Web-Sicherheit im Speziellen

Podcast

Graphdatenbanken

Vor- und Nachteile graphbasierter Datenbanken

Blog-Post

Endlich viel erben?

Default-Methoden in Java-Interfaces

Blog-Post

openHAB auf dem Raspberry Pi

Nachdem openHAB auf der diesjährigen JavaOne einen der begehrten Duke’s Choice Awards gewonnen hat, möchten wir die Gelegenheit nutzen, diese quelloffene Lösung für die Do-It-Yourself-Heimautomatisierung vorzustellen. Das Framework openHAB sollte auf praktisch jedem Rechner funktionieren, der eine JVM und OSGI-Runtime ausführen kann. Wir stellen das Open-Source-System im Folgenden an einem kleinen Beispiel vor.

Podcast

Play!

Das Full Stack Web-Framework auf der JVM

Blog-Post

Reactive Extensions in Java

Alles im Fluss

Podcast

Modern Batch

Zeitgemäße Architekturen zur Massendatenverarbeitung

Podcast

Scala

Was die objektorientierte, funktionale JVM-Sprache in der Praxis bringt

Blog-Post

ROCA: Keine Angst vor HTML und JavaScript

Web-Apps zum Wohlfühlen

Blog-Post

Hypermedia as the Engine of Application State – Spring Hateoas

Das kürzlich veröffentlichte Spring Hateoas vereinfacht das Verlinken von Ressource-Repräsentationen und bietet Mechanismen zur Link-Erzeugung und zum Reverse-Routing. Dieser Artikel stellt vor, wie diese Konzepte mit Spring MVC zusammen arbeiten und die Entwicklung von Webanwendungen erleichtern.

Podcast

Clojure

Ein pragmatisches Lisp auf der JVM

Blog-Post

Log-Daten effektiv verarbeiten mit Apache Kafka

Ver-log-end

Blog-Post

Micro-Cloud mit Cloud Foundry

In dieser Ausgabe stellen wir mit Cloud Foundry einen Plattformdienst vor, mit dem Java-Anwendungen in der Cloud betrieben werden können. Die Plattform stellt Java-Anwendungen eine virtuelle Umgebung mit Ressourcen zur Verfügung. Wir haben Cloud Foundry für diese Kolumne gewählt, weil es die Cloud-Plattform auf den eigenen Rechner holt. Dadurch wird die Cloud- Entwicklung netzunabhängig.

Blog-Post

Rubies are forever

Der 24. Februar 2013 markiert nicht nur die Freigabe der Version 2.0 der Programmiersprache Ruby, sondern zugleich auch ihr 20-jähriges Bestehen. Am Februar 1993 gab es den ersten Check-in, und damit läutete Ruby-Erfinder Yukihiro „Matz” Matsumoto die Erfolgsgeschichte einer dynamisch typisierten Programmiersprache ein, die vor allem mit dem Webframework Ruby on Rails weltweit populär werden sollte.

Blog-Post

Geschäftsprozesse vom Fließband

Continuous Integration für automatisierte Geschäftsprozesse mit Maven und Jenkins

Blog-Post

Java – Funktional ohne Zauberei

In dieser Ausgabe stelle ich die verschiedenen Möglichkeiten vor, mit der quelloffenen Bibliothek Totally Lazy in Java funktional zu programmieren. Mit Hilfe bekannter Higher-Oder-Functions erlaubt sie, Collections elegant sequenziell oder auch nebenläufig zu verarbeiten. Dabei stellt Totally Lazy sicher, dass die Verarbeitung der Sequenzen lazy erfolgt. Wie Totally Lazy hilft, Teile unseres Quellcodes wartungsfreundlicher zu gestalten, ist Gegenstand dieses Artikels.

Blog-Post

Apache Buildr

Die Automatisierung der Buildprozesse ist eine feine und wichtige Sache. In der Regel freut man sich, wenn ein Projekt Apache Maven verwendet und man dank der Konvention das Projekt sofort bauen kann. Doch mit der Zeit stellt sich in der Regel Ernüchterung ein. Der Build schlägt plötzlich fehl, weil ein Artefakt nicht mehr in den bekannten Repositories gefunden werden kann, die Ergebnisse sind nicht exakt reproduzierbar oder für eine kleine Erweiterung des Prozesses müssen erst aufwendig Plug-ins entwickelt und verteilt werden. Muss das so sein? Apache Buildr hat sich zu einer mächtigen Alternative entwickelt, in dem es den deklarativen Ansatz von Maven mit dem imperativen einer Skriptsprache kombiniert.

Blog-Post

Eine Lanze für XML brechen

Java spricht

Blog-Post

BPMN und Camel

BPMN2 erfreut sich wachsender Beliebtheit und wird BPEL als Standard zur Modellierung ausführbarer Geschäftsprozesse langfristig ablösen, nachdem es bereits mit BPMN 1.x zum Standard für die fachliche Modellierung aufgestiegen war. Ausführbare Geschäftsprozesse sind dabei so detailliert und formal beschrieben, dass sie von einem Computer mittels eines Business Process Management Systems (BPMS) interpretiert, ausgeführt und analysiert werden können.

Blog-Post

Java-Programme mit Clojure würzen

Für jeden, der einen Lisp-Dialekt auf der JVM verwenden will, ist Clojure eine naheliegende Wahl. Es verbindet die Ausdruckskraft von Lisp mit der Vielzahl von bestehenden Java-Bibliotheken. Was zur Integration von Clojure mit Java gehört und wie sich die Mächtigkeit von Clojure auswirkt, wollen wir am Beispiel der Clojure-Bibliothek Incanter betrachten.

Blog-Post

Neo4j – Eine graph-basierte transaktionale Datenbank

Es rockt total

Blog-Post

Webanwendungen mit dem Play!-Framework

Das Play!-Framework ist ein recht junges, vollständiges MVC-Framework, das den Charme von Ruby on Rails hat. Aber anstatt unreflektiert jede Entwurfsentscheidung von Rails ins Play!-Framework zu übernehmen - wie das manch andere Rails-Klone gemacht haben -, haben die Entwickler darauf geachtet, es so zu konstruieren, dass es sich gut in das Ökosystem eines typischen Java-Entwicklers einfügt.

Blog-Post

Domain Specific Languages

In den letzten Jahren hat es sich eingebürgert, bei domänenspezifischen Sprachen zwei Varianten zu unterscheiden: interne und externe. Dabei gewinnen interne DSLs insbesondere durch die steigende Popularität dynamischer Sprachen zunehmend an Bedeutung.

Blog-Post

OpenShift Express

Java EE in der Cloud

Blog-Post

„Infrastructure as Code“ mit Chef

Im Rahmen der DevOps-Bewegung setzt sich die Erkenntnis durch, dass das Konfigurieren von Servern ähnlich wie das Entwickeln von Software behandelt werden sollte. Testbare, wiederholt ausführbare Programme ersetzen die manuelle Konfiguration. Dieser Artikel zeigt am Beispiel Chef, wie dieses Paradigma umgesetzt wird.

Blog-Post

Clojure — in der Praxis?

Wer braucht schon eine neue Programmierprache? Schließlich lässt sich alles in jeder Sprache erledigen, die Turing-complete ist; ob es nun C++, C# oder Java ist – irgendwie ist doch alles das Gleiche. Die wirklich spannenden Themen liegen ganz woanders: in der Gesamtarchitektur, der Entwicklungsmethodik, sozialen Faktoren, der Firmenpolitik usw. oder nicht? Spielen Programmiersprachen wirkliche eine Rolle oder sind sie vergleichsweise egal? Wie kann der Aufwand für das Erlernen und – viel wichtiger – das Einführen einer neuen Sprache gerechtfertigt werden? Am Beispiel Clojure diskutieren wir in diesem Artikel die wichtigsten Argumente.

Blog-Post

NoSQL - Einsatzgebiete für die neue Datenbank-Generation

Sie haben die Wahl!

Book

Digitale Barrierefreiheit

Book

The Rails 7 Way

Vortrag
Vortrag

Kontinuierliche Architektur- und Code-Modernisierung mit Team-Habits und der 1%-Methode

Software Architecture Summit Oktober 2026 / 09:00 - 10:00

Vortrag
Vortrag

ADHS in der IT - Vom Chaos zum Code

JUG Saxony Day / 16:55 - 17:55

Vortrag
Vortrag

Secure Build Pipelines hands-on

heise devSec 2026 / 10:00 - 17:00

Vortrag
Vortrag

Slop oder Top: Von Vibe Coding zu AI Aided Software Engineering

Agentic Software Engineering Night Offenbach / 19:00 - 19:45

News

Neu im Canvas 101 Primer: Der AI Opportunity Canvas

News

INNOQ Technology Day am 12. November 2026

News

INNOQ Girls’Day 2026

Case Study

GEFAK: UX als Treiber für Software-Modernisierung

News

Neuer Primer: Modernes Domain-driven Design

News

Neu: Agentic Engineering Accelerator Programm

News

Jetzt anmelden: INNOQ Technology Day 2025

News

INNOQ Fragezeit startet am 31. Juli

News

Digitale Souveränität im Fokus: Das Technology Briefing für IT-Entscheider:innen

News

INNOQ Technology Day am 20. November 2025

News

Jetzt anmelden: INNOQ Technology Day 2024

News

INNOQ Technology Day am 5. Dezember 2024

News

INNOQ Technology Bites

Case Study

Movacar PRO: Eine Mobile App für effiziente Fahrzeuglogistik im „Tech4Equity“- Modell

News

INNOQ Technology Day 2023 am 13. November

News

Technology Day 2023: am 13. November ist es wieder soweit!

Case Study

Belegclearing und Fraud Detection: Krombacher setzt im Rahmen seines Loyaltyprogramms auf Automatisierung

News

Neuer Primer: MLOps

Case Study

SACAC optimiert den Angebotsprozess mit maßgeschneiderter Software-Lösung

Case Study

Digitalisierung der Grundbuch­verwaltung in Kooperation mit Terravis

Case Study

Userfreundlich und mobile first: Unsere SaaS-Lösung für die Reisekostenabrechnung

News

W-JAX 2015 mit Web-Anwendungen, Microservices und REST 2015

News

Berlin Expert Days 2015

News

Informatica Feminale 2015 in Bremen und Furtwangen

News

Microservices, Internet of Things und RxJava beim Java Forum Stuttgart

News

microxchg 2015 - Die Microservices Konferenz in Berlin mit innoQ-Beteiligung