About Arjen

I am a Java developer and mentor with a deep passion for software craftsmanship. To me, code is communication; I strive for readability, consistency, and clean architectures. Always looking ahead to find high-impact technologies for the future, and ensuring we master the fundamentals today to build software that is robust, maintainable, and built to last.

Posts by Arjen

A DIY LocalStack for Google APIs with WireMock and TestContainers

Posted on by  
Arjen Tebbenhof

Discover how to build your own, offline "LocalStack" for Google APIs using WireMock and TestContainers. In this post, I will show you how to set up a two-purpose mocking strategy. By writing your JSON mock responses just once, you can reuse them to power automated integration tests and spin up a standalone mock server for local (UI) development. No more production data and sharing of google keys between developers, no more 403 User Rate Limit Exceeded.

Continue reading →

Learning by steering: building software by using AI webclient as a pair programmer

Posted on by  
Arjen Tebbenhof

Over the past few weeks, I’ve been on a rewarding journey. As a Managing Director who is no longer a full-time software developer, finding the time to code and keep up with the relentless pace of new technologies is a real challenge. While my colleagues are experimenting with the latest frameworks and tools daily, I know I’m not alone in feeling that the tech landscape evolves faster than the hours in a day allow — or faster than what client projects typically permit you to explore.

That’s why I cherish internal projects. Earlier this year I posted about Posting our blog feed to social networks using Slack. And recently I set out to build a couple of internal tools for our Google Workspace environments, but I decided to try something different than what maybe most developers would do.

Instead of relying solely on traditional documentation or enabling an autopilot AI assistant directly inside my IDE or terminal (like a Claude Code subscription), I used the standard Google Gemini web client. It comes included with our company’s Google Workspace account — proving that you don’t need expensive premium subscriptions or complex local LLMs to get value.

Continue reading →

Posting our blog feed to social networks using Slack

Posted on by  
Arjen Tebbenhof

Two years ago, we wrote about building a Slack bot to automatically tweet new JDriven blog posts, and inform us about this using our dedicated internal Slack channel. Life was simple then. If it was on Twitter, it was "online".

But the social media landscape has fragmented and augmented. The tech community has spread, at least across X, Mastodon, and Bluesky. So to reach our audience today, we have to tweet, toot and who knows what to reach them.

We needed to upgrade our trusty Slack bot from a single-channel poster to an omnichannel syndication engine. In this post, I’ll walk you through how I refactored our Deno-based Slack app to handle multiple platforms, manage distinct authentication protocols, and ensure we don’t spam our followers with duplicate posts.

Continue reading →

Nushell basics: structured data in your shell

Posted on by  
Arjen Tebbenhof

In our TechRadar Spring 2025 edition we highlighted the IntelliJ HTTP client and Bruno as alternatives to Postman, and also introduced you to Nushell. This post will focus on the latter.

The goal of Nushell is to take the Unix philosophy of shells, where pipes connect simple commands together, and combine it with a rich programming language. Nushell connects both by bringing a rich programming language and a full-featured shell together into one package, that runs on Linux, macOS, and Windows. Nushell uses structured data everywhere, for example output of ls command, or REST API calls.

Continue reading →

shadow-left