summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gemfeed/2008-06-26-perl-poetry.gmi11
-rw-r--r--gemfeed/2008-06-26-perl-poetry.gmi.tpl4
-rw-r--r--gemfeed/2011-05-07-perl-daemon-service-framework.gmi16
-rw-r--r--gemfeed/2011-05-07-perl-daemon-service-framework.gmi.tpl4
-rw-r--r--gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.gmi11
-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.gmi16
-rw-r--r--gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi.tpl4
-rw-r--r--gemfeed/2021-04-24-welcome-to-the-geminispace.gmi11
-rw-r--r--gemfeed/2021-04-24-welcome-to-the-geminispace.gmi.tpl2
-rw-r--r--gemfeed/2021-05-16-personal-bash-coding-style-guide.gmi24
-rw-r--r--gemfeed/2021-05-16-personal-bash-coding-style-guide.gmi.tpl4
-rw-r--r--gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.gmi21
-rw-r--r--gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.gmi.tpl6
-rw-r--r--gemfeed/2021-09-12-keep-it-simple-and-stupid.gmi44
-rw-r--r--gemfeed/2021-09-12-keep-it-simple-and-stupid.gmi.tpl28
-rw-r--r--gemfeed/2021-11-29-bash-golf-part-1.gmi15
-rw-r--r--gemfeed/2021-11-29-bash-golf-part-1.gmi.tpl4
-rw-r--r--gemfeed/2022-01-01-bash-golf-part-2.gmi14
-rw-r--r--gemfeed/2022-01-01-bash-golf-part-2.gmi.tpl4
-rw-r--r--gemfeed/2022-03-06-the-release-of-dtail-4.0.0.gmi20
-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.gmi12
-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.gmi21
-rw-r--r--gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.gmi.tpl6
-rw-r--r--gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.gmi16
-rw-r--r--gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.gmi.tpl4
-rw-r--r--gemfeed/2022-10-30-installing-dtail-on-openbsd.gmi17
-rw-r--r--gemfeed/2022-10-30-installing-dtail-on-openbsd.gmi.tpl4
-rw-r--r--gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.gmi13
-rw-r--r--gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.gmi.tpl4
-rw-r--r--gemfeed/2023-04-09-algorithms-and-data-structures-in-golang-part-1.gmi12
-rw-r--r--gemfeed/2023-04-09-algorithms-and-data-structures-in-golang-part-1.gmi.tpl4
-rw-r--r--gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.gmi10
-rw-r--r--gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.gmi.tpl4
-rw-r--r--gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.gmi20
-rw-r--r--gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.gmi.tpl5
-rw-r--r--gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi18
-rw-r--r--gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi.tpl2
-rw-r--r--gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.gmi35
-rw-r--r--gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.gmi.tpl4
-rw-r--r--gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.gmi14
-rw-r--r--gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.gmi.tpl4
-rw-r--r--gemfeed/2023-09-25-dtail-usage-examples.gmi16
-rw-r--r--gemfeed/2023-09-25-dtail-usage-examples.gmi.tpl4
-rw-r--r--gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.gmi12
-rw-r--r--gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.gmi.tpl2
-rw-r--r--gemfeed/2023-11-11-mind-management-book-notes.gmi15
-rw-r--r--gemfeed/2023-11-11-mind-management-book-notes.gmi.tpl4
-rw-r--r--gemfeed/2023-12-10-bash-golf-part-3.gmi15
-rw-r--r--gemfeed/2023-12-10-bash-golf-part-3.gmi.tpl4
-rw-r--r--gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.gmi8
-rw-r--r--gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.gmi.tpl4
-rw-r--r--gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.gmi3
-rw-r--r--gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.gmi.tpl2
-rw-r--r--gemfeed/2024-05-01-slow-productivity-book-notes.gmi12
-rw-r--r--gemfeed/2024-05-01-slow-productivity-book-notes.gmi.tpl4
-rw-r--r--gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.gmi8
-rw-r--r--gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.gmi.tpl4
-rw-r--r--gemfeed/2024-07-07-the-stoic-challenge-book-notes.gmi9
-rw-r--r--gemfeed/2024-07-07-the-stoic-challenge-book-notes.gmi.tpl4
-rw-r--r--gemfeed/2024-08-05-typing-127.1-words-per-minute.gmi31
-rw-r--r--gemfeed/2024-08-05-typing-127.1-words-per-minute.gmi.tpl202
-rw-r--r--gemfeed/atom.xml424
-rw-r--r--index.gmi2
-rw-r--r--notes/career-guide-and-soft-skills.gmi35
-rw-r--r--notes/mind-management.gmi15
-rw-r--r--notes/slow-productivity.gmi12
-rw-r--r--notes/the-obstacle-is-the-way.gmi20
-rw-r--r--notes/the-stoic-challenge.gmi9
-rw-r--r--uptime-stats.gmi2
72 files changed, 1312 insertions, 74 deletions
diff --git a/gemfeed/2008-06-26-perl-poetry.gmi b/gemfeed/2008-06-26-perl-poetry.gmi
index 0f3ba25b..536c9c50 100644
--- a/gemfeed/2008-06-26-perl-poetry.gmi
+++ b/gemfeed/2008-06-26-perl-poetry.gmi
@@ -25,6 +25,17 @@ _~~|~/_|_|__/|~~~~~~~ | / ~~~~~ | | ~~~~~~~~
(__) (____)
```
+## Table of Contents
+
+* ⇢ Perl Poetry
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ math.pl
+* ⇢ ⇢ christmas.pl
+* ⇢ ⇢ shopping.pl
+* ⇢ ⇢ More...
+
+## Introduction
+
Here are some Perl Poems I wrote. They don't do anything useful when you run them, but they don't produce a compiler error either. They only exist for fun and demonstrate what you can do with Perl syntax.
Wikipedia: "Perl poetry is the practice of writing poems that can be compiled as legal Perl code, for example the piece known as Black Perl. Perl poetry is made possible by the large number of English words that are used in the Perl language. New poems are regularly submitted to the community at PerlMonks."
diff --git a/gemfeed/2008-06-26-perl-poetry.gmi.tpl b/gemfeed/2008-06-26-perl-poetry.gmi.tpl
index 257e21a8..01636b3d 100644
--- a/gemfeed/2008-06-26-perl-poetry.gmi.tpl
+++ b/gemfeed/2008-06-26-perl-poetry.gmi.tpl
@@ -25,6 +25,10 @@ _~~|~/_|_|__/|~~~~~~~ | / ~~~~~ | | ~~~~~~~~
(__) (____)
```
+<< template::inline::toc
+
+## Introduction
+
Here are some Perl Poems I wrote. They don't do anything useful when you run them, but they don't produce a compiler error either. They only exist for fun and demonstrate what you can do with Perl syntax.
Wikipedia: "Perl poetry is the practice of writing poems that can be compiled as legal Perl code, for example the piece known as Black Perl. Perl poetry is made possible by the large number of English words that are used in the Perl language. New poems are regularly submitted to the community at PerlMonks."
diff --git a/gemfeed/2011-05-07-perl-daemon-service-framework.gmi b/gemfeed/2011-05-07-perl-daemon-service-framework.gmi
index 887a7210..78c79a9e 100644
--- a/gemfeed/2011-05-07-perl-daemon-service-framework.gmi
+++ b/gemfeed/2011-05-07-perl-daemon-service-framework.gmi
@@ -9,6 +9,22 @@
//\ //\\ //\ //\\ //\ //\\jrei
```
+## Table of Contents
+
+* ⇢ Perl Daemon (Service Framework)
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ Features
+* ⇢ ⇢ Quick Guide
+* ⇢ ⇢ How to configure
+* ⇢ ⇢ Example
+* ⇢ ⇢ HiRes event loop
+* ⇢ ⇢ Writing your own modules
+* ⇢ ⇢ ⇢ Example module
+* ⇢ ⇢ ⇢ Your own module
+* ⇢ ⇢ May the source be with you
+
+## Introduction
+
PerlDaemon is a minimal daemon for Linux and other Unix like operating systems programmed in Perl. It is a minimal but pretty functional and fairly generic service framework. This means that it does not do anything useful other than providing a framework for starting, stopping, configuring and logging. To do something useful, a module (written in Perl) must be provided.
## Features
diff --git a/gemfeed/2011-05-07-perl-daemon-service-framework.gmi.tpl b/gemfeed/2011-05-07-perl-daemon-service-framework.gmi.tpl
index 36baca1c..f7baa258 100644
--- a/gemfeed/2011-05-07-perl-daemon-service-framework.gmi.tpl
+++ b/gemfeed/2011-05-07-perl-daemon-service-framework.gmi.tpl
@@ -9,6 +9,10 @@
//\ //\\ //\ //\\ //\ //\\jrei
```
+<< template::inline::toc
+
+## Introduction
+
PerlDaemon is a minimal daemon for Linux and other Unix like operating systems programmed in Perl. It is a minimal but pretty functional and fairly generic service framework. This means that it does not do anything useful other than providing a framework for starting, stopping, configuring and logging. To do something useful, a module (written in Perl) must be provided.
## Features
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 fe07f8c5..ee830eb5 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
@@ -22,6 +22,17 @@
\ `.
```
+## Table of Contents
+
+* ⇢ Jails and ZFS with Puppet on FreeBSD
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ ZFS
+* ⇢ ⇢ Jails
+* ⇢ ⇢ Inside-Jail Puppet
+* ⇢ ⇢ Managing multiple Jails
+
+## Introduction
+
Over the last couple of years I wrote quite a few Puppet modules in order to manage my personal server infrastructure. One of them manages FreeBSD Jails and another one ZFS file systems. I thought I would give a brief overview in how it looks and feels.
## ZFS
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 c5595a87..a7a311d8 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
@@ -22,6 +22,10 @@
\ `.
```
+<< template::inline::toc
+
+## Introduction
+
Over the last couple of years I wrote quite a few Puppet modules in order to manage my personal server infrastructure. One of them manages FreeBSD Jails and another one ZFS file systems. I thought I would give a brief overview in how it looks and feels.
## ZFS
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 21e7d316..df9a037d 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
@@ -4,6 +4,22 @@
=> ./dtail-the-distributed-log-tail-program/title.png DTail logo image
+## Table of Contents
+
+* ⇢ DTail - The distributed log tail program
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ A Mimecast Pet Project
+* ⇢ ⇢ Differentiating from log management systems
+* ⇢ ⇢ Combining simplicity, security and efficiency
+* ⇢ ⇢ The DTail family of commands
+* ⇢ ⇢ Usage example
+* ⇢ ⇢ Fitting it in
+* ⇢ ⇢ Advanced features
+* ⇢ ⇢ For the future
+* ⇢ ⇢ Open Source
+
+## Introduction
+
This article first appeared at the Mimecast Engineering Blog but I made it available here in my personal internet site too.
=> https://medium.com/mimecast-engineering/dtail-the-distributed-log-tail-program-79b8087904bb Original Mimecast Engineering Blog post at Medium
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 5c955c66..97f9429d 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
@@ -4,6 +4,10 @@
=> ./dtail-the-distributed-log-tail-program/title.png DTail logo image
+<< template::inline::toc
+
+## Introduction
+
This article first appeared at the Mimecast Engineering Blog but I made it available here in my personal internet site too.
=> https://medium.com/mimecast-engineering/dtail-the-distributed-log-tail-program-79b8087904bb Original Mimecast Engineering Blog post at Medium
diff --git a/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi b/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi
index 26e56715..a7b1bbb2 100644
--- a/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi
+++ b/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi
@@ -30,6 +30,17 @@ However, if you still use HTTP, you are just surfing the fallback HTML version o
```
+## Table of Contents
+
+* ⇢ Welcome to the Geminispace
+* ⇢ ⇢ Motivation
+* ⇢ ⇢ ⇢ My urge to revamp my personal website
+* ⇢ ⇢ ⇢ My still great Laptop running hot
+* ⇢ ⇢ Discovering the Gemini internet protocol
+* ⇢ ⇢ My own Gemini capsule
+* ⇢ ⇢ Gemini advantages summarised
+* ⇢ ⇢ Dive into deep Gemini space
+
## Motivation
### My urge to revamp my personal website
diff --git a/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi.tpl b/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi.tpl
index 0a036349..63586cf5 100644
--- a/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi.tpl
+++ b/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi.tpl
@@ -30,6 +30,8 @@ However, if you still use HTTP, you are just surfing the fallback HTML version o
```
+<< template::inline::toc
+
## Motivation
### My urge to revamp my personal website
diff --git a/gemfeed/2021-05-16-personal-bash-coding-style-guide.gmi b/gemfeed/2021-05-16-personal-bash-coding-style-guide.gmi
index 349b39b5..1765f71d 100644
--- a/gemfeed/2021-05-16-personal-bash-coding-style-guide.gmi
+++ b/gemfeed/2021-05-16-personal-bash-coding-style-guide.gmi
@@ -15,6 +15,30 @@
"\__/"---------------"\__/"-+---+'
```
+## Table of Contents
+
+* ⇢ Personal Bash coding style guide
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ My modifications
+* ⇢ ⇢ ⇢ Shebang
+* ⇢ ⇢ ⇢ Two space soft-tabs indentation
+* ⇢ ⇢ ⇢ Breaking long pipes
+* ⇢ ⇢ ⇢ Quoting your variables
+* ⇢ ⇢ ⇢ Prefer built-in commands over external commands
+* ⇢ ⇢ My additions
+* ⇢ ⇢ ⇢ Use of 'yes' and 'no'
+* ⇢ ⇢ ⇢ Non-evil alternative to variable assignments via eval
+* ⇢ ⇢ ⇢ Prefer pipes over arrays for list processing
+* ⇢ ⇢ ⇢ Assign-then-shift
+* ⇢ ⇢ ⇢ Paranoid mode
+* ⇢ ⇢ Learned
+* ⇢ ⇢ ⇢ Unintended lexicographical comparison.
+* ⇢ ⇢ ⇢ PIPESTATUS
+* ⇢ ⇢ Use common sense and BE CONSISTENT.
+* ⇢ ⇢ Advanced Bash learning pro tip
+
+## Introduction
+
Lately, I have been polishing and writing a lot of Bash code. Not that I never wrote a lot of Bash, but now as I also looked through the Google Shell Style Guide, I thought it is time also to write my thoughts on that. I agree with that guide in most, but not in all points.
=> https://google.github.io/styleguide/shellguide.html Google Shell Style Guide
diff --git a/gemfeed/2021-05-16-personal-bash-coding-style-guide.gmi.tpl b/gemfeed/2021-05-16-personal-bash-coding-style-guide.gmi.tpl
index 04e3f708..32e255f3 100644
--- a/gemfeed/2021-05-16-personal-bash-coding-style-guide.gmi.tpl
+++ b/gemfeed/2021-05-16-personal-bash-coding-style-guide.gmi.tpl
@@ -15,6 +15,10 @@
"\__/"---------------"\__/"-+---+'
```
+<< template::inline::toc
+
+## Introduction
+
Lately, I have been polishing and writing a lot of Bash code. Not that I never wrote a lot of Bash, but now as I also looked through the Google Shell Style Guide, I thought it is time also to write my thoughts on that. I agree with that guide in most, but not in all points.
=> https://google.github.io/styleguide/shellguide.html Google Shell Style Guide
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 c8e39d48..4f5c0c3c 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
@@ -43,11 +43,30 @@
`+a:f:......jrei'''
```
+## Table of Contents
+
+* ⇢ Gemtexter - One Bash script to rule it all
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ ⇢ Motivation
+* ⇢ ⇢ Output formats
+* ⇢ ⇢ Taking it as far as I should, but no farther
+* ⇢ ⇢ ⇢ Modularization
+* ⇢ ⇢ ⇢ Bash best practises and ShellCheck
+* ⇢ ⇢ ⇢ Unit testing
+* ⇢ ⇢ ⇢ HTML unit test example
+* ⇢ ⇢ ⇢ Markdown unit test example
+* ⇢ ⇢ Handcrafted HTML styles
+* ⇢ ⇢ Configurability
+* ⇢ ⇢ Future features
+* ⇢ ⇢ Conclusion
+
+## Introduction
+
You might have read my previous blog posts about entering the Geminispace, where I pointed out the benefits of having and maintaining an internet presence there. This whole site (the blog and all other pages) is composed in the Gemtext markup language.
This comes with the benefit that I can write content in my favourite text editor (Vim).
-## Motivation
+### Motivation
Another benefit of using Gemini is that the Gemtext markup language is easy to parse. As my site is dual-hosted (Gemini+HTTP), I could, in theory, just write a shell script to deal with the conversion from Gemtext to HTML; there is no need for a full-featured programming language here. I have done a lot of Bash in the past, but I am also often revisiting old tools and techniques for refreshing and keeping the knowledge up to date here.
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 61cd65be..f45bedec 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
@@ -43,11 +43,15 @@
`+a:f:......jrei'''
```
+<< template::inline::toc
+
+## Introduction
+
You might have read my previous blog posts about entering the Geminispace, where I pointed out the benefits of having and maintaining an internet presence there. This whole site (the blog and all other pages) is composed in the Gemtext markup language.
This comes with the benefit that I can write content in my favourite text editor (Vim).
-## Motivation
+### Motivation
Another benefit of using Gemini is that the Gemtext markup language is easy to parse. As my site is dual-hosted (Gemini+HTTP), I could, in theory, just write a shell script to deal with the conversion from Gemtext to HTML; there is no need for a full-featured programming language here. I have done a lot of Bash in the past, but I am also often revisiting old tools and techniques for refreshing and keeping the knowledge up to date here.
diff --git a/gemfeed/2021-09-12-keep-it-simple-and-stupid.gmi b/gemfeed/2021-09-12-keep-it-simple-and-stupid.gmi
index 834c4020..51f97223 100644
--- a/gemfeed/2021-09-12-keep-it-simple-and-stupid.gmi
+++ b/gemfeed/2021-09-12-keep-it-simple-and-stupid.gmi
@@ -17,25 +17,45 @@
-------------------- --------------------
```
+## Table of Contents
+
+* ⇢ Keep it simple and stupid
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ Need faster hardware
+* ⇢ ⇢ Too complex to be replaced
+* ⇢ ⇢ ⇢ On COBOL
+* ⇢ ⇢ ⇢ On Kubernetes
+* ⇢ ⇢ ⇢ The younger generation of IT professionals
+* ⇢ ⇢ The bloated web
+* ⇢ ⇢ Fancy log-management solutions
+* ⇢ ⇢ More KISS
+* ⇢ ⇢ ⇢ The Adslowbe PDF Reader
+* ⇢ ⇢ ⇢ The power of plain text files
+* ⇢ ⇢ ⇢ KISS for programmers
+* ⇢ ⇢ When KISS is not KISS anymore
+* ⇢ ⇢ Other relevant readings
+
+## Introduction
+
A robust computer system must be kept simple and stupid (KISS). The fancier the system is, the more can break. Unfortunately, most systems tend to become complex and challenging to maintain in today's world. In the early days, so I was told, engineers understood every part of the system, but nowadays, we see more of the "lasagna" stack. One layer or framework is built on top of another layer, and in the end, nobody has got a clue what's going on.
-# Need faster hardware
+## Need faster hardware
This not just makes the system much more complex, difficult to maintain and challenging to troubleshoot, but also slow. So more experts are needed to support it. Also, newer and faster hardware is required to make it run smoothly. Often, it's so much easier to buy speedier hardware than rewrite a whole system from scratch from the bottom-up. The latter would require much more resources in the short run, but in the long run, it should pay off. Unfortunately, many project owners scare away from it as they only want to get their project done and then move on.
-# Too complex to be replaced
+## Too complex to be replaced
-## On COBOL
+### On COBOL
Have a look at COBOL, a prevalent programming language of the past. No one is learning COBOL in college or university anymore, but many legacy systems still require COBOL experts. Why is this? It's just too scary to write everything from scratch. There's too much COBOL code out there that can't be replaced from today to tomorrow.
=> https://nymag.com/intelligencer/2020/04/what-is-cobol-what-does-it-have-to-do-with-the-coronavirus.html
-## On Kubernetes
+### On Kubernetes
Now have a look at Kubernetes (k8s), the current trendy infrastructure thing to use nowadays. Of course, there are many benefits of using k8s (auto-scaling, reproducible deployments, dynamic resource allocation and resource sharing, saving of hardware costs, good commercial for potential employees as it is the current hot sauce of infrastructure). But all of this also comes with costs: You need experts operating the k8s cluster (or you need to pay extra for a managed cluster in the cloud), increased complexity of the system (k8s comes with a steep learning curve). The latter not only applies to the engineers managing the k8s cluster - it also applies to the software engineers, who now have to develop 'cloud native' applications and, therefore, have to change how they developed software how they used to. They all need to be re-educated on what cloud-native means, and they also need to understand the key concepts of k8s for writing optimal software for it.
-## The younger generation of IT professionals
+### The younger generation of IT professionals
Maybe the younger generation knows all of this already after graduation, but then they are missing other critical parts of the system for sure. I have seen engineers who knew about containers and how to configure resource restrictions for a Docker container managed via k8s but have never heard the terms Linux control groups and Linux namespaces. So obviously, there is some knowledge gap of the underlying architecture. This can be a big problem when you have to troubleshoot such a system during a production incident and k8s adds a lot of abstraction to the mix which doesn't make it easier.
@@ -51,7 +71,7 @@ And here is something to smile about:
=> https://christine.website/blog/theres-a-node-2021-10-02
-# The bloated web
+## The bloated web
Another example is the modern web. Have you ever wondered why the internet becomes slower and slower nowadays? The modern web is so much like lasagna that I decided to use Gemini to be the primary protocol of my website. The HTML version of this website is just a fallback as many visitors don't know what Gemini is and don't have any compatible software installed for surfing the Geminispace:
@@ -59,7 +79,7 @@ Another example is the modern web. Have you ever wondered why the internet becom
The Gemtext protocol is KISS. There's no way to do other formattings than headings, links, paragraphs, lists, quotes, and bare text blocks (e.g., ASCII art or code snippets). There's no way to create bloated Gemini sites, and due to its limited capabilities, there's also no way to commercialise it (e.g. there's no good way to track the site visitors as things like cookies don't exist). By design, the Gemini protocol can't be extended, so there is no chance to abuse it even in the future. Gemini sites will stay KISS forever, and there won't be any fancy HTML/JavaScript frameworks like we see on the modern web.
-# Fancy log-management solutions
+## Fancy log-management solutions
Yet another example I want to bring up is DTail, the distributed log tail program I wrote. There are many great and fancy log-management solutions available to choose from, and they all seem complex to set up and maintain. The ELK stack, for example, requires you to operate an ElasticSearch cluster (or multiple, if you are geo-redundant), Logstash (different configurations and instances, depending on your infrastructure) and a Kibana web-frontend (which also needs to be highly available). I have operated ElasticSearch clusters on multiple occasions, and I must say that it is not an easy task to optimise it for the particular workload you might encounter. I also have seen many ES clusters operated by other people, and I have seen these clusters failing a lot (so it's not just me). The reduced complexity of DTail also makes it more robust against outages. You won't troubleshoot your distributed application very well if the log management infrastructure isn't working either.
@@ -67,23 +87,23 @@ Yet another example I want to bring up is DTail, the distributed log tail progra
I don't say that the ELK stack doesn't work, but it requires experts and additional hardware resources to support it. But instead, if you keep your infrastructure simple (e.g. only use DTail), it will maintain pretty much by itself.
-# More KISS
+## More KISS
-## The Adslowbe PDF Reader
+### The Adslowbe PDF Reader
Another perfect example is the Adobe PDF reader. How can it be that the inventor of the PDF format creates such a terrible user experience with its official reader? The reader is awful bloated, and slow. There are much better alternatives around (especially for Linux and other UNIX like operating systems, look at Zathura for example). I believe the reason Adobe's reader is like this is featuritis, and 90% of the users don't use 90% of all available features. Less is more; keep it simple and stupid.
-## The power of plain text files
+### The power of plain text files
Speaking of file formats, never underestimate the power of plain text files. Plain text files don't require any special software to be opened, and they outlive the software which created them in the first place. You will still be able to read a plain text file on a modern computer system ten (or twenty) years from now, but you probably won't be able to read such an old version of an Adobe Photoshop image file if the software required for reading that format isn't supported anymore and doesn't run anymore on modern computers.
-## KISS for programmers
+### KISS for programmers
Not to mention, keeping things simple and stupid also reduces the potential malicious attack surface. It's not just about the software and services you use and operate. It's also about the software you write. Here is a nice article about the KISS principle in software development:
=> https://thevaluable.dev/kiss-principle-explained/
-# When KISS is not KISS anymore
+## When KISS is not KISS anymore
There is, however, a trap. The more you spend time with things, the more these things feel natural to you and you become an expert. The more you become an expert, the more you introduce more abstractions and other clever ways of doing things. For you, things seem to be KISS still, but another person may not be an expert and might not understand what you do. One of the fundamental challenges is to keep things really KISS. You might add abstraction upon abstraction to a system and don't even notice it until it is too late.
diff --git a/gemfeed/2021-09-12-keep-it-simple-and-stupid.gmi.tpl b/gemfeed/2021-09-12-keep-it-simple-and-stupid.gmi.tpl
index 753587bf..008f1662 100644
--- a/gemfeed/2021-09-12-keep-it-simple-and-stupid.gmi.tpl
+++ b/gemfeed/2021-09-12-keep-it-simple-and-stupid.gmi.tpl
@@ -17,25 +17,29 @@
-------------------- --------------------
```
+<< template::inline::toc
+
+## Introduction
+
A robust computer system must be kept simple and stupid (KISS). The fancier the system is, the more can break. Unfortunately, most systems tend to become complex and challenging to maintain in today's world. In the early days, so I was told, engineers understood every part of the system, but nowadays, we see more of the "lasagna" stack. One layer or framework is built on top of another layer, and in the end, nobody has got a clue what's going on.
-# Need faster hardware
+## Need faster hardware
This not just makes the system much more complex, difficult to maintain and challenging to troubleshoot, but also slow. So more experts are needed to support it. Also, newer and faster hardware is required to make it run smoothly. Often, it's so much easier to buy speedier hardware than rewrite a whole system from scratch from the bottom-up. The latter would require much more resources in the short run, but in the long run, it should pay off. Unfortunately, many project owners scare away from it as they only want to get their project done and then move on.
-# Too complex to be replaced
+## Too complex to be replaced
-## On COBOL
+### On COBOL
Have a look at COBOL, a prevalent programming language of the past. No one is learning COBOL in college or university anymore, but many legacy systems still require COBOL experts. Why is this? It's just too scary to write everything from scratch. There's too much COBOL code out there that can't be replaced from today to tomorrow.
=> https://nymag.com/intelligencer/2020/04/what-is-cobol-what-does-it-have-to-do-with-the-coronavirus.html
-## On Kubernetes
+### On Kubernetes
Now have a look at Kubernetes (k8s), the current trendy infrastructure thing to use nowadays. Of course, there are many benefits of using k8s (auto-scaling, reproducible deployments, dynamic resource allocation and resource sharing, saving of hardware costs, good commercial for potential employees as it is the current hot sauce of infrastructure). But all of this also comes with costs: You need experts operating the k8s cluster (or you need to pay extra for a managed cluster in the cloud), increased complexity of the system (k8s comes with a steep learning curve). The latter not only applies to the engineers managing the k8s cluster - it also applies to the software engineers, who now have to develop 'cloud native' applications and, therefore, have to change how they developed software how they used to. They all need to be re-educated on what cloud-native means, and they also need to understand the key concepts of k8s for writing optimal software for it.
-## The younger generation of IT professionals
+### The younger generation of IT professionals
Maybe the younger generation knows all of this already after graduation, but then they are missing other critical parts of the system for sure. I have seen engineers who knew about containers and how to configure resource restrictions for a Docker container managed via k8s but have never heard the terms Linux control groups and Linux namespaces. So obviously, there is some knowledge gap of the underlying architecture. This can be a big problem when you have to troubleshoot such a system during a production incident and k8s adds a lot of abstraction to the mix which doesn't make it easier.
@@ -51,7 +55,7 @@ And here is something to smile about:
=> https://christine.website/blog/theres-a-node-2021-10-02
-# The bloated web
+## The bloated web
Another example is the modern web. Have you ever wondered why the internet becomes slower and slower nowadays? The modern web is so much like lasagna that I decided to use Gemini to be the primary protocol of my website. The HTML version of this website is just a fallback as many visitors don't know what Gemini is and don't have any compatible software installed for surfing the Geminispace:
@@ -59,7 +63,7 @@ Another example is the modern web. Have you ever wondered why the internet becom
The Gemtext protocol is KISS. There's no way to do other formattings than headings, links, paragraphs, lists, quotes, and bare text blocks (e.g., ASCII art or code snippets). There's no way to create bloated Gemini sites, and due to its limited capabilities, there's also no way to commercialise it (e.g. there's no good way to track the site visitors as things like cookies don't exist). By design, the Gemini protocol can't be extended, so there is no chance to abuse it even in the future. Gemini sites will stay KISS forever, and there won't be any fancy HTML/JavaScript frameworks like we see on the modern web.
-# Fancy log-management solutions
+## Fancy log-management solutions
Yet another example I want to bring up is DTail, the distributed log tail program I wrote. There are many great and fancy log-management solutions available to choose from, and they all seem complex to set up and maintain. The ELK stack, for example, requires you to operate an ElasticSearch cluster (or multiple, if you are geo-redundant), Logstash (different configurations and instances, depending on your infrastructure) and a Kibana web-frontend (which also needs to be highly available). I have operated ElasticSearch clusters on multiple occasions, and I must say that it is not an easy task to optimise it for the particular workload you might encounter. I also have seen many ES clusters operated by other people, and I have seen these clusters failing a lot (so it's not just me). The reduced complexity of DTail also makes it more robust against outages. You won't troubleshoot your distributed application very well if the log management infrastructure isn't working either.
@@ -67,23 +71,23 @@ Yet another example I want to bring up is DTail, the distributed log tail progra
I don't say that the ELK stack doesn't work, but it requires experts and additional hardware resources to support it. But instead, if you keep your infrastructure simple (e.g. only use DTail), it will maintain pretty much by itself.
-# More KISS
+## More KISS
-## The Adslowbe PDF Reader
+### The Adslowbe PDF Reader
Another perfect example is the Adobe PDF reader. How can it be that the inventor of the PDF format creates such a terrible user experience with its official reader? The reader is awful bloated, and slow. There are much better alternatives around (especially for Linux and other UNIX like operating systems, look at Zathura for example). I believe the reason Adobe's reader is like this is featuritis, and 90% of the users don't use 90% of all available features. Less is more; keep it simple and stupid.
-## The power of plain text files
+### The power of plain text files
Speaking of file formats, never underestimate the power of plain text files. Plain text files don't require any special software to be opened, and they outlive the software which created them in the first place. You will still be able to read a plain text file on a modern computer system ten (or twenty) years from now, but you probably won't be able to read such an old version of an Adobe Photoshop image file if the software required for reading that format isn't supported anymore and doesn't run anymore on modern computers.
-## KISS for programmers
+### KISS for programmers
Not to mention, keeping things simple and stupid also reduces the potential malicious attack surface. It's not just about the software and services you use and operate. It's also about the software you write. Here is a nice article about the KISS principle in software development:
=> https://thevaluable.dev/kiss-principle-explained/
-# When KISS is not KISS anymore
+## When KISS is not KISS anymore
There is, however, a trap. The more you spend time with things, the more these things feel natural to you and you become an expert. The more you become an expert, the more you introduce more abstractions and other clever ways of doing things. For you, things seem to be KISS still, but another person may not be an expert and might not understand what you do. One of the fundamental challenges is to keep things really KISS. You might add abstraction upon abstraction to a system and don't even notice it until it is too late.
diff --git a/gemfeed/2021-11-29-bash-golf-part-1.gmi b/gemfeed/2021-11-29-bash-golf-part-1.gmi
index ebb317d7..0e6ef0fe 100644
--- a/gemfeed/2021-11-29-bash-golf-part-1.gmi
+++ b/gemfeed/2021-11-29-bash-golf-part-1.gmi
@@ -14,6 +14,21 @@ jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Art by Joan Stark
```
+## Table of Contents
+
+* ⇢ Bash Golf Part 1
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ TCP/IP networking
+* ⇢ ⇢ Process substitution
+* ⇢ ⇢ Grouping
+* ⇢ ⇢ Expansions
+* ⇢ ⇢ - aka stdin and stdout placeholder
+* ⇢ ⇢ Alternative argument passing
+* ⇢ ⇢ : aka the null command
+* ⇢ ⇢ (No) floating point support
+
+## Introduction
+
This is the first blog post about my Bash Golf series. This series is about random Bash tips, tricks and weirdnesses I came across. It's a collection of smaller articles I wrote in an older (in German language) blog, which I translated and refreshed with some new content.
=> ./2021-11-29-bash-golf-part-1.gmi 2021-11-29 Bash Golf Part 1 (You are currently reading this)
diff --git a/gemfeed/2021-11-29-bash-golf-part-1.gmi.tpl b/gemfeed/2021-11-29-bash-golf-part-1.gmi.tpl
index 5b5885a4..0f4c0d21 100644
--- a/gemfeed/2021-11-29-bash-golf-part-1.gmi.tpl
+++ b/gemfeed/2021-11-29-bash-golf-part-1.gmi.tpl
@@ -14,6 +14,10 @@ jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Art by Joan Stark
```
+<< template::inline::toc
+
+## Introduction
+
This is the first blog post about my Bash Golf series. This series is about random Bash tips, tricks and weirdnesses I came across. It's a collection of smaller articles I wrote in an older (in German language) blog, which I translated and refreshed with some new content.
<< template::inline::index bash-golf
diff --git a/gemfeed/2022-01-01-bash-golf-part-2.gmi b/gemfeed/2022-01-01-bash-golf-part-2.gmi
index 2fc2d2be..815cd361 100644
--- a/gemfeed/2022-01-01-bash-golf-part-2.gmi
+++ b/gemfeed/2022-01-01-bash-golf-part-2.gmi
@@ -14,6 +14,20 @@ jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Art by Joan Stark, mod. by Paul Buetow
```
+## Table of Contents
+
+* ⇢ Bash Golf Part 2
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ Redirection
+* ⇢ ⇢ HERE
+* ⇢ ⇢ RANDOM
+* ⇢ ⇢ set -x and set -e and pipefile
+* ⇢ ⇢ ⇢ -x
+* ⇢ ⇢ ⇢ -e
+* ⇢ ⇢ ⇢ pipefail
+
+## Introduction
+
This is the second blog post about my Bash Golf series. This series is random Bash tips, tricks and weirdnesses I came across. It's a collection of smaller articles I wrote in an older (in German language) blog, which I translated and refreshed with some new content.
=> ./2021-11-29-bash-golf-part-1.gmi 2021-11-29 Bash Golf Part 1
diff --git a/gemfeed/2022-01-01-bash-golf-part-2.gmi.tpl b/gemfeed/2022-01-01-bash-golf-part-2.gmi.tpl
index ec589a69..8a834664 100644
--- a/gemfeed/2022-01-01-bash-golf-part-2.gmi.tpl
+++ b/gemfeed/2022-01-01-bash-golf-part-2.gmi.tpl
@@ -14,6 +14,10 @@ jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Art by Joan Stark, mod. by Paul Buetow
```
+<< template::inline::toc
+
+## Introduction
+
This is the second blog post about my Bash Golf series. This series is random Bash tips, tricks and weirdnesses I came across. It's a collection of smaller articles I wrote in an older (in German language) blog, which I translated and refreshed with some new content.
<< template::inline::index bash-golf
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 cd8bb6a4..eb4903f5 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
@@ -16,6 +16,26 @@
| |
```
+## Table of Contents
+
+* ⇢ The release of DTail 4.0.0
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ So, what's new in 4.0.0?
+* ⇢ ⇢ ⇢ Rewritten logging
+* ⇢ ⇢ ⇢ Configurable terminal color codes
+* ⇢ ⇢ ⇢ Serverless mode
+* ⇢ ⇢ ⇢ Shorthand flags
+* ⇢ ⇢ ⇢ Spartan (aka plain) mode
+* ⇢ ⇢ ⇢ Standard input pipe
+* ⇢ ⇢ ⇢ New command dtailhealth
+* ⇢ ⇢ ⇢ Improved documentation
+* ⇢ ⇢ ⇢ Integration testing suite
+* ⇢ ⇢ ⇢ Improved code
+* ⇢ ⇢ ⇢ Use of memory pools
+* ⇢ ⇢ What's next
+
+## Introduction
+
I have recently released DTail 4.0.0 and this blog post goes through all the new goodies. If you want to jump directly to DTail, do it here (there are nice animated gifs which demonstrates the usage pretty well):
=> https://dtail.dev
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 a7d6bdd5..a8f3a111 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
@@ -16,6 +16,10 @@
| |
```
+<< template::inline::toc
+
+## Introduction
+
I have recently released DTail 4.0.0 and this blog post goes through all the new goodies. If you want to jump directly to DTail, do it here (there are nice animated gifs which demonstrates the usage pretty well):
=> https://dtail.dev
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 5719847c..cc7ccd07 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
@@ -4,6 +4,18 @@
=> ./perl-is-still-a-great-choice/regular_expressions.png Comic source: XKCD
+## Table of Contents
+
+* ⇢ Perl is still a great choice
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ Write-only language
+* ⇢ ⇢ Is Perl abandoned?
+* ⇢ ⇢ Why use Perl as there are better alternatives?
+* ⇢ ⇢ Why all the sigils? It looks like an exploding ASCII factory!!
+* ⇢ ⇢ Where do I personally still use perl?
+
+## Introduction
+
Perl (the Practical Extraction and Report Language) is a battle-tested, mature, multi-paradigm dynamic programming language. Note that it's not called PERL, neither P.E.R.L. nor Pearl. "Perl" is the name of the language and `perl` the name of the interpreter or the interpreter command.
Unfortunately (it makes me sad), Perl's popularity has been declining over the last years as Google trends shows:
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 ea0170e2..890de11c 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
@@ -4,6 +4,10 @@
=> ./perl-is-still-a-great-choice/regular_expressions.png Comic source: XKCD
+<< template::inline::toc
+
+## Introduction
+
Perl (the Practical Extraction and Report Language) is a battle-tested, mature, multi-paradigm dynamic programming language. Note that it's not called PERL, neither P.E.R.L. nor Pearl. "Perl" is the name of the language and `perl` the name of the interpreter or the interpreter command.
Unfortunately (it makes me sad), Perl's popularity has been declining over the last years as Google trends shows:
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 9180891b..31c5cc2c 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
@@ -29,9 +29,28 @@
ASCII Art by John Savard
```
+## Table of Contents
+
+* ⇢ Let's Encrypt with OpenBSD and Rex
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ ⇢ What's Let's Encrypt?
+* ⇢ ⇢ Meet `acme-client`
+* ⇢ ⇢ Configuration
+* ⇢ ⇢ ⇢ acme-client.conf
+* ⇢ ⇢ ⇢ httpd.conf
+* ⇢ ⇢ ⇢ CRON job
+* ⇢ ⇢ relayd.conf and smtpd.conf
+* ⇢ ⇢ Rexification
+* ⇢ ⇢ ⇢ General ACME client configuration
+* ⇢ ⇢ ⇢ Service rexification
+* ⇢ ⇢ All pieces together
+* ⇢ ⇢ Conclusion
+
+## Introduction
+
I was amazed at how easy it is to automatically generate and update Let's Encrypt certificates with OpenBSD.
-## What's Let's Encrypt?
+### What's Let's Encrypt?
> Let's Encrypt is a non-profit certificate authority run by Internet Security Research Group that provides X.509 certificates for Transport Layer Security (TLS) encryption at no charge. It is the world's largest certificate authority, used by more than 265 million websites, with the goal of all websites being secure and using HTTPS.
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 de5ee1f0..6797ff2d 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
@@ -29,9 +29,13 @@
ASCII Art by John Savard
```
+<< template::inline::toc
+
+## Introduction
+
I was amazed at how easy it is to automatically generate and update Let's Encrypt certificates with OpenBSD.
-## What's Let's Encrypt?
+### What's Let's Encrypt?
> Let's Encrypt is a non-profit certificate authority run by Internet Security Research Group that provides X.509 certificates for Transport Layer Security (TLS) encryption at no charge. It is the world's largest certificate authority, used by more than 265 million websites, with the goal of all websites being secure and using HTTPS.
diff --git a/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.gmi b/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.gmi
index 2e0d0535..eb841254 100644
--- a/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.gmi
+++ b/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.gmi
@@ -14,6 +14,22 @@
jgs `"""""""""`
```
+## Table of Contents
+
+* ⇢ Gemtexter 1.1.0 - Let's Gemtext again
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ What's new?
+* ⇢ ⇢ ⇢ Automatic check for GNU version requirements
+* ⇢ ⇢ ⇢ Backticks now produce `inline code blocks` in the HTML output
+* ⇢ ⇢ ⇢ Cache for Atom feed generation
+* ⇢ ⇢ ⇢ Input filter support
+* ⇢ ⇢ ⇢ Revamped `git` support
+* ⇢ ⇢ ⇢ Addition of `htmlextras` and web font support
+* ⇢ ⇢ ⇢ Sub-section support
+* ⇢ ⇢ ⇢ More
+
+## Introduction
+
I proudly announce that I've released Gemtexter version `1.1.0`. What is Gemtexter? It's my minimalist static site generator for Gemini Gemtext, HTML and Markdown written in GNU Bash.
=> https://codeberg.org/snonux/gemtexter
diff --git a/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.gmi.tpl b/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.gmi.tpl
index 383a5d39..1fb173da 100644
--- a/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.gmi.tpl
+++ b/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.gmi.tpl
@@ -14,6 +14,10 @@
jgs `"""""""""`
```
+<< template::inline::toc
+
+## Introduction
+
I proudly announce that I've released Gemtexter version `1.1.0`. What is Gemtexter? It's my minimalist static site generator for Gemini Gemtext, HTML and Markdown written in GNU Bash.
=> https://codeberg.org/snonux/gemtexter
diff --git a/gemfeed/2022-10-30-installing-dtail-on-openbsd.gmi b/gemfeed/2022-10-30-installing-dtail-on-openbsd.gmi
index 5941a7cb..da44662d 100644
--- a/gemfeed/2022-10-30-installing-dtail-on-openbsd.gmi
+++ b/gemfeed/2022-10-30-installing-dtail-on-openbsd.gmi
@@ -39,6 +39,23 @@
' '
```
+## Table of Contents
+
+* ⇢ Installing DTail on OpenBSD
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ Compile it
+* ⇢ ⇢ Install it
+* ⇢ ⇢ ⇢ Rexification
+* ⇢ ⇢ Configure it
+* ⇢ ⇢ ⇢ Rexification
+* ⇢ ⇢ Update the key cache for it
+* ⇢ ⇢ ⇢ Rexification
+* ⇢ ⇢ Start it
+* ⇢ ⇢ Use it
+* ⇢ ⇢ Conclusions
+
+## Introduction
+
This will be a quick blog post, as I am busy with my personal life now. I have relocated to a different country and am still busy arranging things. So bear with me :-)
In this post, I want to give a quick overview (or how-to) about installing DTail on OpenBSD, as the official documentation only covers Red Hat and Fedora Linux! And this blog post will also be used as my reference!
diff --git a/gemfeed/2022-10-30-installing-dtail-on-openbsd.gmi.tpl b/gemfeed/2022-10-30-installing-dtail-on-openbsd.gmi.tpl
index 2bb239e2..d09bf49a 100644
--- a/gemfeed/2022-10-30-installing-dtail-on-openbsd.gmi.tpl
+++ b/gemfeed/2022-10-30-installing-dtail-on-openbsd.gmi.tpl
@@ -39,6 +39,10 @@
' '
```
+<< template::inline::toc
+
+## Introduction
+
This will be a quick blog post, as I am busy with my personal life now. I have relocated to a different country and am still busy arranging things. So bear with me :-)
In this post, I want to give a quick overview (or how-to) about installing DTail on OpenBSD, as the official documentation only covers Red Hat and Fedora Linux! And this blog post will also be used as my reference!
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 82e61126..6adcfdee 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
@@ -15,6 +15,19 @@
mod. by Paul Buetow `"""""""""`
```
+## Table of Contents
+
+* ⇢ Gemtexter 2.0.0 - Let's Gemtext again²
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ Minimal template engine
+* ⇢ ⇢ Added hooks
+* ⇢ ⇢ Use of safer Bash options
+* ⇢ ⇢ Meta cache made obsolete
+* ⇢ ⇢ XMLLint support
+* ⇢ ⇢ More
+
+## Introduction
+
I proudly announce that I've released Gemtexter version `2.0.0`. What is Gemtexter? It's my minimalist static site generator for Gemini Gemtext, HTML and Markdown written in GNU Bash.
=> https://codeberg.org/snonux/gemtexter
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 2e322cac..a8ed98e5 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
@@ -15,6 +15,10 @@
mod. by Paul Buetow `"""""""""`
```
+<< template::inline::toc
+
+## Introduction
+
I proudly announce that I've released Gemtexter version `2.0.0`. What is Gemtexter? It's my minimalist static site generator for Gemini Gemtext, HTML and Markdown written in GNU Bash.
=> https://codeberg.org/snonux/gemtexter
diff --git a/gemfeed/2023-04-09-algorithms-and-data-structures-in-golang-part-1.gmi b/gemfeed/2023-04-09-algorithms-and-data-structures-in-golang-part-1.gmi
index 3a05cd59..aa12a353 100644
--- a/gemfeed/2023-04-09-algorithms-and-data-structures-in-golang-part-1.gmi
+++ b/gemfeed/2023-04-09-algorithms-and-data-structures-in-golang-part-1.gmi
@@ -16,6 +16,18 @@
| |
```
+## Table of Contents
+
+* ⇢ Algorithms and Data Structures in Go - Part 1
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ Type constraints
+* ⇢ ⇢ ArrayList
+* ⇢ ⇢ Helper methods
+* ⇢ ⇢ Sleep sort
+* ⇢ ⇢ ⇢ Testing
+
+## Introduction
+
This is the first blog post about my Algorithms and Data Structures in Go series. I am not a Software Developer in my day job. In my current role, programming and scripting skills are desirable but not mandatory. I have been learning about Data Structures and Algorithms many years ago at University. I thought it would be fun to revisit/refresh my knowledge here and implement many of the algorithms in Go.
=> ./2023-04-09-algorithms-and-data-structures-in-golang-part-1.gmi 2023-04-09 Algorithms and Data Structures in Go - Part 1 (You are currently reading this)
diff --git a/gemfeed/2023-04-09-algorithms-and-data-structures-in-golang-part-1.gmi.tpl b/gemfeed/2023-04-09-algorithms-and-data-structures-in-golang-part-1.gmi.tpl
index 5f03693e..8d3807d9 100644
--- a/gemfeed/2023-04-09-algorithms-and-data-structures-in-golang-part-1.gmi.tpl
+++ b/gemfeed/2023-04-09-algorithms-and-data-structures-in-golang-part-1.gmi.tpl
@@ -16,6 +16,10 @@
| |
```
+<< template::inline::toc
+
+## Introduction
+
This is the first blog post about my Algorithms and Data Structures in Go series. I am not a Software Developer in my day job. In my current role, programming and scripting skills are desirable but not mandatory. I have been learning about Data Structures and Algorithms many years ago at University. I thought it would be fun to revisit/refresh my knowledge here and implement many of the algorithms in Go.
<< template::inline::index algorithms-and-data-structures-in-golang-part
diff --git a/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.gmi b/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.gmi
index 8ba2d64a..d06a7a7f 100644
--- a/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.gmi
+++ b/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.gmi
@@ -19,7 +19,15 @@
+-----+-----------------+-----------------------------+
```
-# Introduction
+## Table of Contents
+
+* ⇢ Unveiling `guprecords.raku`: Global Uptime Records with Raku
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ How Guprecords works
+* ⇢ ⇢ Example
+* ⇢ ⇢ Conclusion
+
+## Introduction
For fun, I am tracking the uptime of various personal machines (servers, laptops, workstations...). I have been doing this for over ten years now, so I have a lot of statistics collected.
diff --git a/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.gmi.tpl b/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.gmi.tpl
index d1edab1d..56e55e41 100644
--- a/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.gmi.tpl
+++ b/gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.gmi.tpl
@@ -19,7 +19,9 @@
+-----+-----------------+-----------------------------+
```
-# Introduction
+<< template::inline::toc
+
+## Introduction
For fun, I am tracking the uptime of various personal machines (servers, laptops, workstations...). I have been doing this for over ten years now, so I have a lot of statistics collected.
diff --git a/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.gmi b/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.gmi
index 3626c547..39bcb63d 100644
--- a/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.gmi
+++ b/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.gmi
@@ -2,6 +2,25 @@
> Published at 2023-05-06T17:23:16+03:00
+## Table of Contents
+
+* ⇢ "The Obstacle is the Way" book notes
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ Reframe your perspective
+* ⇢ ⇢ Embrace rationality
+* ⇢ ⇢ Control your response
+* ⇢ ⇢ Practice emotional and physical resilience
+* ⇢ ⇢ Persistence and patience
+* ⇢ ⇢ Embrace failure
+* ⇢ ⇢ Be adaptable
+* ⇢ ⇢ Embrace non-action
+* ⇢ ⇢ Leverage crisis
+* ⇢ ⇢ Build your inner citadel
+* ⇢ ⇢ Love everything that happens
+* ⇢ ⇢ Conclusion
+
+## Introduction
+
These are my personal takeaways after reading "The Obstacle Is the Way" by Ryan Holiday. This is mainly for my own use, but you might find it helpful too.
@@ -27,7 +46,6 @@ We spend a lot of time trying to get things perfect and look at the rules, but w
Don't always try to use the front door; a backdoor could open. It's nonsense. Don't fight the judo master with judo. Non-action can be action, exposing the weaknesses of others.
-
## Embrace rationality
It is a superpower to see things rationally when others are fearful. Focus on the reality of the situation without letting emotions, such as anger, cloud your judgment. This ability will enable you to make better decisions in adversity. Ability to see things what they really are. E.g. wine is old fermented grapes, or other people behaving like animals during a fight. Show the middle finger if someone persists on the stupid rules occasionally.
diff --git a/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.gmi.tpl b/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.gmi.tpl
index 92ccc20b..9b33a943 100644
--- a/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.gmi.tpl
+++ b/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.gmi.tpl
@@ -2,6 +2,10 @@
> Published at 2023-05-06T17:23:16+03:00
+<< template::inline::toc
+
+## Introduction
+
These are my personal takeaways after reading "The Obstacle Is the Way" by Ryan Holiday. This is mainly for my own use, but you might find it helpful too.
@@ -27,7 +31,6 @@ We spend a lot of time trying to get things perfect and look at the rules, but w
Don't always try to use the front door; a backdoor could open. It's nonsense. Don't fight the judo master with judo. Non-action can be action, exposing the weaknesses of others.
-
## Embrace rationality
It is a superpower to see things rationally when others are fearful. Focus on the reality of the situation without letting emotions, such as anger, cloud your judgment. This ability will enable you to make better decisions in adversity. Ability to see things what they really are. E.g. wine is old fermented grapes, or other people behaving like animals during a fight. Show the middle finger if someone persists on the stupid rules occasionally.
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 cec0f470..3e0aadf4 100644
--- a/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi
+++ b/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi
@@ -4,6 +4,24 @@
=> ./kiss-server-monitoring-with-gogios/gogios-small.png Gogios logo
+## Table of Contents
+
+* ⇢ KISS server monitoring with Gogios
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ Motivation
+* ⇢ ⇢ Features
+* ⇢ ⇢ Example alert
+* ⇢ ⇢ Installation
+* ⇢ ⇢ ⇢ Compiling and installing Gogios
+* ⇢ ⇢ ⇢ Setting up user, group and directories
+* ⇢ ⇢ ⇢ Installing monitoring plugins
+* ⇢ ⇢ Configuration
+* ⇢ ⇢ ⇢ MTA
+* ⇢ ⇢ ⇢ Configuring Gogios
+* ⇢ ⇢ Running Gogios
+* ⇢ ⇢ ⇢ High-availability
+* ⇢ ⇢ Conclusion:
+
## Introduction
Gogios is a minimalistic and easy-to-use monitoring tool I programmed in Google Go designed specifically for small-scale self-hosted servers and virtual machines. The primary purpose of Gogios is to monitor my personal server infrastructure for `foo.zone`, my MTAs, my authoritative DNS servers, my NextCloud, Wallabag and Anki sync server installations, etc.
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 ec42c787..2232ddb4 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
@@ -4,6 +4,8 @@
=> ./kiss-server-monitoring-with-gogios/gogios-small.png Gogios logo
+<< template::inline::toc
+
## Introduction
Gogios is a minimalistic and easy-to-use monitoring tool I programmed in Google Go designed specifically for small-scale self-hosted servers and virtual machines. The primary purpose of Gogios is to monitor my personal server infrastructure for `foo.zone`, my MTAs, my authoritative DNS servers, my NextCloud, Wallabag and Anki sync server installations, etc.
diff --git a/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.gmi b/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.gmi
index ac5fcbb4..3608ff78 100644
--- a/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.gmi
+++ b/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.gmi
@@ -2,6 +2,41 @@
> Published at 2023-07-17T04:56:20+03:00
+## Table of Contents
+
+* ⇢ "Software Developmers Career Guide and Soft Skills" book notes
+* ⇢ Introduction
+* ⇢ Improve
+* ⇢ ⇢ Always learn new things
+* ⇢ ⇢ Set goals
+* ⇢ ⇢ Ratings
+* ⇢ ⇢ Promotions
+* ⇢ ⇢ Finish things
+* ⇢ ⇢ Expand the empire
+* ⇢ ⇢ Be pragmatic and also manage your time
+* ⇢ ⇢ ⇢ The quota system
+* ⇢ ⇢ ⇢ Don't waste time
+* ⇢ ⇢ ⇢ Habits
+* ⇢ Work-life balance
+* ⇢ ⇢ Mental health
+* ⇢ ⇢ Physical health
+* ⇢ ⇢ No drama
+* ⇢ Personal brand
+* ⇢ ⇢ Market yourself
+* ⇢ ⇢ Networking
+* ⇢ ⇢ Public speaking
+* ⇢ New job
+* ⇢ ⇢ For the interview
+* ⇢ ⇢ Find the right type of company
+* ⇢ ⇢ Apply for the new job
+* ⇢ ⇢ Negotiation
+* ⇢ ⇢ Leaving the old job
+* ⇢ Other things
+* ⇢ ⇢ Testing
+* ⇢ ⇢ Books to read
+
+# Introduction
+
These notes are of two books by "John Sommez" I found helpful. I also added some of my own keypoints to it. These notes are mainly for my own use, but you might find them helpful, too.
```
diff --git a/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.gmi.tpl b/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.gmi.tpl
index 0fdeac5a..92b75aae 100644
--- a/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.gmi.tpl
+++ b/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.gmi.tpl
@@ -2,6 +2,10 @@
> Published at 2023-07-17T04:56:20+03:00
+<< template::inline::toc
+
+# Introduction
+
These notes are of two books by "John Sommez" I found helpful. I also added some of my own keypoints to it. These notes are mainly for my own use, but you might find them helpful, too.
```
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 e9b3590c..4782b3f2 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
@@ -15,6 +15,20 @@
mod. by Paul Buetow `"""""""""`
```
+## Table of Contents
+
+* ⇢ Gemtexter 2.1.0 - Let's Gemtext again³
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ Why Bash?
+* ⇢ ⇢ Switch to GPL3 license
+* ⇢ ⇢ Source code highlighting support
+* ⇢ ⇢ HTML exact variant
+* ⇢ ⇢ Use of Hack webfont by default
+* ⇢ ⇢ HTML Mastodon verification support
+* ⇢ ⇢ More
+
+## Introduction
+
I proudly announce that I've released Gemtexter version `2.1.0`. What is Gemtexter? It's my minimalist static site generator for Gemini Gemtext, HTML and Markdown, written in GNU Bash.
=> https://codeberg.org/snonux/gemtexter
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 95e5ea54..20c57265 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
@@ -15,6 +15,10 @@
mod. by Paul Buetow `"""""""""`
```
+<< template::inline::toc
+
+## Introduction
+
I proudly announce that I've released Gemtexter version `2.1.0`. What is Gemtexter? It's my minimalist static site generator for Gemini Gemtext, HTML and Markdown, written in GNU Bash.
=> https://codeberg.org/snonux/gemtexter
diff --git a/gemfeed/2023-09-25-dtail-usage-examples.gmi b/gemfeed/2023-09-25-dtail-usage-examples.gmi
index 1bc4cd86..a3f5301a 100644
--- a/gemfeed/2023-09-25-dtail-usage-examples.gmi
+++ b/gemfeed/2023-09-25-dtail-usage-examples.gmi
@@ -2,6 +2,22 @@
> Published at 2023-09-25T14:57:42+03:00
+## Table of Contents
+
+* ⇢ DTail usage examples
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ Following logs
+* ⇢ ⇢ Aggregating logs
+* ⇢ ⇢ How to use `dcat`
+* ⇢ ⇢ How to use `dgrep`
+* ⇢ ⇢ How to use `dmap`
+* ⇢ ⇢ How to use the DTail serverless mode
+* ⇢ ⇢ ⇢ Serverless map-reduce query
+* ⇢ ⇢ ⇢ Aggregating CSV files
+* ⇢ ⇢ ⇢ Other serverless commands
+
+## Introduction
+
Hey there. As I am pretty busy this month personally (I am now on Paternity Leave) and as I still want to post once monthly, the blog post of this month will only be some DTail usage examples. They're from the DTail documentation, but not all readers of my blog may be aware of those!
DTail is a distributed DevOps tool for tailing, grepping, catting logs and other text files on many remote machines at once which I programmed in Go.
diff --git a/gemfeed/2023-09-25-dtail-usage-examples.gmi.tpl b/gemfeed/2023-09-25-dtail-usage-examples.gmi.tpl
index 8c41c1f7..54a239ae 100644
--- a/gemfeed/2023-09-25-dtail-usage-examples.gmi.tpl
+++ b/gemfeed/2023-09-25-dtail-usage-examples.gmi.tpl
@@ -2,6 +2,10 @@
> Published at 2023-09-25T14:57:42+03:00
+<< template::inline::toc
+
+## Introduction
+
Hey there. As I am pretty busy this month personally (I am now on Paternity Leave) and as I still want to post once monthly, the blog post of this month will only be some DTail usage examples. They're from the DTail documentation, but not all readers of my blog may be aware of those!
DTail is a distributed DevOps tool for tailing, grepping, catting logs and other text files on many remote machines at once which I programmed in Go.
diff --git a/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.gmi b/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.gmi
index a8c48449..9a43d300 100644
--- a/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.gmi
+++ b/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.gmi
@@ -19,6 +19,18 @@
'._____________________________________________.'
```
+## Table of Contents
+
+* ⇢ KISS static web photo albums with `photoalbum.sh`
+* ⇢ ⇢ Motivation
+* ⇢ ⇢ Introducing `photoalbum.sh`
+* ⇢ ⇢ Installation
+* ⇢ ⇢ Setting it up
+* ⇢ ⇢ Generating the static photo album
+* ⇢ ⇢ Cleaning it up
+* ⇢ ⇢ HTML templates
+* ⇢ ⇢ Conclusion
+
## Motivation
Once in a while, I share photos on the inter-web with either family and friends or on my The Irregular Ninja photo site. One hobby of mine is photography (even though I don't have enough time for it - so I am primarily a point-and-shoot photographer).
diff --git a/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.gmi.tpl b/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.gmi.tpl
index e4878261..adb4a2db 100644
--- a/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.gmi.tpl
+++ b/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.gmi.tpl
@@ -19,6 +19,8 @@
'._____________________________________________.'
```
+<< template::inline::toc
+
## Motivation
Once in a while, I share photos on the inter-web with either family and friends or on my The Irregular Ninja photo site. One hobby of mine is photography (even though I don't have enough time for it - so I am primarily a point-and-shoot photographer).
diff --git a/gemfeed/2023-11-11-mind-management-book-notes.gmi b/gemfeed/2023-11-11-mind-management-book-notes.gmi
index ad3dcaa2..a8751977 100644
--- a/gemfeed/2023-11-11-mind-management-book-notes.gmi
+++ b/gemfeed/2023-11-11-mind-management-book-notes.gmi
@@ -2,6 +2,21 @@
> Published at 2023-11-11T22:21:47+02:00
+## Table of Contents
+
+* ⇢ "Mind Management" book notes
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ Empty slots in the calendar
+* ⇢ ⇢ When you safe time...
+* ⇢ ⇢ Follow your mood
+* ⇢ ⇢ Boosting creativity
+* ⇢ ⇢ The right mood for the task at hand
+* ⇢ ⇢ Creativity hacks
+* ⇢ ⇢ Planning and strategizing
+* ⇢ ⇢ Fake it until you make it.
+
+## Introduction
+
These are my personal takeaways after reading "Mind Management" by David Kadavy. Note that the book contains much more knowledge wisdom and that these notes only contain points I personally found worth writing down. This is mainly for my own use, but you might find it helpful too.
```
diff --git a/gemfeed/2023-11-11-mind-management-book-notes.gmi.tpl b/gemfeed/2023-11-11-mind-management-book-notes.gmi.tpl
index bd5cb4d4..258b869d 100644
--- a/gemfeed/2023-11-11-mind-management-book-notes.gmi.tpl
+++ b/gemfeed/2023-11-11-mind-management-book-notes.gmi.tpl
@@ -2,6 +2,10 @@
> Published at 2023-11-11T22:21:47+02:00
+<< template::inline::toc
+
+## Introduction
+
These are my personal takeaways after reading "Mind Management" by David Kadavy. Note that the book contains much more knowledge wisdom and that these notes only contain points I personally found worth writing down. This is mainly for my own use, but you might find it helpful too.
```
diff --git a/gemfeed/2023-12-10-bash-golf-part-3.gmi b/gemfeed/2023-12-10-bash-golf-part-3.gmi
index d480ae80..1857e286 100644
--- a/gemfeed/2023-12-10-bash-golf-part-3.gmi
+++ b/gemfeed/2023-12-10-bash-golf-part-3.gmi
@@ -14,6 +14,21 @@ jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Art by Joan Stark, mod. by Paul Buetow
```
+## Table of Contents
+
+* ⇢ Bash Golf Part 3
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ `FUNCNAME`
+* ⇢ ⇢ `:(){ :|:& };:`
+* ⇢ ⇢ Inner functions
+* ⇢ ⇢ Exporting functions
+* ⇢ ⇢ Dynamic variables with `local`
+* ⇢ ⇢ `if` conditionals
+* ⇢ ⇢ Multi-line comments
+* ⇢ ⇢ Don't change it while it's executed
+
+## Introduction
+
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.
=> ./2021-11-29-bash-golf-part-1.gmi 2021-11-29 Bash Golf Part 1
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 45ae457e..6fbd56f5 100644
--- a/gemfeed/2023-12-10-bash-golf-part-3.gmi.tpl
+++ b/gemfeed/2023-12-10-bash-golf-part-3.gmi.tpl
@@ -14,6 +14,10 @@ jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Art by Joan Stark, mod. by Paul Buetow
```
+<< template::inline::toc
+
+## Introduction
+
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.
<< template::inline::index bash-golf
diff --git a/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.gmi b/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.gmi
index 833c5b35..d38778aa 100644
--- a/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.gmi
+++ b/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.gmi
@@ -2,6 +2,14 @@
> Published at 2024-03-03T00:07:21+02:00
+## Table of Contents
+
+* ⇢ A fine Fyne Android app for quickly logging ideas programmed in Go
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ All easy-peasy?
+
+## Introduction
+
I am an ideas person. I find myself frequently somewhere on the streets with an idea in my head but no paper journal noting it down.
I have tried many note apps for my Android (I use GrapheneOS) phone. Most of them either don't do what I want, are proprietary software, require Google Play services (I have the main profile on my phone de-googled) or are too bloated. I was never into mobile app development, as I'm not too fond of the complexity of the developer toolchains. I don't want to use Android Studio (as a NeoVim user), and I don't want to use Java or Kotlin. I want to use a language I know (and like) for mobile app development. Go would be one of those languages.
diff --git a/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.gmi.tpl b/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.gmi.tpl
index c5f106af..49b8e428 100644
--- a/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.gmi.tpl
+++ b/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.gmi.tpl
@@ -2,6 +2,10 @@
> Published at 2024-03-03T00:07:21+02:00
+<< template::inline::toc
+
+## Introduction
+
I am an ideas person. I find myself frequently somewhere on the streets with an idea in my head but no paper journal noting it down.
I have tried many note apps for my Android (I use GrapheneOS) phone. Most of them either don't do what I want, are proprietary software, require Google Play services (I have the main profile on my phone de-googled) or are too bloated. I was never into mobile app development, as I'm not too fond of the complexity of the developer toolchains. I don't want to use Android Studio (as a NeoVim user), and I don't want to use Java or Kotlin. I want to use a language I know (and like) for mobile app development. Go would be one of those languages.
diff --git a/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.gmi b/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.gmi
index ccfbd796..bd6d9eb1 100644
--- a/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.gmi
+++ b/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.gmi
@@ -30,6 +30,7 @@ _____|_:_:_| (o)-(o) |_:_:_|--'`-. ,--. ksh under-water (((\'/
## Table of Contents
* ⇢ KISS high-availability with OpenBSD
+* ⇢ ⇢ Introduction
* ⇢ ⇢ My auto-failover requirements
* ⇢ ⇢ My HA solution
* ⇢ ⇢ ⇢ Only OpenBSD base installation required
@@ -41,6 +42,8 @@ _____|_:_:_| (o)-(o) |_:_:_|--'`-. ,--. ksh under-water (((\'/
* ⇢ ⇢ ⇢ Rex automation
* ⇢ ⇢ More HA
+## Introduction
+
I have always wanted a highly available setup for my personal websites. I could have used off-the-shelf hosting solutions or hosted my sites in an AWS S3 bucket. I have used technologies like (in unsorted and slightly unrelated order) BGP, LVS/IPVS, ldirectord, Pacemaker, STONITH, scripted VIP failover via ARP, heartbeat, heartbeat2, Corosync, keepalived, DRBD, and commercial F5 Load Balancers for high availability at work.
But still, my personal sites were never highly available. All those technologies are great for professional use, but I was looking for something much more straightforward for my personal space - something as KISS (keep it simple and stupid) as possible.
diff --git a/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.gmi.tpl b/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.gmi.tpl
index 92343e10..70f31f21 100644
--- a/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.gmi.tpl
+++ b/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.gmi.tpl
@@ -29,6 +29,8 @@ _____|_:_:_| (o)-(o) |_:_:_|--'`-. ,--. ksh under-water (((\'/
<< template::inline::toc
+## Introduction
+
I have always wanted a highly available setup for my personal websites. I could have used off-the-shelf hosting solutions or hosted my sites in an AWS S3 bucket. I have used technologies like (in unsorted and slightly unrelated order) BGP, LVS/IPVS, ldirectord, Pacemaker, STONITH, scripted VIP failover via ARP, heartbeat, heartbeat2, Corosync, keepalived, DRBD, and commercial F5 Load Balancers for high availability at work.
But still, my personal sites were never highly available. All those technologies are great for professional use, but I was looking for something much more straightforward for my personal space - something as KISS (keep it simple and stupid) as possible.
diff --git a/gemfeed/2024-05-01-slow-productivity-book-notes.gmi b/gemfeed/2024-05-01-slow-productivity-book-notes.gmi
index 3329d51c..0f0b9a8c 100644
--- a/gemfeed/2024-05-01-slow-productivity-book-notes.gmi
+++ b/gemfeed/2024-05-01-slow-productivity-book-notes.gmi
@@ -2,6 +2,18 @@
> Published at 2024-04-27T14:18:51+03:00
+## Table of Contents
+
+* ⇢ "Slow Productivity" book notes
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ Pseudo-productivity and Shallow work
+* ⇢ ⇢ Accomplishments without burnout
+* ⇢ ⇢ Do fewer things
+* ⇢ ⇢ Work at a natural pace
+* ⇢ ⇢ Obsess over quality
+
+## Introduction
+
These are my personal takeaways after reading "Slow Productivity - The lost Art of Accomplishment Without Burnout" by Cal Newport.
The case studies in this book were a bit long, but they appeared to be well-researched. I will only highlight the interesting, actionable items in the book notes.
diff --git a/gemfeed/2024-05-01-slow-productivity-book-notes.gmi.tpl b/gemfeed/2024-05-01-slow-productivity-book-notes.gmi.tpl
index 3436f89b..46ec74f5 100644
--- a/gemfeed/2024-05-01-slow-productivity-book-notes.gmi.tpl
+++ b/gemfeed/2024-05-01-slow-productivity-book-notes.gmi.tpl
@@ -2,6 +2,10 @@
> Published at 2024-04-27T14:18:51+03:00
+<< template::inline::toc
+
+## Introduction
+
These are my personal takeaways after reading "Slow Productivity - The lost Art of Accomplishment Without Burnout" by Cal Newport.
The case studies in this book were a bit long, but they appeared to be well-researched. I will only highlight the interesting, actionable items in the book notes.
diff --git a/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.gmi b/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.gmi
index 480dd889..9dd52577 100644
--- a/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.gmi
+++ b/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.gmi
@@ -15,10 +15,6 @@ Art by Laura Brown
```
-## Introduction
-
-Over the years, I have collected many ideas for my personal projects and noted them down. I am currently in the process of cleaning up all my notes and reviewing those ideas. I don’t have time for the ones listed here and won’t have any soon due to other commitments and personal projects. So, in order to "get rid of them" from my notes folder, I decided to simply put them in this blog post so that those ideas don't get lost. Maybe I will pick up one or another idea someday in the future, but for now, they are all put on ice in favor of other personal projects or family time.
-
## Table of Contents
* ⇢ Projects I currently don't have time for
@@ -57,6 +53,10 @@ Over the years, I have collected many ideas for my personal projects and noted t
* ⇢ ⇢ ⇢ Project secure
* ⇢ ⇢ ⇢ CPU utilisation is all wrong
+## Introduction
+
+Over the years, I have collected many ideas for my personal projects and noted them down. I am currently in the process of cleaning up all my notes and reviewing those ideas. I don’t have time for the ones listed here and won’t have any soon due to other commitments and personal projects. So, in order to "get rid of them" from my notes folder, I decided to simply put them in this blog post so that those ideas don't get lost. Maybe I will pick up one or another idea someday in the future, but for now, they are all put on ice in favor of other personal projects or family time.
+
## Hardware projects I don't have time for
### I use Arch, btw!
diff --git a/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.gmi.tpl b/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.gmi.tpl
index 1fbf5e57..58398d76 100644
--- a/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.gmi.tpl
+++ b/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.gmi.tpl
@@ -15,12 +15,12 @@ Art by Laura Brown
```
+<< template::inline::toc
+
## Introduction
Over the years, I have collected many ideas for my personal projects and noted them down. I am currently in the process of cleaning up all my notes and reviewing those ideas. I don’t have time for the ones listed here and won’t have any soon due to other commitments and personal projects. So, in order to "get rid of them" from my notes folder, I decided to simply put them in this blog post so that those ideas don't get lost. Maybe I will pick up one or another idea someday in the future, but for now, they are all put on ice in favor of other personal projects or family time.
-<< template::inline::toc
-
## Hardware projects I don't have time for
### I use Arch, btw!
diff --git a/gemfeed/2024-07-07-the-stoic-challenge-book-notes.gmi b/gemfeed/2024-07-07-the-stoic-challenge-book-notes.gmi
index 7537801f..2f3415be 100644
--- a/gemfeed/2024-07-07-the-stoic-challenge-book-notes.gmi
+++ b/gemfeed/2024-07-07-the-stoic-challenge-book-notes.gmi
@@ -2,6 +2,15 @@
> Published at 2024-07-07T12:46:55+03:00
+## Table of Contents
+
+* ⇢ "The Stoic Challenge" book notes
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ Negative visualization
+* ⇢ ⇢ Oh, nice trick, you stoic "god"! ;-)
+
+## Introduction
+
These are my personal takeaways after reading "The Stoic Challenge: A Philosopher's Guide to Becoming Tougher, Calmer, and More Resilient" by William B. Irvine.
```
diff --git a/gemfeed/2024-07-07-the-stoic-challenge-book-notes.gmi.tpl b/gemfeed/2024-07-07-the-stoic-challenge-book-notes.gmi.tpl
index 0c6a4e6f..1d369ab8 100644
--- a/gemfeed/2024-07-07-the-stoic-challenge-book-notes.gmi.tpl
+++ b/gemfeed/2024-07-07-the-stoic-challenge-book-notes.gmi.tpl
@@ -2,6 +2,10 @@
> Published at 2024-07-07T12:46:55+03:00
+<< template::inline::toc
+
+## Introduction
+
These are my personal takeaways after reading "The Stoic Challenge: A Philosopher's Guide to Becoming Tougher, Calmer, and More Resilient" by William B. Irvine.
```
diff --git a/gemfeed/2024-08-05-typing-127.1-words-per-minute.gmi b/gemfeed/2024-08-05-typing-127.1-words-per-minute.gmi
index 316d40ce..5cd6f4a4 100644
--- a/gemfeed/2024-08-05-typing-127.1-words-per-minute.gmi
+++ b/gemfeed/2024-08-05-typing-127.1-words-per-minute.gmi
@@ -17,6 +17,37 @@
Nieminen Mika
```
+## Table of Contents
+
+* ⇢ Typing `127.1` words per minute (`>100wpm average`)
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ Kinesis review
+* ⇢ ⇢ ⇢ Top build quality
+* ⇢ ⇢ ⇢ Bluetooth connectivity
+* ⇢ ⇢ ⇢ Gateron Brown key switches
+* ⇢ ⇢ ⇢ Keycaps
+* ⇢ ⇢ ⇢ Keymap editor
+* ⇢ ⇢ First steps
+* ⇢ ⇢ Considering alternate layouts
+* ⇢ ⇢ Training how to type
+* ⇢ ⇢ ⇢ Tools
+* ⇢ ⇢ My `keybr.com` statistics
+* ⇢ ⇢ Tips and tricks
+* ⇢ ⇢ ⇢ Relax
+* ⇢ ⇢ ⇢ Focus on accuracy first
+* ⇢ ⇢ ⇢ Chording
+* ⇢ ⇢ ⇢ Punctuation and Capitalization
+* ⇢ ⇢ ⇢ Reverse shifting
+* ⇢ ⇢ ⇢ Enter the flow state
+* ⇢ ⇢ ⇢ Repeat every word
+* ⇢ ⇢ ⇢ Don't use the same finger for two consecutive keystrokes
+* ⇢ ⇢ ⇢ Warm-up
+* ⇢ ⇢ Travel keyboard
+* ⇢ ⇢ Upcoming custom Kinesis build
+* ⇢ ⇢ Conclusion
+
+## Introduction
+
After work one day, I noticed some discomfort in my right wrist. Upon research, it appeared to be a mild case of Repetitive Strain Injury (RSI). Initially, I thought that this would go away after a while, but after a week it became even worse. This led me to consider potential causes such as poor posture or keyboard use habits. As an enthusiast of keyboards, I experimented with ergonomic concave ortholinear split keyboards. Wait, what?...
* Concave: Some fingers are longer than others. A concave keyboard makes it so that the keycaps meant to be pressed by the longer fingers are further down (e.g., left middle finger for `e` on a Qwerty layout), and keycaps meant to be pressed by shorter fingers are further up (e.g., right pinky finger for the letter `p`).
diff --git a/gemfeed/2024-08-05-typing-127.1-words-per-minute.gmi.tpl b/gemfeed/2024-08-05-typing-127.1-words-per-minute.gmi.tpl
new file mode 100644
index 00000000..dde4a1a2
--- /dev/null
+++ b/gemfeed/2024-08-05-typing-127.1-words-per-minute.gmi.tpl
@@ -0,0 +1,202 @@
+# Typing `127.1` words per minute (`>100wpm average`)
+
+> Published at 2024-08-05T17:39:30+03:00
+
+```
+,---,---,---,---,---,---,---,---,---,---,---,---,---,-------,
+|1/2| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | + | ' | <- |
+|---'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-----|
+| ->| | Q | W | E | R | T | Y | U | I | O | P | ] | ^ | |
+|-----',--',--',--',--',--',--',--',--',--',--',--',--'| |
+| Caps | A | S | D | F | G | H | J | K | L | \ | [ | * | |
+|----,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'---'----|
+| | < | Z | X | C | V | B | N | M | , | . | - | |
+|----'-,-',--'--,'---'---'---'---'---'---'-,-'---',--,------|
+| ctrl | | alt | |altgr | | ctrl |
+'------' '-----'--------------------------'------' '------'
+ Nieminen Mika
+```
+
+<< template::inline::toc
+
+## Introduction
+
+After work one day, I noticed some discomfort in my right wrist. Upon research, it appeared to be a mild case of Repetitive Strain Injury (RSI). Initially, I thought that this would go away after a while, but after a week it became even worse. This led me to consider potential causes such as poor posture or keyboard use habits. As an enthusiast of keyboards, I experimented with ergonomic concave ortholinear split keyboards. Wait, what?...
+
+* Concave: Some fingers are longer than others. A concave keyboard makes it so that the keycaps meant to be pressed by the longer fingers are further down (e.g., left middle finger for `e` on a Qwerty layout), and keycaps meant to be pressed by shorter fingers are further up (e.g., right pinky finger for the letter `p`).
+* Ortholinear: The keys are arranged in a straight vertical line, unlike most conventional keyboards. The conventional keyboards still resemble the old typewriters, where the placement of the keys was optimized so that the typewriter would not jam. There is no such requirement anymore.
+* Split: The keyboard is split into two halves (left and right), allowing one to place either hand where it is most ergonomic.
+
+After discovering ThePrimagen (I found him long ago, but I never bothered buying the same keyboard he is on) on YouTube and reading/watching a couple of reviews, I thought that as a computer professional, the equipment could be expensive anyway (laptop, adjustable desk, comfortable chair), so why not invest a bit more into the keyboard? I purchased myself the Kinesis Advantage360 Professional keyboard.
+
+## Kinesis review
+
+For an in-depth review, have a look at this great article:
+
+=> https://arslan.io/2022/10/22/review-of-the-kinesis-advantage360-professional Review of the Kinesis Advantage360 Professional keyboard
+
+### Top build quality
+
+Overall, the keyboard feels excellent quality and robust. It has got some weight to it. Because of that, it is not ideally suited for travel, though. But I have a different keyboard to solve this (see later in this post). Overall, I love how it is built and how it feels.
+
+=> ./typing-127.1-words-per-minute/kinesis2.jpg Kinesis Adv.360 Pro at home
+
+### Bluetooth connectivity
+
+Despite encountering concerns about Bluetooth connectivity issues with the Kinesis keyboard during my research, I purchased one anyway as I intended to use it only via USB. However, I discovered that the firmware updates available afterwards had addressed these reported Bluetooth issues, and as a result, I did not experience any difficulties with the Bluetooth functionality. This positive outcome allowed me to enjoy using the keyboard also wirelessly.
+
+### Gateron Brown key switches
+
+Many voices on the internet seem to dislike the Gateron Brown switches, the only official choice for non-clicky tactile switches in the Kinesis, so I was also a bit concerned. I almost went with Cherry MX Browns for my Kinesis (a custom build from a 3rd party provider that is partnershipping with Kinesis). Still, I decided on Gateron Browns to try different switches than the Cherry MX Browns I already have on my ZSA Moonlander keyboard (another ortho-linear split keyboard, but without a concave keycap layout).
+
+At first, I was disappointed by the Gaterons, as they initially felt a bit meshy compared to the Cherries. Still, over the weeks I grew to prefer them because of their smoothness. Over time, the tactile bumps also became more noticeable (as my perception of them improved). Because of their less pronounced tactile feedback, the Gaterons are less tiring for long typing sessions and better suited for a relaxed typing experience.
+
+So, the Cherry MX feel sharper but are more tiring in the long run, and the Gaterons are easier to write on and the tactile Feedback is slightly less pronounced.
+
+### Keycaps
+
+If you ever purchase a Kinesis keyboard, go with the PCB keycaps. They upgrade the typing experience a lot. The only thing you will lose is that the backlighting won't shine through them. But that is a reasonable tradeoff. When do I need backlighting? I am supposed to look at the screen and not the keyboard while typing.
+
+I went with the blank keycaps, by the way.
+
+=> ./typing-127.1-words-per-minute/kinesis1.jpg Kinesis Adv.360 Pro at home
+
+### Keymap editor
+
+There is no official keymap editor. You have to edit a configuration file manually, build the firmware from scratch, and upload the firmware with the new keymap to both keyboard halves. The Professional version of his keyboard, by the way, runs on the ZMK open-source firmware.
+
+Many users find the need for an easy-to-use keymap editor an issue. But this is the Pro model. You can also go with the non-Pro, which runs on non-open-source firmware and has no Bluetooth (it must be operated entirely on USB).
+
+There is a 3rd party solution which is supposed to configure the keymap for the Professional model as bliss, but I have never used it. As a part-time programmer and full-time Site Reliability Engineer, I am okay configuring the keymap in my text editor and building it in a local docker container. This is one of the standard ways of doing it here. You could also use a GitHub pipeline for the firmware build, but I prefer building it locally on my machine. This all seems natural to me, but this may be an issue for "the average Joe" user.
+
+## First steps
+
+I didn't measure the usual words per minute (wpm) on my previous keyboard, the ZSA Moonlander, but I guess that it was around 40-50wpm. Once the Kinesis arrived, I started practising. The experience was quite different due to the concave keycaps, so I barely managed 10wpm on the first day.
+
+I quickly noticed that I could not continue using the freestyle 6-finger typing system I was used to on my Moonlander or any previous keyboards I worked with. I learned ten-finger touch typing from scratch to be more efficient with the Kinesis keyboard. The keyboard forces you to embrace touch typing.
+
+Sometimes, there were brain farts, and I couldn't type at all. The trick was not to freak out about it, but to move on. If your average goes down a bit for a day, it doesn't matter; the long-term trend over several days and weeks matters, not the one-off wpm high score.
+
+Although my wrist pain seemed to go away aftre the first week of using the Kinesis, my fingers became tired of adjusting to the new way of typing. My hands were stiff, as if I had been training for the Olympics. Only after three weeks did I start to feel comfortable with it. If it weren't for the comments I read online, I would have sent it back after week 2.
+
+I also had a problem with the left pinky finger, where I could not comfortably reach the `p` key. This involved moving the whole hand. An easy fix was to swap `p` with `;` on the keyboard layout.
+
+## Considering alternate layouts
+
+As I was going to learn 10-finger touch typing from scratch, I also played with the thought of switching from the Qwerty to the Dvorak or Colemak keymap, but after reading some comments on the internet, I decided against it:
+
+* These layouts (Dvorak and Colemak) will minimize the finger travel for the most commonly used English words, but they necessarily don't give you a better wpm score.
+* One comment on Redit also mentioned that getting stiffer fingers with these layouts is more likely than with Qwerty, as in Qwerty, he had to stretch out his fingers more often, which helps here.
+* There are also many applications and websites with keyboard shortcuts and are Qwerty-optimized.
+* You won't be able to use someone else's computer as there will be likely Qwerty. Some report that after using an alternative layout for a while, they forget how to use Qwerty.
+
+## Training how to type
+
+### Tools
+
+One of the most influential tools in my touch typing journey has been `keybr.com`. This site/app helped me learn 10-finger touch typing, and I practice daily for 30 minutes (in the first two weeks, up to an hour every day). The key is persistence and focus on technique rather than speed; the latter naturally improves with regular practice. Precision matters, too, so I always correct my errors using the backspace key.
+
+=> https://keybr.com
+
+I also used a command-line tool called `tt`, which is written in Go. It has a feature that I found very helpful: the ability to practice typing by piping custom text into it. Additionally, I appreciated its customization options, such as choosing a colour theme and specifying how statistics are displayed.
+
+=> https://github.com/lemnos/tt
+
+I wrote myself a small Ruby script that would randomly select a paragraph from one of my eBooks or book notes and pipe it to `tt`. This helped me remember some of the books I read and also practice touch typing.
+
+## My `keybr.com` statistics
+
+Overall, I trained for around 4 months in more than 5,000 sessions. My top speed in a session was 127.1wpm (up from barely 10wpm at the beginning).
+
+=> ./typing-127.1-words-per-minute/all-time-stats.png
+
+My overall average speed over those 5,000 sessions was 80wpm. The average speed over the last week was over 100wpm. The green line represents the wpm average (increasing trend), the purple line represents the number of keys in the practices (not much movement there, as all keys are unlocked), and the red line represents the average typing accuracy.
+
+=> ./typing-127.1-words-per-minute/typing-speed-over-lessons.png
+
+Around the middle, you see a break-in of the wpm average value. This was where I swapped the `p` and `;` keys, but after some retraining, I came back to the previous level and beyond.
+
+## Tips and tricks
+
+These are some tips and tricks I learned along the way to improve my typing speed:
+
+### Relax
+
+It's easy to get cramped when trying to hit this new wpm mark, but this is just holding you back. Relax and type at a natural pace. Now I also understand why my Katate Sensei back in London kept screaming "RELAAAX" at me during practice.... It didn't help much back then, though, as it is difficult to relax while someone screams at you!
+### Focus on accuracy first
+
+This goes with the previous point. Instead of trying to speed through sessions as quickly as possible, slow down and try to type the words correctly—so don't rush it. If you aren't fast yet, the reason is that your brain hasn't trained enough. It will come over time, and you will be faster.
+
+### Chording
+
+A trick to getting faster is to type by word and pause between each word so you learn the words by chords. From 80wpm and beyond, this makes a real difference.
+
+### Punctuation and Capitalization
+
+I included 10% punctuation and 20% capital letters in my `keybr.com` practice sessions to simulate real typing conditions, which improved my overall working efficiency. I guess I would have gone to 120wpm in average if I didn't include this options...
+
+### Reverse shifting
+
+Reverse shifting aka left-right shifting is to...
+
+* ...use the left shift key for letters on the right keyboard side.
+* ...use the right shift key for letters on the left keyboard side.
+
+This makes using the shift key a blaze.
+
+### Enter the flow state
+
+Listening to music helps me enter a flow state during practice sessions, which makes typing training a bit addictive (which is good, or isn't it?).
+
+### Repeat every word
+
+There's a setting on `keybr.com` that makes it so that every word is always repeated, having you type every word twice in a row. I liked this feature very much, and I think it also helped to improve my practice.
+
+### Don't use the same finger for two consecutive keystrokes
+
+Apparently, if you want to type fast, avoid using the same finger for two consecutive keystrokes. This means you don't always need to use the same finger for the same keys.
+However, there are no hard and fast rules. Thus, everyone develops their system for typing word combinations. An exception would be if you are typing the very same letter in a row (e.g., t in letter)—here, you are using the same finger for both ts.
+
+### Warm-up
+
+You can't reach your average typing speed first ting the morning. It would help if you warmed up before the exercise or practice later during the day. Also, some days are good, others not so, e.g., after a bad night's sleep. What matters is the mid- and long-term trend, not the fluctuations here, though.
+
+## Travel keyboard
+
+As mentioned, the Kinesis is a great keyboard, but it is not meant for travel.
+
+I guess keyboards will always be my expensive hobby, so I also purchased another ergonomic, ortho-linear, concave split keyboard, the Glove80 (with the Red Pro low-profile switches). This keyboard is much lighter and, in my opinion, much better suited for travel than the Kinesis. It also comes with a great travel case.
+
+Here is a photo of me using it with my Surface Go 2 (it runs Linux, by the way) while waiting for the baggage drop at the airport:
+
+=> ./typing-127.1-words-per-minute/glove80.jpg Traveling with the Glove80 using my Surface Go 2
+
+For everyday work, I prefer the tactile Browns on the Kinesis over the Red Pro I have on the Glove80 (normal profile vs. low profile). The Kinesis feels much more premium, whereas the Glove80 is much lighter and easier to store away in a rucksack (the official travel case is a bit bulky, so I wrapped it simply in bubble plastic).
+
+The F-key row is odd at the Glove80. I would have preferred more keys on the sides like the Kinesis, and I use them for `[]` `{}` `()`, which is pretty handy there. However, I like the thumb cluster of the Glove80 more than the one on the Kinesis.
+
+The good thing is that I can switch between both keyboards instantly without retraining my typing memories. I've configured (as much as possible) the same keymaps on both my Kinesis and Glove80, making it easy to switch between them at any occasion.
+
+Interested in the Glove80? I suggest also reading this review:
+
+=> https://arslan.io/2024/04/22/review-of-the-moergo-glove80-keyboard/ Review of the Glove80 keyboard
+
+## Upcoming custom Kinesis build
+
+As I mentioned, keyboards will remain an expensive hobby of mine. I don't regret anything here, though. After all, I use keyboards at my day job. I've ordered a Kinesis custom build with the Gateron Kangaroo switches, and I'm excited to see how that compares to my current setup. I'm still deciding whether to keep my Gateron Brown-equipped Kinesis as a secondary keyboard or possibly leave it at my in-laws for use when visiting or to sell it.
+
+## Conclusion
+
+When I traveled with the Glove80 for work to the London office, a colleague stared at my keyboard and made jokes that it might be broken (split into two halves). But other than that...
+
+Ten-finger touch typing has improved my efficiency and has become a rewarding discipline. Whether it's the keyboards I use, the tools I practice with, or the techniques I've adopted, each step has been a learning experience. I hope sharing my journey provides valuable insights and inspiration for anyone looking to improve their touch typing skills.
+
+I also accidentally started using a 10-finger-like system (maybe still 6 fingers, but better than before) on my regular laptop keyboard. I could be more efficient on the laptop keyboard. The form is different there (not ortholinear, not concave keycaps, etc.), but my typing has improved there too (even if it is only by a little bit).
+
+I don't want to return to a non-concave keyboard as my default. I will use other keyboards still once in a while but only for short periods or when I have to (e.g. travelling with my Laptop and when there is no space to put an external keyboard)
+
+Learning to touch type has been an eye-opening experience for me, not just for work but also for personal projects. Now, writing documentation is so much fun; who could believe that? Furthermore, working with Slack (communicating with colleagues) is more fun now as well.
+
+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 abcc982a..624bca81 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-08-24T19:37:43+03:00</updated>
+ <updated>2024-08-24T19:58:56+03:00</updated>
<title>foo.zone feed</title>
<subtitle>To be in the .zone!</subtitle>
<link href="gemini://foo.zone/gemfeed/atom.xml" rel="self" />
@@ -18,7 +18,7 @@
<summary>After work one day, I noticed some discomfort in my right wrist. Upon research, it appeared to be a mild case of Repetitive Strain Injury (RSI). Initially, I thought that this would go away after a while, but after a week it became even worse. This led me to consider potential causes such as poor posture or keyboard use habits. As an enthusiast of keyboards, I experimented with ergonomic concave ortholinear split keyboards. Wait, what?...</summary>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
- <h1 style='display: inline' id='Typing1271wordsperminute100wpmaverage'>Typing <span class='inlinecode'>127.1</span> words per minute (<span class='inlinecode'>&gt;100wpm average</span>)</h1><br />
+ <h1 style='display: inline' id='typing-1271-words-per-minute-100wpm-average'>Typing <span class='inlinecode'>127.1</span> words per minute (<span class='inlinecode'>&gt;100wpm average</span>)</h1><br />
<br />
<span class='quote'>Published at 2024-08-05T17:39:30+03:00</span><br />
<br />
@@ -37,6 +37,38 @@
Nieminen Mika
</pre>
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#typing-1271-words-per-minute-100wpm-average'>Typing <span class='inlinecode'>127.1</span> words per minute (<span class='inlinecode'>&gt;100wpm average</span>)</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#kinesis-review'>Kinesis review</a></li>
+<li>⇢ ⇢ <a href='#top-build-quality'>Top build quality</a></li>
+<li>⇢ ⇢ <a href='#bluetooth-connectivity'>Bluetooth connectivity</a></li>
+<li>⇢ ⇢ <a href='#gateron-brown-key-switches'>Gateron Brown key switches</a></li>
+<li>⇢ ⇢ <a href='#keycaps'>Keycaps</a></li>
+<li>⇢ ⇢ <a href='#keymap-editor'>Keymap editor</a></li>
+<li>⇢ <a href='#first-steps'>First steps</a></li>
+<li>⇢ <a href='#considering-alternate-layouts'>Considering alternate layouts</a></li>
+<li>⇢ <a href='#training-how-to-type'>Training how to type</a></li>
+<li>⇢ ⇢ <a href='#tools'>Tools</a></li>
+<li>⇢ <a href='#my-keybrcom-statistics'>My <span class='inlinecode'>keybr.com</span> statistics</a></li>
+<li>⇢ <a href='#tips-and-tricks'>Tips and tricks</a></li>
+<li>⇢ ⇢ <a href='#relax'>Relax</a></li>
+<li>⇢ ⇢ <a href='#focus-on-accuracy-first'>Focus on accuracy first</a></li>
+<li>⇢ ⇢ <a href='#chording'>Chording</a></li>
+<li>⇢ ⇢ <a href='#punctuation-and-capitalization'>Punctuation and Capitalization</a></li>
+<li>⇢ ⇢ <a href='#reverse-shifting'>Reverse shifting</a></li>
+<li>⇢ ⇢ <a href='#enter-the-flow-state'>Enter the flow state</a></li>
+<li>⇢ ⇢ <a href='#repeat-every-word'>Repeat every word</a></li>
+<li>⇢ ⇢ <a href='#dont-use-the-same-finger-for-two-consecutive-keystrokes'>Don&#39;t use the same finger for two consecutive keystrokes</a></li>
+<li>⇢ ⇢ <a href='#warm-up'>Warm-up</a></li>
+<li>⇢ <a href='#travel-keyboard'>Travel keyboard</a></li>
+<li>⇢ <a href='#upcoming-custom-kinesis-build'>Upcoming custom Kinesis build</a></li>
+<li>⇢ <a href='#conclusion'>Conclusion</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>After work one day, I noticed some discomfort in my right wrist. Upon research, it appeared to be a mild case of Repetitive Strain Injury (RSI). Initially, I thought that this would go away after a while, but after a week it became even worse. This led me to consider potential causes such as poor posture or keyboard use habits. As an enthusiast of keyboards, I experimented with ergonomic concave ortholinear split keyboards. Wait, what?...</span><br />
<br />
<ul>
@@ -46,23 +78,23 @@
</ul><br />
<span>After discovering ThePrimagen (I found him long ago, but I never bothered buying the same keyboard he is on) on YouTube and reading/watching a couple of reviews, I thought that as a computer professional, the equipment could be expensive anyway (laptop, adjustable desk, comfortable chair), so why not invest a bit more into the keyboard? I purchased myself the Kinesis Advantage360 Professional keyboard. </span><br />
<br />
-<h2 style='display: inline' id='Kinesisreview'>Kinesis review</h2><br />
+<h2 style='display: inline' id='kinesis-review'>Kinesis review</h2><br />
<br />
<span>For an in-depth review, have a look at this great article:</span><br />
<br />
<a class='textlink' href='https://arslan.io/2022/10/22/review-of-the-kinesis-advantage360-professional'>Review of the Kinesis Advantage360 Professional keyboard</a><br />
<br />
-<h3 style='display: inline' id='Topbuildquality'>Top build quality</h3><br />
+<h3 style='display: inline' id='top-build-quality'>Top build quality</h3><br />
<br />
<span>Overall, the keyboard feels excellent quality and robust. It has got some weight to it. Because of that, it is not ideally suited for travel, though. But I have a different keyboard to solve this (see later in this post). Overall, I love how it is built and how it feels.</span><br />
<br />
<a href='./typing-127.1-words-per-minute/kinesis2.jpg'><img alt='Kinesis Adv.360 Pro at home' title='Kinesis Adv.360 Pro at home' src='./typing-127.1-words-per-minute/kinesis2.jpg' /></a><br />
<br />
-<h3 style='display: inline' id='Bluetoothconnectivity'>Bluetooth connectivity</h3><br />
+<h3 style='display: inline' id='bluetooth-connectivity'>Bluetooth connectivity</h3><br />
<br />
<span>Despite encountering concerns about Bluetooth connectivity issues with the Kinesis keyboard during my research, I purchased one anyway as I intended to use it only via USB. However, I discovered that the firmware updates available afterwards had addressed these reported Bluetooth issues, and as a result, I did not experience any difficulties with the Bluetooth functionality. This positive outcome allowed me to enjoy using the keyboard also wirelessly.</span><br />
<br />
-<h3 style='display: inline' id='GateronBrownkeyswitches'>Gateron Brown key switches</h3><br />
+<h3 style='display: inline' id='gateron-brown-key-switches'>Gateron Brown key switches</h3><br />
<br />
<span>Many voices on the internet seem to dislike the Gateron Brown switches, the only official choice for non-clicky tactile switches in the Kinesis, so I was also a bit concerned. I almost went with Cherry MX Browns for my Kinesis (a custom build from a 3rd party provider that is partnershipping with Kinesis). Still, I decided on Gateron Browns to try different switches than the Cherry MX Browns I already have on my ZSA Moonlander keyboard (another ortho-linear split keyboard, but without a concave keycap layout). </span><br />
<br />
@@ -70,7 +102,7 @@
<br />
<span>So, the Cherry MX feel sharper but are more tiring in the long run, and the Gaterons are easier to write on and the tactile Feedback is slightly less pronounced. </span><br />
<br />
-<h3 style='display: inline' id='Keycaps'>Keycaps</h3><br />
+<h3 style='display: inline' id='keycaps'>Keycaps</h3><br />
<br />
<span>If you ever purchase a Kinesis keyboard, go with the PCB keycaps. They upgrade the typing experience a lot. The only thing you will lose is that the backlighting won&#39;t shine through them. But that is a reasonable tradeoff. When do I need backlighting? I am supposed to look at the screen and not the keyboard while typing. </span><br />
<br />
@@ -78,7 +110,7 @@
<br />
<a href='./typing-127.1-words-per-minute/kinesis1.jpg'><img alt='Kinesis Adv.360 Pro at home' title='Kinesis Adv.360 Pro at home' src='./typing-127.1-words-per-minute/kinesis1.jpg' /></a><br />
<br />
-<h3 style='display: inline' id='Keymapeditor'>Keymap editor</h3><br />
+<h3 style='display: inline' id='keymap-editor'>Keymap editor</h3><br />
<br />
<span>There is no official keymap editor. You have to edit a configuration file manually, build the firmware from scratch, and upload the firmware with the new keymap to both keyboard halves. The Professional version of his keyboard, by the way, runs on the ZMK open-source firmware.</span><br />
<br />
@@ -86,7 +118,7 @@
<br />
<span>There is a 3rd party solution which is supposed to configure the keymap for the Professional model as bliss, but I have never used it. As a part-time programmer and full-time Site Reliability Engineer, I am okay configuring the keymap in my text editor and building it in a local docker container. This is one of the standard ways of doing it here. You could also use a GitHub pipeline for the firmware build, but I prefer building it locally on my machine. This all seems natural to me, but this may be an issue for "the average Joe" user.</span><br />
<br />
-<h2 style='display: inline' id='Firststeps'>First steps</h2><br />
+<h2 style='display: inline' id='first-steps'>First steps</h2><br />
<br />
<span>I didn&#39;t measure the usual words per minute (wpm) on my previous keyboard, the ZSA Moonlander, but I guess that it was around 40-50wpm. Once the Kinesis arrived, I started practising. The experience was quite different due to the concave keycaps, so I barely managed 10wpm on the first day.</span><br />
<br />
@@ -98,7 +130,7 @@
<br />
<span>I also had a problem with the left pinky finger, where I could not comfortably reach the <span class='inlinecode'>p</span> key. This involved moving the whole hand. An easy fix was to swap <span class='inlinecode'>p</span> with <span class='inlinecode'>;</span> on the keyboard layout.</span><br />
<br />
-<h2 style='display: inline' id='Consideringalternatelayouts'>Considering alternate layouts</h2><br />
+<h2 style='display: inline' id='considering-alternate-layouts'>Considering alternate layouts</h2><br />
<br />
<span>As I was going to learn 10-finger touch typing from scratch, I also played with the thought of switching from the Qwerty to the Dvorak or Colemak keymap, but after reading some comments on the internet, I decided against it: </span><br />
<br />
@@ -108,9 +140,9 @@
<li>There are also many applications and websites with keyboard shortcuts and are Qwerty-optimized.</li>
<li>You won&#39;t be able to use someone else&#39;s computer as there will be likely Qwerty. Some report that after using an alternative layout for a while, they forget how to use Qwerty.</li>
</ul><br />
-<h2 style='display: inline' id='Traininghowtotype'>Training how to type</h2><br />
+<h2 style='display: inline' id='training-how-to-type'>Training how to type</h2><br />
<br />
-<h3 style='display: inline' id='Tools'>Tools</h3><br />
+<h3 style='display: inline' id='tools'>Tools</h3><br />
<br />
<span>One of the most influential tools in my touch typing journey has been <span class='inlinecode'>keybr.com</span>. This site/app helped me learn 10-finger touch typing, and I practice daily for 30 minutes (in the first two weeks, up to an hour every day). The key is persistence and focus on technique rather than speed; the latter naturally improves with regular practice. Precision matters, too, so I always correct my errors using the backspace key.</span><br />
<br />
@@ -122,7 +154,7 @@
<br />
<span>I wrote myself a small Ruby script that would randomly select a paragraph from one of my eBooks or book notes and pipe it to <span class='inlinecode'>tt</span>. This helped me remember some of the books I read and also practice touch typing.</span><br />
<br />
-<h2 style='display: inline' id='Mykeybrcomstatistics'>My <span class='inlinecode'>keybr.com</span> statistics</h2><br />
+<h2 style='display: inline' id='my-keybrcom-statistics'>My <span class='inlinecode'>keybr.com</span> statistics</h2><br />
<br />
<span>Overall, I trained for around 4 months in more than 5,000 sessions. My top speed in a session was 127.1wpm (up from barely 10wpm at the beginning).</span><br />
<br />
@@ -134,26 +166,26 @@
<br />
<span>Around the middle, you see a break-in of the wpm average value. This was where I swapped the <span class='inlinecode'>p</span> and <span class='inlinecode'>;</span> keys, but after some retraining, I came back to the previous level and beyond.</span><br />
<br />
-<h2 style='display: inline' id='Tipsandtricks'>Tips and tricks</h2><br />
+<h2 style='display: inline' id='tips-and-tricks'>Tips and tricks</h2><br />
<br />
<span>These are some tips and tricks I learned along the way to improve my typing speed:</span><br />
<br />
-<h3 style='display: inline' id='Relax'>Relax</h3><br />
+<h3 style='display: inline' id='relax'>Relax</h3><br />
<br />
<span>It&#39;s easy to get cramped when trying to hit this new wpm mark, but this is just holding you back. Relax and type at a natural pace. Now I also understand why my Katate Sensei back in London kept screaming "RELAAAX" at me during practice.... It didn&#39;t help much back then, though, as it is difficult to relax while someone screams at you! </span><br />
-<h3 style='display: inline' id='Focusonaccuracyfirst'>Focus on accuracy first</h3><br />
+<h3 style='display: inline' id='focus-on-accuracy-first'>Focus on accuracy first</h3><br />
<br />
<span>This goes with the previous point. Instead of trying to speed through sessions as quickly as possible, slow down and try to type the words correctly—so don&#39;t rush it. If you aren&#39;t fast yet, the reason is that your brain hasn&#39;t trained enough. It will come over time, and you will be faster.</span><br />
<br />
-<h3 style='display: inline' id='Chording'>Chording</h3><br />
+<h3 style='display: inline' id='chording'>Chording</h3><br />
<br />
<span>A trick to getting faster is to type by word and pause between each word so you learn the words by chords. From 80wpm and beyond, this makes a real difference. </span><br />
<br />
-<h3 style='display: inline' id='PunctuationandCapitalization'>Punctuation and Capitalization</h3><br />
+<h3 style='display: inline' id='punctuation-and-capitalization'>Punctuation and Capitalization</h3><br />
<br />
<span>I included 10% punctuation and 20% capital letters in my <span class='inlinecode'>keybr.com</span> practice sessions to simulate real typing conditions, which improved my overall working efficiency. I guess I would have gone to 120wpm in average if I didn&#39;t include this options...</span><br />
<br />
-<h3 style='display: inline' id='Reverseshifting'>Reverse shifting</h3><br />
+<h3 style='display: inline' id='reverse-shifting'>Reverse shifting</h3><br />
<br />
<span>Reverse shifting aka left-right shifting is to... </span><br />
<br />
@@ -163,24 +195,24 @@
</ul><br />
<span>This makes using the shift key a blaze.</span><br />
<br />
-<h3 style='display: inline' id='Entertheflowstate'>Enter the flow state</h3><br />
+<h3 style='display: inline' id='enter-the-flow-state'>Enter the flow state</h3><br />
<br />
<span>Listening to music helps me enter a flow state during practice sessions, which makes typing training a bit addictive (which is good, or isn&#39;t it?).</span><br />
<br />
-<h3 style='display: inline' id='Repeateveryword'>Repeat every word</h3><br />
+<h3 style='display: inline' id='repeat-every-word'>Repeat every word</h3><br />
<br />
<span>There&#39;s a setting on <span class='inlinecode'>keybr.com</span> that makes it so that every word is always repeated, having you type every word twice in a row. I liked this feature very much, and I think it also helped to improve my practice.</span><br />
<br />
-<h3 style='display: inline' id='Dontusethesamefingerfortwoconsecutivekeystrokes'>Don&#39;t use the same finger for two consecutive keystrokes</h3><br />
+<h3 style='display: inline' id='dont-use-the-same-finger-for-two-consecutive-keystrokes'>Don&#39;t use the same finger for two consecutive keystrokes</h3><br />
<br />
<span>Apparently, if you want to type fast, avoid using the same finger for two consecutive keystrokes. This means you don&#39;t always need to use the same finger for the same keys. </span><br />
<span>However, there are no hard and fast rules. Thus, everyone develops their system for typing word combinations. An exception would be if you are typing the very same letter in a row (e.g., t in letter)—here, you are using the same finger for both ts.</span><br />
<br />
-<h3 style='display: inline' id='Warmup'>Warm-up</h3><br />
+<h3 style='display: inline' id='warm-up'>Warm-up</h3><br />
<br />
<span>You can&#39;t reach your average typing speed first ting the morning. It would help if you warmed up before the exercise or practice later during the day. Also, some days are good, others not so, e.g., after a bad night&#39;s sleep. What matters is the mid- and long-term trend, not the fluctuations here, though.</span><br />
<br />
-<h2 style='display: inline' id='Travelkeyboard'>Travel keyboard</h2><br />
+<h2 style='display: inline' id='travel-keyboard'>Travel keyboard</h2><br />
<br />
<span>As mentioned, the Kinesis is a great keyboard, but it is not meant for travel.</span><br />
<br />
@@ -200,11 +232,11 @@
<br />
<a class='textlink' href='https://arslan.io/2024/04/22/review-of-the-moergo-glove80-keyboard/'>Review of the Glove80 keyboard</a><br />
<br />
-<h2 style='display: inline' id='UpcomingcustomKinesisbuild'>Upcoming custom Kinesis build</h2><br />
+<h2 style='display: inline' id='upcoming-custom-kinesis-build'>Upcoming custom Kinesis build</h2><br />
<br />
<span>As I mentioned, keyboards will remain an expensive hobby of mine. I don&#39;t regret anything here, though. After all, I use keyboards at my day job. I&#39;ve ordered a Kinesis custom build with the Gateron Kangaroo switches, and I&#39;m excited to see how that compares to my current setup. I&#39;m still deciding whether to keep my Gateron Brown-equipped Kinesis as a secondary keyboard or possibly leave it at my in-laws for use when visiting or to sell it.</span><br />
<br />
-<h2 style='display: inline' id='Conclusion'>Conclusion</h2><br />
+<h2 style='display: inline' id='conclusion'>Conclusion</h2><br />
<br />
<span>When I traveled with the Glove80 for work to the London office, a colleague stared at my keyboard and made jokes that it might be broken (split into two halves). But other than that... </span><br />
<br />
@@ -238,6 +270,16 @@
<br />
<span class='quote'>Published at 2024-07-07T12:46:55+03:00</span><br />
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#the-stoic-challenge-book-notes'>"The Stoic Challenge" book notes</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#negative-visualization'>Negative visualization</a></li>
+<li>⇢ <a href='#oh-nice-trick-you-stoic-god--'>Oh, nice trick, you stoic "god"! ;-)</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>These are my personal takeaways after reading "The Stoic Challenge: A Philosopher&#39;s Guide to Becoming Tougher, Calmer, and More Resilient" by William B. Irvine. </span><br />
<br />
<pre>
@@ -1128,10 +1170,6 @@ Art by Laura Brown
</pre>
<br />
-<h2 style='display: inline' id='introduction'>Introduction</h2><br />
-<br />
-<span>Over the years, I have collected many ideas for my personal projects and noted them down. I am currently in the process of cleaning up all my notes and reviewing those ideas. I don’t have time for the ones listed here and won’t have any soon due to other commitments and personal projects. So, in order to "get rid of them" from my notes folder, I decided to simply put them in this blog post so that those ideas don&#39;t get lost. Maybe I will pick up one or another idea someday in the future, but for now, they are all put on ice in favor of other personal projects or family time.</span><br />
-<br />
<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
<br />
<ul>
@@ -1171,6 +1209,10 @@ Art by Laura Brown
<li>⇢ ⇢ <a href='#project-secure'>Project secure</a></li>
<li>⇢ ⇢ <a href='#cpu-utilisation-is-all-wrong'>CPU utilisation is all wrong</a></li>
</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
+<span>Over the years, I have collected many ideas for my personal projects and noted them down. I am currently in the process of cleaning up all my notes and reviewing those ideas. I don’t have time for the ones listed here and won’t have any soon due to other commitments and personal projects. So, in order to "get rid of them" from my notes folder, I decided to simply put them in this blog post so that those ideas don&#39;t get lost. Maybe I will pick up one or another idea someday in the future, but for now, they are all put on ice in favor of other personal projects or family time.</span><br />
+<br />
<h2 style='display: inline' id='hardware-projects-i-dont-have-time-for'>Hardware projects I don&#39;t have time for</h2><br />
<br />
<h3 style='display: inline' id='i-use-arch-btw'>I use Arch, btw!</h3><br />
@@ -1448,6 +1490,19 @@ http://www.gnu.org/software/src-highlite -->
<br />
<span class='quote'>Published at 2024-04-27T14:18:51+03:00</span><br />
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#slow-productivity-book-notes'>"Slow Productivity" book notes</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#pseudo-productivity-and-shallow-work'>Pseudo-productivity and Shallow work</a></li>
+<li>⇢ <a href='#accomplishments-without-burnout'>Accomplishments without burnout</a></li>
+<li>⇢ <a href='#do-fewer-things'>Do fewer things</a></li>
+<li>⇢ <a href='#work-at-a-natural-pace'>Work at a natural pace</a></li>
+<li>⇢ <a href='#obsess-over-quality-'>Obsess over quality </a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>These are my personal takeaways after reading "Slow Productivity - The lost Art of Accomplishment Without Burnout" by Cal Newport.</span><br />
<br />
<span>The case studies in this book were a bit long, but they appeared to be well-researched. I will only highlight the interesting, actionable items in the book notes.</span><br />
@@ -1635,6 +1690,7 @@ _____|_:_:_| (o)-(o) |_:_:_|--&#39;`-. ,--. ksh under-water (((\&#39;/
<br />
<ul>
<li><a href='#kiss-high-availability-with-openbsd'>KISS high-availability with OpenBSD</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
<li>⇢ <a href='#my-auto-failover-requirements'>My auto-failover requirements</a></li>
<li>⇢ <a href='#my-ha-solution'>My HA solution</a></li>
<li>⇢ ⇢ <a href='#only-openbsd-base-installation-required'>Only OpenBSD base installation required</a></li>
@@ -1646,6 +1702,8 @@ _____|_:_:_| (o)-(o) |_:_:_|--&#39;`-. ,--. ksh under-water (((\&#39;/
<li>⇢ ⇢ <a href='#rex-automation'>Rex automation</a></li>
<li>⇢ <a href='#more-ha'>More HA</a></li>
</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>I have always wanted a highly available setup for my personal websites. I could have used off-the-shelf hosting solutions or hosted my sites in an AWS S3 bucket. I have used technologies like (in unsorted and slightly unrelated order) BGP, LVS/IPVS, ldirectord, Pacemaker, STONITH, scripted VIP failover via ARP, heartbeat, heartbeat2, Corosync, keepalived, DRBD, and commercial F5 Load Balancers for high availability at work. </span><br />
<br />
<span>But still, my personal sites were never highly available. All those technologies are great for professional use, but I was looking for something much more straightforward for my personal space - something as KISS (keep it simple and stupid) as possible.</span><br />
@@ -1950,6 +2008,15 @@ http://www.gnu.org/software/src-highlite -->
<br />
<span class='quote'>Published at 2024-03-03T00:07:21+02:00</span><br />
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-go'>A fine Fyne Android app for quickly logging ideas programmed in Go</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#all-easy-peasy'>All easy-peasy?</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>I am an ideas person. I find myself frequently somewhere on the streets with an idea in my head but no paper journal noting it down. </span><br />
<br />
<span>I have tried many note apps for my Android (I use GrapheneOS) phone. Most of them either don&#39;t do what I want, are proprietary software, require Google Play services (I have the main profile on my phone de-googled) or are too bloated. I was never into mobile app development, as I&#39;m not too fond of the complexity of the developer toolchains. I don&#39;t want to use Android Studio (as a NeoVim user), and I don&#39;t want to use Java or Kotlin. I want to use a language I know (and like) for mobile app development. Go would be one of those languages.</span><br />
@@ -2365,6 +2432,22 @@ jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Art by Joan Stark, mod. by Paul Buetow
</pre>
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#bash-golf-part-3'>Bash Golf Part 3</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#funcname'><span class='inlinecode'>FUNCNAME</span></a></li>
+<li>⇢ <a href='#--'><span class='inlinecode'>:(){ :|:&amp; };:</span></a></li>
+<li>⇢ <a href='#inner-functions'>Inner functions</a></li>
+<li>⇢ <a href='#exporting-functions'>Exporting functions</a></li>
+<li>⇢ <a href='#dynamic-variables-with-local'>Dynamic variables with <span class='inlinecode'>local</span></a></li>
+<li>⇢ <a href='#if-conditionals'><span class='inlinecode'>if</span> conditionals</a></li>
+<li>⇢ <a href='#multi-line-comments'>Multi-line comments</a></li>
+<li>⇢ <a href='#dont-change-it-while-its-executed'>Don&#39;t change it while it&#39;s executed</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<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 />
@@ -2835,6 +2918,22 @@ echo baz
<br />
<span class='quote'>Published at 2023-11-11T22:21:47+02:00</span><br />
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#mind-management-book-notes'>"Mind Management" book notes</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#empty-slots-in-the-calendar'>Empty slots in the calendar</a></li>
+<li>⇢ <a href='#when-you-safe-time'>When you safe time...</a></li>
+<li>⇢ <a href='#follow-your-mood'>Follow your mood</a></li>
+<li>⇢ <a href='#boosting-creativity'>Boosting creativity</a></li>
+<li>⇢ <a href='#the-right-mood-for-the-task-at-hand'>The right mood for the task at hand</a></li>
+<li>⇢ <a href='#creativity-hacks'>Creativity hacks</a></li>
+<li>⇢ <a href='#planning-and-strategizing'>Planning and strategizing</a></li>
+<li>⇢ <a href='#fake-it-until-you-make-it-'>Fake it until you make it. </a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>These are my personal takeaways after reading "Mind Management" by David Kadavy. Note that the book contains much more knowledge wisdom and that these notes only contain points I personally found worth writing down. This is mainly for my own use, but you might find it helpful too.</span><br />
<br />
<pre>
@@ -2981,6 +3080,19 @@ echo baz
&#39;._____________________________________________.&#39;
</pre>
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#kiss-static-web-photo-albums-with-photoalbumsh'>KISS static web photo albums with <span class='inlinecode'>photoalbum.sh</span></a></li>
+<li>⇢ <a href='#motivation'>Motivation</a></li>
+<li>⇢ <a href='#introducing-photoalbumsh'>Introducing <span class='inlinecode'>photoalbum.sh</span></a></li>
+<li>⇢ <a href='#installation'>Installation</a></li>
+<li>⇢ <a href='#setting-it-up'>Setting it up</a></li>
+<li>⇢ <a href='#generating-the-static-photo-album'>Generating the static photo album</a></li>
+<li>⇢ <a href='#cleaning-it-up'>Cleaning it up</a></li>
+<li>⇢ <a href='#html-templates'>HTML templates</a></li>
+<li>⇢ <a href='#conclusion'>Conclusion</a></li>
+</ul><br />
<h2 style='display: inline' id='motivation'>Motivation</h2><br />
<br />
<span>Once in a while, I share photos on the inter-web with either family and friends or on my The Irregular Ninja photo site. One hobby of mine is photography (even though I don&#39;t have enough time for it - so I am primarily a point-and-shoot photographer).</span><br />
@@ -3262,6 +3374,23 @@ blurs html index.html photos thumbs
<br />
<span class='quote'>Published at 2023-09-25T14:57:42+03:00</span><br />
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#dtail-usage-examples'>DTail usage examples</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#following-logs'>Following logs</a></li>
+<li>⇢ <a href='#aggregating-logs'>Aggregating logs</a></li>
+<li>⇢ <a href='#how-to-use-dcat'>How to use <span class='inlinecode'>dcat</span></a></li>
+<li>⇢ <a href='#how-to-use-dgrep'>How to use <span class='inlinecode'>dgrep</span></a></li>
+<li>⇢ <a href='#how-to-use-dmap'>How to use <span class='inlinecode'>dmap</span></a></li>
+<li>⇢ <a href='#how-to-use-the-dtail-serverless-mode'>How to use the DTail serverless mode</a></li>
+<li>⇢ ⇢ <a href='#serverless-map-reduce-query'>Serverless map-reduce query</a></li>
+<li>⇢ ⇢ <a href='#aggregating-csv-files'>Aggregating CSV files</a></li>
+<li>⇢ ⇢ <a href='#other-serverless-commands'>Other serverless commands</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>Hey there. As I am pretty busy this month personally (I am now on Paternity Leave) and as I still want to post once monthly, the blog post of this month will only be some DTail usage examples. They&#39;re from the DTail documentation, but not all readers of my blog may be aware of those!</span><br />
<br />
<span>DTail is a distributed DevOps tool for tailing, grepping, catting logs and other text files on many remote machines at once which I programmed in Go.</span><br />
@@ -3669,6 +3798,21 @@ DC on fire:
mod. by Paul Buetow `"""""""""`
</pre>
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#gemtexter-210---lets-gemtext-again'>Gemtexter 2.1.0 - Let&#39;s Gemtext again³</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#why-bash'>Why Bash?</a></li>
+<li>⇢ <a href='#switch-to-gpl3-license'>Switch to GPL3 license</a></li>
+<li>⇢ <a href='#source-code-highlighting-support'>Source code highlighting support</a></li>
+<li>⇢ <a href='#html-exact-variant'>HTML exact variant</a></li>
+<li>⇢ <a href='#use-of-hack-webfont-by-default'>Use of Hack webfont by default</a></li>
+<li>⇢ <a href='#html-mastodon-verification-support'>HTML Mastodon verification support</a></li>
+<li>⇢ <a href='#more'>More</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>I proudly announce that I&#39;ve released Gemtexter version <span class='inlinecode'>2.1.0</span>. What is Gemtexter? It&#39;s my minimalist static site generator for Gemini Gemtext, HTML and Markdown, written in GNU Bash.</span><br />
<br />
<a class='textlink' href='https://codeberg.org/snonux/gemtexter'>https://codeberg.org/snonux/gemtexter</a><br />
@@ -3784,6 +3928,42 @@ http://www.gnu.org/software/src-highlite -->
<br />
<span class='quote'>Published at 2023-07-17T04:56:20+03:00</span><br />
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#software-developmers-career-guide-and-soft-skills-book-notes'>"Software Developmers Career Guide and Soft Skills" book notes</a></li>
+<li><a href='#introduction'>Introduction</a></li>
+<li><a href='#improve'>Improve</a></li>
+<li>⇢ <a href='#always-learn-new-things'>Always learn new things</a></li>
+<li>⇢ <a href='#set-goals'>Set goals</a></li>
+<li>⇢ <a href='#ratings'>Ratings</a></li>
+<li>⇢ <a href='#promotions'>Promotions</a></li>
+<li>⇢ <a href='#finish-things'>Finish things</a></li>
+<li>⇢ <a href='#expand-the-empire'>Expand the empire</a></li>
+<li>⇢ <a href='#be-pragmatic-and-also-manage-your-time'>Be pragmatic and also manage your time</a></li>
+<li>⇢ ⇢ <a href='#the-quota-system'>The quota system</a></li>
+<li>⇢ ⇢ <a href='#dont-waste-time'>Don&#39;t waste time</a></li>
+<li>⇢ ⇢ <a href='#habits'>Habits</a></li>
+<li><a href='#work-life-balance'>Work-life balance</a></li>
+<li>⇢ <a href='#mental-health'>Mental health</a></li>
+<li>⇢ <a href='#physical-health'>Physical health</a></li>
+<li>⇢ <a href='#no-drama'>No drama</a></li>
+<li><a href='#personal-brand'>Personal brand</a></li>
+<li>⇢ <a href='#market-yourself'>Market yourself</a></li>
+<li>⇢ <a href='#networking'>Networking</a></li>
+<li>⇢ <a href='#public-speaking'>Public speaking</a></li>
+<li><a href='#new-job'>New job</a></li>
+<li>⇢ <a href='#for-the-interview'>For the interview</a></li>
+<li>⇢ <a href='#find-the-right-type-of-company'>Find the right type of company</a></li>
+<li>⇢ <a href='#apply-for-the-new-job'>Apply for the new job</a></li>
+<li>⇢ <a href='#negotiation'>Negotiation</a></li>
+<li>⇢ <a href='#leaving-the-old-job'>Leaving the old job</a></li>
+<li><a href='#other-things'>Other things</a></li>
+<li>⇢ <a href='#testing'>Testing</a></li>
+<li>⇢ <a href='#books-to-read'>Books to read</a></li>
+</ul><br />
+<h1 style='display: inline' id='introduction'>Introduction</h1><br />
+<br />
<span>These notes are of two books by "John Sommez" I found helpful. I also added some of my own keypoints to it. These notes are mainly for my own use, but you might find them helpful, too.</span><br />
<br />
<pre>
@@ -4113,6 +4293,25 @@ http://www.gnu.org/software/src-highlite -->
<br />
<a href='./kiss-server-monitoring-with-gogios/gogios-small.png'><img alt='Gogios logo' title='Gogios logo' src='./kiss-server-monitoring-with-gogios/gogios-small.png' /></a><br />
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#kiss-server-monitoring-with-gogios'>KISS server monitoring with Gogios</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#motivation'>Motivation</a></li>
+<li>⇢ <a href='#features'>Features</a></li>
+<li>⇢ <a href='#example-alert'>Example alert</a></li>
+<li>⇢ <a href='#installation'>Installation</a></li>
+<li>⇢ ⇢ <a href='#compiling-and-installing-gogios'>Compiling and installing Gogios</a></li>
+<li>⇢ ⇢ <a href='#setting-up-user-group-and-directories'>Setting up user, group and directories</a></li>
+<li>⇢ ⇢ <a href='#installing-monitoring-plugins'>Installing monitoring plugins</a></li>
+<li>⇢ <a href='#configuration'>Configuration</a></li>
+<li>⇢ ⇢ <a href='#mta'>MTA</a></li>
+<li>⇢ ⇢ <a href='#configuring-gogios'>Configuring Gogios</a></li>
+<li>⇢ <a href='#running-gogios'>Running Gogios</a></li>
+<li>⇢ ⇢ <a href='#high-availability'>High-availability</a></li>
+<li>⇢ <a href='#conclusion'>Conclusion:</a></li>
+</ul><br />
<h2 style='display: inline' id='introduction'>Introduction</h2><br />
<br />
<span>Gogios is a minimalistic and easy-to-use monitoring tool I programmed in Google Go designed specifically for small-scale self-hosted servers and virtual machines. The primary purpose of Gogios is to monitor my personal server infrastructure for <span class='inlinecode'>foo.zone</span>, my MTAs, my authoritative DNS servers, my NextCloud, Wallabag and Anki sync server installations, etc.</span><br />
@@ -4395,6 +4594,26 @@ http://www.gnu.org/software/src-highlite -->
<br />
<span class='quote'>Published at 2023-05-06T17:23:16+03:00</span><br />
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#the-obstacle-is-the-way-book-notes'>"The Obstacle is the Way" book notes</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#reframe-your-perspective'>Reframe your perspective</a></li>
+<li>⇢ <a href='#embrace-rationality'>Embrace rationality</a></li>
+<li>⇢ <a href='#control-your-response'>Control your response</a></li>
+<li>⇢ <a href='#practice-emotional-and-physical-resilience'>Practice emotional and physical resilience</a></li>
+<li>⇢ <a href='#persistence-and-patience'>Persistence and patience</a></li>
+<li>⇢ <a href='#embrace-failure'>Embrace failure</a></li>
+<li>⇢ <a href='#be-adaptable'>Be adaptable</a></li>
+<li>⇢ <a href='#embrace-non-action'>Embrace non-action</a></li>
+<li>⇢ <a href='#leverage-crisis'>Leverage crisis</a></li>
+<li>⇢ <a href='#build-your-inner-citadel'>Build your inner citadel</a></li>
+<li>⇢ <a href='#love-everything-that-happens'>Love everything that happens</a></li>
+<li>⇢ <a href='#conclusion'>Conclusion</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>These are my personal takeaways after reading "The Obstacle Is the Way" by Ryan Holiday. This is mainly for my own use, but you might find it helpful too.</span><br />
<br />
<br />
@@ -4420,7 +4639,6 @@ http://www.gnu.org/software/src-highlite -->
<br />
<span>Don&#39;t always try to use the front door; a backdoor could open. It&#39;s nonsense. Don&#39;t fight the judo master with judo. Non-action can be action, exposing the weaknesses of others.</span><br />
<br />
-<br />
<h2 style='display: inline' id='embrace-rationality'>Embrace rationality</h2><br />
<br />
<span>It is a superpower to see things rationally when others are fearful. Focus on the reality of the situation without letting emotions, such as anger, cloud your judgment. This ability will enable you to make better decisions in adversity. Ability to see things what they really are. E.g. wine is old fermented grapes, or other people behaving like animals during a fight. Show the middle finger if someone persists on the stupid rules occasionally.</span><br />
@@ -4525,7 +4743,16 @@ http://www.gnu.org/software/src-highlite -->
+-----+-----------------+-----------------------------+
</pre>
<br />
-<h1 style='display: inline' id='introduction'>Introduction</h1><br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#unveiling-guprecordsraku-global-uptime-records-with-raku'>Unveiling <span class='inlinecode'>guprecords.raku</span>: Global Uptime Records with Raku</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#how-guprecords-works'>How Guprecords works</a></li>
+<li>⇢ <a href='#example'>Example</a></li>
+<li>⇢ <a href='#conclusion'>Conclusion</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
<br />
<span>For fun, I am tracking the uptime of various personal machines (servers, laptops, workstations...). I have been doing this for over ten years now, so I have a lot of statistics collected.</span><br />
<br />
@@ -4704,6 +4931,19 @@ no1 in 455 days, 18:52:44 | at Sun Jul 21 07:37:51 2024
| |
</pre>
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#algorithms-and-data-structures-in-go---part-1'>Algorithms and Data Structures in Go - Part 1</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#type-constraints'>Type constraints</a></li>
+<li>⇢ <a href='#arraylist'>ArrayList</a></li>
+<li>⇢ <a href='#helper-methods'>Helper methods</a></li>
+<li>⇢ <a href='#sleep-sort'>Sleep sort</a></li>
+<li>⇢ ⇢ <a href='#testing'>Testing</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>This is the first blog post about my Algorithms and Data Structures in Go series. I am not a Software Developer in my day job. In my current role, programming and scripting skills are desirable but not mandatory. I have been learning about Data Structures and Algorithms many years ago at University. I thought it would be fun to revisit/refresh my knowledge here and implement many of the algorithms in Go.</span><br />
<br />
<a class='textlink' href='./2023-04-09-algorithms-and-data-structures-in-golang-part-1.html'>2023-04-09 Algorithms and Data Structures in Go - Part 1 (You are currently reading this)</a><br />
@@ -5134,6 +5374,20 @@ http://www.gnu.org/software/src-highlite -->
mod. by Paul Buetow `"""""""""`
</pre>
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#gemtexter-200---lets-gemtext-again'>Gemtexter 2.0.0 - Let&#39;s Gemtext again²</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#minimal-template-engine'>Minimal template engine</a></li>
+<li>⇢ <a href='#added-hooks'>Added hooks</a></li>
+<li>⇢ <a href='#use-of-safer-bash-options'>Use of safer Bash options</a></li>
+<li>⇢ <a href='#meta-cache-made-obsolete'>Meta cache made obsolete</a></li>
+<li>⇢ <a href='#xmllint-support'>XMLLint support</a></li>
+<li>⇢ <a href='#more'>More</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>I proudly announce that I&#39;ve released Gemtexter version <span class='inlinecode'>2.0.0</span>. What is Gemtexter? It&#39;s my minimalist static site generator for Gemini Gemtext, HTML and Markdown written in GNU Bash.</span><br />
<br />
<a class='textlink' href='https://codeberg.org/snonux/gemtexter'>https://codeberg.org/snonux/gemtexter</a><br />
@@ -5951,6 +6205,24 @@ http://www.gnu.org/software/src-highlite -->
&#39; &#39;
</pre>
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#installing-dtail-on-openbsd'>Installing DTail on OpenBSD</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#compile-it'>Compile it</a></li>
+<li>⇢ <a href='#install-it'>Install it</a></li>
+<li>⇢ ⇢ <a href='#rexification'>Rexification</a></li>
+<li>⇢ <a href='#configure-it'>Configure it</a></li>
+<li>⇢ ⇢ <a href='#rexification'>Rexification</a></li>
+<li>⇢ <a href='#update-the-key-cache-for-it'>Update the key cache for it</a></li>
+<li>⇢ ⇢ <a href='#rexification'>Rexification</a></li>
+<li>⇢ <a href='#start-it'>Start it</a></li>
+<li>⇢ <a href='#use-it'>Use it</a></li>
+<li>⇢ <a href='#conclusions'>Conclusions</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>This will be a quick blog post, as I am busy with my personal life now. I have relocated to a different country and am still busy arranging things. So bear with me :-)</span><br />
<br />
<span> In this post, I want to give a quick overview (or how-to) about installing DTail on OpenBSD, as the official documentation only covers Red Hat and Fedora Linux! And this blog post will also be used as my reference!</span><br />
@@ -6406,6 +6678,23 @@ jgs (________\ \
jgs `"""""""""`
</pre>
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#gemtexter-110---lets-gemtext-again'>Gemtexter 1.1.0 - Let&#39;s Gemtext again</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#whats-new'>What&#39;s new?</a></li>
+<li>⇢ ⇢ <a href='#automatic-check-for-gnu-version-requirements'>Automatic check for GNU version requirements</a></li>
+<li>⇢ ⇢ <a href='#backticks-now-produce-inline-code-blocks-in-the-html-output'>Backticks now produce <span class='inlinecode'>inline code blocks</span> in the HTML output</a></li>
+<li>⇢ ⇢ <a href='#cache-for-atom-feed-generation'>Cache for Atom feed generation</a></li>
+<li>⇢ ⇢ <a href='#input-filter-support'>Input filter support</a></li>
+<li>⇢ ⇢ <a href='#revamped-git-support'>Revamped <span class='inlinecode'>git</span> support</a></li>
+<li>⇢ ⇢ <a href='#addition-of-htmlextras-and-web-font-support'>Addition of <span class='inlinecode'>htmlextras</span> and web font support</a></li>
+<li>⇢ ⇢ <a href='#sub-section-support'>Sub-section support</a></li>
+<li>⇢ ⇢ <a href='#more'>More</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>I proudly announce that I&#39;ve released Gemtexter version <span class='inlinecode'>1.1.0</span>. What is Gemtexter? It&#39;s my minimalist static site generator for Gemini Gemtext, HTML and Markdown written in GNU Bash.</span><br />
<br />
<a class='textlink' href='https://codeberg.org/snonux/gemtexter'>https://codeberg.org/snonux/gemtexter</a><br />
@@ -6540,9 +6829,29 @@ http://www.gnu.org/software/src-highlite -->
ASCII Art by John Savard
</pre>
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#lets-encrypt-with-openbsd-and-rex'>Let&#39;s Encrypt with OpenBSD and Rex</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ ⇢ <a href='#whats-lets-encrypt'>What&#39;s Let&#39;s Encrypt?</a></li>
+<li>⇢ <a href='#meet-acme-client'>Meet <span class='inlinecode'>acme-client</span></a></li>
+<li>⇢ <a href='#configuration'>Configuration</a></li>
+<li>⇢ ⇢ <a href='#acme-clientconf'>acme-client.conf</a></li>
+<li>⇢ ⇢ <a href='#httpdconf'>httpd.conf</a></li>
+<li>⇢ ⇢ <a href='#cron-job'>CRON job</a></li>
+<li>⇢ <a href='#relaydconf-and-smtpdconf'>relayd.conf and smtpd.conf</a></li>
+<li>⇢ <a href='#rexification'>Rexification</a></li>
+<li>⇢ ⇢ <a href='#general-acme-client-configuration'>General ACME client configuration</a></li>
+<li>⇢ ⇢ <a href='#service-rexification-'>Service rexification </a></li>
+<li>⇢ <a href='#all-pieces-together'>All pieces together</a></li>
+<li>⇢ <a href='#conclusion'>Conclusion</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>I was amazed at how easy it is to automatically generate and update Let&#39;s Encrypt certificates with OpenBSD.</span><br />
<br />
-<h2 style='display: inline' id='whats-lets-encrypt'>What&#39;s Let&#39;s Encrypt?</h2><br />
+<h3 style='display: inline' id='whats-lets-encrypt'>What&#39;s Let&#39;s Encrypt?</h3><br />
<br />
<span class='quote'>Let&#39;s Encrypt is a non-profit certificate authority run by Internet Security Research Group that provides X.509 certificates for Transport Layer Security (TLS) encryption at no charge. It is the world&#39;s largest certificate authority, used by more than 265 million websites, with the goal of all websites being secure and using HTTPS.</span><br />
<br />
@@ -7545,6 +7854,19 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs
<br />
<a href='./perl-is-still-a-great-choice/regular_expressions.png'><img alt='Comic source: XKCD' title='Comic source: XKCD' src='./perl-is-still-a-great-choice/regular_expressions.png' /></a><br />
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#perl-is-still-a-great-choice'>Perl is still a great choice</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#write-only-language'>Write-only language</a></li>
+<li>⇢ <a href='#is-perl-abandoned'>Is Perl abandoned?</a></li>
+<li>⇢ <a href='#why-use-perl-as-there-are-better-alternatives'>Why use Perl as there are better alternatives?</a></li>
+<li>⇢ <a href='#why-all-the-sigils-it-looks-like-an-exploding-ascii-factory'>Why all the sigils? It looks like an exploding ASCII factory!!</a></li>
+<li>⇢ <a href='#where-do-i-personally-still-use-perl'>Where do I personally still use perl?</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>Perl (the Practical Extraction and Report Language) is a battle-tested, mature, multi-paradigm dynamic programming language. Note that it&#39;s not called PERL, neither P.E.R.L. nor Pearl. "Perl" is the name of the language and <span class='inlinecode'>perl</span> the name of the interpreter or the interpreter command.</span><br />
<br />
<span>Unfortunately (it makes me sad), Perl&#39;s popularity has been declining over the last years as Google trends shows:</span><br />
@@ -7882,6 +8204,27 @@ learn () {
| |
</pre>
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#the-release-of-dtail-400'>The release of DTail 4.0.0</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#so-whats-new-in-400'>So, what&#39;s new in 4.0.0?</a></li>
+<li>⇢ ⇢ <a href='#rewritten-logging'>Rewritten logging</a></li>
+<li>⇢ ⇢ <a href='#configurable-terminal-color-codes'>Configurable terminal color codes</a></li>
+<li>⇢ ⇢ <a href='#serverless-mode'>Serverless mode</a></li>
+<li>⇢ ⇢ <a href='#shorthand-flags'>Shorthand flags</a></li>
+<li>⇢ ⇢ <a href='#spartan-aka-plain-mode'>Spartan (aka plain) mode</a></li>
+<li>⇢ ⇢ <a href='#standard-input-pipe'>Standard input pipe</a></li>
+<li>⇢ ⇢ <a href='#new-command-dtailhealth'>New command dtailhealth</a></li>
+<li>⇢ ⇢ <a href='#improved-documentation'>Improved documentation</a></li>
+<li>⇢ ⇢ <a href='#integration-testing-suite'>Integration testing suite</a></li>
+<li>⇢ ⇢ <a href='#improved-code'>Improved code</a></li>
+<li>⇢ ⇢ <a href='#use-of-memory-pools'>Use of memory pools</a></li>
+<li>⇢ <a href='#whats-next'>What&#39;s next</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>I have recently released DTail 4.0.0 and this blog post goes through all the new goodies. If you want to jump directly to DTail, do it here (there are nice animated gifs which demonstrates the usage pretty well):</span><br />
<br />
<a class='textlink' href='https://dtail.dev'>https://dtail.dev</a><br />
@@ -8512,6 +8855,21 @@ jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Art by Joan Stark, mod. by Paul Buetow
</pre>
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#bash-golf-part-2'>Bash Golf Part 2</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#redirection'>Redirection</a></li>
+<li>⇢ <a href='#here'>HERE</a></li>
+<li>⇢ <a href='#random'>RANDOM</a></li>
+<li>⇢ <a href='#set--x-and-set--e-and-pipefile'>set -x and set -e and pipefile</a></li>
+<li>⇢ ⇢ <a href='#-x'>-x</a></li>
+<li>⇢ ⇢ <a href='#-e'>-e</a></li>
+<li>⇢ ⇢ <a href='#pipefail'>pipefail</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>This is the second blog post about my Bash Golf series. This series is random Bash tips, tricks and weirdnesses I came across. It&#39;s a collection of smaller articles I wrote in an older (in German language) blog, which I translated and refreshed with some new content.</span><br />
<br />
<a class='textlink' href='./2021-11-29-bash-golf-part-1.html'>2021-11-29 Bash Golf Part 1</a><br />
diff --git a/index.gmi b/index.gmi
index c3a28f37..27d484e4 100644
--- a/index.gmi
+++ b/index.gmi
@@ -1,6 +1,6 @@
# foo.zone
-> This site was generated at 2024-08-24T19:44:19+03:00 by `Gemtexter`
+> This site was generated at 2024-08-24T19:58:56+03:00 by `Gemtexter`
```
|\---/|
diff --git a/notes/career-guide-and-soft-skills.gmi b/notes/career-guide-and-soft-skills.gmi
index 7a37da5a..64812f89 100644
--- a/notes/career-guide-and-soft-skills.gmi
+++ b/notes/career-guide-and-soft-skills.gmi
@@ -2,6 +2,41 @@
> Published at 2023-07-17T04:56:20+03:00
+## Table of Contents
+
+* ⇢ "Software Developmers Career Guide and Soft Skills" book notes
+* ⇢ Introduction
+* ⇢ Improve
+* ⇢ ⇢ Always learn new things
+* ⇢ ⇢ Set goals
+* ⇢ ⇢ Ratings
+* ⇢ ⇢ Promotions
+* ⇢ ⇢ Finish things
+* ⇢ ⇢ Expand the empire
+* ⇢ ⇢ Be pragmatic and also manage your time
+* ⇢ ⇢ ⇢ The quota system
+* ⇢ ⇢ ⇢ Don't waste time
+* ⇢ ⇢ ⇢ Habits
+* ⇢ Work-life balance
+* ⇢ ⇢ Mental health
+* ⇢ ⇢ Physical health
+* ⇢ ⇢ No drama
+* ⇢ Personal brand
+* ⇢ ⇢ Market yourself
+* ⇢ ⇢ Networking
+* ⇢ ⇢ Public speaking
+* ⇢ New job
+* ⇢ ⇢ For the interview
+* ⇢ ⇢ Find the right type of company
+* ⇢ ⇢ Apply for the new job
+* ⇢ ⇢ Negotiation
+* ⇢ ⇢ Leaving the old job
+* ⇢ Other things
+* ⇢ ⇢ Testing
+* ⇢ ⇢ Books to read
+
+# Introduction
+
These notes are of two books by "John Sommez" I found helpful. I also added some of my own keypoints to it. These notes are mainly for my own use, but you might find them helpful, too.
```
diff --git a/notes/mind-management.gmi b/notes/mind-management.gmi
index 78f5b505..346d155f 100644
--- a/notes/mind-management.gmi
+++ b/notes/mind-management.gmi
@@ -2,6 +2,21 @@
> Published at 2023-11-11T22:21:47+02:00
+## Table of Contents
+
+* ⇢ "Mind Management" book notes
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ Empty slots in the calendar
+* ⇢ ⇢ When you safe time...
+* ⇢ ⇢ Follow your mood
+* ⇢ ⇢ Boosting creativity
+* ⇢ ⇢ The right mood for the task at hand
+* ⇢ ⇢ Creativity hacks
+* ⇢ ⇢ Planning and strategizing
+* ⇢ ⇢ Fake it until you make it.
+
+## Introduction
+
These are my personal takeaways after reading "Mind Management" by David Kadavy. Note that the book contains much more knowledge wisdom and that these notes only contain points I personally found worth writing down. This is mainly for my own use, but you might find it helpful too.
```
diff --git a/notes/slow-productivity.gmi b/notes/slow-productivity.gmi
index f8a8b6d3..8857f96d 100644
--- a/notes/slow-productivity.gmi
+++ b/notes/slow-productivity.gmi
@@ -2,6 +2,18 @@
> Published at 2024-04-27T14:18:51+03:00
+## Table of Contents
+
+* ⇢ "Slow Productivity" book notes
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ Pseudo-productivity and Shallow work
+* ⇢ ⇢ Accomplishments without burnout
+* ⇢ ⇢ Do fewer things
+* ⇢ ⇢ Work at a natural pace
+* ⇢ ⇢ Obsess over quality
+
+## Introduction
+
These are my personal takeaways after reading "Slow Productivity - The lost Art of Accomplishment Without Burnout" by Cal Newport.
The case studies in this book were a bit long, but they appeared to be well-researched. I will only highlight the interesting, actionable items in the book notes.
diff --git a/notes/the-obstacle-is-the-way.gmi b/notes/the-obstacle-is-the-way.gmi
index 426f36d7..56cb5418 100644
--- a/notes/the-obstacle-is-the-way.gmi
+++ b/notes/the-obstacle-is-the-way.gmi
@@ -2,6 +2,25 @@
> Published at 2023-05-06T17:23:16+03:00
+## Table of Contents
+
+* ⇢ "The Obstacle is the Way" book notes
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ Reframe your perspective
+* ⇢ ⇢ Embrace rationality
+* ⇢ ⇢ Control your response
+* ⇢ ⇢ Practice emotional and physical resilience
+* ⇢ ⇢ Persistence and patience
+* ⇢ ⇢ Embrace failure
+* ⇢ ⇢ Be adaptable
+* ⇢ ⇢ Embrace non-action
+* ⇢ ⇢ Leverage crisis
+* ⇢ ⇢ Build your inner citadel
+* ⇢ ⇢ Love everything that happens
+* ⇢ ⇢ Conclusion
+
+## Introduction
+
These are my personal takeaways after reading "The Obstacle Is the Way" by Ryan Holiday. This is mainly for my own use, but you might find it helpful too.
@@ -27,7 +46,6 @@ We spend a lot of time trying to get things perfect and look at the rules, but w
Don't always try to use the front door; a backdoor could open. It's nonsense. Don't fight the judo master with judo. Non-action can be action, exposing the weaknesses of others.
-
## Embrace rationality
It is a superpower to see things rationally when others are fearful. Focus on the reality of the situation without letting emotions, such as anger, cloud your judgment. This ability will enable you to make better decisions in adversity. Ability to see things what they really are. E.g. wine is old fermented grapes, or other people behaving like animals during a fight. Show the middle finger if someone persists on the stupid rules occasionally.
diff --git a/notes/the-stoic-challenge.gmi b/notes/the-stoic-challenge.gmi
index 120d7fd6..e6d9058b 100644
--- a/notes/the-stoic-challenge.gmi
+++ b/notes/the-stoic-challenge.gmi
@@ -2,6 +2,15 @@
> Published at 2024-07-07T12:46:55+03:00
+## Table of Contents
+
+* ⇢ "The Stoic Challenge" book notes
+* ⇢ ⇢ Introduction
+* ⇢ ⇢ Negative visualization
+* ⇢ ⇢ Oh, nice trick, you stoic "god"! ;-)
+
+## Introduction
+
These are my personal takeaways after reading "The Stoic Challenge: A Philosopher's Guide to Becoming Tougher, Calmer, and More Resilient" by William B. Irvine.
```
diff --git a/uptime-stats.gmi b/uptime-stats.gmi
index d5d87d51..faf36193 100644
--- a/uptime-stats.gmi
+++ b/uptime-stats.gmi
@@ -1,6 +1,6 @@
# My machine uptime stats
-> This site was last updated at 2024-08-24T19:44:19+03:00
+> This site was last updated at 2024-08-24T19:58:56+03: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.