summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.gmi4
-rw-r--r--gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.gmi.tpl4
-rw-r--r--gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi4
-rw-r--r--gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi.tpl4
-rw-r--r--gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.gmi4
-rw-r--r--gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.gmi.tpl4
-rw-r--r--gemfeed/2022-03-06-the-release-of-dtail-4.0.0.gmi4
-rw-r--r--gemfeed/2022-03-06-the-release-of-dtail-4.0.0.gmi.tpl4
-rw-r--r--gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi4
-rw-r--r--gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi.tpl4
-rw-r--r--gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.gmi4
-rw-r--r--gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.gmi.tpl4
-rw-r--r--gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.gmi4
-rw-r--r--gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.gmi.tpl4
-rw-r--r--gemfeed/2023-05-01-unveiling-guprecords0
-rw-r--r--gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi4
-rw-r--r--gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi.tpl4
-rw-r--r--gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.gmi4
-rw-r--r--gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.gmi.tpl4
-rw-r--r--gemfeed/2023-12-10-bash-golf-part-3.gmi3
-rw-r--r--gemfeed/2023-12-10-bash-golf-part-3.gmi.tpl3
-rw-r--r--gemfeed/atom.xml37
-rw-r--r--gemfeed/atom.xml.tmp655
-rw-r--r--index.gmi2
-rw-r--r--uptime-stats.gmi2
25 files changed, 58 insertions, 716 deletions
diff --git a/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.gmi b/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.gmi
index c7099c30..2dc56fa1 100644
--- a/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.gmi
+++ b/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.gmi
@@ -385,6 +385,8 @@ Of course I am operating multiple Jails on the same host this way with Puppet:
All done in a pretty automated manor.
+E-Mail your comments to `paul@nospam.buetow.org` :-)
+
Other *BSD related posts are:
=> ./2016-04-09-jails-and-zfs-on-freebsd-with-puppet.gmi 2016-04-09 Jails and ZFS with Puppet on FreeBSD (You are currently reading this)
@@ -392,6 +394,4 @@ Other *BSD related posts are:
=> ./2022-10-30-installing-dtail-on-openbsd.gmi 2022-10-30 Installing DTail on OpenBSD
=> ./2024-01-13-one-reason-why-i-love-openbsd.gmi 2024-01-13 One reason why I love OpenBSD
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.gmi.tpl b/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.gmi.tpl
index 29cdc38d..c5595a87 100644
--- a/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.gmi.tpl
+++ b/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.gmi.tpl
@@ -385,10 +385,10 @@ Of course I am operating multiple Jails on the same host this way with Puppet:
All done in a pretty automated manor.
+E-Mail your comments to `paul@nospam.buetow.org` :-)
+
Other *BSD related posts are:
<< template::inline::index bsd
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi
index 2cdced07..aafd82f3 100644
--- a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi
+++ b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi
@@ -103,6 +103,8 @@ Mimecast highly encourages you to have a look at DTail and submit an issue for a
=> https://dtail.dev
+E-Mail your comments to `paul@nospam.buetow.org` :-)
+
Other related posts are:
=> ./2021-04-22-dtail-the-distributed-log-tail-program.gmi 2021-04-22 DTail - The distributed log tail program (You are currently reading this)
@@ -110,6 +112,4 @@ Other related posts are:
=> ./2022-10-30-installing-dtail-on-openbsd.gmi 2022-10-30 Installing DTail on OpenBSD
=> ./2023-09-25-dtail-usage-examples.gmi 2023-09-25 DTail usage examples
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi.tpl b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi.tpl
index 14aca353..bdae8e19 100644
--- a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi.tpl
+++ b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi.tpl
@@ -103,10 +103,10 @@ Mimecast highly encourages you to have a look at DTail and submit an issue for a
=> https://dtail.dev
+E-Mail your comments to `paul@nospam.buetow.org` :-)
+
Other related posts are:
<< template::inline::index dtail
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.gmi b/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.gmi
index 1c57e0e5..f8e5fdde 100644
--- a/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.gmi
+++ b/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.gmi
@@ -163,6 +163,8 @@ It was quite a lot of fun writing Gemtexter. It's a relatively small project, bu
I finally revamped my personal internet site and started to blog again. I wanted the result to be exactly how it is now: A slightly retro-inspired internet site built for fun with unconventional tools.
+E-Mail your comments to `paul@nospam.buetow.org` :-)
+
Other related posts are:
=> ./2021-04-24-welcome-to-the-geminispace.gmi 2021-04-24 Welcome to the Geminispace
@@ -175,6 +177,4 @@ Other related posts are:
=> ./2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.gmi 2023-07-21 Gemtexter 2.1.0 - Let's Gemtext again³
=> ./2023-12-10-bash-golf-part-3.gmi 2023-12-10 Bash Golf Part 3
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.gmi.tpl b/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.gmi.tpl
index e1568050..ad55cc9d 100644
--- a/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.gmi.tpl
+++ b/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.gmi.tpl
@@ -163,10 +163,10 @@ It was quite a lot of fun writing Gemtexter. It's a relatively small project, bu
I finally revamped my personal internet site and started to blog again. I wanted the result to be exactly how it is now: A slightly retro-inspired internet site built for fun with unconventional tools.
+E-Mail your comments to `paul@nospam.buetow.org` :-)
+
Other related posts are:
<< template::inline::index gemtext gemini bash
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.gmi b/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.gmi
index 99ecfa8a..cd8bb6a4 100644
--- a/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.gmi
+++ b/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.gmi
@@ -286,6 +286,8 @@ I use usually DTail at work, but I have recently installed it on my personal Ope
I am a bit busy at the moment with two other pet projects of mine (one internal work-project, and one personal one, the latter you will read about in the next couple of months). If you have ideas (or even a patch), then please don't hesitate to contact me (either via E-Mail or a request at GitHub).
+E-Mail your comments to `paul@nospam.buetow.org` :-)
+
Other related posts are:
=> ./2021-04-22-dtail-the-distributed-log-tail-program.gmi 2021-04-22 DTail - The distributed log tail program
@@ -297,6 +299,4 @@ Thanks!
Paul
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.gmi.tpl b/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.gmi.tpl
index 70e7fb81..a7d6bdd5 100644
--- a/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.gmi.tpl
+++ b/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.gmi.tpl
@@ -286,6 +286,8 @@ I use usually DTail at work, but I have recently installed it on my personal Ope
I am a bit busy at the moment with two other pet projects of mine (one internal work-project, and one personal one, the latter you will read about in the next couple of months). If you have ideas (or even a patch), then please don't hesitate to contact me (either via E-Mail or a request at GitHub).
+E-Mail your comments to `paul@nospam.buetow.org` :-)
+
Other related posts are:
<< template::inline::index dtail
@@ -294,6 +296,4 @@ Thanks!
Paul
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi b/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi
index 41dd7463..90ac0f44 100644
--- a/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi
+++ b/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi
@@ -134,6 +134,8 @@ Btw.: Did you know that the first version of PHP was a set of Perl snippets? Onl
=> https://stackoverflow.blog/2022/07/06/why-perl-is-still-relevant-in-2022/ Why Perl is still relevant in 2022
+E-Mail your comments to `paul@nospam.buetow.org` :-)
+
Other related posts are:
=> ./2008-06-26-perl-poetry.gmi 2008-06-26 Perl Poetry
@@ -141,6 +143,4 @@ Other related posts are:
=> ./2022-05-27-perl-is-still-a-great-choice.gmi 2022-05-27 Perl is still a great choice (You are currently reading this)
=> ./2023-05-01-unveiling-guprecords:-uptime-records-with-raku.gmi 2023-05-01 Unveiling `guprecords.raku`: Global Uptime Records with Raku
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi.tpl b/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi.tpl
index 8ff175c6..26b5c67c 100644
--- a/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi.tpl
+++ b/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi.tpl
@@ -134,10 +134,10 @@ Btw.: Did you know that the first version of PHP was a set of Perl snippets? Onl
=> https://stackoverflow.blog/2022/07/06/why-perl-is-still-relevant-in-2022/ Why Perl is still relevant in 2022
+E-Mail your comments to `paul@nospam.buetow.org` :-)
+
Other related posts are:
<< template::inline::index perl raku
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.gmi b/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.gmi
index 1c9ea500..b4703280 100644
--- a/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.gmi
+++ b/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.gmi
@@ -656,6 +656,8 @@ OpenBSD suits perfectly here as all the tools are already part of the base insta
Why re-inventing the wheel? I love that a `Rexfile` is just a Perl DSL. Also, OpenBSD comes with Perl in the base system. So no new programming language had to be added to my mix for the configuration management system. Also, the `acme.sh` shell script is not a Bash but a standard Bourne shell script, so I didn't have to install an additional shell as OpenBSD does not come with the Bash pre-installed.
+E-Mail your comments to `paul@nospam.buetow.org` :-)
+
Other *BSD related posts are:
=> ./2016-04-09-jails-and-zfs-on-freebsd-with-puppet.gmi 2016-04-09 Jails and ZFS with Puppet on FreeBSD
@@ -663,6 +665,4 @@ Other *BSD related posts are:
=> ./2022-10-30-installing-dtail-on-openbsd.gmi 2022-10-30 Installing DTail on OpenBSD
=> ./2024-01-13-one-reason-why-i-love-openbsd.gmi 2024-01-13 One reason why I love OpenBSD
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.gmi.tpl b/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.gmi.tpl
index 1a83ef67..de5ee1f0 100644
--- a/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.gmi.tpl
+++ b/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.gmi.tpl
@@ -656,10 +656,10 @@ OpenBSD suits perfectly here as all the tools are already part of the base insta
Why re-inventing the wheel? I love that a `Rexfile` is just a Perl DSL. Also, OpenBSD comes with Perl in the base system. So no new programming language had to be added to my mix for the configuration management system. Also, the `acme.sh` shell script is not a Bash but a standard Bourne shell script, so I didn't have to install an additional shell as OpenBSD does not come with the Bash pre-installed.
+E-Mail your comments to `paul@nospam.buetow.org` :-)
+
Other *BSD related posts are:
<< template::inline::index bsd
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.gmi b/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.gmi
index addd500f..82e61126 100644
--- a/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.gmi
+++ b/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.gmi
@@ -136,6 +136,8 @@ Optionally, when the `xmllint` binary is installed, Gemtexter will perform a sim
Additionally, there were a couple of bug fixes, refactorings and overall improvements in the documentation made.
+E-Mail your comments to `paul@nospam.buetow.org` :-)
+
Other related posts are:
=> ./2021-04-24-welcome-to-the-geminispace.gmi 2021-04-24 Welcome to the Geminispace
@@ -144,6 +146,4 @@ Other related posts are:
=> ./2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.gmi 2023-03-25 Gemtexter 2.0.0 - Let's Gemtext again² (You are currently reading this)
=> ./2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.gmi 2023-07-21 Gemtexter 2.1.0 - Let's Gemtext again³
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.gmi.tpl b/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.gmi.tpl
index 092a14a1..2e322cac 100644
--- a/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.gmi.tpl
+++ b/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.gmi.tpl
@@ -136,10 +136,10 @@ Optionally, when the `xmllint` binary is installed, Gemtexter will perform a sim
Additionally, there were a couple of bug fixes, refactorings and overall improvements in the documentation made.
+E-Mail your comments to `paul@nospam.buetow.org` :-)
+
Other related posts are:
<< template::inline::index gemtext gemini
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/2023-05-01-unveiling-guprecords b/gemfeed/2023-05-01-unveiling-guprecords
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/gemfeed/2023-05-01-unveiling-guprecords
diff --git a/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi b/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi
index d2312a2d..a5954f14 100644
--- a/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi
+++ b/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi
@@ -236,12 +236,12 @@ There are plans to make it possible to execute certain checks only on certain no
Gogios is a lightweight and straightforward monitoring tool that is perfect for small-scale environments. With its compatibility with the Nagios Check API, email notifications, and CRON-based scheduling, Gogios offers an easy-to-use solution for those looking to monitor a limited number of resources. I personally use it to execute around 500 checks on my personal server infrastructure. I am very happy with this solution.
+E-Mail your comments to `paul@nospam.buetow.org` :-)
+
Other KISS-related posts are:
=> ./2021-09-12-keep-it-simple-and-stupid.gmi 2021-09-12 Keep it simple and stupid
=> ./2023-06-01-kiss-server-monitoring-with-gogios.gmi 2023-06-01 KISS server monitoring with Gogios (You are currently reading this)
=> ./2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.gmi 2023-10-29 KISS static web photo albums with `photoalbum.sh`
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi.tpl b/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi.tpl
index d806d260..d49e9f1c 100644
--- a/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi.tpl
+++ b/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi.tpl
@@ -236,10 +236,10 @@ There are plans to make it possible to execute certain checks only on certain no
Gogios is a lightweight and straightforward monitoring tool that is perfect for small-scale environments. With its compatibility with the Nagios Check API, email notifications, and CRON-based scheduling, Gogios offers an easy-to-use solution for those looking to monitor a limited number of resources. I personally use it to execute around 500 checks on my personal server infrastructure. I am very happy with this solution.
+E-Mail your comments to `paul@nospam.buetow.org` :-)
+
Other KISS-related posts are:
<< template::inline::index kiss simple-and-stupid
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.gmi b/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.gmi
index fed7ffa1..e9b3590c 100644
--- a/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.gmi
+++ b/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.gmi
@@ -91,6 +91,8 @@ The resulting line in the HTML output will be something as follows:
Additionally, there were a couple of bug fixes, refactorings and overall improvements in the documentation made.
+E-Mail your comments to `paul@nospam.buetow.org` :-)
+
Other related posts are:
=> ./2021-04-24-welcome-to-the-geminispace.gmi 2021-04-24 Welcome to the Geminispace
@@ -99,6 +101,4 @@ Other related posts are:
=> ./2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.gmi 2023-03-25 Gemtexter 2.0.0 - Let's Gemtext again²
=> ./2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.gmi 2023-07-21 Gemtexter 2.1.0 - Let's Gemtext again³ (You are currently reading this)
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.gmi.tpl b/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.gmi.tpl
index 2c78d429..95e5ea54 100644
--- a/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.gmi.tpl
+++ b/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.gmi.tpl
@@ -91,10 +91,10 @@ The resulting line in the HTML output will be something as follows:
Additionally, there were a couple of bug fixes, refactorings and overall improvements in the documentation made.
+E-Mail your comments to `paul@nospam.buetow.org` :-)
+
Other related posts are:
<< template::inline::index gemtext gemini
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/2023-12-10-bash-golf-part-3.gmi b/gemfeed/2023-12-10-bash-golf-part-3.gmi
index 77f4df6a..576b6735 100644
--- a/gemfeed/2023-12-10-bash-golf-part-3.gmi
+++ b/gemfeed/2023-12-10-bash-golf-part-3.gmi
@@ -355,6 +355,7 @@ echo baz
So what happened? The `echo baz` line was appended to the script while it was still executed! And the interpreter also picked it up! It tells us that Bash evaluates each line as it encounters it. This can lead to nasty side effects when editing the script while it is still being executed! You should always keep this in mind!
+E-Mail your comments to `paul@nospam.buetow.org` :-)
Other related posts are:
@@ -364,6 +365,4 @@ Other related posts are:
=> ./2022-01-01-bash-golf-part-2.gmi 2022-01-01 Bash Golf Part 2
=> ./2023-12-10-bash-golf-part-3.gmi 2023-12-10 Bash Golf Part 3 (You are currently reading this)
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/2023-12-10-bash-golf-part-3.gmi.tpl b/gemfeed/2023-12-10-bash-golf-part-3.gmi.tpl
index e281c427..d8bd95d6 100644
--- a/gemfeed/2023-12-10-bash-golf-part-3.gmi.tpl
+++ b/gemfeed/2023-12-10-bash-golf-part-3.gmi.tpl
@@ -353,11 +353,10 @@ echo baz
So what happened? The `echo baz` line was appended to the script while it was still executed! And the interpreter also picked it up! It tells us that Bash evaluates each line as it encounters it. This can lead to nasty side effects when editing the script while it is still being executed! You should always keep this in mind!
+E-Mail your comments to `paul@nospam.buetow.org` :-)
Other related posts are:
<< template::inline::index bash
-E-Mail your comments to `paul@nospam.buetow.org` :-)
-
=> ../ Back to the main site
diff --git a/gemfeed/atom.xml b/gemfeed/atom.xml
index 1ad8513c..6ea467a2 100644
--- a/gemfeed/atom.xml
+++ b/gemfeed/atom.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
- <updated>2024-01-13T23:06:21+02:00</updated>
+ <updated>2024-01-13T23:11:04+02:00</updated>
<title>foo.zone feed</title>
<subtitle>To be in the .zone!</subtitle>
<link href="gemini://foo.zone/gemfeed/atom.xml" rel="self" />
@@ -573,6 +573,7 @@ echo baz
<br />
<span>So what happened? The <span class='inlinecode'>echo baz</span> line was appended to the script while it was still executed! And the interpreter also picked it up! It tells us that Bash evaluates each line as it encounters it. This can lead to nasty side effects when editing the script while it is still being executed! You should always keep this in mind!</span><br />
<br />
+<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
<br />
<span>Other related posts are:</span><br />
<br />
@@ -582,8 +583,6 @@ echo baz
<a class='textlink' href='./2022-01-01-bash-golf-part-2.html'>2022-01-01 Bash Golf Part 2</a><br />
<a class='textlink' href='./2023-12-10-bash-golf-part-3.html'>2023-12-10 Bash Golf Part 3 (You are currently reading this)</a><br />
<br />
-<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
-<br />
<a class='textlink' href='../'>Back to the main site</a><br />
</div>
</content>
@@ -1585,6 +1584,8 @@ http://www.gnu.org/software/src-highlite -->
<br />
<span>Additionally, there were a couple of bug fixes, refactorings and overall improvements in the documentation made. </span><br />
<br />
+<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
+<br />
<span>Other related posts are:</span><br />
<br />
<a class='textlink' href='./2021-04-24-welcome-to-the-geminispace.html'>2021-04-24 Welcome to the Geminispace</a><br />
@@ -1593,8 +1594,6 @@ http://www.gnu.org/software/src-highlite -->
<a class='textlink' href='./2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.html'>2023-03-25 Gemtexter 2.0.0 - Let&#39;s Gemtext again²</a><br />
<a class='textlink' href='./2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.html'>2023-07-21 Gemtexter 2.1.0 - Let&#39;s Gemtext again³ (You are currently reading this)</a><br />
<br />
-<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
-<br />
<a class='textlink' href='../'>Back to the main site</a><br />
</div>
</content>
@@ -2195,14 +2194,14 @@ http://www.gnu.org/software/src-highlite -->
<br />
<span>Gogios is a lightweight and straightforward monitoring tool that is perfect for small-scale environments. With its compatibility with the Nagios Check API, email notifications, and CRON-based scheduling, Gogios offers an easy-to-use solution for those looking to monitor a limited number of resources. I personally use it to execute around 500 checks on my personal server infrastructure. I am very happy with this solution.</span><br />
<br />
+<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
+<br />
<span>Other KISS-related posts are:</span><br />
<br />
<a class='textlink' href='./2021-09-12-keep-it-simple-and-stupid.html'>2021-09-12 Keep it simple and stupid</a><br />
<a class='textlink' href='./2023-06-01-kiss-server-monitoring-with-gogios.html'>2023-06-01 KISS server monitoring with Gogios (You are currently reading this)</a><br />
<a class='textlink' href='./2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.html'>2023-10-29 KISS static web photo albums with <span class='inlinecode'>photoalbum.sh</span></a><br />
<br />
-<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
-<br />
<a class='textlink' href='../'>Back to the main site</a><br />
</div>
</content>
@@ -3088,6 +3087,8 @@ The remaining content of the Gemtext file<font color="#990000">...</font>
<br />
<span>Additionally, there were a couple of bug fixes, refactorings and overall improvements in the documentation made. </span><br />
<br />
+<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
+<br />
<span>Other related posts are:</span><br />
<br />
<a class='textlink' href='./2021-04-24-welcome-to-the-geminispace.html'>2021-04-24 Welcome to the Geminispace</a><br />
@@ -3096,8 +3097,6 @@ The remaining content of the Gemtext file<font color="#990000">...</font>
<a class='textlink' href='./2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.html'>2023-03-25 Gemtexter 2.0.0 - Let&#39;s Gemtext again² (You are currently reading this)</a><br />
<a class='textlink' href='./2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.html'>2023-07-21 Gemtexter 2.1.0 - Let&#39;s Gemtext again³</a><br />
<br />
-<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
-<br />
<a class='textlink' href='../'>Back to the main site</a><br />
</div>
</content>
@@ -4991,6 +4990,8 @@ rex commons
<br />
<span>Why re-inventing the wheel? I love that a <span class='inlinecode'>Rexfile</span> is just a Perl DSL. Also, OpenBSD comes with Perl in the base system. So no new programming language had to be added to my mix for the configuration management system. Also, the <span class='inlinecode'>acme.sh</span> shell script is not a Bash but a standard Bourne shell script, so I didn&#39;t have to install an additional shell as OpenBSD does not come with the Bash pre-installed.</span><br />
<br />
+<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
+<br />
<span>Other *BSD related posts are:</span><br />
<br />
<a class='textlink' href='./2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html'>2016-04-09 Jails and ZFS with Puppet on FreeBSD</a><br />
@@ -4998,8 +4999,6 @@ rex commons
<a class='textlink' href='./2022-10-30-installing-dtail-on-openbsd.html'>2022-10-30 Installing DTail on OpenBSD</a><br />
<a class='textlink' href='./2024-01-13-one-reason-why-i-love-openbsd.html'>2024-01-13 One reason why I love OpenBSD</a><br />
<br />
-<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
-<br />
<a class='textlink' href='../'>Back to the main site</a><br />
</div>
</content>
@@ -5501,6 +5500,8 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs
<br />
<a class='textlink' href='https://stackoverflow.blog/2022/07/06/why-perl-is-still-relevant-in-2022/'>Why Perl is still relevant in 2022</a><br />
<br />
+<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
+<br />
<span>Other related posts are:</span><br />
<br />
<a class='textlink' href='./2008-06-26-perl-poetry.html'>2008-06-26 Perl Poetry</a><br />
@@ -5508,8 +5509,6 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs
<a class='textlink' href='./2022-05-27-perl-is-still-a-great-choice.html'>2022-05-27 Perl is still a great choice (You are currently reading this)</a><br />
<a class='textlink' href='./2023-05-01-unveiling-guprecords:-uptime-records-with-raku.html'>2023-05-01 Unveiling <span class='inlinecode'>guprecords.raku</span>: Global Uptime Records with Raku</a><br />
<br />
-<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
-<br />
<a class='textlink' href='../'>Back to the main site</a><br />
</div>
</content>
@@ -5977,6 +5976,8 @@ exec /usr/local/bin/dtailhealth --server localhost:2222
<br />
<span>I am a bit busy at the moment with two other pet projects of mine (one internal work-project, and one personal one, the latter you will read about in the next couple of months). If you have ideas (or even a patch), then please don&#39;t hesitate to contact me (either via E-Mail or a request at GitHub).</span><br />
<br />
+<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
+<br />
<span>Other related posts are:</span><br />
<br />
<a class='textlink' href='./2021-04-22-dtail-the-distributed-log-tail-program.html'>2021-04-22 DTail - The distributed log tail program</a><br />
@@ -5988,8 +5989,6 @@ exec /usr/local/bin/dtailhealth --server localhost:2222
<br />
<span>Paul</span><br />
<br />
-<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
-<br />
<a class='textlink' href='../'>Back to the main site</a><br />
</div>
</content>
@@ -8143,6 +8142,8 @@ assert<font color="#990000">::</font>equals <font color="#FF0000">"$(generate::m
<br />
<span>I finally revamped my personal internet site and started to blog again. I wanted the result to be exactly how it is now: A slightly retro-inspired internet site built for fun with unconventional tools. </span><br />
<br />
+<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
+<br />
<span>Other related posts are:</span><br />
<br />
<a class='textlink' href='./2021-04-24-welcome-to-the-geminispace.html'>2021-04-24 Welcome to the Geminispace</a><br />
@@ -8155,8 +8156,6 @@ assert<font color="#990000">::</font>equals <font color="#FF0000">"$(generate::m
<a class='textlink' href='./2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.html'>2023-07-21 Gemtexter 2.1.0 - Let&#39;s Gemtext again³</a><br />
<a class='textlink' href='./2023-12-10-bash-golf-part-3.html'>2023-12-10 Bash Golf Part 3</a><br />
<br />
-<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
-<br />
<a class='textlink' href='../'>Back to the main site</a><br />
</div>
</content>
@@ -8862,6 +8861,8 @@ dtail –servers serverlist.txt –files ‘/var/log/*.log’ –regex ‘(?i:er
<br />
<a class='textlink' href='https://dtail.dev'>https://dtail.dev</a><br />
<br />
+<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
+<br />
<span>Other related posts are:</span><br />
<br />
<a class='textlink' href='./2021-04-22-dtail-the-distributed-log-tail-program.html'>2021-04-22 DTail - The distributed log tail program (You are currently reading this)</a><br />
@@ -8869,8 +8870,6 @@ dtail –servers serverlist.txt –files ‘/var/log/*.log’ –regex ‘(?i:er
<a class='textlink' href='./2022-10-30-installing-dtail-on-openbsd.html'>2022-10-30 Installing DTail on OpenBSD</a><br />
<a class='textlink' href='./2023-09-25-dtail-usage-examples.html'>2023-09-25 DTail usage examples</a><br />
<br />
-<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
-<br />
<a class='textlink' href='../'>Back to the main site</a><br />
</div>
</content>
diff --git a/gemfeed/atom.xml.tmp b/gemfeed/atom.xml.tmp
deleted file mode 100644
index f603be57..00000000
--- a/gemfeed/atom.xml.tmp
+++ /dev/null
@@ -1,655 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
- <updated>2024-01-13T23:08:07+02:00</updated>
- <title>foo.zone feed</title>
- <subtitle>To be in the .zone!</subtitle>
- <link href="gemini://foo.zone/gemfeed/atom.xml" rel="self" />
- <link href="gemini://foo.zone/" />
- <id>gemini://foo.zone/</id>
- <entry>
- <title>One reason why I love OpenBSD</title>
- <link href="gemini://foo.zone/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.gmi" />
- <id>gemini://foo.zone/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.gmi</id>
- <updated>2024-01-13T22:55:33+02:00</updated>
- <author>
- <name>Paul Buetow aka snonux</name>
- <email>paul@dev.buetow.org</email>
- </author>
- <summary>I just upgraded my OpenBSD's from `7.3` to `7.4` by following the unattended upgrade guide:</summary>
- <content type="xhtml">
- <div xmlns="http://www.w3.org/1999/xhtml">
- <h1 style='display: inline'>One reason why I love OpenBSD</h1><br />
-<br />
-<span class='quote'>Published at 2024-01-13T22:55:33+02:00</span><br />
-<br />
-<pre>
- .
- A ;
- | ,--,-/ \---,-/| ,
- _|\,&#39;. /| /| `/|-.
- \`.&#39; /| , `;.
- ,&#39;\ A A A A _ /| `.;
- ,/ _ A _ / _ /| ;
- /\ / \ , , A / / `/|
- /_| | _ \ , , ,/ \
- // | |/ `.\ ,- , , ,/ ,/ \/
- / @| |@ / /&#39; \ \ , &gt; /| ,--.
- |\_/ \_/ / | | , ,/ \ ./&#39; __:..
- | __ __ | | | .--. , &gt; &gt; |-&#39; / `
- ,/| / &#39; \ | | | \ , | /
- / |&lt;--.__,-&gt;| | | . `. &gt; &gt; / (
-/_,&#39; \\ ^ / \ / / `. &gt;-- /^\ |
- \\___/ \ / / \__&#39; \ \ \/ \ |
- `. |/ , , /`\ \ )
- \ &#39; |/ , V \ / `-\
- `|/ &#39; V V \ \.&#39; \_
- &#39;`-. V V \./&#39;\
- `|/-. \ / \ /,---`\ kat
- n
- / `._____V_____V&#39;
- &#39; &#39;
-</pre>
-<br />
-<span>I just upgraded my OpenBSD&#39;s from <span class='inlinecode'>7.3</span> to <span class='inlinecode'>7.4</span> by following the unattended upgrade guide:</span><br />
-<br />
-<a class='textlink' href='https://www.openbsd.org/faq/upgrade74.html'>https://www.openbsd.org/faq/upgrade74.html</a><br />
-<br />
-<!-- Generator: GNU source-highlight 3.1.9
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre>doas installboot sd0 <i><font color="#9A1900"># Update the bootloader (not for every upgrade required)</font></i>
-doas sysupgrade <i><font color="#9A1900"># Update all binaries (including Kernel)</font></i>
-</pre>
-<br />
-<span><span class='inlinecode'>sysupgrade</span> downloaded and upgraded to the next release and rebooted the system. After the reboot, I run:</span><br />
-<br />
-<!-- Generator: GNU source-highlight 3.1.9
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre>doas sysmerge <i><font color="#9A1900"># Update system configuration files</font></i>
-doas pkg_add -u <i><font color="#9A1900"># Update all packages</font></i>
-doas reboot <i><font color="#9A1900"># Just in case, reboot one more time</font></i>
-</pre>
-<br />
-<span>That&#39;s it! Took me around 5 minutes in total! No issues, only these few comands, only 5 minutes! It just works! No problems, no conflicts, no tons (actually none) config file merge conflicts.</span><br />
-<br />
-<span>I followed the same procedure the previous times and never encountered any difficulties with any OpenBSD upgrades.</span><br />
-<br />
-<span>I have seen upgrades of other Operating Systems either take a long time or break the system (which takes manual steps to repair). That&#39;s just one of many reasons why I love OpenBSD! There appear never to be any problems. It just gets its job done!</span><br />
-<br />
-<a class='textlink' href='https://www.openbsd.org'>The OpenBSD Project</a><br />
-<br />
-<span>BTW: are you looking for an opinionated OpenBSD VM hoster? OpenBSD Amsterdam may be for you. They rock (I am having a VM there, too)!</span><br />
-<br />
-<a class='textlink' href='https://openbsd.amsterdam'>https://openbsd.amsterdam</a><br />
-<br />
-<span>Other *BSD related posts are:</span><br />
-<br />
-<a class='textlink' href='./2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html'>2016-04-09 Jails and ZFS with Puppet on FreeBSD</a><br />
-<a class='textlink' href='./2022-07-30-lets-encrypt-with-openbsd-and-rex.html'>2022-07-30 Let&#39;s Encrypt with OpenBSD and Rex</a><br />
-<a class='textlink' href='./2022-10-30-installing-dtail-on-openbsd.html'>2022-10-30 Installing DTail on OpenBSD</a><br />
-<a class='textlink' href='./2024-01-13-one-reason-why-i-love-openbsd.html'>2024-01-13 One reason why I love OpenBSD (You are currently reading this)</a><br />
-<br />
-<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
-<br />
-<a class='textlink' href='../'>Back to the main site</a><br />
- </div>
- </content>
- </entry>
- <entry>
- <title>Site Reliability Engineering - Part 3: On-Call Culture and the Human Aspect</title>
- <link href="gemini://foo.zone/gemfeed/2024-01-09-site-reliability-engineering-part-3.gmi" />
- <id>gemini://foo.zone/gemfeed/2024-01-09-site-reliability-engineering-part-3.gmi</id>
- <updated>2024-01-09T18:35:48+02:00</updated>
- <author>
- <name>Paul Buetow aka snonux</name>
- <email>paul@dev.buetow.org</email>
- </author>
- <summary>This is the third part of my Site Reliability Engineering (SRE) series. I am currently employed as a Site Reliability Engineer and will try to share what SRE is about in this blog series.</summary>
- <content type="xhtml">
- <div xmlns="http://www.w3.org/1999/xhtml">
- <h1 style='display: inline'>Site Reliability Engineering - Part 3: On-Call Culture and the Human Aspect</h1><br />
-<br />
-<span class='quote'>Published at 2024-01-09T18:35:48+02:00</span><br />
-<br />
-<span>This is the third part of my Site Reliability Engineering (SRE) series. I am currently employed as a Site Reliability Engineer and will try to share what SRE is about in this blog series.</span><br />
-<br />
-<a class='textlink' href='./2023-08-18-site-reliability-engineering-part-1.html'>2023-08-18 Site Reliability Engineering - Part 1: SRE and Organizational Culture</a><br />
-<a class='textlink' href='./2023-11-19-site-reliability-engineering-part-2.html'>2023-11-19 Site Reliability Engineering - Part 2: Operational Balance in SRE</a><br />
-<a class='textlink' href='./2024-01-09-site-reliability-engineering-part-3.html'>2024-01-09 Site Reliability Engineering - Part 3: On-Call Culture and the Human Aspect (You are currently reading this)</a><br />
-<br />
-<pre>
- ..--""""----..
- .-" ..--""""--.j-.
- .-" .-" .--.""--..
- .-" .-" ..--"-. \/ ;
- .-" .-"_.--..--"" ..--&#39; "-. :
- .&#39; .&#39; / `. \..--"" __ _ \ ;
- :.__.-" \ / .&#39; ( )"-. Y
- ; ;: ( ) ( ). \
- .&#39;: /:: : \ \
- .&#39;.-"\._ _.-" ; ; ( ) .-. ( ) \
- " `.""" .j" : : \ ; ; \
- bug /"""""/ ; ( ) "" :.( ) \
- /\ / : \ \`.: _ \
- : `. / ; `( ) (\/ :" \ \
- \ `. : "-.(_)_.&#39; t-&#39; ;
- \ `. ; ..--":
- `. `. : ..--"" :
- `. "-. ; ..--"" ;
- `. "-.:_..--"" ..--"
- `. : ..--""
- "-. : ..--""
- "-.;_..--""
-
-</pre>
-<br />
-<h2 style='display: inline'>On-Call Culture and the Human Aspect: Prioritising Well-being in the Realm of Reliability</h2><br />
-<br />
-<span>Site Reliability Engineering is synonymous with ensuring system reliability, but the human factor is an often-underestimated part of this discipline. Ensuring an healthy on-call culture is as critical as any technical solution. The well-being of the engineers is an important factor.</span><br />
-<br />
-<span>Firstly, a healthy on-call rotation is about more than just managing and responding to incidents. It&#39;s about the entire ecosystem that supports this practice. This involves reducing pain points, offering mentorship, rapid iteration, and ensuring that engineers have the right tools and processes. One ceavat is, that engineers should be willing to learn. Especially in on-call rotation embedding SREs with other engineers (for example Software Engineers or QA Engineers), it&#39;s difficult to motivate everyone to engage. QA Engineers want to test the software, Software Engineers want to implement new features; they don&#39;t want to troubleshoot and debug production incidents. It can be depressing for the mentoring SRE.</span><br />
-<br />
-<span>Furthermore, the metrics that measure the success of an on-call experience are only sometimes straightforward. While one might assume that fewer pages translate to better on-call expertise (which is true to a degree, as who wants to receive a page out of office hours?), it&#39;s not always the volume of pages that matters most. Trust, ownership, accountability, and effective communication play the important roles.</span><br />
-<br />
-<span>An important part is giving feedback about the on-call experience to ensure continuous learning. If alerts are mostly noise, they should be tuned or even eliminated. If alerts are actionable, can recurring tasks be automated? If there are knowledge gaps, is the documentation not good enough? Continuous retrospection ensures that not only do systems evolve, but the experience for the on-call engineers becomes progressively better.</span><br />
-<br />
-<span>Onboarding for on-call duties is a crucial aspect of ensuring the reliability and efficiency of systems. This process involves equipping new team members with the knowledge, tools, and support to handle incidents confidently. It begins with an overview of the system architecture and common challenges, followed by training on monitoring tools, alerting mechanisms, and incident response protocols. Shadowing experienced on-call engineers can offer practical exposure. Too often, new engineers are thrown into the cold water without proper onboarding and training because the more experienced engineers are too busy fire-fighting production issues in the first place.</span><br />
-<br />
-<span>An always-on, always-alert culture can lead to burnout. Engineers should be encouraged to recognise their limits, take breaks, and seek support when needed. This isn&#39;t just about individual health; a burnt-out engineer can have cascading effects on the entire team and the systems they manage. A successful on-call culture ensures that while systems are kept running, the engineers are kept happy, healthy, and supported. The more experienced engineers should take time to mentor the junior engineers, but the junior engineers should also be fully engaged, try to investigate and learn new things by themselves.</span><br />
-<br />
-<span>For the junior engineer, it&#39;s too easy to fall back and ask the experts in the team every time an issue arises. This seems reasonable, but serving recipes for solving production issues on a silver tablet won&#39;t scale forever, as there are infinite scenarios of how production systems can break. So every engineer should learn to debug, troubleshoot and resolve production incidents independently. The experts will still be there for guidance and step in when the junior gets stuck after trying, but the experts should also learn to step down so that lesser experienced engineers can step up and learn. But mistakes can always happen here; that&#39;s why having a blameless on-call culture is essential.</span><br />
-<br />
-<span>A blameless on-call culture is a must for a safe and collaborative environment where engineers can effectively respond to incidents without fear of retribution. This approach acknowledges that mistakes are a natural part of the learning and innovation process. When individuals are assured they won&#39;t be punished for errors, they&#39;re more likely to openly discuss mistakes, allowing the entire team to learn and grow from each incident. Furthermore, a blameless culture promotes psychological safety, enhances job satisfaction, reduces burnout, and ensures that talent remains committed and engaged.</span><br />
-<br />
-<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
-<br />
-<a class='textlink' href='../'>Back to the main site</a><br />
- </div>
- </content>
- </entry>
- <entry>
- <title>Bash Golf Part 3</title>
- <link href="gemini://foo.zone/gemfeed/2023-12-10-bash-golf-part-3.gmi" />
- <id>gemini://foo.zone/gemfeed/2023-12-10-bash-golf-part-3.gmi</id>
- <updated>2023-12-10T11:35:54+02:00</updated>
- <author>
- <name>Paul Buetow aka snonux</name>
- <email>paul@dev.buetow.org</email>
- </author>
- <summary>This is the third blog post about my Bash Golf series. This series is random Bash tips, tricks, and weirdnesses I have encountered over time. </summary>
- <content type="xhtml">
- <div xmlns="http://www.w3.org/1999/xhtml">
- <h1 style='display: inline'>Bash Golf Part 3</h1><br />
-<br />
-<span class='quote'>Published at 2023-12-10T11:35:54+02:00</span><br />
-<br />
-<pre>
- &#39;\ &#39;\ &#39;\ . . |&gt;18&gt;&gt;
- \ \ \ . &#39; . |
- O&gt;&gt; O&gt;&gt; O&gt;&gt; . &#39;o |
- \ .\. .. .\. .. . |
- /\ . /\ . /\ . . |
- / / . / / .&#39;. / / .&#39; . |
-jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Art by Joan Stark, mod. by Paul Buetow
-</pre>
-<br />
-<span>This is the third blog post about my Bash Golf series. This series is random Bash tips, tricks, and weirdnesses I have encountered over time. </span><br />
-<br />
-<a class='textlink' href='./2021-11-29-bash-golf-part-1.html'>2021-11-29 Bash Golf Part 1</a><br />
-<a class='textlink' href='./2022-01-01-bash-golf-part-2.html'>2022-01-01 Bash Golf Part 2</a><br />
-<a class='textlink' href='./2023-12-10-bash-golf-part-3.html'>2023-12-10 Bash Golf Part 3 (You are currently reading this)</a><br />
-<br />
-<h2 style='display: inline'><span class='inlinecode'>FUNCNAME</span></h2><br />
-<br />
-<span><span class='inlinecode'>FUNCNAME</span> is an array you are looking for a way to dynamically determine the name of the current function (which could be considered the callee in the context of its own execution), you can use the special variable <span class='inlinecode'>FUNCNAME</span>. This is an array variable that contains the names of all shell functions currently in the execution call stack. The element <span class='inlinecode'>FUNCNAME[0]</span> holds the name of the currently executing function, <span class='inlinecode'>FUNCNAME[1]</span> the name of the function that called that, and so on.</span><br />
-<br />
-<span>This is particularly useful for logging when you want to include the callee function in the log output. E.g. look at this log helper:</span><br />
-<br />
-<!-- Generator: GNU source-highlight 3.1.9
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="#9A1900">#!/usr/bin/env bash</font></i>
-
-<b><font color="#000000">log ()</font></b> {
- <b><font color="#0000FF">local</font></b> -r <font color="#009900">level</font><font color="#990000">=</font><font color="#FF0000">"$1"</font><font color="#990000">;</font> <b><font color="#0000FF">shift</font></b>
- <b><font color="#0000FF">local</font></b> -r <font color="#009900">message</font><font color="#990000">=</font><font color="#FF0000">"$1"</font><font color="#990000">;</font> <b><font color="#0000FF">shift</font></b>
- <b><font color="#0000FF">local</font></b> -i <font color="#009900">pid</font><font color="#990000">=</font><font color="#FF0000">"$$"</font>
-
- <b><font color="#0000FF">local</font></b> -r <font color="#009900">callee</font><font color="#990000">=</font><font color="#009900">${FUNCNAME[1]}</font>
- <b><font color="#0000FF">local</font></b> -r <font color="#009900">stamp</font><font color="#990000">=</font><font color="#009900">$(</font>date <font color="#990000">+%</font>Y<font color="#990000">%</font>m<font color="#990000">%</font>d-<font color="#990000">%</font>H<font color="#990000">%</font>M<font color="#990000">%</font>S<font color="#990000">)</font>
-
- echo <font color="#FF0000">"$level|$stamp|$pid|$callee|$message"</font> <font color="#990000">&gt;&amp;</font><font color="#993399">2</font>
-}
-
-<b><font color="#000000">at_home_friday_evening ()</font></b> {
- log INFO <font color="#FF0000">'One Peperoni Pizza, please'</font>
-}
-
-at_home_friday_evening
-</pre>
-<br />
-<span>The output is as follows:</span><br />
-<br />
-<!-- Generator: GNU source-highlight 3.1.9
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre>❯ <font color="#990000">.</font>/logexample<font color="#990000">.</font>sh
-INFO<font color="#990000">|</font><font color="#993399">20231210</font>-<font color="#993399">082732</font><font color="#990000">|</font><font color="#993399">123002</font><font color="#990000">|</font>at_home_friday_evening<font color="#990000">|</font>One Peperoni Pizza<font color="#990000">,</font> please
-</pre>
-<br />
-<h2 style='display: inline'><span class='inlinecode'>:(){ :|:&amp; };:</span></h2><br />
-<br />
-<span>This one may be widely known already, but I am including it here as I found a cute image illustrating it. But to break <span class='inlinecode'>:(){ :|:&amp; };:</span> down:</span><br />
-<br />
-<ul>
-<li><span class='inlinecode'>:(){ }</span> is really a declaration of the function <span class='inlinecode'>:</span></li>
-<li>The <span class='inlinecode'>;</span> is ending the current statement</li>
-<li>The <span class='inlinecode'>:</span> at the end is calling the function <span class='inlinecode'>:</span></li>
-<li><span class='inlinecode'>:|:&amp;</span> is the function body</li>
-</ul><br />
-<span>Let&#39;s break down the function body <span class='inlinecode'>:|:&amp;</span>: </span><br />
-<br />
-<ul>
-<li>The first <span class='inlinecode'>:</span> is calling the function recursively</li>
-<li>The <span class='inlinecode'>|:</span> is piping the output to the function <span class='inlinecode'>:</span> again (parallel recursion)</li>
-<li>The <span class='inlinecode'>&amp;</span> lets it run in the background.</li>
-</ul><br />
-<span>So, it&#39;s a fork bomb. If you run it, your computer will run out of resources eventually. (Modern Linux distributions could have reasonable limits configured for your login session, so it won&#39;t bring down your whole system anymore unless you run it as <span class='inlinecode'>root</span>!)</span><br />
-<br />
-<span>And here is the cute illustration:</span><br />
-<br />
-<a href='./2023-12-10-bash-golf-part-3/bash-fork-bomb.jpg'><img alt='Bash fork bomb' title='Bash fork bomb' src='./2023-12-10-bash-golf-part-3/bash-fork-bomb.jpg' /></a><br />
-<br />
-<h2 style='display: inline'>Inner functions</h2><br />
-<br />
-<span>Bash defines variables as it is interpreting the code. The same applies to function declarations. Let&#39;s consider this code:</span><br />
-<br />
-<!-- Generator: GNU source-highlight 3.1.9
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="#9A1900">#!/usr/bin/env bash</font></i>
-
-<b><font color="#000000">outer()</font></b> {
- <b><font color="#000000">inner()</font></b> {
- echo <font color="#FF0000">'Intel inside!'</font>
- }
- inner
-}
-
-inner
-outer
-inner
-</pre>
-<br />
-<span>And let&#39;s execute it:</span><br />
-<br />
-<pre>
-❯ ./inner.sh
-/tmp/inner.sh: line 10: inner: command not found
-Intel inside!
-Intel inside!
-</pre>
-<br />
-<span>What happened? The first time <span class='inlinecode'>inner</span> was called, it wasn&#39;t defined yet. That only happens after the <span class='inlinecode'>outer</span> run. Note that <span class='inlinecode'>inner</span> will still be globally defined. But functions can be declared multiple times (the last version wins):</span><br />
-<br />
-<!-- Generator: GNU source-highlight 3.1.9
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="#9A1900">#!/usr/bin/env bash</font></i>
-
-<b><font color="#000000">outer1()</font></b> {
- <b><font color="#000000">inner()</font></b> {
- echo <font color="#FF0000">'Intel inside!'</font>
- }
- inner
-}
-
-<b><font color="#000000">outer2()</font></b> {
- <b><font color="#000000">inner()</font></b> {
- echo <font color="#FF0000">'Wintel inside!'</font>
- }
- inner
-}
-
-outer1
-inner
-outer2
-inner
-</pre>
-<br />
-<span>And let&#39;s run it:</span><br />
-<br />
-<pre>
-❯ ./inner2.sh
-Intel inside!
-Intel inside!
-Wintel inside!
-Wintel inside!
-</pre>
-<br />
-<h2 style='display: inline'>Exporting functions</h2><br />
-<br />
-<span>Have you ever wondered how to execute a shell function in parallel through <span class='inlinecode'>xargs</span>? The problem is that this won&#39;t work:</span><br />
-<br />
-<!-- Generator: GNU source-highlight 3.1.9
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="#9A1900">#!/usr/bin/env bash</font></i>
-
-<b><font color="#000000">some_expensive_operations()</font></b> {
- echo <font color="#FF0000">"Doing expensive operations with '$1' from pid $$"</font>
-}
-
-<b><font color="#0000FF">for</font></b> i <b><font color="#0000FF">in</font></b> {<font color="#993399">0</font><font color="#990000">..</font><font color="#993399">9</font>}<font color="#990000">;</font> <b><font color="#0000FF">do</font></b> echo <font color="#009900">$i</font><font color="#990000">;</font> <b><font color="#0000FF">done</font></b> <font color="#990000">\</font>
- <font color="#990000">|</font> xargs -P<font color="#993399">10</font> -I{} bash -c <font color="#FF0000">'some_expensive_operations "{}"'</font>
-</pre>
-<br />
-<span>We try here to run ten parallel processes; each of them should run the <span class='inlinecode'>some_expensive_operations</span> function with a different argument. The arguments are provided to <span class='inlinecode'>xargs</span> through <span class='inlinecode'>STDIN</span> one per line. When executed, we get this:</span><br />
-<br />
-<pre>
-❯ ./xargs.sh
-bash: line 1: some_expensive_operations: command not found
-bash: line 1: some_expensive_operations: command not found
-bash: line 1: some_expensive_operations: command not found
-bash: line 1: some_expensive_operations: command not found
-bash: line 1: some_expensive_operations: command not found
-bash: line 1: some_expensive_operations: command not found
-bash: line 1: some_expensive_operations: command not found
-bash: line 1: some_expensive_operations: command not found
-bash: line 1: some_expensive_operations: command not found
-bash: line 1: some_expensive_operations: command not found
-</pre>
-<br />
-<span>There&#39;s an easy solution for this. Just export the function! It will then be magically available in any sub-shell!</span><br />
-<br />
-<!-- Generator: GNU source-highlight 3.1.9
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="#9A1900">#!/usr/bin/env bash</font></i>
-
-<b><font color="#000000">some_expensive_operations()</font></b> {
- echo <font color="#FF0000">"Doing expensive operations with '$1' from pid $$"</font>
-}
-<b><font color="#0000FF">export</font></b> -f some_expensive_operations
-
-<b><font color="#0000FF">for</font></b> i <b><font color="#0000FF">in</font></b> {<font color="#993399">0</font><font color="#990000">..</font><font color="#993399">9</font>}<font color="#990000">;</font> <b><font color="#0000FF">do</font></b> echo <font color="#009900">$i</font><font color="#990000">;</font> <b><font color="#0000FF">done</font></b> <font color="#990000">\</font>
- <font color="#990000">|</font> xargs -P<font color="#993399">10</font> -I{} bash -c <font color="#FF0000">'some_expensive_operations "{}"'</font>
-</pre>
-<br />
-<span>When we run this now, we get:</span><br />
-<br />
-<pre>
-❯ ./xargs.sh
-Doing expensive operations with &#39;0&#39; from pid 132831
-Doing expensive operations with &#39;1&#39; from pid 132832
-Doing expensive operations with &#39;2&#39; from pid 132833
-Doing expensive operations with &#39;3&#39; from pid 132834
-Doing expensive operations with &#39;4&#39; from pid 132835
-Doing expensive operations with &#39;5&#39; from pid 132836
-Doing expensive operations with &#39;6&#39; from pid 132837
-Doing expensive operations with &#39;7&#39; from pid 132838
-Doing expensive operations with &#39;8&#39; from pid 132839
-Doing expensive operations with &#39;9&#39; from pid 132840
-</pre>
-<br />
-<span>If <span class='inlinecode'>some_expensive_function</span> would call another function, the other function must also be exported. Otherwise, there will be a runtime error again. E.g., this won&#39;t work:</span><br />
-<br />
-<!-- Generator: GNU source-highlight 3.1.9
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="#9A1900">#!/usr/bin/env bash</font></i>
-
-<b><font color="#000000">some_other_function()</font></b> {
- echo <font color="#FF0000">"$1"</font>
-}
-
-<b><font color="#000000">some_expensive_operations()</font></b> {
- some_other_function <font color="#FF0000">"Doing expensive operations with '$1' from pid $$"</font>
-}
-<b><font color="#0000FF">export</font></b> -f some_expensive_operations
-
-<b><font color="#0000FF">for</font></b> i <b><font color="#0000FF">in</font></b> {<font color="#993399">0</font><font color="#990000">..</font><font color="#993399">9</font>}<font color="#990000">;</font> <b><font color="#0000FF">do</font></b> echo <font color="#009900">$i</font><font color="#990000">;</font> <b><font color="#0000FF">done</font></b> <font color="#990000">\</font>
- <font color="#990000">|</font> xargs -P<font color="#993399">10</font> -I{} bash -c <font color="#FF0000">'some_expensive_operations "{}"'</font>
-</pre>
-<br />
-<span>... because <span class='inlinecode'>some_other_function</span> isn&#39;t exported! You will also need to add an <span class='inlinecode'>export -f some_other_function</span>!</span><br />
-<br />
-<h2 style='display: inline'>Dynamic variables with <span class='inlinecode'>local</span></h2><br />
-<br />
-<span>You may know that <span class='inlinecode'>local</span> is how to declare local variables in a function. Most don&#39;t know that those variables actually have dynamic scope. Let&#39;s consider the following example:</span><br />
-<br />
-<!-- Generator: GNU source-highlight 3.1.9
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="#9A1900">#!/usr/bin/env bash</font></i>
-
-<b><font color="#000000">foo()</font></b> {
- <b><font color="#0000FF">local</font></b> <font color="#009900">foo</font><font color="#990000">=</font>bar <i><font color="#9A1900"># Declare local/dynamic variable</font></i>
- bar
- echo <font color="#FF0000">"$foo"</font>
-}
-
-<b><font color="#000000">bar()</font></b> {
- echo <font color="#FF0000">"$foo"</font>
- <font color="#009900">foo</font><font color="#990000">=</font>baz
-}
-
-<font color="#009900">foo</font><font color="#990000">=</font>foo <i><font color="#9A1900"># Declare global variable</font></i>
-foo <i><font color="#9A1900"># Call function foo</font></i>
-echo <font color="#FF0000">"$foo"</font>
-</pre>
-<br />
-<span>Let&#39;s pause a minute. What do you think the output would be?</span><br />
-<br />
-<span>Let&#39;s run it:</span><br />
-<br />
-<pre>
-❯ ./dynamic.sh
-bar
-baz
-foo
-</pre>
-<br />
-<span>What happened? The variable <span class='inlinecode'>foo</span> (declared with <span class='inlinecode'>local</span>) is available in the function it was declared in and in all other functions down the call stack! We can even modify the value of <span class='inlinecode'>foo</span>, and the change will be visible up the call stack. It&#39;s not a global variable; on the last line, <span class='inlinecode'>echo "$foo"</span> echoes the global variable content.</span><br />
-<br />
-<br />
-<h2 style='display: inline'><span class='inlinecode'>if</span> conditionals</h2><br />
-<br />
-<span>Consider all variants here more or less equivalent:</span><br />
-<br />
-<!-- Generator: GNU source-highlight 3.1.9
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="#9A1900">#!/usr/bin/env bash</font></i>
-
-<b><font color="#0000FF">declare</font></b> -r <font color="#009900">foo</font><font color="#990000">=</font>foo
-<b><font color="#0000FF">declare</font></b> -r <font color="#009900">bar</font><font color="#990000">=</font>bar
-
-<b><font color="#0000FF">if</font></b> <font color="#990000">[</font> <font color="#FF0000">"$foo"</font> <font color="#990000">=</font> foo <font color="#990000">];</font> <b><font color="#0000FF">then</font></b>
- <b><font color="#0000FF">if</font></b> <font color="#990000">[</font> <font color="#FF0000">"$bar"</font> <font color="#990000">=</font> bar <font color="#990000">];</font> <b><font color="#0000FF">then</font></b>
- echo ok1
- <b><font color="#0000FF">fi</font></b>
-<b><font color="#0000FF">fi</font></b>
-
-<b><font color="#0000FF">if</font></b> <font color="#990000">[</font> <font color="#FF0000">"$foo"</font> <font color="#990000">=</font> foo <font color="#990000">]</font> <font color="#990000">&amp;&amp;</font> <font color="#990000">[</font> <font color="#FF0000">"$bar"</font> <font color="#990000">==</font> bar <font color="#990000">];</font> <b><font color="#0000FF">then</font></b>
- echo ok2a
-<b><font color="#0000FF">fi</font></b>
-
-<font color="#990000">[</font> <font color="#FF0000">"$foo"</font> <font color="#990000">=</font> foo <font color="#990000">]</font> <font color="#990000">&amp;&amp;</font> <font color="#990000">[</font> <font color="#FF0000">"$bar"</font> <font color="#990000">==</font> bar <font color="#990000">]</font> <font color="#990000">&amp;&amp;</font> echo ok2b
-
-<b><font color="#0000FF">if</font></b> <font color="#990000">[[</font> <font color="#FF0000">"$foo"</font> <font color="#990000">=</font> foo <font color="#990000">&amp;&amp;</font> <font color="#FF0000">"$bar"</font> <font color="#990000">==</font> bar <font color="#990000">]];</font> <b><font color="#0000FF">then</font></b>
- echo ok3a
-<b><font color="#0000FF">fi</font></b>
-
- <font color="#990000">[[</font> <font color="#FF0000">"$foo"</font> <font color="#990000">=</font> foo <font color="#990000">&amp;&amp;</font> <font color="#FF0000">"$bar"</font> <font color="#990000">==</font> bar <font color="#990000">]]</font> <font color="#990000">&amp;&amp;</font> echo ok3b
-
-<b><font color="#0000FF">if</font></b> <b><font color="#0000FF">test</font></b> <font color="#FF0000">"$foo"</font> <font color="#990000">=</font> foo <font color="#990000">&amp;&amp;</font> <b><font color="#0000FF">test</font></b> <font color="#FF0000">"$bar"</font> <font color="#990000">=</font> bar<font color="#990000">;</font> <b><font color="#0000FF">then</font></b>
- echo ok4a
-<b><font color="#0000FF">fi</font></b>
-
-<b><font color="#0000FF">test</font></b> <font color="#FF0000">"$foo"</font> <font color="#990000">=</font> foo <font color="#990000">&amp;&amp;</font> <b><font color="#0000FF">test</font></b> <font color="#FF0000">"$bar"</font> <font color="#990000">=</font> bar <font color="#990000">&amp;&amp;</font> echo ok4b
-</pre>
-<br />
-<span>The output we get is:</span><br />
-<br />
-<pre>
-❯ ./if.sh
-ok1
-ok2a
-ok2b
-ok3a
-ok3b
-ok4a
-ok4b
-</pre>
-<br />
-<h2 style='display: inline'>Multi-line comments</h2><br />
-<br />
-<span>You all know how to comment. Put a <span class='inlinecode'>#</span> in front of it. You could use multiple single-line comments or abuse heredocs and redirect it to the <span class='inlinecode'>:</span> no-op command to emulate multi-line comments. </span><br />
-<br />
-<!-- Generator: GNU source-highlight 3.1.9
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="#9A1900">#!/usr/bin/env bash</font></i>
-
-<i><font color="#9A1900"># Single line comment</font></i>
-
-<i><font color="#9A1900"># These are two single line</font></i>
-<i><font color="#9A1900"># comments one after another</font></i>
-
-<font color="#990000">:</font> <font color="#990000">&lt;&lt;</font>COMMENT
-This is another way a
-multi line comment
-could be written<font color="#990000">!</font>
-COMMENT
-</pre>
-<br />
-<span>I will not demonstrate the execution of this script, as it won&#39;t print anything! It&#39;s obviously not the most pretty way of commenting on your code, but it could sometimes be handy!</span><br />
-<br />
-<h2 style='display: inline'>Don&#39;t change it while it&#39;s executed</h2><br />
-<br />
-<span>Consider this script:</span><br />
-<br />
-<!-- Generator: GNU source-highlight 3.1.9
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre><i><font color="#9A1900">#!/usr/bin/env bash</font></i>
-
-echo foo
-echo echo baz <font color="#990000">&gt;&gt;</font> <font color="#009900">$0</font>
-echo bar
-</pre>
-<br />
-<span>When it is run, it will do:</span><br />
-<br />
-<pre>
-❯ ./if.sh
-foo
-bar
-baz
-❯ cat if.sh
-#!/usr/bin/env bash
-
-echo foo
-echo echo baz &gt;&gt; $0
-echo bar
-echo baz
-</pre>
-<br />
-<span>So what happened? The <span class='inlinecode'>echo baz</span> line was appended to the script while it was still executed! And the interpreter also picked it up! It tells us that Bash evaluates each line as it encounters it. This can lead to nasty side effects when editing the script while it is still being executed! You should always keep this in mind!</span><br />
-<br />
-<br />
-<span>Other related posts are:</span><br />
-<br />
-<a class='textlink' href='./2021-05-16-personal-bash-coding-style-guide.html'>2021-05-16 Personal Bash coding style guide</a><br />
-<a class='textlink' href='./2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html'>2021-06-05 Gemtexter - One Bash script to rule it all</a><br />
-<a class='textlink' href='./2021-11-29-bash-golf-part-1.html'>2021-11-29 Bash Golf Part 1</a><br />
-<a class='textlink' href='./2022-01-01-bash-golf-part-2.html'>2022-01-01 Bash Golf Part 2</a><br />
-<a class='textlink' href='./2023-12-10-bash-golf-part-3.html'>2023-12-10 Bash Golf Part 3 (You are currently reading this)</a><br />
-<br />
-<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
-<br />
-<a class='textlink' href='../'>Back to the main site</a><br />
- </div>
- </content>
- </entry>
- <entry>
- <title>Site Reliability Engineering - Part 2: Operational Balance in SRE</title>
- <link href="gemini://foo.zone/gemfeed/2023-11-19-site-reliability-engineering-part-2.gmi" />
- <id>gemini://foo.zone/gemfeed/2023-11-19-site-reliability-engineering-part-2.gmi</id>
- <updated>2023-11-19T00:18:18+03:00</updated>
- <author>
- <name>Paul Buetow aka snonux</name>
- <email>paul@dev.buetow.org</email>
- </author>
- <summary>This is the second part of my Site Reliability Engineering (SRE) series. I am currently employed as a Site Reliability Engineer and will try to share what SRE is about in this blog series.</summary>
- <content type="xhtml">
- <div xmlns="http://www.w3.org/1999/xhtml">
- <h1 style='display: inline'>Site Reliability Engineering - Part 2: Operational Balance in SRE</h1><br />
-<br />
-<span class='quote'>Published at 2023-11-19T00:18:18+03:00</span><br />
-<br />
-<span>This is the second part of my Site Reliability Engineering (SRE) series. I am currently employed as a Site Reliability Engineer and will try to share what SRE is about in this blog series.</span><br />
-<br />
-<a class='textlink' href='./2023-08-18-site-reliability-engineering-part-1.html'>2023-08-18 Site Reliability Engineering - Part 1: SRE and Organizational Culture</a><br />
-<a class='textlink' href='./2023-11-19-site-reliability-engineering-part-2.html'>2023-11-19 Site Reliability Engineering - Part 2: Operational Balance in SRE (You are currently reading this)</a><br />
-<a class='textlink' href='./2024-01-09-site-reliability-engineering-part-3.html'>2024-01-09 Site Reliability Engineering - Part 3: On-Call Culture and the Human Aspect</a><br />
-<br />
-<pre>
-⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣾⣷⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
-⠀⠀⠀⠀⣾⠿⠿⠿⠶⠾⠿⠿⣿⣿⣿⣿⣿⣿⠿⠿⠶⠶⠿⠿⠿⣷⠀⠀⠀⠀
-⠀⠀⠀⣸⢿⣆⠀⠀⠀⠀⠀⠀⠀⠙⢿⡿⠉⠀⠀⠀⠀⠀⠀⠀⣸⣿⡆⠀⠀⠀
-⠀⠀⢠⡟⠀⢻⣆⠀⠀⠀⠀⠀⠀⠀⣾⣧⠀⠀⠀⠀⠀⠀⠀⣰⡟⠀⢻⡄⠀⠀
-⠀⢀⣾⠃⠀⠀⢿⡄⠀⠀⠀⠀⠀⢠⣿⣿⡀⠀⠀⠀⠀⠀⢠⡿⠀⠀⠘⣷⡀⠀
-⠀⣼⣏⣀⣀⣀⣈⣿⡀⠀⠀⠀⠀⣸⣿⣿⡇⠀⠀⠀⠀⢀⣿⣃⣀⣀⣀⣸⣧⠀
-⠀⢻⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⣿⣿⣿⣿⠀⠀⠀⠀⠈⢿⣿⣿⣿⣿⣿⡿⠀
-⠀⠀⠉⠛⠛⠛⠋⠁⠀⠀⠀⠀⢸⣿⣿⣿⣿⡆⠀⠀⠀⠀⠈⠙⠛⠛⠛⠉⠀⠀
-⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
-⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
-⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
-⠀⠀⠀⠀⠀⠀⠴⠶⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠶⠦⠀⠀
-</pre>
-<br />
-<h2 style='display: inline'>Operational Balance in SRE: Finding the Equilibrium in Reliability and Velocity</h2><br />
-<br />
-<span>Site Reliability Engineering has established itself as more than just a set of best practices or methodologies. Instead, it stands as a beacon of operational excellence, which guides engineering teams through the turbulent waters of modern software development and system management.</span><br />
-<br />
-<span>In the universe of software production, two fundamental forces are often at odds: The drive for rapid feature release (velocity) and the need for system reliability. Traditionally, the faster teams moved, the more risk was introduced into systems. SRE offers a approach to mitigate these conflicting drives through concepts like error budgets and SLIs/SLOs. These mechanisms offer a tangible metric, allowing teams to quantify how much they can push changes while ensuring they don&#39;t compromise system health. Thus, the error budget becomes a balancing act, where teams weigh the trade-offs between innovation and reliability.</span><br />
-<br />
-<span>An important part of this balance is the dichotomy between operations and coding. According to SRE principles, an engineer should ideally spend an equal amount of time on operations work and coding - 50% on each. This isn&#39;t just a random metric; it&#39;s a reflection of the value SRE places on both maintaining operational excellence and progressing forward with innovations. This balance ensures that while SREs are solving today&#39;s problems, they are also preparing for tomorrow&#39;s challenges. </span><br />
-<br />
-<span>However, not all operational tasks are equal. SRE differentiates between "ops work" and "toil". While ops work is integral to system maintenance and can provide value, toil represents repetitive, mundane tasks which offer little value in the long run. Recognising and minimising toil is crucial. A culture that allows engineers to drown in toil stifles innovation and growth. Hence, an organisation&#39;s approach to toil indicates its operational health and commitment to balance.</span><br />
-<br />
-<span>A cornerstone of achieving operational balance lies in the tools and processes SREs use. Effective monitoring, observability tools, and ensuring that tools can handle high cardinality data are foundational. These aren&#39;t just technical requisites but reflective of an organisational culture prioritising proactive problem-solving. By having systems that effectively flag potential issues before they escalate, SREs can maintain the balance between system stability and forward momentum.</span><br />
-<br />
-<span>Moreover, operational balance isn&#39;t just a technological or process challenge; it&#39;s a human one. The health of on-call engineers is as crucial as the health of the services they manage. On-call postmortems, continuous feedback loops, and recognising gaps (be it tooling, operational expertise, or resources) ensure that the human elements of operations are noticed. </span><br />
-<br />
-<span>In conclusion, operational balance in SRE isn&#39;t static thing but an ongoing journey. It requires organisations to constantly evaluate their practices, tools, and, most importantly, their culture. By achieving this balance, organisations can ensure that they have time for innovation while maintaining the robustness and reliability of their systems, resulting in sustainable long-term success.</span><br />
-<br />
-<span>That all sounds very romantic. The truth is, it&#39;s brutal to archive the perfect balance. No system will ever be perfect. But at least we should aim for it!</span><br />
-<br />
-<span>Continue with the third part of this series:</span><br />
-<br />
-<a class='textlink' href='./2024-01-09-site-reliability-engineering-part-3.html'>2024-01-09 Site Reliability Engineering - Part 3: On-Call Culture and the Human Aspect</a><br />
-<br />
-<span>E-Mail your comments to <span class='inlinecode'>paul@nospam.buetow.org</span> :-)</span><br />
-<br />
-<a class='textlink' href='../'>Back to the main site</a><br />
- </div>
- </content>
- </entry>
diff --git a/index.gmi b/index.gmi
index cde1bdbc..f5d2d0ca 100644
--- a/index.gmi
+++ b/index.gmi
@@ -1,6 +1,6 @@
# foo.zone
-> This site was generated at 2024-01-13T23:08:07+02:00 by `Gemtexter`
+> This site was generated at 2024-01-13T23:11:04+02:00 by `Gemtexter`
```
|\---/|
diff --git a/uptime-stats.gmi b/uptime-stats.gmi
index bf827aaa..0d167736 100644
--- a/uptime-stats.gmi
+++ b/uptime-stats.gmi
@@ -1,6 +1,6 @@
# My machine uptime stats
-> This site was last updated at 2024-01-13T23:08:07+02:00
+> This site was last updated at 2024-01-13T23:11:04+02:00
The following stats were collected via `uptimed` on all of my personal computers over many years and the output was generated by `guprecords`, the global uptime records stats analyser of mine.