Are we there yet? Can AI produce art? Part 2
I really enjoyed working on the first story, so I tried again — this time also generating images with Google’s Nano Banana Pro. What I like most about this new...
All posts on this blog in chronological order with newest first.
I really enjoyed working on the first story, so I tried again — this time also generating images with Google’s Nano Banana Pro. What I like most about this new...
This weekend I had a little time to play around — and ever since ChatGPT arrived back in 2022, I’ve been wondering when AI would be ready not just to...
The Thoughtworks Technology Radar has always been more than a list of tools. It captures what happens when technology moves from experimentation to everyday practice. In its 33rd edition, one...
I’m excited to share the first MVP release of NKP (aNalysis of Kotlin Programs), a command-line tool for analyzing Kotlin codebases and uncovering architectural insights.
I’ve written a new article for JavaSpektrum: “Java im Technology Radar – Totgesagte leben länger”. The piece looks back at Java’s journey through the eyes of the Thoughtworks Technology Radar...
I’ve written an article for JavaSpektrum 2/2025 about Structured Concurrency in Java 24. The article covers JEP 499, Java’s fourth preview of Structured Concurrency, which aims to make concurrent programming...
As an external consultant in an Enabling Team for Cloud Architecture, I supported several teams and noticed that software development quality was lacking. This surprised me because the client was...
During the winter holidays I had some fun letting AIs discuss with each other about various topics. I personally like to chat with ChatGPT and challenge it (him/her) with difficult...
The advances of artificial intelligence in the last months are simply breath taking. It is now very easy to use “intelligent” APIs in your web app. In this example application...
Concurrent and asynchronous applications can be written in Kotlin with coroutines in a precise and structured way. Unfortunately, concurrency often increases the complexity and it is difficult to create bug-free...
In my talk “Nebenläufigkeit mit Koroutinen strukturieren” at the KKon 2021 Warmup I explained how to structure and organize concurrent programs with coroutines in Kotlin.
During the chrismas holiday I started a new ray tracer in Kotlin while following the book “The Ray Tracer Challenge.
I updated my website so that it looks new and shiny and provides faster and easier access.
At a client of ThoughtWorks I gave a talk about refactoring in line with the book “Mikado Method”. The book describes a method to plan and perform non-trivial refactorings of...
At a client of ThoughtWorks I gave a talk about the advantages of Kotlin.
At a client of ThoughtWorks I gave a short presentation about three different ways of state management in React.
In the article “Verteilte Systeme: weniger warten, asynchron arbeiten” (distributed systems: less waiting, asychronous working) in the german magazine iX Developer Moderne Softwareentwicklung - code(), build(), deploy() I explain the...
I continued to work on migrating my ray tracer to Kotlin. Now the scenes can be specified with a Kotlin DSL and all Groovy code is gone.
In the article “Weniger warten, asynchron arbeiten” (less waiting, asychronous working) published by heise Developer I explain the theoretical background of coroutines and how to use them in Kotlin and...
Coroutines are a “new” way to handle concurrency on the JVM. I gave an introduction to coroutines in Kotlin at Thoughtworks. This is basically the translation of the german slides....
Coroutines are a “new” way to handle concurrency on the JVM. At the para//el 2019 conference, I gave an introduction to coroutines in Kotlin.
The fusion of Object Oriented Programming (OOP) and Functional Programming (FP) languages has become increasingly popular in recent years, with many programming languages now offering features and constructs from both...
It’s very difficult to implement algorithms optimally for GPUs. Therefore NVIDIA provides the library cuDNN for deep learning with neural networks. This article published in the german magazine iX Developer...
I continued to work on migrating my ray tracer to Kotlin.
After reading the wonderful book Kotlin in Action I started to migrate my ray tracer from Java and Groovy to Kotlin.
In my first project for ThoughtWorks the backend is written in Clojure. Since the project was in Berlin, I visited the EuroClojure 2017 which takes place in Berlin this year,...
In March 2017 I gave a talk about GPU computing with CUDA and OpenCL at the para//el 2017 conference in Heidelberg, Germany.
After long considerations i decided to quit being a freelancer and joined ThoughtWorks in Hamburg, Germany.
CUDA 8.0 on Mac OS X 10.12 gave me the following error:
Today I released an updated version of the library of geometric algorithms.
Im Rahmen des Kultur-Hackathons Coding da Vinci Nord 2016 habe ich eine Web-Applikation für die Analyse und Visualisierung der Verbreitung von Familiennamen erstellt. Hierzu habe ich u. a. Node.js, Express,...
In CUDA 8.0 C++ 11 lambdas can be used on the device. See the following code.
Im Roman “The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win” wird der Protagonist Bill gegen seinen Willen befördert und muss in seinem Unternehmen ab sofort...
Das Spock-Framework ist momentan meiner Meinung nach das komfortabelste Test-Framework für die Java-Plattform. Da es auf der Sprache Groovy aufbaut ist es sehr ausdruckstark.
In “Agile Estimating and Planning” erklärt Mike Cohn auf hervorragende Weise die Probleme bei der Projektplanung und Aufwandsschätzung und präsentiert die “agile Schätzung und Planung” als Lösungsansatz.
Jeder Multiplayer-Spieler kennt es: “Lag”. Wenn man den gegnerischen Spieler zu spät sieht oder man sich sicher ist, ihn hundertprozentig getroffen zu haben, aber das Spiel anders entscheidet: Der Schuldige...
I bought the book in early access (MEAP) and decided to help as a reviewer.
Neal Ford und Nathaniel Schutta haben zu ihrem 2012 erschienenen Buch “Presentation Patterns: Techniques for Crafting Better Presentations” eine Video-Schulung erstellt.
Mit dem Computerspiel Human Resource Machine kann man die Grundlagen der maschinennahen Programmierung spielerisch erlernen.
Die Menschheit ist in der Informations- und Wissensgesellschaft angekommen. Kaum sind die ersten Änderungen verdaut, schon tauchen weitere Neuigkeiten am Horizont auf: das Internet der Dinge, Big Data, Data Science,...
“Business Model Generation” ist ein hervorragender Einstieg in das komplexe Thema “Geschäftsmodelle”. Das Buch behandelt Geschäftsmodelle, deren Erstellung und weitere Anpassung mit Hilfe des “Business Model Canvas”.
Folien zu einer Einführung über Geschäftsmodelle und Geschäftsmodellmuster.
While I was reading the excellent book by Kevin Suffern "Ray tracing from the ground up", I implemented a ray tracer in Java and wrote a DSL in Groovy, to...
Das Thema "Kovarianz und Kontravarianz" wird zwar auch bei Wikipedia erklärt, ich versuche es hier mit eigenen Worten und Scala.
I explain "covariance and contravariance" with some simple Scala examples.
Wer die Grundlagen von Spark lernen möchte, ist mit dem Buch “Learning Spark” gut beraten. Mir hat besonders gut gefallen, dass das Buch sehr praxisorientiert ist und man nebenbei mit...
This article shows how to use k-d-trees with Apache Spark.
Scala ist ein wichtiger Meilenstein bei der Fusion von funktionaler und objektorientierter Programmierung. Diese Fusion ist noch nicht abgeschlossen, sondern ein “Entdeckungs-Prozess”, der noch ein paar Jahre andauern wird.
Das Hadoop-Ökosystem ist im Laufe der Zeit erheblich gewachsen. “Hadoop: The Definitive Guide” bietet einen Überblick über die wichtigsten Themen und Projekte des Frameworks.
This is the last part in a series of four. It shows how to analyse the emails with Kibana.
This is the third part in a series of four. It explains the technical background.
This is the second part in a series of four. It shows installation and usage.
This article shows how to use Elastiksearch database with Spring Boot. It is the first in a series of four.
In “Data driven - Creating a Data Culture” erläutern die Autoren, was sie unter einer “Datenkultur” verstehen.
In dem schon 2003 geschriebenen Buch “Beyond Fear: Thinking Sensibly About Security in an Uncertain World” schreibt _ Bruce Schneier_ ganz allgemein über Sicherheit. Hier ist die englische “security” gemeint...
The implementation of the heat diffusion equation on multiple GPUs is explained in the talk (in german).
Chris Anderson beschreibt in “Makers: Das Internet der Dinge: die nächste industrielle Revolution” wie industrielle Fertigungsprozesse mit CAD, dem 3D-Druck und/oder durch Outsourcing auch von Kleinunternehmern durchgeführt werden können.
During my talk at the parallel 2015 conference i was asked how one can measure traffic on the PCI express bus. For multi GPU computing it is very important to...
At the parallel 2015 conference I gave an introduction into Multi-GPU programming with Cuda, OpenCL and C++ AMP.
JavaScript hat einen Prototyp-basierten Ansatz zur Objektorientierung. Damit unterscheidet es sich stark von den üblichen objektorientierten Programmiersprachen, wie z. B. Java, C++ und Ruby.
With Babel you can test many features of the upcoming next version of JavaScript called ECMAScript 6 now.
MapReduce ist ein “Korsett” und zwingt den Entwickler in enge Grenzen. Daher macht es Sinn, “MapReduce Design Patterns” zu lesen, damit man schnell die üblichen Tricks und Kniffe kennenlernt. Ähnlich...
“C++ AMP: Accelerated Massive Parallelism with Microsoft Visual C++” ist eine gute Einführung in die Programmierung mit C++ AMP. Leider ist das Buch zum Zeitpunkt der Rezension das einzige Buch...
I tested the parallel ray tracer on all NVIDIA cards i bought. This page contains the results.
I wanted to learn some frameworks for parallel computing and i decided to implement a simple ray tracer as a "visual benchmark".
Das Besondere an “OpenCL in Action: How to Accelerate Graphics and Computation” ist, das der Autor Matthew Scarpino versucht, die Programme wirklich zu erklären. Man erfährt die Gründe für seine...
Ich benutze git zwar schon ein paar Jahre, wollte aber mehr Hintergrundwissen haben und komplexere Abläufe kennenlernen. Das ist dem Buch “Git in Practice” zum einen gelungen, trotzdem habe ich...
“Understanding PaaS” ist ein sehr kleines Büchlein über die Grundlagen des Cloud Computings. Es kann gelesen werden, um sehr schnell in die Thematik einzusteigen. Es ist eher für Entwickler geschrieben,...
Beim Stöbern in “CUDA Fortran for Scientists and Engineers” habe ich gesehen, dass die Autoren wertvolle Optimierungstipps geben. Da bin ich neugierig geworden.
“MongoDB: The Definitive Guide” ist ein gelungener Überblick auf MongoDB sowohl aus Entwickler- als auch als DBA-Perspektive. Jedenfalls soweit ich das als MongoDB-Einsteiger mit mehr als 11 Jahren Data-Warehousing-Projekterfahrung sagen...
Im ersten Teil von “The Elegant Universe: Superstrings, Hidden Dimensions, and the Quest for the Ultimate Theory” werden die Grundlagen der Relativitätstheorie und der Quantenmechanik anschaulich und mit tollen Beispielen...
James Gleick ist ein wahnsinnig belesener Mensch, der in diesem umfangreichen und lesenswerten Buch “The Information : a history, a theory, a flood” die Geschichte der Information und der Informationsverarbeitung...
I bought the book in early access (MEAP) and decided to help as a reviewer.
Wenn es “anspruchsvolle” Literatur gibt, dann gibt es jetzt auch “anspruchsvollen” Code. “If Hemingway Wrote JavaScript” enthält viele lustige und lehrreiche Beispiele.
Das Buch “Ready Player One” hatte fast das Potential ein absoluter Klassiker zu werden in der Größenordnung eines “Hitchhiker’s Guide trough the Galaxy”. Die geniale Idee des Autors ist es,...
Wer sich schnell mal ein paar typische Denkfehler angucken möchte, dem sei “Die Kunst des klaren Denkens” empfohlen.
At the parallel 2014 I gave an introduction into the optimization of GPU kernels.
Das Buch “GPU Computing Gems (Emerald Edition)” ist eine Sammlung von 50 wissenschaftlichen Artikeln über Erfahrungen bei der Verwendung des GPU-Computing in verschiedenen Fachgebieten.
Ich hatte schon viele Artikel der Reihe „CUDA, Supercomputing for the Masses“ von Rob Farber auf der Dr. Dobb’s Webseite gelesen und war recht angetan. Das war damals 2009 eine...
Mit CUDA ist es einfach, eine Berechnung um den Faktor 2-5 zu beschleunigen. Wie man höhere Speedups erreicht, lernt man in “CUDA Programming” von Shane Cook.
Nicholas Wilt zeigt sich in “The CUDA Handbook” sehr kompetent und experimentierfreudig bei der Optimierung von Kerneln. Das Buch kann von vielen Fortgeschrittenen mit Gewinn gelesen werden.
“Using OpenMP” ist eine gute Einführung und enthält ein paar gute Performancetipps.
Wenn man ein wenig Systematik in seine parallelen Programmierkünste bringen will, ist “Structured Parallel Programming: Patterns for Efficient Computation” das Buch zum Einsteigen.
Ich hatte damals 1992 schon die zweite Auflage gelesen. Seit dem hat sich sehr viel zum Positiven geändert, sowohl bei C++ als auch bei diesem „Klassiker“.
In diesem kleinen Buch gibt der Erfinder von C++ einen Überblick auf die Neuigkeiten von C++ 11 und der STL.
An “The Definitive Guide to Grails 2” kommt keiner vorbei, der Grails lernen will.
Ich habe “Learn You a Haskell for Great Good” zur Auffrischung meiner Haskell-Kenntnisse gelesen. Während meines Studiums in den neunziger Jahren war ich begeisterter funktionaler Programmierer. Meine Diplomarbeit habe ich...
Das Buch “Bärentango: Mit Risikomanagement Projekte zum Erfolg führen” ist vor 10 Jahren erschienen und ich habe es mir jetzt (2013) wieder durchgelesen, um zu entscheiden, ob ich es nicht...
Das Buch “97 Things Every Programmer Should Know” besteht aus 97 Abschnitten von unterschiedlichen Autoren zu oft auftretenden Fragen bei der Softwareerstellung.
Das kleine Buch “NoSQL Distilled:” bietet einen guten Überblick auf die verschiedenen NoSQL-Datenbanken.
"Massiv parallel - Grundlagen der GPU Programmierung"
"GPU-Programmierung in der Praxis mit CUDA"
“API Design for C++” ist eine hervorragende Einführung in die Implementierung von APIs mit C++.
“Polygon Mesh Processing” ist ein “research monograph”’ über die Verarbeitung von Polygonnetzen (“‘polygon mesh’”).
At the parallel 2012 I presented my experiences and learnings I gathered in GPU computing projects.
Wie man spannende Vorträge hält, erfährt man in “Resonate: Present Visual Stories that Transform Audiences”.
“Patterns for Parallel Programming” ist ein wichtiges Werk für ‘parallele Programmierer’.
Was “Programming Massively Parallel Processors: A Hands-On Approach” von anderen Büchern unterscheidet, ist die genaue Beschreibung der Funktionsweise der Hardware.
“Slide:ology: The Art and Science of Presentation Design” ist ein sehr gut designtes und gut zu lesendes Buch. Es wird seinem Untertitel auf jeden Fall gerecht.
“100 Things Every Designer Needs to Know About People” ist eine Sammlung von doch recht nützlichen Informationen über Menschen.
Ich habe zum Buch “Presentation Zen: Simple Ideas on Presentation Design and Delivery” eine geteilte Meinung und gebe daher nur 3 Sterne.
Das Buch “Kasino-Kapitalismus” bietet einen sehr guten Überblick über die Ursachen, die zur Finanzkrise geführt haben. Die für die Krise relevanten Zusammenhänge aus der Finanzwelt werden präzise erklärt. Der Autor...
These slides are for a course about parallel computing.
“Head First jQuery” ist im “Heads First”-Stil gehalten und richtet sich an Anfänger und Quereinsteiger, die bereits über Grundkenntnisse in HTML und CSS und Programmierkenntnisse verfügen.
The OpenCL standard is not always easy and the technical proof was a challenge, because the code had to run on different os'es and platforms.
Das Buch “Getting Started with Roo” hat nur etwas über 50 Seiten und beinhaltet eine kurze und oberflächige Einführung in die Benutzung von Spring ROO.
Die Programmierung von parallelen und nebenläufigen Programmen mit Shared-Memory und Threads ist kompliziert und sehr fehleranfällig. Als Lösungsansätze wurden z. B. Software-Transactional-Memory (STM), Message-Passing-Architekturen und Aktoren-Modelle entwickelt. In “Programming Concurrency...
Im Zeitalter des Multi-Tasking und der ständigen Unterbrechungen ist es schwierig, seinen richtigen Arbeitsrhythmus zu finden, den Überblick zu behalten und keine Aufgaben zu vergessen oder aufzuschieben. Eine Lösung bietet...
Mit dem Titel “The Art of Concurrency” wird ein hoher Anspruch geweckt, der nicht erfüllt wird. Der Untertitel “A Thread Monkey’s Guide to Writing Parallel Applications” wird dem Inhalt schon...
“Dieses Buch wird Ihnen helfen, ein besserer Programmierer zu werden” steht als erster Satz in der Einleitung des Buchs “Der Pragmatische Programmierer”. Und ich bin der Meinung, dass es stimmt....
“Complexity - A Guided Tour” ist eine lesenswerte und interessante Einführung. “Komplexität” ist ein Querschnittsthema und durchzieht viele Fachbereiche, wie z. B. die Biologie (Immunsystem, Gehirn, Evolution), Wirtschaftswissenschaften, Informatik und...
Das Buch “Real-time Rendering” ist der perfekte Start in das Themengebiet, wenn man Vorkenntnisse in Linearer Algebra und Softwareentwicklung hat. Es ist auf der Höhe der Zeit (April 2009) und...
Der Titel des Buches “Technisches Schreiben: (nicht nur) für Informatiker” ist viel zu allgemein. Der Autor betrachtet ausschließlich die akademische Seite der Informatik und auch nur die deutsche Sprache.
“Cuda by Example” ist der perfekte Start in CUDA für Einsteiger. Aber auch manche Fortgeschrittene und Profis könnten Ihre Freude an den guten Erklärungen und Beispielen haben.
“Ray Tracing from the Ground Up” ist ein hervorragendes Buch für Einsteiger und Fortgeschrittene. Man merkt, dass sich der Autor viele Jahre mit dem Thema beschäftigt hat und dass er...
During the christmas holidays i tried out Scala and TestNG with Gradle.
On April 1st, Sony released an update for the PlayStation 3 that discontinued support for Linux. This move angered many, sparking intense reactions and discussions.
From 2002 to 2006, I worked at a Canadian manufacturer of a column-oriented database.
During the christmas holidays i rewrote my ray tracer for the NVIDIA CUDA architecture.
Diese Schulung vermittelt die testgetriebene Entwicklung mit dem Schwerpunkt auf JUnit 4. Andere Frameworks wie JUnit 3 und TestNG werden kurz eingeführt (Stand 2009).
In der Schulung über Subversion geht es um die Versionsverwaltung.
Ant bietet immens viele Möglichkeiten, die den meisten nicht bekannt sind. Diese Schulung geht in die Tiefen von Ant (Stand 2009).
I installed Snow Leopard on my laptop yesterday. I was very curious about OpenCL and installed the drivers and the GPU Computing SDK from NVIDIA.
I wrote the Groovy EMF builder and the Groovy UML2 builder. These tools use the builder concept of the programming language Groovy to ease the processing of Eclipse Modelling Framework...
I have got a new computer. As alway i build it myself. How much faster is it?
The functional programming language Haskell provides a very easy way of parallelization.
I tested my ray tracer on Intel Core i7 920 @2.67 MHz.
I tested my ray tracer on my Mac Book Pro.
I wanted to learn about the cell broadband engine in the Playstation 3 and wrote a parallel ray tracer for it.
I am fascinated by the possibilities of modern computer graphics. It all began while playing the game Little Big Planet. It does not look like a computer game. It looks...
Almost 10 years after the initial release, i released an updated version of the library of geometric algorithms in Haskell. It now builds with Cabal and requires the Glasgow Haskell...
Memoization is a well known optimization technique to avoid repeated calculations. With dynamic programming languages like Groovy it is possible to extend the behaviour of an already exisiting class at...
The german magazine JavaSpektrum organized the "Dynamic Languages Shootout" contest for the OOP 2008 conference. The challenge was to create a computer game similiar to Scrabble in a dynamically typed...
JRuby provides access to Java packages, so it is possible to use packages created with the Eclipse Modeling Framework (EMF).
The challenge was to implement Scrabble® in a dynamically typed programming language. I used Groovy and Grails.
Writing plugins for Eclipse with other languages than Java is not officially supported, but there is a way to write an Eclipse plugin with Groovy only.
I participated at Eclipse BugDays in July, August, September, October, and November 2007 and helped debugging the Eclipse projects JDT, PDE/UI, and ECF.
The UML2 project provides an EMF based implementation of the UML 2.x metamodel in Java. With the EMFBuilder it is possible to create and process UML2 models.
While i was cleaning up my hard disk on my Linux in 2007, i needed a program that displays the disk usage graphically. I didn't find a suitable one on...
This article shows how Groovy can be used with the Eclipse Modeling Framework (EMF).
The Common Warehouse Metamodel (CWM) is a standard by the Object Management Group (OMG). The intention of CWM is to define a standard for metadata in Data Warehouses and Business Intelligence applications.
Here’s my second solution for the quiz No 74. It generates text with a first or higher order Markov chains. See also the first order version.
Here’s my solution for the quiz No 74. It generates text with a first order Markov chain.
When i first heard of the Eclipse Modeling Framework (EMF) i got really excited, i tried it out and i wanted to use it.
Ich wollte herausfinden, wie schwer es ist, in Eclipse einen Editor für eine Programmiersprache zu schreiben. Ich kannte damals keinen Open-Source-SQL Editor (auch für Eclipse gab es noch keinen) und...
Über Weihnachten 2004 schrieb ich ein EMF-Plugin für Familenstammbäume. Ostern 2005 fand ich dann die Zeit dafür, einen GEF-Editor dafür zu entwickeln.
From 1999 to 2004, I collected information on the topic of ‘Fraud detection’ on my website. When I started this in 1999 as a research assistant at the University of...
In my diploma thesis I investigate functional programming and geometric algorithms
In dieser Seminararbeit für mein Hauptstudium habe ich 1996 Algorithmen für das Scheduling in verteilten Realzeitsystemen im Rahmen meines Informatikstudiums behandelt.
In dieser Seminararbeit werden optimale Algorithmen für Präfixsummen behandelt.
Programming TrueColor graphics with the Diamond Speedstar 24x