<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Maarten Mulders</title>
    <description>The latest articles on Forem by Maarten Mulders (@mthmulders).</description>
    <link>https://forem.com/mthmulders</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F337167%2F59bdfa77-7790-4056-95e9-c530a5c9d931.jpg</url>
      <title>Forem: Maarten Mulders</title>
      <link>https://forem.com/mthmulders</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/mthmulders"/>
    <language>en</language>
    <item>
      <title>Building a CLI with Quarkus, Kotlin and GraalVM</title>
      <dc:creator>Maarten Mulders</dc:creator>
      <pubDate>Mon, 28 Jul 2025 06:17:00 +0000</pubDate>
      <link>https://forem.com/mthmulders/building-a-cli-with-quarkus-kotlin-and-graalvm-2d2</link>
      <guid>https://forem.com/mthmulders/building-a-cli-with-quarkus-kotlin-and-graalvm-2d2</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;This time, I chose a different combination of technologies that better suits my needs: Kotlin, Quarkus, and GraalVM. In this blog, I’ll walk you through the setup and decisions behind this stack—so you can get up and running even faster when building your own CLI tools.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>cli</category>
      <category>java</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Coding, Thinking and Adapting: My Take-Aways from Devoxx Poland 2025</title>
      <dc:creator>Maarten Mulders</dc:creator>
      <pubDate>Mon, 16 Jun 2025 19:53:00 +0000</pubDate>
      <link>https://forem.com/mthmulders/coding-thinking-and-adapting-my-take-aways-from-devoxx-poland-2025-37oc</link>
      <guid>https://forem.com/mthmulders/coding-thinking-and-adapting-my-take-aways-from-devoxx-poland-2025-37oc</guid>
      <description>&lt;p&gt;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 applications in production, effectively working with AI and hexagonal architecture. Continue reading for my recommendations from this year’s edition!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>learning</category>
      <category>testing</category>
    </item>
    <item>
      <title>Authenticate Jakarta EE apps with Google using OpenID Connect</title>
      <dc:creator>Maarten Mulders</dc:creator>
      <pubDate>Tue, 20 Aug 2024 08:02:00 +0000</pubDate>
      <link>https://forem.com/mthmulders/authenticate-jakarta-ee-apps-with-google-using-openid-connect-1o8p</link>
      <guid>https://forem.com/mthmulders/authenticate-jakarta-ee-apps-with-google-using-openid-connect-1o8p</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Reduce Maven Plugin logging</title>
      <dc:creator>Maarten Mulders</dc:creator>
      <pubDate>Tue, 16 Jul 2024 06:16:00 +0000</pubDate>
      <link>https://forem.com/mthmulders/reduce-maven-plugin-logging-58mp</link>
      <guid>https://forem.com/mthmulders/reduce-maven-plugin-logging-58mp</guid>
      <description>&lt;p&gt;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 build. It’s too easy to think “too long, didn’t read” (TL;DR) and hence miss the important bits. So, it’s time to tame the plugin logging!&lt;/p&gt;

</description>
      <category>java</category>
      <category>productivity</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Devnexus 2024</title>
      <dc:creator>Maarten Mulders</dc:creator>
      <pubDate>Wed, 10 Apr 2024 22:50:00 +0000</pubDate>
      <link>https://forem.com/mthmulders/devnexus-2024-3dk0</link>
      <guid>https://forem.com/mthmulders/devnexus-2024-3dk0</guid>
      <description>&lt;p&gt;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:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What makes software architecture so inTRaCtAble?&lt;/li&gt;
&lt;li&gt;Apache Maven 4 is Awesome&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Measure Your Maven Build</title>
      <dc:creator>Maarten Mulders</dc:creator>
      <pubDate>Fri, 15 Mar 2024 07:46:00 +0000</pubDate>
      <link>https://forem.com/mthmulders/measure-your-maven-build-5hc6</link>
      <guid>https://forem.com/mthmulders/measure-your-maven-build-5hc6</guid>
      <description>&lt;p&gt;Slow builds are annoying!&lt;/p&gt;

&lt;p&gt;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 &lt;a href="https://xkcd.com/303/" rel="noopener noreferrer"&gt;slacking off&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;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 investigate &lt;em&gt;why&lt;/em&gt; the build is so slow? If we know the bottlenecks, we can address them. That would shorten the feedback loop, increasing our productivity and our job happiness in one go.&lt;/p&gt;

</description>
      <category>java</category>
      <category>performance</category>
      <category>productivity</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Why Write Boring Apps?</title>
      <dc:creator>Maarten Mulders</dc:creator>
      <pubDate>Fri, 01 Mar 2024 13:00:00 +0000</pubDate>
      <link>https://forem.com/mthmulders/why-write-boring-apps-1mn3</link>
      <guid>https://forem.com/mthmulders/why-write-boring-apps-1mn3</guid>
      <description>&lt;p&gt;If you’ve built any kind of web-based application in the last decade, chances are you were building a &lt;em&gt;single-page application&lt;/em&gt; (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 &lt;em&gt;and&lt;/em&gt; had to learn a new testing framework (or two). And that would have been only the basics. You would probably use other libraries, frameworks and toolkits: for styling the user interface, for doing API calls using REST and/or GraphQL, and for writing reusable components. But we usually take the pain, because the alternative is just… “boring”.&lt;/p&gt;

&lt;p&gt;But it is time to reflect on this approach. It drags in a lot of complexity, but what does it give us? More complexity! At the end of the day, everyone will probably agree that simplicity is import. And what we want to achieve is a simple thing: displaying some information to a user. So why all that complexity?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>frontend</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Devoxx 2023: First Impressions</title>
      <dc:creator>Maarten Mulders</dc:creator>
      <pubDate>Mon, 09 Oct 2023 10:04:15 +0000</pubDate>
      <link>https://forem.com/mthmulders/devoxx-2023-first-impressions-52d6</link>
      <guid>https://forem.com/mthmulders/devoxx-2023-first-impressions-52d6</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

</description>
      <category>community</category>
      <category>devjournal</category>
      <category>java</category>
      <category>techtalks</category>
    </item>
    <item>
      <title>Devnexus 2023 live blog</title>
      <dc:creator>Maarten Mulders</dc:creator>
      <pubDate>Wed, 05 Apr 2023 15:49:15 +0000</pubDate>
      <link>https://forem.com/mthmulders/devnexus-2023-live-blog-376j</link>
      <guid>https://forem.com/mthmulders/devnexus-2023-live-blog-376j</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;In this post, I’ll be live blogging about some of the sessions that I’ve joined. Enjoy!&lt;/p&gt;

</description>
      <category>community</category>
      <category>devjournal</category>
      <category>java</category>
      <category>techtalks</category>
    </item>
    <item>
      <title>Notes from JavaZone</title>
      <dc:creator>Maarten Mulders</dc:creator>
      <pubDate>Mon, 12 Sep 2022 19:56:13 +0000</pubDate>
      <link>https://forem.com/mthmulders/notes-from-javazone-22m2</link>
      <guid>https://forem.com/mthmulders/notes-from-javazone-22m2</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

</description>
      <category>community</category>
      <category>devjournal</category>
      <category>java</category>
      <category>techtalks</category>
    </item>
    <item>
      <title>Using HSQL in OpenLiberty</title>
      <dc:creator>Maarten Mulders</dc:creator>
      <pubDate>Tue, 23 Aug 2022 06:46:13 +0000</pubDate>
      <link>https://forem.com/mthmulders/using-hsql-in-openliberty-19a9</link>
      <guid>https://forem.com/mthmulders/using-hsql-in-openliberty-19a9</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

</description>
      <category>database</category>
      <category>java</category>
      <category>sql</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Mutation Testing badge with PIT and Stryker Dashboard</title>
      <dc:creator>Maarten Mulders</dc:creator>
      <pubDate>Sat, 30 Jul 2022 08:41:13 +0000</pubDate>
      <link>https://forem.com/mthmulders/mutation-testing-badge-with-pit-and-stryker-dashboard-412l</link>
      <guid>https://forem.com/mthmulders/mutation-testing-badge-with-pit-and-stryker-dashboard-412l</guid>
      <description>&lt;p&gt;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 &lt;strong&gt;Stryker Mutator Dashboard reporter for PIT&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>codequality</category>
      <category>java</category>
      <category>testing</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
