Docker container Jekyll Ruby

Musings around a Dockerfile for Jekyll

If you like cool stories about how an engineer, faced with an impossible problem, overcame all odds and solved it, this post is not for you. This is a story of how I spent a non-trivial amount of time, how I hit a couple of walls, and how I nearly came back to square one. Why do I write it? The first reason is for me: I want to document my journey so if I ever think about trying again in the future, I’ll have some arguments against it. Second, in opposition to the actual zeitgeist, you le

Maven logging Log4J2 SLF4J Spring Boot

Feedback on the Log4J2 hack in Spring Boot

Last week, I wrote a post that described how to hack the Maven dependency resolution system. I admit it was a dirty hack, it’s even in the post name. But I got it wrong. Thanks Stéphane Nicoll for pointing it out: "It boils down to excluding the spring-boot-starter-logging in every Spring Boot starter"Since you've put every in bold, I assume you meant it. That's actually wrong and not what the documentation states.Here is an example:— Stép

Maven hack logging Log4J2 SLF4J Spring Boot

A dirty hack to ease the usage of Log4J2 in Spring Boot

Logging is one of the fundamental components of any application which runs in production. Yet, between performance and logging in critical environments, I’d favor the former. For that reason, modern logging frameworks should implement at least two requirements: Async appenders: the write operation shouldn’t be blocking the execution of the programLazy computation: the framework doesn’t run expensive computations until they are needed - or never if that’s the case. The fi

stream processing data streaming Event-Driven Architecture EDA

Event Streams in Action

Between 2009 and 2013, I published ten book reviews on this blog. And since then, nothing. Reading a book is a huge commitment, not to mention the review. During the lockdown, Manning approached me for a 'partnership opportunity'. In general, I turn down such offers. But I already bought and read books from Manning in the past: they range from above-average to good reads. I proposed to amend the deal like this: Manning sends a book of my choice for free and I write an honest review. The publi

GraalVM native image

(Finally) solving a substitution GraalVM issue

One of my current talks is about creating a Kubernetes operator in Java. I demo it step by step. In the later steps, I’m using GraalVM native image to create a native executable. In that regard, some libraries are not compatible with the native image creation process. Several options are available to make them work anyway. One of the options is to substitute incompatible code with compatible one. In the above post, I describe how to use those substitutions. I thought I had it right. I was


Most commonly available JDKs

For reasons I dare not mention, I had to install version 7 of the JDK a couple of months ago. As a Mac user, my usual way of installing is using Homebrew. To install a JDK, this is as easy as brew cask install adoptopenjdkx, where x is the Java version. It didn’t work, as AdoptOpenJDK provides no version 7. It took me some time to find a JDK 7. In the end, I found one in Zulu - thanks to Azul. Coupled to the fact that I also learned Alibaba provided a JDK and I got curious: how many

Spring Boot Micronaut Cloud Native

From Spring Boot to Micronaut

In the last couple of years, I’ve been playing a bit with a generation of tools in the Java world, namely Micronaut, Quarkus and GraalVM. While I’m a Spring Boot fan since its beginning, I believe this quite an eye-opening opportunity. In this post, I’d like to see how easy, or how hard, it is to port a simple Spring Boot application to Micronaut. Setting up the context The JVM is an great piece of technology. Modern versions compile the running bytecode to native code, depe

Reactive Programming Kotlin coroutines Project Reactor

From Reactor to Coroutines

Last September, I wrote how to migrate from an Imperative Programming codebase to a Reactive Programming one in a step-by-step process. Because of its popularity, I illustrated the post with a Spring Boot demo. The final result uses Mono and Flux from Project Reactor. I also made sure that no step in the processing pipeline is blocking thanks to Blockhound. I wrote the code in Java so that it could be accessible to the largest audience. But I’m still a Kotlin fan at heart. Hence, I ported

jigsaw modules modularization JPMS

Update on the state of Java modularization

At the beginning of 2019, I wrote about the state of Java modularization. I took a sample of widespread libraries, and for each of them, I checked whether: It supports the module system i.e. it provides an automatic module name in the manifestIt’s a full-fledged module i.e. it provides a module-info The results were interesting. 14 out of those 29 libraries supported the module system, while 2 were modules in their own right. Nearly 2 years later, and with Java 16 looming around the cor