summaryrefslogtreecommitdiff
path: root/gemfeed
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-08-24 19:59:32 +0300
committerPaul Buetow <paul@buetow.org>2024-08-24 19:59:32 +0300
commit889b23ba1f5f68befb9ded48b8a728722c62c514 (patch)
tree19d03f76942beb06173a54744cb264fbf2da1935 /gemfeed
parent1c5f3d5c0699de2228e89bd81c59dd9e388ed6b6 (diff)
Update content for html
Diffstat (limited to 'gemfeed')
-rw-r--r--gemfeed/2008-06-26-perl-poetry.html12
-rw-r--r--gemfeed/2011-05-07-perl-daemon-service-framework.html17
-rw-r--r--gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html12
-rw-r--r--gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html17
-rw-r--r--gemfeed/2021-04-24-welcome-to-the-geminispace.html12
-rw-r--r--gemfeed/2021-05-16-personal-bash-coding-style-guide.html25
-rw-r--r--gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html22
-rw-r--r--gemfeed/2021-09-12-keep-it-simple-and-stupid.html45
-rw-r--r--gemfeed/2021-11-29-bash-golf-part-1.html16
-rw-r--r--gemfeed/2022-01-01-bash-golf-part-2.html15
-rw-r--r--gemfeed/2022-03-06-the-release-of-dtail-4.0.0.html21
-rw-r--r--gemfeed/2022-05-27-perl-is-still-a-great-choice.html13
-rw-r--r--gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.html22
-rw-r--r--gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.html17
-rw-r--r--gemfeed/2022-10-30-installing-dtail-on-openbsd.html18
-rw-r--r--gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.html14
-rw-r--r--gemfeed/2023-04-09-algorithms-and-data-structures-in-golang-part-1.html13
-rw-r--r--gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.html11
-rw-r--r--gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.html21
-rw-r--r--gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.html19
-rw-r--r--gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.html36
-rw-r--r--gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.html15
-rw-r--r--gemfeed/2023-09-25-dtail-usage-examples.html17
-rw-r--r--gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.html13
-rw-r--r--gemfeed/2023-11-11-mind-management-book-notes.html16
-rw-r--r--gemfeed/2023-12-10-bash-golf-part-3.html16
-rw-r--r--gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.html9
-rw-r--r--gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.html3
-rw-r--r--gemfeed/2024-05-01-slow-productivity-book-notes.html13
-rw-r--r--gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.html8
-rw-r--r--gemfeed/2024-07-07-the-stoic-challenge-book-notes.html10
-rw-r--r--gemfeed/2024-08-05-typing-127.1-words-per-minute.html32
-rw-r--r--gemfeed/atom.xml424
33 files changed, 921 insertions, 53 deletions
diff --git a/gemfeed/2008-06-26-perl-poetry.html b/gemfeed/2008-06-26-perl-poetry.html
index 8b70f76c..e348de4a 100644
--- a/gemfeed/2008-06-26-perl-poetry.html
+++ b/gemfeed/2008-06-26-perl-poetry.html
@@ -35,6 +35,18 @@ _~~|~/_|_|__/|~~~~~~~ | / ~~~~~ | | ~~~~~~~~
(__) (____)
</pre>
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#perl-poetry'>Perl Poetry</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#mathpl'>math.pl</a></li>
+<li>⇢ <a href='#christmaspl'>christmas.pl</a></li>
+<li>⇢ <a href='#shoppingpl'>shopping.pl</a></li>
+<li>⇢ <a href='#more'>More...</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>Here are some Perl Poems I wrote. They don&#39;t do anything useful when you run them, but they don&#39;t produce a compiler error either. They only exist for fun and demonstrate what you can do with Perl syntax.</span><br />
<br />
<span>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."</span><br />
diff --git a/gemfeed/2011-05-07-perl-daemon-service-framework.html b/gemfeed/2011-05-07-perl-daemon-service-framework.html
index 62b8b8a0..a7305094 100644
--- a/gemfeed/2011-05-07-perl-daemon-service-framework.html
+++ b/gemfeed/2011-05-07-perl-daemon-service-framework.html
@@ -19,6 +19,23 @@
//\ //\\ //\ //\\ //\ //\\jrei
</pre>
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#perl-daemon-service-framework'>Perl Daemon (Service Framework)</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#features'>Features</a></li>
+<li>⇢ <a href='#quick-guide'>Quick Guide</a></li>
+<li>⇢ <a href='#how-to-configure'>How to configure</a></li>
+<li>⇢ <a href='#example-'>Example </a></li>
+<li>⇢ <a href='#hires-event-loop'>HiRes event loop</a></li>
+<li>⇢ <a href='#writing-your-own-modules'>Writing your own modules</a></li>
+<li>⇢ ⇢ <a href='#example-module'>Example module</a></li>
+<li>⇢ ⇢ <a href='#your-own-module'>Your own module</a></li>
+<li>⇢ <a href='#may-the-source-be-with-you'>May the source be with you</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>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.</span><br />
<br />
<h2 style='display: inline' id='features'>Features</h2><br />
diff --git a/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html b/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html
index 62d6265b..77ab7e63 100644
--- a/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html
+++ b/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html
@@ -32,6 +32,18 @@
\ `.
</pre>
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#jails-and-zfs-with-puppet-on-freebsd'>Jails and ZFS with Puppet on FreeBSD</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#zfs'>ZFS</a></li>
+<li>⇢ <a href='#jails'>Jails</a></li>
+<li>⇢ <a href='#inside-jail-puppet'>Inside-Jail Puppet</a></li>
+<li>⇢ <a href='#managing-multiple-jails'>Managing multiple Jails</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>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.</span><br />
<br />
<h2 style='display: inline' id='zfs'>ZFS</h2><br />
diff --git a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html
index 744dd1cd..0c377b1b 100644
--- a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html
+++ b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html
@@ -14,6 +14,23 @@
<br />
<a href='./dtail-the-distributed-log-tail-program/title.png'><img alt='DTail logo image' title='DTail logo image' src='./dtail-the-distributed-log-tail-program/title.png' /></a><br />
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#dtail---the-distributed-log-tail-program'>DTail - The distributed log tail program</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#a-mimecast-pet-project'>A Mimecast Pet Project</a></li>
+<li>⇢ <a href='#differentiating-from-log-management-systems'>Differentiating from log management systems</a></li>
+<li>⇢ <a href='#combining-simplicity-security-and-efficiency'>Combining simplicity, security and efficiency</a></li>
+<li>⇢ <a href='#the-dtail-family-of-commands'>The DTail family of commands</a></li>
+<li>⇢ <a href='#usage-example'>Usage example</a></li>
+<li>⇢ <a href='#fitting-it-in'>Fitting it in</a></li>
+<li>⇢ <a href='#advanced-features'>Advanced features</a></li>
+<li>⇢ <a href='#for-the-future'>For the future</a></li>
+<li>⇢ <a href='#open-source'>Open Source</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>This article first appeared at the Mimecast Engineering Blog but I made it available here in my personal internet site too.</span><br />
<br />
<a class='textlink' href='https://medium.com/mimecast-engineering/dtail-the-distributed-log-tail-program-79b8087904bb'>Original Mimecast Engineering Blog post at Medium</a><br />
diff --git a/gemfeed/2021-04-24-welcome-to-the-geminispace.html b/gemfeed/2021-04-24-welcome-to-the-geminispace.html
index 07a172fd..ce6cbddc 100644
--- a/gemfeed/2021-04-24-welcome-to-the-geminispace.html
+++ b/gemfeed/2021-04-24-welcome-to-the-geminispace.html
@@ -39,6 +39,18 @@
</pre>
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#welcome-to-the-geminispace'>Welcome to the Geminispace</a></li>
+<li>⇢ <a href='#motivation'>Motivation</a></li>
+<li>⇢ ⇢ <a href='#my-urge-to-revamp-my-personal-website'>My urge to revamp my personal website</a></li>
+<li>⇢ ⇢ <a href='#my-still-great-laptop-running-hot'>My still great Laptop running hot</a></li>
+<li>⇢ <a href='#discovering-the-gemini-internet-protocol'>Discovering the Gemini internet protocol</a></li>
+<li>⇢ <a href='#my-own-gemini-capsule'>My own Gemini capsule</a></li>
+<li>⇢ <a href='#gemini-advantages-summarised'>Gemini advantages summarised</a></li>
+<li>⇢ <a href='#dive-into-deep-gemini-space'>Dive into deep Gemini space</a></li>
+</ul><br />
<h2 style='display: inline' id='motivation'>Motivation</h2><br />
<br />
<h3 style='display: inline' id='my-urge-to-revamp-my-personal-website'>My urge to revamp my personal website</h3><br />
diff --git a/gemfeed/2021-05-16-personal-bash-coding-style-guide.html b/gemfeed/2021-05-16-personal-bash-coding-style-guide.html
index 22593a8c..c11d5840 100644
--- a/gemfeed/2021-05-16-personal-bash-coding-style-guide.html
+++ b/gemfeed/2021-05-16-personal-bash-coding-style-guide.html
@@ -25,6 +25,31 @@
"\__/"---------------"\__/"-+---+&#39;
</pre>
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#personal-bash-coding-style-guide'>Personal Bash coding style guide</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#my-modifications'>My modifications</a></li>
+<li>⇢ ⇢ <a href='#shebang'>Shebang</a></li>
+<li>⇢ ⇢ <a href='#two-space-soft-tabs-indentation'>Two space soft-tabs indentation</a></li>
+<li>⇢ ⇢ <a href='#breaking-long-pipes'>Breaking long pipes</a></li>
+<li>⇢ ⇢ <a href='#quoting-your-variables'>Quoting your variables</a></li>
+<li>⇢ ⇢ <a href='#prefer-built-in-commands-over-external-commands'>Prefer built-in commands over external commands</a></li>
+<li>⇢ <a href='#my-additions'>My additions</a></li>
+<li>⇢ ⇢ <a href='#use-of-yes-and-no'>Use of &#39;yes&#39; and &#39;no&#39;</a></li>
+<li>⇢ ⇢ <a href='#non-evil-alternative-to-variable-assignments-via-eval'>Non-evil alternative to variable assignments via eval</a></li>
+<li>⇢ ⇢ <a href='#prefer-pipes-over-arrays-for-list-processing'>Prefer pipes over arrays for list processing</a></li>
+<li>⇢ ⇢ <a href='#assign-then-shift'>Assign-then-shift</a></li>
+<li>⇢ ⇢ <a href='#paranoid-mode'>Paranoid mode</a></li>
+<li>⇢ <a href='#learned'>Learned</a></li>
+<li>⇢ ⇢ <a href='#unintended-lexicographical-comparison'>Unintended lexicographical comparison.</a></li>
+<li>⇢ ⇢ <a href='#pipestatus'>PIPESTATUS</a></li>
+<li>⇢ <a href='#use-common-sense-and-be-consistent'>Use common sense and BE CONSISTENT.</a></li>
+<li>⇢ <a href='#advanced-bash-learning-pro-tip'>Advanced Bash learning pro tip</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>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. </span><br />
<br />
<a class='textlink' href='https://google.github.io/styleguide/shellguide.html'>Google Shell Style Guide</a><br />
diff --git a/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html b/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html
index a618aee1..8a2b6f0a 100644
--- a/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html
+++ b/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html
@@ -53,11 +53,31 @@
`+a:f:......jrei&#39;&#39;&#39;
</pre>
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#gemtexter---one-bash-script-to-rule-it-all'>Gemtexter - One Bash script to rule it all</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ ⇢ <a href='#motivation'>Motivation</a></li>
+<li>⇢ <a href='#output-formats'>Output formats</a></li>
+<li>⇢ <a href='#taking-it-as-far-as-i-should-but-no-farther'>Taking it as far as I should, but no farther</a></li>
+<li>⇢ ⇢ <a href='#modularization-'>Modularization </a></li>
+<li>⇢ ⇢ <a href='#bash-best-practises-and-shellcheck'>Bash best practises and ShellCheck</a></li>
+<li>⇢ ⇢ <a href='#unit-testing'>Unit testing</a></li>
+<li>⇢ ⇢ <a href='#html-unit-test-example'>HTML unit test example</a></li>
+<li>⇢ ⇢ <a href='#markdown-unit-test-example'>Markdown unit test example</a></li>
+<li>⇢ <a href='#handcrafted-html-styles'>Handcrafted HTML styles</a></li>
+<li>⇢ <a href='#configurability'>Configurability</a></li>
+<li>⇢ <a href='#future-features'>Future features</a></li>
+<li>⇢ <a href='#conclusion'>Conclusion</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>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.</span><br />
<br />
<span>This comes with the benefit that I can write content in my favourite text editor (Vim). </span><br />
<br />
-<h2 style='display: inline' id='motivation'>Motivation</h2><br />
+<h3 style='display: inline' id='motivation'>Motivation</h3><br />
<br />
<span>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.</span><br />
<br />
diff --git a/gemfeed/2021-09-12-keep-it-simple-and-stupid.html b/gemfeed/2021-09-12-keep-it-simple-and-stupid.html
index 27c15bb4..fcd4c997 100644
--- a/gemfeed/2021-09-12-keep-it-simple-and-stupid.html
+++ b/gemfeed/2021-09-12-keep-it-simple-and-stupid.html
@@ -27,25 +27,46 @@
-------------------- --------------------
</pre>
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#keep-it-simple-and-stupid'>Keep it simple and stupid</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#need-faster-hardware'>Need faster hardware</a></li>
+<li>⇢ <a href='#too-complex-to-be-replaced'>Too complex to be replaced</a></li>
+<li>⇢ ⇢ <a href='#on-cobol'>On COBOL</a></li>
+<li>⇢ ⇢ <a href='#on-kubernetes'>On Kubernetes</a></li>
+<li>⇢ ⇢ <a href='#the-younger-generation-of-it-professionals'>The younger generation of IT professionals</a></li>
+<li>⇢ <a href='#the-bloated-web'>The bloated web</a></li>
+<li>⇢ <a href='#fancy-log-management-solutions'>Fancy log-management solutions</a></li>
+<li>⇢ <a href='#more-kiss'>More KISS</a></li>
+<li>⇢ ⇢ <a href='#the-adslowbe-pdf-reader'>The Adslowbe PDF Reader</a></li>
+<li>⇢ ⇢ <a href='#the-power-of-plain-text-files'>The power of plain text files</a></li>
+<li>⇢ ⇢ <a href='#kiss-for-programmers'>KISS for programmers</a></li>
+<li>⇢ <a href='#when-kiss-is-not-kiss-anymore'>When KISS is not KISS anymore</a></li>
+<li>⇢ <a href='#other-relevant-readings'>Other relevant readings</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>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&#39;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&#39;s going on.</span><br />
<br />
-<h1 style='display: inline' id='need-faster-hardware'>Need faster hardware</h1><br />
+<h2 style='display: inline' id='need-faster-hardware'>Need faster hardware</h2><br />
<br />
<span>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&#39;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.</span><br />
<br />
-<h1 style='display: inline' id='too-complex-to-be-replaced'>Too complex to be replaced</h1><br />
+<h2 style='display: inline' id='too-complex-to-be-replaced'>Too complex to be replaced</h2><br />
<br />
-<h2 style='display: inline' id='on-cobol'>On COBOL</h2><br />
+<h3 style='display: inline' id='on-cobol'>On COBOL</h3><br />
<br />
<span>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&#39;s just too scary to write everything from scratch. There&#39;s too much COBOL code out there that can&#39;t be replaced from today to tomorrow. </span><br />
<br />
<a class='textlink' href='https://nymag.com/intelligencer/2020/04/what-is-cobol-what-does-it-have-to-do-with-the-coronavirus.html'>https://nymag.com/intelligencer/2020/04/what-is-cobol-what-does-it-have-to-do-with-the-coronavirus.html</a><br />
<br />
-<h2 style='display: inline' id='on-kubernetes'>On Kubernetes</h2><br />
+<h3 style='display: inline' id='on-kubernetes'>On Kubernetes</h3><br />
<br />
<span>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 &#39;cloud native&#39; 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.</span><br />
<br />
-<h2 style='display: inline' id='the-younger-generation-of-it-professionals'>The younger generation of IT professionals</h2><br />
+<h3 style='display: inline' id='the-younger-generation-of-it-professionals'>The younger generation of IT professionals</h3><br />
<br />
<span>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&#39;t make it easier. </span><br />
<br />
@@ -61,7 +82,7 @@
<br />
<a class='textlink' href='https://christine.website/blog/theres-a-node-2021-10-02'>https://christine.website/blog/theres-a-node-2021-10-02</a><br />
<br />
-<h1 style='display: inline' id='the-bloated-web'>The bloated web</h1><br />
+<h2 style='display: inline' id='the-bloated-web'>The bloated web</h2><br />
<br />
<span>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&#39;t know what Gemini is and don&#39;t have any compatible software installed for surfing the Geminispace:</span><br />
<br />
@@ -69,7 +90,7 @@
<br />
<span>The Gemtext protocol is KISS. There&#39;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&#39;s no way to create bloated Gemini sites, and due to its limited capabilities, there&#39;s also no way to commercialise it (e.g. there&#39;s no good way to track the site visitors as things like cookies don&#39;t exist). By design, the Gemini protocol can&#39;t be extended, so there is no chance to abuse it even in the future. Gemini sites will stay KISS forever, and there won&#39;t be any fancy HTML/JavaScript frameworks like we see on the modern web.</span><br />
<br />
-<h1 style='display: inline' id='fancy-log-management-solutions'>Fancy log-management solutions</h1><br />
+<h2 style='display: inline' id='fancy-log-management-solutions'>Fancy log-management solutions</h2><br />
<br />
<span>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&#39;s not just me). The reduced complexity of DTail also makes it more robust against outages. You won&#39;t troubleshoot your distributed application very well if the log management infrastructure isn&#39;t working either.</span><br />
<br />
@@ -77,23 +98,23 @@
<br />
<span>I don&#39;t say that the ELK stack doesn&#39;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. </span><br />
<br />
-<h1 style='display: inline' id='more-kiss'>More KISS</h1><br />
+<h2 style='display: inline' id='more-kiss'>More KISS</h2><br />
<br />
-<h2 style='display: inline' id='the-adslowbe-pdf-reader'>The Adslowbe PDF Reader</h2><br />
+<h3 style='display: inline' id='the-adslowbe-pdf-reader'>The Adslowbe PDF Reader</h3><br />
<br />
<span>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&#39;s reader is like this is featuritis, and 90% of the users don&#39;t use 90% of all available features. Less is more; keep it simple and stupid. </span><br />
<br />
-<h2 style='display: inline' id='the-power-of-plain-text-files'>The power of plain text files</h2><br />
+<h3 style='display: inline' id='the-power-of-plain-text-files'>The power of plain text files</h3><br />
<br />
<span>Speaking of file formats, never underestimate the power of plain text files. Plain text files don&#39;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&#39;t be able to read such an old version of an Adobe Photoshop image file if the software required for reading that format isn&#39;t supported anymore and doesn&#39;t run anymore on modern computers.</span><br />
<br />
-<h2 style='display: inline' id='kiss-for-programmers'>KISS for programmers</h2><br />
+<h3 style='display: inline' id='kiss-for-programmers'>KISS for programmers</h3><br />
<br />
<span>Not to mention, keeping things simple and stupid also reduces the potential malicious attack surface. It&#39;s not just about the software and services you use and operate. It&#39;s also about the software you write. Here is a nice article about the KISS principle in software development:</span><br />
<br />
<a class='textlink' href='https://thevaluable.dev/kiss-principle-explained/'>https://thevaluable.dev/kiss-principle-explained/</a><br />
<br />
-<h1 style='display: inline' id='when-kiss-is-not-kiss-anymore'>When KISS is not KISS anymore</h1><br />
+<h2 style='display: inline' id='when-kiss-is-not-kiss-anymore'>When KISS is not KISS anymore</h2><br />
<br />
<span>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&#39;t even notice it until it is too late.</span><br />
<br />
diff --git a/gemfeed/2021-11-29-bash-golf-part-1.html b/gemfeed/2021-11-29-bash-golf-part-1.html
index ef00e6f4..7780b159 100644
--- a/gemfeed/2021-11-29-bash-golf-part-1.html
+++ b/gemfeed/2021-11-29-bash-golf-part-1.html
@@ -23,6 +23,22 @@ jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Art by Joan Stark
</pre>
<br />
+<h2 style='display: inline' id='table-of-contents'>Table of Contents</h2><br />
+<br />
+<ul>
+<li><a href='#bash-golf-part-1'>Bash Golf Part 1</a></li>
+<li>⇢ <a href='#introduction'>Introduction</a></li>
+<li>⇢ <a href='#tcpip-networking'>TCP/IP networking</a></li>
+<li>⇢ <a href='#process-substitution'>Process substitution</a></li>
+<li>⇢ <a href='#grouping'>Grouping</a></li>
+<li>⇢ <a href='#expansions'>Expansions</a></li>
+<li>⇢ <a href='#--aka-stdin-and-stdout-placeholder'>- aka stdin and stdout placeholder</a></li>
+<li>⇢ <a href='#alternative-argument-passing'>Alternative argument passing</a></li>
+<li>⇢ <a href='#-aka-the-null-command'>: aka the null command</a></li>
+<li>⇢ <a href='#no-floating-point-support'>(No) floating point support</a></li>
+</ul><br />
+<h2 style='display: inline' id='introduction'>Introduction</h2><br />
+<br />
<span>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&#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 (You are currently reading this)</a><br />
diff --git a/gemfeed/2022-01-01-bash-golf-part-2.html b/gemfeed/2022-01-01-bash-golf-part-2.html
index 978b9ef8..24e1f75c 100644
--- a/gemfeed/2022-01-01-bash-golf-part-2.html
+++ b/gemfeed/2022-01-01-bash-golf-part-2.html
@@ -23,6 +23,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/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.html b/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.html
index 63d1aa60..7da78520 100644
--- a/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.html
+++ b/gemfeed/2022-03-06-th