<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="https://johanneskinzig.com/sitemap.xsl"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<url>
<loc>https://johanneskinzig.com/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/about-me-johannes-kinzig.html</loc>
<lastmod>2026-02-22T11:02:06+01:00</lastmod>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/1/johanneskinzig-my-setup.jpg</image:loc>
<image:title><![CDATA[Me, coding one of my apps in the office I’ve always dreamed of.]]></image:title>
</image:image>
</url>
<url>
<loc>https://johanneskinzig.com/authors/johannes-kinzig/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/authors/johannes-kinzig/page/2/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/authors/johannes-kinzig/page/3/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/authors/johannes-kinzig/page/4/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/automating-docc-deployment-with-a-shell-script.html</loc>
<lastmod>2026-02-19T13:48:25+01:00</lastmod>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/23/docc-deployment-script.png</image:loc>
<image:title><![CDATA[A basic illustration describing the build, static-hosting-conversion and web-publishing procedure for DocC based documentation.]]></image:title>
</image:image>
</url>
<url>
<loc>https://johanneskinzig.com/automating-pyinstaller-builds-and-code-signing-with-powershell.html</loc>
<lastmod>2026-02-19T13:48:07+01:00</lastmod>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/25/pyinstaller-code-signing-on-windows-with-powershell-titleimage.png</image:loc>
<image:title><![CDATA[Title image showing a large checkmark, next to it an ready-to-run application symbolized by a square containing the letters ".exe".]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/25/gallery/my-python-on-windows-project-structure.png</image:loc>
<image:title><![CDATA[Windows Explorer showing my Python on Windows project structure]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/25/gallery/run-from-explorer.png</image:loc>
<image:title><![CDATA[Windows Explorer showing the "build2app" folder with context menu over the PowerShell script.]]></image:title>
</image:image>
</url>
<url>
<loc>https://johanneskinzig.com/benchmarking-opencvs-lbph-face-recognition-algorithm-study-related-research-publication.html</loc>
<lastmod>2025-01-29T19:10:18+01:00</lastmod>
</url>
<url>
<loc>https://johanneskinzig.com/building-a-secure-pki-for-mqtt-using-openssl-root-ca-intermediate-ca-and-server-certificates.html</loc>
<lastmod>2026-03-22T14:02:59+01:00</lastmod>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/27/building-a-secure-pki-mqtt-johanneskinzig-titleimage.png</image:loc>
<image:title><![CDATA[Designing a Modern PKI for MQTT with OpenSSL (EC, RSA, and Certificate Chains)]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/27/thingsboard-config.png</image:loc>
<image:title><![CDATA[ThingsBoard CE config file on an Ubuntu 24.04 Server]]></image:title>
</image:image>
</url>
<url>
<loc>https://johanneskinzig.com/conference-publications-inc-2016.html</loc>
<lastmod>2025-01-29T19:45:38+01:00</lastmod>
</url>
<url>
<loc>https://johanneskinzig.com/cronjob-and-python-virtualenv.html</loc>
<lastmod>2026-03-22T13:53:33+01:00</lastmod>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/26/python-cron-titleimage-2.png</image:loc>
<image:title><![CDATA[Illustration and simple explanation of a cron config file]]></image:title>
</image:image>
</url>
<url>
<loc>https://johanneskinzig.com/design-and-implementation-of-a-remote-keyless-entry-system.html</loc>
<lastmod>2025-01-29T19:12:52+01:00</lastmod>
</url>
<url>
<loc>https://johanneskinzig.com/fingerprint-authentication-with-ubuntu-2404-on-my-hp-envy-notebook.html</loc>
<lastmod>2026-03-22T14:02:42+01:00</lastmod>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/24/HP-envy-notebook-keyboard-with-fingerprint-scanner.jpg</image:loc>
<image:title><![CDATA[My HP Envy Notebook keyboard with integrated fingerprint reader]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/24/lsusb.png</image:loc>
<image:title><![CDATA[lsusb shows the integrated fingerprint scanner device type]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/24/gnome-settings.png</image:loc>
<image:title><![CDATA[Fingerprint scanner now successfully recognized by the system]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/24/pam-enable-fingerprint.png</image:loc>
<image:title><![CDATA[Enable fingerprint as authentication method in PAM]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/24/sudo-after-pam-enabled-fingerprint.png</image:loc>
<image:title><![CDATA[Now `sudo` first asks for your fingerprint instead of password]]></image:title>
</image:image>
</url>
<url>
<loc>https://johanneskinzig.com/how-to-set-up-ubuntu-linux-as-a-secure-kiosk-or-self-service-terminal.html</loc>
<lastmod>2025-09-30T21:30:15+02:00</lastmod>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/21/linux-kiosk-self-service-terminal-2.jpg</image:loc>
<image:title><![CDATA[Person at the airport, checking-in by using a self-service terminal]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/21/commercially-available-touch-pc.JPG</image:loc>
<image:title><![CDATA[Commercially available Touch PC running Ubuntu Linux 24.04 LTS]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/21/gallery/restore_ac_on_power_loss.jpeg</image:loc>
<image:title><![CDATA[UEFI / BIOS Configuration: Restart PC on AC power loss ]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/21/gallery/manual-interactive-installation.png</image:loc>
<image:title><![CDATA[Ubuntu installer - interactive (manual) installation selected]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/21/gallery/disk-setup-manual-installation.png</image:loc>
<image:title><![CDATA[Ubuntu installer - select manual disk partitioning]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/21/gallery/manual-partitioning.png</image:loc>
<image:title><![CDATA[Ubuntu installer - define custom partitioning table]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/21/gallery/create-your-account-kiosk.png</image:loc>
<image:title><![CDATA[Set up kiosk user and enable automatic user login]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/21/gallery/lockscreen-inactive.png</image:loc>
<image:title><![CDATA[Screen Lock settings screen in Ubuntu 24.04 on our Touch PC]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/21/gallery/account-services-config-location.png</image:loc>
<image:title><![CDATA[Ubuntu / GNOME AccountServices session configuration file is about to be opened in nano.]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/21/gallery/session-config-gnome-ubuntu-default.png</image:loc>
<image:title><![CDATA[Ubuntu / GNOME AccountServices session configuration file with default config.]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/21/gallery/session-config-gnome-wayland-kiosk.png</image:loc>
<image:title><![CDATA[Ubuntu / GNOME AccountServices session configuration file with GNOME kiosk session enabled.]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/21/gallery/ubuntu-gnome-kiosk-first-start.png</image:loc>
<image:title><![CDATA[GNOME kiosk started for the first time showing its own configuration inside gnome-text-editor.]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/21/gallery/firefox-kiosk-prepare-command.png</image:loc>
<image:title><![CDATA[Starting Firefox with its own kiosk command from terminal]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/21/gallery/firefox-reading-kiosk.png</image:loc>
<image:title><![CDATA[The medium.com homepage displayed through our Firefox reading kiosk]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/21/gallery/ubuntu-gnome-kiosk-script-with-firefox.png</image:loc>
<image:title><![CDATA[GNOME Kiosk session script opening Firefox in kiosk mode and browsing to medium.com]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/21/gallery/firefox-reading-kiosk-2.png</image:loc>
<image:title><![CDATA[Firefox running in kiosk mode powered by GNOME kiosk session.]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/21/gallery/overlayfs-enabled.png</image:loc>
<image:title><![CDATA[OverlayFS enabled on Ubuntu Linux, df -h shows the current partitioning table]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/21/gallery/ssh-into-overlayroot-enabled-system.png</image:loc>
<image:title><![CDATA[ssh-ing into an Ubuntu with overlayroot enabled: the welcome message informs you about OverlayFS being active.]]></image:title>
</image:image>
</url>
<url>
<loc>https://johanneskinzig.com/inspecting-userdefaults-on-the-ios-simulator-where-to-find-the-plist-file.html</loc>
<lastmod>2026-02-19T13:50:48+01:00</lastmod>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/16/user-defaults-iOS-Simulator-title-image-2.jpeg</image:loc>
<image:title><![CDATA[Tablet-PC sized Smartphone showing lots of apps.]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/16/app-group-identifier.png</image:loc>
<image:title><![CDATA[Xcode showing a project with the app group and bundle identifier being set]]></image:title>
</image:image>
</url>
<url>
<loc>https://johanneskinzig.com/lets-connect.html</loc>
<lastmod>2025-05-11T13:12:31+02:00</lastmod>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/10/connect-johannes-kinzig.png</image:loc>
<image:title><![CDATA[Connect with Johannes, graphically shown as a letter and a speech bubble]]></image:title>
</image:image>
</url>
<url>
<loc>https://johanneskinzig.com/page/2/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/page/3/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/page/4/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/port-forwarding-with-xinetd-a-flexible-solution-on-linux.html</loc>
<lastmod>2026-02-19T13:51:11+01:00</lastmod>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/15/xinetd-portforwarding-illustration-johannes.jpeg</image:loc>
<image:title><![CDATA[An abstract picture showing computers and servers which are connected. In between is sitting a xinetd process forwarding requests on port 443 to a server running on port 8443]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/15/xinetd-port-forwarding.drawio-2.png</image:loc>
<image:title><![CDATA[Diagram showing the xinetd configuration which is forwarding traffic from external port 443 to a process listening on localhost:8443]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/15/xinetd-config-in-nano-johanneskinzig.png</image:loc>
<image:title><![CDATA[Editing xinetd config in nano to configure external port forwarding from 443 to localhost:8443]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/15/gallery/etc-services-ubuntu-johanneskinzig.png</image:loc>
<image:title><![CDATA[/etc/services with our newly added service (powered by our xinetd config added above)]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/15/gallery/ss-tulpn-johanneskinzig-2.png</image:loc>
<image:title><![CDATA[sudo ss -tulpn | grep 443 - output showing our xinetd process which is running according to our configuration provided above]]></image:title>
</image:image>
</url>
<url>
<loc>https://johanneskinzig.com/robust-string-to-double-casting-in-swift.html</loc>
<lastmod>2025-07-26T00:15:56+02:00</lastmod>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/12/string-to-double-conversion-playground.png</image:loc>
<image:title><![CDATA[Xcode playground showing string to double casting and returning an optional]]></image:title>
</image:image>
</url>
<url>
<loc>https://johanneskinzig.com/running-a-python-kivy-app-as-main-kiosk-application.html</loc>
<lastmod>2025-07-13T17:59:00+02:00</lastmod>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/22/commercially-available-touch-pc.JPG</image:loc>
<image:title><![CDATA[Commercially available Touch PC running Ubuntu Linux 24.04 LTS]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/22/kivy_kiosk_clock_app.jpeg</image:loc>
<image:title><![CDATA[KivyKioskClock running in fullscreen on the Touch PC]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/22/gallery/pyinstaller_output_kivy_kiosk_clock.png</image:loc>
<image:title><![CDATA[KivyKioskClock's project folder after pyinstaller finished, Terminal output generated using tree]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/22/gallery/python3-compileall-pycompile.png</image:loc>
<image:title><![CDATA[Using python3 compileall module to compile a project to *.pyc bytecode files]]></image:title>
</image:image>
</url>
<url>
<loc>https://johanneskinzig.com/simple-wrapper-around-the-default-keychain-api-simplekiimanager.html</loc>
<lastmod>2025-09-29T21:29:17+02:00</lastmod>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/19/simplekiimanager.png</image:loc>
<image:title><![CDATA[A smartphone, tablet and desktop computer – the computer is showing a lock on its screen.]]></image:title>
</image:image>
</url>
<url>
<loc>https://johanneskinzig.com/swift-asyncawait-vs-async-let-a-practical-cheat-sheet.html</loc>
<lastmod>2026-02-19T13:49:28+01:00</lastmod>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/20/async-let-vs-await-featured-image.png</image:loc>
<image:title><![CDATA[async/await vs. async let]]></image:title>
</image:image>
</url>
<url>
<loc>https://johanneskinzig.com/tags/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/tags/archive/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/tags/iot/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/tags/johannes-apps/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/tags/linux/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/tags/macos/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/tags/my-libs/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/tags/networking/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/tags/open-source/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/tags/python/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/tags/research/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/tags/snippets/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/tags/software-engineering/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/tags/software-engineering/page/2/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/tags/swift/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/tags/windows/</loc>
</url>
<url>
<loc>https://johanneskinzig.com/tbrestclientlib.html</loc>
<lastmod>2026-02-19T13:51:44+01:00</lastmod>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/11/rest-client-library-swift-thingsboard.png</image:loc>
<image:title><![CDATA[TBRESTClientLib – an abstract picture showing computers, smartphones, tablet PCs and smart devices being interconnected]]></image:title>
</image:image>
</url>
<url>
<loc>https://johanneskinzig.com/the-ontology-engineering-process-study-related-research-publication.html</loc>
<lastmod>2025-01-28T21:27:24+01:00</lastmod>
</url>
<url>
<loc>https://johanneskinzig.com/tinytbdeviceclient.html</loc>
<lastmod>2026-03-22T14:04:00+01:00</lastmod>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/28/TinyTBDeviceClient-title-image.png</image:loc>
<image:title><![CDATA[Title image for TinyTBDeviceClient, showing a Raspberry Pi client device connected to a ThingsBoard server with an IoT dashboard in the background. A glowing padlock indicates a secure connection.]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/28/thingsboard-screenshot-dashboard.png</image:loc>
<image:title><![CDATA[My ThingsBoard sample Dashboard for my TinyTBDeviceClient reference implementation]]></image:title>
</image:image>
</url>
<url>
<loc>https://johanneskinzig.com/websmoni-keep-an-eye-on-your-web-servers-with-one-simple-app.html</loc>
<lastmod>2025-09-25T18:31:11+02:00</lastmod>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/17/WebSMoni-Titlepage.png</image:loc>
<image:title><![CDATA[WebSMoni - Webserver Monitoring App shown on an iPhone 14 - App developed by Johannes Kinzig]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/17/WebSMoni-server-list-details-success-2.png</image:loc>
<image:title><![CDATA[Web server list and web server monitoring details view shown in dark mode on an iPhone 14]]></image:title>
</image:image>
<image:image>
<image:loc>https://johanneskinzig.com/media/posts/17/WebSMoni-server-status-logs-list-2.png</image:loc>
<image:title><![CDATA[Web server status log list – each check is logged and stored on device showing: status, status code, date and response time, display on an iPhone 14]]></image:title>
</image:image>
</url>
</urlset>