41554 blogs · [ { "id": "01a08744-01aa-70e8-b003-4e51653a7b44", "title": "On AI-assisted interviews", "url": "https://blog.balthazar-rouberol.com/on-ai-assisted-interviews", "published_at": "2026-07-29T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f429e0824f", "title": "A much better TTRPG sound mixer than mine", "url": "https://blog.balthazar-rouberol.com/a-much-better-ttrpg-sound-mixer-than-mine", "published_at": "2026-04-25T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f42a5c9630", "title": "Fighting Big Tech AI scrapers with sticks and rocks", "url": "https://blog.balthazar-rouberol.com/fighting-big-tech-ai-scrapers-with-sticks-and-rocks", "published_at": "2026-04-08T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f42ab82f16", "title": "I somehow wrote my own build system", "url": "https://blog.balthazar-rouberol.com/i-somehow-wrote-my-own-build-system", "published_at": "2026-03-21T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f42b5a7b3f", "title": "Pushing to multiple git remotes at once", "url": "https://blog.balthazar-rouberol.com/pushing-to-multiple-git-remotes-at-once", "published_at": "2026-03-19T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f42c344bf3", "title": "Creating yearly reminders from the macOS terminal", "url": "https://blog.balthazar-rouberol.com/creating-yearly-reminders-from-the-macos-terminal", "published_at": "2025-12-23T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f42ce5a2ac", "title": "A french character sheet for Pirate Borg", "url": "https://blog.balthazar-rouberol.com/a-french-character-sheet-for-pirate-borg", "published_at": "2025-12-19T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f42dc5a78c", "title": "Running an interactive Ypsilon 14 terminal", "url": "https://blog.balthazar-rouberol.com/running-an-interactive-ypsilon-14-terminal", "published_at": "2025-12-17T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f42e91cd32", "title": "Evaluating interdependant helm variables", "url": "https://blog.balthazar-rouberol.com/evaluating-interdependant-helm-variables", "published_at": "2025-12-15T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f42f81aaef", "title": "Visualizing a YAML value files overlay", "url": "https://blog.balthazar-rouberol.com/visualizing-a-yaml-value-files-overlay", "published_at": "2025-12-11T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f430693f06", "title": "Migrating my code from Github to a self-hosted Forgejo instance", "url": "https://blog.balthazar-rouberol.com/migrating-away-from-github", "published_at": "2025-11-29T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f431548abf", "title": "Curating and filtering RSS feeds", "url": "https://blog.balthazar-rouberol.com/curating-and-filtering-rss-feeds", "published_at": "2025-10-18T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f431fc7a06", "title": "My corner of the TTRPG universe", "url": "https://blog.balthazar-rouberol.com/my-corner-of-the-ttrpg-universe", "published_at": "2025-09-21T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f43214fe2c", "title": "My Far Realm house rules", "url": "https://blog.balthazar-rouberol.com/my-far-realm-house-rules", "published_at": "2025-09-20T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f4330fa653", "title": "A french character sheet for Mothership", "url": "https://blog.balthazar-rouberol.com/a-french-character-sheet-for-mothership-1e", "published_at": "2025-09-19T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f433feda2b", "title": "Blackholing tracking domains by running Pihole as a DHCP server", "url": "https://blog.balthazar-rouberol.com/blackholing-tracking-domains-by-running-pihole-as-a-dhcp-server", "published_at": "2025-08-23T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f434eec75c", "title": "On building your own tools", "url": "https://blog.balthazar-rouberol.com/build-your-own-tools", "published_at": "2025-04-29T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f435599b06", "title": "Detecting if a decorated function would be a bound method at runtime", "url": "https://blog.balthazar-rouberol.com/detecting-if-a-decorated-function-would-be-a-bound-method-at-runtime", "published_at": "2025-03-29T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f43643058f", "title": "The Mystery of the Silent Process", "url": "https://blog.balthazar-rouberol.com/the-mystery-of-the-silent-process", "published_at": "2025-03-27T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f43720ff83", "title": "Making a DIY book of terrains", "url": "https://blog.balthazar-rouberol.com/making-a-diy-book-of-terrains", "published_at": "2025-02-15T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f437dcf8dc", "title": "My dungeon master toolkit", "url": "https://blog.balthazar-rouberol.com/my-dungeon-master-toolkit", "published_at": "2024-04-27T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f43827478f", "title": "Just enough Makefile to be dangerous", "url": "https://blog.balthazar-rouberol.com/just-enough-makefile-to-be-dangerous", "published_at": "2023-08-29T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f438a90bf4", "title": "Pinning your SQLite version across environments", "url": "https://blog.balthazar-rouberol.com/pinning-your-sqlite-version-across-environments", "published_at": "2023-08-24T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f4391db7ae", "title": "How to profile a FastAPI asynchronous request", "url": "https://blog.balthazar-rouberol.com/how-to-profile-a-fastapi-asynchronous-request", "published_at": "2023-08-04T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f43a04b246", "title": "Preventing a pull request from being merged until it's safe", "url": "https://blog.balthazar-rouberol.com/preventing-a-pull-request-from-being-merged-until-its-safe", "published_at": "2023-07-24T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f43acc4aa0", "title": "Neapolitan pizza dough recipe", "url": "https://blog.balthazar-rouberol.com/neapolitan-pizza-dough-recipe", "published_at": "2023-06-08T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f43bc286f8", "title": "Merging multiple mp3 files into an audiobook with chapters", "url": "https://blog.balthazar-rouberol.com/merging-multiple-mp3-files-into-an-audiobook-with-chapters", "published_at": "2023-05-07T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f43c7e58c9", "title": "Generating pretty maps ready to be gift-wrapped", "url": "https://blog.balthazar-rouberol.com/generating-pretty-maps-ready-to-be-gift-wrapped", "published_at": "2023-05-05T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f43d3d17fb", "title": "Monitoring my solar panel power production", "url": "https://blog.balthazar-rouberol.com/monitoring-my-solar-panel-power-production", "published_at": "2023-05-02T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f43d78dfd1", "title": "Speeding up a 21h job to 8 minutes: a story of SQLAlchemy optimization", "url": "https://blog.balthazar-rouberol.com/speeding-up-a-21h-job-to-8-minutes-a-story-of-sqlalchemy-optimization", "published_at": "2023-01-07T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f43e084658", "title": "My DIY Dungeons and Dragons ambiance mixer", "url": "https://blog.balthazar-rouberol.com/my-diy-dungeons-and-dragons-ambiance-mixer", "published_at": "2022-09-23T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f43ef9f09e", "title": "Can't enough be enough?", "url": "https://blog.balthazar-rouberol.com/cant-enough-be-enough", "published_at": "2022-05-10T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f43f0e5a7a", "title": "Measuring the coverage of a rust program in Github Actions", "url": "https://blog.balthazar-rouberol.com/measuring-the-coverage-of-a-rust-program-in-github-actions", "published_at": "2022-04-25T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f43f420f50", "title": "Tools I'm thankful for", "url": "https://blog.balthazar-rouberol.com/tools-im-thankful-for", "published_at": "2022-02-21T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f43fe66304", "title": "Sending a webhook from Synology DSM to Discord", "url": "https://blog.balthazar-rouberol.com/sending-a-webhook-from-synology-dsm-to-discord", "published_at": "2022-01-16T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f4403eaaaa", "title": "River monitoring with Datadog", "url": "https://blog.balthazar-rouberol.com/river-monitoring-with-datadog", "published_at": "2021-11-01T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f4407aed2e", "title": "To the Underdark and back", "url": "https://blog.balthazar-rouberol.com/to-the-underdark-and-back", "published_at": "2021-10-20T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f440dc3510", "title": "Metaprocrastinating on writing a book by writing a text editor", "url": "https://blog.balthazar-rouberol.com/metaprocrastinating-on-writing-a-book-by-writing-a-text-editor", "published_at": "2021-09-03T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f44171c787", "title": "Cleaning up the Dungeondraft tag list", "url": "https://blog.balthazar-rouberol.com/cleaning-up-the-dungeondraft-tag-list", "published_at": "2021-08-30T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f4425f97a3", "title": "Running the Port Nyanzaru Dinosaur Race", "url": "https://blog.balthazar-rouberol.com/running-the-port-nyanzaru-dinosaur-race", "published_at": "2021-04-09T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f4430cca2e", "title": "Shell productivity tips and tricks", "url": "https://blog.balthazar-rouberol.com/shell-productivity-tips-and-tricks", "published_at": "2020-04-23T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f443355fef", "title": "Customizing your shell", "url": "https://blog.balthazar-rouberol.com/customizing-your-shell", "published_at": "2020-04-16T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f443a3f466", "title": "The shell's building blocks", "url": "https://blog.balthazar-rouberol.com/the-shells-building-blocks", "published_at": "2020-04-03T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f443f047d6", "title": "My pizza recipe", "url": "https://blog.balthazar-rouberol.com/my-pizza-recipe", "published_at": "2020-03-17T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f4445feb33", "title": "Text processing in the shell", "url": "https://blog.balthazar-rouberol.com/text-processing-in-the-shell", "published_at": "2020-03-13T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f444f16fb9", "title": "Discovering the terminal", "url": "https://blog.balthazar-rouberol.com/discovering-the-terminal", "published_at": "2020-03-04T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f44563cbbb", "title": "How to setup a personal wireguard VPN", "url": "https://blog.balthazar-rouberol.com/how-to-setup-a-personal-wireguard-vpn", "published_at": "2019-12-10T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f445c86a3b", "title": "My DIY proposal", "url": "https://blog.balthazar-rouberol.com/my-diy-proposal", "published_at": "2019-11-29T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f446960f06", "title": "On letting go", "url": "https://blog.balthazar-rouberol.com/on-letting-go", "published_at": "2019-11-10T23:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f44790a7a0", "title": "Managing my infra like it's 2019", "url": "https://blog.balthazar-rouberol.com/managing-my-infra-like-its-2019", "published_at": "2019-07-21T22:00:00+00:00" }, { "id": "01a08744-01ab-72ac-b5df-d2f4481e127d", "title": "My no-knead bread recipe", "url": "https://blog.balthazar-rouberol.com/my-no-knead-bread-recipe-english.html", "published_at": "2019-05-17T22:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810e9fadd75", "title": "Allocating unbounded resources to a Kubernetes pod", "url": "https://blog.balthazar-rouberol.com/allocating-unbounded-resources-to-a-kubernetes-pod", "published_at": "2018-09-28T22:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810eae17793", "title": "On meritocracy, identity and context", "url": "https://blog.balthazar-rouberol.com/on-meritocracy-identity-and-context", "published_at": "2018-09-20T22:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810ebb12ecf", "title": "Solution to Advent of Code \"Day 3: Spiral Memory\"", "url": "https://blog.balthazar-rouberol.com/solution-to-advent-of-code-day-3-spiral-memory", "published_at": "2017-12-30T23:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810ec3c65d1", "title": "On working from home while remaining sane", "url": "https://blog.balthazar-rouberol.com/on-working-from-home-while-remaining-sane", "published_at": "2017-10-28T22:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810ec409150", "title": "The story of the 20°C cronjob", "url": "https://blog.balthazar-rouberol.com/the-story-of-the-20degc-cronjob", "published_at": "2017-05-24T22:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810ecd3c4b6", "title": "Preparing the SRE interview", "url": "https://blog.balthazar-rouberol.com/preparing-the-sre-interview", "published_at": "2017-04-19T22:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810ed302207", "title": "Découverte de la command line Docker", "url": "https://blog.balthazar-rouberol.com/decouverte-de-la-command-line-docker", "published_at": "2016-10-12T22:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810edd79055", "title": "Celery best practices", "url": "https://blog.balthazar-rouberol.com/celery-best-practices", "published_at": "2015-12-28T23:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810ee39e9e1", "title": "Installing Guitar Pro 6 on Fedora 22+", "url": "https://blog.balthazar-rouberol.com/installing-guitar-pro-6-on-fedora-22", "published_at": "2015-12-05T23:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810eea314b6", "title": "Pain au levain, deuxième essai", "url": "https://blog.balthazar-rouberol.com/pain-au-levain-deuxieme-essai", "published_at": "2015-11-13T23:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810ef83572d", "title": "Pain au levain, premier essai", "url": "https://blog.balthazar-rouberol.com/pain-au-levain-premier-essai", "published_at": "2015-11-05T23:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810f038c6fc", "title": "My n-step plan to become a better programmer", "url": "https://blog.balthazar-rouberol.com/my-n-step-plan-to-become-a-better-programmer", "published_at": "2015-05-23T22:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810f09b2b5e", "title": "So long and thank you for all the (deep fried) fish!", "url": "https://blog.balthazar-rouberol.com/so-long-and-thank-you-for-all-the-deep-fried-fish", "published_at": "2015-01-23T23:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810f189252d", "title": "Jour J et pantalon moule fesses", "url": "https://blog.balthazar-rouberol.com/jour-j-et-pantalon-moule-fesses", "published_at": "2014-12-07T23:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810f18ad2f9", "title": "Julie", "url": "https://blog.balthazar-rouberol.com/julie", "published_at": "2014-11-29T23:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810f1bb2fb8", "title": "Rock, Roll et thé à la menthe", "url": "https://blog.balthazar-rouberol.com/rock-roll-et-the-a-la-menthe", "published_at": "2014-11-22T23:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810f1e46e57", "title": "Ovfbhf Cncn", "url": "https://blog.balthazar-rouberol.com/ovfbhf-cncn", "published_at": "2014-11-02T23:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810f2899858", "title": "Camembert et oignons confits", "url": "https://blog.balthazar-rouberol.com/camembert-et-oignons-confits", "published_at": "2014-10-31T23:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810f29fb80f", "title": "Pizzas et compte bancaire", "url": "https://blog.balthazar-rouberol.com/pizzas-et-compte-bancaire", "published_at": "2014-10-22T22:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810f3074ad4", "title": "Deep fried mars bars", "url": "https://blog.balthazar-rouberol.com/deep-fried-mars-bars", "published_at": "2014-10-21T22:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810f3187e91", "title": "Crawl a website with scrapy", "url": "https://blog.balthazar-rouberol.com/crawl-a-website-with-scrapy", "published_at": "2012-04-22T22:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810f38c6220", "title": "Create a webcam manager using pyGTK and Gstreamer", "url": "https://blog.balthazar-rouberol.com/create-a-webcam-manager-using-pygtk-and-gstreamer", "published_at": "2012-02-28T23:00:00+00:00" }, { "id": "01a08744-01ac-72c4-b31b-9810f40c4175", "title": "How to randomly generate a Monty Python parody", "url": "https://blog.balthazar-rouberol.com/how-to-randomly-generate-a-monty-python-parody", "published_at": "2011-11-15T23:00:00+00:00" } ] posts Claim your blog
Back to blog.balthazar-rouberol.com
Blog · corpus.blog/blogs/blog.balthazar-rouberol.com/posts

blog.balthazar-rouberol.com

blog.balthazar-rouberol.com

2026

2025

2024

2023

2022

2021

2020

2019

2018

2017

2016

2015

2014

2012

2011