Articles
I created a spending tracker product, because I loathe subscriptions
I built a Google Sheets spending tracker because I refuse to pay $109/year for a glorified dashboard - and I'm selling it for $10.
London workspaces I've tried
My infrequently-updated list of places to work remotely in London
Kubernetes Pod IP addresses: How to find and use them
A practical guide to working with Pod IP addresses in Kubernetes, from my own experience.
The curious case of 'maxSession' in EAP/Wildfly
What does maxSession do? Where does it come from? Who even are you, anyway?
I wrote an MVP in Java and it was actually pleasant
Sometimes the best tools are the tools you already know.
Building a contact form API with Apache Camel and Quarkus
What happens when you don't want to pay for, or use, a SaaS app? Well, you write your own, of course.
Transformation in Camel: How to do it
Want your data, your way? Learn all about the different ways that you can transform data in Apache Camel.
Why I've launched a new website
I've started a new blog for my tech articles. Here's why.
When should you use Apache Camel?
See the use cases for Apache Camel, and when you might think about using this Java integration framework.
Why won't my containers talk to each other?!
I spent way too long figuring out Docker networking. Here's what I learned about getting containers to communicate, with real examples from my dev environment.
What are Camel routes?
Understanding routes and how to use them in Apache Camel
Enterprise Integration Patterns: Book Review
It's a classic software architecture book. Is it worth a buy?
Red Hat Fuse on OpenShift Tutorial [video]
Getting started with Fuse? Follow this short video, where I create a Fuse app and deploy it onto OpenShift.
Pulling images into OpenShift from the Red Hat registry
How to use all those sweet images from the Red Hat registry, without nasty authorisation errors
A Brief Guide to DevOps
A brief introduction to the ideas of DevOps
Event-driven integration on Kubernetes with Camel & KEDA
Can we develop apps in Kubernetes that autoscale based on events? Perhaps, with this example using KEDA, ActiveMQ and Apache Camel
Kubernetes on AWS: a developer's perspective
Playing around and learning Kubernetes? I tried creating an EKS cluster
Taking action
Some thoughts currently percolating with me on how to take action on side projects
Introducing... Safety Curtain
From lockdown idea to MVP: I launched a new tiny product this week
How I use draw.io at the command line
How to create nice-looking diagrams in an open, shareable, Git-friendly format
From developer to author: how I wrote a book
I wrote and self-published a technical book. Here's my story, in case you're thinking of doing the same.
Asciidoctor syntax - a cheatsheet
I was writing a lot of Asciidoctor so I thought I'd make a cheatsheet.
Impact Mapping - a cheatsheet
Here's an impact mapping cheatsheet which you can use as a reminder, or help you run an impact mapping session.
Using ActiveMQ with Apache Camel - with example
How to send and receive messages from an ActiveMQ Artemis message broker using Camel's JMS component and Spring Boot
Connecting to a database or message broker running in OpenShift
In the development zone? Save time by connecting directly to your database in OpenShift, using port forwarding.
XA transactions in Camel: a checklist
What do you need to set up distributed transactions in Apache Camel correctly?
Calling a REST service from Apache Camel
How to call a REST API from Apache Camel, using Camel's HTTP component
Monitoring Camel routes with REST
How to fetch metrics from your Camel routes over HTTP
Where do our logs go?
Where do you put logs when developing microservices?
Can you have multiple Camel Contexts in one app?
An alternative to running multiple Camel Contexts in Spring Boot
How to play nicely together
Codifying team behaviour with a social contract
Learning by reading other people's code
How I solve problems and learn; by standing on the shoulders of giants.
Automation is worth the effort
Get automating your build, test and deployment processes. The effort is worth it.
There can be only one properties file
How to use Linux text manipulation in a Jenkinsfile to produce a Spring Boot properties file
Adventures in debugging: Camel mock endpoints are real
I discovered that mock endpoints are actually real
S2I builds in OpenShift - an example with Java and Maven
How to create S2I BuildConfigs for OpenShift
Using environment variables in Jenkins pipelines - with examples
How to use environment variables inside a Jenkinsfile
Deploying Spring Boot onto Kubernetes
Running a Spring Boot Java application on Kubernetes with Minikube
Using Arquillian Cube to test containers in Kubernetes
How to implement a basic integration test for a container using Arquillian Cube
JBoss/Wildfly: Setting a custom resource adapter for an MDB
Configuring a Message-Driven Bean to use a custom resource adapter, rather than the default one
Consuming a SOAP service with Apache Camel
How to use consume a SOAP service using the Apache CXF component in Camel
Infinispan Query DSL: quick example
A quick example of using the Query DSL in the Infinispan in-memory cache
Use the @MockEndpoints annotation in Camel [Video]
Create mock endpoints in your Camel routes automatically without having to change your route definition
Creating a REST service using the REST DSL [Video]
Using the REST DSL and Restlet to create a REST service in Apache Camel
Bean validation in Apache Camel
How to use Camel's Bean Validation component to easily perform simple data validation
Shutting down Camel after X messages
How to shut down Camel after a certain amount of time or messages, using the new auto-shutdown feature in Camel 2.19+ with Spring Boot
Using languages with Dozer in Camel
How to use Simple, Groovy and other expressions in a Dozer mapping
Spring Boot command line arguments example
How to run a Spring Boot app with JVM params and command line arguments
Using a dynamic Git branch name in a Jenkins job
How to be able to run Jenkins jobs with a dynamic branch name
Disable the env endpoint for Spring Boot apps
How to NOT expose your Spring Boot app's configuration