On Google Mentoring
A few years ago, I had the opportunity to attend a few sessions of Google Mentoring. I took notes of our meetings that I unearthed recently.
A few years ago, I had the opportunity to attend a few sessions of Google Mentoring. I took notes of our meetings that I unearthed recently.
My daughter suddenly wanted to play Fallout 2 (do not ask me why). I bought the game a long time ago on GOG, so I downloaded the game that was supposed to run with Wine… and it did not start on my MacBook Air M1.
I had the opportunity to attend the Week-end musical de Pully in Switzerland with a friend to watch several concerts. I was also able to attend a recorder workshop led by recorder player Lucie Horsch. I took some notes on how to improve my recorder technique.
I started learning the recorder (and music!) just about one year ago. When I started, I did not expect to still be at it now.
After upgrading to Java 17, the third-party dependencies that only run on Java 17 could finally be upgraded: Jetty and Spring. The upgrade was much more complex than upgrading the Java version.
After moving from Java 8 to Java 11, it was now time this year to move to Java 17 and 21. The transition was much easier than last year.
My blog and other content was hosted on Online.net. Instead of relying too much on Google, I also had all my emails synced to a secondary mail provider as a backup. I recently changed hosting providers due to a pricing change and a significant increase that no longer matched my needs.
The piece of software at work is comprised of different tech stacks that compose different applications. Each part has its own unit tests. As we have thousands of tests, they were taking a long time to run. It was time to optimize them to improve the feedback loop.
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’s growth.
A new Chrome update suddenly broke our application. It improved string parsing, but at the same time significantly increased memory usage due to excessive string concatenations in a single expression. This pattern was heavily used by grunt-angular-templates in our codebase at work.
At work, we use a complex Gradle build shared across multiple projects. This complexity also introduces some redundancies in how dependencies are computed between different projects. We recently reworked our dependency system to remove those redundancies.
I am completely new to Groovy, and while using it a bit for our CI (Jenkins), I stumbled upon the non-intuitive difference between a Groovy and a Java String.
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.
I decided on a whim to learn music. Having zero knowledge and having forgotten everything from school, I had to start from scratch. I wanted an instrument that seemed easy, inexpensive, and small. If I gave up after two days, it would not matter. I set my eyes on the recorder.
For compatibility reasons, 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.
My old backpack was starting to wear off in different places, so I thought it was time to get a new one.
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 describe here the schedule we had for the small trip across the Loire Valley, as organizing everything was a bit of a challenge.
Thoughts on my cat who just left us after almost 18 years.
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.
At work, we often need to run computation-heavy workloads which involve using multiple processes to distribute computations on different cores of a single machine (and also a cluster). When the parent process sometimes dies, its children remain alive and running. We want to ensure they also exit as fast as possible to prevent using too many resources.
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.
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 the question “Why do I get a 404 error on all my services after upgrading Apache?” at work, I 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 an MTU problem not set to the correct size.
I am launching https://recycleme.yuen.fr (in French) to try recycling packages based on product bar codes. However, the database is small!
I have been to China many 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.
Very first web update… at last.
Right now, only the About section is available, with various information along with résumés.
Much more to come later?