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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 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.