Continuous Integration GitHub Action

Customizing your GitHub profile - Building

In the previous post, we had a look on how to write a Kotlin script to automatically write a README that dynamically aggregates various data sources. In this follow-up post, we will describe how to run this script through the use of GitHub Actions. Yet another Continuous Integration tool It has been some time since Hudson, now known as Jenkins, was the leading (only?) Continuous Integration server available on the market. The last years has seen an precambrian explosion of alternatives: Atlas

GitHub Kotlin Kotlin Scripting Freemarker

Customizing your GitHub profile - Scripting

Recently, GitHub allowed users to customize the appearance of their profile page. This is different from GitHub Pages: it allows to add extra content to one’s GitHub profile. Since that feature is available, a lot of developers have decided to customize their page. I think this is fun, so I also wanted to do the same, in my own way. I wanted to describe it, so fellow developers can take inspiration. Since the whole process is a bit long, I’ve split this post in two parts. This par

software development fixed price time and materials build or buy

On house building and software development projects

Not long ago, I came upon a LinkedIn post. It’s in French, but the theme is about sharing risk between the customer and the contractor in software development projects. To sum it up, the author is advocating for the Agile way: fixed-price contracting puts risk on the shoulders of the contractor, while time-and-material gives responsibility to the customer. Some commenters showed surprised that we, software developers, are not able to precisely assess risks by ourselves. They compare softw

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