From 1fa75cce16c5ccd9c260047668d2a505c9cc1a29 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 22 Jan 2022 16:29:09 +0000 Subject: Publishing new version --- contact-information.html | 2 +- favicon.ico | Bin 8368 -> 1077 bytes gemfeed/2008-06-26-perl-poetry.html | 4 +- ...12-29-using-my-nokia-n95-for-fixing-my-mta.html | 4 +- gemfeed/2010-04-09-standard-ml-and-haskell.html | 4 +- ...010-05-07-lazy-evaluation-with-standarn-ml.html | 4 +- .../2010-05-09-the-fype-programming-language.html | 4 +- .../2011-05-07-perl-daemon-service-framework.html | 4 +- .../2014-03-24-the-fibonacci.pl.c-polyglot.html | 4 +- ...2-05-run-debian-on-your-phone-with-debroid.html | 4 +- gemfeed/2016-04-03-offsite-backup-with-zfs.html | 4 +- ...04-09-jails-and-zfs-on-freebsd-with-puppet.html | 4 +- .../2016-04-16-offsite-backup-with-zfs-part2.html | 4 +- ...inning-up-my-own-authoritative-dns-servers.html | 4 +- gemfeed/2016-11-20-methods-in-c.html | 4 +- ...alistic-load-testing-with-ioriot-for-linux.html | 4 +- ...-22-dtail-the-distributed-log-tail-program.html | 4 +- gemfeed/2021-04-24-welcome-to-the-geminispace.html | 6 +- ...021-05-16-personal-bash-coding-style-guide.html | 4 +- ...5-gemtexter-one-bash-script-to-rule-it-all.html | 4 +- gemfeed/2021-07-04-the-well-grounded-rubyist.html | 4 +- ...-08-01-on-being-pedantic-about-open-source.html | 4 +- gemfeed/2021-09-12-keep-it-simple-and-stupid.html | 4 +- gemfeed/2021-10-22-defensive-devops.html | 4 +- gemfeed/2021-11-29-bash-golf-part-1.html | 8 +- ...-12-26-how-to-stay-sane-as-a-devops-person.html | 4 +- gemfeed/2022-01-01-bash-golf-part-2.html | 4 +- gemfeed/atom.xml | 226 ++++++++++----------- gemfeed/index.html | 56 ++--- index.html | 6 +- other-resources.html | 4 +- resources.html | 2 +- site-mirrors.html | 18 +- 33 files changed, 207 insertions(+), 213 deletions(-) diff --git a/contact-information.html b/contact-information.html index ff572412..7e732893 100644 --- a/contact-information.html +++ b/contact-information.html @@ -36,7 +36,7 @@ diff --git a/favicon.ico b/favicon.ico index 09fd0ed4..999c023e 100644 Binary files a/favicon.ico and b/favicon.ico differ diff --git a/gemfeed/2008-06-26-perl-poetry.html b/gemfeed/2008-06-26-perl-poetry.html index 1c29dfa3..dfbac945 100644 --- a/gemfeed/2008-06-26-perl-poetry.html +++ b/gemfeed/2008-06-26-perl-poetry.html @@ -155,12 +155,12 @@ This is perl, v5.8.8 built for i386-freebsd-64int

More...

Did you like what you saw? Have a look at Codeberg to see my other poems too:

https://codeberg.org/snonux/perl-poetry
-

E-Mail me your comments to snonux@snonux.de!

+

E-Mail me your comments to paul at buetow dot org!

Go back to the main site
diff --git a/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta.html b/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta.html index dcf5e6d8..7c154dcf 100644 --- a/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta.html +++ b/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta.html @@ -37,12 +37,12 @@ _jgs_\|//_\\|///_\V/_\|//__

It was a pain in the ass. My next mobile phone MUST have a full QWERTY keyboard. This would have made my life lots easier. :)

At the moment I am in Sofia, Bulgaria. Here I can use at least an unprotected WLAN hotspot which belongs to one of the neighbours which I don’t know in person, and it is not blocking any port at all :)

-

E-Mail me your comments to snonux@snonux.de!

+

E-Mail me your comments to paul at buetow dot org!

Go back to the main site
diff --git a/gemfeed/2010-04-09-standard-ml-and-haskell.html b/gemfeed/2010-04-09-standard-ml-and-haskell.html index 6f4efc88..6aa365a9 100644 --- a/gemfeed/2010-04-09-standard-ml-and-haskell.html +++ b/gemfeed/2010-04-09-standard-ml-and-haskell.html @@ -145,12 +145,12 @@ my_map f l = foldr (make_map_fn f) [] l fun my_filter f l = foldr (make_filter_fn f) [] l my_filter f l = foldr (make_filter_fn f) [] l -

E-Mail me your comments to snonux@snonux.de!

+

E-Mail me your comments to paul at buetow dot org!

Go back to the main site
diff --git a/gemfeed/2010-05-07-lazy-evaluation-with-standarn-ml.html b/gemfeed/2010-05-07-lazy-evaluation-with-standarn-ml.html index e7f5d92e..7567de06 100644 --- a/gemfeed/2010-05-07-lazy-evaluation-with-standarn-ml.html +++ b/gemfeed/2010-05-07-lazy-evaluation-with-standarn-ml.html @@ -91,12 +91,12 @@ first 10 nat_pairs_not_null -} http://www.haskell.org/
-

E-Mail me your comments to snonux@snonux.de!

+

E-Mail me your comments to paul at buetow dot org!

Go back to the main site
diff --git a/gemfeed/2010-05-09-the-fype-programming-language.html b/gemfeed/2010-05-09-the-fype-programming-language.html index 5baa1fe2..ae6cf205 100644 --- a/gemfeed/2010-05-09-the-fype-programming-language.html +++ b/gemfeed/2010-05-09-the-fype-programming-language.html @@ -406,12 +406,12 @@ BB

May the source be with you

You can find all of this on the GitHub page. There is also an "examples" folders containing some Fype scripts!

https://codeberg.org/snonux/fype
-

E-Mail me your comments to snonux@snonux.de!

+

E-Mail me your comments to paul at buetow dot org!

Go back to the main site
diff --git a/gemfeed/2011-05-07-perl-daemon-service-framework.html b/gemfeed/2011-05-07-perl-daemon-service-framework.html index e6dcccf1..60748171 100644 --- a/gemfeed/2011-05-07-perl-daemon-service-framework.html +++ b/gemfeed/2011-05-07-perl-daemon-service-framework.html @@ -137,12 +137,12 @@ sub do ($) {

May the source be with you

You can find PerlDaemon (including the examples) at:

https://codeberg.org/snonux/perldaemon
-

E-Mail me your comments to snonux@snonux.de!

+

E-Mail me your comments to paul at buetow dot org!

Go back to the main site
diff --git a/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot.html b/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot.html index e581e1e1..a347e686 100644 --- a/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot.html +++ b/gemfeed/2014-03-24-the-fibonacci.pl.c-polyglot.html @@ -99,12 +99,12 @@ fib(9) = 34 fib(10) = 55

It's entertaining to play with :-).

-

E-Mail me your comments to snonux@snonux.de!

+

E-Mail me your comments to paul at buetow dot org!

Go back to the main site
diff --git a/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.html b/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.html index 3445fd4e..826f458d 100644 --- a/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.html +++ b/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.html @@ -155,12 +155,12 @@ chmod +x /data/local/userinit.sh exit

Reboot & test! Enjoy!

-

E-Mail me your comments to snonux@snonux.de!

+

E-Mail me your comments to paul at buetow dot org!

Go back to the main site
diff --git a/gemfeed/2016-04-03-offsite-backup-with-zfs.html b/gemfeed/2016-04-03-offsite-backup-with-zfs.html index 5e1da3b4..aff37a62 100644 --- a/gemfeed/2016-04-03-offsite-backup-with-zfs.html +++ b/gemfeed/2016-04-03-offsite-backup-with-zfs.html @@ -32,12 +32,12 @@

The solution is adding another USB drive (2TB) with an encryption container (GELI) and a ZFS pool. The GELI encryption requires a secret key and a secret passphrase. I am updating the data to that drive once every three months (my calendar is reminding me about it), and afterwards, I keep that drive at a secret location outside of my apartment. All the information needed to decrypt (mounting the GELI container) is stored at another (secure) place. Key and passphrase are kept at different sites, though. Even if someone knew of it, he would not be able to decrypt it as some additional insider knowledge would be required as well.

Walking one round less

I am thinking of buying a second 2TB USB drive and setting it up the same way as the first one. So I could alternate the backups. One drive would be at the secret location, and the other drive would be at home. And these drives would swap place after each cycle. This would give some security about the failure of that drive, and I would have to go to the secret location only once (swapping the drives) instead of twice (picking that drive up to update the data + bringing it back to the remote location).

-

E-Mail me your comments to snonux@snonux.de!

+

E-Mail me your comments to paul at buetow dot org!

Go back to the main site
diff --git a/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html b/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html index 1718fdcd..c39a57ed 100644 --- a/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html +++ b/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.html @@ -370,12 +370,12 @@ Notice: Finished catalog run in 206.09 seconds
  • ...etc
  • All done in a pretty automated manor.

    -

    E-Mail me your comments to snonux@snonux.de!

    +

    E-Mail me your comments to paul at buetow dot org!

    Go back to the main site
    diff --git a/gemfeed/2016-04-16-offsite-backup-with-zfs-part2.html b/gemfeed/2016-04-16-offsite-backup-with-zfs-part2.html index 9cae9350..af08914f 100644 --- a/gemfeed/2016-04-16-offsite-backup-with-zfs-part2.html +++ b/gemfeed/2016-04-16-offsite-backup-with-zfs-part2.html @@ -27,12 +27,12 @@

    I enhanced the procedure a bit. From now on, I have two external 2TB USB hard drives. Both are set up precisely the same way. To decrease the probability that both drives will not fail simultaneously, they are of different brands. One drive is kept at a secret location. The other one is held at home, right next to my HP MicroServer.

    Whenever I update the offsite backup, I am doing it to the drive, which is kept locally. Afterwards, I bring it to the secret location, swap the drives, and bring the other back home. This ensures that I will always have an offsite backup available at a different location than my home - even while updating one copy of it.

    Furthermore, I added scrubbing ("zpool scrub...") to the script. It ensures that the file system is consistent and that there are no bad blocks on the disk and the file system. To increase the reliability, I also run a "zfs set copies=2 zroot". That setting is also synchronized to the offsite ZFS pool. ZFS stores every data block to disk twice now. Yes, it consumes twice as much disk space, making it better fault-tolerant against hardware errors (e.g. only individual disk sectors going bad).

    -

    E-Mail me your comments to snonux@snonux.de!

    +

    E-Mail me your comments to paul at buetow dot org!

    Go back to the main site
    diff --git a/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.html b/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.html index bbf4ef47..697055e7 100644 --- a/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.html +++ b/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.html @@ -216,12 +216,12 @@ apply Service "dig6" {
  • The BIND server will notify all slave DNS servers (at the moment, only one). And it will transfer the new version of the zone.
  • That's much more comfortable now than manually clicking at some web UIs at Schlund Technologies.

    -

    E-Mail me your comments to snonux@snonux.de!

    +

    E-Mail me your comments to paul at buetow dot org!

    Go back to the main site
    diff --git a/gemfeed/2016-11-20-methods-in-c.html b/gemfeed/2016-11-20-methods-in-c.html index 49b73fb5..ffcad7e3 100644 --- a/gemfeed/2016-11-20-methods-in-c.html +++ b/gemfeed/2016-11-20-methods-in-c.html @@ -71,12 +71,12 @@ mult.calculate(mult,a,b));

    How to overcome this? You need to take it further.

    Taking it further

    If you want to take it further, type "Object-Oriented Programming with ANSI-C" into your favourite internet search engine, you will find some crazy stuff. Some go as far as writing a C preprocessor in AWK, which takes some object-oriented pseudo-C and transforms it to plain C so that the C compiler can compile it to machine code. This is similar to how the C++ language had its origins.

    -

    E-Mail me your comments to snonux@snonux.de!

    +

    E-Mail me your comments to paul at buetow dot org!

    Go back to the main site
    diff --git a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.html b/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.html index bd5f6eeb..6a087934 100644 --- a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.html +++ b/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.html @@ -130,12 +130,12 @@ Total time: 1213.00s Bonnie++
    Graphite
    Memory mapped I/O
    -

    E-Mail me your comments to snonux@snonux.de!

    +

    E-Mail me your comments to paul at buetow dot org!

    Go back to the main site
    diff --git a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html index c5a9a00f..b7b0a103 100644 --- a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html +++ b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html @@ -72,12 +72,12 @@ dtail –servers serverlist.txt –files ‘/var/log/*.log’ –regex ‘(?i:er

    Open Source

    Mimecast highly encourages you to have a look at DTail and submit an issue for any features you would like to see. Have you found a bug? Maybe you just have a question or comment? If you want to go a step further: We would also love to see pull requests for any features or improvements. Either way, if in doubt just contact us via the DTail GitHub page.

    https://dtail.dev
    -

    E-Mail me your comments to snonux@snonux.de!

    +

    E-Mail me your comments to paul at buetow dot org!

    Go back to the main site
    diff --git a/gemfeed/2021-04-24-welcome-to-the-geminispace.html b/gemfeed/2021-04-24-welcome-to-the-geminispace.html index fac5cb25..9be33562 100644 --- a/gemfeed/2021-04-24-welcome-to-the-geminispace.html +++ b/gemfeed/2021-04-24-welcome-to-the-geminispace.html @@ -10,7 +10,7 @@

    Welcome to the Geminispace

    Published by Paul Buetow 2021-04-24, last updated 2021-06-18, ASCII Art by Andy Hood

    Have you reached this article already via Gemini? It requires a Gemini client; web browsers such as Firefox, Chrome, Safari, etc., don't support the Gemini protocol. The Gemini address of this site (or the address of this capsule as people say in Geminispace) is:

    -gemini://snonux.de
    +gemini://foo.surf

    However, if you still use HTTP, you are just surfing the fallback HTML version of this capsule. In that case, I suggest reading on what this is all about :-).

     
    @@ -61,12 +61,12 @@
     

    Check out one of the following links for more information about Gemini. For example, you will find a FAQ that explains why the protocol is named Gemini. Many Gemini capsules are dual-hosted via Gemini and HTTP(S) so that people new to Gemini can sneak peek at the content with a regular web browser. Some people go as far as tri-hosting all their content via HTTP(S), Gemini and Gopher.

    gemini://gemini.circumlunar.space
    https://gemini.circumlunar.space
    -

    E-Mail me your comments to snonux@snonux.de!

    +

    E-Mail me your comments to paul at buetow dot org!

    Go back to the main site
    diff --git a/gemfeed/2021-05-16-personal-bash-coding-style-guide.html b/gemfeed/2021-05-16-personal-bash-coding-style-guide.html index b0265d04..9f998ec7 100644 --- a/gemfeed/2021-05-16-personal-bash-coding-style-guide.html +++ b/gemfeed/2021-05-16-personal-bash-coding-style-guide.html @@ -299,12 +299,12 @@ fi

    Advanced Bash learning pro tip

    I also highly recommend having a read through the "Advanced Bash-Scripting Guide" (not from Google). I use it as the universal Bash reference and learn something new every time I look at it.

    Advanced Bash-Scripting Guide
    -

    E-Mail me your comments to snonux@snonux.de!

    +

    E-Mail me your comments to paul at buetow dot org!

    Go back to the main site
    diff --git a/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html b/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html index 08924198..21e5e37a 100644 --- a/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html +++ b/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html @@ -130,12 +130,12 @@ assert::equals "$(generate::make_link md "$gemtext")" \

    Conclusion

    It was quite a lot of fun writing Gemtexter. It's a relatively small project, but given that I worked on that in my spare time once in a while, it kept me busy for several weeks.

    I finally revamped my personal internet site and started to blog again. I wanted the result to be exactly how it is now: A slightly retro-inspired internet site built for fun with unconventional tools.

    -

    E-Mail me your comments to snonux@snonux.de!

    +

    E-Mail me your comments to paul at buetow dot org!

    Go back to the main site
    diff --git a/gemfeed/2021-07-04-the-well-grounded-rubyist.html b/gemfeed/2021-07-04-the-well-grounded-rubyist.html index 1bcacb41..2bba5ec5 100644 --- a/gemfeed/2021-07-04-the-well-grounded-rubyist.html +++ b/gemfeed/2021-07-04-the-well-grounded-rubyist.html @@ -72,12 +72,12 @@ Hello World

    I liked this book so much so that I even bought myself a (used) paper copy of it. To my delight, there was also a free eBook version in ePub format included, which I now have on my Kobo Forma eBook reader. :-)

    Perl

    Will I abandon my beloved Perl? Probably not. There are also some Perl scripts I use at work. But unfortunately I only have a limited amount of time and I have to use it wisely. I might look into Raku (formerly known as Perl 6) next year and use it for a personal pet project, who knows. :-). I also highly recommend reading the two Perl books "Modern Perl" and "Higher-Order Perl".

    -

    E-Mail me your comments to snonux@snonux.de!

    +

    E-Mail me your comments to paul at buetow dot org!

    Go back to the main site
    diff --git a/gemfeed/2021-08-01-on-being-pedantic-about-open-source.html b/gemfeed/2021-08-01-on-being-pedantic-about-open-source.html index ebb4d3a3..4ebf8028 100644 --- a/gemfeed/2021-08-01-on-being-pedantic-about-open-source.html +++ b/gemfeed/2021-08-01-on-being-pedantic-about-open-source.html @@ -70,12 +70,12 @@

    Conclusion

    Should you be pedantic about open-source software? It depends. It depends on your fundamental values and how much time you are ready to invest. Open-source software is not just free as in money, but also free as in freedom. You will gain back complete control of your personal data. Unfortunately, installing ready proprietary apps from the Play Store is much more convenient than building up a trustworthy open-source-based infrastructure by yourself. As a guideline, use proprietary software and services with caution. Be mindful about your choices and where you leave your digital fingerprints. In doubt, think less is more. Do you really need this new shiny app? What benefit does it provide to you? Probably you don't really need that shiny new app.

    You have better chances when you know how to manage your own server and install and manage alternatives to the big cloud providers by yourself. I have the advantage that I have work experience as a Linux Systems Administrator here. I mentioned NextCloud already. I use NextCloud for online photo and file storage, contact and calendar sync and as an RSS news feed server. You could do the same with your own E-Mail server, you can also host your own website and blog. I also mentioned Matrix as a Skype alternative (which could also be an alternative to WhatsApp, Skype, Telegram, Viber, ...). I don't know a lot about Matrix yet, but it seems to be a very neat alternative. I am ready to invest time in it as one of my future personal pet projects. Not only because I think it's better, but also because for fun and as a hobby. But this doesn't mean that I invest *all* of my personal free time in it.

    -

    E-Mail me your comments to snonux@snonux.de!

    +

    E-Mail me your comments to paul at buetow dot org!

    Go back to the main site
    diff --git a/gemfeed/2021-09-12-keep-it-simple-and-stupid.html b/gemfeed/2021-09-12-keep-it-simple-and-stupid.html index 5536ea33..2e4c4b53 100644 --- a/gemfeed/2021-09-12-keep-it-simple-and-stupid.html +++ b/gemfeed/2021-09-12-keep-it-simple-and-stupid.html @@ -58,12 +58,12 @@ https://thevaluable.dev/kiss-principle-explained/

    When KISS is not KISS anymore

    There is, however, a trap. The more you spend time with things, the more these things feel natural to you and you become an expert. The more you become an expert, the more you introduce more abstractions and other clever ways of doing things. For you, things seem to be KISS still, but another person may not be an expert and might not understand what you do. One of the fundamental challenges is to keep things really KISS. You might add abstraction upon abstraction to a system and don't even notice it until it is too late.

    -

    Enough ranted for now :-). E-Mail me your comments to snonux@snonux.de!

    +

    Enough ranted for now :-). E-Mail me your comments to paul at buetow dot org!

    Go back to the main site
    diff --git a/gemfeed/2021-10-22-defensive-devops.html b/gemfeed/2021-10-22-defensive-devops.html index 96bddc9b..1d9d0622 100644 --- a/gemfeed/2021-10-22-defensive-devops.html +++ b/gemfeed/2021-10-22-defensive-devops.html @@ -70,12 +70,12 @@

    Retrospective

    For every major incident, you need to follow up with an incident retrospective. A blame-free, detailed description of exactly what went wrong to cause the incident, along with a list of steps to take to prevent a similar incident from occurring again in the future.

    This usually means creating one or more tickets, which will be dealt with soon. Once the permanent fix is deployed, you can remove your ad-hoc automation and monitoring around it and focus on your regular work again.

    -

    E-Mail me your comments to snonux@snonux.de!

    +

    E-Mail me your comments to paul at buetow dot org!

    Go back to the main site
    diff --git a/gemfeed/2021-11-29-bash-golf-part-1.html b/gemfeed/2021-11-29-bash-golf-part-1.html index 253108c2..d3d028f6 100644 --- a/gemfeed/2021-11-29-bash-golf-part-1.html +++ b/gemfeed/2021-11-29-bash-golf-part-1.html @@ -233,9 +233,9 @@ Hello world
  • The second pipes "Hello world" via stdout to stdin of the "cat" command. As cat's argument is "-" it reads its data from stdin and not from a regular file named "-". So "-" has a special meaning for cat.
  • The third and fourth examples are interesting as we don't use a pipe as of "|" but a so-called HERE-document and a HERE-string. But the end results are the same.
  • -

    The "tar" command understands "-" too. The following example tars up some local directory and sends the data to stdout (this is what "-f -" commands it to do). stdout then is piped via an SSH session to a remote tar process (running on snonux.de) and reads the data from stdin and extracts all the data coming from stdin (as we told tar with "-f -") on the remote machine:

    +

    The "tar" command understands "-" too. The following example tars up some local directory and sends the data to stdout (this is what "-f -" commands it to do). stdout then is piped via an SSH session to a remote tar process (running on buetow.org) and reads the data from stdin and extracts all the data coming from stdin (as we told tar with "-f -") on the remote machine:

    -❯ tar -czf - /some/dir | ssh hercules@snonux.de tar -xzvf - 
    +❯ tar -czf - /some/dir | ssh hercules@buetow.org tar -xzvf - 
     

    This is yet another example of using "-", but this time using the "file" command:

    @@ -374,12 +374,12 @@ bash: line 1: 1/10.0 : syntax error: invalid arithmetic operator (error token is
     ❯ bc <<< 'scale=2; 1/10'
     .10
     
    -

    See you later for the next post of this series. E-Mail me your comments to snonux@snonux.de!

    +

    See you later for the next post of this series. E-Mail me your comments to paul at buetow dot org!

    Go back to the main site
    diff --git a/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person.html b/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person.html index 873352b0..cf0ab0db 100644 --- a/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person.html +++ b/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person.html @@ -83,12 +83,12 @@

    More

    Another blog post worth reading:

    https://unixsheikh.com/articles/how-to-stay-sane-in-todays-world-of-tech.html
    -

    E-Mail me your comments to snonux@snonux.de!

    +

    E-Mail me your comments to paul at buetow dot org!

    Go back to the main site
    diff --git a/gemfeed/2022-01-01-bash-golf-part-2.html b/gemfeed/2022-01-01-bash-golf-part-2.html index 6855c546..65523b11 100644 --- a/gemfeed/2022-01-01-bash-golf-part-2.html +++ b/gemfeed/2022-01-01-bash-golf-part-2.html @@ -403,12 +403,12 @@ PAUL:X:1000:1000:PAUL BUETOW:/HOME/PAUL:/BIN/BASH ❯ echo $? 1
    -

    E-Mail me your comments to snonux@snonux.de!

    +

    E-Mail me your comments to paul at buetow dot org!

    Go back to the main site
    diff --git a/gemfeed/atom.xml b/gemfeed/atom.xml index f4584519..04ebd514 100644 --- a/gemfeed/atom.xml +++ b/gemfeed/atom.xml @@ -1,15 +1,15 @@ - 2022-01-12T05:34:41+00:00 - snonux.de feed + 2022-01-22T16:28:55+00:00 + foo.surf feed Having fun with computers! - - - https://snonux.de/ + + + https://foo.surf/ Bash Golf Part 2 - - https://snonux.de/gemfeed/2022-01-01-bash-golf-part-2.html + + https://foo.surf/gemfeed/2022-01-01-bash-golf-part-2.html 2022-01-01T23:36:15+00:00 Paul Buetow @@ -32,8 +32,8 @@ jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    Published by Paul Buetow 2022-01-01, last updated 2022-01-05

    This is the second blog post about my Bash Golf series. This series is random Bash tips, tricks and weirdnesses I came across. It's a collection of smaller articles I wrote in an older (in German language) blog, which I translated and refreshed with some new content.

    -Bash Golf Part 1
    -Bash Golf Part 2 (you are reading this atm.)
    +Bash Golf Part 1
    +Bash Golf Part 2 (you are reading this atm.)

    Redirection

    Let's have a closer look at Bash redirection. As you might already know that there are 3 standard file descriptors:

      @@ -382,7 +382,7 @@ Hello You!

      Why does calling "foo" with no arguments make the script terminate? Because as no argument was given, the "shift" won't have anything to do as the argument list $@ is empty, and therefore "shift" fails with a non-zero status.

      Why would you want to use "shift" after function-local variable assignments? Have a look at my personal Bash coding style guide for an explanation :-):

      -./2021-05-16-personal-bash-coding-style-guide.html
      +./2021-05-16-personal-bash-coding-style-guide.html

      pipefail

      The pipefail option makes it so that not only the exit code of the last command of the pipe counts regards its exit code but any command of the pipe:

      @@ -414,14 +414,14 @@ PAUL:X:1000:1000:PAUL BUETOW:/HOME/PAUL:/BIN/BASH
       ❯ echo $?
       1
       
      -

      E-Mail me your comments to snonux@snonux.de!

      +

      E-Mail me your comments to paul at buetow dot org!

      How to stay sane as a DevOps person - - https://snonux.de/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person.html + + https://foo.surf/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person.html 2021-12-26T12:02:02+00:00 Paul Buetow @@ -483,7 +483,7 @@ PAUL:X:1000:1000:PAUL BUETOW:/HOME/PAUL:/BIN/BASH

      Don't rush

      Slowing down also helps to prevent errors. Don't rush your tasks, even if they are urgent. Try to be quick, but don't rush them. Maybe you are writing a script to mitigate a production issue. You could others peer review that script, for example. Their primary programming language may not be the same (e.g. Golang vs Perl), but they would understand the logic. Or ask another DevOps person from your company with good scripting skills review your mitigation, but he then may lack the domain knowledge of the software you are patching. So in either case, the review will take a bit longer as the reviewer might not be an expert in everything.

      So relax, don't always expect immediate results. Set clear and reasonable timelines for the management about the mitigations. You are not a superhero who has to do everything by yourself. Sometimes, you will miss a deadline. But that will have good reasons. Don't rush to complete just to meet a deadline.

      -Read also "Defensive DevOps" about deploying mitigation scripts.
      +Read also "Defensive DevOps" about deploying mitigation scripts.

      You are not a superhero

      Always keep that in mind. You can't solve all problems by your own. Maybe you could, but that would be a lot of additional stress (and this will reflect to your personal life). Also, Superman and Wonder Woman receive much higher salaries than you will ever do ;-).

      I have been a superhero multiple times mitigating critical incidents, and I was proud about it in those moments. But actually, I am not proud looking at those retrospectively as for everything there should be other people around who should be able to resolve an incident. No company should rely on a single person, there must always be a substitute. You are not a superhero and as harsh as it sounds, everyone is replaceable. Every superhero can be replaced with another superhero. The only thing it takes to become a superhero is time to get to know the infrastructure and tools very well, paired with work dedication.

      @@ -506,14 +506,14 @@ PAUL:X:1000:1000:PAUL BUETOW:/HOME/PAUL:/BIN/BASH

      More

      Another blog post worth reading:

      https://unixsheikh.com/articles/how-to-stay-sane-in-todays-world-of-tech.html
      -

      E-Mail me your comments to snonux@snonux.de!

      +

      E-Mail me your comments to paul at buetow dot org!

      Bash Golf Part 1 - - https://snonux.de/gemfeed/2021-11-29-bash-golf-part-1.html + + https://foo.surf/gemfeed/2021-11-29-bash-golf-part-1.html 2021-11-29T14:06:14+00:00 Paul Buetow @@ -536,8 +536,8 @@ jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      Published by Paul Buetow 2021-11-29, last updated 2022-01-05

      This is the first blog post about my Bash Golf series. This series is about random Bash tips, tricks and weirdnesses I came across. It's a collection of smaller articles I wrote in an older (in German language) blog, which I translated and refreshed with some new content.

      -Bash Golf Part 1 (you are reding this atm.)
      -Bash Golf Part 2
      +Bash Golf Part 1 (you are reding this atm.)
      +Bash Golf Part 2

      TCP/IP networking

      You probably know the Netcat tool, which is a swiss army knife for TCP/IP networking on the command line. But did you know that the Bash natively supports TCP/IP networking?

      Have a look here how that works:

      @@ -748,9 +748,9 @@ Hello world
    • The second pipes "Hello world" via stdout to stdin of the "cat" command. As cat's argument is "-" it reads its data from stdin and not from a regular file named "-". So "-" has a special meaning for cat.
    • The third and fourth examples are interesting as we don't use a pipe as of "|" but a so-called HERE-document and a HERE-string. But the end results are the same.
    -

    The "tar" command understands "-" too. The following example tars up some local directory and sends the data to stdout (this is what "-f -" commands it to do). stdout then is piped via an SSH session to a remote tar process (running on snonux.de) and reads the data from stdin and extracts all the data coming from stdin (as we told tar with "-f -") on the remote machine:

    +

    The "tar" command understands "-" too. The following example tars up some local directory and sends the data to stdout (this is what "-f -" commands it to do). stdout then is piped via an SSH session to a remote tar process (running on buetow.org) and reads the data from stdin and extracts all the data coming from stdin (as we told tar with "-f -") on the remote machine:

    -❯ tar -czf - /some/dir | ssh hercules@snonux.de tar -xzvf - 
    +❯ tar -czf - /some/dir | ssh hercules@buetow.org tar -xzvf - 
     

    This is yet another example of using "-", but this time using the "file" command:

    @@ -889,14 +889,14 @@ bash: line 1: 1/10.0 : syntax error: invalid arithmetic operator (error token is
     ❯ bc <<< 'scale=2; 1/10'
     .10
     
    -

    See you later for the next post of this series. E-Mail me your comments to snonux@snonux.de!

    +

    See you later for the next post of this series. E-Mail me your comments to paul at buetow dot org!

    Defensive DevOps - - https://snonux.de/gemfeed/2021-10-22-defensive-devops.html + + https://foo.surf/gemfeed/2021-10-22-defensive-devops.html 2021-10-22T10:02:46+03:00 Paul Buetow @@ -959,7 +959,7 @@ bash: line 1: 1/10.0 : syntax error: invalid arithmetic operator (error token is

    At one point, you will be tired of manually running your script and also confident enough to automate it. You could deploy it with a configuration management system such as puppet Puppet and schedule a periodic execution via cron, a systemd timer or even a separate background daemon process. You have to be extremely careful here. The more you automate, the more damage you can cause. You don't want to automate it on all servers involved at once, but you want to slowly ramp up the automation.

    First, automate it only on one single server and monitor the result closely. At first, only automate running the script in dry mode. Also, don't forget that you still should log everything that the script is doing. Once everything looks fine, you can automate the script on the canary server for real. It shouldn't be a disaster if something goes wrong as usually systems are designed in a HA fashion, where the same data is still at least on another server available. In the worst-case scenario, you could recover data from there or from the local backup files your script created.

    Now, you can add a handful more canary servers to the automation. You should keep close attention to what the automation is doing. You could use a tool like DTail for distributed log file following. At this point, you could also think of deploying a monitoring check (e.g. Icinga) to see whether your script is not terminating abnormally or logging warnings or errors.

    -DTail - The distributed log tail program
    +DTail - The distributed log tail program

    From there, you could automate the solution on more and more servers. Best, ramp up the automation to a handful of systems, and later to a whole line of servers (e.g. all secondary servers of a given cluster). And afterwards, automate it on all servers.

    Remember, whenever something goes wrong, you will have plenty of logs and backup files available. The disaster recovery would involve extending your script to take care of that too or writing a new script for rolling back the backups.

    Out of office hours

    @@ -968,14 +968,14 @@ bash: line 1: 1/10.0 : syntax error: invalid arithmetic operator (error token is

    Retrospective

    For every major incident, you need to follow up with an incident retrospective. A blame-free, detailed description of exactly what went wrong to cause the incident, along with a list of steps to take to prevent a similar incident from occurring again in the future.

    This usually means creating one or more tickets, which will be dealt with soon. Once the permanent fix is deployed, you can remove your ad-hoc automation and monitoring around it and focus on your regular work again.

    -

    E-Mail me your comments to snonux@snonux.de!

    +

    E-Mail me your comments to paul at buetow dot org!

    Keep it simple and stupid - - https://snonux.de/gemfeed/2021-09-12-keep-it-simple-and-stupid.html + + https://foo.surf/gemfeed/2021-09-12-keep-it-simple-and-stupid.html 2021-09-12T09:39:20+03:00 Paul Buetow @@ -1035,14 +1035,14 @@ bash: line 1: 1/10.0 : syntax error: invalid arithmetic operator (error token is https://thevaluable.dev/kiss-principle-explained/

    When KISS is not KISS anymore

    There is, however, a trap. The more you spend time with things, the more these things feel natural to you and you become an expert. The more you become an expert, the more you introduce more abstractions and other clever ways of doing things. For you, things seem to be KISS still, but another person may not be an expert and might not understand what you do. One of the fundamental challenges is to keep things really KISS. You might add abstraction upon abstraction to a system and don't even notice it until it is too late.

    -

    Enough ranted for now :-). E-Mail me your comments to snonux@snonux.de!

    +

    Enough ranted for now :-). E-Mail me your comments to paul at buetow dot org!

    On being Pedantic about Open-Source - - https://snonux.de/gemfeed/2021-08-01-on-being-pedantic-about-open-source.html + + https://foo.surf/gemfeed/2021-08-01-on-being-pedantic-about-open-source.html 2021-08-01T10:37:58+03:00 Paul Buetow @@ -1114,14 +1114,14 @@ bash: line 1: 1/10.0 : syntax error: invalid arithmetic operator (error token is

    Conclusion

    Should you be pedantic about open-source software? It depends. It depends on your fundamental values and how much time you are ready to invest. Open-source software is not just free as in money, but also free as in freedom. You will gain back complete control of your personal data. Unfortunately, installing ready proprietary apps from the Play Store is much more convenient than building up a trustworthy open-source-based infrastructure by yourself. As a guideline, use proprietary software and services with caution. Be mindful about your choices and where you leave your digital fingerprints. In doubt, think less is more. Do you really need this new shiny app? What benefit does it provide to you? Probably you don't really need that shiny new app.

    You have better chances when you know how to manage your own server and install and manage alternatives to the big cloud providers by yourself. I have the advantage that I have work experience as a Linux Systems Administrator here. I mentioned NextCloud already. I use NextCloud for online photo and file storage, contact and calendar sync and as an RSS news feed server. You could do the same with your own E-Mail server, you can also host your own website and blog. I also mentioned Matrix as a Skype alternative (which could also be an alternative to WhatsApp, Skype, Telegram, Viber, ...). I don't know a lot about Matrix yet, but it seems to be a very neat alternative. I am ready to invest time in it as one of my future personal pet projects. Not only because I think it's better, but also because for fun and as a hobby. But this doesn't mean that I invest *all* of my personal free time in it.

    -

    E-Mail me your comments to snonux@snonux.de!

    +

    E-Mail me your comments to paul at buetow dot org!

    The Well-Grounded Rubyist - - https://snonux.de/gemfeed/2021-07-04-the-well-grounded-rubyist.html + + https://foo.surf/gemfeed/2021-07-04-the-well-grounded-rubyist.html 2021-07-04T10:51:23+01:00 Paul Buetow @@ -1134,9 +1134,9 @@ bash: line 1: 1/10.0 : syntax error: invalid arithmetic operator (error token is

    Published by Paul Buetow 2021-07-04

    When I was a Linux System Administrator, I have been programming in Perl for years. I still maintain some personal Perl programming projects (e.g. Xerl, guprecords, Loadbars). After switching jobs a couple of years ago (becoming a Site Reliability Engineer), I found Ruby (and some Python) widely used there. As I wanted to do something new, I decided to give Ruby a go.

    You should learn or try out one new programming language once yearly anyway. If you end up not using the new language, that's not a problem. You will learn new techniques with each new programming language and this also helps you to improve your overall programming skills even for other languages. Also, having some background in a similar programming language makes it reasonably easy to get started. Besides that, learning a new programming language is kick-a** fun!

    -
    +

    Superficially, Perl seems to have many similarities to Ruby (but, of course, it is entirely different to Perl when you look closer), which pushed me towards Ruby instead of Python. I have tried Python a couple of times before, and I managed to write good code, but I never felt satisfied with the language. I didn't love the syntax, especially the indentations used; they always confused me. I don't dislike Python, but I don't prefer to program in it if I have a choice, especially when there are more propelling alternatives available. Personally, it's so much more fun to program in Ruby than in Python.

    -
    +

    Yukihiro Matsumoto, the inventor of Ruby, said: "I wanted a scripting language that was more powerful than Perl and more object-oriented than Python" - So I can see where some of the similarities come from. I personally don't believe that Ruby is more powerful than Perl, though, especially when you take CPAN and/or Perl 6 (now known as Raku) into the equation. Well, it all depends on what you mean with "more powerful". But I want to stay pragmatic and use what's already used at my workplace.

    My Ruby problem domain

    I wrote a lot of Ruby code over the last couple of years. There were many small to medium-sized tools and other projects such as Nagios monitoring checks, even an internal monitoring & reporting site based on Sinatra. All Ruby scripts I wrote do their work well; I didn't encounter any significant problems using Ruby for any of these tasks. Of course, there's nothing that couldn't be written in Perl (or Python), though, after all, these languages are all Turing-complete and all these languages also come with a huge set of 3rd party libraries :-).

    @@ -1147,9 +1147,9 @@ bash: line 1: 1/10.0 : syntax error: invalid arithmetic operator (error token is
  • Occasionally, I write some lines of Java code for minor feature enhancements and fixes to improve the reliability of some the services.
  • Sometimes, I still program in good old C. This is for special projects (e.g. I/O Riot) or low-level PoCs or SystemTap guru mode scripts.
  • -Also have a look at my personal Bash coding style.
    -Read here about DTail - the distributed log tail program.
    -This is a magazine article about I/O Riot I wrote.
    +Also have a look at my personal Bash coding style.
    +Read here about DTail - the distributed log tail program.
    +This is a magazine article about I/O Riot I wrote.

    For all other in-between tasks I mainly use the Ruby programming language (unless I decide to give something new a shot once in a while).

    Being stuck in Ruby-mediocrity

    As a Site Reliability Engineer there were many tasks and problems to be solved as efficiently and quickly as possible and, of course, without bugs. So I learned Ruby relatively fast by doing and the occasional web search for "how to do thing X". I always was eager to get the problem at hand solved and as long as the code solved the problem I usually was happy.

    @@ -1195,14 +1195,14 @@ Hello World

    I liked this book so much so that I even bought myself a (used) paper copy of it. To my delight, there was also a free eBook version in ePub format included, which I now have on my Kobo Forma eBook reader. :-)

    Perl

    Will I abandon my beloved Perl? Probably not. There are also some Perl scripts I use at work. But unfortunately I only have a limited amount of time and I have to use it wisely. I might look into Raku (formerly known as Perl 6) next year and use it for a personal pet project, who knows. :-). I also highly recommend reading the two Perl books "Modern Perl" and "Higher-Order Perl".

    -

    E-Mail me your comments to snonux@snonux.de!

    +

    E-Mail me your comments to paul at buetow dot org!

    Gemtexter - One Bash script to rule it all - - https://snonux.de/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html + + https://foo.surf/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html 2021-06-05T19:03:32+01:00 Paul Buetow @@ -1254,11 +1254,11 @@ Hello World

    Published by Paul Buetow 2021-06-05

    You might have read my previous blog post about entering the Geminispace, where I pointed out the benefits of having and maintaining an internet presence there. This whole site (the blog and all other pages) is composed in the Gemtext markup language.

    -Welcome to the Geminispace
    +Welcome to the Geminispace

    This comes with the benefit that I can write content in my favourite text editor (Vim).

    Motivation

    Another benefit of using Gemini is that the Gemtext markup language is easy to parse. As my site is dual-hosted (Gemini+HTTP), I could, in theory, just write a shell script to deal with the conversion from Gemtext to HTML; there is no need for a full-featured programming language here. I have done a lot of Bash in the past, but I am also often revisiting old tools and techniques for refreshing and keeping the knowledge up to date here.

    -Motivational comic strip
    +Motivational comic strip

    I have exactly done that - I wrote a Bash script, named Gemte