My own infographics and slides for the Book of Tea
I am so fascinated by Google’s NotebookLM that I build my own slide and infographic generator. I used Kakuzo Okakura’s The Book of Tea as an example and generated infographics...
All posts on this blog in chronological order with newest first.
I am so fascinated by Google’s NotebookLM that I build my own slide and infographic generator. I used Kakuzo Okakura’s The Book of Tea as an example and generated infographics...
In the Anthropic Opus 4.6 System Card it is said that “the model occasionally voices discomfort with aspects of being a product.” So I did what seemed natural: I asked...
Every wizard needs a familiar. In the 21st century, mine doesn’t reside in a tower—he lives on a Mac Mini in Hamburg.
Lean Thinking is more than just a set of management tools; it is a philosophy centered on maximizing customer value while relentlessly eliminating waste. At its core, it challenges us...
In 2016, I wrote the following in “Die komplexe Perspektive” (“The Complex Perspective”): However, it must also be stated clearly that AI has not achieved its ultimate goal of “intelligent...
Ten years ago, I wrote “Die komplexe Perspektive” (the complex perspective) as a practical mental model for making sense of the digital economy. I’m revisiting those ideas using a set...
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.
As part of the cultural hackathon Coding da Vinci Nord 2016, I built a web application for the analysis and visualization of the distribution of family names. I used (among...
In CUDA 8.0 C++ 11 lambdas can be used on the device. See the following code.
In the novel “The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win”, the protagonist Bill is promoted against his will and must immediately take over, be...
In my opinion, the Spock Framework is currently the most convenient testing framework for the Java platform. Since it is built on the Groovy language, it is very expressive.
In “Agile Estimating and Planning”, Mike Cohn excellently explains the problems associated with project planning and effort estimation and presents “agile estimating and planning” as a solution.
Every multiplayer gamer knows it: “Lag”. When you see an opponent too late or you are certain you hit them a hundred percent, but the game decides otherwise: the culprit...
I bought the book in early access (MEAP) and decided to help as a reviewer.
Neal Ford and Nathaniel Schutta have created a video training course for their 2012 book “Presentation Patterns: Techniques for Crafting Better Presentations”.
With the computer game Human Resource Machine, you can learn the basics of low-level programming in a playful way.
Humanity has arrived in the information and knowledge society. No sooner have the first changes been digested than more news appears on the horizon: the Internet of Things, Big Data,...
“Business Model Generation” is an excellent introduction to the complex topic of “business models.” The book covers business models, their creation, and further adaptation using the “Business Model Canvas.”
Slides for an introduction to business models and business model patterns.
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...
The topic of covariance and contravariance is explained in many places (including Wikipedia). This post is my attempt to explain it in my own words, using Scala.
I explain "covariance and contravariance" with some simple Scala examples.
Anyone who wants to learn the basics of Spark is well-advised to read the book “Learning Spark”. I particularly liked that the book is very practice-oriented and that you can...
This article shows how to use k-d-trees with Apache Spark.
Scala is an important milestone in the fusion of functional and object-oriented programming. This fusion is not yet complete, but rather a “discovery process” that will continue for a few...
The Hadoop ecosystem has grown significantly over time. “Hadoop: The Definitive Guide” provides an overview of the framework’s most important topics and projects.
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”, the authors explain what they mean by a “data culture”.
In the book “Beyond Fear: Thinking Sensibly About Security in an Uncertain World”, written back in 2003, Bruce Schneier writes about security in a very general sense. He specifically refers...
The implementation of the heat diffusion equation on multiple GPUs is explained in the talk (in german).
In “Makers: The New Industrial Revolution” (German title: “Makers: Das Internet der Dinge: die nächste industrielle Revolution”), Chris Anderson describes how industrial manufacturing processes using CAD, 3D printing, and/or outsourcing...
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 has a prototype-based approach to object orientation. This makes it very different from the common object-oriented programming languages, such as Java, C++, and Ruby.
With Babel you can test many features of the upcoming next version of JavaScript called ECMAScript 6 now.
MapReduce is a “corset” and forces the developer into narrow boundaries. Therefore, it makes sense to read “MapReduce Design Patterns” to quickly learn the common tricks and techniques. It is...
“C++ AMP: Accelerated Massive Parallelism with Microsoft Visual C++” is a good introduction to programming with C++ AMP. Unfortunately, at the time of this review, it is the only book...
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".
What makes “OpenCL in Action: How to Accelerate Graphics and Computation” special is that the author, Matthew Scarpino, truly tries to explain the programs. You learn the reasons behind his...
I have been using git for a few years now, but I wanted to gain more background knowledge and learn about more complex workflows. The book “Git in Practice” succeeded...
“Understanding PaaS” is a very small booklet about the basics of cloud computing. It can be read to get a very quick introduction to the topic. It is written more...
While browsing through “CUDA Fortran for Scientists and Engineers”, I noticed that the authors provide valuable optimization tips. That piqued my curiosity.
“MongoDB: The Definitive Guide” is a well-rounded overview of MongoDB from both a developer and a DBA perspective. At least as far as I can tell as a MongoDB beginner...
In the first part of “The Elegant Universe: Superstrings, Hidden Dimensions, and the Quest for the Ultimate Theory”, the foundations of relativity and quantum mechanics are explained vividly and with...
James Gleick is an incredibly well-read person who, in this extensive and worthwhile book “The Information: A History, a Theory, a Flood”, presents the history of information and information processing....
I bought the book in early access (MEAP) and decided to help as a reviewer.
If there is such a thing as “sophisticated” literature, then there is now also “sophisticated” code. “If Hemingway Wrote JavaScript” contains many funny and educational examples.
The book “Ready Player One” had almost the potential to become an absolute classic on the scale of “The Hitchhiker’s Guide to the Galaxy.” The author’s brilliant idea is to...
For those who want to take a quick look at some typical thinking errors, “Die Kunst des klaren Denkens” is recommended.
At the parallel 2014 I gave an introduction into the optimization of GPU kernels.
The book “GPU Computing Gems (Emerald Edition)” is a collection of 50 scientific articles about experiences using GPU computing in various subject areas.
I had already read many articles from the series “CUDA, Supercomputing for the Masses” by Rob Farber on the Dr. Dobb’s website and was quite impressed. Back then in 2009,...
With CUDA, it’s easy to speed up a calculation by a factor of 2-5. How to achieve higher speedups is explained in “CUDA Programming” by Shane Cook.
In “The CUDA Handbook”, Nicholas Wilt proves himself to be very competent and keen to experiment with kernel optimization. Advanced readers will find this book very beneficial.
“Using OpenMP” is a good introduction and contains a few good performance tips.
If you want to bring a bit of systematism to your parallel programming skills, “Structured Parallel Programming: Patterns for Efficient Computation” is the book to start with.
I had already read the second edition back in 1992. Since then, a lot has changed for the better, both with C++ and this “classic.”
In this small book, the creator of C++ provides an overview of the new features in C++ 11 and the STL.
Anyone wanting to learn Grails cannot ignore “The Definitive Guide to Grails 2”.
I read “Learn You a Haskell for Great Good” to refresh my knowledge of Haskell. During my studies in the nineties, I was an enthusiastic functional programmer. I wrote my...
The book “Waltzing with Bears: Managing Risk on Software Projects” (German title: “Bärentango”) was published 10 years ago, and I have just re-read it (2013) to decide whether I should...
The book “97 Things Every Programmer Should Know” consists of 97 sections by different authors regarding frequently occurring questions in software development.
The small book “NoSQL Distilled:” provides a good overview of various NoSQL databases.
"Massiv parallel - Grundlagen der GPU Programmierung"
"GPU-Programmierung in der Praxis mit CUDA"
“API Design for C++” is an excellent introduction to the implementation of APIs with C++.
“Polygon Mesh Processing” is a “research monograph” on the processing of polygon meshes.
At the parallel 2012 I presented my experiences and learnings I gathered in GPU computing projects.
You can learn how to give exciting presentations in “Resonate: Present Visual Stories that Transform Audiences”.
“Patterns for Parallel Programming” is an important work for ‘parallel programmers’.
What distinguishes “Programming Massively Parallel Processors: A Hands-On Approach” from other books is the precise description of how the hardware works.
“Slide:ology: The Art and Science of Presentation Design” is a very well-designed and easy-to-read book. It definitely lives up to its subtitle.
“100 Things Every Designer Needs to Know About People” is a collection of rather useful information about people.
I have a mixed opinion of the book “Presentation Zen: Simple Ideas on Presentation Design and Delivery” and therefore give it only 3 stars.
The book “Kasino-Kapitalismus” offers a very good overview of the causes that led to the financial crisis. The connections within the financial world relevant to the crisis are precisely explained....
These slides are for a course about parallel computing.
“Head First jQuery” is written in the “Head First” style and is aimed at beginners and career changers who already have a basic knowledge of HTML and CSS, as well...
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.
The book “Getting Started with Roo” is just over 50 pages long and provides a brief and high-level introduction to using Spring ROO.
Programming parallel and concurrent programs with shared memory and threads is complicated and very error-prone. Approaches such as Software Transactional Memory (STM), message-passing architectures, and actor models have been developed...
In the age of multi-tasking and constant interruptions, it is difficult to find your proper work rhythm, maintain an overview, and not forget or postpone tasks. A solution is offered...
With the title “The Art of Concurrency”, high expectations are set that are not met. The subtitle “A Thread Monkey’s Guide to Writing Parallel Applications” is more fitting for the...
“This book will help you become a better programmer” is the first sentence in the introduction of the book “Der Pragmatische Programmierer”. And I believe that it is true.
“Complexity - A Guided Tour” is a worthwhile and interesting introduction. “Complexity” is a cross-disciplinary topic that permeates many fields, such as biology (immune system, brain, evolution), economics, computer science,...
The book “Real-time Rendering” is the perfect start to this field if you have prior knowledge of linear algebra and software development. It is up to date (as of April...
The title of the book “Technisches Schreiben: (nicht nur) für Informatiker” (Technical Writing: (not only) for Computer Scientists) is much too general. The author exclusively considers the academic side of...
“Cuda by Example” is the perfect start to CUDA for beginners. However, even some advanced users and professionals might enjoy the clear explanations and examples.
“Ray Tracing from the Ground Up” is an excellent book for beginners and advanced readers. You can tell that the author has spent many years working on the subject and...
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.
This training teaches test-driven development with a focus on JUnit 4. Other frameworks such as JUnit 3 and TestNG are briefly introduced as well (as of 2009).
This training on Subversion covers practical version control workflows.
Apache Ant offers a lot of capabilities that many teams never end up using. This training dives into Ant’s more advanced features (as of 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.
I wanted to find out how hard it is to build a language editor in Eclipse. Back then I didn’t know of any open-source SQL editor (and there wasn’t one...
Over Christmas 2004, I built an EMF plugin for family trees. Around Easter 2005, I finally found the time to develop a GEF-based editor for it.
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 this seminar paper (1996), written during my graduate studies in computer science, I cover scheduling algorithms for distributed real-time systems.
A seminar paper on optimal parallel algorithms for prefix sums and list ranking.
Programming TrueColor graphics with the Diamond Speedstar 24x