Compare commits

...

13 Commits

15 changed files with 368 additions and 11 deletions

View File

@ -0,0 +1,41 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/docker-existing-docker-compose
{
"name": "Existing Docker Compose (Extend)",
// Update the 'dockerComposeFile' list if you have more compose files or use different names.
// The .devcontainer/docker-compose.yml file contains any overrides you need/want to make.
"dockerComposeFile": [
"../docker-compose.yml",
"docker-compose.yml"
],
// The 'service' property is the name of the service for the container that VS Code should
// use. Update this value and .devcontainer/docker-compose.yml to the real service name.
"service": "server",
// The optional 'workspaceFolder' property is the path VS Code should open by default when
// connected. This is typically a file mount in .devcontainer/docker-compose.yml
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}"
// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},
// Use 'forwardPorts' to make a list of ports inside the container available locally.>
// "forwardPorts": [],
// Uncomment the next line if you want start specific services in your Docker Compose config.
// "runServices": [],
// Uncomment the next line if you want to keep your containers running after VS Code shuts down.
// "shutdownAction": "none",
// Uncomment the next line to run commands after the container is created.
// "postCreateCommand": "cat /etc/os-release",
// Configure tool-specific properties.
// "customizations": {},
// Uncomment to connect as an existing user other than the container default. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "devcontainer"
}

View File

@ -0,0 +1,26 @@
version: '3.8'
services:
# Update this to the name of the service you want to work with in your docker-compose.yml file
server:
# Uncomment if you want to override the service's Dockerfile to one in the .devcontainer
# folder. Note that the path of the Dockerfile and context is relative to the *primary*
# docker-compose.yml file (the first in the devcontainer.json "dockerComposeFile"
# array). The sample below assumes your primary file is in the root of your project.
#
# build:
# context: .
# dockerfile: .devcontainer/Dockerfile
volumes:
# Update this to wherever you want VS Code to mount the folder of your project
- ..:/workspaces:cached
# Uncomment the next four lines if you will use a ptrace-based debugger like C++, Go, and Rust.
# cap_add:
# - SYS_PTRACE
# security_opt:
# - seccomp:unconfined
# Overrides default command so things don't shut down after the process ends.
# command: sleep infinity

12
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,12 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for more information:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
# https://containers.dev/guide/dependabot
version: 2
updates:
- package-ecosystem: "devcontainers"
directory: "/"
schedule:
interval: weekly

View File

@ -13,7 +13,7 @@ pygmentsUseClasses = true
rssLimit = 10
copyright = "2024 Daniel Kraus"
copyright = "2024-2025 Daniel Kraus"
enableEmoji = true
[permalinks]

View File

@ -22,16 +22,25 @@ calculator back in the 1980's.
### [ggap-ev.org](https://ggap-ev.org)
GGAP is a registered charity in Germany. This NGO uses donated money to fund the
vocational training of young adults on the Philippines who would otherwise have
to "earn" their living in an unlawful way.
{{< figure src="ggap-ev.png">}}
### [nephrowiki.de](https://nephrowiki.de)
NephroWiki is a closed wiki system that has been up and running since 2011.
{{< figure src="nephrowiki.png">}}
## Portfolio -- software
### [Daniel's XL Toolbox](https://xltoolbox.net)
Daniel's XL Toolbox is an add-in for Excel that assists with data analysis
and visualization.
{{< figure src="xltoolbox.png">}}
Even though I haven't been able to work on this project for quite some time,
@ -50,7 +59,7 @@ reference articles from [Pubmed](https://pubmed.gov) by PMID.
### Github Star History
[![Star History Chart](https://api.star-history.com/svg?repos=bovender/LinkTitles,bovender/xltoolbox,bovender/pubmedparser&type=Date)](https://star-history.com/#bovender/LinkTitles&bovender/xltoolbox&bovender/pubmedparser&Date)
[![Star History Chart][sh-img]][sh-link]
## Server administration
@ -59,3 +68,7 @@ This includes running a mail and an IMAP server, hosting my own
[Nextcloud](https://nextcloud.com) and [Gitea](https://gitea.io) instances,
[Mastodon for Nephrology](https://neph.social)
and more. Almost all of my services are dockerized.
[sh-img]: https://api.star-history.com/svg?repos=bovender/linktitles,bovender/pubmedparser,bovender/imapcli,bovender/xltoolbox&type=Date
[sh-link]: https://www.star-history.com/#bovender/linktitles&bovender/pubmedparser&bovender/imapcli&bovender/xltoolbox&Date

View File

@ -3,15 +3,16 @@ title: "Impressum und Datenschutz"
date: 2024-07-31T12:42:53Z
draft: false
---
Dr. Daniel Kraus
H&zwnj;ö&zwnj;hen&zwnj;str&zwnj;aße 1&zwnj;5
65451 K&zwnj;e&zwnj;l&zwnj;s&zwnj;t&zwnj;e&zwnj;r&zwnj;b&zwnj;a&zwnj;c&zwnj;h
Tel. (0 61 07&zwnj;) 7 5&zwnj;6 88 4&zwnj;0
<bovender@bovender.de>
Mail: <bovender@bovender.de>
Ich bitte, von Anrufen abzusehen. Über Mail oder die verlinkten
sozialen Netzwerke (siehe Icons) bin ich i.d.R. kurzfristig
Ladungsfähige Anschrift bei meinem Arbeitgeber: Unimedizin Mainz, Langenbeckstr.
1, 55131 Mainz. Dies ist eine rein private Homepage und in keiner Weise von
meinem Arbeitgeber beworben oder unterstützt. Meine Privatanschrift ist zu
meinem persönlichen Schutz und dem Schutz meiner Familie hier nicht
veröffentlicht. **Ich bitte, von Anrufen abzusehen.** Über Mail oder die
verlinkten sozialen Netzwerke (siehe Icons) bin ich i.d.R. kurzfristig
erreichbar.
## Mailserver bovender.de

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

View File

@ -0,0 +1,58 @@
---
title: Install pynitrokey on Fedora 41
description: Here's how I installed pynitrokey on my Fedora 41 KDE laptop, resolving missing dependencies.
date: 2025-03-30T10:53:35+0100
draft: false
# ShowLastmod: true
toc: false
scrolltotop: true
images: []
tags:
- security
- Linux
- Fedora
---
{{< figure src="IMGP0069.jpg"
alt="My Nitrokey 3A mini"
title="My Nitrokey 3A mini on the right side of the picture" >}}
I use [Yubikey][]s and [Nitrokey][]s as a second factor during 2FA
authentication.
My experiences with Nitrokey devices have been mixed. Currently my 3A mini
stopped working. I wanted to investigate what's going on, only to find out that
the commandline tool `nitropy` no longer worked on my machine either! :-(
Here's how I got it to work again. I'm a Python noob, so maybe there's a better
way to install the dependencies. The operating system is Fedora 41.
```bash
sudo dnf install systemd-devel python3-devel
pipx install pynitrokey
```
Afterwards I was greeted with this:
```text
$ nitropy nk3 test
Command line tool to interact with Nitrokey devices 0.8.1
Critical error:
No connected NK3 devices found
--------------------------------------------------------------------------------
Critical error occurred, exiting now
Unexpected? Is this a bug? Would you like to get support/help?
- You can report issues at: https://support.nitrokey.com/
- Writing an e-mail to support@nitrokey.com is also possible
- Please attach the log: '/tmp/nitropy.log._p6mpa3e' with any support/help request!
- Please check if you have udev rules installed: https://docs.nitrokey.com/nitrokeys/nitrokey3/firmware-update#troubleshooting-linux
```
I made sure that I had the abovementioned `udev` rules in place. The key is not
detected by any system, be it my personal Linux laptop or any Windows machine
that I could access. [D'oh][]!
[Nitrokey]: https://www.nitrokey.com
[Yubikey]: https://www.yubico.com
[d'oh]: https://en.wikipedia.org/wiki/D'oh!

View File

@ -0,0 +1,80 @@
---
title: "[In German] USB-Sticks in den Fotostationen von dm"
description:
date: 2025-03-22T22:20:07+0100
draft: false
# ShowLastmod: true
toc: false
scrolltotop: true
images: []
tags:
- German
---
(This post is in German.)
In den letzten Wochen habe ich ein paar Mal Fotoabzüge benötigt und bin mit
einem USB-Stick zur örtlichen Drogerie. Zu meiner Überraschung konnten keinerlei
Bilder auf dem Stick gefunden werden. Inzwischen habe ich das mit mehreren
Sticks und an verschiedenen Foto-Stationen (aber immer in demselben Laden)
probiert, Fehlanzeige. Interessanterweise hat es mit einer SD-Karte problemlos
geklappt.
Offenbar bin ich weder der erste noch der einzige, der dieses Problem schon
einmal hatte, es gibt zu einem ähnlichen Problem mit einer CEWE-Fotostation
einen [Forumsthread][].
In diesem Blog-Beitrag sammele ich einfach mal meine Beobachtungen, vielleicht
hilft es ja einmal jemandem. Von Mal zu Mal werde ich dies updaten.
## Beispiele für "geht" und "geht nicht"
Ich hatte zuletzt zwei Speichermedien dabei, einen USB-Stick und eine SD-Karte:
```plain
$ lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sda
└─sda1 exfat 1.0 [REDACTED] E7F3-FDF9 114,5G 0% /run/media/daniel/[REDACTED]
sdb
└─sdb1 exfat 1.0 7FDE-A701 119G 0% /run/media/daniel/7FDE-A701
```
`sda` ist ein USB-Stick, den ich häufig in anderen Zusammenhängen im Einsatz
habe. `sdb` ist eine ältere SD-Karte. Beide haben nominell 128 GB Kapazität, und
beide haben eine Partitionstabelle im herkömmlichen MSDOS-Format und eine
Primärpartition, die mit dem Dateisystem EXFAT formatiert ist. Das Dateisystem
auf dem USB-Stick hat ein Label, welches aus wenigen Buchstaben ohne
Sonderzeichen besteht.
Auf beiden Speichermedien hatte ich denselben Foto-Ordner kopiert, mit etwa
einer Handvoll Fotos. Die Bilder lagen also auf beiden Medien in einem
Unterorder.
**Interessanterweise wurden die Bilder auf der SD-Karte gefunden, die Bilder auf
dem USB-Stick jedoch nicht.**
Hier meine Beobachtungen im einzelnen, denn entsprechende Überlegungen findet
man auch im Netz:
### Dateisystem
Bevor ich es sowohl mit dem Stick als auch mit der SD-Karte probierte, habe ich
folgende Dateisysteme auf dem USB-Stick ausprobiert:
- EXFAT
- FAT32
Mit beiden Dateisystemen wurden keine Bilder gefunden.
### Root-Verzeichnis vs. Unterverzeichnis
Es hat keinen Unterschied gemacht, ob ich die Bilder (JPG-Dateien) im
Wurzelverzeichnis oder in einem Unterordner auf dem Stick hatte.
### Verschiedene Terminals
Ich habe meinen USB-Stick an verschiedenen Foto-Terminals ausprobiert, an keinem
von ihnen wurden die Bilder gefunden.
[Forumsthread]: https://www.cewe-community.com/forum/fb/viewtopic.php?t=13036&p=135162

View File

@ -115,5 +115,13 @@ If it doesn't, but instead complains along the lines of
then there is something wrong.
---
## Addendum 2025-04-17
Yesterday I upgraded from Fedora 41 to Fedora 42 (KDE), and of course the NVIDIA
drivers were removed. Using the instructions above effortlessly installed the
driver (currently version 570). :-)
[Darktable]: https://www.darktable.org
[RPM fusion]: https://rpmfusion.org

Binary file not shown.

After

Width:  |  Height:  |  Size: 584 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 KiB

View File

@ -0,0 +1,116 @@
---
title: "Soleier: Pickled eggs for Easter"
description: >
Pickled eggs "Soleier" are a favorite Easter tradition in my
family. Here's my personal recipe.
date: 2025-04-17T17:55:07+02:00
draft: false
# ShowLastmod: true
toc: false
scrolltotop: true
images: []
tags:
- recipes
---
My family has a long-running tradition of producing pickled eggs for Easter
breakfast. We call these "Soleier" which is a composite of "Sole" (brine) and
"Eier" (eggs). Varous theories exist how pickled eggs came into existence, and
there are various ways to relish these eggs. As for the theories, the reader is
kindly referred to the [Wikipedia article][pickled eggs]
(also [in German][Soleier]).
As for the recipe and the way we eat pickled eggs in my family: read on.
{{< figure src="20250414_203010.jpg"
alt="My 2025 Soleier preparation."
caption="My 2025 Soleier preparation. Smartphone raw image file edited with darktable."
>}}
## How many eggs?
How many eggs you want to prepare depends on the number of people who want to
eat the pickled eggs, the number of days you want to have them for breakfast (or
any other meal to your liking) and last, but not least, what size of jar you
have to prepare them in.
My 1.5 L [Weck jar][] holds 13 medium-sized eggs.
Typically an adult will have 2 of those eggs for breakfast. With 13 eggs, this
leaves one spare egg (and toast), but there's usually a kid or two who doesn't
eat these eggs in pairs (if at all).
{{< figure src="20250414_203911.jpg"
alt="Pickled eggs with cracks."
caption="I love my pickled eggs to have cracks so that they let some of the brine in."
>}}
## Recipe
### Ingredients and materials
This recipe is for 13 eggs and a 1.5 L jar.
- 13 eggs
- 0.75 L water
- 50 g salt
- 1-2 tablespoons of caraway seeds (if you like)
- 1.5 L [Weck jar][] (doesn't need to be original Weck brand, of course, but must be sealed tight)
- 13 slices of toast
- butter
- oil, e.g. rapeseed oil, to your liking
- vinegar, e.g. any herb-flavored variant, to your liking
### Directions
You should prepare the pickled eggs a few days before you want to eat them. In
my family we typically do this 7 days before Easter, i.e. on Palm Sunday.
1. Boil the eggs so they get hard. I usually place the eggs in a pot, cover them
with water, and then slowly heat the water until it boils. Let it boil until
10 minutes have passed since the eggs were placed on the stove. Your mileage
may vary depending on your stove.
2. Pour out the hot water and shock the eggs with cold tap water.
3. Place the eggs into the jar using a clean spoon (not your hands!). I usually
let them drop into the jar so they get nice little cracks, this makes for
beautiful texture inside the eggs (see image).
4. Add the salt and caraway seeds to the jar.
5. Bring the water to boiling and pour it over the eggs in the jar.
6. Close the jar.
7. Invert the jar a couple of times (you may want to wear gloves while doing
this, the jar is hot!).
8. Store the jar in a cool place -- in our house, this is usually the basement.
## How to eat Soleier
There seem to be two fundamentally different ways to eat a _Solei_.
### Our way of eating Soleier
My family's tradition is to peel two eggs, place them on a dish, cut them into
pieces, then pour some oil and vinegar over the pieces and mash the eggs with a
fork. This leaves an ugly mess on the plate and I will update this post with a
picture of this year's appearance.
Brown two slices of toast, spread butter on them, and eat the _Solei_ mash/mess
using a fork while intermittently taking a bite from the bread.
### The more sophisticated way to eat Soleier
There is an alternative way to have your pickled eggs that supposedly is less
messy. The [German Wikipedia article][Soleier] claims it's the 'proper' or let's
say usual way to eat these eggs. I tried it once and I was totally unhappy with
the experience, so I stick with our traditional way.
Peel two eggs, cut the eggs into halves, remove the egg yolk and mash the egg
yolk with oil and vinegar. Transfer the mashed egg yolk back into the eggs. I
will look slightly less ugly, but I promise you will have a hard time getting
all the egg yolk--oil--vinegar mixture back into the eggs, the plate will look
like someone's been having _Soleier_ the traditional way, and when trying to put
the egg halves into your mouth, be prepared for everyone else who sits at the
table with you bursting into spontaneous laughter. At least that's what happened
to me one time... ;-)
[pickled eggs]: https://en.wikipedia.org/wiki/Pickled_egg
[Soleier]: https://de.wikipedia.org/wiki/Solei
[Weck jar]: https://en.wikipedia.org/wiki/Weck_jar

View File

@ -1,15 +1,17 @@
services:
build:
image: hugomods/hugo:latest
image: hugomods/hugo:ci
command: hugo
volumes:
- ".:/src"
user: 1000:1000
server:
image: hugomods/hugo:latest
image: hugomods/hugo:ci
command: server --buildDrafts --buildFuture
volumes:
- ".:/src"
ports:
- "127.0.0.1:1313:1313"
user: 1000:1000
environment:
- TZ=Europe/Berlin