GitHub Actions Continuous Integration Maven release management

GitHub Actions and Maven releases

I like GitLab a lot. Yet, there’s no denying that GitHub has become the de facto standard to host Open Source projects. With GitHub Actions, it’s now possible to implement entire Continuous Integration pipelines without leaving GitHub. In this post, I’d like to highlight how to release Maven artifacts using GitHub Actions. Maven prerequisites Before creating the CI pipeline - and running it, it’s necessary to configure the underlying Maven project. A quick Maven pr


Handcrafting your own SVG

A couple of months ago, I wanted to design a custom logo. The goal was to create 4 different variations for a single logo: horizontal, vertical, 'condensed', and square. All have to display the same bevel-like effect. I’m a developer, and not a web designer For this reason, I chose to use an existing point-and-click web application to create a SVG. It did the job. But I’m curious, and checked the generated XML: I was disappointed. This post aims to describe the lessons learned wit

date time timezone IANA

Date and time gotchas

Developing software requires to model the world. We, we developers, generally assume that models are regular. It always comes as a surprise when they are not. All models are wrong, but some are useful. When it comes to dates, a calendar is a model of organizing time into days, weeks, months, and years. A date references a specific day in a specific calendar. During the course of history, there has been changes to calendars e.g. from one calendar to another, or even within a calendar. In

blog writing advice

Advices on writing blog posts

At work, I’ve recently been asked to advise our engineers on how to write blog posts. A lot of such articles are already available. However, they tend to focus around two main themes: The technical publishing platform e.g. Jekyll, Medium, etc.Metrics e.g. readability score, SEO, etc. Beyond that, everyone is on one’s own. But I believe that writing a good technical article is as much art as engineering. In this post, I’d like to try to address this gap: I’ve been writi

testing typology unit testing integration testing

Different kinds of testing

The subject of testing is vast. It may seem simple from outside, but it’s not. For example, one may define testing as checking that the software is fit for its purpose. But it encompasses a lot more: for example, mutation testing verifies that assertions do actually assert. In this post, I’d like to touch some testing flavors, what’s their purpose and how they compare to each other. The need for testing In an ideal world, we wouldn’t need testing. We would just write b

bug API

A sorting bug

Lately, I succumbed to nostalgia, and agreed to do some consulting for a customer. The job was to audit the internal quality of an application, and finally to make recommandations to improve the code base and reimburse the technical debt. While parsing the source code, I couldn’t help but notice a bug in the implementation of a Comparator. This post is to understand how sorting works in Java, what is a Comparator, and how to prevent fellow developers to fall into the same trap. Even if it


Challenges of Open Data

In my talk Introduction to Data Streaming, I demo an application that displays the location of all public transports in Switzerland in near real-time. Here’s a sample recording: The demo is entirely based on Open principles: the code and its dependencies are Open Source, and the data is read from an Open Data endpoint. In order to develop the demo, I had to overcome some issues by leveraging Open Data. In this post, I’d like share those issues, and ease the path to fellow devel

license open source apache MIT BSD

On Open Source, licenses and changes

The subject of Open Source and OS licenses has been waxing and waning over time. Recently, it became hot again. In this post, I’d like to do a quick recap to set the stage. Then, I’ll analyze reasons for license changes. The rise of Open Source Before I actually started my career - even I was before even born - software was provided with its source code. The value was in the hardware. Most customers - if not every one of them - modified and adapted the source code to their hardwar

hibernate query cache performance

Digging into Hibernate's Query Cache

I haven’t used Hibernate for a long time, and I haven’t blogged about it for even longer. Recently, I was working on a blog post in the context of my job on setting up an evergreen cache. When I was coding the demo, I faced some issue regarding Hibernate’s Query Cache: it didn’t work as I expected it to. Finally, after some time, I managed to fix the issue. This post aims to dig deeper into Hibernate’s Query Cache in order to help fellow developpers confronted with

architecture system architecture state

The illusion of statelessness

Some libraries, frameworks, components, and architectures either encourage statelessness, or make it a requirement. While statelessness has a lot of benefits, it’s unfortunately rarely possible in the real world. In this post, I’d like to detail this stance of mine a bit. State in Functional Programming Functional Programming is based on a set of principles. Among those principles are pure functions: A pure function is a function that has the following properties: Its return