diff options
| -rw-r--r-- | about/resources.gmi | 172 | ||||
| -rw-r--r-- | gemfeed/2024-07-07-the-stoic-challenge-book-notes.gmi | 4 | ||||
| -rw-r--r-- | gemfeed/DRAFT-summary-for-202410-202411-202410.gmi | 311 | ||||
| -rw-r--r-- | gemfeed/DRAFT-summary-for-202410-202411-202410.gmi.tpl | 263 | ||||
| -rw-r--r-- | gemfeed/atom.xml | 1400 | ||||
| -rw-r--r-- | index.gmi | 2 | ||||
| -rw-r--r-- | notes/the-stoic-challenge.gmi | 4 | ||||
| -rw-r--r-- | uptime-stats.gmi | 2 |
8 files changed, 1367 insertions, 791 deletions
diff --git a/about/resources.gmi b/about/resources.gmi index 761cd98e..802af47b 100644 --- a/about/resources.gmi +++ b/about/resources.gmi @@ -35,99 +35,100 @@ You won't find any links on this site because, over time, the links will break. In random order: -* The Docker Book; James Turnbull; Kindle -* Ultimate Go Notebook; Bill Kennedy -* Effective awk programming; Arnold Robbins; O'Reilly * DNS and BIND; Cricket Liu; O'Reilly -* Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson +* Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly +* Higher Order Perl; Mark Dominus; Morgan Kaufmann * Concurrency in Go; Katherine Cox-Buday; O'Reilly +* 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 +* The Docker Book; James Turnbull; Kindle +* Systemprogrammierung in Go; Frank Müller; dpunkt +* The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional +* The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible * Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner -* Raku Recipes; J.J. Merelo; Apress -* The Pragmatic Programmer; David Thomas; Addison-Wesley -* Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers +* 21st Century C: C Tips from the New School; Ben Klemens; O'Reilly +* Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press +* The Kubernetes Book; Nigel Poulton; Unabridged Audiobook +* Distributed Systems: Principles and Paradigms; Andrew S. Tanenbaum; Pearson +* Effective Java; Joshua Bloch; Addison-Wesley Professional +* Ultimate Go Notebook; Bill Kennedy * DevOps And Site Reliability Engineering Handbook; Stephen Fleming; Audible -* Systems Performance Tuning; Gian-Paolo D. Musumeci and others...; O'Reilly -* The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton * Terraform Cookbook; Mikael Krief; Packt Publishing -* The Kubernetes Book; Nigel Poulton; Unabridged Audiobook +* Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications +* Funktionale Programmierung; Peter Pepper; Springer +* Effective awk programming; Arnold Robbins; O'Reilly * Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly -* Data Science at the Command Line; Jeroen Janssens; O'Reilly -* Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt -* C++ Programming Language; Bjarne Stroustrup; -* Java ist auch eine Insel; Christian Ullenboom; -* Systemprogrammierung in Go; Frank Müller; dpunkt -* Higher Order Perl; Mark Dominus; Morgan Kaufmann -* 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 -* Effective Java; Joshua Bloch; Addison-Wesley Professional +* 100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications +* Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly * Pro Puppet; James Turnbull, Jeffrey McCune; Apress -* Polished Ruby Programming; Jeremy Evans; Packt Publishing +* The Pragmatic Programmer; David Thomas; Addison-Wesley +* The KCNA (Kubernetes and Cloud Native Associate) Book; Nigel Poulton * Tmux 2: Productive Mouse-free Development; Brain P. Hogan; The Pragmatic Programmers -* Amazon Web Services in Action; Michael Wittig and Andreas Wittig; Manning Publications +* Polished Ruby Programming; Jeremy Evans; Packt Publishing * 97 things every SRE should know; Emil Stolarsky, Jaime Woo; O'Reilly +* Java ist auch eine Insel; Christian Ullenboom; +* Leanring eBPF; Liz Rice; O'Reilly +* Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly +* Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press * Kubernetes Cookbook; Sameer Naik, Sébastien Goasguen, Jonathan Michaux; O'Reilly -* Learn You Some Erlang for Great Good; Fred Herbert; No Starch Press -* Developing Games in Java; David Brackeen and others...; New Riders -* 21st Century C: C Tips from the New School; Ben Klemens; O'Reilly * Raku Fundamentals; Moritz Lenz; Apress -* Clusterbau mit Linux-HA; Michael Schwartzkopff; O'Reilly -* Site Reliability Engineering; How Google runs production systems; O'Reilly -* The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional -* 100 Go Mistakes and How to Avoid Them; Teiva Harsanyi; Manning Publications -* The DevOps Handbook; Gene Kim, Jez Humble, Patrick Debois, John Willis; Audible -* Leanring eBPF; Liz Rice; O'Reilly -* Funktionale Programmierung; Peter Pepper; Springer +* Raku Recipes; J.J. Merelo; Apress +* C++ Programming Language; Bjarne Stroustrup; +* Go Brain Teasers - Exercise Your Mind; Miki Tebeka; The Pragmatic Programmers * Modern Perl; Chromatic ; Onyx Neon Press +* Hands-on Infrastructure Monitoring with Prometheus; Joel Bastos, Pedro Araujo; Packt +* Site Reliability Engineering; How Google runs production systems; O'Reilly +* Developing Games in Java; David Brackeen and others...; New Riders +* Data Science at the Command Line; Jeroen Janssens; O'Reilly * Perl New Features; Joshua McAdams, brian d foy; Perl School -* Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly -* Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press ## Technical references I didn't read them from the beginning to the end, but I am using them to look up things. The books are in random order: -* The Linux Programming Interface; Michael Kerrisk; No Starch Press -* BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley -* Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley -* Groovy Kurz & Gut; Joerg Staudemeier; O'Reilly -* Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly * Relayd and Httpd Mastery; Michael W Lucas +* Groovy Kurz & Gut; Joerg Staudemeier; O'Reilly +* Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley +* BPF Performance Tools - Linux System and Application Observability, Brendan Gregg; Addison Wesley +* The Linux Programming Interface; Michael Kerrisk; No Starch Press * Implementing Service Level Objectives; Alex Hidalgo; O'Reilly +* Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly ## Self-development and soft-skills books In random order: -* The Off Switch; Mark Cropley; Virgin Books -* Deep Work; Cal Newport; Piatkus -* Soft Skills; John Sommez; Manning Publications -* So Good They Can't Ignore You; Cal Newport; Business Plus -* The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books -* 101 Essays that change the way you think; Brianna Wiest; Audible -* Eat That Frog; Brian Tracy -* Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne -* The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook -* Psycho-Cybernetics; Maxwell Maltz; Perigee Books -* Staff Engineer: Leadership beyond the management track; Will Larson; Audible -* The Power of Now; Eckhard Tolle; Yellow Kite -* Eat That Frog!; Brian Tracy; Hodder Paperbacks -* Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly -* Atomic Habits; James Clear; Random House Business -* The Bullet Journal Method; Ryder Carroll; Fourth Estate -* Never Split the Difference; Chris Voss, Tahl Raz; Random House Business +* Slow Productivity; Cal Newport; Penguin Random House +* Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing * The Obstacle Is The Way; Ryan Holiday; Profile Books Ltd -* Influence without Authority; A. Cohen, D. Bradford; Wiley -* The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select +* Never Split the Difference; Chris Voss, Tahl Raz; Random House Business * The Good Enough Job; Simone Stolzoff; Ebury Edge -* Ultralearning; Scott Young; Thorsons -* Slow Productivity; Cal Newport; Penguin Random House -* The Joy of Missing Out; Christina Crook; New Society Publishers +* Solve for Happy; Mo Gawdat +* Psycho-Cybernetics; Maxwell Maltz; Perigee Books +* Atomic Habits; James Clear; Random House Business * Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion -* Digital Minimalism; Cal Newport; Portofolio Penguin -* Buddah and Einstein walk into a Bar; Guy Joseph Ale, Claire Bloom; Blackstone Publishing -* Ultralearning; Anna Laurent; Self-published via Amazon +* The Joy of Missing Out; Christina Crook; New Society Publishers +* Ultralearning; Scott Young; Thorsons +* Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly +* The Power of Now; Eckhard Tolle; Yellow Kite * Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press +* Eat That Frog!; Brian Tracy; Hodder Paperbacks +* Influence without Authority; A. Cohen, D. Bradford; Wiley +* 101 Essays that change the way you think; Brianna Wiest; Audible * The 7 Habits Of Highly Effective People; Stephen R. Covey; Simon & Schuster UK +* The Complete Software Developer's Career Guide; John Sonmez; Unabridged Audiobook +* Ultralearning; Anna Laurent; Self-published via Amazon * Stop starting, start finishing; Arne Roock; Lean-Kanban University +* Search Inside Yourself - The Unexpected path to Achieving Success, Happiness (and World Peace); Chade-Meng Tan, Daniel Goleman, Jon Kabat-Zinn; HarperOne +* Soft Skills; John Sommez; Manning Publications +* So Good They Can't Ignore You; Cal Newport; Business Plus +* The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books +* The Phoenix Project - A Novel About IT, DevOps, and Helping your Business Win; Gene Kim and Kevin Behr; Trade Select +* Staff Engineer: Leadership beyond the management track; Will Larson; Audible +* Deep Work; Cal Newport; Piatkus +* The Off Switch; Mark Cropley; Virgin Books +* The Bullet Journal Method; Ryder Carroll; Fourth Estate +* Eat That Frog; Brian Tracy +* Digital Minimalism; Cal Newport; Portofolio Penguin => ../notes/index.gmi Here are notes of mine for some of the books @@ -135,21 +136,21 @@ In random order: Some of these were in-person with exams; others were online learning lectures only. In random order: +* Ultimate Go Programming; Bill Kennedy; O'Reilly Online * AWS Immersion Day; Amazon; 1-day interactive online training * Cloud Operations on AWS - Learn how to configure, deploy, maintain, and troubleshoot your AWS environments; 3-day online live training with labs; Amazon -* Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online -* The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online -* Scripting Vim; Damian Conway; O'Reilly Online * 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) -* Functional programming lecture; Remote University of Hagen * Structure and Interpretation of Computer Programs; Harold Abelson and more...; -* F5 Loadbalancers Training; 2-day on-site training; F5, Inc. +* Scripting Vim; Damian Conway; O'Reilly Online * Linux Security and Isolation APIs Training; Michael Kerrisk; 3-day on-site training -* The Well-Grounded Rubyist Video Edition; David. A. Black; O'Reilly Online -* MySQL Deep Dive Workshop; 2-day on-site training +* The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online +* Functional programming lecture; Remote University of Hagen * Developing IaC with Terraform (with Live Lessons); O'Reilly Online +* Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online * Protocol buffers; O'Reilly Online -* Ultimate Go Programming; Bill Kennedy; O'Reilly Online +* MySQL Deep Dive Workshop; 2-day on-site training +* The Well-Grounded Rubyist Video Edition; David. A. Black; O'Reilly Online +* F5 Loadbalancers Training; 2-day on-site training; F5, Inc. * Apache Tomcat Best Practises; 3-day on-site training ## Technical guides @@ -166,43 +167,44 @@ These are not whole books, but guides (smaller or larger) which I found very use In random order: -* Dev Interrupted -* The ProdCast (Google SRE Podcast) -* Deep Questions with Cal Newport +* Backend Banter * Maintainable +* The ProdCast (Google SRE Podcast) * Fallthrough [Golang] * Cup o' Go [Golang] -* The Pragmatic Engineer Podcast -* Backend Banter -* Fork Around And Find Out * Hidden Brain * The Changelog Podcast(s) +* Deep Questions with Cal Newport +* Dev Interrupted +* Fork Around And Find Out +* The Pragmatic Engineer Podcast ### Podcasts I liked 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. -* Modern Mentor * FLOSS weekly -* Go Time (predecessor of fallthrough) +* Modern Mentor * Ship It (predecessor of Fork Around And Find Out) -* Java Pub House * CRE: Chaosradio Express [german] +* Java Pub House +* Go Time (predecessor of fallthrough) ## Newsletters I like This is a mix of tech and non-tech newsletters I am subscribed to. In random order: -* Monospace Mentor -* Golang Weekly +* Applied Go Weekly Newsletter +* The Imperfectionist +* The Prgagmatic Engineer * byteSizeGo * Ruby Weekly -* The Imperfectionist -* VK Newsletter -* The Valuable Dev * Changelog News * Andreas Brandhorst Newsletter (Sci-Fi author) -* Applied Go Weekly Newsletter +* The Valuable Dev +* Monospace Mentor +* VK Newsletter +* Golang Weekly * Register Spill # Formal education 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 020bdecc..80fd0118 100644 --- a/gemfeed/2024-07-07-the-stoic-challenge-book-notes.gmi +++ b/gemfeed/2024-07-07-the-stoic-challenge-book-notes.gmi @@ -19,11 +19,11 @@ These are my personal takeaways after reading "The Stoic Challenge: A Philosoph ## Table of Contents * ⇢ "The Stoic Challenge" book notes -* ⇢ ⇢ Got sets you up for a challenge +* ⇢ ⇢ God sets you up for a challenge * ⇢ ⇢ Negative visualization * ⇢ ⇢ Oh, nice trick, you stoic "god"! ;-) -## Got sets you up for a challenge +## God sets you up for a challenge Gods set you up for a challenge to see how resilient you are. Is getting angry worth the price? If you stay calm then you can find the optimal workaround for the obstacle. Stay calm even with big setbacks. Practice minimalism of negative emotions. diff --git a/gemfeed/DRAFT-summary-for-202410-202411-202410.gmi b/gemfeed/DRAFT-summary-for-202410-202411-202410.gmi new file mode 100644 index 00000000..9612612a --- /dev/null +++ b/gemfeed/DRAFT-summary-for-202410-202411-202410.gmi @@ -0,0 +1,311 @@ +# Summary for 202410 202411 202412 + +## Table of Contents + +* ⇢ Summary for 202410 202411 202412 +* ⇢ ⇢ October 2024 +* ⇢ ⇢ ⇢ First on-call experience in a startup. Doesn't ... +* ⇢ ⇢ ⇢ Reviewing your own PR or MR before asking ... +* ⇢ ⇢ ⇢ Fun with defer in ` ⇢golang`, I did't know, that ... +* ⇢ ⇢ ⇢ I have been in incidents. Understandably, ... +* ⇢ ⇢ ⇢ Little tips using strings in ` ⇢golang` and I ... +* ⇢ ⇢ ⇢ Reading this post about ` ⇢rust` (especially the ... +* ⇢ ⇢ ⇢ The opposite of ` ⇢ChaosMonkey` ... ... +* ⇢ ⇢ November 2024 +* ⇢ ⇢ ⇢ I just became a Silver Patreon for OSnews. What ... +* ⇢ ⇢ ⇢ Until now, I wasn't aware, that Go is under a ... +* ⇢ ⇢ ⇢ These are some book notes from "Staff Engineer" ... +* ⇢ ⇢ ⇢ Looking at ` ⇢Kubernetes`, it's pretty much ... +* ⇢ ⇢ ⇢ There has been an outage at the upstream ... +* ⇢ ⇢ ⇢ One of the more confusing parts in Go, nil ... +* ⇢ ⇢ ⇢ Agreeably, writing down with Diagrams helps you ... +* ⇢ ⇢ ⇢ I like the idea of types in Ruby. Raku is ... +* ⇢ ⇢ ⇢ So, ` ⇢Haskell` is better suited for general ... +* ⇢ ⇢ ⇢ At first, functional options add a bit of ... +* ⇢ ⇢ ⇢ Revamping my home lab a little bit. ` ⇢freebsd` ... +* ⇢ ⇢ ⇢ Revamping my home lab a little bit. ` ⇢freebsd` ... +* ⇢ ⇢ ⇢ Wondering to which ` ⇢web` ` ⇢browser` I should ... +* ⇢ ⇢ ⇢ eks-node-viewer is a nifty tool, showing the ... +* ⇢ ⇢ ⇢ Have put more Photos on - On my static photo ... +* ⇢ ⇢ ⇢ In Go, passing pointers are not automatically ... +* ⇢ ⇢ ⇢ Myself being part of an on-call rotations over ... +* ⇢ ⇢ ⇢ Feels good to code in my old love ` ⇢Perl` again ... +* ⇢ ⇢ ⇢ This is an interactive summary of the Go ... +* ⇢ ⇢ December 2024 +* ⇢ ⇢ ⇢ Thats unexpected, you cant remove a NaN key ... +* ⇢ ⇢ ⇢ My second blog post about revamping my home lab ... +* ⇢ ⇢ ⇢ Very insightful article about tech hiring in ... +* ⇢ ⇢ ⇢ for ` ⇢bpf` ` ⇢ebpf` performance debugging, have ... +* ⇢ ⇢ ⇢ 89 things he/she knows about Git commits is a ... +* ⇢ ⇢ ⇢ I found that working on multiple side projects ... +* ⇢ ⇢ ⇢ Agreed? Agreed. Besides ` ⇢Ruby`, I would also ... +* ⇢ ⇢ ⇢ Plan9 assembly format in Go, but wait, it's not ... +* ⇢ ⇢ ⇢ This is a neat blog post about the Helix text ... +* ⇢ ⇢ ⇢ This blog post is basically a rant against ... +* ⇢ ⇢ ⇢ Quick trick to get Helix themes selected ... +* ⇢ ⇢ ⇢ Example where complexity attacks you from ... +* ⇢ ⇢ ⇢ LLMs for Ops? Summaries of logs, probabilities ... +* ⇢ ⇢ ⇢ Excellent article about your dream Product ... +* ⇢ ⇢ ⇢ I just finished reading all chapters of CPU ... +* ⇢ ⇢ ⇢ Indeed, useful to know this stuff! ` ⇢sre` ... +* ⇢ ⇢ ⇢ It's the small things, which make Unix like ... + +## October 2024 + +### First on-call experience in a startup. Doesn't ... + +First on-call experience in a startup. Doesn't sound a lot of fun! But the lessons were learned! `#sre` + +=> https://ntietz.com/blog/lessons-from-my-first-on-call/ + +### Reviewing your own PR or MR before asking ... + +Reviewing your own PR or MR before asking others to review it makes a lot of sense. Have seen so many silly mistakes which would have been avoided. Saving time for the real reviewer. + +=> https://www.jvt.me/posts/2019/01/12/self-code-review/ + +### Fun with defer in `#golang`, I did't know, that ... + +Fun with defer in `#golang`, I did't know, that a defer object can either be heap or stack allocated. And there are some rules for inlining, too. + +=> https://victoriametrics.com/blog/defer-in-go/ + +### I have been in incidents. Understandably, ... + +I have been in incidents. Understandably, everyone wants the issue to be resolved as quickly and others want to know how long TTR will be. IMHO, providing no estimates at all is no solution either. So maybe give a rough estimate but clearly communicate that the estimate is rough and that X, Y, and Z can interfere, meaning there is a chance it will take longer to resolve the incident. Just my thought. What's yours? + +=> https://firehydrant.com/blog/hot-take-dont-provide-incident-resolution-estimates/ https://firehydrant.com/blog/hot-...de-incident-resolution-estimates/ + +### Little tips using strings in `#golang` and I ... + +Little tips using strings in `#golang` and I personally think one must look more into the std lib (not just for strings, also for slices, maps,...), there are tons of useful helper functions. + +=> https://www.calhoun.io/6-tips-for-using-strings-in-go/ + +### Reading this post about `#rust` (especially the ... + +Reading this post about `#rust` (especially the first part), I think I made a good choice in deciding to dive into `#golang` instead. There was a point where I wanted to learn a new programming language, and Rust was on my list of choices. I think the Go project does a much better job of deciding what goes into the language and how. What are your thoughts? + +=> https://josephg.com/blog/rewriting-rust/ + +### The opposite of `#ChaosMonkey` ... ... + +The opposite of `#ChaosMonkey` ... automatically repairing and healing services helping to reduce manual toil work. Runbooks and scripts are only the first step, followed by a fully blown service written in Go. Could be useful, but IMHO why not rather address the root causes of the manual toil work? `#sre` + +=> https://blog.cloudflare.com/nl-nl/improving-platform-resilience-at-cloudflare/ https://blog.cloudflare.com/nl-nl...latform-resilience-at-cloudflare/ + +## November 2024 + +### I just became a Silver Patreon for OSnews. What ... + +I just became a Silver Patreon for OSnews. What is OSnews? It is an independent news site about IT. It is slightly independent and, at times, alternative. I have enjoyed it since my early student days. This one and other projects I financially support are listed here: + +=> https://foo.zone/gemfeed/2024-09-07-projects-i-support.html + +### Until now, I wasn't aware, that Go is under a ... + +Until now, I wasn't aware, that Go is under a BSD-style license (3-clause as it seems). Neat. I don't know why, but I always was under the impression it would be MIT. `#bsd` `#golang` + +=> https://go.dev/LICENSE + +### These are some book notes from "Staff Engineer" ... + +These are some book notes from "Staff Engineer" – there is some really good insight into what is expected from a Staff Engineer and beyond in the industry. I wish I had read the book earlier. + +=> https://foo.zone/gemfeed/2024-10-24-staff-engineer-book-notes.html + +### Looking at `#Kubernetes`, it's pretty much ... + +Looking at `#Kubernetes`, it's pretty much following the Unix way of doing things. It has many tools, but each tool has its own single purpose: DNS, scheduling, container runtime, various controllers, networking, observability, alerting, and more services in the control plane. Everything is managed by different services or plugins, mostly running in their dedicated pods. They don't communicate through pipes, but network sockets, though. `#k8s` + +### There has been an outage at the upstream ... + +There has been an outage at the upstream network provider for OpenBSD.Amsterdam (hoster, I am using). This was the first real-world test for my KISS HA setup, and it worked flawlessly! All my sites and services failed over automatically to my other `#OpenBSD` VM! + +=> https://foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.html https://foo.zone/gemfeed/2024-04-...gh-availability-with-OpenBSD.html +=> https://openbsd.amsterdam/ + +### One of the more confusing parts in Go, nil ... + +One of the more confusing parts in Go, nil values vs nil errors: `#golang` + +=> https://unexpected-go.com/nil-errors-that-are-non-nil-errors.html + +### Agreeably, writing down with Diagrams helps you ... + +Agreeably, writing down with Diagrams helps you to think things more through. And keeps others on the same page. Only worth for projects from a certain size, IMHO. + +=> https://ntietz.com/blog/reasons-to-write-design-docs/ + +### I like the idea of types in Ruby. Raku is ... + +I like the idea of types in Ruby. Raku is supports that already, but in Ruby, you must specify the types in a separate .rbs file, which is, in my opinion, cumbersome and is a reason not to use it extensively for now. I believe there are efforts to embed the type information in the standard .rb files, and that the .rbs is just an experiment to see how types could work out without introducing changes into the core Ruby language itself right now? `#Ruby` `#RakuLang` + +=> https://github.com/ruby/rbs + +### So, `#Haskell` is better suited for general ... + +So, `#Haskell` is better suited for general purpose than `#Rust`? I thought deploying something in Haskell means publishing an academic paper :-) Interesting rant about Rust, though: + +=> https://chrisdone.com/posts/rust/ + +### At first, functional options add a bit of ... + +At first, functional options add a bit of boilerplate, but they turn out to be quite neat, especially when you have very long parameter lists that need to be made neat and tidy. `#golang` + +=> https://www.calhoun.io/using-functional-options-instead-of-method-chaining-in-go/ https://www.calhoun.io/using-func...instead-of-method-chaining-in-go/ + +### Revamping my home lab a little bit. `#freebsd` ... + +Revamping my home lab a little bit. `#freebsd` `#bhyve` `#rocky` `#linux` `#vm` `#k3s` `#kuberbetes` `#wireguard` `#zfs` `#nfs` `#ha` `#relayd` `#k8s` `#selfhosting` `#self`-hosting `#homelab` `#home`-lab + +=> https://foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.html https://foo.zone/gemfeed/2024-11-...bernetes-with-freebsd-part-1.html + +### Revamping my home lab a little bit. `#freebsd` ... + +Revamping my home lab a little bit. `#freebsd` `#bhyve` `#rocky` `#linux` `#vm` `#k3s` `#kubernetes` `#wireguard` `#zfs` `#nfs` `#ha` `#relayd` `#k8s` `#selfhosting` `#homelab` + +=> https://foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.html https://foo.zone/gemfeed/2024-11-...bernetes-with-freebsd-part-1.html + +### Wondering to which `#web` `#browser` I should ... + +Wondering to which `#web` `#browser` I should switch now personally ... + +=> https://www.osnews.com/story/141100/mozilla-foundation-lays-off-30-of-its-employees-ends-advocacy-for-open-web-privacy-and-more/ https://www.osnews.com/story/1411...cy-for-open-web-privacy-and-more/ + +### eks-node-viewer is a nifty tool, showing the ... + +eks-node-viewer is a nifty tool, showing the compute nodes currently in use in the `#EKS` cluster. especially useful when dynamically allocating nodes with `#karpenter` or auto scaling groups. + +=> https://github.com/awslabs/eks-node-viewer + +### Have put more Photos on - On my static photo ... + +Have put more Photos on - On my static photo sites - Generated with a `#bash` script + +=> https://irregular.ninja + +### In Go, passing pointers are not automatically ... + +In Go, passing pointers are not automatically faster than values. Pointers often force the memory to be allocated on the heap, adding GC overhad. With values, Go can determine whether to put the memory on the stack instead. But with large structs/objects (how you want to call them) or if you want to modify state, then pointers are the semantic to use. `#golang` + +=> https://blog.boot.dev/golang/pointers-faster-than-values/ + +### Myself being part of an on-call rotations over ... + +Myself being part of an on-call rotations over my whole professional life, just have learned this lesson "Tell people who are new to on-call: Just have fun" :-) This is a neat blog post to read: + +=> https://ntietz.com/blog/what-i-tell-people-new-to-oncall/ + +### Feels good to code in my old love `#Perl` again ... + +Feels good to code in my old love `#Perl` again after a while. I am implementing a log parser for generating site stats of my personal homepage! :-) @Perl + +### This is an interactive summary of the Go ... + +This is an interactive summary of the Go release, with a lot of examples utilising iterators in the slices and map packages. Love it! `#golang` + +=> https://antonz.org/go-1-23/ + +## December 2024 + +### Thats unexpected, you cant remove a NaN key ... + +Thats unexpected, you cant remove a NaN key from a map without clearing it! `#golang` + +=> https://unexpected-go.com/you-cant-remove-a-nan-key-from-a-map-without-clearing-it.html https://unexpected-go.com/you-can...om-a-map-without-clearing-it.html + +### My second blog post about revamping my home lab ... + +My second blog post about revamping my home lab a little bit just hit the net. `#FreeBSD` `#ZFS` `#n100` `#k8s` `#k3s` `#kubernetes` + +=> https://foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.html https://foo.zone/gemfeed/2024-12-...bernetes-with-freebsd-part-2.html + +### Very insightful article about tech hiring in ... + +Very insightful article about tech hiring in the age of LLMs. As an interviewer, I have experienced some of the scrnarios already first hand... + +=> https://newsletter.pragmaticengineer.com/p/how-genai-changes-tech-hiring https://newsletter.pragmaticengin...m/p/how-genai-changes-tech-hiring + +### for `#bpf` `#ebpf` performance debugging, have ... + +for `#bpf` `#ebpf` performance debugging, have a look at bpftop from Netflix. A neat tool showing you the estimated CPU time and other performance statistics for all the BPF programs currently loaded into the `#linux` kernel. Highly recommend! + +=> https://github.com/Netflix/bpftop + +### 89 things he/she knows about Git commits is a ... + +89 things he/she knows about Git commits is a neat list of `#Git` wisdoms + +=> https://www.jvt.me/posts/2024/07/12/things-know-commits/ + +### I found that working on multiple side projects ... + +I found that working on multiple side projects concurrently is better than concentrating on just one. This seems inefficient at first, but whenever you tend to lose motivation, you can temporarily switch to another one with full élan. However, remember to stop starting and start finishing. This doesn't mean you should be working on 10+ (and a growing list of) side projects concurrently! Select your projects and commit to finishing them before starting the next thing. For example, my current limit of concurrent side projects is around five. + +### Agreed? Agreed. Besides `#Ruby`, I would also ... + +Agreed? Agreed. Besides `#Ruby`, I would also add `#RakuLang` and `#Perl` @Perl to the list of languages that are great for shell scripts - "Making Easy Things Easy and Hard Things Possible" + +=> https://lucasoshiro.github.io/posts-en/2024-06-17-ruby-shellscript/ + +### Plan9 assembly format in Go, but wait, it's not ... + +Plan9 assembly format in Go, but wait, it's not the Operating System Plan9! `#golang` `#rabbithole` + +=> https://www.osnews.com/story/140941/go-plan9-memo-speeding-up-calculations-450/ https://www.osnews.com/story/1409...emo-speeding-up-calculations-450/ + +### This is a neat blog post about the Helix text ... + +This is a neat blog post about the Helix text editor, to which I personally switched around a year ago (from NeoVim). I should blog about my experience as well. To summarize: I am using it together with the terminal multiplexer `#tmux`. It doesn't bother me that Helix is purely terminal-based and therefore everything has to be in the same font. `#HelixEditor` + +=> https://jonathan-frere.com/posts/helix/ + +### This blog post is basically a rant against ... + +This blog post is basically a rant against DataDog... Personally, I don't have much experience with DataDog (actually, I have never used it), but one reason to work with logs at my day job (with over 2,000 physical server machines) and to be cost-effective is by using dtail! `#dtail` `#logs` `#logmanagement` + +=> https://crys.site/blog/2024/reinventint-the-weel/ +=> https://dtail.dev + +### Quick trick to get Helix themes selected ... + +Quick trick to get Helix themes selected randomly `#HelixEditor` + +=> https://foo.zone/gemfeed/2024-12-15-random-helix-themes.html + +### Example where complexity attacks you from ... + +Example where complexity attacks you from behind `#k8s` `#kubernetes` `#OpenAI` + +=> https://surfingcomplexity.blog/2024/12/14/quick-takes-on-the-recent-openai-public-incident-write-up/ https://surfingcomplexity.blog/20...-openai-public-incident-write-up/ + +### LLMs for Ops? Summaries of logs, probabilities ... + +LLMs for Ops? Summaries of logs, probabilities about correctness, auto-generating Ansible, some uses cases are there. Wouldn't trust it fully, though. + +=> https://youtu.be/WodaffxVq-E?si=noY0egrfl5izCSQI + +### Excellent article about your dream Product ... + +Excellent article about your dream Product Manager: Why every software team needs a product manager to thrive via @wallabagapp + +=> https://testdouble.com/insights/why-product-managers-accelerate-improve-software-delivery https://testdouble.com/insights/w...elerate-improve-software-delivery + +### I just finished reading all chapters of CPU ... + +I just finished reading all chapters of CPU land: ... not claiming to remember every detail, but it is a great refresher how CPUs and operating systems actually work under the hood when you execute a program, which we tend to forget in our higher abstraction world. I liked the "story" and some of the jokes along the way! Size wise, it is pretty digestable (not talking about books, but only 7 web articles/chapters)! `#cpu` `#linux` `#unix` `#kernel` `#macOS` + +=> https://cpu.land/ + +### Indeed, useful to know this stuff! `#sre` ... + +Indeed, useful to know this stuff! `#sre` + +=> https://biriukov.dev/docs/resolver-dual-stack-application/0-sre-should-know-about-gnu-linux-resolvers-and-dual-stack-applications/ https://biriukov.dev/docs/resolve...vers-and-dual-stack-applications/ + +### It's the small things, which make Unix like ... + +It's the small things, which make Unix like systems, like GNU/Linux, interesting. Didn't know about this `#GNU` `#Tar` behaviour yet: + +=> https://xeiaso.net/notes/2024/pop-quiz-tar/<nil>15110 diff --git a/gemfeed/DRAFT-summary-for-202410-202411-202410.gmi.tpl b/gemfeed/DRAFT-summary-for-202410-202411-202410.gmi.tpl new file mode 100644 index 00000000..c16bdba7 --- /dev/null +++ b/gemfeed/DRAFT-summary-for-202410-202411-202410.gmi.tpl @@ -0,0 +1,263 @@ +# Summary for 202410 202411 202412 + +<< template::inline::toc + +## October 2024 + +### First on-call experience in a startup. Doesn't ... + +First on-call experience in a startup. Doesn't sound a lot of fun! But the lessons were learned! `#sre` + +=> https://ntietz.com/blog/lessons-from-my-first-on-call/ + +### Reviewing your own PR or MR before asking ... + +Reviewing your own PR or MR before asking others to review it makes a lot of sense. Have seen so many silly mistakes which would have been avoided. Saving time for the real reviewer. + +=> https://www.jvt.me/posts/2019/01/12/self-code-review/ + +### Fun with defer in `#golang`, I did't know, that ... + +Fun with defer in `#golang`, I did't know, that a defer object can either be heap or stack allocated. And there are some rules for inlining, too. + +=> https://victoriametrics.com/blog/defer-in-go/ + +### I have been in incidents. Understandably, ... + +I have been in incidents. Understandably, everyone wants the issue to be resolved as quickly and others want to know how long TTR will be. IMHO, providing no estimates at all is no solution either. So maybe give a rough estimate but clearly communicate that the estimate is rough and that X, Y, and Z can interfere, meaning there is a chance it will take longer to resolve the incident. Just my thought. What's yours? + +=> https://firehydrant.com/blog/hot-take-dont-provide-incident-resolution-estimates/ https://firehydrant.com/blog/hot-...de-incident-resolution-estimates/ + +### Little tips using strings in `#golang` and I ... + +Little tips using strings in `#golang` and I personally think one must look more into the std lib (not just for strings, also for slices, maps,...), there are tons of useful helper functions. + +=> https://www.calhoun.io/6-tips-for-using-strings-in-go/ + +### Reading this post about `#rust` (especially the ... + +Reading this post about `#rust` (especially the first part), I think I made a good choice in deciding to dive into `#golang` instead. There was a point where I wanted to learn a new programming language, and Rust was on my list of choices. I think the Go project does a much better job of deciding what goes into the language and how. What are your thoughts? + +=> https://josephg.com/blog/rewriting-rust/ + +### The opposite of `#ChaosMonkey` ... ... + +The opposite of `#ChaosMonkey` ... automatically repairing and healing services helping to reduce manual toil work. Runbooks and scripts are only the first step, followed by a fully blown service written in Go. Could be useful, but IMHO why not rather address the root causes of the manual toil work? `#sre` + +=> https://blog.cloudflare.com/nl-nl/improving-platform-resilience-at-cloudflare/ https://blog.cloudflare.com/nl-nl...latform-resilience-at-cloudflare/ + +## November 2024 + +### I just became a Silver Patreon for OSnews. What ... + +I just became a Silver Patreon for OSnews. What is OSnews? It is an independent news site about IT. It is slightly independent and, at times, alternative. I have enjoyed it since my early student days. This one and other projects I financially support are listed here: + +=> https://foo.zone/gemfeed/2024-09-07-projects-i-support.html + +### Until now, I wasn't aware, that Go is under a ... + +Until now, I wasn't aware, that Go is under a BSD-style license (3-clause as it seems). Neat. I don't know why, but I always was under the impression it would be MIT. `#bsd` `#golang` + +=> https://go.dev/LICENSE + +### These are some book notes from "Staff Engineer" ... + +These are some book notes from "Staff Engineer" – there is some really good insight into what is expected from a Staff Engineer and beyond in the industry. I wish I had read the book earlier. + +=> https://foo.zone/gemfeed/2024-10-24-staff-engineer-book-notes.html + +### Looking at `#Kubernetes`, it's pretty much ... + +Looking at `#Kubernetes`, it's pretty much following the Unix way of doing things. It has many tools, but each tool has its own single purpose: DNS, scheduling, container runtime, various controllers, networking, observability, alerting, and more services in the control plane. Everything is managed by different services or plugins, mostly running in their dedicated pods. They don't communicate through pipes, but network sockets, though. `#k8s` + +### There has been an outage at the upstream ... + +There has been an outage at the upstream network provider for OpenBSD.Amsterdam (hoster, I am using). This was the first real-world test for my KISS HA setup, and it worked flawlessly! All my sites and services failed over automatically to my other `#OpenBSD` VM! + +=> https://foo.zone/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.html https://foo.zone/gemfeed/2024-04-...gh-availability-with-OpenBSD.html +=> https://openbsd.amsterdam/ + +### One of the more confusing parts in Go, nil ... + +One of the more confusing parts in Go, nil values vs nil errors: `#golang` + +=> https://unexpected-go.com/nil-errors-that-are-non-nil-errors.html + +### Agreeably, writing down with Diagrams helps you ... + +Agreeably, writing down with Diagrams helps you to think things more through. And keeps others on the same page. Only worth for projects from a certain size, IMHO. + +=> https://ntietz.com/blog/reasons-to-write-design-docs/ + +### I like the idea of types in Ruby. Raku is ... + +I like the idea of types in Ruby. Raku is supports that already, but in Ruby, you must specify the types in a separate .rbs file, which is, in my opinion, cumbersome and is a reason not to use it extensively for now. I believe there are efforts to embed the type information in the standard .rb files, and that the .rbs is just an experiment to see how types could work out without introducing changes into the core Ruby language itself right now? `#Ruby` `#RakuLang` + +=> https://github.com/ruby/rbs + +### So, `#Haskell` is better suited for general ... + +So, `#Haskell` is better suited for general purpose than `#Rust`? I thought deploying something in Haskell means publishing an academic paper :-) Interesting rant about Rust, though: + +=> https://chrisdone.com/posts/rust/ + +### At first, functional options add a bit of ... + +At first, functional options add a bit of boilerplate, but they turn out to be quite neat, especially when you have very long parameter lists that need to be made neat and tidy. `#golang` + +=> https://www.calhoun.io/using-functional-options-instead-of-method-chaining-in-go/ https://www.calhoun.io/using-func...instead-of-method-chaining-in-go/ + +### Revamping my home lab a little bit. `#freebsd` ... + +Revamping my home lab a little bit. `#freebsd` `#bhyve` `#rocky` `#linux` `#vm` `#k3s` `#kuberbetes` `#wireguard` `#zfs` `#nfs` `#ha` `#relayd` `#k8s` `#selfhosting` `#self`-hosting `#homelab` `#home`-lab + +=> https://foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.html https://foo.zone/gemfeed/2024-11-...bernetes-with-freebsd-part-1.html + +### Revamping my home lab a little bit. `#freebsd` ... + +Revamping my home lab a little bit. `#freebsd` `#bhyve` `#rocky` `#linux` `#vm` `#k3s` `#kubernetes` `#wireguard` `#zfs` `#nfs` `#ha` `#relayd` `#k8s` `#selfhosting` `#homelab` + +=> https://foo.zone/gemfeed/2024-11-17-f3s-kubernetes-with-freebsd-part-1.html https://foo.zone/gemfeed/2024-11-...bernetes-with-freebsd-part-1.html + +### Wondering to which `#web` `#browser` I should ... + +Wondering to which `#web` `#browser` I should switch now personally ... + +=> https://www.osnews.com/story/141100/mozilla-foundation-lays-off-30-of-its-employees-ends-advocacy-for-open-web-privacy-and-more/ https://www.osnews.com/story/1411...cy-for-open-web-privacy-and-more/ + +### eks-node-viewer is a nifty tool, showing the ... + +eks-node-viewer is a nifty tool, showing the compute nodes currently in use in the `#EKS` cluster. especially useful when dynamically allocating nodes with `#karpenter` or auto scaling groups. + +=> https://github.com/awslabs/eks-node-viewer + +### Have put more Photos on - On my static photo ... + +Have put more Photos on - On my static photo sites - Generated with a `#bash` script + +=> https://irregular.ninja + +### In Go, passing pointers are not automatically ... + +In Go, passing pointers are not automatically faster than values. Pointers often force the memory to be allocated on the heap, adding GC overhad. With values, Go can determine whether to put the memory on the stack instead. But with large structs/objects (how you want to call them) or if you want to modify state, then pointers are the semantic to use. `#golang` + +=> https://blog.boot.dev/golang/pointers-faster-than-values/ + +### Myself being part of an on-call rotations over ... + +Myself being part of an on-call rotations over my whole professional life, just have learned this lesson "Tell people who are new to on-call: Just have fun" :-) This is a neat blog post to read: + +=> https://ntietz.com/blog/what-i-tell-people-new-to-oncall/ + +### Feels good to code in my old love `#Perl` again ... + +Feels good to code in my old love `#Perl` again after a while. I am implementing a log parser for generating site stats of my personal homepage! :-) @Perl + +### This is an interactive summary of the Go ... + +This is an interactive summary of the Go release, with a lot of examples utilising iterators in the slices and map packages. Love it! `#golang` + +=> https://antonz.org/go-1-23/ + +## December 2024 + +### Thats unexpected, you cant remove a NaN key ... + +Thats unexpected, you cant remove a NaN key from a map without clearing it! `#golang` + +=> https://unexpected-go.com/you-cant-remove-a-nan-key-from-a-map-without-clearing-it.html https://unexpected-go.com/you-can...om-a-map-without-clearing-it.html + +### My second blog post about revamping my home lab ... + +My second blog post about revamping my home lab a little bit just hit the net. `#FreeBSD` `#ZFS` `#n100` `#k8s` `#k3s` `#kubernetes` + +=> https://foo.zone/gemfeed/2024-12-03-f3s-kubernetes-with-freebsd-part-2.html https://foo.zone/gemfeed/2024-12-...bernetes-with-freebsd-part-2.html + +### Very insightful article about tech hiring in ... + +Very insightful article about tech hiring in the age of LLMs. As an interviewer, I have experienced some of the scrnarios already first hand... + +=> https://newsletter.pragmaticengineer.com/p/how-genai-changes-tech-hiring https://newsletter.pragmaticengin...m/p/how-genai-changes-tech-hiring + +### for `#bpf` `#ebpf` performance debugging, have ... + +for `#bpf` `#ebpf` performance debugging, have a look at bpftop from Netflix. A neat tool showing you the estimated CPU time and other performance statistics for all the BPF programs currently loaded into the `#linux` kernel. Highly recommend! + +=> https://github.com/Netflix/bpftop + +### 89 things he/she knows about Git commits is a ... + +89 things he/she knows about Git commits is a neat list of `#Git` wisdoms + +=> https://www.jvt.me/posts/2024/07/12/things-know-commits/ + +### I found that working on multiple side projects ... + +I found that working on multiple side projects concurrently is better than concentrating on just one. This seems inefficient at first, but whenever you tend to lose motivation, you can temporarily switch to another one with full élan. However, remember to stop starting and start finishing. This doesn't mean you should be working on 10+ (and a growing list of) side projects concurrently! Select your projects and commit to finishing them before starting the next thing. For example, my current limit of concurrent side projects is around five. + +### Agreed? Agreed. Besides `#Ruby`, I would also ... + +Agreed? Agreed. Besides `#Ruby`, I would also add `#RakuLang` and `#Perl` @Perl to the list of languages that are great for shell scripts - "Making Easy Things Easy and Hard Things Possible" + +=> https://lucasoshiro.github.io/posts-en/2024-06-17-ruby-shellscript/ + +### Plan9 assembly format in Go, but wait, it's not ... + +Plan9 assembly format in Go, but wait, it's not the Operating System Plan9! `#golang` `#rabbithole` + +=> https://www.osnews.com/story/140941/go-plan9-memo-speeding-up-calculations-450/ https://www.osnews.com/story/1409...emo-speeding-up-calculations-450/ + +### This is a neat blog post about the Helix text ... + +This is a neat blog post about the Helix text editor, to which I personally switched around a year ago (from NeoVim). I should blog about my experience as well. To summarize: I am using it together with the terminal multiplexer `#tmux`. It doesn't bother me that Helix is purely terminal-based and therefore everything has to be in the same font. `#HelixEditor` + +=> https://jonathan-frere.com/posts/helix/ + +### This blog post is basically a rant against ... + +This blog post is basically a rant against DataDog... Personally, I don't have much experience with DataDog (actually, I have never used it), but one reason to work with logs at my day job (with over 2,000 physical server machines) and to be cost-effective is by using dtail! `#dtail` `#logs` `#logmanagement` + +=> https://crys.site/blog/2024/reinventint-the-weel/ +=> https://dtail.dev + +### Quick trick to get Helix themes selected ... + +Quick trick to get Helix themes selected randomly `#HelixEditor` + +=> https://foo.zone/gemfeed/2024-12-15-random-helix-themes.html + +### Example where complexity attacks you from ... + +Example where complexity attacks you from behind `#k8s` `#kubernetes` `#OpenAI` + +=> https://surfingcomplexity.blog/2024/12/14/quick-takes-on-the-recent-openai-public-incident-write-up/ https://surfingcomplexity.blog/20...-openai-public-incident-write-up/ + +### LLMs for Ops? Summaries of logs, probabilities ... + +LLMs for Ops? Summaries of logs, probabilities about correctness, auto-generating Ansible, some uses cases are there. Wouldn't trust it fully, though. + +=> https://youtu.be/WodaffxVq-E?si=noY0egrfl5izCSQI + +### Excellent article about your dream Product ... + +Excellent article about your dream Product Manager: Why every software team needs a product manager to thrive via @wallabagapp + +=> https://testdouble.com/insights/why-product-managers-accelerate-improve-software-delivery https://testdouble.com/insights/w...elerate-improve-software-delivery + +### I just finished reading all chapters of CPU ... + +I just finished reading all chapters of CPU land: ... not claiming to remember every detail, but it is a great refresher how CPUs and operating systems actually work under the hood when you execute a program, which we tend to forget in our higher abstraction world. I liked the "story" and some of the jokes along the way! Size wise, it is pretty digestable (not talking about books, but only 7 web articles/chapters)! `#cpu` `#linux` `#unix` `#kernel` `#macOS` + +=> https://cpu.land/ + +### Indeed, useful to know this stuff! `#sre` ... + +Indeed, useful to know this stuff! `#sre` + +=> https://biriukov.dev/docs/resolver-dual-stack-application/0-sre-should-know-about-gnu-linux-resolvers-and-dual-stack-applications/ https://biriukov.dev/docs/resolve...vers-and-dual-stack-applications/ + +### It's the small things, which make Unix like ... + +It's the small things, which make Unix like systems, like GNU/Linux, interesting. Didn't know about this `#GNU` `#Tar` behaviour yet: + +=> https://xeiaso.net/notes/2024/pop-quiz-tar/<nil>15110 diff --git a/gemfeed/atom.xml b/gemfeed/atom.xml index ea33e0a8..4f7ec903 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-12-18T23:28:38+02:00</updated> + <updated>2024-12-29T23:48:55+02:00</updated> <title>foo.zone feed</title> <subtitle>To be in the .zone!</subtitle> <link href="gemini://foo.zone/gemfeed/atom.xml" rel="self" /> @@ -243,9 +243,9 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">[</font><font color="#ff0000">paul@earth</font><font color="#F3E651">]~</font><font color="#ff0000">/Downloads</font><font color="#F3E651">%</font><font color="#ff0000"> sudo dd </font><font color="#F3E651">\</font> -<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#F3E651">=</font><font color="#ff0000">FreeBSD-</font><font color="#bb00ff">14.1</font><font color="#ff0000">-RELEASE-amd</font><font color="#bb00ff">64</font><font color="#ff0000">-bootonly</font><font color="#F3E651">.</font><font color="#ff0000">iso </font><font color="#F3E651">\</font> -<font color="#ff0000"> </font><font color="#ff0000">of</font><font color="#F3E651">=</font><font color="#ff0000">/dev/sda </font><font color="#ff0000">conv</font><font color="#F3E651">=</font><font color="#ff0000">sync</font> +<pre>[paul@earth]~/Downloads% sudo dd \ + <b><u><font color="#000000">if</font></u></b>=FreeBSD-<font color="#000000">14.1</font>-RELEASE-amd<font color="#000000">64</font>-bootonly.iso \ + of=/dev/sda conv=sync </pre> <br /> <span>Next, I plugged the Beelinks (one after another) into my monitor via HDMI (the resolution of the FreeBSD text console seems strangely stretched, as I am using the LG Dual Up monitor), connected Ethernet, an external USB keyboard, and the FreeBSD USB stick, and booted the devices up. With F7, I entered the boot menu and selected the USB stick for the FreeBSD installation.</span><br /> @@ -271,9 +271,9 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># freebsd-update fetch</font></i> -<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># freebsd-update install</font></i> -<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># freebsd-update reboot</font></i> +<pre>root@f0:~ <i><font color="silver"># freebsd-update fetch</font></i> +root@f0:~ <i><font color="silver"># freebsd-update install</font></i> +root@f0:~ <i><font color="silver"># freebsd-update reboot</font></i> </pre> <br /> <span>I also added the following entries for the three FreeBSD boxes to the <span class='inlinecode'>/etc/hosts</span> file:</span><br /> @@ -281,11 +281,11 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># cat <<END >>/etc/hosts</font></i> -<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.130</font><font color="#ff0000"> f0 f0</font><font color="#F3E651">.</font><font color="#ff0000">lan f0</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font> -<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.131</font><font color="#ff0000"> f1 f1</font><font color="#F3E651">.</font><font color="#ff0000">lan f1</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font> -<font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.132</font><font color="#ff0000"> f2 f2</font><font color="#F3E651">.</font><font color="#ff0000">lan f2</font><font color="#F3E651">.</font><font color="#ff0000">lan</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font> -<font color="#ff0000">END</font> +<pre>root@f0:~ <i><font color="silver"># cat <<END >>/etc/hosts</font></i> +<font color="#000000">192.168</font>.<font color="#000000">1.130</font> f0 f0.lan f0.lan.buetow.org +<font color="#000000">192.168</font>.<font color="#000000">1.131</font> f1 f1.lan f1.lan.buetow.org +<font color="#000000">192.168</font>.<font color="#000000">1.132</font> f2 f2.lan f2.lan.buetow.org +END </pre> <br /> <h2 style='display: inline' id='after-install'>After install</h2><br /> @@ -296,7 +296,7 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># pkg install helix doas zfs-periodic uptimed</font></i> +<pre>root@f0:~ <i><font color="silver"># pkg install helix doas zfs-periodic uptimed</font></i> </pre> <br /> <h3 style='display: inline' id='helix-editor'>Helix editor</h3><br /> @@ -313,7 +313,7 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># cp /usr/local/etc/doas.conf.sample /usr/local/etc/doas.conf</font></i> +<pre>root@f0:~ <i><font color="silver"># cp /usr/local/etc/doas.conf.sample /usr/local/etc/doas.conf</font></i> </pre> <br /> <a class='textlink' href='https://man.openbsd.org/doas'>https://man.openbsd.org/doas</a><br /> @@ -326,24 +326,24 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc daily_zfs_snapshot_enable=YES</font></i> -<font color="#ff0000">daily_zfs_snapshot_enable</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">></font><font color="#ff0000"> YES</font> -<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc daily_zfs_snapshot_pools=zroot</font></i> -<font color="#ff0000">daily_zfs_snapshot_pools</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">></font><font color="#ff0000"> zroot</font> -<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc daily_zfs_snapshot_keep=7</font></i> -<font color="#ff0000">daily_zfs_snapshot_keep</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">></font><font color="#ff0000"> </font><font color="#bb00ff">7</font> -<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc weekly_zfs_snapshot_enable=YES</font></i> -<font color="#ff0000">weekly_zfs_snapshot_enable</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">></font><font color="#ff0000"> YES</font> -<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc weekly_zfs_snapshot_pools=zroot</font></i> -<font color="#ff0000">weekly_zfs_snapshot_pools</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">></font><font color="#ff0000"> zroot</font> -<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc weekly_zfs_snapshot_keep=5</font></i> -<font color="#ff0000">weekly_zfs_snapshot_keep</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">></font><font color="#ff0000"> </font><font color="#bb00ff">5</font> -<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc monthly_zfs_snapshot_enable=YES</font></i> -<font color="#ff0000">monthly_zfs_snapshot_enable</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">></font><font color="#ff0000"> YES</font> -<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc monthly_zfs_snapshot_pools=zroot</font></i> -<font color="#ff0000">monthly_zfs_snapshot_pools</font><font color="#F3E651">:</font><font color="#ff0000"> -</font><font color="#F3E651">></font><font color="#ff0000"> zroot</font> -<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># sysrc monthly_zfs_snapshot_keep=6</font></i> -<font color="#ff0000">monthly_zfs_snapshot_keep</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#ff0000"> -</font><font color="#F3E651">></font><font color="#ff0000"> </font><font color="#bb00ff">6</font> +<pre>root@f0:~ <i><font color="silver"># sysrc daily_zfs_snapshot_enable=YES</font></i> +daily_zfs_snapshot_enable: -> YES +root@f0:~ <i><font color="silver"># sysrc daily_zfs_snapshot_pools=zroot</font></i> +daily_zfs_snapshot_pools: -> zroot +root@f0:~ <i><font color="silver"># sysrc daily_zfs_snapshot_keep=7</font></i> +daily_zfs_snapshot_keep: -> <font color="#000000">7</font> +root@f0:~ <i><font color="silver"># sysrc weekly_zfs_snapshot_enable=YES</font></i> +weekly_zfs_snapshot_enable: -> YES +root@f0:~ <i><font color="silver"># sysrc weekly_zfs_snapshot_pools=zroot</font></i> +weekly_zfs_snapshot_pools: -> zroot +root@f0:~ <i><font color="silver"># sysrc weekly_zfs_snapshot_keep=5</font></i> +weekly_zfs_snapshot_keep: -> <font color="#000000">5</font> +root@f0:~ <i><font color="silver"># sysrc monthly_zfs_snapshot_enable=YES</font></i> +monthly_zfs_snapshot_enable: -> YES +root@f0:~ <i><font color="silver"># sysrc monthly_zfs_snapshot_pools=zroot</font></i> +monthly_zfs_snapshot_pools: -> zroot +root@f0:~ <i><font color="silver"># sysrc monthly_zfs_snapshot_keep=6</font></i> +monthly_zfs_snapshot_keep: <font color="#000000">2</font> -> <font color="#000000">6</font> </pre> <br /> <a class='textlink' href='https://github.com/ross/zfs-periodic'>https://github.com/ross/zfs-periodic</a><br /> @@ -356,9 +356,9 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># cp /usr/local/mimecast/etc/uptimed.conf-dist \</font></i> -<font color="#ff0000"> /usr/local/mimecast/etc/uptimed</font><font color="#F3E651">.</font><font color="#ff0000">conf </font> -<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># hx /usr/local/mimecast/etc/uptimed.conf</font></i> +<pre>root@f0:~ <i><font color="silver"># cp /usr/local/mimecast/etc/uptimed.conf-dist \</font></i> + /usr/local/mimecast/etc/uptimed.conf +root@f0:~ <i><font color="silver"># hx /usr/local/mimecast/etc/uptimed.conf</font></i> </pre> <br /> <span>In the Helix editor session, I changed <span class='inlinecode'>LOG_MAXIMUM_ENTRIES</span> to <span class='inlinecode'>0</span> to keep all uptime entries forever and not cut off at 50 (the default config). After that, I enabled and started <span class='inlinecode'>uptimed</span>:</span><br /> @@ -367,8 +367,8 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># service uptimed enable</font></i> -<font color="#ff0000">root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># service uptimed start</font></i> +<pre>root@f0:~ <i><font color="silver"># service uptimed enable</font></i> +root@f0:~ <i><font color="silver"># service uptimed start</font></i> </pre> <br /> <span>To check the current uptime stats, I can now run <span class='inlinecode'>uprecords</span>:</span><br /> @@ -377,15 +377,15 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000"> root@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><i><font color="#ababab"># uprecords</font></i> -<font color="#ff0000"> </font><i><font color="#ababab"># Uptime | System Boot up</font></i> -<font color="#ff0000">----------------------------</font><font color="#F3E651">+</font><font color="#ff0000">---------------------------------------------------</font> -<font color="#ff0000">-</font><font color="#F3E651">></font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#ff0000"> days</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">07</font><font color="#F3E651">:</font><font color="#bb00ff">34</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> FreeBSD </font><font color="#bb00ff">14.1</font><font color="#ff0000">-RELEASE Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font> -<font color="#ff0000">----------------------------</font><font color="#F3E651">+</font><font color="#ff0000">---------------------------------------------------</font> -<font color="#ff0000">NewRec </font><font color="#bb00ff">0</font><font color="#ff0000"> days</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">07</font><font color="#F3E651">:</font><font color="#bb00ff">33</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> since Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font> -<font color="#ff0000"> up </font><font color="#bb00ff">0</font><font color="#ff0000"> days</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">07</font><font color="#F3E651">:</font><font color="#bb00ff">34</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> since Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font> -<font color="#ff0000"> down </font><font color="#bb00ff">0</font><font color="#ff0000"> days</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">00</font><font color="#F3E651">:</font><font color="#bb00ff">00</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> since Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font> -<font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000">up </font><font color="#bb00ff">100.000</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> since Mon Dec </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">12</font><font color="#F3E651">:</font><font color="#bb00ff">21</font><font color="#F3E651">:</font><font color="#bb00ff">44</font><font color="#ff0000"> </font><font color="#bb00ff">2024</font> +<pre> root@f0:~ <i><font color="silver"># uprecords</font></i> + <i><font color="silver"># Uptime | System Boot up</font></i> +----------------------------+--------------------------------------------------- +-> <font color="#000000">1</font> <font color="#000000">0</font> days, <font color="#000000">00</font>:<font color="#000000">07</font>:<font color="#000000">34</font> | FreeBSD <font color="#000000">14.1</font>-RELEASE Mon Dec <font color="#000000">2</font> <font color="#000000">12</font>:<font color="#000000">21</font>:<font color="#000000">44</font> <font color="#000000">2024</font> +----------------------------+--------------------------------------------------- +NewRec <font color="#000000">0</font> days, <font color="#000000">00</font>:<font color="#000000">07</font>:<font color="#000000">33</font> | since Mon Dec <font color="#000000">2</font> <font color="#000000">12</font>:<font color="#000000">21</font>:<font color="#000000">44</font> <font color="#000000">2024</font> + up <font color="#000000">0</font> days, <font color="#000000">00</font>:<font color="#000000">07</font>:<font color="#000000">34</font> | since Mon Dec <font color="#000000">2</font> <font color="#000000">12</font>:<font color="#000000">21</font>:<font color="#000000">44</font> <font color="#000000">2024</font> + down <font color="#000000">0</font> days, <font color="#000000">00</font>:<font color="#000000">00</font>:<font color="#000000">00</font> | since Mon Dec <font color="#000000">2</font> <font color="#000000">12</font>:<font color="#000000">21</font>:<font color="#000000">44</font> <font color="#000000">2024</font> + %up <font color="#000000">100.000</font> | since Mon Dec <font color="#000000">2</font> <font color="#000000">12</font>:<font color="#000000">21</font>:<font color="#000000">44</font> <font color="#000000">2024</font> </pre> <br /> <span>This is how I track the uptimes for all of my host:</span><br /> @@ -403,17 +403,17 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> ifconfig re0</font> -<font color="#ff0000">re0</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#ff0000">flags</font><font color="#F3E651">=</font><font color="#bb00ff">1008843</font><font color="#F3E651"><</font><font color="#ff0000">UP</font><font color="#F3E651">,</font><font color="#ff0000">BROADCAST</font><font color="#F3E651">,</font><font color="#ff0000">RUNNING</font><font color="#F3E651">,</font><font color="#ff0000">SIMPLEX</font><font color="#F3E651">,</font><font color="#ff0000">MULTICAST</font><font color="#F3E651">,</font><font color="#ff0000">LOWER_UP</font><font color="#F3E651">></font><font color="#ff0000"> metric </font><font color="#bb00ff">0</font><font color="#ff0000"> mtu </font><font color="#bb00ff">1500</font> -<font color="#ff0000"> </font><font color="#ff0000">options</font><font color="#F3E651">=</font><font color="#ff0000">8209b</font><font color="#F3E651"><</font><font color="#ff0000">RXCSUM</font><font color="#F3E651">,</font><font color="#ff0000">TXCSUM</font><font color="#F3E651">,</font><font color="#ff0000">VLAN_MTU</font><font color="#F3E651">,</font><font color="#ff0000">VLAN_HWTAGGING</font><font color="#F3E651">,</font><font color="#ff0000">VLAN_HWCSUM</font><font color="#F3E651">,</font><font color="#ff0000">WOL_MAGIC</font><font color="#F3E651">,</font><font color="#ff0000">LINKSTATE</font><font color="#F3E651">></font> -<font color="#ff0000"> ether e8</font><font color="#F3E651">:</font><font color="#ff0000">ff</font><font color="#F3E651">:</font><font color="#ff0000">1e</font><font color="#F3E651">:</font><font color="#ff0000">d7</font><font color="#F3E651">:</font><font color="#ff0000">1c</font><font color="#F3E651">:</font><font color="#ff0000">ac</font> -<font color="#ff0000"> inet </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.130</font><font color="#ff0000"> netmask </font><font color="#bb00ff">0xffffff00</font><font color="#ff0000"> broadcast </font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.255</font> -<font color="#ff0000"> inet6 fe80</font><font color="#F3E651">::</font><font color="#ff0000">eaff</font><font color="#F3E651">:</font><font color="#ff0000">1eff</font><font color="#F3E651">:</font><font color="#ff0000">fed7</font><font color="#F3E651">:</font><font color="#ff0000">1cac</font><font color="#F3E651">%</font><font color="#ff0000">re0 prefixlen </font><font color="#bb00ff">64</font><font color="#ff0000"> scopeid </font><font color="#bb00ff">0x1</font> -<font color="#ff0000"> inet6 fd22</font><font color="#F3E651">:</font><font color="#ff0000">c702</font><font color="#F3E651">:</font><font color="#ff0000">acb7</font><font color="#F3E651">:</font><font color="#bb00ff">0</font><font color="#F3E651">:</font><font color="#ff0000">eaff</font><font color="#F3E651">:</font><font color="#ff0000">1eff</font><font color="#F3E651">:</font><font color="#ff0000">fed7</font><font color="#F3E651">:</font><font color="#ff0000">1cac prefixlen </font><font color="#bb00ff">64</font><font color="#ff0000"> detached autoconf</font> -<font color="#ff0000"> inet6 2a01</font><font color="#F3E651">:</font><font color="#ff0000">5a8</font><font color="#F3E651">:</font><font color="#bb00ff">304</font><font color="#F3E651">:</font><font color="#ff0000">1d5c</font><font color="#F3E651">:</font><font color="#ff0000">eaff</font><font color="#F3E651">:</font><font color="#ff0000">1eff</font><font color="#F3E651">:</font><font color="#ff0000">fed7</font><font color="#F3E651">:</font><font color="#ff0000">1cac prefixlen </font><font color="#bb00ff">64</font><font color="#ff0000"> autoconf pltime </font><font color="#bb00ff">10800</font><font color="#ff0000"> vltime </font><font color="#bb00ff">14400</font> -<font color="#ff0000"> media</font><font color="#F3E651">:</font><font color="#ff0000"> Ethernet autoselect </font><font color="#F3E651">(</font><font color="#ff0000">1000baseT </font><font color="#F3E651"><</font><font color="#ff0000">full-duplex</font><font color="#F3E651">>)</font> -<font color="#ff0000"> status</font><font color="#F3E651">:</font><font color="#ff0000"> active</font> -<font color="#ff0000"> nd6 </font><font color="#ff0000">options</font><font color="#F3E651">=</font><font color="#bb00ff">23</font><font color="#F3E651"><</font><font color="#ff0000">PERFORMNUD</font><font color="#F3E651">,</font><font color="#ff0000">ACCEPT_RTADV</font><font color="#F3E651">,</font><font color="#ff0000">AUTO_LINKLOCAL</font><font color="#F3E651">></font> +<pre>paul@f0:~ % ifconfig re0 +re0: flags=<font color="#000000">1008843</font><UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric <font color="#000000">0</font> mtu <font color="#000000">1500</font> + options=8209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE> + ether e8:ff:1e:d7:1c:ac + inet <font color="#000000">192.168</font>.<font color="#000000">1.130</font> netmask <font color="#000000">0xffffff00</font> broadcast <font color="#000000">192.168</font>.<font color="#000000">1.255</font> + inet6 fe80::eaff:1eff:fed7:1cac%re0 prefixlen <font color="#000000">64</font> scopeid <font color="#000000">0x1</font> + inet6 fd22:c702:acb7:<font color="#000000">0</font>:eaff:1eff:fed7:1cac prefixlen <font color="#000000">64</font> detached autoconf + inet6 2a01:5a8:<font color="#000000">304</font>:1d5c:eaff:1eff:fed7:1cac prefixlen <font color="#000000">64</font> autoconf pltime <font color="#000000">10800</font> vltime <font color="#000000">14400</font> + media: Ethernet autoselect (1000baseT <full-duplex>) + status: active + nd6 options=<font color="#000000">23</font><PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL> </pre> <br /> <h2 style='display: inline' id='ram'>RAM</h2><br /> @@ -424,8 +424,8 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> sysctl hw</font><font color="#F3E651">.</font><font color="#ff0000">physmem</font> -<font color="#ff0000">hw</font><font color="#F3E651">.</font><font color="#ff0000">physmem</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">16902905856</font> +<pre>paul@f0:~ % sysctl hw.physmem +hw.physmem: <font color="#000000">16902905856</font> </pre> <br /> @@ -437,11 +437,11 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> sysctl dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu </font><font color="#F3E651">|</font><font color="#ff0000"> grep freq</font><font color="#F3E651">:</font> -<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">3</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">705</font> -<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">2</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">705</font> -<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">1</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">604</font> -<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">604</font> +<pre>paul@f0:~ % sysctl dev.cpu | grep freq: +dev.cpu.<font color="#000000">3</font>.freq: <font color="#000000">705</font> +dev.cpu.<font color="#000000">2</font>.freq: <font color="#000000">705</font> +dev.cpu.<font color="#000000">1</font>.freq: <font color="#000000">604</font> +dev.cpu.<font color="#000000">0</font>.freq: <font color="#000000">604</font> </pre> <br /> <h2 style='display: inline' id='cpu-throttling'>CPU throttling</h2><br /> @@ -452,14 +452,14 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> doas pkg install ubench</font> -<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> rehash </font><i><font color="#ababab"># For tcsh to find the newly installed command</font></i> -<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> ubench </font><font color="#F3E651">&</font> -<font color="#ff0000">paul@f0</font><font color="#F3E651">:~</font><font color="#ff0000"> </font><font color="#F3E651">%</font><font color="#ff0000"> sysctl dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu </font><font color="#F3E651">|</font><font color="#ff0000"> grep freq</font><font color="#F3E651">:</font> -<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">3</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2922</font> -<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">2</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2922</font> -<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">1</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2923</font> -<font color="#ff0000">dev</font><font color="#F3E651">.</font><font color="#ff0000">cpu</font><font color="#F3E651">.</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">freq</font><font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#bb00ff">2922</font> +<pre>paul@f0:~ % doas pkg install ubench +paul@f0:~ % rehash <i><font color="silver"># For tcsh to find the newly installed command</font></i> +paul@f0:~ % ubench & +paul@f0:~ % sysctl dev.cpu | grep freq: +dev.cpu.<font color="#000000">3</font>.freq: <font color="#000000">2922</font> +dev.cpu.<font color="#000000">2</font>.freq: <font color="#000000">2922</font> +dev.cpu.<font color="#000000">1</font>.freq: <font color="#000000">2923</font> +dev.cpu.<font color="#000000">0</font>.freq: <font color="#000000">2922</font> </pre> <br /> <span>Idle, all three Beelinks plus the switch consumed 26.2W. But with <span class='inlinecode'>ubench</span> stressing all the CPUs, it went up to 38.8W.</span><br /> @@ -910,7 +910,7 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><b><font color="#ffffff">declare</font></b><font color="#ff0000"> -xr </font><font color="#ff0000">HTML_THEME_DIR</font><font color="#F3E651">=.</font><font color="#ff0000">/extras/html/themes/simple</font> +<pre><b><u><font color="#000000">declare</font></u></b> -xr HTML_THEME_DIR=./extras/html/themes/simple </pre> <br /> <span>To customize the theme or create your own, simply copy the theme directory and modify it as needed. This makes it also much easier to switch between layouts.</span><br /> @@ -1431,11 +1431,11 @@ jgs \\`_..---.Y.---.._`// <br /> <ul> <li><a href='#the-stoic-challenge-book-notes'>"The Stoic Challenge" book notes</a></li> -<li>⇢ <a href='#got-sets-you-up-for-a-challenge'>Got sets you up for a challenge</a></li> +<li>⇢ <a href='#god-sets-you-up-for-a-challenge'>God sets you up for a challenge</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='got-sets-you-up-for-a-challenge'>Got sets you up for a challenge</h2><br /> +<h2 style='display: inline' id='god-sets-you-up-for-a-challenge'>God sets you up for a challenge</h2><br /> <br /> <span>Gods set you up for a challenge to see how resilient you are. Is getting angry worth the price? If you stay calm then you can find the optimal workaround for the obstacle. Stay calm even with big setbacks. Practice minimalism of negative emotions.</span><br /> <br /> @@ -1535,38 +1535,38 @@ WHOA!! ( o.o ) by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> traceroute bad</font><font color="#F3E651">.</font><font color="#ff0000">horse</font> -<font color="#ff0000">traceroute to bad</font><font color="#F3E651">.</font><font color="#ff0000">horse </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.157</font><font color="#F3E651">),</font><font color="#ff0000"> </font><font color="#bb00ff">30</font><font color="#ff0000"> hops max</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">60</font><font color="#ff0000"> byte packets</font> -<font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#ff0000"> dsldevice</font><font color="#F3E651">.</font><font color="#ff0000">lan </font><font color="#F3E651">(</font><font color="#bb00ff">192.168</font><font color="#F3E651">.</font><font color="#bb00ff">1.1</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">5.712</font><font color="#ff0000"> ms </font><font color="#bb00ff">5.800</font><font color="#ff0000"> ms </font><font color="#bb00ff">6.466</font><font color="#ff0000"> ms</font> -<font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#bb00ff">87</font><font color="#ff0000">-</font><font color="#bb00ff">243</font><font color="#ff0000">-</font><font color="#bb00ff">116</font><font color="#ff0000">-</font><font color="#bb00ff">2</font><font color="#F3E651">.</font><font color="#ff0000">ip</font><font color="#F3E651">.</font><font color="#ff0000">btc-net</font><font color="#F3E651">.</font><b><font color="#ffffff">bg</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#bb00ff">87.243</font><font color="#F3E651">.</font><font color="#bb00ff">116.2</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">8.017</font><font color="#ff0000"> ms </font><font color="#bb00ff">7.506</font><font color="#ff0000"> ms </font><font color="#bb00ff">8.432</font><font color="#ff0000"> ms</font> -<font color="#ff0000"> </font><font color="#bb00ff">3</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font> -<font color="#ff0000"> </font><font color="#bb00ff">4</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font> -<font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#ff0000"> xe-</font><font color="#bb00ff">1</font><font color="#ff0000">-</font><font color="#bb00ff">2</font><font color="#ff0000">-</font><font color="#bb00ff">0</font><font color="#F3E651">.</font><font color="#ff0000">mpr1</font><font color="#F3E651">.</font><font color="#ff0000">fra4</font><font color="#F3E651">.</font><font color="#ff0000">de</font><font color="#F3E651">.</font><font color="#ff0000">above</font><font color="#F3E651">.</font><font color="#ff0000">net </font><font color="#F3E651">(</font><font color="#bb00ff">80.81</font><font color="#F3E651">.</font><font color="#bb00ff">194.26</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">39.952</font><font color="#ff0000"> ms </font><font color="#bb00ff">40.155</font><font color="#ff0000"> ms </font><font color="#bb00ff">40.139</font><font color="#ff0000"> ms</font> -<font color="#ff0000"> </font><font color="#bb00ff">6</font><font color="#ff0000"> ae12</font><font color="#F3E651">.</font><font color="#ff0000">cs1</font><font color="#F3E651">.</font><font color="#ff0000">fra6</font><font color="#F3E651">.</font><font color="#ff0000">de</font><font color="#F3E651">.</font><font color="#ff0000">eth</font><font color="#F3E651">.</font><font color="#ff0000">zayo</font><font color="#F3E651">.</font><font color="#ff0000">com </font><font color="#F3E651">(</font><font color="#bb00ff">64.125</font><font color="#F3E651">.</font><font color="#bb00ff">26.172</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">128.014</font><font color="#ff0000"> ms </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font> -<font color="#ff0000"> </font><font color="#bb00ff">7</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font> -<font color="#ff0000"> </font><font color="#bb00ff">8</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font> -<font color="#ff0000"> </font><font color="#bb00ff">9</font><font color="#ff0000"> ae10</font><font color="#F3E651">.</font><font color="#ff0000">cs1</font><font color="#F3E651">.</font><font color="#ff0000">lhr15</font><font color="#F3E651">.</font><font color="#ff0000">uk</font><font color="#F3E651">.</font><font color="#ff0000">eth</font><font color="#F3E651">.</font><font color="#ff0000">zayo</font><font color="#F3E651">.</font><font color="#ff0000">com </font><font color="#F3E651">(</font><font color="#bb00ff">64.125</font><font color="#F3E651">.</font><font color="#bb00ff">29.17</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">120.625</font><font color="#ff0000"> ms </font><font color="#bb00ff">121.117</font><font color="#ff0000"> ms </font><font color="#bb00ff">121.050</font><font color="#ff0000"> ms</font> -<font color="#bb00ff">10</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font> -<font color="#bb00ff">11</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font> -<font color="#bb00ff">12</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font> -<font color="#bb00ff">13</font><font color="#ff0000"> ae5</font><font color="#F3E651">.</font><font color="#ff0000">mpr1</font><font color="#F3E651">.</font><font color="#ff0000">tor3</font><font color="#F3E651">.</font><font color="#ff0000">ca</font><font color="#F3E651">.</font><font color="#ff0000">zip</font><font color="#F3E651">.</font><font color="#ff0000">zayo</font><font color="#F3E651">.</font><font color="#ff0000">com </font><font color="#F3E651">(</font><font color="#bb00ff">64.125</font><font color="#F3E651">.</font><font color="#bb00ff">23.118</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">192.605</font><font color="#ff0000"> ms </font><font color="#bb00ff">205.741</font><font color="#ff0000"> ms </font><font color="#bb00ff">203.607</font><font color="#ff0000"> ms</font> -<font color="#bb00ff">14</font><font color="#ff0000"> </font><font color="#bb00ff">64.124</font><font color="#F3E651">.</font><font color="#bb00ff">217.237</font><font color="#F3E651">.</font><font color="#ff0000">IDIA-</font><font color="#bb00ff">265104</font><font color="#ff0000">-ZYO</font><font color="#F3E651">.</font><font color="#ff0000">zip</font><font color="#F3E651">.</font><font color="#ff0000">zayo</font><font color="#F3E651">.</font><font color="#ff0000">com </font><font color="#F3E651">(</font><font color="#bb00ff">64.124</font><font color="#F3E651">.</font><font color="#bb00ff">217.237</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">204.673</font><font color="#ff0000"> ms </font><font color="#bb00ff">134.674</font><font color="#ff0000"> ms </font><font color="#bb00ff">131.442</font><font color="#ff0000"> ms</font> -<font color="#bb00ff">15</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000"> </font><font color="#F3E651">*</font> -<font color="#bb00ff">16</font><font color="#ff0000"> </font><font color="#bb00ff">67.223</font><font color="#F3E651">.</font><font color="#bb00ff">96.90</font><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#bb00ff">67.223</font><font color="#F3E651">.</font><font color="#bb00ff">96.90</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">128.245</font><font color="#ff0000"> ms </font><font color="#bb00ff">127.844</font><font color="#ff0000"> ms </font><font color="#bb00ff">127.843</font><font color="#ff0000"> ms</font> -<font color="#bb00ff">17</font><font color="#ff0000"> bad</font><font color="#F3E651">.</font><font color="#ff0000">horse </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.130</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">128.194</font><font color="#ff0000"> ms </font><font color="#bb00ff">122.854</font><font color="#ff0000"> ms </font><font color="#bb00ff">121.786</font><font color="#ff0000"> ms</font> -<font color="#bb00ff">18</font><font color="#ff0000"> bad</font><font color="#F3E651">.</font><font color="#ff0000">horse </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.131</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">128.831</font><font color="#ff0000"> ms </font><font color="#bb00ff">128.341</font><font color="#ff0000"> ms </font><font color="#bb00ff">186.559</font><font color="#ff0000"> ms</font> -<font color="#bb00ff">19</font><font color="#ff0000"> bad</font><font color="#F3E651">.</font><font color="#ff0000">horse </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.132</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">185.716</font><font color="#ff0000"> ms </font><font color="#bb00ff">180.121</font><font color="#ff0000"> ms </font><font color="#bb00ff">180.042</font><font color="#ff0000"> ms</font> -<font color="#bb00ff">20</font><font color="#ff0000"> bad</font><font color="#F3E651">.</font><font color="#ff0000">horse </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.133</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">203.170</font><font color="#ff0000"> ms </font><font color="#bb00ff">203.076</font><font color="#ff0000"> ms </font><font color="#bb00ff">203.168</font><font color="#ff0000"> ms</font> -<font color="#bb00ff">21</font><font color="#ff0000"> he</font><font color="#F3E651">.</font><font color="#ff0000">rides</font><font color="#F3E651">.</font><font color="#ff0000">across</font><font color="#F3E651">.</font><font color="#ff0000">the</font><font color="#F3E651">.</font><font color="#ff0000">nation </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.134</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">203.115</font><font color="#ff0000"> ms </font><font color="#bb00ff">141.830</font><font color="#ff0000"> ms </font><font color="#bb00ff">141.799</font><font color="#ff0000"> ms</font> -<font color="#bb00ff">22</font><font color="#ff0000"> the</font><font color="#F3E651">.</font><font color="#ff0000">thoroughbred</font><font color="#F3E651">.</font><font color="#ff0000">of</font><font color="#F3E651">.</font><font color="#ff0000">sin </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.135</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">147.965</font><font color="#ff0000"> ms </font><font color="#bb00ff">148.230</font><font color="#ff0000"> ms </font><font color="#bb00ff">170.478</font><font color="#ff0000"> ms</font> -<font color="#bb00ff">23</font><font color="#ff0000"> he</font><font color="#F3E651">.</font><font color="#ff0000">got</font><font color="#F3E651">.</font><font color="#ff0000">the</font><font color="#F3E651">.</font><font color="#ff0000">application </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.136</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">165.161</font><font color="#ff0000"> ms </font><font color="#bb00ff">164.939</font><font color="#ff0000"> ms </font><font color="#bb00ff">159.085</font><font color="#ff0000"> ms</font> -<font color="#bb00ff">24</font><font color="#ff0000"> that</font><font color="#F3E651">.</font><font color="#ff0000">you</font><font color="#F3E651">.</font><font color="#ff0000">just</font><font color="#F3E651">.</font><font color="#ff0000">sent</font><font color="#F3E651">.</font><b><font color="#ffffff">in</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.137</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">162.310</font><font color="#ff0000"> ms </font><font color="#bb00ff">158.569</font><font color="#ff0000"> ms </font><font color="#bb00ff">158.896</font><font color="#ff0000"> ms</font> -<font color="#bb00ff">25</font><font color="#ff0000"> it</font><font color="#F3E651">.</font><font color="#ff0000">needs</font><font color="#F3E651">.</font><font color="#ff0000">evaluation </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.138</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">162.927</font><font color="#ff0000"> ms </font><font color="#bb00ff">163.046</font><font color="#ff0000"> ms </font><font color="#bb00ff">163.085</font><font color="#ff0000"> ms</font> -<font color="#bb00ff">26</font><font color="#ff0000"> so</font><font color="#F3E651">.</font><b><font color="#ffffff">let</font></b><font color="#F3E651">.</font><font color="#ff0000">the</font><font color="#F3E651">.</font><font color="#ff0000">games</font><font color="#F3E651">.</font><font color="#ff0000">begin </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.139</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">233.363</font><font color="#ff0000"> ms </font><font color="#bb00ff">233.545</font><font color="#ff0000"> ms </font><font color="#bb00ff">233.317</font><font color="#ff0000"> ms</font> -<font color="#bb00ff">27</font><font color="#ff0000"> a</font><font color="#F3E651">.</font><font color="#ff0000">heinous</font><font color="#F3E651">.</font><font color="#ff0000">crime </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.140</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">237.745</font><font color="#ff0000"> ms </font><font color="#bb00ff">233.614</font><font color="#ff0000"> ms </font><font color="#bb00ff">233.740</font><font color="#ff0000"> ms</font> -<font color="#bb00ff">28</font><font color="#ff0000"> a</font><font color="#F3E651">.</font><font color="#ff0000">show</font><font color="#F3E651">.</font><font color="#ff0000">of</font><font color="#F3E651">.</font><font color="#ff0000">force </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.141</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">237.974</font><font color="#ff0000"> ms </font><font color="#bb00ff">176.085</font><font color="#ff0000"> ms </font><font color="#bb00ff">175.927</font><font color="#ff0000"> ms</font> -<font color="#bb00ff">29</font><font color="#ff0000"> a</font><font color="#F3E651">.</font><font color="#ff0000">murder</font><font color="#F3E651">.</font><font color="#ff0000">would</font><font color="#F3E651">.</font><font color="#ff0000">be</font><font color="#F3E651">.</font><font color="#ff0000">nice</font><font color="#F3E651">.</font><font color="#ff0000">of</font><font color="#F3E651">.</font><font color="#ff0000">course </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.142</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">181.838</font><font color="#ff0000"> ms </font><font color="#bb00ff">181.858</font><font color="#ff0000"> ms </font><font color="#bb00ff">182.059</font><font color="#ff0000"> ms</font> -<font color="#bb00ff">30</font><font color="#ff0000"> bad</font><font color="#F3E651">.</font><font color="#ff0000">horse </font><font color="#F3E651">(</font><font color="#bb00ff">162.252</font><font color="#F3E651">.</font><font color="#bb00ff">205.143</font><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#bb00ff">187.731</font><font color="#ff0000"> ms </font><font color="#bb00ff">187.416</font><font color="#ff0000"> ms </font><font color="#bb00ff">187.532</font><font color="#ff0000"> ms</font> +<pre>% traceroute bad.horse +traceroute to bad.horse (<font color="#000000">162.252</font>.<font color="#000000">205.157</font>), <font color="#000000">30</font> hops max, <font color="#000000">60</font> byte packets + <font color="#000000">1</font> dsldevice.lan (<font color="#000000">192.168</font>.<font color="#000000">1.1</font>) <font color="#000000">5.712</font> ms <font color="#000000">5.800</font> ms <font color="#000000">6.466</font> ms + <font color="#000000">2</font> <font color="#000000">87</font>-<font color="#000000">243</font>-<font color="#000000">116</font>-<font color="#000000">2</font>.ip.btc-net.<b><u><font color="#000000">bg</font></u></b> (<font color="#000000">87.243</font>.<font color="#000000">116.2</font>) <font color="#000000">8.017</font> ms <font color="#000000">7.506</font> ms <font color="#000000">8.432</font> ms + <font color="#000000">3</font> * * * + <font color="#000000">4</font> * * * + <font color="#000000">5</font> xe-<font color="#000000">1</font>-<font color="#000000">2</font>-<font color="#000000">0</font>.mpr1.fra4.de.above.net (<font color="#000000">80.81</font>.<font color="#000000">194.26</font>) <font color="#000000">39.952</font> ms <font color="#000000">40.155</font> ms <font color="#000000">40.139</font> ms + <font color="#000000">6</font> ae12.cs1.fra6.de.eth.zayo.com (<font color="#000000">64.125</font>.<font color="#000000">26.172</font>) <font color="#000000">128.014</font> ms * * + <font color="#000000">7</font> * * * + <font color="#000000">8</font> * * * + <font color="#000000">9</font> ae10.cs1.lhr15.uk.eth.zayo.com (<font color="#000000">64.125</font>.<font color="#000000">29.17</font>) <font color="#000000">120.625</font> ms <font color="#000000">121.117</font> ms <font color="#000000">121.050</font> ms +<font color="#000000">10</font> * * * +<font color="#000000">11</font> * * * +<font color="#000000">12</font> * * * +<font color="#000000">13</font> ae5.mpr1.tor3.ca.zip.zayo.com (<font color="#000000">64.125</font>.<font color="#000000">23.118</font>) <font color="#000000">192.605</font> ms <font color="#000000">205.741</font> ms <font color="#000000">203.607</font> ms +<font color="#000000">14</font> <font color="#000000">64.124</font>.<font color="#000000">217.237</font>.IDIA-<font color="#000000">265104</font>-ZYO.zip.zayo.com (<font color="#000000">64.124</font>.<font color="#000000">217.237</font>) <font color="#000000">204.673</font> ms <font color="#000000">134.674</font> ms <font color="#000000">131.442</font> ms +<font color="#000000">15</font> * * * +<font color="#000000">16</font> <font color="#000000">67.223</font>.<font color="#000000">96.90</font> (<font color="#000000">67.223</font>.<font color="#000000">96.90</font>) <font color="#000000">128.245</font> ms <font color="#000000">127.844</font> ms <font color="#000000">127.843</font> ms +<font color="#000000">17</font> bad.horse (<font color="#000000">162.252</font>.<font color="#000000">205.130</font>) <font color="#000000">128.194</font> ms <font color="#000000">122.854</font> ms <font color="#000000">121.786</font> ms +<font color="#000000">18</font> bad.horse (<font color="#000000">162.252</font>.<font color="#000000">205.131</font>) <font color="#000000">128.831</font> ms <font color="#000000">128.341</font> ms <font color="#000000">186.559</font> ms +<font color="#000000">19</font> bad.horse (<font color="#000000">162.252</font>.<font color="#000000">205.132</font>) <font color="#000000">185.716</font> ms <font color="#000000">180.121</font> ms <font color="#000000">180.042</font> ms +<font color="#000000">20</font> bad.horse (<font color="#000000">162.252</font>.<font color="#000000">205.133</font>) <font color="#000000">203.170</font> ms <font color="#000000">203.076</font> ms <font color="#000000">203.168</font> ms +<font color="#000000">21</font> he.rides.across.the.nation (<font color="#000000">162.252</font>.<font color="#000000">205.134</font>) <font color="#000000">203.115</font> ms <font color="#000000">141.830</font> ms <font color="#000000">141.799</font> ms +<font color="#000000">22</font> the.thoroughbred.of.sin (<font color="#000000">162.252</font>.<font color="#000000">205.135</font>) <font color="#000000">147.965</font> ms <font color="#000000">148.230</font> ms <font color="#000000">170.478</font> ms +<font color="#000000">23</font> he.got.the.application (<font color="#000000">162.252</font>.<font color="#000000">205.136</font>) <font color="#000000">165.161</font> ms <font color="#000000">164.939</font> ms <font color="#000000">159.085</font> ms +<font color="#000000">24</font> that.you.just.sent.<b><u><font color="#000000">in</font></u></b> (<font color="#000000">162.252</font>.<font color="#000000">205.137</font>) <font color="#000000">162.310</font> ms <font color="#000000">158.569</font> ms <font color="#000000">158.896</font> ms +<font color="#000000">25</font> it.needs.evaluation (<font color="#000000">162.252</font>.<font color="#000000">205.138</font>) <font color="#000000">162.927</font> ms <font color="#000000">163.046</font> ms <font color="#000000">163.085</font> ms +<font color="#000000">26</font> so.<b><u><font color="#000000">let</font></u></b>.the.games.begin (<font color="#000000">162.252</font>.<font color="#000000">205.139</font>) <font color="#000000">233.363</font> ms <font color="#000000">233.545</font> ms <font color="#000000">233.317</font> ms +<font color="#000000">27</font> a.heinous.crime (<font color="#000000">162.252</font>.<font color="#000000">205.140</font>) <font color="#000000">237.745</font> ms <font color="#000000">233.614</font> ms <font color="#000000">233.740</font> ms +<font color="#000000">28</font> a.show.of.force (<font color="#000000">162.252</font>.<font color="#000000">205.141</font>) <font color="#000000">237.974</font> ms <font color="#000000">176.085</font> ms <font color="#000000">175.927</font> ms +<font color="#000000">29</font> a.murder.would.be.nice.of.course (<font color="#000000">162.252</font>.<font color="#000000">205.142</font>) <font color="#000000">181.838</font> ms <font color="#000000">181.858</font> ms <font color="#000000">182.059</font> ms +<font color="#000000">30</font> bad.horse (<font color="#000000">162.252</font>.<font color="#000000">205.143</font>) <font color="#000000">187.731</font> ms <font color="#000000">187.416</font> ms <font color="#000000">187.532</font> ms </pre> <br /> <h2 style='display: inline' id='2-ascii-cinema'>2. ASCII cinema</h2><br /> @@ -1594,20 +1594,20 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ababab">#include</font><font color="#ff0000"> </font><font color="#bb00ff"><stdio.h></font> +<pre><b><u><font color="#000000">#include</font></u></b> <font color="#808080"><stdio.h></font> -<b><font color="#F35E1E">int</font></b><font color="#ff0000"> </font><font color="#7bc710">main</font><font color="#F3E651">(</font><b><font color="#F35E1E">void</font></b><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font> -<font color="#ff0000"> </font><b><font color="#F35E1E">int</font></b><font color="#ff0000"> array</font><font color="#F3E651">[</font><font color="#bb00ff">5</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">3</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">4</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font> +<b><font color="#000000">int</font></b> main(<b><font color="#000000">void</font></b>) { + <b><font color="#000000">int</font></b> array[<font color="#000000">5</font>] = { <font color="#000000">1</font>, <font color="#000000">2</font>, <font color="#000000">3</font>, <font color="#000000">4</font>, <font color="#000000">5</font> }; -<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">int</font></b><font color="#ff0000"> i </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">;</font><font color="#ff0000"> i </font><font color="#F3E651"><</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#F3E651">;</font><font color="#ff0000"> i</font><font color="#F3E651">++)</font> -<font color="#ff0000"> </font><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%d</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> array</font><font color="#F3E651">[</font><font color="#ff0000">i</font><font color="#F3E651">]);</font> + <b><u><font color="#000000">for</font></u></b> (<b><font color="#000000">int</font></b> i = <font color="#000000">0</font>; i < <font color="#000000">5</font>; i++) + printf(<font color="#808080">"%d</font>\n<font color="#808080">"</font>, array[i]); -<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">int</font></b><font color="#ff0000"> i </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">;</font><font color="#ff0000"> i </font><font color="#F3E651"><</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#F3E651">;</font><font color="#ff0000"> i</font><font color="#F3E651">++)</font> -<font color="#ff0000"> </font><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%d</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> i</font><font color="#F3E651">[</font><font color="#ff0000">array</font><font color="#F3E651">]);</font> + <b><u><font color="#000000">for</font></u></b> (<b><font color="#000000">int</font></b> i = <font color="#000000">0</font>; i < <font color="#000000">5</font>; i++) + printf(<font color="#808080">"%d</font>\n<font color="#808080">"</font>, i[array]); -<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">int</font></b><font color="#ff0000"> i </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">;</font><font color="#ff0000"> i </font><font color="#F3E651"><</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#F3E651">;</font><font color="#ff0000"> i</font><font color="#F3E651">++)</font> -<font color="#ff0000"> </font><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%d</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#F3E651">*(</font><font color="#ff0000">i </font><font color="#F3E651">+</font><font color="#ff0000"> array</font><font color="#F3E651">));</font> -<font color="#F3E651">}</font> + <b><u><font color="#000000">for</font></u></b> (<b><font color="#000000">int</font></b> i = <font color="#000000">0</font>; i < <font color="#000000">5</font>; i++) + printf(<font color="#808080">"%d</font>\n<font color="#808080">"</font>, *(i + array)); +} </pre> <br /> <h3 style='display: inline' id='5-variables-with-prefix-'>5. Variables with prefix <span class='inlinecode'>$</span></h3><br /> @@ -1618,20 +1618,20 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ababab">#include</font><font color="#ff0000"> </font><font color="#bb00ff"><stdio.h></font> +<pre><b><u><font color="#000000">#include</font></u></b> <font color="#808080"><stdio.h></font> -<b><font color="#F35E1E">int</font></b><font color="#ff0000"> </font><font color="#7bc710">main</font><font color="#F3E651">(</font><b><font color="#F35E1E">void</font></b><font color="#F3E651">)</font><font color="#ff0000"> </font><font color="#F3E651">{</font> -<font color="#ff0000"> </font><b><font color="#F35E1E">int</font></b><font color="#ff0000"> $array</font><font color="#F3E651">[</font><font color="#bb00ff">5</font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#F3E651">{</font><font color="#ff0000"> </font><font color="#bb00ff">1</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">3</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">4</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#ff0000"> </font><font color="#F3E651">}</font><font color="#F3E651">;</font> +<b><font color="#000000">int</font></b> main(<b><font color="#000000">void</font></b>) { + <b><font color="#000000">int</font></b> $array[<font color="#000000">5</font>] = { <font color="#000000">1</font>, <font color="#000000">2</font>, <font color="#000000">3</font>, <font color="#000000">4</font>, <font color="#000000">5</font> }; -<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">int</font></b><font color="#ff0000"> $i </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">;</font><font color="#ff0000"> $i </font><font color="#F3E651"><</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#F3E651">;</font><font color="#ff0000"> $i</font><font color="#F3E651">++)</font> -<font color="#ff0000"> </font><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%d</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> $array</font><font color="#F3E651">[</font><font color="#ff0000">$i</font><font color="#F3E651">]);</font> + <b><u><font color="#000000">for</font></u></b> (<b><font color="#000000">int</font></b> $i = <font color="#000000">0</font>; $i < <font color="#000000">5</font>; $i++) + printf(<font color="#808080">"%d</font>\n<font color="#808080">"</font>, $array[$i]); -<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">int</font></b><font color="#ff0000"> $i </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">;</font><font color="#ff0000"> $i </font><font color="#F3E651"><</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#F3E651">;</font><font color="#ff0000"> $i</font><font color="#F3E651">++)</font> -<font color="#ff0000"> </font><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%d</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> $i</font><font color="#F3E651">[</font><font color="#ff0000">$array</font><font color="#F3E651">]);</font> + <b><u><font color="#000000">for</font></u></b> (<b><font color="#000000">int</font></b> $i = <font color="#000000">0</font>; $i < <font color="#000000">5</font>; $i++) + printf(<font color="#808080">"%d</font>\n<font color="#808080">"</font>, $i[$array]); -<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> </font><font color="#F3E651">(</font><b><font color="#F35E1E">int</font></b><font color="#ff0000"> $i </font><font color="#F3E651">=</font><font color="#ff0000"> </font><font color="#bb00ff">0</font><font color="#F3E651">;</font><font color="#ff0000"> $i </font><font color="#F3E651"><</font><font color="#ff0000"> </font><font color="#bb00ff">5</font><font color="#F3E651">;</font><font color="#ff0000"> $i</font><font color="#F3E651">++)</font> -<font color="#ff0000"> </font><font color="#7bc710">printf</font><font color="#F3E651">(</font><font color="#bb00ff">"%d</font><font color="#ffffff">\n</font><font color="#bb00ff">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#F3E651">*(</font><font color="#ff0000">$i </font><font color="#F3E651">+</font><font color="#ff0000"> $array</font><font color="#F3E651">));</font> -<font color="#F3E651">}</font> + <b><u><font color="#000000">for</font></u></b> (<b><font color="#000000">int</font></b> $i = <font color="#000000">0</font>; $i < <font color="#000000">5</font>; $i++) + printf(<font color="#808080">"%d</font>\n<font color="#808080">"</font>, *($i + $array)); +} </pre> <br /> <h2 style='display: inline' id='6-object-oriented-shell-scripts-using-ksh'>6. Object oriented shell scripts using <span class='inlinecode'>ksh</span></h2><br /> @@ -1642,40 +1642,40 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="#ababab">#!/usr/bin/ksh93</font></i> -<font color="#ff0000"> </font> -<b><font color="#ffffff">typeset</font></b><font color="#ff0000"> -T </font><font color="#ff0000">Point_t</font><font color="#F3E651">=(</font> -<font color="#ff0000"> integer -h </font><font color="#bb00ff">'x coordinate'</font><font color="#ff0000"> </font><font color="#ff0000">x</font><font color="#F3E651">=</font><font color="#bb00ff">0</font> -<font color="#ff0000"> integer -h </font><font color="#bb00ff">'y coordinate'</font><font color="#ff0000"> </font><font color="#ff0000">y</font><font color="#F3E651">=</font><font color="#bb00ff">0</font> -<font color="#ff0000"> </font><b><font color="#ffffff">typeset</font></b><font color="#ff0000"> -h </font><font color="#bb00ff">'point color'</font><font color="#ff0000"> </font><font color="#ff0000">color</font><font color="#F3E651">=</font><font color="#bb00ff">"red"</font> - -<font color="#ff0000"> </font><font color="#7bc710">function getcolor </font><font color="#ff0000">{</font> -<font color="#ff0000"> print -r </font><font color="#ff0000">${_.color}</font> -<font color="#ff0000"> }</font> - -<font color="#ff0000"> </font><font color="#7bc710">function setcolor </font><font color="#ff0000">{</font> -<font color="#ff0000"> _</font><font color="#F3E651">.</font><font color="#ff0000">color</font><font color="#F3E651">=</font><font color="#ff0000">$1</font> -<font color="#ff0000"> }</font> - -<font color="#ff0000"> </font><font color="#7bc710">setxy()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> _</font><font color="#F3E651">.</font><font color="#ff0000">x</font><font color="#F3E651">=</font><font color="#ff0000">$1</font><font color="#F3E651">;</font><font color="#ff0000"> _</font><font color="#F3E651">.</font><font color="#ff0000">y</font><font color="#F3E651">=</font><font color="#ff0000">$2</font> -<font color="#ff0000"> }</font> - -<font color="#ff0000"> </font><font color="#7bc710">getxy()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> print -r </font><font color="#bb00ff">"(${_.x},${_.y})"</font> -<font color="#ff0000"> }</font> -<font color="#F3E651">)</font> -<font color="#ff0000"> </font> -<font color="#ff0000">Point_t point</font> -<font color="#ff0000"> </font> -<font color="#ff0000">echo </font><font color="#bb00ff">"Initial coordinates are (${point.x},${point.y}). Color is ${point.color}"</font> -<font color="#ff0000"> </font> -<font color="#ff0000">point</font><font color="#F3E651">.</font><font color="#ff0000">setxy </font><font color="#bb00ff">5</font><font color="#ff0000"> </font><font color="#bb00ff">6</font> -<font color="#ff0000">point</font><font color="#F3E651">.</font><font color="#ff0000">setcolor blue</font> -<font color="#ff0000"> </font> -<font color="#ff0000">echo </font><font color="#bb00ff">"New coordinates are ${point.getxy}. Color is ${point.getcolor}"</font> -<font color="#ff0000"> </font> -<b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">0</font> +<pre><i><font color="silver">#!/usr/bin/ksh93</font></i> + +<b><u><font color="#000000">typeset</font></u></b> -T Point_t=( + integer -h <font color="#808080">'x coordinate'</font> x=<font color="#000000">0</font> + integer -h <font color="#808080">'y coordinate'</font> y=<font color="#000000">0</font> + <b><u><font color="#000000">typeset</font></u></b> -h <font color="#808080">'point color'</font> color=<font color="#808080">"red"</font> + + function getcolor { + print -r ${_.color} + } + + function setcolor { + _.color=$1 + } + + setxy() { + _.x=$1; _.y=$2 + } + + getxy() { + print -r <font color="#808080">"(${_.x},${_.y})"</font> + } +) + +Point_t point + +echo <font color="#808080">"Initial coordinates are (${point.x},${point.y}). Color is ${point.color}"</font> + +point.setxy <font color="#000000">5</font> <font color="#000000">6</font> +point.setcolor blue + +echo <font color="#808080">"New coordinates are ${point.getxy}. Color is ${point.getcolor}"</font> + +<b><u><font color="#000000">exit</font></u></b> <font color="#000000">0</font> </pre> <br /> <a class='textlink' href='https://blog.fpmurphy.com/2010/05/ksh93-using-types-to-create-object-orientated-scripts.html'>Using types to create object oriented Korn shell 93 scripts</a><br /> @@ -1688,18 +1688,18 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><b><font color="#ffffff">package</font></b><font color="#ff0000"> main</font> +<pre><b><u><font color="#000000">package</font></u></b> main -<b><font color="#ffffff">import</font></b><font color="#ff0000"> </font><font color="#bb00ff">"fmt"</font> +<b><u><font color="#000000">import</font></u></b> <font color="#808080">"fmt"</font> -<b><font color="#ffffff">func</font></b><font color="#ff0000"> </font><font color="#7bc710">main</font><font color="#F3E651">()</font><font color="#ff0000"> </font><font color="#F3E651">{</font> -<font color="#ff0000"> </font><b><font color="#ffffff">var</font></b><font color="#ff0000"> i int</font> -<font color="#ff0000"> f </font><font color="#F3E651">:=</font><font color="#ff0000"> </font><b><font color="#ffffff">func</font></b><font color="#F3E651">()</font><font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#ff0000">int </font><font color="#F3E651">{</font> -<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#F3E651">&</font><font color="#ff0000">i</font> -<font color="#ff0000"> </font><font color="#F3E651">}</font> -<font color="#ff0000"> </font><font color="#F3E651">*</font><font color="#7bc710">f</font><font color="#F3E651">()++</font> -<font color="#ff0000"> fmt</font><font color="#F3E651">.</font><font color="#7bc710">Println</font><font color="#F3E651">(</font><font color="#ff0000">i</font><font color="#F3E651">)</font> -<font color="#F3E651">}</font> +<b><u><font color="#000000">func</font></u></b> main() { + <b><u><font color="#000000">var</font></u></b> i int + f := <b><u><font color="#000000">func</font></u></b>() *int { + <b><u><font color="#000000">return</font></u></b> &i + } + *f()++ + fmt.Println(i) +} </pre> <br /> <a class='textlink' href='https://go.dev/play/p/sPRdyDvXefK?__s=mk8u899owb9yurl256gw'>Go playground</a><br /> @@ -1950,13 +1950,13 @@ jgs `-=========-`() by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">tm</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font> -<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">tl</font><font color="#F3E651">=</font><font color="#bb00ff">'tmux list-sessions'</font> -<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">tn</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">new</font> -<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">ta</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">attach</font> -<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">tx</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">remote</font> -<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">ts</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">search</font> -<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">tssh</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">cluster_ssh</font> +<pre><b><u><font color="#000000">alias</font></u></b> tm=tmux +<b><u><font color="#000000">alias</font></u></b> tl=<font color="#808080">'tmux list-sessions'</font> +<b><u><font color="#000000">alias</font></u></b> tn=tmux::new +<b><u><font color="#000000">alias</font></u></b> ta=tmux::attach +<b><u><font color="#000000">alias</font></u></b> tx=tmux::remote +<b><u><font color="#000000">alias</font></u></b> ts=tmux::search +<b><u><font color="#000000">alias</font></u></b> tssh=tmux::cluster_ssh </pre> <br /> <span>Note all <span class='inlinecode'>tmux::...</span>; those are custom shell functions doing certain things, and they aren't part of the Tmux distribution. But let's run through every aliases one by one. </span><br /> @@ -1971,23 +1971,23 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="#ababab"># Create new session and if alread exists attach to it</font></i> -<font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#7bc710">new ()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> </font><b><font color="#ffffff">readonly</font></b><font color="#ff0000"> </font><font color="#ff0000">session</font><font color="#F3E651">=</font><font color="#ff0000">$1</font> -<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">date</font><font color="#F3E651">=</font><font color="#ff0000">date</font> -<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> where gdate </font><font color="#F3E651">&></font><font color="#ff0000">/dev/null</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> </font><font color="#ff0000">date</font><font color="#F3E651">=</font><font color="#ff0000">gdate</font> -<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b> - -<font color="#ff0000"> tmux</font><font color="#F3E651">::</font><font color="#ff0000">cleanup_default</font> -<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -z </font><font color="#bb00ff">"$session"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> tmux</font><font color="#F3E651">::</font><font color="#ff0000">new T</font><font color="#ff0000">$($date</font><font color="#ff0000"> </font><font color="#F3E651">+%</font><font color="#ff0000">s</font><font color="#F3E651">)</font> -<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b> -<font color="#ff0000"> tmux new-session -d -s </font><font color="#ff0000">$session</font> -<font color="#ff0000"> tmux -</font><font color="#bb00ff">2</font><font color="#ff0000"> attach-session -t </font><font color="#ff0000">$session</font><font color="#ff0000"> </font><font color="#F3E651">||</font><font color="#ff0000"> tmux -</font><font color="#bb00ff">2</font><font color="#ff0000"> switch-client -t </font><font color="#ff0000">$session</font> -<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b> -<font color="#ff0000">}</font> -<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">tn</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">new</font> +<pre><i><font color="silver"># Create new session and if alread exists attach to it</font></i> +tmux::new () { + <b><u><font color="#000000">readonly</font></u></b> session=$1 + <b><u><font color="#000000">local</font></u></b> date=date + <b><u><font color="#000000">if</font></u></b> where gdate &>/dev/null; <b><u><font color="#000000">then</font></u></b> + date=gdate + <b><u><font color="#000000">fi</font></u></b> + + tmux::cleanup_default + <b><u><font color="#000000">if</font></u></b> [ -z <font color="#808080">"$session"</font> ]; <b><u><font color="#000000">then</font></u></b> + tmux::new T$($date +%s) + <b><u><font color="#000000">else</font></u></b> + tmux new-session -d -s $session + tmux -<font color="#000000">2</font> attach-session -t $session || tmux -<font color="#000000">2</font> switch-client -t $session + <b><u><font color="#000000">fi</font></u></b> +} +<b><u><font color="#000000">alias</font></u></b> tn=tmux::new </pre> <br /> <span>There is a lot going on here. Let's have a detailed look at what it is doing. As a note, the function relies on GNU Date, so MacOS is looking for the <span class='inlinecode'>gdate</span> commands to be available. Otherwise, it will fall back to <span class='inlinecode'>date</span>. You need to install GNU Date for Mac, as it isn't installed by default there. As I use Fedora Linux on my personal Laptop and a MacBook for work, I have to make it work for both.</span><br /> @@ -2002,14 +2002,14 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#7bc710">cleanup_default ()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> s</font> -<font color="#ff0000"> tmux list-sessions </font><font color="#F3E651">|</font><font color="#ff0000"> grep </font><font color="#bb00ff">'^T.*: '</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> grep -F -v attached </font><font color="#F3E651">|</font> -<font color="#ff0000"> cut -d</font><font color="#F3E651">:</font><font color="#ff0000"> -f</font><font color="#bb00ff">1</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> </font><b><font color="#ffffff">while</font></b><font color="#ff0000"> </font><b><font color="#ffffff">read</font></b><font color="#ff0000"> -r s</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b> -<font color="#ff0000"> echo </font><font color="#bb00ff">"Killing $s"</font> -<font color="#ff0000"> tmux kill-session -t </font><font color="#bb00ff">"$s"</font> -<font color="#ff0000"> </font><b><font color="#ffffff">done</font></b> -<font color="#ff0000">}</font> +<pre>tmux::cleanup_default () { + <b><u><font color="#000000">local</font></u></b> s + tmux list-sessions | grep <font color="#808080">'^T.*: '</font> | grep -F -v attached | + cut -d: -f<font color="#000000">1</font> | <b><u><font color="#000000">while</font></u></b> <b><u><font color="#000000">read</font></u></b> -r s; <b><u><font color="#000000">do</font></u></b> + echo <font color="#808080">"Killing $s"</font> + tmux kill-session -t <font color="#808080">"$s"</font> + <b><u><font color="#000000">done</font></u></b> +} </pre> <br /> <span>The cleanup function kills all open Tmux sessions that haven't been renamed properly yet—but only if they aren't attached (e.g., don't run in the foreground in any terminal). Cleaning them up automatically keeps my Tmux sessions as neat and tidy as possible. </span><br /> @@ -2026,16 +2026,16 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#7bc710">attach ()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> </font><b><font color="#ffffff">readonly</font></b><font color="#ff0000"> </font><font color="#ff0000">session</font><font color="#F3E651">=</font><font color="#ff0000">$1</font> - -<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -z </font><font color="#bb00ff">"$session"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> tmux attach-session </font><font color="#F3E651">||</font><font color="#ff0000"> tmux</font><font color="#F3E651">::</font><font color="#ff0000">new</font> -<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b> -<font color="#ff0000"> tmux attach-session -t </font><font color="#ff0000">$session</font><font color="#ff0000"> </font><font color="#F3E651">||</font><font color="#ff0000"> tmux</font><font color="#F3E651">::</font><font color="#ff0000">new </font><font color="#ff0000">$session</font> -<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b> -<font color="#ff0000">}</font> -<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">ta</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">attach</font> +<pre>tmux::attach () { + <b><u><font color="#000000">readonly</font></u></b> session=$1 + + <b><u><font color="#000000">if</font></u></b> [ -z <font color="#808080">"$session"</font> ]; <b><u><font color="#000000">then</font></u></b> + tmux attach-session || tmux::new + <b><u><font color="#000000">else</font></u></b> + tmux attach-session -t $session || tmux::new $session + <b><u><font color="#000000">fi</font></u></b> +} +<b><u><font color="#000000">alias</font></u></b> ta=tmux::attach </pre> <br /> <span>If no session is specified (as the argument of the function), it will try to attach to the first open session. If no Tmux server is running, it will create a new one with <span class='inlinecode'>tmux::new</span>. Otherwise, with a session name given as the argument, it will attach to it. If unsuccessful (e.g., the session doesn't exist), it will be created and attached to.</span><br /> @@ -2048,12 +2048,12 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#7bc710">remote ()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> </font><b><font color="#ffffff">readonly</font></b><font color="#ff0000"> </font><font color="#ff0000">server</font><font color="#F3E651">=</font><font color="#ff0000">$1</font> -<font color="#ff0000"> tmux new -s </font><font color="#ff0000">$server</font><font color="#ff0000"> </font><font color="#bb00ff">"ssh -t $server 'tmux attach-session || tmux'"</font><font color="#ff0000"> </font><font color="#F3E651">||</font><font color="#ff0000"> </font><font color="#F3E651">\</font> -<font color="#ff0000"> tmux attach-session -d -t </font><font color="#ff0000">$server</font> -<font color="#ff0000">}</font> -<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">tr</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">remote</font> +<pre>tmux::remote () { + <b><u><font color="#000000">readonly</font></u></b> server=$1 + tmux new -s $server <font color="#808080">"ssh -t $server 'tmux attach-session || tmux'"</font> || \ + tmux attach-session -d -t $server +} +<b><u><font color="#000000">alias</font></u></b> tr=tmux::remote </pre> <br /> <h3 style='display: inline' id='change-of-the-tmux-prefix-for-better-nesting'>Change of the Tmux prefix for better nesting</h3><br /> @@ -2076,15 +2076,15 @@ set-option -g prefix C-g by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#7bc710">search ()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">session</font><font color="#F3E651">=</font><font color="#ff0000">$(</font><font color="#ff0000">tmux list-sessions </font><font color="#F3E651">|</font><font color="#ff0000"> fzf </font><font color="#F3E651">|</font><font color="#ff0000"> cut -d</font><font color="#F3E651">:</font><font color="#ff0000"> -f</font><font color="#bb00ff">1</font><font color="#F3E651">)</font> -<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -z </font><font color="#bb00ff">"$TMUX"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> tmux attach-session -t </font><font color="#ff0000">$session</font> -<font color="#ff0000"> </font><b><font color="#ffffff">else</font></b> -<font color="#ff0000"> tmux switch -t </font><font color="#ff0000">$session</font> -<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b> -<font color="#ff0000">}</font> -<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">ts</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">search</font> +<pre>tmux::search () { + <b><u><font color="#000000">local</font></u></b> -r session=$(tmux list-sessions | fzf | cut -d: -f<font color="#000000">1</font>) + <b><u><font color="#000000">if</font></u></b> [ -z <font color="#808080">"$TMUX"</font> ]; <b><u><font color="#000000">then</font></u></b> + tmux attach-session -t $session + <b><u><font color="#000000">else</font></u></b> + tmux switch -t $session + <b><u><font color="#000000">fi</font></u></b> +} +<b><u><font color="#000000">alias</font></u></b> ts=tmux::search </pre> <br /> <span>All it does is list all currently open sessions in <span class='inlinecode'>fzf</span>, where one of them can be searched and selected through fuzzy find, and then either switch (if already inside a session) to the other session or attach to the other session (if not yet in Tmux).</span><br /> @@ -2111,15 +2111,15 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#7bc710">cluster_ssh ()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -f </font><font color="#bb00ff">"$1"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> tmux</font><font color="#F3E651">::</font><font color="#ff0000">tssh_from_file </font><font color="#ff0000">$1</font> -<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b> -<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b> +<pre>tmux::cluster_ssh () { + <b><u><font color="#000000">if</font></u></b> [ -f <font color="#808080">"$1"</font> ]; <b><u><font color="#000000">then</font></u></b> + tmux::tssh_from_file $1 + <b><u><font color="#000000">return</font></u></b> + <b><u><font color="#000000">fi</font></u></b> -<font color="#ff0000"> tmux</font><font color="#F3E651">::</font><font color="#ff0000">tssh_from_argument </font><font color="#ff0000">$@</font> -<font color="#ff0000">}</font> -<b><font color="#ffffff">alias</font></b><font color="#ff0000"> </font><font color="#ff0000">tssh</font><font color="#F3E651">=</font><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#ff0000">cluster_ssh</font> + tmux::tssh_from_argument $@ +} +<b><u><font color="#000000">alias</font></u></b> tssh=tmux::cluster_ssh </pre> <br /> <span>This function is just a wrapper around the more complex <span class='inlinecode'>tmux::tssh_from_file</span> and <span class='inlinecode'>tmux::tssh_from_argument</span> functions, as you have learned already. Most of the magic happens there.</span><br /> @@ -2132,23 +2132,23 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#7bc710">tssh_from_argument ()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">session</font><font color="#F3E651">=</font><font color="#ff0000">$1</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b> -<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">first_server</font><font color="#F3E651">=</font><font color="#ff0000">$1</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b> - -<font color="#ff0000"> tmux new-session -d -s </font><font color="#ff0000">$session</font><font color="#ff0000"> </font><font color="#bb00ff">"ssh -t $first_server"</font> -<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> tmux list-session </font><font color="#F3E651">|</font><font color="#ff0000"> grep </font><font color="#bb00ff">"^$session:"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> echo </font><font color="#bb00ff">"Could not create session $session"</font> -<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#bb00ff">2</font> -<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b> - -<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> server </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> </font><font color="#bb00ff">"${@[@]}"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b> -<font color="#ff0000"> tmux split-window -t </font><font color="#ff0000">$session</font><font color="#ff0000"> </font><font color="#bb00ff">"tmux select-layout tiled; ssh -t $server"</font> -<font color="#ff0000"> </font><b><font color="#ffffff">done</font></b> - -<font color="#ff0000"> tmux setw -t </font><font color="#ff0000">$session</font><font color="#ff0000"> synchronize-panes on</font> -<font color="#ff0000"> tmux -</font><font color="#bb00ff">2</font><font color="#ff0000"> attach-session -t </font><font color="#ff0000">$session</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> tmux -</font><font color="#bb00ff">2</font><font color="#ff0000"> switch-client -t </font><font color="#ff0000">$session</font> -<font color="#ff0000">}</font> +<pre>tmux::tssh_from_argument () { + <b><u><font color="#000000">local</font></u></b> -r session=$1; <b><u><font color="#000000">shift</font></u></b> + <b><u><font color="#000000">local</font></u></b> first_server=$1; <b><u><font color="#000000">shift</font></u></b> + + tmux new-session -d -s $session <font color="#808080">"ssh -t $first_server"</font> + <b><u><font color="#000000">if</font></u></b> ! tmux list-session | grep <font color="#808080">"^$session:"</font>; <b><u><font color="#000000">then</font></u></b> + echo <font color="#808080">"Could not create session $session"</font> + <b><u><font color="#000000">return</font></u></b> <font color="#000000">2</font> + <b><u><font color="#000000">fi</font></u></b> + + <b><u><font color="#000000">for</font></u></b> server <b><u><font color="#000000">in</font></u></b> <font color="#808080">"${@[@]}"</font>; <b><u><font color="#000000">do</font></u></b> + tmux split-window -t $session <font color="#808080">"tmux select-layout tiled; ssh -t $server"</font> + <b><u><font color="#000000">done</font></u></b> + + tmux setw -t $session synchronize-panes on + tmux -<font color="#000000">2</font> attach-session -t $session | tmux -<font color="#000000">2</font> switch-client -t $session +} </pre> <br /> <span>It expects at least two arguments. The first argument is the session name to create for the clustered SSH session. All other arguments are server hostnames or FQDNs to which to connect. The first one is used to make the initial session. All remaining ones are added to that session with <span class='inlinecode'>tmux split-window -t $session...</span>. At the end, we enable synchronized panes by default, so whenever you type, the commands will be sent to every SSH connection, thus allowing the neat ClusterSSH feature to run commands on multiple servers simultaneously. Once done, we attach (or switch, if already in Tmux) to it.</span><br /> @@ -2168,12 +2168,12 @@ bind-key P setw synchronize-panes on by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">tmux</font><font color="#F3E651">::</font><font color="#7bc710">tssh_from_file ()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">serverlist</font><font color="#F3E651">=</font><font color="#ff0000">$1</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b> -<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">session</font><font color="#F3E651">=</font><font color="#ff0000">$(</font><font color="#ff0000">basename </font><font color="#ff0000">$serverlist</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> cut -d</font><font color="#F3E651">.</font><font color="#ff0000"> -f</font><font color="#bb00ff">1</font><font color="#F3E651">)</font> +<pre>tmux::tssh_from_file () { + <b><u><font color="#000000">local</font></u></b> -r serverlist=$1; <b><u><font color="#000000">shift</font></u></b> + <b><u><font color="#000000">local</font></u></b> -r session=$(basename $serverlist | cut -d. -f<font color="#000000">1</font>) -<font color="#ff0000"> tmux</font><font color="#F3E651">::</font><font color="#ff0000">tssh_from_argument </font><font color="#ff0000">$session</font><font color="#ff0000"> </font><font color="#ff0000">$(</font><font color="#ff0000">awk </font><font color="#bb00ff">'{ print $1} '</font><font color="#ff0000"> </font><font color="#ff0000">$serverlist</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> sed </font><font color="#bb00ff">'s/.lan./.lan/g'</font><font color="#F3E651">)</font> -<font color="#ff0000">}</font> + tmux::tssh_from_argument $session $(awk <font color="#808080">'{ print $1} '</font> $serverlist | sed <font color="#808080">'s/.lan./.lan/g'</font>) +} </pre> <br /> <h3 style='display: inline' id='tssh-examples'><span class='inlinecode'>tssh</span> examples</h3><br /> @@ -2521,12 +2521,12 @@ Art by Laura Brown by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">Cluster </font><font color="#F3E651">:</font><font color="#ff0000">UK</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#F3E651">:</font><font color="#ff0000">uk01 </font><b><font color="#ffffff">do</font></b> -<font color="#ff0000"> Customer</font><font color="#F3E651">.</font><font color="#ff0000">C1A1</font><font color="#F3E651">.</font><font color="#ff0000">segments</font><font color="#F3E651">.</font><font color="#ff0000">volumes</font><font color="#F3E651">.</font><font color="#ff0000">each </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000">volume</font><font color="#F3E651">|</font> -<font color="#ff0000"> puts volume</font><font color="#F3E651">.</font><font color="#ff0000">usage_stats</font> -<font color="#ff0000"> volume</font><font color="#F3E651">.</font><font color="#ff0000">move_off! </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> volume</font><font color="#F3E651">.</font><font color="#ff0000">over_subscribed?</font> -<font color="#ff0000"> </font><b><font color="#ffffff">end</font></b> -<b><font color="#ffffff">end</font></b> +<pre>Cluster :UK, :uk01 <b><u><font color="#000000">do</font></u></b> + Customer.C1A1.segments.volumes.each <b><u><font color="#000000">do</font></u></b> |volume| + puts volume.usage_stats + volume.move_off! <b><u><font color="#000000">if</font></u></b> volume.over_subscribed? + <b><u><font color="#000000">end</font></u></b> +<b><u><font color="#000000">end</font></u></b> </pre> <br /> <span>I am abandoning this project because my workplace has stopped the annual pet project competition, and I have other more important projects to work on at the moment.</span><br /> @@ -2900,38 +2900,38 @@ _____|_:_:_| (o)-(o) |_:_:_|--'`-. ,--. ksh under-water (((\'/ by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="#ababab">#!/bin/ksh</font></i> - -<font color="#ff0000">ZONES_DIR</font><font color="#F3E651">=</font><font color="#ff0000">/var/nsd/zones/master</font><font color="#F3E651">/</font> -<font color="#ff0000">DEFAULT_MASTER</font><font color="#F3E651">=</font><font color="#ff0000">fishfinger</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font> -<font color="#ff0000">DEFAULT_STANDBY</font><font color="#F3E651">=</font><font color="#ff0000">blowfish</font><font color="#F3E651">.</font><font color="#ff0000">buetow</font><font color="#F3E651">.</font><font color="#ff0000">org</font> - -<font color="#7bc710">determine_master_and_standby ()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">master</font><font color="#F3E651">=</font><font color="#ff0000">$DEFAULT_MASTER</font> -<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">standby</font><font color="#F3E651">=</font><font color="#ff0000">$DEFAULT_STANDBY</font> - -<font color="#ff0000"> </font><font color="#F3E651">.</font> -<font color="#ff0000"> </font><font color="#F3E651">.</font> -<font color="#ff0000"> </font><font color="#F3E651">.</font> -<font color="#ff0000"> </font> -<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -i </font><font color="#ff0000">health_ok</font><font color="#F3E651">=</font><font color="#bb00ff">1</font> -<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> ftp -</font><font color="#bb00ff">4</font><font color="#ff0000"> -o - https</font><font color="#F3E651">://</font><font color="#ff0000">$master</font><font color="#ff0000">/index</font><font color="#F3E651">.</font><font color="#ff0000">txt </font><font color="#F3E651">|</font><font color="#ff0000"> grep -q </font><font color="#bb00ff">"Welcome to $master"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> echo </font><font color="#bb00ff">"https://$master/index.txt IPv4 health check failed"</font> -<font color="#ff0000"> </font><font color="#ff0000">health_ok</font><font color="#F3E651">=</font><font color="#bb00ff">0</font> -<font color="#ff0000"> </font><b><font color="#ffffff">elif</font></b><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> ftp -</font><font color="#bb00ff">6</font><font color="#ff0000"> -o - https</font><font color="#F3E651">://</font><font color="#ff0000">$master</font><font color="#ff0000">/index</font><font color="#F3E651">.</font><font color="#ff0000">txt </font><font color="#F3E651">|</font><font color="#ff0000"> grep -q </font><font color="#bb00ff">"Welcome to $master"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> echo </font><font color="#bb00ff">"https://$master/index.txt IPv6 health check failed"</font> -<font color="#ff0000"> </font><font color="#ff0000">health_ok</font><font color="#F3E651">=</font><font color="#bb00ff">0</font> -<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b> -<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#ff0000">$health_ok</font><font color="#ff0000"> -eq </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">tmp</font><font color="#F3E651">=</font><font color="#ff0000">$master</font> -<font color="#ff0000"> </font><font color="#ff0000">master</font><font color="#F3E651">=</font><font color="#ff0000">$standby</font> -<font color="#ff0000"> </font><font color="#ff0000">standby</font><font color="#F3E651">=</font><font color="#ff0000">$tmp</font> -<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b> - -<font color="#ff0000"> </font><font color="#F3E651">.</font> -<font color="#ff0000"> </font><font color="#F3E651">.</font> -<font color="#ff0000"> </font><font color="#F3E651">.</font> -<font color="#ff0000">}</font> +<pre><i><font color="silver">#!/bin/ksh</font></i> + +ZONES_DIR=/var/nsd/zones/master/ +DEFAULT_MASTER=fishfinger.buetow.org +DEFAULT_STANDBY=blowfish.buetow.org + +determine_master_and_standby () { + <b><u><font color="#000000">local</font></u></b> master=$DEFAULT_MASTER + <b><u><font color="#000000">local</font></u></b> standby=$DEFAULT_STANDBY + + . + . + . + + <b><u><font color="#000000">local</font></u></b> -i health_ok=<font color="#000000">1</font> + <b><u><font color="#000000">if</font></u></b> ! ftp -<font color="#000000">4</font> -o - https://$master/index.txt | grep -q <font color="#808080">"Welcome to $master"</font>; <b><u><font color="#000000">then</font></u></b> + echo <font color="#808080">"https://$master/index.txt IPv4 health check failed"</font> + health_ok=<font color="#000000">0</font> + <b><u><font color="#000000">elif</font></u></b> ! ftp -<font color="#000000">6</font> -o - https://$master/index.txt | grep -q <font color="#808080">"Welcome to $master"</font>; <b><u><font color="#000000">then</font></u></b> + echo <font color="#808080">"https://$master/index.txt IPv6 health check failed"</font> + health_ok=<font color="#000000">0</font> + <b><u><font color="#000000">fi</font></u></b> + <b><u><font color="#000000">if</font></u></b> [ $health_ok -eq <font color="#000000">0</font> ]; <b><u><font color="#000000">then</font></u></b> + <b><u><font color="#000000">local</font></u></b> tmp=$master + master=$standby + standby=$tmp + <b><u><font color="#000000">fi</font></u></b> + + . + . + . +} </pre> <br /> <span>The failover scripts looks for the <span class='inlinecode'> ; Enable failover</span> string in the DNS zone files and swaps the <span class='inlinecode'>A</span> and <span class='inlinecode'>AAAA</span> records of the DNS entries accordingly:</span><br /> @@ -2940,42 +2940,42 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">fishfinger$ grep failover /var/nsd/zones/master/foo</font><font color="#F3E651">.</font><font color="#ff0000">zone</font><font color="#F3E651">.</font><font color="#ff0000">zone</font> -<font color="#ff0000"> </font><font color="#bb00ff">300</font><font color="#ff0000"> IN A </font><font color="#bb00ff">46.23</font><font color="#F3E651">.</font><font color="#bb00ff">94.99</font><font color="#ff0000"> </font><font color="#F3E651">;</font><font color="#ff0000"> Enable failover</font> -<font color="#ff0000"> </font><font color="#bb00ff">300</font><font color="#ff0000"> IN AAAA 2a03</font><font color="#F3E651">:</font><font color="#bb00ff">6000</font><font color="#F3E651">:</font><font color="#ff0000">6f67</font><font color="#F3E651">:</font><font color="#bb00ff">624</font><font color="#F3E651">::</font><font color="#bb00ff">99</font><font color="#ff0000"> </font><font color="#F3E651">;</font><font color="#ff0000"> Enable failover</font> -<font color="#ff0000">www </font><font color="#bb00ff">300</font><font color="#ff0000"> IN A </font><font color="#bb00ff">46.23</font><font color="#F3E651">.</font><font color="#bb00ff">94.99</font><font color="#ff0000"> </font><font color="#F3E651">;</font><font color="#ff0000"> Enable failover</font> -<font color="#ff0000">www </font><font color="#bb00ff">300</font><font color="#ff0000"> IN AAAA 2a03</font><font color="#F3E651">:</font><font color="#bb00ff">6000</font><font color="#F3E651">:</font><font color="#ff0000">6f67</font><font color="#F3E651">:</font><font color="#bb00ff">624</font><font color="#F3E651">::</font><font color="#bb00ff">99</font><font color="#ff0000"> </font><font color="#F3E651">;</font><font color="#ff0000"> Enable failover</font> -<font color="#ff0000">standby </font><font color="#bb00ff">300</font><font color="#ff0000"> IN A </font><font color="#bb00ff">23.88</font><font color="#F3E651">.</font><font color="#bb00ff">35.144</font><font color="#ff0000"> </font><font color="#F3E651">;</font><font color="#ff0000"> Enable failover</font> -<font color="#ff0000">standby </font><font color="#bb00ff">300</font><font color="#ff0000"> IN AAAA 2a01</font><font color="#F3E651">:</font><font color="#ff0000">4f8</font><font color="#F3E651">:</font><font color="#ff0000">c17</font><font color="#F3E651">:</font><font color="#ff0000">20f1</font><font color="#F3E651">::</font><font color="#bb00ff">42</font><font color="#ff0000"> </font><font color="#F3E651">;</font><font color="#ff0000"> Enable failover</font> +<pre>fishfinger$ grep failover /var/nsd/zones/master/foo.zone.zone + <font color="#000000">300</font> IN A <font color="#000000">46.23</font>.<font color="#000000">94.99</font> ; Enable failover + <font color="#000000">300</font> IN AAAA 2a03:<font color="#000000">6000</font>:6f67:<font color="#000000">624</font>::<font color="#000000">99</font> ; Enable failover +www <font color="#000000">300</font> IN A <font color="#000000">46.23</font>.<font color="#000000">94.99</font> ; Enable failover +www <font color="#000000">300</font> IN AAAA 2a03:<font color="#000000">6000</font>:6f67:<font color="#000000">624</font>::<font color="#000000">99</font> ; Enable failover +standby <font color="#000000">300</font> IN A <font color="#000000">23.88</font>.<font color="#000000">35.144</font> ; Enable failover +standby <font color="#000000">300</font> IN AAAA 2a01:4f8:c17:20f1::<font color="#000000">42</font> ; Enable failover </pre> <br /> <!-- Generator: GNU source-highlight 3.1.9 by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#7bc710">transform ()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> sed -E </font><font color="#bb00ff">'</font> -<font color="#bb00ff"> /IN A .*; Enable failover/ {</font> -<font color="#bb00ff"> /^standby/! {</font> -<font color="#bb00ff"> s/^(.*) 300 IN A (.*) ; (.*)/</font><font color="#ffffff">\1</font><font color="#bb00ff"> 300 IN A '</font><font color="#ff0000">$(</font><font color="#ff0000">cat /var/nsd/run/master_a</font><font color="#F3E651">)</font><font color="#bb00ff">' ; </font><font color="#ffffff">\3</font><font color="#bb00ff">/;</font> -<font color="#bb00ff"> }</font> -<font color="#bb00ff"> /^standby/ {</font> -<font color="#bb00ff"> s/^(.*) 300 IN A (.*) ; (.*)/</font><font color="#ffffff">\1</font><font color="#bb00ff"> 300 IN A '</font><font color="#ff0000">$(</font><font color="#ff0000">cat /var/nsd/run/standby_a</font><font color="#F3E651">)</font><font color="#bb00ff">' ; </font><font color="#ffffff">\3</font><font color="#bb00ff">/;</font> -<font color="#bb00ff"> }</font> -<font color="#bb00ff"> }</font> -<font color="#bb00ff"> /IN AAAA .*; Enable failover/ {</font> -<font color="#bb00ff"> /^standby/! {</font> -<font color="#bb00ff"> s/^(.*) 300 IN AAAA (.*) ; (.*)/</font><font color="#ffffff">\1</font><font color="#bb00ff"> 300 IN AAAA '</font><font color="#ff0000">$(</font><font color="#ff0000">cat /var/nsd/run/master_aaaa</font><font color="#F3E651">)</font><font color="#bb00ff">' ; </font><font color="#ffffff">\3</font><font color="#bb00ff">/;</font> -<font color="#bb00ff"> }</font> -<font color="#bb00ff"> /^standby/ {</font> -<font color="#bb00ff"> s/^(.*) 300 IN AAAA (.*) ; (.*)/</font><font color="#ffffff">\1</font><font color="#bb00ff"> 300 IN AAAA '</font><font color="#ff0000">$(</font><font color="#ff0000">cat /var/nsd/run/standby_aaaa</font><font color="#F3E651">)</font><font color="#bb00ff">' ; </font><font color="#ffffff">\3</font><font color="#bb00ff">/;</font> -<font color="#bb00ff"> }</font> -<font color="#bb00ff"> }</font> -<font color="#bb00ff"> / ; serial/ {</font> -<font color="#bb00ff"> s/^( +) ([0-9]+) .*; (.*)/</font><font color="#ffffff">\1</font><font color="#bb00ff"> '</font><font color="#ff0000">$(</font><font color="#ff0000">date </font><font color="#F3E651">+%</font><font color="#ff0000">s</font><font color="#F3E651">)</font><font color="#bb00ff">' ; </font><font color="#ffffff">\3</font><font color="#bb00ff">/;</font> -<font color="#bb00ff"> }</font> -<font color="#bb00ff"> '</font> -<font color="#ff0000">}</font> +<pre>transform () { + sed -E <font color="#808080">'</font> +<font color="#808080"> /IN A .*; Enable failover/ {</font> +<font color="#808080"> /^standby/! {</font> +<font color="#808080"> s/^(.*) 300 IN A (.*) ; (.*)/</font>\1<font color="#808080"> 300 IN A '</font>$(cat /var/nsd/run/master_a)<font color="#808080">' ; </font>\3<font color="#808080">/;</font> +<font color="#808080"> }</font> +<font color="#808080"> /^standby/ {</font> +<font color="#808080"> s/^(.*) 300 IN A (.*) ; (.*)/</font>\1<font color="#808080"> 300 IN A '</font>$(cat /var/nsd/run/standby_a)<font color="#808080">' ; </font>\3<font color="#808080">/;</font> +<font color="#808080"> }</font> +<font color="#808080"> }</font> +<font color="#808080"> /IN AAAA .*; Enable failover/ {</font> +<font color="#808080"> /^standby/! {</font> +<font color="#808080"> s/^(.*) 300 IN AAAA (.*) ; (.*)/</font>\1<font color="#808080"> 300 IN AAAA '</font>$(cat /var/nsd/run/master_aaaa)<font color="#808080">' ; </font>\3<font color="#808080">/;</font> +<font color="#808080"> }</font> +<font color="#808080"> /^standby/ {</font> +<font color="#808080"> s/^(.*) 300 IN AAAA (.*) ; (.*)/</font>\1<font color="#808080"> 300 IN AAAA '</font>$(cat /var/nsd/run/standby_aaaa)<font color="#808080">' ; </font>\3<font color="#808080">/;</font> +<font color="#808080"> }</font> +<font color="#808080"> }</font> +<font color="#808080"> / ; serial/ {</font> +<font color="#808080"> s/^( +) ([0-9]+) .*; (.*)/</font>\1<font color="#808080"> '</font>$(date +%s)<font color="#808080">' ; </font>\3<font color="#808080">/;</font> +<font color="#808080"> }</font> +<font color="#808080"> '</font> +} </pre> <br /> <span>After the failover, the script reloads <span class='inlinecode'>nsd</span> and performs a sanity check to see if DNS still works. If not, a rollback will be performed:</span><br /> @@ -2984,48 +2984,48 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="#ababab">#! Race condition !#</font></i> -<font color="#ff0000"> </font> -<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -f </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">bak </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> mv </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">bak </font><font color="#ff0000">$zone_file</font> -<b><font color="#ffffff">fi</font></b> - -<font color="#ff0000">cat </font><font color="#ff0000">$zone_file</font><font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> transform </font><font color="#F3E651">></font><font color="#ff0000"> </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">new</font><font color="#F3E651">.</font><font color="#ff0000">tmp </font> - -<font color="#ff0000">grep -v </font><font color="#bb00ff">' ; serial'</font><font color="#ff0000"> </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">new</font><font color="#F3E651">.</font><font color="#ff0000">tmp </font><font color="#F3E651">></font><font color="#ff0000"> </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">new</font><font color="#F3E651">.</font><font color="#ff0000">noserial</font><font color="#F3E651">.</font><font color="#ff0000">tmp</font> -<font color="#ff0000">grep -v </font><font color="#bb00ff">' ; serial'</font><font color="#ff0000"> </font><font color="#ff0000">$zone_file</font><font color="#ff0000"> </font><font color="#F3E651">></font><font color="#ff0000"> </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">old</font><font color="#F3E651">.</font><font color="#ff0000">noserial</font><font color="#F3E651">.</font><font color="#ff0000">tmp</font> - -<font color="#ff0000">echo </font><font color="#bb00ff">"Has zone $zone_file changed?"</font> -<b><font color="#ffffff">if</font></b><font color="#ff0000"> diff -u </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">old</font><font color="#F3E651">.</font><font color="#ff0000">noserial</font><font color="#F3E651">.</font><font color="#ff0000">tmp </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">new</font><font color="#F3E651">.</font><font color="#ff0000">noserial</font><font color="#F3E651">.</font><font color="#ff0000">tmp</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> echo </font><font color="#bb00ff">"The zone $zone_file hasn't changed"</font> -<font color="#ff0000"> rm </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.*.</font><font color="#ff0000">tmp</font> -<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#bb00ff">0</font> -<b><font color="#ffffff">fi</font></b> - -<font color="#ff0000">cp </font><font color="#ff0000">$zone_file</font><font color="#ff0000"> </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">bak</font> -<font color="#ff0000">mv </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">new</font><font color="#F3E651">.</font><font color="#ff0000">tmp </font><font color="#ff0000">$zone_file</font> -<font color="#ff0000">rm </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.*.</font><font color="#ff0000">tmp</font> -<font color="#ff0000">echo </font><font color="#bb00ff">"Reloading nsd"</font> -<font color="#ff0000">nsd-control reload</font> - -<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> zone_is_ok </font><font color="#ff0000">$zone</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> echo </font><font color="#bb00ff">"Rolling back $zone_file changes"</font> -<font color="#ff0000"> cp </font><font color="#ff0000">$zone_file</font><font color="#ff0000"> </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">invalid</font> -<font color="#ff0000"> mv </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">bak </font><font color="#ff0000">$zone_file</font> -<font color="#ff0000"> echo </font><font color="#bb00ff">"Reloading nsd"</font> -<font color="#ff0000"> nsd-control reload</font> -<font color="#ff0000"> zone_is_ok </font><font color="#ff0000">$zone</font> -<font color="#ff0000"> </font><b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#bb00ff">3</font> -<b><font color="#ffffff">fi</font></b> - -<b><font color="#ffffff">for</font></b><font color="#ff0000"> cleanup </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> invalid bak</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b> -<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -f </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">$cleanup</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> rm </font><font color="#ff0000">$zone_file</font><font color="#F3E651">.</font><font color="#ff0000">$cleanup</font> -<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b> -<b><font color="#ffffff">done</font></b> - -<font color="#ff0000">echo </font><font color="#bb00ff">"Failover of zone $zone to $MASTER completed"</font> -<b><font color="#ffffff">return</font></b><font color="#ff0000"> </font><font color="#bb00ff">1</font> +<pre><i><font color="silver">#! Race condition !#</font></i> + +<b><u><font color="#000000">if</font></u></b> [ -f $zone_file.bak ]; <b><u><font color="#000000">then</font></u></b> + mv $zone_file.bak $zone_file +<b><u><font color="#000000">fi</font></u></b> + +cat $zone_file | transform > $zone_file.new.tmp + +grep -v <font color="#808080">' ; serial'</font> $zone_file.new.tmp > $zone_file.new.noserial.tmp +grep -v <font color="#808080">' ; serial'</font> $zone_file > $zone_file.old.noserial.tmp + +echo <font color="#808080">"Has zone $zone_file changed?"</font> +<b><u><font color="#000000">if</font></u></b> diff -u $zone_file.old.noserial.tmp $zone_file.new.noserial.tmp; <b><u><font color="#000000">then</font></u></b> + echo <font color="#808080">"The zone $zone_file hasn't changed"</font> + rm $zone_file.*.tmp + <b><u><font color="#000000">return</font></u></b> <font color="#000000">0</font> +<b><u><font color="#000000">fi</font></u></b> + +cp $zone_file $zone_file.bak +mv $zone_file.new.tmp $zone_file +rm $zone_file.*.tmp +echo <font color="#808080">"Reloading nsd"</font> +nsd-control reload + +<b><u><font color="#000000">if</font></u></b> ! zone_is_ok $zone; <b><u><font color="#000000">then</font></u></b> + echo <font color="#808080">"Rolling back $zone_file changes"</font> + cp $zone_file $zone_file.invalid + mv $zone_file.bak $zone_file + echo <font color="#808080">"Reloading nsd"</font> + nsd-control reload + zone_is_ok $zone + <b><u><font color="#000000">return</font></u></b> <font color="#000000">3</font> +<b><u><font color="#000000">fi</font></u></b> + +<b><u><font color="#000000">for</font></u></b> cleanup <b><u><font color="#000000">in</font></u></b> invalid bak; <b><u><font color="#000000">do</font></u></b> + <b><u><font color="#000000">if</font></u></b> [ -f $zone_file.$cleanup ]; <b><u><font color="#000000">then</font></u></b> + rm $zone_file.$cleanup + <b><u><font color="#000000">fi</font></u></b> +<b><u><font color="#000000">done</font></u></b> + +echo <font color="#808080">"Failover of zone $zone to $MASTER completed"</font> +<b><u><font color="#000000">return</font></u></b> <font color="#000000">1</font> </pre> <br /> <span>A non-zero return code (here, 3 when a rollback and 1 when a DNS failover was performed) will cause CRON to send an E-Mail with the whole script output.</span><br /> @@ -3082,13 +3082,13 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="#ababab"># Weekly auto-failover for Let's Encrypt automation</font></i> -<b><font color="#ffffff">local</font></b><font color="#ff0000"> -i -r </font><font color="#ff0000">week_of_the_year</font><font color="#F3E651">=</font><font color="#ff0000">$(</font><font color="#ff0000">date </font><font color="#F3E651">+%</font><font color="#ff0000">U</font><font color="#F3E651">)</font> -<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#ff0000">$(</font><font color="#F3E651">(</font><font color="#ff0000"> week_of_the_year </font><font color="#F3E651">%</font><font color="#ff0000"> </font><font color="#bb00ff">2</font><font color="#ff0000"> </font><font color="#F3E651">))</font><font color="#ff0000"> -eq </font><font color="#bb00ff">0</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">tmp</font><font color="#F3E651">=</font><font color="#ff0000">$master</font> -<font color="#ff0000"> </font><font color="#ff0000">master</font><font color="#F3E651">=</font><font color="#ff0000">$standby</font> -<font color="#ff0000"> </font><font color="#ff0000">standby</font><font color="#F3E651">=</font><font color="#ff0000">$tmp</font> -<b><font color="#ffffff">fi</font></b> +<pre><i><font color="silver"># Weekly auto-failover for Let's Encrypt automation</font></i> +<b><u><font color="#000000">local</font></u></b> -i -r week_of_the_year=$(date +%U) +<b><u><font color="#000000">if</font></u></b> [ $(( week_of_the_year % <font color="#000000">2</font> )) -eq <font color="#000000">0</font> ]; <b><u><font color="#000000">then</font></u></b> + <b><u><font color="#000000">local</font></u></b> tmp=$master + master=$standby + standby=$tmp +<b><u><font color="#000000">fi</font></u></b> </pre> <br /> <span>This way, a DNS failover is performed weekly so that the ACME automation can update the Let's Encrypt certificates (for master and standby) before they expire on each VM.</span><br /> @@ -3462,8 +3462,8 @@ SSFISHKISSFISHKISSFISHKISSFISHKIS SFIS by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">$ doas installboot sd0 </font><i><font color="#ababab"># Update the bootloader (not for every upgrade required)</font></i> -<font color="#ff0000">$ doas sysupgrade </font><i><font color="#ababab"># Update all binaries (including Kernel)</font></i> +<pre>$ doas installboot sd0 <i><font color="silver"># Update the bootloader (not for every upgrade required)</font></i> +$ doas sysupgrade <i><font color="silver"># Update all binaries (including Kernel)</font></i> </pre> <br /> <span><span class='inlinecode'>sysupgrade</span> downloaded and upgraded to the next release and rebooted the system. After the reboot, I run:</span><br /> @@ -3472,9 +3472,9 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">$ doas sysmerge </font><i><font color="#ababab"># Update system configuration files</font></i> -<font color="#ff0000">$ doas pkg_add -u </font><i><font color="#ababab"># Update all packages</font></i> -<font color="#ff0000">$ doas reboot </font><i><font color="#ababab"># Just in case, reboot one more time</font></i> +<pre>$ doas sysmerge <i><font color="silver"># Update system configuration files</font></i> +$ doas pkg_add -u <i><font color="silver"># Update all packages</font></i> +$ doas reboot <i><font color="silver"># Just in case, reboot one more time</font></i> </pre> <br /> <span>That's it! Took me around 5 minutes in total! No issues, only these few comands, only 5 minutes! It just works! No problems, no conflicts, no tons (actually none) config file merge conflicts.</span><br /> @@ -3640,24 +3640,24 @@ jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i> +<pre><i><font color="silver">#!/usr/bin/env bash</font></i> -<font color="#7bc710">log ()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">level</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b> -<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">message</font><font color="#F3E651">=</font><font color="#bb00ff">"$1"</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">shift</font></b> -<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -i </font><font color="#ff0000">pid</font><font color="#F3E651">=</font><font color="#bb00ff">"$$"</font> +log () { + <b><u><font color="#000000">local</font></u></b> -r level=<font color="#808080">"$1"</font>; <b><u><font color="#000000">shift</font></u></b> + <b><u><font color="#000000">local</font></u></b> -r message=<font color="#808080">"$1"</font>; <b><u><font color="#000000">shift</font></u></b> + <b><u><font color="#000000">local</font></u></b> -i pid=<font color="#808080">"$$"</font> -<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">callee</font><font color="#F3E651">=</font><font color="#ff0000">${FUNCNAME[1]}</font> -<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -r </font><font color="#ff0000">stamp</font><font color="#F3E651">=</font><font color="#ff0000">$(</font><font color="#ff0000">date </font><font color="#F3E651">+%</font><font color="#ff0000">Y</font><font color="#F3E651">%</font><font color="#ff0000">m</font><font color="#F3E651">%</font><font color="#ff0000">d-</font><font color="#F3E651">%</font><font color="#ff0000">H</font><font color="#F3E651">%</font><font color="#ff0000">M</font><font color="#F3E651">%</font><font color="#ff0000">S</font><font color="#F3E651">)</font> + <b><u><font color="#000000">local</font></u></b> -r callee=${FUNCNAME[1]} + <b><u><font color="#000000">local</font></u></b> -r stamp=$(date +%Y%m%d-%H%M%S) -<font color="#ff0000"> echo </font><font color="#bb00ff">"$level|$stamp|$pid|$callee|$message"</font><font color="#ff0000"> </font><font color="#F3E651">>&</font><font color="#bb00ff">2</font> -<font color="#ff0000">}</font> + echo <font color="#808080">"$level|$stamp|$pid|$callee|$message"</font> >&<font color="#000000">2</font> +} -<font color="#7bc710">at_home_friday_evening ()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> log INFO </font><font color="#bb00ff">'One Peperoni Pizza, please'</font> -<font color="#ff0000">}</font> +at_home_friday_evening () { + log INFO <font color="#808080">'One Peperoni Pizza, please'</font> +} -<font color="#ff0000">at_home_friday_evening</font> +at_home_friday_evening </pre> <br /> <span>The output is as follows:</span><br /> @@ -3666,8 +3666,8 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">❯ </font><font color="#F3E651">.</font><font color="#ff0000">/logexample</font><font color="#F3E651">.</font><font color="#ff0000">sh</font> -<font color="#ff0000">INFO</font><font color="#F3E651">|</font><font color="#bb00ff">20231210</font><font color="#ff0000">-</font><font color="#bb00ff">082732</font><font color="#F3E651">|</font><font color="#bb00ff">123002</font><font color="#F3E651">|</font><font color="#ff0000">at_home_friday_evening</font><font color="#F3E651">|</font><font color="#ff0000">One Peperoni Pizza</font><font color="#F3E651">,</font><font color="#ff0000"> please</font> +<pre>❯ ./logexample.sh +INFO|<font color="#000000">20231210</font>-<font color="#000000">082732</font>|<font color="#000000">123002</font>|at_home_friday_evening|One Peperoni Pizza, please </pre> <br /> <h2 style='display: inline' id='--'><span class='inlinecode'>:(){ :|:& };:</span></h2><br /> @@ -3701,18 +3701,18 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i> +<pre><i><font color="silver">#!/usr/bin/env bash</font></i> -<font color="#7bc710">outer()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> </font><font color="#7bc710">inner()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> echo </font><font color="#bb00ff">'Intel inside!'</font> -<font color="#ff0000"> }</font> -<font color="#ff0000"> inner</font> -<font color="#ff0000">}</font> +outer() { + inner() { + echo <font color="#808080">'Intel inside!'</font> + } + inner +} -<font color="#ff0000">inner</font> -<font color="#ff0000">outer</font> -<font color="#ff0000">inner</font> +inner +outer +inner </pre> <br /> <span>And let's execute it:</span><br /> @@ -3730,26 +3730,26 @@ Intel inside! by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i> +<pre><i><font color="silver">#!/usr/bin/env bash</font></i> -<font color="#7bc710">outer1()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> </font><font color="#7bc710">inner()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> echo </font><font color="#bb00ff">'Intel inside!'</font> -<font color="#ff0000"> }</font> -<font color="#ff0000"> inner</font> -<font color="#ff0000">}</font> +outer1() { + inner() { + echo <font color="#808080">'Intel inside!'</font> + } + inner +} -<font color="#7bc710">outer2()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> </font><font color="#7bc710">inner()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> echo </font><font color="#bb00ff">'Wintel inside!'</font> -<font color="#ff0000"> }</font> -<font color="#ff0000"> inner</font> -<font color="#ff0000">}</font> +outer2() { + inner() { + echo <font color="#808080">'Wintel inside!'</font> + } + inner +} -<font color="#ff0000">outer1</font> -<font color="#ff0000">inner</font> -<font color="#ff0000">outer2</font> -<font color="#ff0000">inner</font> +outer1 +inner +outer2 +inner </pre> <br /> <span>And let's run it:</span><br /> @@ -3770,14 +3770,14 @@ Wintel inside! by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i> +<pre><i><font color="silver">#!/usr/bin/env bash</font></i> -<font color="#7bc710">some_expensive_operations()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> echo </font><font color="#bb00ff">"Doing expensive operations with '$1' from pid $$"</font> -<font color="#ff0000">}</font> +some_expensive_operations() { + echo <font color="#808080">"Doing expensive operations with '$1' from pid $$"</font> +} -<b><font color="#ffffff">for</font></b><font color="#ff0000"> i </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> {</font><font color="#bb00ff">0</font><font color="#F3E651">..</font><font color="#bb00ff">9</font><font color="#ff0000">}</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> echo </font><font color="#ff0000">$i</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">done</font></b><font color="#ff0000"> </font><font color="#F3E651">\</font> -<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> xargs -P</font><font color="#bb00ff">10</font><font color="#ff0000"> -I{} bash -c </font><font color="#bb00ff">'some_expensive_operations "{}"'</font> +<b><u><font color="#000000">for</font></u></b> i <b><u><font color="#000000">in</font></u></b> {<font color="#000000">0</font>..<font color="#000000">9</font>}; <b><u><font color="#000000">do</font></u></b> echo $i; <b><u><font color="#000000">done</font></u></b> \ + | xargs -P<font color="#000000">10</font> -I{} bash -c <font color="#808080">'some_expensive_operations "{}"'</font> </pre> <br /> <span>We try here to run ten parallel processes; each of them should run the <span class='inlinecode'>some_expensive_operations</span> function with a different argument. The arguments are provided to <span class='inlinecode'>xargs</span> through <span class='inlinecode'>STDIN</span> one per line. When executed, we get this:</span><br /> @@ -3802,15 +3802,15 @@ bash: line 1: some_expensive_operations: command not found by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i> +<pre><i><font color="silver">#!/usr/bin/env bash</font></i> -<font color="#7bc710">some_expensive_operations()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> echo </font><font color="#bb00ff">"Doing expensive operations with '$1' from pid $$"</font> -<font color="#ff0000">}</font> -<b><font color="#ffffff">export</font></b><font color="#ff0000"> -f some_expensive_operations</font> +some_expensive_operations() { + echo <font color="#808080">"Doing expensive operations with '$1' from pid $$"</font> +} +<b><u><font color="#000000">export</font></u></b> -f some_expensive_operations -<b><font color="#ffffff">for</font></b><font color="#ff0000"> i </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> {</font><font color="#bb00ff">0</font><font color="#F3E651">..</font><font color="#bb00ff">9</font><font color="#ff0000">}</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> echo </font><font color="#ff0000">$i</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">done</font></b><font color="#ff0000"> </font><font color="#F3E651">\</font> -<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> xargs -P</font><font color="#bb00ff">10</font><font color="#ff0000"> -I{} bash -c </font><font color="#bb00ff">'some_expensive_operations "{}"'</font> +<b><u><font color="#000000">for</font></u></b> i <b><u><font color="#000000">in</font></u></b> {<font color="#000000">0</font>..<font color="#000000">9</font>}; <b><u><font color="#000000">do</font></u></b> echo $i; <b><u><font color="#000000">done</font></u></b> \ + | xargs -P<font color="#000000">10</font> -I{} bash -c <font color="#808080">'some_expensive_operations "{}"'</font> </pre> <br /> <span>When we run this now, we get:</span><br /> @@ -3835,19 +3835,19 @@ Doing expensive operations with '9' from pid 132840 by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i> +<pre><i><font color="silver">#!/usr/bin/env bash</font></i> -<font color="#7bc710">some_other_function()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> echo </font><font color="#bb00ff">"$1"</font> -<font color="#ff0000">}</font> +some_other_function() { + echo <font color="#808080">"$1"</font> +} -<font color="#7bc710">some_expensive_operations()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> some_other_function </font><font color="#bb00ff">"Doing expensive operations with '$1' from pid $$"</font> -<font color="#ff0000">}</font> -<b><font color="#ffffff">export</font></b><font color="#ff0000"> -f some_expensive_operations</font> +some_expensive_operations() { + some_other_function <font color="#808080">"Doing expensive operations with '$1' from pid $$"</font> +} +<b><u><font color="#000000">export</font></u></b> -f some_expensive_operations -<b><font color="#ffffff">for</font></b><font color="#ff0000"> i </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> {</font><font color="#bb00ff">0</font><font color="#F3E651">..</font><font color="#bb00ff">9</font><font color="#ff0000">}</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b><font color="#ff0000"> echo </font><font color="#ff0000">$i</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">done</font></b><font color="#ff0000"> </font><font color="#F3E651">\</font> -<font color="#ff0000"> </font><font color="#F3E651">|</font><font color="#ff0000"> xargs -P</font><font color="#bb00ff">10</font><font color="#ff0000"> -I{} bash -c </font><font color="#bb00ff">'some_expensive_operations "{}"'</font> +<b><u><font color="#000000">for</font></u></b> i <b><u><font color="#000000">in</font></u></b> {<font color="#000000">0</font>..<font color="#000000">9</font>}; <b><u><font color="#000000">do</font></u></b> echo $i; <b><u><font color="#000000">done</font></u></b> \ + | xargs -P<font color="#000000">10</font> -I{} bash -c <font color="#808080">'some_expensive_operations "{}"'</font> </pre> <br /> <span>... because <span class='inlinecode'>some_other_function</span> isn't exported! You will also need to add an <span class='inlinecode'>export -f some_other_function</span>!</span><br /> @@ -3860,22 +3860,22 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i> +<pre><i><font color="silver">#!/usr/bin/env bash</font></i> -<font color="#7bc710">foo()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> </font><font color="#ff0000">foo</font><font color="#F3E651">=</font><font color="#ff0000">bar </font><i><font color="#ababab"># Declare local/dynamic variable</font></i> -<font color="#ff0000"> bar</font> -<font color="#ff0000"> echo </font><font color="#bb00ff">"$foo"</font> -<font color="#ff0000">}</font> +foo() { + <b><u><font color="#000000">local</font></u></b> foo=bar <i><font color="silver"># Declare local/dynamic variable</font></i> + bar + echo <font color="#808080">"$foo"</font> +} -<font color="#7bc710">bar()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> echo </font><font color="#bb00ff">"$foo"</font> -<font color="#ff0000"> </font><font color="#ff0000">foo</font><font color="#F3E651">=</font><font color="#ff0000">baz</font> -<font color="#ff0000">}</font> +bar() { + echo <font color="#808080">"$foo"</font> + foo=baz +} -<font color="#ff0000">foo</font><font color="#F3E651">=</font><font color="#ff0000">foo </font><i><font color="#ababab"># Declare global variable</font></i> -<font color="#ff0000">foo </font><i><font color="#ababab"># Call function foo</font></i> -<font color="#ff0000">echo </font><font color="#bb00ff">"$foo"</font> +foo=foo <i><font color="silver"># Declare global variable</font></i> +foo <i><font color="silver"># Call function foo</font></i> +echo <font color="#808080">"$foo"</font> </pre> <br /> <span>Let's pause a minute. What do you think the output would be?</span><br /> @@ -3900,34 +3900,34 @@ foo by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i> +<pre><i><font color="silver">#!/usr/bin/env bash</font></i> -<b><font color="#ffffff">declare</font></b><font color="#ff0000"> -r </font><font color="#ff0000">foo</font><font color="#F3E651">=</font><font color="#ff0000">foo</font> -<b><font color="#ffffff">declare</font></b><font color="#ff0000"> -r </font><font color="#ff0000">bar</font><font color="#F3E651">=</font><font color="#ff0000">bar</font> +<b><u><font color="#000000">declare</font></u></b> -r foo=foo +<b><u><font color="#000000">declare</font></u></b> -r bar=bar -<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$foo"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> foo </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$bar"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> bar </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> echo ok1</font> -<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b> -<b><font color="#ffffff">fi</font></b> +<b><u><font color="#000000">if</font></u></b> [ <font color="#808080">"$foo"</font> = foo ]; <b><u><font color="#000000">then</font></u></b> + <b><u><font color="#000000">if</font></u></b> [ <font color="#808080">"$bar"</font> = bar ]; <b><u><font color="#000000">then</font></u></b> + echo ok1 + <b><u><font color="#000000">fi</font></u></b> +<b><u><font color="#000000">fi</font></u></b> -<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$foo"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> foo </font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">&&</font><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$bar"</font><font color="#ff0000"> </font><font color="#F3E651">==</font><font color="#ff0000"> bar </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> echo ok2a</font> -<b><font color="#ffffff">fi</font></b> +<b><u><font color="#000000">if</font></u></b> [ <font color="#808080">"$foo"</font> = foo ] && [ <font color="#808080">"$bar"</font> == bar ]; <b><u><font color="#000000">then</font></u></b> + echo ok2a +<b><u><font color="#000000">fi</font></u></b> -<font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$foo"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> foo </font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">&&</font><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"$bar"</font><font color="#ff0000"> </font><font color="#F3E651">==</font><font color="#ff0000"> bar </font><font color="#F3E651">]</font><font color="#ff0000"> </font><font color="#F3E651">&&</font><font color="#ff0000"> echo ok2b</font> +[ <font color="#808080">"$foo"</font> = foo ] && [ <font color="#808080">"$bar"</font> == bar ] && echo ok2b -<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[[</font><font color="#ff0000"> </font><font color="#bb00ff">"$foo"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> foo </font><font color="#F3E651">&&</font><font color="#ff0000"> </font><font color="#bb00ff">"$bar"</font><font color="#ff0000"> </font><font color="#F3E651">==</font><font color="#ff0000"> bar </font><font color="#F3E651">]];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> echo ok3a</font> -<b><font color="#ffffff">fi</font></b> +<b><u><font color="#000000">if</font></u></b> [[ <font color="#808080">"$foo"</font> = foo && <font color="#808080">"$bar"</font> == bar ]]; <b><u><font color="#000000">then</font></u></b> + echo ok3a +<b><u><font color="#000000">fi</font></u></b> -<font color="#ff0000"> </font><font color="#F3E651">[[</font><font color="#ff0000"> </font><font color="#bb00ff">"$foo"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> foo </font><font color="#F3E651">&&</font><font color="#ff0000"> </font><font color="#bb00ff">"$bar"</font><font color="#ff0000"> </font><font color="#F3E651">==</font><font color="#ff0000"> bar </font><font color="#F3E651">]]</font><font color="#ff0000"> </font><font color="#F3E651">&&</font><font color="#ff0000"> echo ok3b</font> + [[ <font color="#808080">"$foo"</font> = foo && <font color="#808080">"$bar"</font> == bar ]] && echo ok3b -<b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><b><font color="#ffffff">test</font></b><font color="#ff0000"> </font><font color="#bb00ff">"$foo"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> foo </font><font color="#F3E651">&&</font><font color="#ff0000"> </font><b><font color="#ffffff">test</font></b><font color="#ff0000"> </font><font color="#bb00ff">"$bar"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> bar</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> echo ok4a</font> -<b><font color="#ffffff">fi</font></b> +<b><u><font color="#000000">if</font></u></b> <b><u><font color="#000000">test</font></u></b> <font color="#808080">"$foo"</font> = foo && <b><u><font color="#000000">test</font></u></b> <font color="#808080">"$bar"</font> = bar; <b><u><font color="#000000">then</font></u></b> + echo ok4a +<b><u><font color="#000000">fi</font></u></b> -<b><font color="#ffffff">test</font></b><font color="#ff0000"> </font><font color="#bb00ff">"$foo"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> foo </font><font color="#F3E651">&&</font><font color="#ff0000"> </font><b><font color="#ffffff">test</font></b><font color="#ff0000"> </font><font color="#bb00ff">"$bar"</font><font color="#ff0000"> </font><font color="#F3E651">=</font><font color="#ff0000"> bar </font><font color="#F3E651">&&</font><font color="#ff0000"> echo ok4b</font> +<b><u><font color="#000000">test</font></u></b> <font color="#808080">"$foo"</font> = foo && <b><u><font color="#000000">test</font></u></b> <font color="#808080">"$bar"</font> = bar && echo ok4b </pre> <br /> <span>The output we get is:</span><br /> @@ -3951,18 +3951,18 @@ ok4b by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i> +<pre><i><font color="silver">#!/usr/bin/env bash</font></i> -<i><font color="#ababab"># Single line comment</font></i> +<i><font color="silver"># Single line comment</font></i> -<i><font color="#ababab"># These are two single line</font></i> -<i><font color="#ababab"># comments one after another</font></i> +<i><font color="silver"># These are two single line</font></i> +<i><font color="silver"># comments one after another</font></i> -<font color="#F3E651">:</font><font color="#ff0000"> </font><font color="#F3E651"><<</font><font color="#ff0000">COMMENT</font> -<font color="#ff0000">This is another way a</font> -<font color="#ff0000">multi line comment</font> -<font color="#ff0000">could be written</font><font color="#F3E651">!</font> -<font color="#ff0000">COMMENT</font> +: <<COMMENT +This is another way a +multi line comment +could be written! +COMMENT </pre> <br /> <span>I will not demonstrate the execution of this script, as it won't print anything! It's obviously not the most pretty way of commenting on your code, but it could sometimes be handy!</span><br /> @@ -3975,11 +3975,11 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="#ababab">#!/usr/bin/env bash</font></i> +<pre><i><font color="silver">#!/usr/bin/env bash</font></i> -<font color="#ff0000">echo foo</font> -<font color="#ff0000">echo echo baz </font><font color="#F3E651">>></font><font color="#ff0000"> </font><font color="#ff0000">$0</font> -<font color="#ff0000">echo bar</font> +echo foo +echo echo baz >> $0 +echo bar </pre> <br /> <span>When it is run, it will do:</span><br /> @@ -4355,42 +4355,42 @@ photoalbum makemake by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> photoalbum makemake</font> -<font color="#ff0000">You may now customize </font><font color="#F3E651">.</font><font color="#ff0000">/photoalbumrc and run make</font> - -<font color="#F3E651">%</font><font color="#ff0000"> cat Makefile</font> -<font color="#ff0000">all</font><font color="#F3E651">:</font> -<font color="#ff0000"> photoalbum generate photoalbumrc</font> -<font color="#ff0000">clean</font><font color="#F3E651">:</font> -<font color="#ff0000"> photoalbum clean photoalbumrc</font> - -<font color="#F3E651">%</font><font color="#ff0000"> cat photoalbumrc</font> -<i><font color="#ababab"># The title of the photoalbum</font></i> -<font color="#ff0000">TITLE</font><font color="#F3E651">=</font><font color="#bb00ff">'A simple Photoalbum'</font> - -<i><font color="#ababab"># Thumbnail height geometry</font></i> -<font color="#ff0000">THUMBHEIGHT</font><font color="#F3E651">=</font><font color="#bb00ff">300</font> -<i><font color="#ababab"># Normal geometry height (when viewing photo). Uncomment, to keep original size.</font></i> -<font color="#ff0000">HEIGHT</font><font color="#F3E651">=</font><font color="#bb00ff">1200</font> -<i><font color="#ababab"># Max previews per page.</font></i> -<font color="#ff0000">MAXPREVIEWS</font><font color="#F3E651">=</font><font color="#bb00ff">40</font> -<i><font color="#ababab"># Randomly shuffle all previews.</font></i> -<i><font color="#ababab"># SHUFFLE=yes</font></i> - -<i><font color="#ababab"># Diverse directories, need to be full paths, not relative!</font></i> -<font color="#ff0000">INCOMING_DIR</font><font color="#F3E651">=</font><font color="#ff0000">$(pwd)</font><font color="#ff0000">/incoming</font> -<font color="#ff0000">DIST_DIR</font><font color="#F3E651">=</font><font color="#ff0000">$(pwd)</font><font color="#ff0000">/dist</font> -<font color="#ff0000">TEMPLATE_DIR</font><font color="#F3E651">=</font><font color="#ff0000">/usr/share/photoalbum/templates/default</font> -<i><font color="#ababab">#TEMPLATE_DIR=/usr/share/photoalbum/templates/minimal</font></i> - -<i><font color="#ababab"># Includes a .tar of the incoming dir in the dist, can be yes or no</font></i> -<font color="#ff0000">TARBALL_INCLUDE</font><font color="#F3E651">=</font><font color="#ff0000">yes</font> -<font color="#ff0000">TARBALL_SUFFIX</font><font color="#F3E651">=.</font><font color="#ff0000">tar</font> -<font color="#ff0000">TAR_OPTS</font><font color="#F3E651">=</font><font color="#bb00ff">'-c'</font> - -<i><font color="#ababab"># Some debugging options</font></i> -<i><font color="#ababab">#set -e</font></i> -<i><font color="#ababab">#set -x</font></i> +<pre>% photoalbum makemake +You may now customize ./photoalbumrc and run make + +% cat Makefile +all: + photoalbum generate photoalbumrc +clean: + photoalbum clean photoalbumrc + +% cat photoalbumrc +<i><font color="silver"># The title of the photoalbum</font></i> +TITLE=<font color="#808080">'A simple Photoalbum'</font> + +<i><font color="silver"># Thumbnail height geometry</font></i> +THUMBHEIGHT=<font color="#000000">300</font> +<i><font color="silver"># Normal geometry height (when viewing photo). Uncomment, to keep original size.</font></i> +HEIGHT=<font color="#000000">1200</font> +<i><font color="silver"># Max previews per page.</font></i> +MAXPREVIEWS=<font color="#000000">40</font> +<i><font color="silver"># Randomly shuffle all previews.</font></i> +<i><font color="silver"># SHUFFLE=yes</font></i> + +<i><font color="silver"># Diverse directories, need to be full paths, not relative!</font></i> +INCOMING_DIR=$(pwd)/incoming +DIST_DIR=$(pwd)/dist +TEMPLATE_DIR=/usr/share/photoalbum/templates/default +<i><font color="silver">#TEMPLATE_DIR=/usr/share/photoalbum/templates/minimal</font></i> + +<i><font color="silver"># Includes a .tar of the incoming dir in the dist, can be yes or no</font></i> +TARBALL_INCLUDE=yes +TARBALL_SUFFIX=.tar +TAR_OPTS=<font color="#808080">'-c'</font> + +<i><font color="silver"># Some debugging options</font></i> +<i><font color="silver">#set -e</font></i> +<i><font color="silver">#set -x</font></i> </pre> <br /> <span>In the case for <span class='inlinecode'>irregular.ninja</span>, I changed the defaults to the following:</span><br /> @@ -4399,38 +4399,38 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">--- photoalbumrc 2023-10-29 21:42:00.894202045 +0200</font> -<font color="#ff0000">+++ photoalbumrc.new 2023-06-04 10:40:08.030994440 +0300</font> -<font color="#ff0000">@@ -1,23 +1,24 @@</font> -<font color="#ff0000"> # The title of the photoalbum</font> -<font color="#ff0000">-TITLE='A simple Photoalbum'</font> -<font color="#ff0000">+TITLE='Irregular.Ninja'</font> - -<font color="#ff0000"> # Thumbnail height geometry</font> -<font color="#ff0000">-THUMBHEIGHT=300</font> -<font color="#ff0000">+THUMBHEIGHT=400</font> -<font color="#ff0000"> # Normal geometry height (when viewing photo). Uncomment, to keep original size.</font> -<font color="#ff0000">-HEIGHT=1200</font> -<font color="#ff0000">+HEIGHT=1800</font> -<font color="#ff0000"> # Max previews per page.</font> -<font color="#ff0000"> MAXPREVIEWS=40</font> -<font color="#ff0000">-# Randomly shuffle all previews.</font> -<font color="#ff0000">-# SHUFFLE=yes</font> -<font color="#ff0000">+# Randomly shuffle</font> -<font color="#ff0000">+SHUFFLE=yes</font> - -<font color="#ff0000"> # Diverse directories, need to be full paths, not relative!</font> -<font color="#ff0000">-INCOMING_DIR=$(pwd)/incoming</font> -<font color="#ff0000">+INCOMING_DIR=~/Nextcloud/Photos/irregular.ninja</font> -<font color="#ff0000"> DIST_DIR=$(pwd)/dist</font> -<font color="#ff0000"> TEMPLATE_DIR=/usr/share/photoalbum/templates/default</font> -<font color="#ff0000"> #TEMPLATE_DIR=/usr/share/photoalbum/templates/minimal</font> - -<font color="#ff0000"> # Includes a .tar of the incoming dir in the dist, can be yes or no</font> -<font color="#ff0000">-TARBALL_INCLUDE=yes</font> -<font color="#ff0000">+TARBALL_INCLUDE=no</font> -<font color="#ff0000"> TARBALL_SUFFIX=.tar</font> -<font color="#ff0000"> TAR_OPTS='-c'</font> +<pre>--- photoalbumrc 2023-10-29 21:42:00.894202045 +0200 ++++ photoalbumrc.new 2023-06-04 10:40:08.030994440 +0300 +@@ -1,23 +1,24 @@ + # The title of the photoalbum +-TITLE='A simple Photoalbum' ++TITLE='Irregular.Ninja' + + # Thumbnail height geometry +-THUMBHEIGHT=300 ++THUMBHEIGHT=400 + # Normal geometry height (when viewing photo). Uncomment, to keep original size. +-HEIGHT=1200 ++HEIGHT=1800 + # Max previews per page. + MAXPREVIEWS=40 +-# Randomly shuffle all previews. +-# SHUFFLE=yes ++# Randomly shuffle ++SHUFFLE=yes + + # Diverse directories, need to be full paths, not relative! +-INCOMING_DIR=$(pwd)/incoming ++INCOMING_DIR=~/Nextcloud/Photos/irregular.ninja + DIST_DIR=$(pwd)/dist + TEMPLATE_DIR=/usr/share/photoalbum/templates/default + #TEMPLATE_DIR=/usr/share/photoalbum/templates/minimal + + # Includes a .tar of the incoming dir in the dist, can be yes or no +-TARBALL_INCLUDE=yes ++TARBALL_INCLUDE=no + TARBALL_SUFFIX=.tar + TAR_OPTS='-c' </pre> <br /> <span>So I changed the album title, adjusted some image and thumbnail dimensions, and I want all images to be randomly shuffled every time the album is generated! I also have all my photos in my Nextcloud Photo directory and don't want to copy them to the local <span class='inlinecode'>incoming</span> directory. Also, a tarball containing the whole album as a download isn't provided.</span><br /> @@ -4603,7 +4603,7 @@ blurs html index.html photos thumbs by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> dtail --servers serverlist</font><font color="#F3E651">.</font><font color="#ff0000">txt --grep INFO --files </font><font color="#bb00ff">"/var/log/dserver/*.log"</font> +<pre>% dtail --servers serverlist.txt --grep INFO --files <font color="#808080">"/var/log/dserver/*.log"</font> </pre> <br /> <span>Hint: you can also provide a comma separated server list, e.g.: <span class='inlinecode'>servers server1.example.org,server2.example.org:PORT,...</span></span><br /> @@ -4616,7 +4616,7 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> dtail --servers serverlist</font><font color="#F3E651">.</font><font color="#ff0000">txt --grep INFO </font><font color="#bb00ff">"/var/log/dserver/*.log"</font> +<pre>% dtail --servers serverlist.txt --grep INFO <font color="#808080">"/var/log/dserver/*.log"</font> </pre> <br /> <h2 style='display: inline' id='aggregating-logs'>Aggregating logs</h2><br /> @@ -4629,10 +4629,10 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> dtail --servers serverlist</font><font color="#F3E651">.</font><font color="#ff0000">txt </font><font color="#F3E651">\</font> -<font color="#ff0000"> --files </font><font color="#bb00ff">'/var/log/dserver/*.log'</font><font color="#ff0000"> </font><font color="#F3E651">\</font> -<font color="#ff0000"> --query </font><font color="#bb00ff">'from STATS select sum($goroutines),sum($cgocalls),</font> -<font color="#bb00ff"> last($time),max(lifetimeConnections)'</font> +<pre>% dtail --servers serverlist.txt \ + --files <font color="#808080">'/var/log/dserver/*.log'</font> \ + --query <font color="#808080">'from STATS select sum($goroutines),sum($cgocalls),</font> +<font color="#808080"> last($time),max(lifetimeConnections)'</font> </pre> <br /> <span>Beware: For map-reduce queries to work, you have to ensure that DTail supports your log format. Check out the documentaiton of the DTail query language and the DTail log formats on the DTail homepage for more information.</span><br /> @@ -4645,10 +4645,10 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> dtail --servers serverlist</font><font color="#F3E651">.</font><font color="#ff0000">txt </font><font color="#F3E651">\</font> -<font color="#ff0000"> --files </font><font color="#bb00ff">'/var/log/dserver/*.log'</font><font color="#ff0000"> </font><font color="#F3E651">\</font> -<font color="#ff0000"> </font><font color="#bb00ff">'from STATS select sum($goroutines),sum($cgocalls),</font> -<font color="#bb00ff"> last($time),max(lifetimeConnections)'</font> +<pre>% dtail --servers serverlist.txt \ + --files <font color="#808080">'/var/log/dserver/*.log'</font> \ + <font color="#808080">'from STATS select sum($goroutines),sum($cgocalls),</font> +<font color="#808080"> last($time),max(lifetimeConnections)'</font> </pre> <br /> <span>Here is another example:</span><br /> @@ -4657,10 +4657,10 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> dtail --servers serverlist</font><font color="#F3E651">.</font><font color="#ff0000">txt </font><font color="#F3E651">\</font> -<font color="#ff0000"> --files </font><font color="#bb00ff">'/var/log/dserver/*.log'</font><font color="#ff0000"> </font><font color="#F3E651">\</font> -<font color="#ff0000"> --query </font><font color="#bb00ff">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font> -<font color="#bb00ff"> lifetimeConnections group by $hostname order by max($cgocalls)'</font> +<pre>% dtail --servers serverlist.txt \ + --files <font color="#808080">'/var/log/dserver/*.log'</font> \ + --query <font color="#808080">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font> +<font color="#808080"> lifetimeConnections group by $hostname order by max($cgocalls)'</font> </pre> <br /> <a href='./dtail-usage-examples/dtail-map2.gif'><img alt='Tail map-reduce example 2' title='Tail map-reduce example 2' src='./dtail-usage-examples/dtail-map2.gif' /></a><br /> @@ -4671,9 +4671,9 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> dtail --servers serverlist</font><font color="#F3E651">.</font><font color="#ff0000">txt </font><font color="#F3E651">\</font> -<font color="#ff0000"> --files </font><font color="#bb00ff">'/var/log/dserver/*.log'</font><font color="#ff0000"> </font><font color="#F3E651">\</font> -<font color="#ff0000"> --query </font><font color="#bb00ff">'from STATS select ... outfile append result.csv'</font> +<pre>% dtail --servers serverlist.txt \ + --files <font color="#808080">'/var/log/dserver/*.log'</font> \ + --query <font color="#808080">'from STATS select ... outfile append result.csv'</font> </pre> <br /> <h2 style='display: inline' id='how-to-use-dcat'>How to use <span class='inlinecode'>dcat</span></h2><br /> @@ -4686,7 +4686,7 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> dcat --servers serverlist</font><font color="#F3E651">.</font><font color="#ff0000">txt --files /etc/hostname</font> +<pre>% dcat --servers serverlist.txt --files /etc/hostname </pre> <br /> <a href='./dtail-usage-examples/dcat.gif'><img alt='Cat example' title='Cat example' src='./dtail-usage-examples/dcat.gif' /></a><br /> @@ -4697,7 +4697,7 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> dcat --servers serverlist</font><font color="#F3E651">.</font><font color="#ff0000">txt /etc/hostname</font> +<pre>% dcat --servers serverlist.txt /etc/hostname </pre> <br /> <h2 style='display: inline' id='how-to-use-dgrep'>How to use <span class='inlinecode'>dgrep</span></h2><br /> @@ -4708,9 +4708,9 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> dgrep --servers server1</font><font color="#F3E651">.</font><font color="#ff0000">example</font><font color="#F3E651">.</font><font color="#ff0000">org</font><font color="#F3E651">:</font><font color="#bb00ff">2223</font><font color="#ff0000"> </font><font color="#F3E651">\</font> -<font color="#ff0000"> --files /etc/passwd </font><font color="#F3E651">\</font> -<font color="#ff0000"> --regex nologin</font> +<pre>% dgrep --servers server1.example.org:<font color="#000000">2223</font> \ + --files /etc/passwd \ + --regex nologin </pre> <br /> <span>Generally, <span class='inlinecode'>dgrep</span> is also a very useful way to search historic application logs for certain content.</span><br /> @@ -4727,10 +4727,10 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> dmap --servers serverlist</font><font color="#F3E651">.</font><font color="#ff0000">txt </font><font color="#F3E651">\</font> -<font color="#ff0000"> --files </font><font color="#bb00ff">'/var/log/dserver/*.log'</font><font color="#ff0000"> </font><font color="#F3E651">\</font> -<font color="#ff0000"> --query </font><font color="#bb00ff">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font> -<font color="#bb00ff"> lifetimeConnections group by $hostname order by max($cgocalls)'</font> +<pre>% dmap --servers serverlist.txt \ + --files <font color="#808080">'/var/log/dserver/*.log'</font> \ + --query <font color="#808080">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font> +<font color="#808080"> lifetimeConnections group by $hostname order by max($cgocalls)'</font> </pre> <br /> <span>Remember: For that to work, you have to make sure that DTail supports your log format. You can either use the ones already defined in <span class='inlinecode'>internal/mapr/logformat</span> or add an extension to support a custom log format. The example here works out of the box though, as DTail understands its own log format already. </span><br /> @@ -4753,9 +4753,9 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> dmap --files /var/log/dserver/dserver</font><font color="#F3E651">.</font><font color="#ff0000">log</font> -<font color="#ff0000"> --query </font><font color="#bb00ff">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font> -<font color="#bb00ff"> lifetimeConnections group by $hostname order by max($cgocalls)'</font> +<pre>% dmap --files /var/log/dserver/dserver.log + --query <font color="#808080">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font> +<font color="#808080"> lifetimeConnections group by $hostname order by max($cgocalls)'</font> </pre> <br /> <span>As a shorthand version the following command can be used:</span><br /> @@ -4764,9 +4764,9 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> dmap </font><font color="#bb00ff">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font> -<font color="#bb00ff"> lifetimeConnections group by $hostname order by max($cgocalls)'</font><font color="#ff0000"> </font><font color="#F3E651">\</font> -<font color="#ff0000"> /var/log/dsever/dserver</font><font color="#F3E651">.</font><font color="#ff0000">log</font> +<pre>% dmap <font color="#808080">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font> +<font color="#808080"> lifetimeConnections group by $hostname order by max($cgocalls)'</font> \ + /var/log/dsever/dserver.log </pre> <br /> <span>You can also use a file input pipe as follows:</span><br /> @@ -4775,9 +4775,9 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> cat /var/log/dserver/dserver</font><font color="#F3E651">.</font><font color="#ff0000">log </font><font color="#F3E651">|</font><font color="#ff0000"> </font><font color="#F3E651">\</font> -<font color="#ff0000"> dmap </font><font color="#bb00ff">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font> -<font color="#bb00ff"> lifetimeConnections group by $hostname order by max($cgocalls)'</font> +<pre>% cat /var/log/dserver/dserver.log | \ + dmap <font color="#808080">'from STATS select $hostname,max($goroutines),max($cgocalls),$loadavg,</font> +<font color="#808080"> lifetimeConnections group by $hostname order by max($cgocalls)'</font> </pre> <br /> <h3 style='display: inline' id='aggregating-csv-files'>Aggregating CSV files</h3><br /> @@ -4788,16 +4788,16 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> cat example</font><font color="#F3E651">.</font><font color="#ff0000">csv</font> -<font color="#ff0000">name</font><font color="#F3E651">,</font><font color="#ff0000">lastname</font><font color="#F3E651">,</font><font color="#ff0000">age</font><font color="#F3E651">,</font><font color="#ff0000">profession</font> -<font color="#ff0000">Michael</font><font color="#F3E651">,</font><font color="#ff0000">Jordan</font><font color="#F3E651">,</font><font color="#bb00ff">40</font><font color="#F3E651">,</font><font color="#ff0000">Basketball player</font> -<font color="#ff0000">Michael</font><font color="#F3E651">,</font><font color="#ff0000">Jackson</font><font color="#F3E651">,</font><font color="#bb00ff">100</font><font color="#F3E651">,</font><font color="#ff0000">Singer</font> -<font color="#ff0000">Albert</font><font color="#F3E651">,</font><font color="#ff0000">Einstein</font><font color="#F3E651">,</font><font color="#bb00ff">200</font><font color="#F3E651">,</font><font color="#ff0000">Physician</font> -<font color="#F3E651">%</font><font color="#ff0000"> dmap --query </font><font color="#bb00ff">'select lastname,name where age > 40 logformat csv outfile result.csv'</font><font color="#ff0000"> example</font><font color="#F3E651">.</font><font color="#ff0000">csv</font> -<font color="#F3E651">%</font><font color="#ff0000"> cat result</font><font color="#F3E651">.</font><font color="#ff0000">csv</font> -<font color="#ff0000">lastname</font><font color="#F3E651">,</font><font color="#ff0000">name</font> -<font color="#ff0000">Jackson</font><font color="#F3E651">,</font><font color="#ff0000">Michael</font> -<font color="#ff0000">Einstein</font><font color="#F3E651">,</font><font color="#ff0000">Albert</font> +<pre>% cat example.csv +name,lastname,age,profession +Michael,Jordan,<font color="#000000">40</font>,Basketball player +Michael,Jackson,<font color="#000000">100</font>,Singer +Albert,Einstein,<font color="#000000">200</font>,Physician +% dmap --query <font color="#808080">'select lastname,name where age > 40 logformat csv outfile result.csv'</font> example.csv +% cat result.csv +lastname,name +Jackson,Michael +Einstein,Albert </pre> <br /> <span>DMap can also be used to query and aggregate CSV files from remote servers.</span><br /> @@ -4810,44 +4810,44 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> dtail /var/log/dserver/dserver</font><font color="#F3E651">.</font><font color="#ff0000">log</font> +<pre>% dtail /var/log/dserver/dserver.log </pre> <br /> <!-- Generator: GNU source-highlight 3.1.9 by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> dtail --logLevel trace /var/log/dserver/dserver</font><font color="#F3E651">.</font><font color="#ff0000">log</font> +<pre>% dtail --logLevel trace /var/log/dserver/dserver.log </pre> <br /> <!-- Generator: GNU source-highlight 3.1.9 by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> dcat /etc/passwd</font> +<pre>% dcat /etc/passwd </pre> <br /> <!-- Generator: GNU source-highlight 3.1.9 by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> dcat --plain /etc/passwd </font><font color="#F3E651">></font><font color="#ff0000"> /etc/test</font> -<i><font color="#ababab"># Should show no differences.</font></i> -<font color="#ff0000">diff /etc/test /etc/passwd </font> +<pre>% dcat --plain /etc/passwd > /etc/test +<i><font color="silver"># Should show no differences.</font></i> +diff /etc/test /etc/passwd </pre> <br /> <!-- Generator: GNU source-highlight 3.1.9 by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> dgrep --regex ERROR --files /var/log/dserver/dsever</font><font color="#F3E651">.</font><font color="#ff0000">log</font> +<pre>% dgrep --regex ERROR --files /var/log/dserver/dsever.log </pre> <br /> <!-- Generator: GNU source-highlight 3.1.9 by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> dgrep --before </font><font color="#bb00ff">10</font><font color="#ff0000"> --after </font><font color="#bb00ff">10</font><font color="#ff0000"> --max </font><font color="#bb00ff">10</font><font color="#ff0000"> --grep ERROR /var/log/dserver/dsever</font><font color="#F3E651">.</font><font color="#ff0000">log</font> +<pre>% dgrep --before <font color="#000000">10</font> --after <font color="#000000">10</font> --max <font color="#000000">10</font> --grep ERROR /var/log/dserver/dsever.log </pre> <br /> <span>Use <span class='inlinecode'>--help</span> for more available options. Or go to the DTail page for more information! Hope you find DTail useful!</span><br /> @@ -5017,9 +5017,9 @@ DC on fire: by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> -n </font><font color="#bb00ff">"$foo"</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> echo </font><font color="#bb00ff">"$foo"</font> -<b><font color="#ffffff">fi</font></b> +<pre><b><u><font color="#000000">if</font></u></b> [ -n <font color="#808080">"$foo"</font> ]; <b><u><font color="#000000">then</font></u></b> + echo <font color="#808080">"$foo"</font> +<b><u><font color="#000000">fi</font></u></b> </pre> <br /> <span>Please run <span class='inlinecode'>source-highlight --lang-list</span> for a list of all supported languages.</span><br /> @@ -5048,7 +5048,7 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><b><font color="#ffffff">declare</font></b><font color="#ff0000"> -xr </font><font color="#ff0000">MASTODON_URI</font><font color="#F3E651">=</font><font color="#bb00ff">'https://fosstodon.org/@snonux'</font> +<pre><b><u><font color="#000000">declare</font></u></b> -xr MASTODON_URI=<font color="#808080">'https://fosstodon.org/@snonux'</font> </pre> <br /> <span>and add the following into your <span class='inlinecode'>index.gmi</span>:</span><br /> @@ -5063,7 +5063,7 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><b><font color="#ffffff"><a</font></b><font color="#ff0000"> </font><b><font color="#F35E1E">href</font></b><font color="#F3E651">=</font><font color="#bb00ff">'https://fosstodon.org/@snonux'</font><font color="#ff0000"> </font><b><font color="#F35E1E">rel</font></b><font color="#F3E651">=</font><font color="#bb00ff">'me'</font><b><font color="#ffffff">></font></b><font color="#ff0000">Me at Mastodon</font><b><font color="#ffffff"></a></font></b> +<pre><b><u><font color="#000000"><a</font></u></b> <b><font color="#000000">href</font></b>=<font color="#808080">'https://fosstodon.org/@snonux'</font> <b><font color="#000000">rel</font></b>=<font color="#808080">'me'</font><b><u><font color="#000000">></font></u></b>Me at Mastodon<b><u><font color="#000000"></a></font></u></b> </pre> <br /> <h2 style='display: inline' id='more'>More</h2><br /> @@ -5563,11 +5563,11 @@ Have a nice day! by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">git clone https</font><font color="#F3E651">:</font><font color="#ff0000">//codeberg</font><font color="#F3E651">.</font><font color="#ff0000">org/snonux/gogios</font><font color="#F3E651">.</font><font color="#ff0000">git</font> -<font color="#ff0000">cd gogios</font> -<font color="#ff0000">go build -o gogios cmd/gogios/main</font><font color="#F3E651">.</font><font color="#ff0000">go</font> -<font color="#ff0000">doas cp gogios /usr/local/bin/gogios</font> -<font color="#ff0000">doas chmod </font><font color="#bb00ff">755</font><font color="#ff0000"> /usr/local/bin/gogios</font> +<pre>git clone https://codeberg.org/snonux/gogios.git +cd gogios +go build -o gogios cmd/gogios/main.go +doas cp gogios /usr/local/bin/gogios +doas chmod <font color="#000000">755</font> /usr/local/bin/gogios </pre> <br /> <span>You can use cross-compilation if you want to compile Gogios for OpenBSD on a Linux system without installing the Go compiler on OpenBSD. Follow these steps:</span><br /> @@ -5576,9 +5576,9 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><b><font color="#ffffff">export</font></b><font color="#ff0000"> </font><font color="#ff0000">GOOS</font><font color="#F3E651">=</font><font color="#ff0000">openbsd</font> -<b><font color="#ffffff">export</font></b><font color="#ff0000"> </font><font color="#ff0000">GOARCH</font><font color="#F3E651">=</font><font color="#ff0000">amd64</font> -<font color="#ff0000">go build -o gogios cmd/gogios/main</font><font color="#F3E651">.</font><font color="#ff0000">go</font> +<pre><b><u><font color="#000000">export</font></u></b> GOOS=openbsd +<b><u><font color="#000000">export</font></u></b> GOARCH=amd64 +go build -o gogios cmd/gogios/main.go </pre> <br /> <span>On your OpenBSD system, copy the binary to <span class='inlinecode'>/usr/local/bin/gogios</span> and set the correct permissions as described in the previous section. All steps described here you could automate with your configuration management system of choice. I use Rexify, the friendly configuration management system, to automate the installation, but that is out of the scope of this document.</span><br /> @@ -5593,11 +5593,11 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">doas adduser -group _gogios -batch _gogios</font> -<font color="#ff0000">doas usermod -d /var/run/gogios _gogios</font> -<font color="#ff0000">doas mkdir -p /var/run/gogios</font> -<font color="#ff0000">doas chown _gogios</font><font color="#F3E651">:</font><font color="#ff0000">_gogios /var/run/gogios</font> -<font color="#ff0000">doas chmod </font><font color="#bb00ff">750</font><font color="#ff0000"> /var/run/gogios</font> +<pre>doas adduser -group _gogios -batch _gogios +doas usermod -d /var/run/gogios _gogios +doas mkdir -p /var/run/gogios +doas chown _gogios:_gogios /var/run/gogios +doas chmod <font color="#000000">750</font> /var/run/gogios </pre> <br /> <span>Please note that creating a user and group might differ depending on your operating system. For other operating systems, consult their documentation for creating system users and groups.</span><br /> @@ -5610,8 +5610,8 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">doas pkg_add monitoring-plugins</font> -<font color="#ff0000">doas pkg_add nrpe </font><i><font color="#ababab"># If you want to execute checks remotely via NRPE.</font></i> +<pre>doas pkg_add monitoring-plugins +doas pkg_add nrpe <i><font color="silver"># If you want to execute checks remotely via NRPE.</font></i> </pre> <br /> <span>Once the installation is complete, you can find the monitoring plugins in the <span class='inlinecode'>/usr/local/libexec/nagios</span> directory, which then can be configured to be used in <span class='inlinecode'>gogios.json</span>.</span><br /> @@ -5638,41 +5638,41 @@ echo 'This is a test email from OpenBSD.' | mail -s 'Test Email' by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">{</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">EmailTo</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">paul@dev.buetow.org</font><font color="#ff0000">"</font><font color="#F3E651">,</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">EmailFrom</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">gogios@buetow.org</font><font color="#ff0000">"</font><font color="#F3E651">,</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">CheckTimeoutS</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#bb00ff">10</font><font color="#F3E651">,</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">CheckConcurrency</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#bb00ff">2</font><font color="#F3E651">,</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">StateDir</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">/var/run/gogios</font><font color="#ff0000">"</font><font color="#F3E651">,</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Checks</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">{</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Check ICMP4 www.foo.zone</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">{</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Plugin</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">/usr/local/libexec/nagios/check_ping</font><font color="#ff0000">"</font><font color="#F3E651">,</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Args</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-H</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">www.foo.zone</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-4</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-w</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">50,10%</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-c</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">100,15%</font><font color="#ff0000">"</font><font color="#ff0000"> </font><font color="#F3E651">],</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Retries</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#bb00ff">3</font><font color="#F3E651">,</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">RetryInterval</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#bb00ff">10</font> -<font color="#ff0000"> </font><font color="#F3E651">},</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Check ICMP6 www.foo.zone</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">{</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Plugin</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">/usr/local/libexec/nagios/check_ping</font><font color="#ff0000">"</font><font color="#F3E651">,</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Args</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-H</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">www.foo.zone</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-6</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-w</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">50,10%</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-c</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">100,15%</font><font color="#ff0000">"</font><font color="#ff0000"> </font><font color="#F3E651">],</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Retries</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#bb00ff">3</font><font color="#F3E651">,</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">RetryInterval</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#bb00ff">10</font> -<font color="#ff0000"> </font><font color="#F3E651">},</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">www.foo.zone HTTP IPv4</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">{</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Plugin</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">/usr/local/libexec/nagios/check_http</font><font color="#ff0000">"</font><font color="#F3E651">,</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Args</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">[</font><font color="#ff0000">"</font><font color="#ff0000">www.foo.zone</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-4</font><font color="#ff0000">"</font><font color="#F3E651">],</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">DependsOn</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">[</font><font color="#ff0000">"</font><font color="#ff0000">Check ICMP4 www.foo.zone</font><font color="#ff0000">"</font><font color="#F3E651">]</font> -<font color="#ff0000"> </font><font color="#F3E651">},</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">www.foo.zone HTTP IPv6</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">{</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Plugin</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">/usr/local/libexec/nagios/check_http</font><font color="#ff0000">"</font><font color="#F3E651">,</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Args</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">[</font><font color="#ff0000">"</font><font color="#ff0000">www.foo.zone</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-6</font><font color="#ff0000">"</font><font color="#F3E651">],</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">DependsOn</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">[</font><font color="#ff0000">"</font><font color="#ff0000">Check ICMP6 www.foo.zone</font><font color="#ff0000">"</font><font color="#F3E651">]</font> -<font color="#ff0000"> </font><font color="#F3E651">}</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Check NRPE Disk Usage foo.zone</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">{</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Plugin</font><font color="#ff0000">"</font><font color="#ff0000">:</font><font color="#ff0000"> "</font><font color="#bb00ff">/usr/local/libexec/nagios/check_nrpe</font><font color="#ff0000">"</font><font color="#F3E651">,</font> -<font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">Args</font><font color="#ff0000">"</font><font color="#ff0000">: </font><font color="#F3E651">[</font><font color="#ff0000">"</font><font color="#ff0000">-H</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">foo.zone</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-c</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">check_disk</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-p</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">5666</font><font color="#ff0000">"</font><font color="#F3E651">,</font><font color="#ff0000"> </font><font color="#ff0000">"</font><font color="#ff0000">-4</font><font color="#ff0000">"</font><font color="#F3E651">]</font> -<font color="#ff0000"> </font><font color="#F3E651">}</font> -<font color="#ff0000"> </font><font color="#F3E651">}</font> -<font color="#F3E651">}</font> +<pre>{ + "EmailTo": "<font color="#808080">paul@dev.buetow.org</font>", + "EmailFrom": "<font color="#808080">gogios@buetow.org</font>", + "CheckTimeoutS": <font color="#000000">10</font>, + "CheckConcurrency": <font color="#000000">2</font>, + "StateDir": "<font color="#808080">/var/run/gogios</font>", + "Checks": { + "Check ICMP4 www.foo.zone": { + "Plugin": "<font color="#808080">/usr/local/libexec/nagios/check_ping</font>", + "Args": [ "-H", "www.foo.zone", "-4", "-w", "50,10%", "-c", "100,15%" ], + "Retries": <font color="#000000">3</font>, + "RetryInterval": <font color="#000000">10</font> + }, + "Check ICMP6 www.foo.zone": { + "Plugin": "<font color="#808080">/usr/local/libexec/nagios/check_ping</font>", + "Args": [ "-H", "www.foo.zone", "-6", "-w", "50,10%", "-c", "100,15%" ], + "Retries": <font color="#000000">3</font>, + "RetryInterval": <font color="#000000">10</font> + }, + "www.foo.zone HTTP IPv4": { + "Plugin": "<font color="#808080">/usr/local/libexec/nagios/check_http</font>", + "Args": ["www.foo.zone", "-4"], + "DependsOn": ["Check ICMP4 www.foo.zone"] + }, + "www.foo.zone HTTP IPv6": { + "Plugin": "<font color="#808080">/usr/local/libexec/nagios/check_http</font>", + "Args": ["www.foo.zone", "-6"], + "DependsOn": ["Check ICMP6 www.foo.zone"] + } + "Check NRPE Disk Usage foo.zone": { + "Plugin": "<font color="#808080">/usr/local/libexec/nagios/check_nrpe</font>", + "Args": ["-H", "foo.zone", "-c", "check_disk", "-p", "5666", "-4"] + } + } +} </pre> <br /> <ul> @@ -5701,7 +5701,7 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">doas -u _gogios /usr/local/bin/gogios -cfg /etc/gogios</font><font color="#F3E651">.</font><font color="#ff0000">json</font> +<pre>doas -u _gogios /usr/local/bin/gogios -cfg /etc/gogios.json </pre> <br /> <span>To run Gogios via CRON on OpenBSD as the <span class='inlinecode'>gogios</span> user and check all services once per minute, follow these steps:</span><br /> @@ -5951,7 +5951,7 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#ff0000">$ raku guprecords</font><font color="#F3E651">.</font><font color="#ff0000">raku --stats</font><font color="#F3E651">=</font><font color="#ff0000">dir</font><font color="#F3E651">=</font><font color="#ff0000">$HOME</font><font color="#ff0000">/git/uprecords/stats --all</font> +<pre>$ raku guprecords.raku --stats=dir=$HOME/git/uprecords/stats --all </pre> <br /> <span>This command will generate a comprehensive uptime report from the collected statistics, making it easy to review and enjoy the data.</span><br /> @@ -6363,8 +6363,8 @@ Blablabla... by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><b><font color="#ffffff">declare</font></b><font color="#ff0000"> -xr </font><font color="#ff0000">PRE_GENERATE_HOOK</font><font color="#F3E651">=.</font><font color="#ff0000">/pre_generate_hook</font><font color="#F3E651">.</font><font color="#ff0000">sh</font> -<b><font color="#ffffff">declare</font></b><font color="#ff0000"> -xr </font><font color="#ff0000">POST_PUBLISH_HOOK</font><font color="#F3E651">=.</font><font color="#ff0000">/post_publish_hook</font><font color="#F3E651">.</font><font color="#ff0000">sh</font> +<pre><b><u><font color="#000000">declare</font></u></b> -xr PRE_GENERATE_HOOK=./pre_generate_hook.sh +<b><u><font color="#000000">declare</font></u></b> -xr POST_PUBLISH_HOOK=./post_publish_hook.sh </pre> <br /> <h2 style='display: inline' id='use-of-safer-bash-options'>Use of safer Bash options</h2><br /> @@ -6381,10 +6381,10 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> cat gemfeed</font><font color="#F3E651">/</font><font color="#bb00ff">2023</font><font color="#ff0000">-</font><font color="#bb00ff">02</font><font color="#ff0000">-</font><font color="#bb00ff">26</font><font color="#ff0000">-title-here</font><font color="#F3E651">.</font><font color="#ff0000">gmi</font> -<i><font color="#ababab"># Title here</font></i> +<pre>% cat gemfeed/<font color="#000000">2023</font>-<font color="#000000">02</font>-<font color="#000000">26</font>-title-here.gmi +<i><font color="silver"># Title here</font></i> -<font color="#ff0000">The remaining content of the Gemtext file</font><font color="#F3E651">...</font> +The remaining content of the Gemtext file... </pre> <br /> <span>Gemtexter will add a line starting with <span class='inlinecode'>> Published at ...</span> now. Any subsequent Atom feed generation will then use that date.</span><br /> @@ -6393,12 +6393,12 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">%</font><font color="#ff0000"> cat gemfeed</font><font color="#F3E651">/</font><font color="#bb00ff">2023</font><font color="#ff0000">-</font><font color="#bb00ff">02</font><font color="#ff0000">-</font><font color="#bb00ff">26</font><font color="#ff0000">-title-here</font><font color="#F3E651">.</font><font color="#ff0000">gmi</font> -<i><font color="#ababab"># Title here</font></i> +<pre>% cat gemfeed/<font color="#000000">2023</font>-<font color="#000000">02</font>-<font color="#000000">26</font>-title-here.gmi +<i><font color="silver"># Title here</font></i> -<font color="#F3E651">></font><font color="#ff0000"> Published at </font><font color="#bb00ff">2023</font><font color="#ff0000">-</font><font color="#bb00ff">02</font><font color="#ff0000">-26T21</font><font color="#F3E651">:</font><font color="#bb00ff">43</font><font color="#F3E651">:</font><font color="#bb00ff">51</font><font color="#F3E651">+</font><font color="#bb00ff">01</font><font color="#F3E651">:</font><font color="#bb00ff">00</font> +> Published at <font color="#000000">2023</font>-<font color="#000000">02</font>-26T21:<font color="#000000">43</font>:<font color="#000000">51</font>+<font color="#000000">01</font>:<font color="#000000">00</font> -<font color="#ff0000">The remaining content of the Gemtext file</font><font color="#F3E651">...</font> +The remaining content of the Gemtext file... </pre> <br /> <h2 style='display: inline' id='xmllint-support'>XMLLint support</h2><br /> @@ -7047,10 +7047,10 @@ Art by \ \_! / __! by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><i><font color="#ababab">" Clipboard</font></i> -<font color="#ff0000">vnoremap ,</font><b><font color="#ffffff">y</font></b><font color="#ff0000"> !pbcopy</font><font color="#ff0000"><CR></font><font color="#ff0000">ugv</font> -<font color="#ff0000">vnoremap ,</font><b><font color="#ffffff">i</font></b><font color="#ff0000"> !pbpaste</font><font color="#ff0000"><CR></font> -<font color="#ff0000">nmap ,</font><b><font color="#ffffff">i</font></b><font color="#ff0000"> !wpbpaste</font><font color="#ff0000"><CR></font> +<pre><i><font color="silver">" Clipboard</font></i> +vnoremap ,<b><u><font color="#000000">y</font></u></b> !pbcopy<CR>ugv +vnoremap ,<b><u><font color="#000000">i</font></u></b> !pbpaste<CR> +nmap ,<b><u><font color="#000000">i</font></u></b> !wpbpaste<CR> </pre> <br /> <span>That's only a very few lines and does precisely what I want. It's quick and dirty but get's the job done! If VimScript becomes too cumbersome, I can use Lua for NeoVim scripting.</span><br /> @@ -7670,23 +7670,23 @@ jgs (________\ \ by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#7bc710">check_dependencies ()</font><font color="#ff0000"> {</font> -<font color="#ff0000"> </font><i><font color="#ababab"># At least, Bash 5 is required</font></i> -<font color="#ff0000"> </font><b><font color="#ffffff">local</font></b><font color="#ff0000"> -i </font><font color="#ff0000">required_version</font><font color="#F3E651">=</font><font color="#bb00ff">5</font> -<font color="#ff0000"> </font><font color="#ff0000">IFS</font><font color="#F3E651">=.</font><font color="#ff0000"> </font><b><font color="#ffffff">read</font></b><font color="#ff0000"> -ra version </font><font color="#F3E651"><<<</font><font color="#ff0000"> </font><font color="#bb00ff">"$BASH_VERSION"</font> -<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">[</font><font color="#ff0000"> </font><font color="#bb00ff">"${version[0]}"</font><font color="#ff0000"> -lt </font><font color="#ff0000">$required_version</font><font color="#ff0000"> </font><font color="#F3E651">];</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> log ERROR </font><font color="#bb00ff">"ERROR, </font><font color="#ffffff">\"</font><font color="#bb00ff">bash</font><font color="#ffffff">\"</font><font color="#bb00ff"> must be at least at major version $required_version!"</font> -<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">2</font> -<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b> - -<font color="#ff0000"> </font><i><font color="#ababab"># These must be the GNU versions of the commands</font></i> -<font color="#ff0000"> </font><b><font color="#ffffff">for</font></b><font color="#ff0000"> tool </font><b><font color="#ffffff">in</font></b><font color="#ff0000"> </font><font color="#ff0000">$DATE</font><font color="#ff0000"> </font><font color="#ff0000">$SED</font><font color="#ff0000"> </font><font color="#ff0000">$GREP</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">do</font></b> -<font color="#ff0000"> </font><b><font color="#ffffff">if</font></b><font color="#ff0000"> </font><font color="#F3E651">!</font><font color="#ff0000"> </font><font color="#ff0000">$tool</font><font color="#ff0000"> --version </font><font color="#F3E651">|</font><font color="#ff0000"> grep -q GNU</font><font color="#F3E651">;</font><font color="#ff0000"> </font><b><font color="#ffffff">then</font></b> -<font color="#ff0000"> log ERROR </font><font color="#bb00ff">"ERROR, </font><font color="#ffffff">\"</font><font color="#bb00ff">$tool</font><font color="#ffffff">\"</font><font color="#bb00ff"> command is not the GNU version, please install!"</font> -<font color="#ff0000"> </font><b><font color="#ffffff">exit</font></b><font color="#ff0000"> </font><font color="#bb00ff">2</font> -<font color="#ff0000"> </font><b><font color="#ffffff">fi</font></b> -<font color="#ff0000"> </font><b><font color="#ffffff">done</font></b> -<font color="#ff0000">}</font> +<pre>check_dependencies () { + <i><font color="silver"># At least, Bash 5 is required</font></i> + <b><u><font color="#000000">local</font></u></b> -i required_version=<font color="#000000">5</font> + IFS=. <b><u><font color="#000000">read</font></u></b> -ra version <<< <font color="#808080">"$BASH_VERSION"</font> + <b><u><font color="#000000">if</font></u></b> [ <font color="#808080">"${version[0]}"</font> -lt $required_version ]; <b><u><font color="#000000">then</font></u></b> + log ERROR <font color="#808080">"ERROR, </font>\"<font color="#808080">bash</font>\"<font color="#808080"> must be at least at major version $required_version!"</font> + <b><u><font color="#000000">exit</font></u></b> <font color="#000000">2</font> + <b><u><font color="#000000">fi</font></u></b> + + <i><font color="silver"># These must be the GNU versions of the commands</font></i> + <b><u><font color="#000000">for</font></u></b> tool <b><u><font color="#000000">in</font></u></b> $DATE $SED $GREP; <b><u><font color="#000000">do</font></u></b> + <b><u><font color="#000000">if</font></u></b> ! $tool --version | grep -q GNU; <b><u><font color="#000000">then</font></u></b> + log ERROR <font color="#808080">"ERROR, </font>\"<font color="#808080">$tool</font>\"<font color="#808080"> command is not the GNU version, please install!"</font> + <b><u><font color="#000000">exit</font></u></b> <font color="#000000">2</font> + <b><u><font color="#000000">fi</font></u></b> + <b><u><font color="#000000">done</font></u></b> +} </pre> <br /> <span>Especially macOS users didn't read the <span class='inlinecode'>README</span> carefully enough to install GNU Grep, GNU Sed and GNU Date before using Gemtexter.</span><br /> @@ -7707,7 +7707,7 @@ http://www.gnu.org/software/src-highlite --> by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -<pre><font color="#F3E651">.</font><font color="#ff0000">/gemtexter --generate </font><font color="#bb00ff">'.*hello.*'</font> +<pre>./gemtexter --generate <font color="#808080">'.*hello.*'</font> </pre> <br /> <h3 style='display: inline' id='revamped-git-support'>Revamped <span class='inlinecode'>git</span> support</h3><br /> @@ -1,6 +1,6 @@ # foo.zone -> This site was generated at 2024-12-23T20:15:07+02:00 by `Gemtexter` +> This site was generated at 2024-12-30T00:05:13+02:00 by `Gemtexter` Welcome to the foo.zone. Everything you read on this site is my personal opinion and experience. You can call me a Linux/*BSD enthusiast and hobbyist. I mainly write about tech, IT, programming and sometimes also about self-improvement here. Note that this blog usually does not overlap with what I do at my day job as a Site Reliability Engineer. diff --git a/notes/the-stoic-challenge.gmi b/notes/the-stoic-challenge.gmi index f879edd7..8f8d9743 100644 --- a/notes/the-stoic-challenge.gmi +++ b/notes/the-stoic-challenge.gmi @@ -19,11 +19,11 @@ These are my personal takeaways after reading "The Stoic Challenge: A Philosoph ## Table of Contents * ⇢ "The Stoic Challenge" book notes -* ⇢ ⇢ Got sets you up for a challenge +* ⇢ ⇢ God sets you up for a challenge * ⇢ ⇢ Negative visualization * ⇢ ⇢ Oh, nice trick, you stoic "god"! ;-) -## Got sets you up for a challenge +## God sets you up for a challenge Gods set you up for a challenge to see how resilient you are. Is getting angry worth the price? If you stay calm then you can find the optimal workaround for the obstacle. Stay calm even with big setbacks. Practice minimalism of negative emotions. diff --git a/uptime-stats.gmi b/uptime-stats.gmi index d5b5d71e..b0c2f72c 100644 --- a/uptime-stats.gmi +++ b/uptime-stats.gmi @@ -1,6 +1,6 @@ # My machine uptime stats -> This site was last updated at 2024-12-23T20:15:07+02:00 +> This site was last updated at 2024-12-30T00:05:13+02:00 The following stats were collected via `uptimed` on all of my personal computers over many years and the output was generated by `guprecords`, the global uptime records stats analyser of mine. |
