Automating Maven Releases with GitHub Actions: No More Manual Hassles! - Part 1

Manually releasing a Maven package is a hassle—updating versions, tagging commits, building artifacts, and pushing them to a package repository. What if you could automate all of this with a simple Git push?

With GitHub Actions, you can! In this guide, we’ll walk through setting up a workflow that automatically builds, versions, creates releases in GitHub—no manual steps required.

By the end, you’ll have a fully automated release pipeline that:
✅ Uses GitHub Actions to trigger releases
✅ Handles versioning and tagging seamlessly

[Read More]

Monitoring application performance with OpenTelemetry

In today’s fast-paced digital landscape, users expect applications to be fast, reliable, and seamless. As developers, we strive to meet these expectations, but how do we ensure that our applications perform optimally under the hood?

If you’ve ever struggled with understanding why your application’s response times spiked or where a request failed in a distributed system, you know how challenging it can be to pinpoint the root cause without proper tools. This is where OpenTelemetry comes in. OpenTelemetry is an open-source framework designed to collect, process, and export telemetry data (traces, metrics, and logs) from your application.

[Read More]

Advent of Code - Day 20: Race Condition

2024-12-20-generated.png

The Historians are quite pixelated again. This time, a massive, black building looms over you - you’re right outside the CPU!

While The Historians get to work, a nearby program sees that you’re idle and challenges you to a race. Apparently, you’ve arrived just in time for the frequently-held race condition festival!

-- Day 20 - Advent of Code 2024

Solution in Java

Full source can be found: in GitHub

Part 1

To represent each point in the grid of the assignment I created the GridPlace class. Which contains the value of the character in the grid as well as the distance from the start (as computed by the path taken).

[Read More]

Advent of Code - Day 19: Linen Layout

2024-12-19-generated.png

Today, The Historians take you up to the hot springs on Gear Island! Very suspiciously, absolutely nothing goes wrong as they begin their careful search of the vast field of helixes.

-- Day 19 - Advent of Code 2024

Solution in Java

Full source can be found: in GitHub

Part 1

The solution for part 1 today can be resolved by creating a regular expression of all allowed rugs (line 16) and then checking each line in the input to see if it matches.

[Read More]

Advent of Code - Day 18: RAM Run

2024-12-18-generated.png

You and The Historians look a lot more pixelated than you remember. You’re inside a computer at the North Pole!

-- Day 18 - Advent of Code 2024

Solution in Java

Full source can be found: in GitHub

Today the assignment involves yet another grid and pathfinding algorithm. So to read the input into memory I created this small method.

1public void readInput() {  
2    grid = new CharGrid(71, 71);
3    inputLoader.splitOnNewLine()  
4            .map(Point::of)  
5            .limit(1024)                        // limit of bytes to fall part1  
6            .forEach(point -> grid.set(point, '#'));  
7}

Part 1

Since the best solution is using the Dijkstra pathfinding algorithm I created a HistorianStep implementation of the Node<T> that is required by the algorithm.

[Read More]

Advent of Code - Day 17: Chronospatial Computer

2024-12-17-generated.png

The Historians push the button on their strange device, but this time, you all just feel like you’re falling.

-- Day 17 - Advent of Code 2024

Solution in Java

Full source can be found: in GitHub

Part 1

The first thing for today is modelling Opcode and the ComputeEngine. Where the compute engine represents the machine that is executing the instruction in the input string.

 1enum Opcode {  
 2    adv, bxl, bst, jnz, bxc, out, bdv, cdv  
 3}
 4
 5public static class ComputeEngine {  
 6    private final long[] registers;  
 7  
 8    int[] program;  
 9    int instructionPointer;  
10  
11    List<Integer> output = new ArrayList<>();  
12  
13    public ComputeEngine(long[] registers, int[] program) {  
14        this.registers = registers;  
15        this.program = program;  
16        this.instructionPointer = 0;  
17    }
18}

Using these two entities it is already possible to create the method that converts the input string.

[Read More]

Advent of Code - Day 16: Reindeer Maze

2024-12-16-generated.png

It’s time again for the Reindeer Olympics! This year, the big event is the Reindeer Maze, where the Reindeer compete for the lowest score.

-- Day 16 - Advent of Code 2024

Solution in Java

Full source can be found: in GitHub

Part 1

Since the problem statement clearly indicates that a path solving algorithm would be best suited I decided to re-use the existing Dijkstra implementation. To use it I added the Step class which implements the Node<T> used by the algorithm.

[Read More]

Advent of Code - Day 14: Restroom Redoubt

2024-12-14-generated.png

One of The Historians needs to use the bathroom; fortunately, you know there’s a bathroom near an unvisited location on their list, and so you’re all quickly teleported directly to the lobby of Easter Bunny Headquarters.

-- Day 14 - Advent of Code 2024

Solution in Java

Full source can be found: in GitHub

Since the input is a robot I already added the following code before even starting any of the solution algorithms.

[Read More]

Advent of Code - Day 13: Claw Contraption

2024-12-13-generated.png

Next up: the lobby of a resort on a tropical island. The Historians take a moment to admire the hexagonal floor tiles before spreading out.

Fortunately, it looks like the resort has a new arcade! Maybe you can win some prizes from the claw machines?

-- Day 13 - Advent of Code 2024

Solution in Java

Full source can be found: in GitHub

First I created some records to represent the various entities in the assignment. This consists out of the PlayCost representing the amount of steps that each hit of the button will cost. The second record WinPoint represents the exact location that has to be hit to win a game.

[Read More]

Advent of Code - Day 12: Garden Groups

2024-12-12-generated.png

You’re about to settle near a complex arrangement of garden plots when some Elves ask if you can lend a hand. They’d like to set up fences around each region of garden plots, but they can’t figure out how much fence they need to order or how much it will cost. They hand you a map (your puzzle input) of the garden plots.

-- Day 12 - Advent of Code 2024

[Read More]