<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>Chris' Homepage</title>
        <link>https://chris-besch.com</link>
        <description>Christopher Besch's Homepage about Software, Articles and Photography</description>
        <lastBuildDate>Sat, 13 Jun 2026 06:55:51 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>All rights reserved 2025, Christopher Besch</copyright>
        <item>
            <title><![CDATA[Mistakes in the Docs: UART on Raspberry Pi 5 Compute Module]]></title>
            <link>/articles/raspberry_pi_5_uart</link>
            <guid isPermaLink="false">/articles/raspberry_pi_5_uart</guid>
            <pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[We have a Raspberry Pi Compute Module 5 IO Board without a monitor or network connection. How do you see what the system is doing? How to read the Linux and bootloader log? A simple answer is UART. Turns out, UART isn't so simple on the Raspberry Pi 5 and its documentation, datasheet and raspi-config is wrong in a couple of places.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/c4e11bf8da3ae1bb4763934fd622549e_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Rapid Transit Oddities]]></title>
            <link>/articles/rapid_transit_oddities</link>
            <guid isPermaLink="false">/articles/rapid_transit_oddities</guid>
            <pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[High-speed trains are fun! My significant other and I typically use them to get to our vacation destination. Once we're there, we use rapid transit to get around, e.g., bus and metro. This article is about some oddities we've experienced, being tourists on rapid transit.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/bce4df68d639a765c932a2654a94fd26_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Dabbling with Zephyr Driver Development: STM32 direct LCD Driver]]></title>
            <link>/articles/zephyr_lcd_driver</link>
            <guid isPermaLink="false">/articles/zephyr_lcd_driver</guid>
            <pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[I want to use an LCD glass on an STM32WB55RG, which has an LCD direct driver in hardware. You directly connect all LCD segment and common pins to the SoC. Because I want to use Zephyr but Zephyr doesn't have an LCD driver already, I implemented one myself.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/f0250cbd20877aba769128cf3a075d0d_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[React without a Framework]]></title>
            <link>/articles/no_framework_homepage</link>
            <guid isPermaLink="false">/articles/no_framework_homepage</guid>
            <pubDate>Sat, 03 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Reimplementing my homepage without a framework made me more flexible and independant. I only rely on React, TypeScript and Node.js to generate a static HTML+CSS website.
Also, it has been a lot of fun!]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/a26b14d67a4aa15f4bd06b01fff6bade_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Automatic Firmware Generation for Spaceflight Hardware based on Schematics]]></title>
            <link>/articles/kicad_firmware_generation.pdf</link>
            <guid isPermaLink="false">/articles/kicad_firmware_generation.pdf</guid>
            <pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Any satellite's Power Conditioning and Distribution Unit (PCDU) fulfills the same purpose, providing the subsystems with electrical power. However, because each satellite has a unique set of subsystems, differing PCDUs must realize differing power distributions. How do you efficiently develop firmware for such similar hardware?
One approach is to group components and their PCB layout into a snippet, e.g., an Analog to Digital Converter (ADC) with supportive components. Each PCDU can reuse the same snippets arranged differently to create different power distributions. While this drastically speeds up the hardware design process, previous works failed at translating this speedup to the firmware development process.
We propose the Group Netlist, a novel representation of the logical functions of hardware. This machine-readable file format enables automatic firmware generation while remaining agnostic to both programming-language and schematics editor. The electrical engineer annotates the schematics to produce not just the PCB layout but also the Group Netlist.
Contrary to initial expectations, we show that the Group Netlist has uses beyond firmware generation. This includes but is not limited to harness specification and snippet based design analysis. We provide the reference implementation kicad_firmware_generation as a ready-to-use product for different projects even outside space-exploration.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/0169e84fd832065b026f89151e46a407_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Forgejo Actions Notification Development]]></title>
            <link>/articles/forgejo_actions_notification</link>
            <guid isPermaLink="false">/articles/forgejo_actions_notification</guid>
            <pubDate>Thu, 20 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Some stories of how I work on Forgejo. How is a Go project structured? What's the point of Forgejo's layered architecture and what's that pub-sub pattern? Additionally, I exhaustively explain how to setup a development environment for Forgejo.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/75e7dd6865f7b8d52489a1f1368ebbef_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Don't forget about the Option Bytes]]></title>
            <link>/articles/soc_option_bytes</link>
            <guid isPermaLink="false">/articles/soc_option_bytes</guid>
            <pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[What's the reason for a watchdog taking 23 times as long to reset the device? It turns out the Flash Option Bytes are. And a mass erase doesn't reset those.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/65158fab048e94e71f5e6129d4ef688d_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Why I love Open-Source]]></title>
            <link>/articles/open_source</link>
            <guid isPermaLink="false">/articles/open_source</guid>
            <pubDate>Sat, 11 Oct 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[We all live in a world of immensely complex technology. The concept of Open-Source might seem radical at first but it's indispensable in our world. Regardless if you are a user, developer or simply interested in a healthy society, you benefit from Open-Source and we should fight for every bit of it. Open-Source is a quality mark, a form of democracy and ownership, capitalism at its best and thus the response to this world, a world in which software exists. This article gets to that conclusion without requiring any prior technical knowledge.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/e5fdc90ab34ba9a541ab0d11b75e02de_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[The History of Forgejo's Pub-Sub Pattern]]></title>
            <link>/articles/forgejo_pub_sub_pattern_history</link>
            <guid isPermaLink="false">/articles/forgejo_pub_sub_pattern_history</guid>
            <pubDate>Thu, 30 Oct 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[I created a tool to visualize Forgejo's Pub-Sub pattern. Why not run that tool on all 24 thousand commits in Forgejo's history? What could possibly go wrong?]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/a7f291280fadb4822ddaf7ed36c95bf8_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[When You Don't Take the Shot]]></title>
            <link>/articles/photo_abilities</link>
            <guid isPermaLink="false">/articles/photo_abilities</guid>
            <pubDate>Wed, 10 Dec 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[I list the things I realized to improve my photos. There are the technical abilities (equipment, exposure, post processing, ...) and the surrounding conditions (time, location, ...). And sometimes, photography means letting the shutter rest.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/649107d285c96dd4c9b87ed2f0084b53_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[The Bitter Feeling of Technical Compromises]]></title>
            <link>/articles/technical_compromises</link>
            <guid isPermaLink="false">/articles/technical_compromises</guid>
            <pubDate>Thu, 25 Sep 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[My very personal troubles dealing with compromises, explained at an example of docker_cron with Renovate.
Sometimes you really don't have to worry as much and trust your previous, careful considerations.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/3548ef292f5ade7df6bc737602d59bd8_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[The Photographer and her Camera]]></title>
            <link>/articles/the_photographer_and_her_camera</link>
            <guid isPermaLink="false">/articles/the_photographer_and_her_camera</guid>
            <pubDate>Sat, 22 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[I bought a new, bigger camera and want to be independent of it.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/54a145d113acd5aed9dd5a5e3e9ff082_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Guided Missiles in Minecraft]]></title>
            <link>/articles/mc_missile</link>
            <guid isPermaLink="false">/articles/mc_missile</guid>
            <pubDate>Fri, 06 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[I'm having a stab at designing an enitity seeking missile in Minecraft with the mc_missile mod.
Or: How I blew up my brother.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/e504095a9b565988179fa2df918ae18c_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[grub-install --removable for buggy UEFI]]></title>
            <link>/articles/grub_install_removable</link>
            <guid isPermaLink="false">/articles/grub_install_removable</guid>
            <pubDate>Fri, 08 Nov 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Install Debian on a device with a broken NVRAM.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/5c5afcd8efd6183c56c8c807a694a48f_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Docker: Breathing Life into Decades old Fortran]]></title>
            <link>/articles/ctemsoft</link>
            <guid isPermaLink="false">/articles/ctemsoft</guid>
            <pubDate>Sun, 06 Apr 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Bringing decades old Fortran code to life with Docker and animating it with Python.
Now you get to see Fig.3.5. from "Introduction to Conventional Transmission Electron Microscopy" by Prof. Marc De Graef at 30 frames a second.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/c5fde5a326c6a0b5e07c470ffda1eb59_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Bodging MP3 Names in Bash]]></title>
            <link>/articles/bash_cmds/mp3_tag</link>
            <guid isPermaLink="false">/articles/bash_cmds/mp3_tag</guid>
            <pubDate>Wed, 12 Oct 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[Why do it complicated when a Bash one-liner does it too?]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/5c491b010e8b22c6ffd20605f69d322f_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Installing Gentoo To My Liking]]></title>
            <link>/articles/installing_gentoo</link>
            <guid isPermaLink="false">/articles/installing_gentoo</guid>
            <pubDate>Tue, 26 Apr 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[Gentoo is a Linux distribution that offers as many options as possible. This article leads you through the decisions I took to end up with a system that best suits my needs.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/dd509c81379268c048ef45318173ad70_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Real-Time Application Development on Linux with PREEMPT RT]]></title>
            <link>/articles/rt_on_linux.pdf</link>
            <guid isPermaLink="false">/articles/rt_on_linux.pdf</guid>
            <pubDate>Mon, 29 Sep 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[While Linux is optimized for throughput and efficiency, real-time applications require bounded worst case latencies. However, with the merging of PREEMPT RT, mainline Linux converts to a real-time operating system (RTOS). Through presenting the application developer’s perspective and the changes PREEMPT RT introduces to the kernel, we review Linux’ real-time capabilities. Additionally, we investigate dynamic worst case execution time (WCET) analysis using a StarFive VisionFive 2 as a case study. Finally, we compare Linux to other RTOSes and argue that the lack of static WCET analysis is Linux’ main drawback for real-time applications.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/90aa1c30ead3a00608bd83478b9f3b84_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Real-Time Linux on RISC-V]]></title>
            <link>/articles/riscv_rt</link>
            <guid isPermaLink="false">/articles/riscv_rt</guid>
            <pubDate>Fri, 27 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Setting up Linux v6.12 on a StarFive VisionFive 2 with PREEMPT_RT.
Also: How to setup your Linux laptop as a simple NAT router.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/e85afd024262b6186553d361a5908877_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Saving Time with Tests]]></title>
            <link>/articles/testing</link>
            <guid isPermaLink="false">/articles/testing</guid>
            <pubDate>Wed, 14 May 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Using tests not to increase quality but to more quickly get things done.
Or: How I started to enjoy writing tests.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/4645af088304bd562c94708123e688f3_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[reveal.js your Presentation]]></title>
            <link>/articles/revealjs</link>
            <guid isPermaLink="false">/articles/revealjs</guid>
            <pubDate>Fri, 24 Jun 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[reveal.js is a PowerPoint alternative. With it you programmatically define your presentation via HTML.
This article shows how you can use reveal.js for your own presentation.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/90f1af0c0e4970e8cf923a375c719169_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[LunarVim in Distrobox]]></title>
            <link>/articles/lvim_in_distrobox</link>
            <guid isPermaLink="false">/articles/lvim_in_distrobox</guid>
            <pubDate>Tue, 25 Oct 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[You're missing that one program that isn't available in your Linux distro? With Distrobox, the 'Linux Subsystem for Linux,' you can install it anyways. This article explains how to do that with the example of installing LunarVim on Red Hat.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/7b55476245f182a8e9f9b7e91efbb1a6_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Inject Fonts into Web SVGs with sed]]></title>
            <link>/articles/svg_fonts_with_sed</link>
            <guid isPermaLink="false">/articles/svg_fonts_with_sed</guid>
            <pubDate>Mon, 10 Feb 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Add font-loading CSS to SVGs with a sed script.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/f59a7f43e2f2a641d46f9fd994b5589c_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[How my GitHub Pages got Hacked]]></title>
            <link>/articles/github_pages_hack</link>
            <guid isPermaLink="false">/articles/github_pages_hack</guid>
            <pubDate>Sat, 18 Oct 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[A DNS forward is an expression of trust. GitHub broke my trust and someone else received control over my domain.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/2429205e42d7ecf6646d20aea86a90ce_800_400.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Maki, Atoms and Time Travel]]></title>
            <link>/articles/maki_atoms_and_time_travel</link>
            <guid isPermaLink="false">/articles/maki_atoms_and_time_travel</guid>
            <pubDate>Sun, 06 Feb 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[Maki showcases how a program for interactive and programmatic animation development can be implemented.
Its programmatic approach provides the precision technical concepts require, while its interactivity and real-time updates avoid a disconnect between input and output.]]></description>
            <author>mail@chris-besch.com (Christopher Besch)</author>
            <enclosure url="https://chris-besch.com/images/ec9e9265791849f80f7f7e1d76995206_800_400.webp" length="0" type="image/webp"/>
        </item>
    </channel>
</rss>