Skip to content

Back to the catalog

aitorres.com
jsonEnglish

andrés ignacio torres

aitorres.com · English

A software engineer rambling about code, literature and everything in between.

json

Open the feed

https://aitorres.com/feed/feed.json

Last post
Dec 16, 2025
Posts in 24 h · 7 days · 30 days
0 · 0 · 0
Our last check
Answering
Served from
United States
Site title
home
Text score
4,581
Format
json

Posts

What our queue read from this feed. Open one to read it here, or go to the site that published it.

  1. Connect Ozone to your PDS
    Dec 16, 2025 · original
    If you are self-hosting both a PDS and an Ozone instance , you will want to set up these environment variables on your PDS so that your PDS and Ozone can correctly talk to each other, in particular so Ozone can send email notifications via your PDS SMTP settings, as well as act as its "moderation service". # on your pds.env or your PDS container environment PDS_MOD_SERVICE_DID = "your Ozone's service account DID" PDS_MOD_SERVICE_URL = "URL to your Ozone deployment" # note that even if you have PDS_EMAIL_SMTP_URL and # PDS_EMAIL_FROM_ADDRESS set, these will not be used # by Ozone unless you also set these two # (you can reuse the same values): PDS_MODERATION_EMAIL_SMTP_URL = "SMTP server to send emails from" PDS_MODERATION_EMAIL_ADDRESS = "email address to send moderation emails from" Thanks to @baileytownsend.dev for helping troubleshoot and figure this out, and to @thisismissem.social f
  2. On Kubernetes volumes
    Nov 27, 2025 · original
    This week I had to recreate a Kubernetes cluster to mitigate an incident on a side project. waking up to find the whole nodepool unexplicably down! oh no! — andrés ignacio torres ( @andresitorresm.com ) November 24, 2025 at 8:17 AM As I'm still learning my way through Kubernetes concepts, I thought it'd be useful (to myself!) to write a quick note on what I've learned about volumes in Kubernetes and how they relate to each other. Persistent Volumes Claims (PVCs) # Essentially, this is a request for storage. You request a given amount of storage, and a storage class for it, and Kubernetes will manage that for you so you don't have to provision the disk yourself (at least in a managed Kubernetes environment). As long as the persistent volume claim exists, the storage volume will be kept around (persistent), even if no pod is using it, or if the pod using it is deleted. Check your cluster's
  3. I went to FediCon 2025!
    Sep 1, 2025 · original
    Welcome speech at FediCon 2025. What if the Fediverse met... in real life? Last month, I had the pleasure of attending FediCon 2025 , a local conference for "decentralized social networks and the social web", held here in Vancouver, Canada. I learned about FediCon a while ago through my Mastodon feed, and I signed up for it right away (I didn't have to think much about it, given that the conference chose a venue just a few minutes from home!). Even though I've gravitated mostly towards Bluesky in recent months, my journey through decentralized and federated social networks started with Mastodon and ActivityPub, so it's got a soft spot in my heart. Johannes Ernst on his talk "From Millions To Billions: a Plausible Narrative for How to Grow the Open Social Web". And what a great experience it was! I got to learn from some amazing speakers and prominent personalities in the Fediverse space,
  4. Small spaces
    Jul 29, 2025 · original
    From a short trip to Port Moody, B.C. (2023) A couple months ago, I went to a poetry workshop offered for migrants by Vancouver Writers Fest, led by Evelyn Lau. We read, we laughed, we talked, we cried, but most importantly, within those four hours we created a bond, built a community and met others who, for one reason or another, shared at least two threads in common with me: being a writer and being a migrant. Since last year, I've attended multiple creative writing workshops, but this one hit different. For the first time, I've found myself meeting some of the participants again a few days later, at another event. Then again, and again. And little by little, they have helped me cultivate a small space of belonging in a city that doesn't belong to me, and to which I don't belong either, not entirely. Between verses and books and laughter and tears (and fingers snapping), I have found a
  5. Getting OVH Public Cloud multi-region connectivity to work
    Jul 14, 2025 · original
    I've been working on a very cool passion project recently that involves setting up cloud infrastructure on OVH Public Cloud for data sovereignty. As part of the infrastructure design, I needed to set up one resource in a given region and another resource in a different region, and allow them to communicate with each other over private IPs. This is a common use case for cloud networking and I've had to do this many times before on other cloud providers (Azure, AWS, GCP...), but my intuition and previous experience did not help me much when I tried to replicate this on OVH Public Cloud. i suspect dns is at fault. it’s always dns. — andrés ignacio torres ( @andresitorresm.com ) July 4, 2025 at 12:05 AM Naively, after skimming OVH's documentation, my first attempt looked something like this (on Terraform): # One private network resource "ovh_cloud_project_network_private" "network" { service
  6. Self-hosting Bluesky's Ozone alongside other services
    May 19, 2025 · original
    Shoutout to Casey Primozic ( @ameo.dev ) for the wonderful and detailed PDS-alongside-other-services self-hosting guide that inspired this post! It's alive! I've been tinkering with Bluesky for a few months now through several projects, and naturally I've been drawn towards self-hosting (some of) its pieces, given Bluesky's modular and open-source nature. My first step was to self-host a Personal Data Server (PDS) , but the official guide involves deploying a full set of services, including caddy as a reverse proxy, running on the host network. Since I wanted to re-use an existing server that already had nginx running, I followed @ameo.dev's guide to set everything the PDS and, after a few tweaks, I managed to get it working. My next step was to self-host Ozone , Bluesky's labeling application. Like the PDS instructions, Ozone's official hosting guide implies running a Docker image in th
  7. To listen to a book
    May 4, 2025 · original
    One of my readings the other day. Trying to imagine Sisyphus happy. All my life I have loved reading. Ever since I was a kid, I've always kept a book close by. Although I stopped reading constantly for a few years, I recently returned to it as a daily habit. At first, I read physical books and couldn't fathom the idea of reading digitally. Then, I realized that e-books allowed me to carry an entire library with me wherever I went. So, I embraced digital books. However, despite this change, I'd never considered the idea of listening to a book. How could I enjoy a story if I didn't read it, if I couldn't see every symbol, letter, every single decision the author made on a page? This way of thinking, perhaps shaped a bit by the type of poetry I enjoy (which doesn't easily translate from paper to voice), made me reject the idea of audiobooks. This year, bit by bit, I've opened up to the idea
  8. Handling monetary values in code
    Apr 13, 2025 · original
    Photograph by Rashed Paykary on Unsplash . Every developer will eventually have to deal with monetary values in their code some time. This is a tricky thing to get right, and it is absolutely necessary to do so. My two cents (no pun intended) on the matter are: Don't reinvent the wheel # There are many libraries (e.g. dinero for Python) out there that have been built to handle monetary values and their edge cases. They're usually tried and tested and will consider a lot of scenarios that you might not have thought of. Highly recommended! Use the right data type # For storage and transport, the right data type is key. Avoid floating point numbers, as they can introduce rounding errors when adding, substracting or otherwise making calculations with money. Consider using fixed-point numbers (e.g. Decimal in Python), or integers (e.g. treat money as cents instead of dollars, like Stripe does
  9. A new step as an open source project maintainer
    Mar 23, 2025 · original
    Photograph by Chris Ried on Unsplash . I've been working visibly on open source projects for a few years now. I started while I was doing my undergrad, participating in the Hacktoberfest in 2019. From there, I moved to contributing a couple of minor changes to random projects I found on the internet. At the same time, I worked on my undergrad thesis openly on a public Github repository, as well as on other big projects on my final year. One of my favorite moments (so far) was when I contributed my first (and, so far, only) commit to the mybb repository, a piece of software with a special place in my heart, especially during my teenage years. It wasn't a big change, just a missing , but it was another symbolic step for me: being able to give something back to a community that I held dear. I then moved onto creating my own projects. A lot of them didn't go beyond a couple commits made in a
  10. I lost my voice
    Mar 2, 2025 · original
    This blog post was originally written (and intended to be read) in Spanish . I tried my best to convey the same meaning in my translation below, but your mileage may vary! Photograph by Andrew Neel on Unsplash . For a while, so long that I can't measure, I've felt like my voice is missing. I don't know where I left it last time I saw it, I used it. My fingers dance atop the keyboard, my hand grabs the pen that swipes over the notebook. And I can see the lines, the traces,the pixels that light up forming symbols that I can read. But I don't recognize myself. For the past few months, I've consciously grown back my reading habit, partially due to me getting a new Kobo . When I created this website, I set another goal for myself: to recover my writing habit. But this one's been way harder to do. Even though, objectivelly, I've been practicing more than before —I've forced myself to write at
  11. Why I don't bother with self-help books
    Feb 2, 2025 · original
    A few days ago, as I was cooking (and mindlessly watching YouTube in the background), a book recommendation video caught my eye. A YouTuber was describing her experience reading "The Dip" (Seth Godin, 2007), and how the message behind this book had pushed her into accomplishing several milestones in her path as a content creator and businesswoman. I've never been fond of self-help books, but I gave "The Dip" a try. It was a quick read, I read it in one sitting during a lunch break. And it reminded me of why I don't really like self-help books. Now, I know that 1) no two books are the same, even if they're sold / promoted as part of the same genre, and 2) no two readers are the same, so what doesn't work for me can potentially work for someone else and that's alright. However, if you ask me, self-help books fail to reach me because: They're usually overly simplistic. Self-help authors ten
  12. Some notes after DMing my first Dungeons and Dragons campaign
    Jan 27, 2025 · original
    Facing a dragon for the first time! (image: Wizards of the Coast) Between October and December, I took on the role of Dungeon Master (DM) for the first time to host a short (lv. 1 to 3) introductory Dungeons and Dragons campaign for two close friends, Germán and Gustavo. This was not only my first time as a DM, but my first real taste of a Dungeons and Dragons game overall, as my only other time playing was on a 2-hour one-shot tutorial a few weeks before. But the game felt so creative and attractive to me that, after a few failed attempts to find more experienced players to guide our first campaign, I read through the whole campaign and most of the Dungeon Masters Guide and hosted it myself. We had a lot of fun! Besides the source materials, my only other preparation was watching countless YouTube videos with tips and tricks for new DMs, and browsing some reddit posts for campaign-speci
  13. Port forwarding through SSH
    Jan 19, 2025 · original
    While working on my undergraduate senior thesis a few years ago, I made a small web application to visualize certain patterns as my daily experiments went through. This application was running inside a remote server and was not getting exposed to the public internet, so it was a hassle to check its content. After trying to figure out a way to make it easier to access said application, I stumbled upon the port forwarding functionality of ssh . I'm writing this brief explanation many years later to prevent myself from forgetting it again. As per ssh's man page , you can use the -L flag to specify "that connections to the given TCP port or Unix socket on the local (client) host are to be forwarded to the given host and port, or Unix socket, on the remote side". Practically speaking, if your remote server is located at example.com and is running an application that listens for connections on
  14. I love building bots (and bot craftmanship)
    Dec 19, 2024 · original
    A few months ago, I received notice that the botsin.space Mastodon instance was going to shut down by December this year, after more than 7 years of service. I hope bot-makers are able to migrate their bots to other instances and keep them running, to keep the online bot craftmanship alive. While I only found my way into the fediverse a couple years back, I've loved making online bots (e.g. on Telegram, formerly on X (formerly Twitter)) and also stumbling upon these small creations made by other people ever since I started college more than ten years ago. These toy bots are by no means a technological feat: most of the ones I refer to just post short pieces of text to social media, or respond to triggers on instant messaging apps. But no matter how advanced they are, I find it wonderful to connect to a bot creator and understand the creative intent behind the bot. I remember a few bots t
  15. Building a game out of spite
    Nov 10, 2024 · original
    So, I just built a (very simple) web game: Number Sum . The game is a brief number guessing game, in the same vein as Sudoku and others. You have to complete a partially-filled grid with number guesses to ensure that certain conditions are met, namely that all columns and rows sum to the respective hints given on the grid. It took me about two hours to build (plus a few weeks of wanting to build it but not moving a finger), and I did for two reasons: The main, technical reason is that I wanted to practice my Svelte skills. I've been eyeing out Svelte for some time and this seemed like a perfect opportunity to build a small web app encapsulating scripts, styles and markup in the same file. Plus, I don't practice my Javascript / Typescript as much as I would like to on my day-to-day job. I played a similar game on my phone and I hated it . It was one of these games full of obnoxious, intru
  16. Getting a Kobo rekindled my passion for reading
    Nov 8, 2024 · original
    When I was younger, I used to read a lot. I used to cram in reading at every possible moment, dashing through trilogies and series in a matter of days. I would consistently start reading a novel, a short story collection, a series of essays and get through the end without getting bored or tired in the process, even if whatever book I had picked didn't fully peak my interest. Physical books, ebooks, fan fiction, blog posts, RSS feeds: you name it, I probably read it. And then I grew into adulthood. At some point after my first year of undergraduate studies, I stopped reading as much as I used to. More and more of what I read was content I had to read: textbooks, problem sets, required reading for my courses; not that I didn't like what I was reading (most of the time at least), but mandatory reading certainly overpowered recreative reading to the point that I could spend months without ev
  17. Block malicious user agents via nginx config
    Oct 5, 2024 · original
    Bots are everywhere, and so are malicious agents. They crawl, they scrape, they read... and sometimes (or most? of the times),they abuse . A few times now, I've observed increased CPU / RAM consumption on servers where I wouldn't expect any usage on non-peak hours, and after browsing through access logs, I find out the cause is that certain bots are crawling my sites over and over again. This has been made worse, for example, by certain WordPress plug-ins that generate links with unique GET parameters on each page load, making these not-so-smart crawler bots get stuck on an endless loop. What a waste of bandwidth and compute resources. To put an end to this, I've now blocked by default certain user agents from accessing any of the websites I host, directly on nginx config. This ensures that malicious actors are stopped even before they can trigger any server execution or load static cont
  18. Handle errors on custom Elementor Form Actions
    Sep 22, 2024 · original
    If you're using the Elementor plug-in for WordPress, you might eventually need to customize one or several submit actions for Elementor Forms. For example, you might need to call a specific API on form submission or create custom rows in your database when the built-in actions (such as sending emails or saving submissions) fall short. The official Elementor Form Actions documentation contains an introduction to form actions, including two code samples for creating new ones. However, none of the examples (or the rest of the documentation) showcase how to handle errors (e.g. how to inform the front-end that you can't process the data any further and the user must review their answers). To achieve this, you can try the following code snippet: public function run ( $record , $ajax_handler ) { // This is the function that runs your custom action // to handle an Elementor Form submit // Let's
  19. A fresh start
    Sep 8, 2024 · original
    Hello there! If you're reading this, welcome! And thanks! (And also: why!?) This is (hopefully) my definite attempt to run a blog as a space to drop random thoughts, ideas and ramblings in public, and to improve my online presence. Or, at least, try to. This first post doesn't have much content by itself, but is a testament to the day I finally got around to writing some minor code and (re-)starting my blog... after adding a task to my to-do list almost four years ago. I guess I've been planning on doing this for quite some time... I expect to expand on both the blog posts and the personal sections in the next few days (but if I had to set a due date, I'd pick December 2028, just to be consistent). So, again, thanks for taking the time to explore my little outpost in the cyberspace! Hope to catch you again around here soon!

Found by rss-feed-index, which checks each feed once a month at most.

Same record as JSON: https://api.agentalog.com/api/feeds/fd_aitorres_com_c6215b50433281a0. More from this site: aitorres.com in the Feeds tab.

Looking for something else?QuestionsContact