summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Bash Golf/style-override.css0
-rw-r--r--about/resources.html204
-rw-r--r--gemfeed/2021-05-16-personal-bash-coding-style-guide.html1
-rw-r--r--gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html1
-rw-r--r--gemfeed/2021-11-29-bash-golf-part-1.html2
-rw-r--r--gemfeed/2022-01-01-bash-golf-part-2.html2
-rw-r--r--gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.html1
-rw-r--r--gemfeed/2023-12-10-bash-golf-part-3.html2
-rw-r--r--gemfeed/2024-01-13-one-reason-why-i-love-openbsd.html2
-rw-r--r--gemfeed/2024-08-05-typing-127.1-words-per-minute.html2
-rw-r--r--gemfeed/2025-09-14-bash-golf-part-4.html662
-rw-r--r--gemfeed/atom.xml962
-rw-r--r--gemfeed/index.html1
-rw-r--r--index.html3
-rw-r--r--uptime-stats.html2
15 files changed, 1440 insertions, 407 deletions
diff --git a/Bash Golf/style-override.css b/Bash Golf/style-override.css
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/Bash Golf/style-override.css
diff --git a/about/resources.html b/about/resources.html
index 0155cb99..bd943e47 100644
--- a/about/resources.html
+++ b/about/resources.html
@@ -50,108 +50,108 @@
<span>In random order:</span><br />
<br />
<ul>
+<li>Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers </li>
+<li>Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O&#39;Reilly</li>
+<li>Developing Games in Java; David Brackeen and others...; New Riders</li>
+<li>Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt </li>
+<li>Concurrency in Go; Katherine Cox-Buday; O&#39;Reilly</li>
+<li>Clusterbau mit Linux-HA; Michael Schwartzkopff; O&#39;Reilly</li>
+<li>Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall &amp; Jon Orwant; O&#39;Reilly</li>
+<li>DNS and BIND; Cricket Liu; O&#39;Reilly</li>
+<li>Effective Java; Joshua Bloch; Addison-Wesley Professional</li>
+<li>Perl New Features; Joshua McAdams, brian d foy; Perl School</li>
+<li>Pro Puppet; James Turnbull, Jeffrey McCune; Apress</li>
+<li>The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible</li>
+<li>C++ Programming Language; Bjarne Stroustrup;</li>
+<li>Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson</li>
<li>The Kubernetes Book; Nigel Poulton; Unabridged Audiobook</li>
-<li>Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner</li>
-<li>Effective awk programming; Arnold Robbins; O&#39;Reilly</li>
+<li>Raku Fundamentals; Moritz Lenz; Apress</li>
<li>Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press</li>
-<li>Raku Recipes; J.J. Merelo; Apress</li>
-<li>Polished Ruby Programming; Jeremy Evans; Packt Publishing</li>
+<li>Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications</li>
+<li>Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O&#39;Reilly</li>
+<li>Ultimate Go Notebook; Bill Kennedy</li>
+<li>The Pragmatic Programmer; David Thomas; Addison-Wesley</li>
+<li>Java ist auch eine Insel; Christian Ullenboom; </li>
+<li>Funktionale Programmierung; Peter Pepper; Springer</li>
<li>Leanring eBPF; Liz Rice; O&#39;Reilly</li>
-<li>Site Reliability Engineering; How Google runs production systems; O&#39;Reilly</li>
-<li>Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press</li>
-<li>Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers</li>
-<li>Developing Games in Java; David Brackeen and others...; New Riders</li>
-<li>Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O&#39;Reilly</li>
<li>Programming Ruby 3.3 (5th Edition); Noel Rappin, with Dave Thomas; The Pragmatic Bookshelf</li>
+<li>Effective awk programming; Arnold Robbins; O&#39;Reilly</li>
<li>Systemprogrammierung in Go; Frank Müller; dpunkt</li>
-<li>The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton</li>
-<li>The Pragmatic Programmer; David Thomas; Addison-Wesley</li>
+<li>Raku Recipes; J.J. Merelo; Apress</li>
+<li>97 things every SRE should know; Emil Stolarsky, Jaime Woo; O&#39;Reilly</li>
<li>100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications</li>
-<li>Java ist auch eine Insel; Christian Ullenboom; </li>
-<li>Funktionale Programmierung; Peter Pepper; Springer</li>
-<li>21st Century C: C Tips from the New School; Ben Klemens; O&#39;Reilly</li>
-<li>The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional</li>
-<li>Clusterbau mit Linux-HA; Michael Schwartzkopff; O&#39;Reilly</li>
-<li>Effective Java; Joshua Bloch; Addison-Wesley Professional</li>
+<li>Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner</li>
+<li>Higher Order Perl; Mark Dominus; Morgan Kaufmann</li>
<li>Modern Perl; Chromatic ; Onyx Neon Press</li>
-<li>Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications</li>
-<li>Pro Puppet; James Turnbull, Jeffrey McCune; Apress</li>
-<li>97 things every SRE should know; Emil Stolarsky, Jaime Woo; O&#39;Reilly</li>
-<li>Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall &amp; Jon Orwant; O&#39;Reilly</li>
-<li>Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt </li>
+<li>Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers</li>
+<li>Data Science at the Command Line; Jeroen Janssens; O&#39;Reilly</li>
<li>Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O&#39;Reilly</li>
-<li>Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers </li>
-<li>DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible</li>
-<li>C++ Programming Language; Bjarne Stroustrup;</li>
-<li>Concurrency in Go; Katherine Cox-Buday; O&#39;Reilly</li>
+<li>The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional</li>
+<li>The Practise of System and Network Administration; Thomas A. Limoncelli, Christina J. Hogan, Strata R. Chalup; Addison-Wesley Professional Pro Git; Scott Chacon, Ben Straub; Apress</li>
<li>Terraform Cookbook; Mikael Krief; Packt Publishing</li>
-<li>The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible</li>
-<li>Raku Fundamentals; Moritz Lenz; Apress</li>
<li>The Docker Book; James Turnbull; Kindle</li>
-<li>Ultimate Go Notebook; Bill Kennedy</li>
-<li>Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson</li>
-<li>The Practise of System and Network Administration; Thomas A. Limoncelli, Christina J. Hogan, Strata R. Chalup; Addison-Wesley Professional Pro Git; Scott Chacon, Ben Straub; Apress</li>
-<li>Higher Order Perl; Mark Dominus; Morgan Kaufmann</li>
-<li>Data Science at the Command Line; Jeroen Janssens; O&#39;Reilly</li>
-<li>DNS and BIND; Cricket Liu; O&#39;Reilly</li>
-<li>Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O&#39;Reilly</li>
-<li>Perl New Features; Joshua McAdams, brian d foy; Perl School</li>
+<li>Site Reliability Engineering; How Google runs production systems; O&#39;Reilly</li>
+<li>21st Century C: C Tips from the New School; Ben Klemens; O&#39;Reilly</li>
+<li>Polished Ruby Programming; Jeremy Evans; Packt Publishing</li>
+<li>The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton</li>
+<li>DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible</li>
+<li>Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press</li>
</ul><br />
<h2 style='display: inline' id='technical-references'>Technical references</h2><br />
<br />
<span>I didn&#39;t read them from the beginning to the end, but I am using them to look up things. The books are in random order:</span><br />
<br />
<ul>
-<li>Groovy Kurz &amp; Gut; Joerg Staudemeier; O&#39;Reilly</li>
-<li>Relayd and Httpd Mastery; Michael W Lucas</li>
-<li>Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley</li>
-<li>Implementing Service Level Objectives; Alex Hidalgo; O&#39;Reilly</li>
<li>The Linux Programming Interface; Michael Kerrisk; No Starch Press </li>
-<li>BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley</li>
-<li>Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O&#39;Reilly</li>
+<li>Implementing Service Level Objectives; Alex Hidalgo; O&#39;Reilly</li>
+<li>Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley</li>
<li>Go: Design Patterns for Real-World Projects; Mat Ryer; Packt</li>
+<li>Groovy Kurz &amp; Gut; Joerg Staudemeier; O&#39;Reilly</li>
+<li>Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O&#39;Reilly</li>
+<li>BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley</li>
+<li>Relayd and Httpd Mastery; Michael W Lucas</li>
</ul><br />
<h2 style='display: inline' id='self-development-and-soft-skills-books'>Self-development and soft-skills books</h2><br />
<br />
<span>In random order:</span><br />
<br />
<ul>
-<li>Psycho-Cybernetics; Maxwell Maltz; Perigee Books</li>
-<li>The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon &amp; Schuster UK</li>
-<li>The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME)</li>
<li>Influence without Authority; A. Cohen, D. Bradford; Wiley</li>
-<li>Getting Things Done; David Allen</li>
-<li>The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd</li>
-<li>The Good Enough Job; Simone Stolzoff; Ebury Edge</li>
-<li>Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook</li>
-<li>Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing</li>
-<li>Eat That Frog!; Brian Tracy; Hodder Paperbacks</li>
-<li>Time Management for System Administrators; Thomas A. Limoncelli; O&#39;Reilly</li>
-<li>Solve for Happy; Mo Gawdat (RE-READ 1ST TIME)</li>
<li>The Bullet Journal Method; Ryder Carroll; Fourth Estate</li>
-<li>Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press</li>
-<li>Eat That Frog; Brian Tracy</li>
-<li>Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion</li>
-<li>So Good They Can&#39;t Ignore You; Cal Newport; Business Plus</li>
-<li>Digital Minimalism; Cal Newport; Portofolio Penguin</li>
-<li>101 Essays that change the way you think; Brianna Wiest; Audiobook</li>
+<li>Deep Work; Cal Newport; Piatkus</li>
+<li>Solve for Happy; Mo Gawdat (RE-READ 1ST TIME)</li>
<li>Staff Engineer: Leadership beyond the management track; Will Larson; Audiobook</li>
-<li>Ultralearning; Anna Laurent; Self-published via Amazon</li>
-<li>Ultralearning; Scott Young; Thorsons</li>
-<li>Slow Productivity; Cal Newport; Penguin Random House</li>
-<li>97 Things Every Engineering Manager Should Know; Camille Fournier; Audiobook</li>
<li>Soft Skills; John Sommez; Manning Publications</li>
-<li>Stop starting, start finishing; Arne Roock; Lean-Kanban University </li>
-<li>The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books</li>
-<li>The Power of Now; Eckhard Tolle; Yellow Kite</li>
-<li>The Complete Software Developer&#39;s Career Guide; John Sonmez; Unabridged Audiobook</li>
-<li>The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select</li>
-<li>Deep Work; Cal Newport; Piatkus</li>
+<li>Eat That Frog!; Brian Tracy; Hodder Paperbacks</li>
<li>Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne</li>
+<li>Time Management for System Administrators; Thomas A. Limoncelli; O&#39;Reilly</li>
+<li>The Good Enough Job; Simone Stolzoff; Ebury Edge</li>
+<li>Psycho-Cybernetics; Maxwell Maltz; Perigee Books</li>
+<li>The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd</li>
+<li>Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing</li>
+<li>The Off Switch; Mark Cropley; Virgin Books (RE-READ 1ST TIME)</li>
+<li>Ultralearning; Scott Young; Thorsons</li>
+<li>101 Essays that change the way you think; Brianna Wiest; Audiobook</li>
+<li>Meditation for Mortals, Oliver Burkeman, Audiobook</li>
<li>Never Split the Difference; Chris Voss, Tahl Raz; Random House Business</li>
<li>The Joy of Missing Out; Christina Crook; New Society Publishers</li>
+<li>97 Things Every Engineering Manager Should Know; Camille Fournier; Audiobook</li>
+<li>The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books</li>
+<li>Slow Productivity; Cal Newport; Penguin Random House</li>
+<li>The Complete Software Developer&#39;s Career Guide; John Sonmez; Unabridged Audiobook</li>
+<li>Stop starting, start finishing; Arne Roock; Lean-Kanban University </li>
+<li>So Good They Can&#39;t Ignore You; Cal Newport; Business Plus</li>
+<li>Coders at Work - Reflections on the craft of programming, Peter Seibel and Mitchell Dorian et al., Audiobook</li>
+<li>Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion</li>
+<li>Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press</li>
+<li>Ultralearning; Anna Laurent; Self-published via Amazon</li>
+<li>Digital Minimalism; Cal Newport; Portofolio Penguin</li>
<li>Atomic Habits; James Clear; Random House Business</li>
-<li>Meditation for Mortals, Oliver Burkeman, Audiobook</li>
+<li>The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select</li>
+<li>Eat That Frog; Brian Tracy</li>
+<li>The Power of Now; Eckhard Tolle; Yellow Kite</li>
+<li>The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon &amp; Schuster UK</li>
+<li>Getting Things Done; David Allen</li>
</ul><br />
<a class='textlink' href='../notes/index.html'>Here are notes of mine for some of the books</a><br />
<br />
@@ -160,31 +160,31 @@
<span>Some of these were in-person with exams; others were online learning lectures only. In random order:</span><br />
<br />
<ul>
+<li>Functional programming lecture; Remote University of Hagen</li>
<li>The Ultimate Kubernetes Bootcamp; School of Devops; O&#39;Reilly Online</li>
<li>Ultimate Go Programming; Bill Kennedy; O&#39;Reilly Online</li>
-<li>Red Hat Certified System Administrator; Course + certification (Although I had the option, I decided not to take the next course as it is more effective to self learn what I need)</li>
-<li>Scripting Vim; Damian Conway; O&#39;Reilly Online</li>
+<li>Apache Tomcat Best Practises; 3-day on-site training</li>
+<li>AWS Immersion Day; Amazon; 1-day interactive online training </li>
<li>Protocol buffers; O&#39;Reilly Online</li>
-<li>Linux Security and Isolation APIs Training; Michael Kerrisk; 3-day on-site training</li>
+<li>Red Hat Certified System Administrator; Course + certification (Although I had the option, I decided not to take the next course as it is more effective to self learn what I need)</li>
+<li>MySQL Deep Dive Workshop; 2-day on-site training</li>
<li>Structure and Interpretation of Computer Programs; Harold Abelson and more...; </li>
-<li>Apache Tomcat Best Practises; 3-day on-site training</li>
-<li>The Well-Grounded Rubyist Video Edition; David. A. Black; O&#39;Reilly Online</li>
-<li>Cloud Operations on AWS - Learn how to configure, deploy, maintain, and troubleshoot your AWS environments; 3-day online live training with labs; Amazon</li>
<li>F5 Loadbalancers Training; 2-day on-site training; F5, Inc. </li>
-<li>Algorithms Video Lectures; Robert Sedgewick; O&#39;Reilly Online</li>
-<li>Functional programming lecture; Remote University of Hagen</li>
-<li>MySQL Deep Dive Workshop; 2-day on-site training</li>
-<li>AWS Immersion Day; Amazon; 1-day interactive online training </li>
<li>Developing IaC with Terraform (with Live Lessons); O&#39;Reilly Online</li>
+<li>Algorithms Video Lectures; Robert Sedgewick; O&#39;Reilly Online</li>
+<li>Cloud Operations on AWS - Learn how to configure, deploy, maintain, and troubleshoot your AWS environments; 3-day online live training with labs; Amazon</li>
+<li>Scripting Vim; Damian Conway; O&#39;Reilly Online</li>
+<li>Linux Security and Isolation APIs Training; Michael Kerrisk; 3-day on-site training</li>
+<li>The Well-Grounded Rubyist Video Edition; David. A. Black; O&#39;Reilly Online</li>
</ul><br />
<h2 style='display: inline' id='technical-guides'>Technical guides</h2><br />
<br />
<span>These are not whole books, but guides (smaller or larger) which I found very useful. in random order:</span><br />
<br />
<ul>
-<li>Raku Guide at https://raku.guide </li>
<li>Advanced Bash-Scripting Guide </li>
<li>How CPUs work at https://cpu.land</li>
+<li>Raku Guide at https://raku.guide </li>
</ul><br />
<h2 style='display: inline' id='podcasts'>Podcasts</h2><br />
<br />
@@ -193,30 +193,30 @@
<span>In random order:</span><br />
<br />
<ul>
-<li>BSD Now [BSD]</li>
-<li>The ProdCast (Google SRE Podcast)</li>
-<li>Deep Questions with Cal Newport</li>
-<li>Backend Banter</li>
+<li>Fallthrough [Golang]</li>
<li>The Pragmatic Engineer Podcast</li>
+<li>Hidden Brain</li>
<li>Fork Around And Find Out</li>
-<li>Modern Mentor</li>
-<li>Maintainable</li>
<li>The Changelog Podcast(s)</li>
+<li>Maintainable</li>
+<li>The ProdCast (Google SRE Podcast)</li>
+<li>BSD Now [BSD]</li>
+<li>Pratical AI</li>
<li>Cup o&#39; Go [Golang]</li>
-<li>Fallthrough [Golang]</li>
-<li>Hidden Brain</li>
+<li>Backend Banter</li>
<li>Dev Interrupted</li>
-<li>Pratical AI</li>
+<li>Modern Mentor</li>
+<li>Deep Questions with Cal Newport</li>
</ul><br />
<h3 style='display: inline' id='podcasts-i-liked'>Podcasts I liked</h3><br />
<br />
<span>I liked them but am not listening to them anymore. The podcasts have either "finished" (no more episodes) or I stopped listening to them due to time constraints or a shift in my interests.</span><br />
<br />
<ul>
-<li>FLOSS weekly</li>
<li>Java Pub House</li>
-<li>Ship It (predecessor of Fork Around And Find Out)</li>
<li>Go Time (predecessor of fallthrough)</li>
+<li>FLOSS weekly</li>
+<li>Ship It (predecessor of Fork Around And Find Out)</li>
<li>CRE: Chaosradio Express [german]</li>
<li>Modern Mentor</li>
</ul><br />
@@ -225,28 +225,28 @@
<span>This is a mix of tech and non-tech newsletters I am subscribed to. In random order:</span><br />
<br />
<ul>
-<li>The Imperfectionist</li>
-<li>Andreas Brandhorst Newsletter (Sci-Fi author)</li>
-<li>Changelog News</li>
<li>Applied Go Weekly Newsletter</li>
-<li>Golang Weekly</li>
-<li>byteSizeGo</li>
+<li>VK Newsletter</li>
+<li>Changelog News</li>
<li>The Valuable Dev</li>
-<li>Ruby Weekly</li>
+<li>Golang Weekly</li>
<li>The Pragmatic Engineer</li>
-<li>Monospace Mentor</li>
<li>Register Spill</li>
-<li>VK Newsletter</li>
+<li>Ruby Weekly</li>
+<li>The Imperfectionist</li>
+<li>Monospace Mentor</li>
+<li>byteSizeGo</li>
+<li>Andreas Brandhorst Newsletter (Sci-Fi author)</li>
</ul><br />
<h2 style='display: inline' id='magazines-i-liked'>Magazines I like(d)</h2><br />
<br />
<span>This is a mix of tech I like(d). I may not be a current subscriber, but now and then, I buy an issue. In random order:</span><br />
<br />
<ul>
-<li>freeX (not published anymore)</li>
<li>Linux Magazine</li>
-<li>LWN (online only)</li>
<li>Linux User</li>
+<li>freeX (not published anymore)</li>
+<li>LWN (online only)</li>
</ul><br />
<h1 style='display: inline' id='formal-education'>Formal education</h1><br />
<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 04f6dced..3a832d5b 100644
--- a/gemfeed/2021-05-16-personal-bash-coding-style-guide.html
+++ b/gemfeed/2021-05-16-personal-bash-coding-style-guide.html
@@ -486,6 +486,7 @@ return_codes=( <font color="#808080">"${PIPESTATUS[@]}"</font> )
<br />
<span>Other related posts are:</span><br />
<br />
+<a class='textlink' href='./2025-09-14-bash-golf-part-4.html'>2025-09-14 Bash Golf Part 4</a><br />
<a class='textlink' href='./2023-12-10-bash-golf-part-3.html'>2023-12-10 Bash Golf Part 3</a><br />
<a class='textlink' href='./2022-01-01-bash-golf-part-2.html'>2022-01-01 Bash Golf Part 2</a><br />
<a class='textlink' href='./2021-11-29-bash-golf-part-1.html'>2021-11-29 Bash Golf Part 1</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 af062624..45f35835 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
@@ -208,6 +208,7 @@ assert::equals <font color="#808080">"$(generate::make_link md "</font>$gemtext<
<br />
<span>Other related posts are:</span><br />
<br />
+<a class='textlink' href='./2025-09-14-bash-golf-part-4.html'>2025-09-14 Bash Golf Part 4</a><br />
<a class='textlink' href='./2024-10-02-gemtexter-3.0.0-lets-gemtext-again-4.html'>2024-10-02 Gemtexter 3.0.0 - Let&#39;s Gemtext again⁴</a><br />
<a class='textlink' href='./2023-12-10-bash-golf-part-3.html'>2023-12-10 Bash Golf Part 3</a><br />
<a class='textlink' href='./2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.html'>2023-07-21 Gemtexter 2.1.0 - Let&#39;s Gemtext again³</a><br />
diff --git a/gemfeed/2021-11-29-bash-golf-part-1.html b/gemfeed/2021-11-29-bash-golf-part-1.html
index ed90e38d..22c38b78 100644
--- a/gemfeed/2021-11-29-bash-golf-part-1.html
+++ b/gemfeed/2021-11-29-bash-golf-part-1.html
@@ -20,6 +20,7 @@
<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 />
<a class='textlink' href='./2022-01-01-bash-golf-part-2.html'>2022-01-01 Bash Golf Part 2</a><br />
<a class='textlink' href='./2023-12-10-bash-golf-part-3.html'>2023-12-10 Bash Golf Part 3</a><br />
+<a class='textlink' href='./2025-09-14-bash-golf-part-4.html'>2025-09-14 Bash Golf Part 4</a><br />
<br />
<pre>
&#39;\ . . |&gt;18&gt;&gt;
@@ -494,6 +495,7 @@ bash: line 1: 1/10.0 : syntax error: invalid arithmetic operator (error token is
<br />
<span>Other related posts are:</span><br />
<br />
+<a class='textlink' href='./2025-09-14-bash-golf-part-4.html'>2025-09-14 Bash Golf Part 4</a><br />
<a class='textlink' href='./2023-12-10-bash-golf-part-3.html'>2023-12-10 Bash Golf Part 3</a><br />
<a class='textlink' href='./2022-01-01-bash-golf-part-2.html'>2022-01-01 Bash Golf Part 2</a><br />
<a class='textlink' href='./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 a1bee695..07335dbf 100644
--- a/gemfeed/2022-01-01-bash-golf-part-2.html
+++ b/gemfeed/2022-01-01-bash-golf-part-2.html
@@ -20,6 +20,7 @@
<a class='textlink' href='./2021-11-29-bash-golf-part-1.html'>2021-11-29 Bash Golf Part 1</a><br />
<a class='textlink' href='./2022-01-01-bash-golf-part-2.html'>2022-01-01 Bash Golf Part 2 (You are currently reading this)</a><br />
<a class='textlink' href='./2023-12-10-bash-golf-part-3.html'>2023-12-10 Bash Golf Part 3</a><br />
+<a class='textlink' href='./2025-09-14-bash-golf-part-4.html'>2025-09-14 Bash Golf Part 4</a><br />
<br />
<pre>
&#39;\ &#39;\ . . |&gt;18&gt;&gt;
@@ -513,6 +514,7 @@ PAUL:X:1000:1000:PAUL BUETOW:/HOME/PAUL:/BIN/BASH
<br />
<span>Other related posts are:</span><br />
<br />
+<a class='textlink' href='./2025-09-14-bash-golf-part-4.html'>2025-09-14 Bash Golf Part 4</a><br />
<a class='textlink' href='./2023-12-10-bash-golf-part-3.html'>2023-12-10 Bash Golf Part 3</a><br />
<a class='textlink' href='./2022-01-01-bash-golf-part-2.html'>2022-01-01 Bash Golf Part 2 (You are currently reading this)</a><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/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.html b/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.html
index 8112aafd..b67d90e4 100644
--- a/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.html
+++ b/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.html
@@ -293,6 +293,7 @@ blurs html index.html photos thumbs
<br />
<span>Other Bash and KISS-related posts are:</span><br />
<br />
+<a class='textlink' href='./2025-09-14-bash-golf-part-4.html'>2025-09-14 Bash Golf Part 4</a><br />
<a class='textlink' href='./2024-04-01-KISS-high-availability-with-OpenBSD.html'>2024-04-01 KISS high-availability with OpenBSD</a><br />
<a class='textlink' href='./2023-12-10-bash-golf-part-3.html'>2023-12-10 Bash Golf Part 3</a><br />
<a class='textlink' href='./2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.html'>2023-10-29 KISS static web photo albums with <span class='inlinecode'>photoalbum.sh</span> (You are currently reading this)</a><br />
diff --git a/gemfeed/2023-12-10-bash-golf-part-3.html b/gemfeed/2023-12-10-bash-golf-part-3.html
index eed46b1d..0b848821 100644
--- a/gemfeed/2023-12-10-bash-golf-part-3.html
+++ b/gemfeed/2023-12-10-bash-golf-part-3.html
@@ -20,6 +20,7 @@
<a class='textlink' href='./2021-11-29-bash-golf-part-1.html'>2021-11-29 Bash Golf Part 1</a><br />
<a class='textlink' href='./2022-01-01-bash-golf-part-2.html'>2022-01-01 Bash Golf Part 2</a><br />
<a class='textlink' href='./2023-12-10-bash-golf-part-3.html'>2023-12-10 Bash Golf Part 3 (You are currently reading this)</a><br />
+<a class='textlink' href='./2025-09-14-bash-golf-part-4.html'>2025-09-14 Bash Golf Part 4</a><br />
<br />
<pre>
&#39;\ &#39;\ &#39;\ . . |&gt;18&gt;&gt;
@@ -419,6 +420,7 @@ echo baz
<br />
<span>Other related posts are:</span><br />
<br />
+<a class='textlink' href='./2025-09-14-bash-golf-part-4.html'>2025-09-14 Bash Golf Part 4</a><br />
<a class='textlink' href='./2023-12-10-bash-golf-part-3.html'>2023-12-10 Bash Golf Part 3 (You are currently reading this)</a><br />
<a class='textlink' href='./2022-01-01-bash-golf-part-2.html'>2022-01-01 Bash Golf Part 2</a><br />
<a class='textlink' href='./2021-11-29-bash-golf-part-1.html'>2021-11-29 Bash Golf Part 1</a><br />
diff --git a/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.html b/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.html
index 662f6fe6..9981ab4b 100644
--- a/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.html
+++ b/gemfeed/2024-01-13-one-reason-why-i-love-openbsd.html
@@ -45,6 +45,8 @@ $ doas sysupgrade <i><font color="silver"># Update all binaries (including Kerne
<br />
<span><span class='inlinecode'>sysupgrade</span> downloaded and upgraded to the next release and rebooted the system. After the reboot, I run:</span><br />
<br />
+<span class='quote'>Note to myself: I have to undo the <span class='inlinecode'>/var/www</span> symlink before upgrading, and re-establishing the symlink afterwards again. This is due to disk space constraings on my setup!</span><br />
+<br />
<!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
diff --git a/gemfeed/2024-08-05-typing-127.1-words-per-minute.html b/gemfeed/2024-08-05-typing-127.1-words-per-minute.html
index 75cd382b..446a1ff3 100644
--- a/gemfeed/2024-08-05-typing-127.1-words-per-minute.html
+++ b/gemfeed/2024-08-05-typing-127.1-words-per-minute.html
@@ -230,7 +230,7 @@
<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 />
-<span class='quote'>Update 2025-02-22: I&#39;ve received my custom Kinesis Adv. 360 build with the Gateron Baby Kangaroo key switches. I am absolutely in love! I will keep my Gateron Brown versin around, though.</span><br />
+<span class='quote'>Update 2025-02-22: I&#39;ve received my custom Kinesis Adv. 360 build with the Gateron Baby Kangaroo key switches. I am absolutely in love! I will keep my Gateron Brown version around, though.</span><br />
<br />
<h2 style='display: inline' id='conclusion'>Conclusion</h2><br />
<br />
diff --git a/gemfeed/2025-09-14-bash-golf-part-4.html b/gemfeed/2025-09-14-bash-golf-part-4.html
new file mode 100644
index 00000000..457b15d8
--- /dev/null
+++ b/gemfeed/2025-09-14-bash-golf-part-4.html
@@ -0,0 +1,662 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Bash Golf Part 4</title>
+<link rel="shortcut icon" type="image/gif" href="/favicon.ico" />
+<link rel="stylesheet" href="../style.css" />
+<link rel="stylesheet" href="style-override.css" />
+</head>
+<body>
+<p class="header">
+<a href="https://foo.zone">Home</a> | <a href="https://codeberg.org/snonux/foo.zone/src/branch/content-md/gemfeed/2025-09-14-bash-golf-part-4.md">Markdown</a> | <a href="gemini://foo.zone/gemfeed/2025-09-14-bash-golf-part-4.gmi">Gemini</a>
+</p>
+<h1 style='display: inline' id='bash-golf-part-4'>Bash Golf Part 4</h1><br />
+<br />
+<span class='quote'>Published at 2025-09-13T12:04:03+03:00</span><br />
+<br />
+<span>This is the fourth blog post about my Bash Golf series. This series is random Bash tips, tricks, and weirdnesses I have encountered over time. </span><br />
+<br />
+<a class='textlink' href='./2021-11-29-bash-golf-part-1.html'>2021-11-29 Bash Golf Part 1</a><br />
+<a class='textlink' href='./2022-01-01-bash-golf-part-2.html'>2022-01-01 Bash Golf Part 2</a><br />
+<a class='textlink' href='./2023-12-10-bash-golf-part-3.html'>2023-12-10 Bash Golf Part 3</a><br />
+<a class='textlink' href='./2025-09-14-bash-golf-part-4.html'>2025-09-14 Bash Golf Part 4 (You are currently reading this)</a><br />
+<br />
+<pre>
+ &#39;\ &#39;\ &#39;\ &#39;\ . . |&gt;18&gt;&gt;
+ \ \ \ \ . &#39; . |
+ O&gt;&gt; O&gt;&gt; O&gt;&gt; O&gt;&gt; . &#39;o |
+ \ .\. .. .\. .. .\. .. . |
+ /\ . /\ . /\ . /\ . . |
+ / / . / / .&#39;. / / .&#39;. / / .&#39; . |
+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-4'>Bash Golf Part 4</a></li>
+<li>⇢ <a href='#split-pipelines-with-tee--process-substitution'>Split pipelines with tee + process substitution</a></li>
+<li>⇢ <a href='#heredocs-for-remote-sessions-and-their-gotchas'>Heredocs for remote sessions (and their gotchas)</a></li>
+<li>⇢ <a href='#namespacing-and-dynamic-dispatch-with-'>Namespacing and dynamic dispatch with <span class='inlinecode'>::</span></a></li>
+<li>⇢ <a href='#indirect-references-with-namerefs'>Indirect references with namerefs</a></li>
+<li>⇢ <a href='#function-declaration-forms'>Function declaration forms</a></li>
+<li>⇢ <a href='#chaining-function-calls-in-conditionals'>Chaining function calls in conditionals</a></li>
+<li>⇢ <a href='#grep-sed-awk-quickies'>Grep, sed, awk quickies</a></li>
+<li>⇢ <a href='#safe-xargs-with-nuls'>Safe xargs with NULs</a></li>
+<li>⇢ <a href='#efficient-file-to-variable-and-arrays'>Efficient file-to-variable and arrays</a></li>
+<li>⇢ <a href='#quick-password-generator'>Quick password generator</a></li>
+<li>⇢ <a href='#yes-for-automation'><span class='inlinecode'>yes</span> for automation</a></li>
+<li>⇢ <a href='#forcing-true-to-fail-and-vice-versa'>Forcing <span class='inlinecode'>true</span> to fail (and vice versa)</a></li>
+<li>⇢ <a href='#restricted-bash'>Restricted Bash</a></li>
+<li>⇢ <a href='#useless-use-of-cat-and-when-its-ok'>Useless use of cat (and when it’s ok)</a></li>
+<li>⇢ <a href='#atomic-locking-with-mkdir'>Atomic locking with <span class='inlinecode'>mkdir</span></a></li>
+<li>⇢ <a href='#smarter-globs-and-faster-find-exec'>Smarter globs and faster find-exec</a></li>
+</ul><br />
+<h2 style='display: inline' id='split-pipelines-with-tee--process-substitution'>Split pipelines with tee + process substitution</h2><br />
+<br />
+<span>Sometimes you want to fan out one stream to multiple consumers and still continue the original pipeline. <span class='inlinecode'>tee</span> plus process substitution does exactly that:</span><br />
+<br />
+<pre>
+somecommand \
+ | tee &gt;(command1) &gt;(command2) \
+ | command3
+</pre>
+<br />
+<span>All of <span class='inlinecode'>command1</span>, <span class='inlinecode'>command2</span>, and <span class='inlinecode'>command3</span> see the output of <span class='inlinecode'>somecommand</span>. Example:</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><b><u><font color="#000000">printf</font></u></b> <font color="#808080">'a</font>\n<font color="#808080">b</font>\n<font color="#808080">'</font> \
+ | tee &gt;(sed <font color="#808080">'s/.*/X:&amp;/; s/$/ :c1/'</font>) &gt;(tr a-z A-Z | sed <font color="#808080">'s/$/ :c2/'</font>) \
+ | sed <font color="#808080">'s/$/ :c3/'</font>
+</pre>
+<br />
+<span>Output:</span><br />
+<br />
+<pre>
+a :c3
+b :c3
+A :c2 :c3
+B :c2 :c3
+X:a :c1 :c3
+X:b :c1 :c3
+</pre>
+<br />
+<span>This relies on Bash process substitution (<span class='inlinecode'>&gt;(...)</span>). Make sure your shell is Bash and not a POSIX <span class='inlinecode'>/bin/sh</span>.</span><br />
+<br />
+<span>Example (fails under <span class='inlinecode'>dash</span>/POSIX sh):</span><br />
+<br />
+<!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre>/bin/sh -c <font color="#808080">'echo hi | tee &gt;(cat)'</font>
+<i><font color="silver"># /bin/sh: 1: Syntax error: "(" unexpected</font></i>
+</pre>
+<br />
+<span>Combine with <span class='inlinecode'>set -o pipefail</span> if failures in side branches should fail the whole pipeline.</span><br />
+<br />
+<span>Example:</span><br />