RSSAmplifier

Blog

Maarten on IT

Recent content on Maarten on IT

maarten.mulders.itRSS feed ↗68 posts

Latest posts

Building a CLI with Quarkus, Kotlin and GraalVM

Command-line tools are great for automation, but choosing the right technology stack to build them can be tricky. I recently set out to build a new command-line application to streamline some tasks, drawing from previous experiences where the tooling left me wanting more. This time, I chose a different combination of technologies that better suits my needs: Kotlin, Quarkus, and GraalVM. In this…

Coding, Thinking and Adapting: My Take-Aways from Devoxx Poland 2025

Six years after my first Devoxx Poland visit, I was invited there again to present. This time, I had the opportunity to give two talks instead of just one. Apart from speaking, visiting a conference is a great way to also join other speaker’s sessions. In this blog, I will share some of the most inspiring talks I attended. Topics include mutation testing, monads, tips for smooth-running…

Authenticate Jakarta EE apps with Google using OpenID Connect

In one of my pet projects, I’m writing a Jakarta EE web application where I want users to authenticate using Google. Easy, you would say, as Jakarta EE 10 includes Jakarta Security 3.0, which has support for OpenID Connect authentication. Took me a bit more time to figure out how to get it working, and to save you from having to do that, here’s what I found.

Reduce Maven Plugin logging

Sometimes, a Maven plugin logs more then you want it to. I recently had this situation with a plugin that generated source code from specifications. This plugin alone wrote over 22000 lines of output just to inform the user that it did what it had to do. No errors or such, only confirming that it did its job. Such superfluous output makes it hard for developers to focus on actual problems in their…

Devnexus 2024

This year, I again have the pleasure to join Devnexus and speak there. In this blog, I’ll highlight some of the sessions that I’ve joined.

Measure Your Maven Build

Slow builds are annoying! There, I’ve said it. And you know it’s true, don’t you? They take valuable time, they are a source of frustration, they extend the feedback cycle, and often they provide the perfect excuse for slacking off . But it doesn’t have to be this way! Rather than getting another cup of coffee or playing that medieval game of gladiator, what if we would…

Why Write Boring Apps?

If you’ve built any kind of web-based application in the last decade, chances are you were building a single-page application (SPA). This means you’ve been writing JavaScript or Typescript, had to work with the Node Package Manager or Yarn, needed to understand a framework like Angular, React or Vue and had to learn a new testing framework (or two). And that would have been only the…

Devoxx 2023: First Impressions

This week, I’ve been attending Devoxx Belgium. It wasn’t my first time around, so I more or less knew what to expect in terms of atmosphere, content and people. In this post, I will share my first impressions. It includes some interesting talks that I joined. Of course, there were more - but those require a larger post, so those may end up in a seperate post later.

Devnexus 2023 live blog

This week, I’m attending the 19th edition of the Devnexus conference in Atlanta! In those 19 years, Devnexus has truly grown to being one of the biggest Java and JVM-related conference in Nothern America, and it’s always been a pleasure to be there. This year marks my fourth attendance as a speaker, and I’ll be doing two talks myself. In this post, I’ll be live blogging…

Notes from JavaZone

Last week, I attended JavaZone, the annual conference ran by javaBin, the Norwegian Java User Group. I have attended JavaZone in the past (2018) so I knew what to expect - and the bar was high! Because of that, I was looking forward a lot to join JavaZone again. Also, this would be my first conference as a Java Champion, which made it even more special.

Using HSQL in OpenLiberty

A quick note, this time. Recently, I wanted to do some hacking around on Jakarta EE and MicroProfile. I chose to work with the OpenLiberty runtime, as I previously had good experiences with it. My pet project also needs a database, so for starters, I chose HyperSQL Database (HSQL DB). Here’s how I set it up.

Mutation Testing badge with PIT and Stryker Dashboard

Earlier, I wrote about integrating PIT with the Stryker Mutator Dashboard. The setup for that was pretty complicated, with some shell scripting that extracted the JSON payload for the report from a JavaScript file. Today, I’m introducing a much simpler approach to that: the Stryker Mutator Dashboard reporter for PIT .

Playing with Loom

If there’s one topic that has kept the Java community excited over the last years, it’s Project Loom. We all know it’s coming someday, but when? What will it look like? And how will it change the way we write concurrent code? In this blog, I’ll try to play a bit with what Loom currently looks like.

The Dapr SDK for Java: Pub/Sub & Distributed Tracing

It’s been a while since the first two posts about Dapr! In those first installments, we looked at the basics of Dapr, from a very conceptual point of view. We also looked at the bare minimum HTTP API that Dapr exposes to the applications that use it. But writing enterprise applications that way would be slow, and it would inevitably lead to mistakes. In this article, I will introduce you to…

Jakarta EE meets Dapr

Earlier this month, I introduced you to Dapr, the Distributed Application Runtime. That was a mostly conceptual introduction, showing you how Dapr works and what it can do for you. But how do you integrate it into an existing application? That’s the topic for today.

Getting to know Dapr

Building distributed applications or microservice applications brings a whole new range of problems. All those application components, or microservices, need to communicate with each other. How will we do that: using messaging, or would direct HTTP calls be a better choice? Often, we must make such decisions early in a project. Since it’s hard to change it later, we call it an…

Build your own OpenJDK on macOS

Following the recent kerfuffle around the security manager deprecation, I was curious to see if a codebase I’m working on would also suffer. But how could I find out? There are no early access builds of Java 17 yet with the latest changes for this JEP. Maybe… I should set out and try to build it myself? But that’s sure going to be a lot of work… Or is it?

Introduction to Maven Toolchains

Java evolves at a much faster pace than it used to do. But not all of the projects we work on keep up with that pace. I have projects on Java 8, 11 and 15 - and sometimes I want to play with early access builds of newer versions as well. How to make sure I can build them without having to constantly switch Java runtimes?

Use git bisect to pinpoint a bug

During my work on Maven today, I found a very specific bug. The error message wasn’t that clear, and I couldn’t make a guess what might’ve caused it. I read about git bisect a few times and figured that today, I would use that tool to find the bug.

What's New in Maven 4

Recently, the Maven community decided to push forward and start working towards a 4.0.0 release . The first question after this announcement is of course: what can we expect Maven 4 to bring us? A lot - and in this post, we want to highlight some of the features that we are particularly excited about.

Block misbehaving IP addresses using Fail2Ban and AbuseIPDB

When you operate servers, whether physical or virtual, at some point in time you may find yourself victim to bots or botnets trying to access your server over SSH. Even if you configure your server to not expose SSH on port 22 (the default), chances are you will be a target at some point. This is especially true if your server is hosted in a public cloud, since these typically reserve ranges or…

Multiple Git identities

Everything is code, and code is everywhere. For me, this means I put more and more stuff into version control. Whether it is infrastructure descriptions, documentation, software or this blog, I always store it in a Git repository. But sometimes this gets dirty, because you accidentally forget to change your Git user details.

Mutation Testing badge with Pitest and Stryker Dashboard

Over the years, badges have become a way for open source maintainers to show the state of their product. Badges can give a quick overview of the code quality, test coverage or build health of an open-source product. The problem with code coverage is, however, that a high coverage doesn’t mean the tests are any good . If only there was a way to show the quality of the test suite…

Infrastructure as Code with Terraform

Setting up new infrastructure can be a tedious process. It doesn’t matter whether it is on-premise or in the cloud. Many organisations have a long process of filling forms, obtaining budget clearance, asking for priority and verifying everything is set up correctly. The cloud promises us to make things better, and at least it got a lot faster. But still, we can make many mistakes in this…

DevNexus Day 2: Metrics, Monolith Decomposition

Together with four “AwesomeSauce” colleagues from Info Support , I’m attending DevNexus this year. For me, it’s the second time I’m here, as I spoke here in 2018, too. Next to delivering my own “React in 50 minutes” session I’m attending some sessions to update with new technology advancements. After a great first day , let’s move on to the…

DevNexus Day 1: WebAssembly, Productivity

Together with four “AwesomeSauce” colleagues from Info Support , I’m attending DevNexus this year. For me, it’s the second time I’m here, as I spoke here in 2018, too. Next to delivering my own “React in 50 minutes” session I’m attending some sessions to update with new technology advancements.

Customise the Maven Release process

Shipping a new release of software usually involves quite a few steps. Depending on the type of software, this may be something you rarely do. Thus, it often involves manual steps. This is not necessary! Maven has had its “Release Plugin” since approximately April 2007; yes, that’s over 12 years! It has served both the Maven project and many other software projects.

Devoxx - Day One

This year I’m returning to Devoxx. I’m planning to write some notes on interesting sessions or other content. Also, I’ll be delivering my talk on Transport Layer Security tomorrow. But today was a day of catching up with old friends and attending a talk or two. One talk really caught my attention: “Implementing a simple JVM in Rust”.

Building a programming language on GraalVM (Part 1)

If you’ve followed recent developments in the Java ecosystem, you must know GraalVM . Many blog posts cover how you can build native executables from Java source code. This is indeed exciting: your program starts faster, and consumes less memory. Other popular topics include building Java applications that run code in other languages. You can run JavaScript, Python, Ruby or R code in the…

Code One - Day Three

Third day on Code One already! Highlights for today: the Community Keynote, a trip to GitHub and a session called “Sarcasm as a Service”.

Code One - Day Two

On this second day at Code One I have again visited interesting sessions. One on security by Jim Manicode and one on cash (or the lack thereof) in Sweden.

Code One - Day One

This year I’m returning to Oracle Code One (formerly JavaOne) for the third time. I’m planning to write some notes on interesting sessions or other content.

How did I get that library?!

When you’re writing Java applications, chances are you’re using Maven for dependency management. It lets you declare the artifacts you need to build your application. Those artifacts also depend on other artifacts. This means you have transitive dependencies - dependencies you didn’t declare yourself but you need them anyway.

Reports from Devoxx PL

From yesterday until tomorrow I’m attending Devoxx Poland (or Devoxx PL for short). It’s the second largest conference in the Devoxx family with around 2700 people attending. The conference is held in the ICE Kraków Congress Centre , a large venue with an amazing primary room. Entrance of the ICE The main reason I’m here is to give a talk about GraalVM on Wednesday morning. Apart…

Securing Apache HTTPD with Microsoft Active Directory

Recently, I was building a website with documentation for one of the projects I’m involved with. I wanted to protect access to that website to a specific set of people inside my company. Here’s how I did it.

Troubleshooting SOAP and MTOM using the command line

When you want to transmit binary files over SOAP-based webservices, you have two choices: Base64 or Message Transmission Optimization Mechanism (MTOM) . The latter is much more efficient, but also harder to troubleshoot if it doesn’t work at once. Both options have their own typical scenario Serialise the file content using Base64 and include the result right into the XML structure. This is…

How does BEAST work?

Last month, I did a talk at GOTO Berlin where I explained the basics of Transport Layer Security. During the talk, the audience asked a few questions through the app. One of them was: “How does Beast work?” and I wasn’t able to answer that one on stage, unfortunately. Since it’s an interesting question, I’ll answer it here. Unfortunately, understanding BEAST is a bit…

A first look at MVC 1.0

Recently, Twitter brought the renaming of Ozark to Krazo to my attention. It pulled my attention: I had never heard of either projects, and I wondered what they would be about. Ozark (or Krazo) will be the Reference Implementation of the new Model-View-Controller Specification. This MVC specification , also known as JSR 371 , was planned for inclusion in Java EE 8, but eventually dropped.…

Custom SOAP Faults using Spring WS

There are many situations when you need to write a SOAP-based webservice. Maybe you are writing a test dummy, or maybe you got the interface from some kind of architect. (Yes, there are other reasons, too.) And chances are you&rsquo;ll be using Spring-WS to do this. Recently I was doing that, and I found the following inside the interface definition (WSDL): <element name= 'faultMessage' type=…

Building ASP.NET Core apps on CircleCI

Recently, my co-worker Willem pulled my attention to the .NET Microservices. Architecture for Containerized .NET Applications e-book. Although I have a strong background in Java and the Java platform, I started reading it, and soon I felt like trying it out. But building software without having automated builds and tests is not the real thing, so that was the first thing I wanted to do. I usually…

Simple UML drawing with PlantUML

Every now and then, there&rsquo;s this moment where you feel a certain urge to draw a diagram. Oftentimes, I feel a similar urge to make a digital version of it. But I don&rsquo;t always have professional tooling around - and no, PowerPoint or its friends are not what I&rsquo;m looking for. Recently, I found a tool that fits my idea of &ldquo;good tooling&rdquo; rather well. So, without further…

Impressions of the first JVMCON

Last Tuesday was the first edition of JVMCON . This conference has a special programme committee: its audience. When the Call for Papers closed, everyone who had a ticket could see the submitted papers. Only, they could not see who submitted the paper - which let them focus on the papers themselves. Out of almost 180 papers, they had to select 13&hellip; And guess what: one of them was mine ! I…

I upgraded to Java 9 - Part II

A few weeks ago, I wrote about migrating an existing Spring-application to Java 9. When I finished, two things remained to be investigated: Code coverage for unit tests. A bunch of warnings when running the application in Tomcat. Code coverage for unit tests As Alan Bateman pointed out , upgrading JaCoCo to its latest version should resolve the issue about the $jacocoData field. In fact, I thought…

I upgraded to Java 9 - here's what happened

I recently participated in a Twitter conversation about upgrading to Java 9. Like most of the people , my current projects are all on Java 8. Of course the question came up, why don&rsquo;t you upgrade? Good question! Since I hadn&rsquo;t even tried, I decided to see how far I could come&hellip; The component I took for my experiment is a pretty simple Spring application. It doesn&rsquo;t use…

Devoxx 2017

Almost two months ago I visited Devoxx 2017. It&rsquo;s about time to write some notes on the stuff I learnt there! Event Storming & DDD workshop The week started off with a full afternoon workshop led by Stijn Vanpoucke . The workshop consisted of small pieces of theory, alternated with exercises using post-it&rsquo;s and markers. A few of the theoretic pieces: An event is something that has…

Getting Started with Zuul

It&rsquo;s been a while since my last post! I recently have been reading a lot about the idea of &ldquo;API management&rdquo; or an &ldquo;API gateway&rdquo;. There&rsquo;s a lot of commercial offerings in this field. Many of them promise you (to some extend) ultimate flexibility and endless possibilities. My preference is for &ldquo;lean and mean&rdquo; approaches where I can pick the building…

JavaOne 2017

This year, I had the pleasure again to visit JavaOne. Not only did I attend the conference, I was also accepted to speak , which was quite a dream come true. The session catalog contains almost 500 sessions, and I obviously visited only a subset of them. I found two topics particularly interesting and decided to attend multiple sessions on each of them. &ldquo;Prepare for JDK 9&rdquo; and…

Markdown to PDF

Todays note is nothing more than a quick tip. I&rsquo;m a big fan of the Markdown markup language, but sometimes I need to exchange documents with people who don&rsquo;t know how to read them. Often, they prefer just Word or PDF. So I looked for a way to convert a Markdown file to a PDF file. My current solution is based on Node.js so you need to install that first. Then use npm , the package…

No bind or arrow functions in in JSX Props - Why? How?

Recently, I found myself running tslint on a small React application written in TypeScript. The combination itself is worth writing another blog post about, but today we&rsquo;re covering just one of the rules that tslint has; in fact, it is defined in the &ldquo;tslint-react&rdquo; rule set. It is also included in the eslint-plugin-react , because it is not related to TypeScript per se.…

Installing the CUDA Toolkit on Ubuntu

Lately, my interest for machine learning and artificial intelligence has revived. When I was at university, I followed some courses and specialisations in this field, but then during my career I hardly ever used any of it. Back in those years, complex neural nets and genetic algorithms took days to build, mainly because we didn&rsquo;t have the computing power for that. But nowadays, things have…