<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>pat-s blog (IT, DevOps, Data Science)</title>
    <description>Posts about data science, Linux and R</description>
    <link>https://pat-s.me/categories/forgejo/</link>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 31 Jan 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://pat-s.me/index.xml" rel="self" type="application/rss+xml" />
    <image>
      <url>https://pat-s.me/favicon-32x32.png</url>
      <title>pat-s blog</title>
      <link>https://pat-s.me/</link>
    </image>
        <item>
      <title>Granular Watch Settings for Forgejo</title>
      <link>https://pat-s.me/granular-watch-settings-forgejo/</link>
      <pubDate>Sat, 31 Jan 2026 00:00:00 +0000</pubDate>
      
      <guid>https://pat-s.me/granular-watch-settings-forgejo/</guid>
      <description><![CDATA[This is the first “feature” PR which will only be available within CodeFloe and not patched upstream to Forgejo. The reason is not make CodeFloe special or any similar reason. It’s because I’ve decided to stop contributing to Forgejo core for the foreseeable future as I don’t align with the project’s stance on the use of AI. Why that is, what happened in detail and which points of their “AI agreement” are the problem is a topic for a separate post. Given that CodeFloe will (and already) has some compelling features which Forgejo lacks, I’ll also soon start building binaries and container images for CodeFloe so it can be used as a drop-in replacement for Forgejo for anyone who wants to use it.
]]></description>
    </item>
        <item>
      <title>Launching CodeFloe</title>
      <link>https://pat-s.me/codefloe-launch/</link>
      <pubDate>Fri, 25 Jul 2025 00:00:00 +0000</pubDate>
      
      <guid>https://pat-s.me/codefloe-launch/</guid>
      <description><![CDATA[I am happy to announce the launch of CodeFloe, a public Git forge designed to combine the best of modern infrastructure with a transparent deployment process. You can find CodeFloe at codefloe.com, where it’s ready to host your projects, whether they’re private, public, commercial, or open source.
CodeFloe Logo
Link to this section  Why (yet) another Git instance? The landscape of Git forges is broad, with each platform offering its own philosophy and set of trade-offs. GitHub is the default for many, but namespace scarcity and corporate policies can be limiting. GitLab provides powerful features, but its user interface often makes even simple tasks feel cumbersome. Codeberg, meanwhile, is a fantastic FOSS-focused alternative, but its strict content policies and infrastructure limitations can make it less suitable for commercial or hybrid projects.
]]></description>
    </item>
        <item>
      <title>Benchmarking Postgres on Hetzner servers with pgbench</title>
      <link>https://pat-s.me/hetzner-pgbench/</link>
      <pubDate>Fri, 02 May 2025 00:00:00 +0000</pubDate>
      
      <guid>https://pat-s.me/hetzner-pgbench/</guid>
      <description><![CDATA[For an upcoming project, I conducted a comprehensive benchmark of Postgres on both Hetzner VMs and dedicated servers. I won’t go into a detailed analysis of the results (as I am also not a Postgres expert), but I thought sharing them here might be valuable for some of you.
Link to this section  pgbench setup # AlmaLinux 9 dnf -y module enable postgresql:16 dnf install -y postgresql-server postgresql-contrib postgresql-devel postgresql-setup --initdb systemctl start postgresql sudo -u postgres createdb pgbench_test sudo -u postgres pgbench -i -s 10 pgbench_test sudo -u postgres pgbench -c 30 -j 4 -T 120 pgbench_test # write sudo -u postgres pgbench -S -c 30 -j 4 -T 120 pgbench_test # read which results in a load of 30 parallel client connections with 4 threads for a duration of 120 seconds.
]]></description>
    </item>
        <item>
      <title>Versioning with mkdocs when not using GitHub</title>
      <link>https://pat-s.me/mkdocs-mike/</link>
      <pubDate>Wed, 09 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://pat-s.me/mkdocs-mike/</guid>
      <description><![CDATA[Mike is the go-to tool for versioning MkDocs sites. It allows you to easily manage multiple versions of your site and provides a simple way to deploy them to a static hosting service. However, mike is heavily focused on GitHub Pages, which may not be suitable for all use cases. For example, if you want to host your site on a different platform or use a different versioning strategy, it can get a bit complicated.
]]></description>
    </item>
        <item>
      <title>Integrating Umami into Astro website</title>
      <link>https://pat-s.me/integrating-umami-into-astro-website/</link>
      <pubDate>Fri, 20 Sep 2024 00:00:00 +0000</pubDate>
      
      <guid>https://pat-s.me/integrating-umami-into-astro-website/</guid>
      <description><![CDATA[There are many website analytics applications available today. Aside from the dominant but privacy-concerning Google Analytics, I have been using Umami for some time as my personal choice.
After building my company website with Astro, I wanted to integrate Umami into it. Normally, this is as simple as adding a <script></script> tag into the <head></head> section of the overall layout template.
Link to this section  Problems However, after doing that, I encountered two issues:
]]></description>
    </item>
        <item>
      <title>Installing AlmaLinux 9 on Hetzner VPS</title>
      <link>https://pat-s.me/installing-almalinux-9-on-hetzner-vps/</link>
      <pubDate>Thu, 27 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://pat-s.me/installing-almalinux-9-on-hetzner-vps/</guid>
      <description><![CDATA[ Link to this section  Background I recently ordered an AX42 VPS from Hetzner. The idea was to go with AlmaLinux 9 as the OS. When starting off, I realized Hetzner only provides installers for AlmaLinux 8.
After the first install, I upgraded to Alma 9 and quickly realized that there might be a reason for the limitations: the VPS didn’t boot properly anymore. I did some research and found that there is an issue with grub2 in AlmaLinux 9 (at least with Hetzner’s images/networking). Although Hetzner provides Alma 9 installers in general, they prevent you from installing Alma 9 when attempting to do so via installimage using their Rescue System.
]]></description>
    </item>
        <item>
      <title>Ansible - using Woodpecker as an alternative to Semaphore</title>
      <link>https://pat-s.me/ansible-using-woodpecker-as-an-alternative-to-semaphore/</link>
      <pubDate>Fri, 03 May 2024 00:00:00 +0000</pubDate>
      
      <guid>https://pat-s.me/ansible-using-woodpecker-as-an-alternative-to-semaphore/</guid>
      <description><![CDATA[Ansible can be used in many ways: most people likely execute their playbooks on their local machines. Then there is Ansible Automation Platform (AAP) (formerly Ansible Tower) and its small brother AWX. Both are the standard in larger organizations to allow for a more controlled way of running Ansible playbooks and offer RBAC capabilities. These two are also really “heavy” and require a lot of resources to run. Since some time both also require a Kubernetes backend.
]]></description>
    </item>
        <item>
      <title>Asserting container health when using docker with Ansible</title>
      <link>https://pat-s.me/asserting-container-health-when-using-docker-with-ansible/</link>
      <pubDate>Wed, 13 Mar 2024 00:00:00 +0000</pubDate>
      
      <guid>https://pat-s.me/asserting-container-health-when-using-docker-with-ansible/</guid>
      <description><![CDATA[When using Docker with Ansible, the docker_container and docker_compose modules are usually used to manage containers. While these modules work fine and provide a lot of options, the Ansible task itself will only check if this specific task was successful or not. This means it will only check for valid inputs and if the container was started or not. It will not check if the container is actually in a healthy state after starting up.
]]></description>
    </item>
        <item>
      <title>Performing Postgresql major version upgrades - in Docker</title>
      <link>https://pat-s.me/performing-postgresql-major-version-upgrades-in-docker/</link>
      <pubDate>Fri, 13 Oct 2023 00:00:00 +0000</pubDate>
      
      <guid>https://pat-s.me/performing-postgresql-major-version-upgrades-in-docker/</guid>
      <description><![CDATA[As an advocate of microservices, I am also running various PostgreSQL databases in Docker containers. This works quite well, and updating is easy. As long as one stays within the major version that was initially used when first creating the container.
However, when a major version upgrade is needed, things get a bit more complicated. PostgreSQL provides a documentation page on how to upgrade from one major version to another. It has a link to the pg_upgrade executable, which somehow combines all steps into one command. Yet it still requires a backup, having the executable installed in the first place, and so on.
]]></description>
    </item>
        <item>
      <title>Generic website pull request previews using S3 buckets</title>
      <link>https://pat-s.me/generic-website-pull-request-previews-using-s3-buckets/</link>
      <pubDate>Tue, 21 Feb 2023 00:00:00 +0000</pubDate>
      
      <guid>https://pat-s.me/generic-website-pull-request-previews-using-s3-buckets/</guid>
      <description><![CDATA[tl;dr: see the example repo and full code at the end of the post.
Pull request previews of websites are neat: they provide a direct way to inspect changes to a website before they are merged into the main branch. Yet setting up a CI/CD workflow that achieves this is not always trivial and depends on the specific CI/CD provider. This might be the main reason why people rely on Netlify for this task. Netlify does exactly this: it builds a website for each pull request and provides a link to the preview. It is easy to set up as it only requires linking a GitHub repository to Netlify. As long as the repository is public and one is okay with all other restrictions, this is a great solution. Yet, this won’t work for private repositories and repositories which do not live on GitHub.
]]></description>
    </item>
        <item>
      <title>Quarto - Metropolis theme</title>
      <link>https://pat-s.me/quarto-metropolis-theme/</link>
      <pubDate>Tue, 13 Sep 2022 00:00:00 +0000</pubDate>
      
      <guid>https://pat-s.me/quarto-metropolis-theme/</guid>
      <description><![CDATA[As a fan of the Metropolis beamer theme (by Matthias Vogelsang) I’ve created a theme port for the use within {xaringan} a few years ago (pat-s/xaringan-metropolis). Fast-forward to today, quarto is the new kid on the block when it comes to presentations in R. Recently it was time for my first presentation in the quarto era and I used the opportunity to also create a theme port of the Metropolis theme for quarto.
]]></description>
    </item>
        <item>
      <title>Announcing &#34;rcli&#34; - a command line tool to install and switch between R versions</title>
      <link>https://pat-s.me/announcing-rcli/</link>
      <pubDate>Fri, 24 Dec 2021 00:00:00 +0000</pubDate>
      
      <guid>https://pat-s.me/announcing-rcli/</guid>
      <description><![CDATA[ Table of Contents Introduction The different ways to install R across operating systems Linux macOS Windows Installing R versions with rcli Switching between R versions with rcli Installation GitHub repo: pat-s/rcli
Link to this section  Introduction Ever since I am doing R development I am missing a generic way to install any R version on the command line. “Why does one need multiple R versions?” - one might ask.
]]></description>
    </item>
        <item>
      <title>Transitioning from x86 to arm64 on macOS - experiences of an R user</title>
      <link>https://pat-s.me/transitioning-from-x86-to-arm64-on-macos-experiences-of-an-r-user/</link>
      <pubDate>Sat, 13 Nov 2021 00:00:00 +0000</pubDate>
      
      <guid>https://pat-s.me/transitioning-from-x86-to-arm64-on-macos-experiences-of-an-r-user/</guid>
      <description><![CDATA[ Table of Contents R Homebrew RStudio R packages - source installations gfortran BLAS rJava OpenMP Virtual Machines / Parallels Switching between x86_64 and arm64 R installations Kudos to Apple Update 2022-10-01: Update section listing tools for R version switching Update 2022-04-01: Update gfortran section Update 2022-02-28: Add section describing how to enable openMP support Update 2021-12-15: Add section describing how to install rJava from source Update 2021-12-06: Add section describing how to deal with rJava Update 2021-11-19: Add section mentioning new libRblas.veclib Update 2021-11-14: Removed .R suffix from .Renviron.d files Note: To avoid (questionable) third-party discussion tools, please post your thoughts and comments in an issue at https://codefloe.com/pat-s/pat-s.me/issues.
]]></description>
    </item>
        <item>
      <title>Running RStudio Server/Workbench as a desktop app on macOS</title>
      <link>https://pat-s.me/rsw-desktop-app/</link>
      <pubDate>Thu, 29 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>https://pat-s.me/rsw-desktop-app/</guid>
      <description><![CDATA[ Link to this section  Introduction In my work as an R consultant/scientist, I often work on/with RStudio Server (soon to be RStudio Workbench) instances. These have several advantages:
The workload is executed on the server and not your local machine The environment can be centrally managed for many users and prevents OS-related issues on Windows/macOS/Linux user machines Session keep running in the background even if the local machine is powered off Often RStudio Server instances are way quicker than local RStudio Desktop installations However, there is also (at least) one downside: it runs in a browser (tab). This comes with the issue that the keybindings of your browser of choice will conflict RStudio’s keybindings. Using keybindings is a great way to improve productivity and increase working experience in general, not only in RStudio.
]]></description>
    </item>
        <item>
      <title>Reproducibility of parallel tasks in R</title>
      <link>https://pat-s.me/reproducibility-when-going-parallel/</link>
      <pubDate>Mon, 11 Nov 2019 00:00:00 +0000</pubDate>
      
      <guid>https://pat-s.me/reproducibility-when-going-parallel/</guid>
      <description><![CDATA[Reproducibility is important. More important than ever. However, making a project reproducible is not as trivial as it sounds.]]></description>
    </item>
    
  </channel>
</rss>
