Keeping up to date with third party dependencies

At work the software we develop and ship comes with a lot of third party dependencies, so we must keep track of their licenses. The process was very manual and was improved by automating it so that it could also scale with the company growth.

Reducing string concatenations from ngTemplates

A new Chrome update suddenly broke our application. It improved string parsing, but at the same time makes extensive use of memory for a lot of string concatenations in a single expression. Such concatenation was used eavily by grunt-angular-templates used at work.

Detecting conflicting dependencies with Gradle

At work, we use a complex Gradle build shared accross multiple projects. This complexity also brings some redundancies in the way dependencies are computed between different projects. We recently reworked our dependency system to remove those redundancies.

Groovy and Java Strings

I am totally a newbie when it comes to Groovy, and when using it a bit of for our CI (Jenkins), I stumbled upon the non-intuitive difference between a Groovy and a Java String.

Git ghost commits

A commit was reverted at work. The commit was present in the repository history, but there was no trace of it in the Github file history log.

Learning the recorder

I decided on a whim to learn music. Having zero knowledge and forgotten everything from school, I had to start from scratch. I wanted an instrument that seemed easy, not expensive and small. If I abandoned after 2 days, it wouldn’t matter. I set my eyes on the recorder.

From Java 8 to Java 11+

For compatibility reason, the product shipped at work is still compiled with Java 8, but can be run with both Java 8 and Java 11. It was now time to move to a new Java version: compile with Java 11 and support running with Java 11 and Java 17.

From JUnit 4 to JUnit 5

Our unit test suite at work was started almost 10 years ago, and is comprised of thousands of tests. A few months ago, there was an initiative to migrate from JUnit 4 to JUnit 5.

From Ant to Gradle

The build system at work was comprised of an ant build for Java with various node and npm scripts, as well as lots of bash to bundle our software. It did the job, but showed its age due to lack of parallelization and good system dependency. It was time to migrate to something more robust and modern.

From R to Python

A few years ago, I was asked to help on a R codebase. However the performance was really slow and the program really hard to maintain. I decided to rewrite it in Python.

Teenager books

For a 14 years old teenager, it is sometimes hard to find books that suit her own taste. Fortunately, a great colleague gave me a great list (in french) that is published here as a reminder.

Backpack craziness

My old backpack was starting to wear off in different places, so I thought it was time to get a new one.

Fixing a faulty git merge

I came upon a situation where a target release branch was unintentionally merged into a base release branch, and several commits were added afterwards. I describe how it was fixed and the git history rewritten cleanly without the faulty commit.

Adding a source dependency to a Gradle build

Gradle allows adding source dependencies to a build since 4.10. Even though the process is quite simple, I stumbled upon a small problem when using them.

Adding an environment variable to a Gradle build

I had to add an environment variable to a Gradle build at work, but the Gradle task I used does not support setting environment variables.
TLDR: add it to the gradlew script.

Visiting the Loire Valley without a car

We decided to visit the Loire Valley, but as a 100% parisian family, we do not have a car and no driving license, and we are also not very comfortable with bikes. I here describe the schedule we had for the small trip accross Loire Valley, as organizing everything was a bit of a challenge.

Goodbye to my cat

Thoughts on my cat who just left us after almost 18 years.

On Pull Request merge strategies

I sometimes run into discussions with colleagues on how to merge a Pull Request (PR). Here is my take on it and why I usually favor squash merges.

Killing child processes when the parent fail

At work, we often need to run computation heavy workloads which involve using multi processes to distribute computations on different cores of a single machine (and also a cluster). When the parent process sometimes dies, its children are kept alive running and we want to ensure they also exit as fast as possible to prevent using too much resources.

Comments in a Dockerfile

This is a note to my future self after spending way too much time finding why my Dockerfile did not work: Dockerfile comments start at the beginning of a line.

Python 3.6 and Matplotlib 2 on macOS Big Sur

After upgrading to macOS Big Sur (11.2), I had to use Python 3.6 and Matplotlib 2.2.5. It turned out to take more time than anticipated. I use Pyenv to manage multiple Python versions and Homebrew as a general package manager.

Python, unicode and exceptions

Code compatibility between Python 2 and Python 3 is tedious. I have recently stumbled upon some unexpected behavior when using unicode (Python 2) and str (Python 3) for string formatting and exceptions.

Handling different Git configurations

Having different Git repositories with different identities, I used to configure Git for every repository I checked out. I recently stumbled upon the Git includeIf which allows loading an overriding configuration file depending on the repository location.

Accessing a Git repository behind an http gateway

A project I worked on had a Git repository behind a Citrix NetscalerGateway and only accessible over http. It was at first impossible to clone the repository, but Git has an option to bypass that.

Adding a local jar to Maven

A supplier has given a couple of jars to add to our java project which uses Spring Boot and Maven. Those files are not published in any Maven repository and we do not have one at work yet. There are several different ways to add them.

Eyewear craziness

I recently got a prescription for full time glasses and chose rimless glasses. After a few months of wearing them, I got tired of the “mostly” invisible look, so I started looking for something that would best fit my tastes.

Using Gitlab Nginx as SSL Reverse Proxy

Gitlab bundles nginx as a web server. It can also be used as a reverse proxy to host other services while listening on the same port and make use of other SSL certificates.

Upgrading Apache 2.2 to Apache 2.4 on Debian or Ubuntu

After answering several times to the question “Why do I have a 404 error on all my services after upgrading apache?” at work, I just decided to write about it.

Changing MTU size to connect to a service behind a VPN

Recently at work, we had a problem when connecting to a service behind a VPN, itself being behind a firewall. Packets would get truncated between the service and the computer we used. It turned out to be a MTU problem not set to the correct size.

How to recycle?

I am launching https://recycleme.yuen.fr (in french) to try recycling packages based on product bar codes. However the database is small!

Getting outside of China

I have been to China a lot of times, but I have never felt the Great Firewall presence as much as now. I describe below my experience with accessing external services from China.

Cython cheatsheet

Cython is a great tool to improve speed on computation heavy parts of a Python program, but the documentation is somewhat not very clear on where to start.
The following sums up different steps to more easily dive into cython.

Very old news

Very first web update… at last.
Right now, only the About section is available, with various information along with resumes.

Much to come later?