<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Walid Karray</title><description>Building things, and writing it down: cloud, generative AI, homelab and my own tools, by Walid Karray.</description><link>https://walid.tn/</link><item><title>Flux on Talos Linux: GitOps for a Homelab</title><link>https://walid.tn/posts/flux-talos-gitops-homelab/</link><guid isPermaLink="true">https://walid.tn/posts/flux-talos-gitops-homelab/</guid><description>How my homelab deploys about twenty apps from git with Flux on a two-node Talos cluster, and why Docker Compose hosts, k3s and Argo CD were set aside.</description><pubDate>Tue, 20 Oct 2026 12:00:00 GMT</pubDate></item><item><title>How I Run My Homelab in 2026: Proxmox, Kubernetes on Talos and Tailscale</title><link>https://walid.tn/posts/how-i-run-my-homelab-2026/</link><guid isPermaLink="true">https://walid.tn/posts/how-i-run-my-homelab-2026/</guid><description>My homelab today: one Proxmox host in a 16U rack, two Talos Linux VMs as a Kubernetes cluster, network tiers like a cloud VPC, and Tailscale as the only door.</description><pubDate>Wed, 14 Oct 2026 10:00:00 GMT</pubDate></item><item><title>My Homelab Is Written by Coding Agents</title><link>https://walid.tn/posts/homelab-built-by-coding-agents/</link><guid isPermaLink="true">https://walid.tn/posts/homelab-built-by-coding-agents/</guid><description>How coding agents write my homelab: the AGENTS.md files and skills they follow, the guardrails, the incidents that became rules, and the risk I accept.</description><pubDate>Thu, 08 Oct 2026 19:46:43 GMT</pubDate></item><item><title>Proxmox and Synology UPS Shutdown With NUT: Don&apos;t Trust the Low-Battery Flag</title><link>https://walid.tn/posts/proxmox-synology-ups-shutdown-nut/</link><guid isPermaLink="true">https://walid.tn/posts/proxmox-synology-ups-shutdown-nut/</guid><description>How a Proxmox host and a Synology NAS shut down in time on a PowerWalker UPS with NUT, why its 0% low-battery threshold can&apos;t be trusted, and the fix.</description><pubDate>Tue, 06 Oct 2026 20:44:15 GMT</pubDate></item><item><title>I Got Tired of aws sso login. So I Built a Terminal Dashboard That Never Lets My Credentials Die</title><link>https://walid.tn/posts/i-got-tired-of-aws-sso-login-so-i-built-a-terminal-dashboard-that-never-lets-my-credentials-die/</link><guid isPermaLink="true">https://walid.tn/posts/i-got-tired-of-aws-sso-login-so-i-built-a-terminal-dashboard-that-never-lets-my-credentials-die/</guid><description>awssesh, a terminal dashboard for AWS SSO profiles: live status and expiry for each, auto-refresh of pinned profiles, and credentials exported to your shell.</description><pubDate>Fri, 12 Jun 2026 10:22:31 GMT</pubDate></item><item><title>Why I Stopped Paying for Time-Tracking SaaS and Built Presto Instead</title><link>https://walid.tn/posts/why-i-stopped-paying-for-time-tracking-saas-and-built-presto-instead/</link><guid isPermaLink="true">https://walid.tn/posts/why-i-stopped-paying-for-time-tracking-saas-and-built-presto-instead/</guid><description>Presto, a self-hosted time tracker for freelancers: click worked days on a calendar, export monthly activity reports as PDF, and run it as one Docker image.</description><pubDate>Thu, 05 Mar 2026 21:23:32 GMT</pubDate></item><item><title>Quick Guide: Automating Tailscale Certificate Configuration on Synology DSM</title><link>https://walid.tn/posts/automating-tailscale-certificate-configuration-on-synology-dsm/</link><guid isPermaLink="true">https://walid.tn/posts/automating-tailscale-certificate-configuration-on-synology-dsm/</guid><description>A bash script, run as root over SSH, that issues a Tailscale certificate with tailscale cert and installs it as Synology DSM&apos;s default certificate.</description><pubDate>Tue, 30 Jan 2024 22:32:22 GMT</pubDate></item><item><title>Mastering Static Website Hosting on AWS with Terraform: A Step-by-Step Tutorial</title><link>https://walid.tn/posts/mastering-static-website-hosting-on-aws-with-terraform-a-step-by-step-tutorial/</link><guid isPermaLink="true">https://walid.tn/posts/mastering-static-website-hosting-on-aws-with-terraform-a-step-by-step-tutorial/</guid><description>Host a static website on AWS with Terraform: a private S3 bucket behind CloudFront with OAC, an ACM certificate, Route 53 DNS and a www redirect function.</description><pubDate>Sun, 15 Oct 2023 12:36:25 GMT</pubDate></item><item><title>Building a Todo App with TypeScript Using Clean Architecture: A Detailed Look at the Directory Structure</title><link>https://walid.tn/posts/building-a-todo-app-with-typescript-using-clean-hexagonal-architecture-directory-structure/</link><guid isPermaLink="true">https://walid.tn/posts/building-a-todo-app-with-typescript-using-clean-hexagonal-architecture-directory-structure/</guid><description>The directory layout of a TypeScript todo app in Clean (Hexagonal) Architecture: entities, use cases and repository interfaces in the core, TypeORM outside it.</description><pubDate>Wed, 19 Apr 2023 09:14:08 GMT</pubDate></item><item><title>Configuring a custom domain for AWS Lambda Function URLs</title><link>https://walid.tn/posts/configuring-a-custom-domain-for-aws-lambda-function-url-with-serverless-framework/</link><guid isPermaLink="true">https://walid.tn/posts/configuring-a-custom-domain-for-aws-lambda-function-url-with-serverless-framework/</guid><description>Put an AWS Lambda Function URL behind a custom domain with the Serverless Framework, using CloudFront, an ACM certificate and Route 53 instead of API Gateway.</description><pubDate>Sat, 07 May 2022 23:53:08 GMT</pubDate></item><item><title>A PHP Slugify Function with UTF-8 Support for Latin, Arabic, Chinese and More</title><link>https://walid.tn/posts/php-slugify-utf8-latin-arabic-chinese/</link><guid isPermaLink="true">https://walid.tn/posts/php-slugify-utf8-latin-arabic-chinese/</guid><description>A short PHP function that turns any UTF-8 string, in Latin, Arabic, Chinese or other scripts, into a URL slug, with an optional length limit.</description><pubDate>Thu, 23 Feb 2017 10:49:25 GMT</pubDate></item><item><title>Facebook Graph API Workaround: Get a Group&apos;s ID from Its URL</title><link>https://walid.tn/posts/facebook-graph-api-get-group-id-from-url/</link><guid isPermaLink="true">https://walid.tn/posts/facebook-graph-api-get-group-id-from-url/</guid><description>A PHP bot built on cURL and DOMXPath that logs in to Facebook and reads a group&apos;s numeric ID from its page, since the Graph API and FQL could not.</description><pubDate>Tue, 10 Sep 2013 21:29:24 GMT</pubDate></item><item><title>A Step-by-Step Tutorial on Building Your Own Safari Extension (Part 2)</title><link>https://walid.tn/posts/building-a-safari-extension-step-by-step-part-2/</link><guid isPermaLink="true">https://walid.tn/posts/building-a-safari-extension-step-by-step-part-2/</guid><description>Part 2 of the Safari extension tutorial: write the injected script, global page and popover of a visited links logger, then test and package it.</description><pubDate>Mon, 17 Jun 2013 11:00:06 GMT</pubDate></item><item><title>A Step-by-Step Tutorial on Building Your Own Safari Extension (Part 1)</title><link>https://walid.tn/posts/building-a-safari-extension-step-by-step-part-1/</link><guid isPermaLink="true">https://walid.tn/posts/building-a-safari-extension-step-by-step-part-1/</guid><description>Part 1 of a Safari extension tutorial: enable Extension Builder, then configure a visited links logger with a toolbar button, popover and injected scripts.</description><pubDate>Fri, 14 Jun 2013 11:30:43 GMT</pubDate></item><item><title>Feeling Nostalgic for the Amstrad CPC 6128</title><link>https://walid.tn/posts/feeling-nostalgic-for-the-amstrad-cpc-6128/</link><guid isPermaLink="true">https://walid.tn/posts/feeling-nostalgic-for-the-amstrad-cpc-6128/</guid><description>My memories of the Amstrad CPC 6128: the games I played, its green monitor and 3-inch floppies, and my first lines of Locomotive BASIC.</description><pubDate>Sat, 26 May 2012 15:30:03 GMT</pubDate></item><item><title>15 Java Video Tutorials for Beginners in Tunisian Dialect</title><link>https://walid.tn/posts/java-video-tutorials-for-beginners-in-tunisian-dialect/</link><guid isPermaLink="true">https://walid.tn/posts/java-video-tutorials-for-beginners-in-tunisian-dialect/</guid><description>Fifteen beginner Java video tutorials in Tunisian dialect by Mohamed Turki, from installing the JDK and Eclipse to classes, inheritance, interfaces and collections.</description><pubDate>Sun, 15 Apr 2012 00:11:03 GMT</pubDate></item><item><title>How Linux Is Built</title><link>https://walid.tn/posts/how-linux-is-built/</link><guid isPermaLink="true">https://walid.tn/posts/how-linux-is-built/</guid><description>A short Linux Foundation video, based on the &quot;Who Writes Linux&quot; report, on how the largest collaborative project in computing history is organized.</description><pubDate>Sun, 08 Apr 2012 19:57:44 GMT</pubDate></item><item><title>How to Deploy OpenACS (TR-069) on JBoss AS 5.1</title><link>https://walid.tn/posts/how-to-deploy-openacs-tr-069-on-jboss-as-5-1/</link><guid isPermaLink="true">https://walid.tn/posts/how-to-deploy-openacs-tr-069-on-jboss-as-5-1/</guid><description>Step-by-step instructions for running the OpenACS 0.4 beta TR-069 auto-configuration server on JBoss AS 5.1 GA with JDK 1.6 and MySQL on Linux.</description><pubDate>Thu, 05 Apr 2012 20:36:40 GMT</pubDate></item><item><title>The Tunisian Python Community Launches Its Web Portal</title><link>https://walid.tn/posts/tunisian-python-community-launches-its-web-portal/</link><guid isPermaLink="true">https://walid.tn/posts/tunisian-python-community-launches-its-web-portal/</guid><description>The Tunisian Python community put its web portal online in April 2012, with a coming-soon message and links to its Facebook and Twitter pages.</description><pubDate>Sun, 01 Apr 2012 21:19:02 GMT</pubDate></item><item><title>Photos from the Red Hat and Tritux SOA Seminar at the Hotel Concorde, Tunis</title><link>https://walid.tn/posts/red-hat-tritux-soa-seminar-photos-tunis/</link><guid isPermaLink="true">https://walid.tn/posts/red-hat-tritux-soa-seminar-photos-tunis/</guid><description>Photos from the March 2012 Red Hat and Tritux seminar on SOA and JBoss middleware at the Hotel Concorde in Tunis: the talks, the stands and the Tritux team.</description><pubDate>Sun, 01 Apr 2012 19:52:55 GMT</pubDate></item><item><title>What SOA Means for Information Systems: Red Hat Seminar, March 2012</title><link>https://walid.tn/posts/soa-in-information-systems-red-hat-seminar-2012/</link><guid isPermaLink="true">https://walid.tn/posts/soa-in-information-systems-red-hat-seminar-2012/</guid><description>Red Hat and its Tunisian partner Tritux held a seminar in Tunis in March 2012 on what service-oriented architecture (SOA) brings to enterprise information systems.</description><pubDate>Sun, 01 Apr 2012 19:35:04 GMT</pubDate></item><item><title>Customize the Unity Launcher on Ubuntu 11.04 and 11.10</title><link>https://walid.tn/posts/customize-the-unity-launcher-on-ubuntu/</link><guid isPermaLink="true">https://walid.tn/posts/customize-the-unity-launcher-on-ubuntu/</guid><description>Four steps to change the Unity launcher&apos;s icon size, speed, opacity and behavior on Ubuntu 11.04 and 11.10 with the CompizConfig Settings Manager.</description><pubDate>Sun, 26 Feb 2012 00:23:30 GMT</pubDate></item><item><title>A Quick Guide to Installing MySQL Server on Ubuntu Linux</title><link>https://walid.tn/posts/a-quick-guide-to-install-mysql-server-on-ubuntu-linux/</link><guid isPermaLink="true">https://walid.tn/posts/a-quick-guide-to-install-mysql-server-on-ubuntu-linux/</guid><description>Install the MySQL server and client on Ubuntu with apt-get, check that the service is running, set a root password and control starting at boot.</description><pubDate>Tue, 21 Feb 2012 19:57:49 GMT</pubDate></item></channel></rss>