Listen to this post: I have not been using sayoutloud , the Firefox addon from my TTS setup , as much as I expected to when I built it. It requires too many clicks, is too hidden in right-click menus. Also, browser add-ons are not getting much love from browser vendors these days, and I would rather avoid them when possible.
Listen to this post: During a stay at a relative’s house, we noticed Toddler’s interest in an old-school radio with volume and tuning dials. It was easy to operate and ludique : the sound changes when you turn the things! Unfortunately, radio stations are not super kid-friendly (lots of ads trying to sell lawyer services, talk shows, and very few Disney songs). So I decided to build my…
Listen to this post: Turning this blog into a podcast was fun… But long form articles from other people are actually the ones I want to listen to on my commute.
Listen to this post: Each post in this hugo powered blog already has its own audio version . It only made sense to turn it into a podcast! I added the following template to the blog’s hugo blueprint: Gist view gist {{ $style := resources .Get "xsl/style.xsl" | resources .ExecuteAsTemplate "podcast-style.xsl" ( dict "Site" .Site "IsPodcast" true ) }} {{ printf "<?xml-stylesheet…
Listen to this post: We speak English , Portuguese and French at home, and learning the alphabet can be tricky when it gets to letter examples: “G as in Grapefruit ”, but that’s Pamplemousse in French and Toranja in Portuguese, so the correspondence doesn’t work in other languages and can lead to confusion.
Listen to this post: Earlier this week, my yearly Claude Pro subscription auto-renewed. This seems to have triggered a “service improvement”, making me subject to weekly limits . I had heard of these, but had until then only been subject to the 5h session limits.
Listen to this post: The gym I go to requires you to scan a small key tag with a barcode, to check in. I don’t like bulky keychains, so I keep taking it off and tend to forget it when I need it.
Listen to this post: I have a Dreame L40 Ultra to vacuum and mop around my home. The Dreame app requires the robot to have internet access to receive commands, send status information, or modify scheduling. Not being a fan of audio-video recording devices roaming freely in my home, I keep it offline. Unfortunately, this means no Home Assistant integration possibilities, and painful schedule…
Listen to this post: My two cats recently acquired a Litter-Robot 4 , and are now using it mostly full time after a few weeks of transition. Apart from promising to save precious manual scooping energy, shielding from the smell of the cats expertly timing their bowel movements with dinner time, the Litter-Robot 4 boasts a “SmartScale®” .
Listen to this post: For the past few years, I have been keeping track of most of the books I read. It gives me some feeling of accomplishment and progress, adding a notch to the reading log, but also helps me keep track of what I’ve read, and where I am in the backlog of prolific authors or book series .
Listen to this post: Téléfonefix is a kid-friendly telephone system allowing kids to safely call relatives, locally and abroad. The main features I sought when building téléfonefix were:
Listen to this post: Using the same jira-buddy from earlier and combining it with claude code, we can stop writing commits entirely and let the LLMs do it. This gist suggests two bash functions to add to your bashrc to never write commits again!
Listen to this post: Navigating Jira’s UI to find your Task/Epic/Bug is a pain. Even copying the ticket ID is its own quest. You end up switching tabs, losing focus, and forgetting what you were doing. To skip all that, I use a jira-buddy and a Vim function to hit the Jira API, look up the ticket, and insert the ID directly into my document. I use it to insert the ticket ID for the current work in…
Listen to this post: Now that we know how to listen to other people’s content , let’s make sure other people can listen to our content! This blog is generated using hugo and uses a theme based on catafalque . Leveraging my piper api wrapper , I created a hugo-shortcodes-tts . The shortcode sends the hugo post’s content to the TTS API, saves it as a static file, and embeds a…
Listen to this post: For a while, I had been using a simple keyboard shortcut for xclip -o | espeak-ng as my TextToSpeech setup. I mostly use it in-browser, highlighting text and using the shortcut to speak the highlighted text. I have been meaning to update it, get more modern voices and make it easier to setup on heterogenous environments (fancy way to say I struggle to have reliable hotkey…
Listen to this post: After stumbling upon this post I decided to give XSLT a go. A few examples Making my blog’s RSS feed look like my front page: This site’s RSS feed visually mimics its front page . Prettifying the output of my feed generator .
Listen to this post: Some of my CI/CD deployments need to be triggered when a new docker image is pushed with a specific tag for a specific architecture, to stay up to date. A lot of these image updates can be dealt with dependabot/renovate, creating a PR with the new release, or with tools like watchtower .
Listen to this post: Problem I live with two cats: cat 1 , who has food anxiety and can meow for hours if his eating schedule is disrupted; cat 2 , who eats faster than his own shadow. To fix cat 1 ’s food anxiety, we purchased two food dispensers online (each has a different branding but they are exactly the same product). These “robots” are simple, non-connected devices.…