#programming
- Fuck Typing LWP
https://justatheory.com/2010/05/fuck-typing-lwp
I’m working on a project that fetches various files from the Internet via LWP. I wanted to make sure that I was a polite user, such that my app would pay attention to Last-Modified/If-Modified-Since and ETag/If-None-Match headers. And in most contexts I also want to respect the robots.txt file on the hosts to which I’m sending requests. So I was very interested to read chromatic’s hack for this very issue. I happily implemented two classes for my app, MyApp::UA, which inherits from LWP::UserAgent::WithCache, and MyApp::UA::Robot, which inherits from MyApp::UA but changes LWP::UserAgent::WithCache to inherit from LWP::UARobot:
- How to randomly generate a Monty Python parody
https://blog.balthazar-rouberol.com/how-to-randomly-generate-a-monty-python-parody
- Discovering the terminal
https://blog.balthazar-rouberol.com/discovering-the-terminal
In which we help you take your first steps in the terminal
- Doomed To Reinvent
https://justatheory.com/2009/06/doomed-to-reinvent
There’s an old saying, “Whoever doesn’t understand X is doomed to reinvent it.”X can stand for any number of things. The other day, I was pointing out that such is the case for ORM developers. Take ActiveRecord, for example. As I demonstrated in a 2007 Presentation, because ActiveRecord doesn’t support simple things like aggregates or querying against functions or changing how objects are identified, you have to fall back on using its find_by_sql() method to actually run the SQL, or using fuck typing to force ActiveRecord to do what you want. There are only two ways to get around this: Abandon the ORM and just use SQL, or keep improving the ORM until it has, in effect, reinvented SQL. Which would you choose?
- My DIY proposal
https://blog.balthazar-rouberol.com/my-diy-proposal
Who said that geeks couldn't be creative and romantic?
- Hash trie — L. Pereira's blog
https://tia.mat.br/posts/2012/08/10/hash_trie.html
- Peep – Post by @girasquid
https://peep.zone/post/stZSdbwm
- On building your own tools
https://blog.balthazar-rouberol.com/build-your-own-tools
A love letter to the act of building your own tools, aimed at solving your own problems.
- Managing my infra like it's 2019
https://blog.balthazar-rouberol.com/managing-my-infra-like-its-2019
How I use modern tooling to manage my personal infrastructure
- Metaprocrastinating on writing a book by writing a text editor
https://blog.balthazar-rouberol.com/metaprocrastinating-on-writing-a-book-by-writing-a-text-editor
Why I've decided to procrastinate on finishing writing my book and write a text editor instead.
- Implementing TLS in Lwan — L. Pereira's blog
https://tia.mat.br/posts/2022/03/23/implementing-tls-in-lwan.html
- Evaluating interdependant helm variables
https://blog.balthazar-rouberol.com/evaluating-interdependant-helm-variables
I introduce an <code>evalValue</code> helm template that allows the definition of inter-dependent helm values in YAML files to take a bit of the pain and misery away from having to maintain charts.
- Pinning your SQLite version across environments
https://blog.balthazar-rouberol.com/pinning-your-sqlite-version-across-environments
A walkthrough of how to pin an sqlite version and feature set accross multiple environments, architectures and OSes.
- My n-step plan to become a better programmer
https://blog.balthazar-rouberol.com/my-n-step-plan-to-become-a-better-programmer
- Toying with a toy Garbage Collector — L. Pereira's blog
https://tia.mat.br/posts/2025/06/10/improving-nederlang-gc.html
- Integer to string conversion — L. Pereira's blog
https://tia.mat.br/posts/2014/06/23/integer_to_string_conversion.html
- Shell productivity tips and tricks
https://blog.balthazar-rouberol.com/shell-productivity-tips-and-tricks
An introduction to shell productivity features: autocompletion, keyboard shortcuts, history navigation and shell expansions.
- Customizing your shell
https://blog.balthazar-rouberol.com/customizing-your-shell
A deep dive into how to customize your terminal and shell, in order to make it yours and increase productivity.
- Hybrid C/Pascal Strings — L. Pereira's blog
https://tia.mat.br/posts/2014/11/02/hybrid_c_pascal_strings.html
- include_next and portability — L. Pereira's blog
https://tia.mat.br/posts/2018/06/28/include_next_and_portability.html
- Partially Applied Functions in C — L. Pereira's blog
https://tia.mat.br/posts/2013/07/20/partial_functions_in_c.html
- How to setup a personal wireguard VPN
https://blog.balthazar-rouberol.com/how-to-setup-a-personal-wireguard-vpn
How to setup a wireguard VPN to stay safe when traveling
- Bootstrapping a Forth for Art — L. Pereira's blog
https://tia.mat.br/posts/2025/08/30/forth-haiku.html
- Using MAP_FIXED_NOREPLACE for JITs — L. Pereira's blog
https://tia.mat.br/posts/2022/05/23/using-map-fixed-noreplace-in-jits.html
- Blurhash-like without JS — L. Pereira's blog
https://tia.mat.br/posts/2024/09/18/blurhash-like-without-js.html
- On meritocracy, identity and context
https://blog.balthazar-rouberol.com/on-meritocracy-identity-and-context
- Huffman decoder for HPACK — L. Pereira's blog
https://tia.mat.br/posts/2022/03/27/huffman-decoder-for-hpack.html
- Speeding up a 21h job to 8 minutes: a story of SQLAlchemy optimization
https://blog.balthazar-rouberol.com/speeding-up-a-21h-job-to-8-minutes-a-story-of-sqlalchemy-optimization
In this article published on the Alan tech blog, we explain how my team has reduced the runtime of our longest nightly job from 21h to about 8 minutes, by using simple profiling and SQLAlchemy optimizations.
- Life of a HTTP request, as seen by my toy web server — L. Pereira's blog
https://tia.mat.br/posts/2014/10/06/life_of_a_http_request.html
- Measuring the coverage of a rust program in Github Actions
https://blog.balthazar-rouberol.com/measuring-the-coverage-of-a-rust-program-in-github-actions
In this article, I will go through how I set up code coverage measurement for `bo`, my text editor written in Rust, and publicly hosted the coverage report on S3.
- Crawl a website with scrapy
https://blog.balthazar-rouberol.com/crawl-a-website-with-scrapy
- Create a webcam manager using pyGTK and Gstreamer
https://blog.balthazar-rouberol.com/create-a-webcam-manager-using-pygtk-and-gstreamer
- Implementing sequences in lwan template engine — L. Pereira's blog
https://tia.mat.br/posts/2013/09/26/implementing_sequences_in_lwan_template_engine.html
- Asynchronous I/O in C with Coroutines — L. Pereira's blog
https://tia.mat.br/posts/2012/09/29/asynchronous_i_o_in_c_with_coroutines.html
- On working from home while remaining sane
https://blog.balthazar-rouberol.com/on-working-from-home-while-remaining-sane
- My First C: A GTIN Data Type for PostgreSQL
https://justatheory.com/2006/09/postgres-gtin-0.01
- Migrating my code from Github to a self-hosted Forgejo instance
https://blog.balthazar-rouberol.com/migrating-away-from-github
Now that Github is fully enshittified and focused on selling access to AI models built on your own code, I've decided to move my personal projects to a self-hosted Forgejo instance.
- Macro to lazily initialize globals — L. Pereira's blog
https://tia.mat.br/posts/2025/02/23/lazy-init-macros.html
- Monitoring my solar panel power production
https://blog.balthazar-rouberol.com/monitoring-my-solar-panel-power-production
A walkthrough of how I managed to pull metrics from the smart plug my solar panels were connected to, and send them to Datadog.
- Context aware html/template | dominik.suess.wtf
https://dominik.suess.wtf/posts/2025/05/01/context-aware-go-template
Reduce complexity in your Go templates with this one weird trick
- Vectored I/O with mmap() to serve files — L. Pereira's blog
https://tia.mat.br/posts/2012/10/14/vectored_i_o_with_mmap___to_serve_files.html
- More on string switch in C — L. Pereira's blog
https://tia.mat.br/posts/2018/02/01/more_on_string_switch_in_c.html
- Using emojis to identify threads in log messages — L. Pereira's blog
https://tia.mat.br/posts/2023/12/18/emoji-thread-id.html
- https://robida.net/entries/2026/02/09/like-1
- Preparing the SRE interview
https://blog.balthazar-rouberol.com/preparing-the-sre-interview
Resources to prepare an SRE interview
- Just enough Makefile to be dangerous
https://blog.balthazar-rouberol.com/just-enough-makefile-to-be-dangerous
In this article, I share best practices I've embraced over the years to make working with `make` a more satisfying experience.
- Ways of Writing Code
https://nikolas.ws/ways-of-writing-code
- Allocating unbounded resources to a Kubernetes pod
https://blog.balthazar-rouberol.com/allocating-unbounded-resources-to-a-kubernetes-pod
- Tools I'm thankful for
https://blog.balthazar-rouberol.com/tools-im-thankful-for
A description of the tools which helped me grow as an engineer and define my core engineering values.
- Optimizing a JSON serializer (part 1) — L. Pereira's blog
https://tia.mat.br/posts/2020/02/10/optimizing_a_json_serializer.html
- String switch in C — L. Pereira's blog
https://tia.mat.br/posts/2012/08/09/string_switch_in_c.html
- The shell's building blocks
https://blog.balthazar-rouberol.com/the-shells-building-blocks
Something I still find striking after years of using a shell almost daily is how simple yet powerful its building blocks are. Chapter 1 covered commands, I/O streams and pipes. This chapter will cover environment variables, aliases and functions.
- Converting GW-BASIC to the Z80 — L. Pereira's blog
https://tia.mat.br/posts/2020/06/21/converting-gwbasic-to-z80.html
- How async/await works in Lwan — L. Pereira's blog
https://tia.mat.br/posts/2024/02/29/async-await-in-lwan.html
- Blackholing tracking domains by running Pihole as a DHCP server
https://blog.balthazar-rouberol.com/blackholing-tracking-domains-by-running-pihole-as-a-dhcp-server
My new ISP provided router does not allow me to change the advertised DNS server IP. By running <a href=https://pi-hole.net>pihole</a> with a DHCP server, I can get around this limitation to ensure that tracking domains are blackholed for everyone at home.
- Teacher, it's too difficult | BobbyHiltz.com
https://bobbyhiltz.com/posts/2025/03/too-hard
How to check readability of articles for use in a classroom setting with Python, and the importance of adding tools to your teaching toolkit
- Celery best practices
https://blog.balthazar-rouberol.com/celery-best-practices
My set of best practices for writing Celery asynchronous tasks
- Self-testing C programs on startup — L. Pereira's blog
https://tia.mat.br/posts/2023/12/11/self-test.html
- Generating pretty maps ready to be gift-wrapped
https://blog.balthazar-rouberol.com/generating-pretty-maps-ready-to-be-gift-wrapped
Quick walkthrough of my [`prettymaps`](https://git.balthazar-rouberol.com/brouberol/prettymaps) fork, for artistic map generation tailored for printing
- Fuck Typing
https://justatheory.com/2009/05/fuck-typing
chromatic’s post on Perl Roles reminded me that I’ve wanted for some time to blog about another kind of composition. I call it “fuck typing.” It’s kind of like duck typing, only not really. I would explain, but I think that my good friend, Mr. Vinnie Goombatz, will do a much better job. Although if you’re squeamish or easily offended, you might want to skip it.
- Text processing in the shell
https://blog.balthazar-rouberol.com/text-processing-in-the-shell
A quick overview of the most common text processing terminal tools and why they should be part of your day-to-day toolbox.
- Macro to loop over executable sections — L. Pereira's blog
https://tia.mat.br/posts/2025/01/08/foreach-section-macro.html
- The story of the 20°C cronjob
https://blog.balthazar-rouberol.com/the-story-of-the-20degc-cronjob
- How to profile a FastAPI asynchronous request
https://blog.balthazar-rouberol.com/how-to-profile-a-fastapi-asynchronous-request
A short walkthrough of how to profile an HTTP request through an asynchronous FastAPI API handler
- Initializing a heap-allocated structure in C — L. Pereira's blog
https://tia.mat.br/posts/2015/05/01/initializing_a_heap_allocated_structure_in_c.html
- https://blog.balthazar-rouberol.com/solution-to-advent-of-code-day-3-spiral-memory
- Sending a webhook from Synology DSM to Discord
https://blog.balthazar-rouberol.com/sending-a-webhook-from-synology-dsm-to-discord
Rapid walkthrough of how to send push notifications from your Synology NAS to Discord via webhooks.
- Detecting if a decorated function would be a bound method at runtime
https://blog.balthazar-rouberol.com/detecting-if-a-decorated-function-would-be-a-bound-method-at-runtime
TIL how to dynamically detect if a decorated function would be a a bound method when called.
- Preventing a pull request from being merged until it's safe
https://blog.balthazar-rouberol.com/preventing-a-pull-request-from-being-merged-until-its-safe
I'll demonstrate a simple technique relying on Github Actions and pull request labels to block a pull request from being merged, until deemed safe to do so.
- Visualizing a YAML value files overlay
https://blog.balthazar-rouberol.com/visualizing-a-yaml-value-files-overlay
In this article, I introduce <code>yaml-overlay</code>, a small CLI tool that overlays the argument YAML values files from lowest to highest precedence, associates a color for each file, and colorizes each value in the resulting YAML overlay according to its provenance. This can be very useful when dealing with Kubernetes charts deployments with many different value files (environment values, default values, private values, instance values, etc) to track down where a particular value is defined.