Diese Homepage entstand als Experiment zur KI-gestützten Softwareentwicklung. Von der Konzeption mit ChatGPT über die Designentwicklung mit Claude Design und die Projektstrukturierung mit Agentheim bis hin zur Umsetzung mit einem GPT-5.5-basierten Agenten wurde nahezu der gesamte Entwicklungsprozess durch KI unterstützt. Auch die verwendeten Grafiken wurden vollständig per KI generiert — ebenso wie dieser Artikel.
The Git Whiteboard App is a browser-based tool for visualizing Git commit graphs during training sessions. Features such as commits, branches, merges, rebases, detached HEAD states and reflog recovery become easier to demonstrate than with a real repository or a physical whiteboard. The project grew out of Git trainings and was implemented as a Kotlin/JS ShipIt Days experiment.
JUnit 5 @MethodSource parameterized tests hit a Kotlin-specific issue because provider methods are not static by default. This leads to lifecycle and lookup errors unless the test setup is adapted. A per-class lifecycle via a custom annotation or @JvmStatic methods in a companion object both make the parameter source usable.
Null values cannot be used directly in a JUnit 5 @ValueSource annotation for parameterized tests because Java annotation parameters must be constant expressions. @MethodSource avoids this limitation by providing test data from regular code and can therefore include null values. Later JUnit work aimed to make null arguments easier to express directly.
Maven-Projekte benötigen manchmal Abhängigkeiten, die nicht in öffentlichen Repositories verfügbar sind. Repository Manager, system-scoped Dependencies, lokal installierte Artefakte und projektlokale Repositories lösen dieses Problem mit unterschiedlichen Vor- und Nachteilen. Ein lokales Repository innerhalb des Projekts hält Builds selbstständig und behandelt nicht-öffentliche Artefakte wie normale Dependencies.
Der produktive Umstieg auf eine neue IDE gelingt besser mit einer klaren Strategie. Ein konsequenter Wechsel, möglichst mausfreies Arbeiten, das Lernen der nativen Keymap und kleine Übungsrituale wie die PostIt-Methode helfen beim Aufbau neuer Gewohnheiten. Plugins, Productivity Guides, Release Notes und andere Lernquellen unterstützen dabei, die Möglichkeiten der IDE dauerhaft besser auszuschöpfen.
Tastaturlayouts sind ein wichtiger Faktor für Entwicklerproduktivität. QWERTZ und englische Layouts haben beim Programmieren jeweils Nachteile, während Neo2 mit zusätzlichen Ebenen für Sonderzeichen und Cursorsteuerung eine ergonomische Alternative bietet. Neben Vorteilen und Umstiegsmöglichkeiten gehören auch praktische Einschränkungen und Installationsoptionen zur Betrachtung.
JUnit 5 wurde als grundlegende Neuentwicklung des Java-Testing-Frameworks konzipiert. Die neue JUnit Platform, erste Toolunterstützung und zentrale Features wie Display Names, Lifecycle-Annotationen, Assertions mit Lambdas, Tags, Nested Tests, Dependency Injection, dynamische Tests und Extensions zeigen die Richtung der neuen Version. Insgesamt entsteht eine gut durchdachte Grundlage für elegantere und flexiblere Unit-Tests.
Gradle Script Kotlin entstand aus einer frühen Zusammenarbeit zwischen Gradle und Kotlin. Kotlins statische Typisierung, IDE-Unterstützung und DSL-Fähigkeiten passen gut zu Build-Skripten und versprechen bessere Navigation, Refactorings und Autovervollständigung. Ein Beispiel zeigt, wie Kotlin-basierte Gradle-Skripte aussehen und welche Rolle Groovy weiterhin spielt.
ORM-based persistence is not always the best fit for Java applications that work with relational databases. Type-safe SQL DSLs such as QueryDSL or jOOQ avoid the pitfalls of raw SQL strings while preserving direct control over database queries. SQL-centric persistence can be advantageous in specific scenarios, but it also brings additional mapping and maintenance effort.
Jackson may fail to deserialize Java 8 Date and Time API types such as LocalDate in REST clients unless support for these types is registered explicitly. The jackson-datatype-jsr310 module adds the missing JSR-310 handling. In Spring environments, this requires ObjectMapper configuration unless Spring Boot performs the registration automatically.
An SQL expression can calculate the duration between two timestamp columns and round it to quarter-hour increments. The result is returned as a positive number of hours. A simple example demonstrates the expected output for a typical time span.
Validating method inputs early helps report programming errors close to their source. Guava's Preconditions keep such checks compact and readable compared with hand-written if blocks. Java assertions serve a different purpose: public API validation should rely on exceptions instead.
Maven resource filtering makes build-time properties available to application code. The Resources Plugin can be configured so selected files, such as a properties file containing the project version, are filtered during the build. The result can then be read by the application, for example to display the current version in a UI.