<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>blog.fidelramos.net - Software</title><link>https://blog.fidelramos.net/</link><description/><atom:link href="https://blog.fidelramos.net/feeds/software.rss.xml" rel="self"/><lastBuildDate>Sat, 04 Jul 2026 19:43:29 +0000</lastBuildDate><item><title>Vibe Coding Escapades: Venice.ai KDE widget</title><link>https://blog.fidelramos.net/software/vibe-coding-escapades-venice-kde-widget</link><description>&lt;h2 id="the-problem"&gt;The Problem&lt;/h2&gt;
&lt;p&gt;I’ve been using Venice.ai (&lt;a href="https://venice.ai/chat?ref=XPrCO2"&gt;referral link if you want to sign up&lt;/a&gt;) for quite some time now for all my artificial intelligence needs.
I love it because, unlike most AI platforms, it’s &lt;strong&gt;private&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When you use Venice’s own models (open-source models running on their …&lt;/li&gt;&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Thu, 25 Jun 2026 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2026-06-25:/software/vibe-coding-escapades-venice-kde-widget</guid><category>Software</category><category>ai</category><category>kde</category><category>programming</category></item><item><title>Self-hosted Tailscale, Part 4: Tailscale-Only Web Services</title><link>https://blog.fidelramos.net/software/tailscale-4-web-services</link><description>&lt;p&gt;I've been running a &lt;a href="https://blog.fidelramos.net/software/homelab"&gt;home server&lt;/a&gt; with a bunch of self-hosted services (Immich, Jellyfin, Nextcloud...) behind a single Caddy instance using &lt;code&gt;caddy-docker-proxy&lt;/code&gt; (documented &lt;a href="https://blog.fidelramos.net/software/switch-nginx-caddy-docker-compose"&gt;in this post&lt;/a&gt;).
Some of them have genuine public uses, e.g. sharing a folder in Nextcloud or an album in Immich, or connecting to Jellyfin through …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Thu, 04 Jun 2026 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2026-06-04:/software/tailscale-4-web-services</guid><category>Software</category><category>howto</category><category>linux</category><category>security</category><category>tailscale</category><category>vpn</category></item><item><title>Vibe Coding Escapades: pelican-copy-code plugin</title><link>https://blog.fidelramos.net/software/vibe-coding-escapades-pelican-copy-code</link><description>&lt;h2 id="the-problem"&gt;The Problem&lt;/h2&gt;
&lt;p&gt;I realized that this blog uses a lot of code blocks, but it’s not easy to copy them because there’s no &lt;em&gt;Copy&lt;/em&gt; button on each block.&lt;/p&gt;
&lt;p&gt;I looked for a plugin for &lt;a href="https://getpelican.com/"&gt;Pelican&lt;/a&gt; that would do this, convinced that there must be one already out there …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2026-05-26:/software/vibe-coding-escapades-pelican-copy-code</guid><category>Software</category><category>ai</category><category>blog</category><category>pelican</category><category>programming</category><category>python</category></item><item><title>Vibe Coding Escapades</title><link>https://blog.fidelramos.net/software/vibe-coding-escapades</link><description>&lt;p&gt;I'm going to start a new series of articles on how I'm using AI to develop software or solve technical problems.&lt;/p&gt;
&lt;p&gt;The articles will follow this structure:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Problem&lt;/li&gt;
&lt;li&gt;Execution&lt;/li&gt;
&lt;li&gt;Results&lt;/li&gt;
&lt;li&gt;Lessons and findings&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In this article, I don't want to delve into ethical, environmental, or political-economic considerations regarding AI, but …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2026-05-24:/software/vibe-coding-escapades</guid><category>Software</category><category>ai</category><category>programming</category></item><item><title>Self-hosted Tailscale, Part 3: Syncthing over Tailscale</title><link>https://blog.fidelramos.net/software/tailscale-3-syncthing</link><description>&lt;p&gt;I've been using &lt;a href="https://syncthing.net/"&gt;Syncthing&lt;/a&gt; for years to keep files in sync between my laptop, desktop, phone, tablet and home server. It is an amazing piece of software and has been very reliable, with only the occasional conflict, but I have never lost any data. On the contrary, Syncthing file versioning …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2026-05-18:/software/tailscale-3-syncthing</guid><category>Software</category><category>howto</category><category>linux</category><category>security</category><category>syncthing</category><category>tailscale</category><category>vpn</category></item><item><title>How I Sandbox my AI Agents</title><link>https://blog.fidelramos.net/software/how-i-sandbox-ai-agents</link><description>&lt;p&gt;I've been using &lt;a href="https://opencode.ai/"&gt;Opencode&lt;/a&gt; as my AI coding agent.
Very unlike me, I don't have a long list of reasons why I picked it among the many alternatives.
I just wanted to get started with an agent system that checked my main requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Must be fully open-source.&lt;/li&gt;
&lt;li&gt;Popular, meaning it's …&lt;/li&gt;&lt;/ul&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2026-05-14:/software/how-i-sandbox-ai-agents</guid><category>Software</category><category>ai</category><category>firejail</category><category>linux</category><category>security</category></item><item><title>Self-hosted Tailscale, Part 2: Ad-blocking DNS</title><link>https://blog.fidelramos.net/software/tailscale-2-ad-blocking-dns</link><description>&lt;p&gt;In &lt;a href="https://blog.fidelramos.net/software/tailscale-1-headscale-and-clients"&gt;Part 1&lt;/a&gt; I set up Headscale and had every tailnet client use Cloudflare DNS.
That works, but it's leaving value on the table: every device that connects to my Tailscale gets whatever DNS servers I set, so I might as well run my own DNS server inside the private …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2026-05-11:/software/tailscale-2-ad-blocking-dns</guid><category>Software</category><category>dns</category><category>howto</category><category>linux</category><category>security</category><category>tailscale</category><category>vpn</category></item><item><title>Self-hosted Tailscale, Part 1: Headscale and clients</title><link>https://blog.fidelramos.net/software/tailscale-1-headscale-and-clients</link><description>&lt;p&gt;I had been hearing a lot of people raving about &lt;a href="https://tailscale.com/"&gt;Tailscale&lt;/a&gt; as a solution for interconnecting devices, or in other words for creating your own mesh VPN.
It does seem great on paper: easy to set up, fast and lightweight, based on an open protocol (&lt;a href="https://www.wireguard.com/"&gt;WireGuard&lt;/a&gt;), works everywhere, solves the …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2026-05-05:/software/tailscale-1-headscale-and-clients</guid><category>Software</category><category>howto</category><category>linux</category><category>security</category><category>tailscale</category><category>vpn</category></item><item><title>Pre-establishing SSH master connections for Ansible, or using OnlyKey with Ansible without losing your mind</title><link>https://blog.fidelramos.net/software/ansible-ssh-master-connections</link><description>&lt;p&gt;I use an &lt;a href="https://onlykey.io/"&gt;OnlyKey&lt;/a&gt; as a hardware security device for a variety of purposes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Common passwords are one keypress away, they get typed automatically.&lt;/li&gt;
&lt;li&gt;As 2FA in my password manager (KeepassXC), by applying HMAC on the password.&lt;/li&gt;
&lt;li&gt;SSH connections.&lt;/li&gt;
&lt;li&gt;GPG encryption and signing.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;figure class="align-center"&gt;&lt;img src="https://blog.fidelramos.net/images/ansible_and_onlykey/onlykey.webp"/&gt;&lt;figcaption&gt;OnlyKey&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;SSH connections are handled through the …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Tue, 07 Apr 2026 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2026-04-07:/software/ansible-ssh-master-connections</guid><category>Software</category><category>ansible</category><category>automation</category><category>howto</category><category>linux</category><category>security</category></item><item><title>Announcing Reflex, a Pelican theme</title><link>https://blog.fidelramos.net/software/announce-reflex-theme</link><description>&lt;p&gt;I'm happy to announce the public availability of my Pelican theme: &lt;a href="https://github.com/haplo/python-theme-reflex"&gt;Reflex&lt;/a&gt;.
It is &lt;a href="https://pypi.org/project/pelican-reflex/"&gt;published on PyPI&lt;/a&gt;, which should be the best way for most users to install it.&lt;/p&gt;
&lt;p&gt;When I first started this blog I decided on Pelican because I had lots of experience with Python, so it would …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Mon, 16 Feb 2026 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2026-02-16:/software/announce-reflex-theme</guid><category>Software</category><category>free-software</category><category>pelican</category></item><item><title>Self-hosted Home, Part 1: Design and Planning</title><link>https://blog.fidelramos.net/software/self-hosted-home-1</link><description>&lt;p&gt;Those who have been paying attention to the blog know that I bought a house and have been planning its full renovation.
As a computer nerd what excites me the most is the opportunity to implement &lt;strong&gt;my dream  smart home, networking and home server&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I have a clear idea of …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Sun, 25 Jan 2026 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2026-01-25:/software/self-hosted-home-1</guid><category>Software</category><category>free-software</category><category>linux</category><category>self-hosting</category></item><item><title>Periodic script to back up installed OS packages</title><link>https://blog.fidelramos.net/software/backup-installed-packages</link><description>&lt;p&gt;A while ago I &lt;a href="https://github.com/haplo/dotfiles/commit/0f7aedfa2ee71ca4a5d709d2f2a21c57a83be264"&gt;switched to yadm&lt;/a&gt; for managing my dotfiles.
One of its features I have been enjoying is its &lt;a href="https://yadm.io/docs/bootstrap"&gt;bootstrap support&lt;/a&gt;.
I have been adding idempotent setup operations&lt;/p&gt;
&lt;p&gt;My latest addition is a script that creates backup files with all installed OS packages.
In case of disaster if …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Mon, 08 Dec 2025 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2025-12-08:/software/backup-installed-packages</guid><category>Software</category><category>backup</category><category>fish</category><category>free-software</category><category>howto</category><category>linux</category><category>shell</category></item><item><title>Responsible education in computing</title><link>https://blog.fidelramos.net/software/computing-education-1</link><description>&lt;p&gt;My oldest daughter is turning 7 soon, and I have promised her a gift: her first computer.
I'm secretly hoping that she will develop an interest in computing similar to my own.
Not because I want to reproduce my childhood in her (although, of course, I would like to share …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Sun, 09 Nov 2025 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2025-11-09:/software/computing-education-1</guid><category>Software</category><category>education</category><category>free-software</category><category>linux</category></item><item><title>Now with self-hosted comments</title><link>https://blog.fidelramos.net/software/self-hosted-comments</link><description>&lt;p&gt;A few days ago I received an email from a reader and &lt;a href="https://zenodotus280.mataroa.blog/"&gt;fellow blogger&lt;/a&gt;, to let me know that he was following my blog and also gave me a shout out about &lt;a href="https://blog.fidelramos.net/personal/new-years-resolutions-2025#blog"&gt;my New Year's resolution to write at least one article every month of 2025&lt;/a&gt;, and that I was …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Mon, 10 Feb 2025 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2025-02-10:/software/self-hosted-comments</guid><category>Software</category><category>blog</category><category>free-software</category><category>howto</category><category>linux</category><category>privacy</category><category>self-hosting</category></item><item><title>My homelab setup</title><link>https://blog.fidelramos.net/software/homelab</link><description>&lt;p&gt;Welcome to my homelab!&lt;/p&gt;
&lt;p&gt;If you don't know what a homelab is, it refers to running servers from your home.
What is a server?
It's basically a computer that is always on, connected to the network, often with no display or input.
For a longer explanation take a look at …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Fri, 29 Dec 2023 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2023-12-29:/software/homelab</guid><category>Software</category><category>backup</category><category>caddy</category><category>debian</category><category>docker</category><category>free-software</category><category>homelab</category><category>linux</category><category>kodi</category><category>nextcloud</category><category>nginx</category><category>privacy</category><category>self-hosting</category></item><item><title>Migrating to fish shell</title><link>https://blog.fidelramos.net/software/fish-shell</link><description>&lt;p&gt;I'm a heavy shell user.
As a programmer I enjoy the power and flexibility of the shell, so I always keep multiple terminals open (just one keystroke away thanks to &lt;a href="https://apps.kde.org/yakuake/"&gt;Yakuake&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;I have been using &lt;a href="https://www.gnu.org/software/bash/"&gt;Bash&lt;/a&gt; for as long as I have been a GNU/Linux user, that's 24 years …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Thu, 07 Dec 2023 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2023-12-07:/software/fish-shell</guid><category>Software</category><category>fish</category><category>shell</category><category>linux</category></item><item><title>Replacing Nginx with Caddy in Docker Compose</title><link>https://blog.fidelramos.net/software/switch-nginx-caddy-docker-compose</link><description>&lt;p&gt;The main server in my homelab runs a bunch of services, but the heart of it is a &lt;a href="https://docs.docker.com/compose/"&gt;Docker Compose&lt;/a&gt; configuration, several of them exposed to the Internet via a reverse proxy webserver.&lt;/p&gt;
&lt;p&gt;Before I was using three Docker images to run Nginx, proxy traffic to other services and have …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Thu, 09 Nov 2023 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2023-11-09:/software/switch-nginx-caddy-docker-compose</guid><category>Software</category><category>caddy</category><category>docker</category><category>homelab</category><category>nginx</category></item><item><title>Automating Python code quality</title><link>https://blog.fidelramos.net/software/python-code-quality</link><description>&lt;p&gt;In this article I explain what I mean by code quality and how it benefits developers.&lt;/p&gt;
&lt;p&gt;In the first half I discuss general concepts and workflows that apply to most software projects.
Even if you are not writing Python code you might learn something from it.&lt;/p&gt;
&lt;p&gt;In the second half …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Fri, 23 Jun 2023 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2023-06-23:/software/python-code-quality</guid><category>Software</category><category>programming</category><category>python</category><category>automation</category><category>howto</category><category>free-software</category></item><item><title>Privacy-respecting self-hosted Web Analytics</title><link>https://blog.fidelramos.net/software/privacy-respecting-self-hosted-web-analytics</link><description>&lt;p&gt;It all started with a desire: I wanted some basic analytics for this blog to know how it's
doing, which articles are popular and which are the main referrers. But therein lied the
conundrum: I am a privacy zealot, very much against extensive online tracking (just look
at the &lt;a href="https://blog.fidelramos.net/software/web-browser-addons"&gt;browser …&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Fri, 27 May 2022 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2022-05-27:/software/privacy-respecting-self-hosted-web-analytics</guid><category>Software</category><category>privacy</category><category>web</category><category>analytics</category><category>self-hosting</category></item><item><title>Web browser add-ons I use</title><link>https://blog.fidelramos.net/software/web-browser-addons</link><description>&lt;p&gt;This article lists the web browser extensions I use and why.
I will keep it updated from time to time.&lt;/p&gt;
&lt;p&gt;Currently I use &lt;a href="https://brave.com/"&gt;Brave&lt;/a&gt; as my main web browser, and is the one I recommend to everyone.
It offers a great experience by default, with features such as a built-in …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Wed, 23 Feb 2022 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2022-02-23:/software/web-browser-addons</guid><category>Software</category><category>browser</category><category>firefox</category><category>web</category><category>addons</category><category>privacy</category><category>security</category><category>cryptocurrency</category></item><item><title>Nextcloud CardDAV and CalDAV discovery with DNS records</title><link>https://blog.fidelramos.net/software/nextcloud-caldav-carddav-dns</link><description>&lt;p&gt;I use a self-hosted Nextcloud instance to hold a lot of my personal data, and that
includes my contacts and calendars. Recently I had to reinstall
&lt;a href="https://www.davx5.com"&gt;DAVx5&lt;/a&gt; on my phone, and I was surprised that the Nextcloud account
was failing to be added.&lt;/p&gt;
&lt;p&gt;The DAVx5 error logs showed that it …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Thu, 17 Feb 2022 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2022-02-17:/software/nextcloud-caldav-carddav-dns</guid><category>Software</category><category>nextcloud</category><category>howto</category><category>self-hosting</category><category>dns</category></item><item><title>Unlocking a LUKS-encrypted partition on boot with an USB drive</title><link>https://blog.fidelramos.net/software/unlock-luks-usb-drive</link><description>&lt;p&gt;The use case I wanted to solve was this: I have a headless server with
a LUKS software-encrypted hard drive, and I want to be able to reboot
it without having to input the password on a keyboard. The solution I
implemented is to create a LUKS keyfile on a …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Fidel Ramos</dc:creator><pubDate>Sun, 13 Oct 2019 00:00:00 +0000</pubDate><guid>tag:blog.fidelramos.net,2019-10-13:/software/unlock-luks-usb-drive</guid><category>Software</category><category>linux</category><category>encryption</category><category>security</category><category>howto</category></item></channel></rss>