RSSAmplifier

Blog

Camille Hodoul RSS Feed

Links to things I do.

camillehdl.devRSS feed ↗43 posts

Latest posts

Software and hardware I use

Productivity Alfred — better Spotlight Fantastical — calendar Hey — email client Clockify — time tracking Gmail — work email client…

An Ansible lab with Podman on macos

By “Ansible laboratory”, I mean a collection of virtual servers on which you can test your ansible playbooks. Containers are a somewhat good…

Troubleshoot homebrew MySQL / MariaDB on Apple Silicon

Symptoms You are running homebrew MariaDB or MySQL with Homebrew on Apple Silicon. Your MySQL client is throwing “SQLSTATE[HY000] [2002] No…

Plesk: same UID, different user

The problem When a new (s)FTP user is added to a subscription in Plesk, he is given the same UID as the original system user created for…

Use Brotli compression with Nginx on Debian

Brotli is a general-purpose compression algorithm, arguably better than gzip for the web. It is supported on all major evergreen browsers…

Links to my stuff

Github Tech blog in french Flickr Bluesky Instagram YouTube Hobby blog

Workaround for PHP max_execution_time reached too early on Apple Silicon

There is a bug in PHP that causes the to be reached too early (sometimes instantly) on Apple Silicon. This affects both and on macOS 1…

How to fix podman machine stuck on "Currently starting"

If (or Podman Desktop) shows your machine “Currently starting” but it never actually starts, this might help you. Find the file (in my…

How to uninstall Podman Desktop on macos

After an update, my podman machine stopped working and I didn’t manage to fix it without a full reinstall. As far as I know, there is no…

Watch file-system usage in real time on macOS

The program displays pathnames accessed by processes in real time. It’s an extremely useful debugging tool. It has options to select for…

Illustrate your comments

I remember the day structural sharing in data structures “clicked” for me. It was illustrated by a drawing of boxes and arrows. An image is…

git stash

When my work is interrupted, helps set my work aside safely without having to create an actual commit. Lets say I am on branch and have…

Reading "Extreme Programming Explained" by Kent Beck, 2nd edition, 2005

Kent Beck attempts the difficult task of transferring tacit knowledge about software engineering through text. Drawing mostly from his own…

Cooler Master MK730 keyboard setup on macOS

I recently purchased this keyboard to replace my TKL because I sometimes need F* keys. The keyboard itself is pretty well built, but I had…

Senior / Lead Full Stack Developer, JavaScript & PHP

Français - camilleh@hey.com Languages & Technologies Work experiences Lead the complete rewrite of Arkothèque CMS to successfull completion…

Code-unrelated advice for development efficiency

What follows are a few techniques and tools that helped me release software faster in the small team I am a part of (more on this at the end…

Senior / Lead Développeur Full Stack, JavaScript & PHP

English - pdf - camilleh@hey.com Langages & Technologies Expériences professionnelles Mené le projet de refonte Arkothèque CMS jusqu’à sa…

Update to the latest version of many npm dependencies at once

I couldn’t find a command to update a subset of my dependencies to their latest version based on a name pattern, so here’s a one-liner to…

Optimize the outliers first, the hot path later

Performance optimization usually focuses on the “hot path”: code that gets executed the most often. I will argue that it’s sometimes worth…

Incident Postmortem

The word ”postmortem” can mean both the process and its artifact: the document in which you describe the incident, its resolution and what…

Visualizing my Bitbucket data in Rstudio

I’ve been discovering R and Rstudio recently, and I was looking for a dataset to play with. Let’s build a github-like activity mozaic from…

Pre-commit, pre-push or pre-merge ?

On my codebases, I may want to run: a linter, static analysis, tests. While I can run them manually, I find it easier for everyone involved…

Tactical PHP : Collecting Parameter

Why are class member variables (aka properties or instance variables) different from temporary variables? Ideally, a property is a…

Tactical PHP : Pluggable Behavior

In OOP, the usual answer to a need of variable behavior within a class are subclasses : you create a subclass and overload the (hopefully…

Tactical PHP : Execute around method

Let’s say we want to model a file with a class: It must be opened before reading, writing, or doing anything to it. It must be closed…

Tactical PHP

“Tactical PHP” is a series in which I introduce a small-scale object-oriented programming pattern adapted to PHP, relevant use cases and the…

Reading "Data & Reality" by William Kent

There is an important difference between truth and utility. I recently finished the 3rd edition of this book, with commentary from Steve…

Regular Expressions - Theory and Tools

A regex, regexp or regular expression is a notation used to describe a language : letters and words governed by a set of rules. For instance…

Ship modern JavaScript with Rollup

Using ES2017 (and newer) syntax in our codebase is one thing, sending it to our users is another. Chances are, if we have to support IE1…

Learning Resources

Updated: 2021-01-27 A (hopefuly up-to-date) compilation of places I go to to keep in touch with the industry. Books Computer Science…

Flow types for Immutable.js Records

What is a Record? An instance is an object with a defined set of keys and default values. They are instanciated by factories, which are…

Symfony Maintenance Mode

When you perform tasks on your application that could result in a broken layout or even errors displayed on the front-end, you want some…

Using PHP arrow functions

PHP 7.4 was released with support for arrow functions, as defined in this RFC. To paraphrase it, the goal is to provide a concise syntax for…

Compose Elastica queries in PHP

Elastica is an Elasticsearch client library for PHP. Among other things, it handles transport and provides a class-based abstraction over…

Inline svg to prevent reflow when lazy-loading images

The problem Lazy-loading generally means fetching a resource only if and when it’s needed, in order to improve (at least perceived…

Bitbucket pipeline for PHP, MySQL & Elasticsearch

If your application has dependencies that are not covered by Bitbucket Pipelines built-in services, or these dependencies are more complex…

UTF-8 csv fix for Excel

Using utf-8 for your CSV files sounds obvious and works well in most software processing them. Most software except Micrososft’s Excel…

cuisine-ead

cuisine-ead is a tool for batch editing xml-ead files in-browser. (At the moment, it is available in french only.) The problem EAD is a…

Initiative Rocks!

Initiative Rocks! is a simple combat tracker for D&D. As I looked for an excuse to play with tech I didn’t have the chance to work with yet…

Rollup-based development environment

This 3-parts series I’ve written on medium describes how I setup a JavaScript development environment based on Rollup. The code explained in…

Using ES modules w/ dynamic imports, with a fallback

Using ES modules with dynamic imports can still be a mine field due to somewhat ambiguous semantics. In this medium post, I explain a way…

Convert KML Placemarks to SVG Polygons

Being easily confused by basic geometry, I tend to stick to 2D whevener possible. Unfortunately, (in France at least) publicly available…

animatePaper.js

An animation library for paper.js. examples and API documentation demo repo npm Update: As a result of me not using it professionnally, I…