From a36f9d4403f48beeafc64d8b5cf9f9eef5d8a426 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 24 Jul 2024 22:38:10 +0300 Subject: Update content for html --- ...12-29-using-my-nokia-n95-for-fixing-my-mta.html | 2 +- .../nokia-n95.jpg | Bin 379578 -> 0 bytes ...2-05-run-debian-on-your-phone-with-debroid.html | 2 +- .../Deboroid.png | Bin 576510 -> 0 bytes ...alistic-load-testing-with-ioriot-for-linux.html | 12 +- .../figure1-ioriot-io-recording.png | Bin 220247 -> 0 bytes .../figure2-ioriot-test-preparation.png | Bin 208235 -> 0 bytes .../figure3-ioriot-replay.png | Bin 417034 -> 0 bytes .../figure4-ioriot-read-latency.png | Bin 39552 -> 0 bytes .../figure5-ioriot-write-latency.png | Bin 26547 -> 0 bytes .../figure6-iostat.png | Bin 294346 -> 0 bytes ...-22-dtail-the-distributed-log-tail-program.html | 6 +- .../dgrep.gif | Bin 142329 -> 0 bytes .../dtail.gif | Bin 1984520 -> 0 bytes .../title.png | Bin 84933 -> 0 bytes gemfeed/2021-04-24-welcome-to-the-geminispace.html | 4 +- .../amfora-screenshot.png | Bin 154951 -> 0 bytes .../lagrange-screenshot.png | Bin 104677 -> 0 bytes ...5-gemtexter-one-bash-script-to-rule-it-all.html | 2 +- .../blog-engine.jpg | Bin 41291 -> 0 bytes gemfeed/2021-07-04-the-well-grounded-rubyist.html | 4 +- .../book-backside.jpg | Bin 179996 -> 0 bytes .../book-cover.jpg | Bin 140259 -> 0 bytes .../2022-05-27-perl-is-still-a-great-choice.html | 4 +- .../googletrendsperl.jpg | Bin 18537 -> 0 bytes .../regular_expressions.png | Bin 107151 -> 0 bytes gemfeed/2022-06-15-sweating-the-small-stuff.html | 4 +- .../jsmstrade.png | Bin 13636 -> 0 bytes .../2022-06-15-sweating-the-small-stuff/ninja.jpg | Bin 302772 -> 0 bytes ...22-12-24-ultrarelearning-java-my-takeaways.html | 4 +- .../effective-java.jpg | Bin 187342 -> 0 bytes .../learnjava.jpg | Bin 69628 -> 0 bytes ...3-06-01-kiss-server-monitoring-with-gogios.html | 2 +- .../gogios-small.png | Bin 56698 -> 0 bytes gemfeed/2023-12-10-bash-golf-part-3.html | 2 +- .../2023-12-10-bash-golf-part-3/bash-fork-bomb.jpg | Bin 209399 -> 0 bytes ...quickly-logging-ideas-programmed-in-golang.html | 4 +- .../logo-small.png | Bin 63314 -> 0 bytes .../screenshot-android.png | Bin 45089 -> 0 bytes .../logo-small.png | Bin 0 -> 63314 bytes .../screenshot-android.png | Bin 0 -> 45089 bytes gemfeed/atom.xml | 310 ++++++++++----------- gemfeed/bash-golf-part-3/bash-fork-bomb.jpg | Bin 0 -> 209399 bytes .../dgrep.gif | Bin 0 -> 142329 bytes .../dtail.gif | Bin 0 -> 1984520 bytes .../title.png | Bin 0 -> 84933 bytes .../blog-engine.jpg | Bin 0 -> 41291 bytes .../gogios-small.png | Bin 0 -> 56698 bytes .../googletrendsperl.jpg | Bin 0 -> 18537 bytes .../regular_expressions.png | Bin 0 -> 107151 bytes .../figure1-ioriot-io-recording.png | Bin 0 -> 220247 bytes .../figure2-ioriot-test-preparation.png | Bin 0 -> 208235 bytes .../figure3-ioriot-replay.png | Bin 0 -> 417034 bytes .../figure4-ioriot-read-latency.png | Bin 0 -> 39552 bytes .../figure5-ioriot-write-latency.png | Bin 0 -> 26547 bytes .../figure6-iostat.png | Bin 0 -> 294346 bytes .../Deboroid.png | Bin 0 -> 576510 bytes gemfeed/sweating-the-small-stuff/jsmstrade.png | Bin 0 -> 13636 bytes gemfeed/sweating-the-small-stuff/ninja.jpg | Bin 0 -> 302772 bytes .../the-well-grounded-rubyist/book-backside.jpg | Bin 0 -> 179996 bytes gemfeed/the-well-grounded-rubyist/book-cover.jpg | Bin 0 -> 140259 bytes .../effective-java.jpg | Bin 0 -> 187342 bytes .../learnjava.jpg | Bin 0 -> 69628 bytes .../nokia-n95.jpg | Bin 0 -> 379578 bytes .../amfora-screenshot.png | Bin 0 -> 154951 bytes .../lagrange-screenshot.png | Bin 0 -> 104677 bytes 66 files changed, 181 insertions(+), 181 deletions(-) delete mode 100644 gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta/nokia-n95.jpg delete mode 100644 gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid/Deboroid.png delete mode 100644 gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure1-ioriot-io-recording.png delete mode 100644 gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure2-ioriot-test-preparation.png delete mode 100644 gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure3-ioriot-replay.png delete mode 100644 gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure4-ioriot-read-latency.png delete mode 100644 gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure5-ioriot-write-latency.png delete mode 100644 gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure6-iostat.png delete mode 100644 gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dgrep.gif delete mode 100644 gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dtail.gif delete mode 100644 gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/title.png delete mode 100644 gemfeed/2021-04-24-welcome-to-the-geminispace/amfora-screenshot.png delete mode 100644 gemfeed/2021-04-24-welcome-to-the-geminispace/lagrange-screenshot.png delete mode 100644 gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all/blog-engine.jpg delete mode 100644 gemfeed/2021-07-04-the-well-grounded-rubyist/book-backside.jpg delete mode 100644 gemfeed/2021-07-04-the-well-grounded-rubyist/book-cover.jpg delete mode 100644 gemfeed/2022-05-27-perl-is-still-a-great-choice/googletrendsperl.jpg delete mode 100644 gemfeed/2022-05-27-perl-is-still-a-great-choice/regular_expressions.png delete mode 100644 gemfeed/2022-06-15-sweating-the-small-stuff/jsmstrade.png delete mode 100644 gemfeed/2022-06-15-sweating-the-small-stuff/ninja.jpg delete mode 100644 gemfeed/2022-12-24-ultrarelearning-java-my-takeaways/effective-java.jpg delete mode 100644 gemfeed/2022-12-24-ultrarelearning-java-my-takeaways/learnjava.jpg delete mode 100644 gemfeed/2023-06-01-kiss-server-monitoring-with-gogios/gogios-small.png delete mode 100644 gemfeed/2023-12-10-bash-golf-part-3/bash-fork-bomb.jpg delete mode 100644 gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/logo-small.png delete mode 100644 gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/screenshot-android.png create mode 100644 gemfeed/a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/logo-small.png create mode 100644 gemfeed/a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/screenshot-android.png create mode 100644 gemfeed/bash-golf-part-3/bash-fork-bomb.jpg create mode 100644 gemfeed/dtail-the-distributed-log-tail-program/dgrep.gif create mode 100644 gemfeed/dtail-the-distributed-log-tail-program/dtail.gif create mode 100644 gemfeed/dtail-the-distributed-log-tail-program/title.png create mode 100644 gemfeed/gemtexter-one-bash-script-to-rule-it-all/blog-engine.jpg create mode 100644 gemfeed/kiss-server-monitoring-with-gogios/gogios-small.png create mode 100644 gemfeed/perl-is-still-a-great-choice/googletrendsperl.jpg create mode 100644 gemfeed/perl-is-still-a-great-choice/regular_expressions.png create mode 100644 gemfeed/realistic-load-testing-with-ioriot-for-linux/figure1-ioriot-io-recording.png create mode 100644 gemfeed/realistic-load-testing-with-ioriot-for-linux/figure2-ioriot-test-preparation.png create mode 100644 gemfeed/realistic-load-testing-with-ioriot-for-linux/figure3-ioriot-replay.png create mode 100644 gemfeed/realistic-load-testing-with-ioriot-for-linux/figure4-ioriot-read-latency.png create mode 100644 gemfeed/realistic-load-testing-with-ioriot-for-linux/figure5-ioriot-write-latency.png create mode 100644 gemfeed/realistic-load-testing-with-ioriot-for-linux/figure6-iostat.png create mode 100644 gemfeed/run-debian-on-your-phone-with-debroid/Deboroid.png create mode 100644 gemfeed/sweating-the-small-stuff/jsmstrade.png create mode 100644 gemfeed/sweating-the-small-stuff/ninja.jpg create mode 100644 gemfeed/the-well-grounded-rubyist/book-backside.jpg create mode 100644 gemfeed/the-well-grounded-rubyist/book-cover.jpg create mode 100644 gemfeed/ultrarelearning-java-my-takeaways/effective-java.jpg create mode 100644 gemfeed/ultrarelearning-java-my-takeaways/learnjava.jpg create mode 100644 gemfeed/using-my-nokia-n95-for-fixing-my-mta/nokia-n95.jpg create mode 100644 gemfeed/welcome-to-the-geminispace/amfora-screenshot.png create mode 100644 gemfeed/welcome-to-the-geminispace/lagrange-screenshot.png (limited to 'gemfeed') 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 7bc71b9b..feb8a4b0 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 @@ -32,7 +32,7 @@ _jgs_\|//_\\|///_\V/_\|//__
My first attempt to find an internet café, which was working during Christmastime, failed. However, I found with my N95 phone lots of free WLAN hotspots. The hotspots refused me logging into my server using SSH as I have configured a non-standard port for SSH for security reasons. Without knowing the costs, I used the GPRS internet access of my German phone provider (yes, I had to pay roaming fees).

-Picture of a Nokia N95
+Picture of a Nokia N95

With Putty for N95 and configuring Postfix with Vim and the T9 input mechanism, I managed to fix the problem. But it took half of an hour:

diff --git a/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta/nokia-n95.jpg b/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta/nokia-n95.jpg deleted file mode 100644 index 6a11be8b..00000000 Binary files a/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta/nokia-n95.jpg and /dev/null differ 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 37989842..3cb5fe45 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 @@ -23,7 +23,7 @@
You can use the following tutorial to install a full-blown Debian GNU/Linux Chroot on an LG G3 D855 CyanogenMod 13 (Android 6). First of all, you need to have root permissions on your phone, and you also need to have the developer mode activated. The following steps have been tested on Linux (Fedora 23).

-
+

Foreword



diff --git a/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid/Deboroid.png b/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid/Deboroid.png deleted file mode 100644 index f76cf226..00000000 Binary files a/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid/Deboroid.png and /dev/null differ 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 b544bcbd..4c593556 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 @@ -91,7 +91,7 @@ jgs\__/'---'\__/ % sudo ioriot -c io.capture
-Screenshot I/O recording
+Screenshot I/O recording

A Ctrl-C (SIGINT) stops recording prematurely. Otherwise, ioriot terminates itself automatically after 1 hour. Depending on the system load, the output file can grow to several gigabytes. Only metadata is logged, not the read and written data itself. When replaying later, only random data is used. Under certain circumstances, Systemtap may omit some system calls and issue warnings. This is to ensure that Systemtap does not consume too many resources.

@@ -115,7 +115,7 @@ jgs\__/'---'\__/
To avoid any damage to the running system, ioreplay only works in special directories. The tool creates a separate subdirectory for each file system mount point (e.g. /, /usr/local, /store/00,...) (here: /.ioriot/TESTNAME, /usr/local/.ioriot/TESTNAME, /store/00/.ioriot/TESTNAME,...). By default, the working directory of ioriot is /usr/local/ioriot/TESTNAME.

-Screenshot test preparation
+Screenshot test preparation

You must re-initialize the environment before each run. Data from previous tests will be moved to a trash directory automatically, which can be finally deleted with "sudo ioriot -P".

@@ -125,7 +125,7 @@ jgs\__/'---'\__/
You can also influence the playback speed: "-s 0" is interpreted as "Playback as fast as possible" and is the default setting. With "-s 1" all operations are performed at original speed. "-s 2" would double the playback speed and "-s 0.5" would halve it.

-Screenshot replaying I/O
+Screenshot replaying I/O

As an initial test, for example, you could compare the two Linux I/O schedulers CFQ and Deadline and check which scheduler the test runs the fastest. They run the test separately for each scheduler. The following shell loop iterates through all attached block devices of the system and changes their I/O scheduler to the one specified in variable $new_scheduler (in this case either cfq or deadline). Subsequently, all I/O events from the io.replay protocol are played back. At the end, an output file with statistics is generated:

@@ -167,13 +167,13 @@ Total time: 1213.00s
In any case, you should also set up a time series database, such as Graphite, where the I/O throughput can be plotted. Figures 4 and 5 show the read and write access times of both tests. The break-in makes it clear when the CFQ test ended and the deadline test was started. The reading latency of both tests is similar. Write latency is dramatically improved using the Deadline Scheduler.

-Graphite visualization of the mean read access times in ms with CFQ and Deadline Scheduler.
+Graphite visualization of the mean read access times in ms with CFQ and Deadline Scheduler.

-Graphite visualization of the average write access times in ms with CFQ and Deadline Scheduler.
+Graphite visualization of the average write access times in ms with CFQ and Deadline Scheduler.

You should also take a look at the iostat tool. The iostat screenshot shows the output of iostat -x 10 during a test run. As you can see, a block device is fully loaded with 99% utilization, while all other block devices still have sufficient buffer. This could be an indication of poor data distribution in the storage system and is worth pursuing. It is not uncommon for I/O Riot to reveal software problems.

-Output of iostat. The block device sdy seems to be almost fully utilized by 99%.
+Output of iostat. The block device sdy seems to be almost fully utilized by 99%.

I/O Riot is Open Source



diff --git a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure1-ioriot-io-recording.png b/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure1-ioriot-io-recording.png deleted file mode 100644 index 43ac852f..00000000 Binary files a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure1-ioriot-io-recording.png and /dev/null differ diff --git a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure2-ioriot-test-preparation.png b/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure2-ioriot-test-preparation.png deleted file mode 100644 index 709d7490..00000000 Binary files a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure2-ioriot-test-preparation.png and /dev/null differ diff --git a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure3-ioriot-replay.png b/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure3-ioriot-replay.png deleted file mode 100644 index 3bd66b6f..00000000 Binary files a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure3-ioriot-replay.png and /dev/null differ diff --git a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure4-ioriot-read-latency.png b/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure4-ioriot-read-latency.png deleted file mode 100644 index 160b2305..00000000 Binary files a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure4-ioriot-read-latency.png and /dev/null differ diff --git a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure5-ioriot-write-latency.png b/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure5-ioriot-write-latency.png deleted file mode 100644 index e30efdbb..00000000 Binary files a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure5-ioriot-write-latency.png and /dev/null differ diff --git a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure6-iostat.png b/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure6-iostat.png deleted file mode 100644 index 0d3fc0d8..00000000 Binary files a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure6-iostat.png and /dev/null differ 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 48b450c0..1ab48576 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 @@ -12,7 +12,7 @@
Published at 2021-04-22T19:28:41+01:00; Updated at 2021-04-26

-DTail logo image
+DTail logo image

This article first appeared at the Mimecast Engineering Blog but I made it available here in my personal internet site too.

@@ -40,7 +40,7 @@
DTail does not aim to replace any of the log management tools already available but is rather an additional tool crafted especially for ad-hoc debugging and troubleshooting purposes. DTail is cheap to operate as it does not require any dedicated hardware for log storage as it operates directly on the source of the logs. It means that there is a DTail server installed on all server boxes producing logs. This decentralized comes with the direct advantages that there is no introduced delay because the logs are not shipped to a central log storage device. The reduced complexity also makes it more robust against outages. You won’t be able to troubleshoot your distributed application very well if the log management infrastructure isn’t working either.

-DTail sample session animated gif
+DTail sample session animated gif

As a downside, you won’t be able to access any logs with DTail when the server is down. Furthermore, a server can store logs only up to a certain capacity as disks will fill up. For the purpose of ad-hoc debugging, these are not typically issues. Usually, it’s the application you want to debug and not the server. And disk space is rarely an issue for bare metal and VM-based systems these days, with sufficient space for several weeks’ worth of log storage being available. DTail also supports reading compressed logs. The currently supported compression algorithms are gzip and zstd.

@@ -65,7 +65,7 @@
  • dgrep: The distributed grep client for searching text files for a regular expression pattern.
  • dmap: The distributed map-reduce client for aggregating stats from log files.

  • -DGrep sample session animated gif
    +DGrep sample session animated gif

    Usage example



    diff --git a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dgrep.gif b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dgrep.gif deleted file mode 100644 index e2f2ac64..00000000 Binary files a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dgrep.gif and /dev/null differ diff --git a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dtail.gif b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dtail.gif deleted file mode 100644 index 8f6b56bf..00000000 Binary files a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dtail.gif and /dev/null differ diff --git a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/title.png b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/title.png deleted file mode 100644 index 4e343c4f..00000000 Binary files a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/title.png and /dev/null differ diff --git a/gemfeed/2021-04-24-welcome-to-the-geminispace.html b/gemfeed/2021-04-24-welcome-to-the-geminispace.html index 60c2dc73..7d8fff9b 100644 --- a/gemfeed/2021-04-24-welcome-to-the-geminispace.html +++ b/gemfeed/2021-04-24-welcome-to-the-geminispace.html @@ -57,8 +57,8 @@
    The "downside" is that due to the limited capabilities of the Gemini protocol, all sites look very old and spartan. But that is not a downside; that is, in fact, a design choice people made. It is up to the client software how your capsule looks. For example, you could use a graphical client, such as Lagrange, with nice font renderings and colours to improve the appearance. Or you could use a very minimalistic command line black-and-white Gemini client. It's your (the user's) choice.

    -Screenshot Amfora Gemini terminal client surfing this site
    -Screenshot graphical Lagrange Gemini client surfing this site
    +Screenshot Amfora Gemini terminal client surfing this site
    +Screenshot graphical Lagrange Gemini client surfing this site

    Why is there a need for a new protocol? As the modern web is a superset of Gemini, can't we use simple HTML 1.0 instead? That's a good and valid question. It is not a technical problem but a human problem. We tend to abuse the features once they are available. You can ensure that things stay efficient and straightforward as long as you are using the Gemini protocol. On the other hand, you can't force every website on the modern web to only create plain and straightforward-looking HTML pages.

    diff --git a/gemfeed/2021-04-24-welcome-to-the-geminispace/amfora-screenshot.png b/gemfeed/2021-04-24-welcome-to-the-geminispace/amfora-screenshot.png deleted file mode 100644 index 093aec79..00000000 Binary files a/gemfeed/2021-04-24-welcome-to-the-geminispace/amfora-screenshot.png and /dev/null differ diff --git a/gemfeed/2021-04-24-welcome-to-the-geminispace/lagrange-screenshot.png b/gemfeed/2021-04-24-welcome-to-the-geminispace/lagrange-screenshot.png deleted file mode 100644 index 478d2fdd..00000000 Binary files a/gemfeed/2021-04-24-welcome-to-the-geminispace/lagrange-screenshot.png and /dev/null differ 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 4c1e8c40..ff9e212c 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 @@ -61,7 +61,7 @@
    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 Gemtexter, for that:

    diff --git a/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all/blog-engine.jpg b/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all/blog-engine.jpg deleted file mode 100644 index 844bc9fc..00000000 Binary files a/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all/blog-engine.jpg and /dev/null differ diff --git a/gemfeed/2021-07-04-the-well-grounded-rubyist.html b/gemfeed/2021-07-04-the-well-grounded-rubyist.html index 21ea67f5..e7017f37 100644 --- a/gemfeed/2021-07-04-the-well-grounded-rubyist.html +++ b/gemfeed/2021-07-04-the-well-grounded-rubyist.html @@ -16,11 +16,11 @@
    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.

    diff --git a/gemfeed/2021-07-04-the-well-grounded-rubyist/book-backside.jpg b/gemfeed/2021-07-04-the-well-grounded-rubyist/book-backside.jpg deleted file mode 100644 index 2190e679..00000000 Binary files a/gemfeed/2021-07-04-the-well-grounded-rubyist/book-backside.jpg and /dev/null differ diff --git a/gemfeed/2021-07-04-the-well-grounded-rubyist/book-cover.jpg b/gemfeed/2021-07-04-the-well-grounded-rubyist/book-cover.jpg deleted file mode 100644 index b5a00063..00000000 Binary files a/gemfeed/2021-07-04-the-well-grounded-rubyist/book-cover.jpg and /dev/null differ diff --git a/gemfeed/2022-05-27-perl-is-still-a-great-choice.html b/gemfeed/2022-05-27-perl-is-still-a-great-choice.html index dc6b2831..4d6a9f4d 100644 --- a/gemfeed/2022-05-27-perl-is-still-a-great-choice.html +++ b/gemfeed/2022-05-27-perl-is-still-a-great-choice.html @@ -12,13 +12,13 @@
    Published at 2022-05-27T07:50:12+01:00; Updated at 2023-01-28

    -Comic source: XKCD
    +Comic source: XKCD

    Perl (the Practical Extraction and Report Language) is a battle-tested, mature, multi-paradigm dynamic programming language. Note that it's not called PERL, neither P.E.R.L. nor Pearl. "Perl" is the name of the language and perl the name of the interpreter or the interpreter command.

    Unfortunately (it makes me sad), Perl's popularity has been declining over the last years as Google trends shows:

    -
    +

    So why is that? Once the de-facto standard super-glue language for the web nowadays seems to have a bad reputation. Often, people state:

    diff --git a/gemfeed/2022-05-27-perl-is-still-a-great-choice/googletrendsperl.jpg b/gemfeed/2022-05-27-perl-is-still-a-great-choice/googletrendsperl.jpg deleted file mode 100644 index 397c9f29..00000000 Binary files a/gemfeed/2022-05-27-perl-is-still-a-great-choice/googletrendsperl.jpg and /dev/null differ diff --git a/gemfeed/2022-05-27-perl-is-still-a-great-choice/regular_expressions.png b/gemfeed/2022-05-27-perl-is-still-a-great-choice/regular_expressions.png deleted file mode 100644 index acbc2437..00000000 Binary files a/gemfeed/2022-05-27-perl-is-still-a-great-choice/regular_expressions.png and /dev/null differ diff --git a/gemfeed/2022-06-15-sweating-the-small-stuff.html b/gemfeed/2022-06-15-sweating-the-small-stuff.html index 17dffa74..e39ab33c 100644 --- a/gemfeed/2022-06-15-sweating-the-small-stuff.html +++ b/gemfeed/2022-06-15-sweating-the-small-stuff.html @@ -58,7 +58,7 @@
    Photography is one of my casual hobbies. I love to capture interesting perspectives and motifs. I love to walk new streets and neighbourhoods I never walked before so I can capture those unexpected motifs, colours and moments. Unfortunately, because of time constraints (and sometime weather constraints), I do that on a pretty infrequent basis.

    -
    +

    More than 10 years ago I wrote the bespoke small static photo album generator in Bash photoalbum.sh which I recently refactored to a modern Bash coding style and also freshened up the Cascading Style Sheets. Last but not least, the new domain name irregular.ninja has been registered.

    @@ -240,7 +240,7 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs
    jsmstrade is a minimalistic graphical Java swing client for sending SMS messages over the SMStrade service.

    -
    +

    https://codeberg.org/snonux/jsmstrade
    https://smstrade.de
    diff --git a/gemfeed/2022-06-15-sweating-the-small-stuff/jsmstrade.png b/gemfeed/2022-06-15-sweating-the-small-stuff/jsmstrade.png deleted file mode 100644 index ce5276f8..00000000 Binary files a/gemfeed/2022-06-15-sweating-the-small-stuff/jsmstrade.png and /dev/null differ diff --git a/gemfeed/2022-06-15-sweating-the-small-stuff/ninja.jpg b/gemfeed/2022-06-15-sweating-the-small-stuff/ninja.jpg deleted file mode 100644 index 8a036323..00000000 Binary files a/gemfeed/2022-06-15-sweating-the-small-stuff/ninja.jpg and /dev/null differ diff --git a/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.html b/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.html index 7db09ffc..498bdb5c 100644 --- a/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.html +++ b/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.html @@ -12,7 +12,7 @@
    Published at 2022-12-24T23:18:40+02:00

    -
    +

    As a regular participant in the annual Pet Project competition at work, I always try to find a project where I can learn something new. In this post, I would like to share my takeaways after revisiting Java. You can read about my motivations in my "Creative universe" post:

    @@ -36,7 +36,7 @@
    This book was recommended by my brother and also by at least another colleague at work to be one of the best, if not the best, book about Java programming. I read the whole book from the beginning to the end and immersed myself in it. I fully agree; this is a great book. Every Java developer or Java software engineer should read it!

    -
    +

    I recommend reading the 90-part effective Java Series on dev.to. It's a perfect companion to the book as it explains all the chapters again but from a slightly different perspective and helps you to really understand the content.

    diff --git a/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways/effective-java.jpg b/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways/effective-java.jpg deleted file mode 100644 index 213c6e03..00000000 Binary files a/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways/effective-java.jpg and /dev/null differ diff --git a/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways/learnjava.jpg b/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways/learnjava.jpg deleted file mode 100644 index 4c3b9e7b..00000000 Binary files a/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways/learnjava.jpg and /dev/null differ diff --git a/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.html b/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.html index 1aea4149..f0824de9 100644 --- a/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.html +++ b/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.html @@ -12,7 +12,7 @@
    Published at 2023-06-01T21:10:17+03:00

    -Gogios logo
    +Gogios logo

    Introduction



    diff --git a/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios/gogios-small.png b/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios/gogios-small.png deleted file mode 100644 index aebe695c..00000000 Binary files a/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios/gogios-small.png and /dev/null differ diff --git a/gemfeed/2023-12-10-bash-golf-part-3.html b/gemfeed/2023-12-10-bash-golf-part-3.html index 5baa4fb8..bf31b66c 100644 --- a/gemfeed/2023-12-10-bash-golf-part-3.html +++ b/gemfeed/2023-12-10-bash-golf-part-3.html @@ -90,7 +90,7 @@ http://www.gnu.org/software/src-highlite -->
    And here is the cute illustration:

    -Bash fork bomb
    +Bash fork bomb

    Inner functions



    diff --git a/gemfeed/2023-12-10-bash-golf-part-3/bash-fork-bomb.jpg b/gemfeed/2023-12-10-bash-golf-part-3/bash-fork-bomb.jpg deleted file mode 100644 index 6967c03a..00000000 Binary files a/gemfeed/2023-12-10-bash-golf-part-3/bash-fork-bomb.jpg and /dev/null differ diff --git a/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.html b/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.html index 41c26c6e..cfdcfbc7 100644 --- a/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.html +++ b/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.html @@ -16,7 +16,7 @@
    I have tried many note apps for my Android (I use GrapheneOS) phone. Most of them either don't do what I want, are proprietary software, require Google Play services (I have the main profile on my phone de-googled) or are too bloated. I was never into mobile app development, as I'm not too fond of the complexity of the developer toolchains. I don't want to use Android Studio (as a NeoVim user), and I don't want to use Java or Kotlin. I want to use a language I know (and like) for mobile app development. Go would be one of those languages.

    -Quick logger Logo
    +Quick logger Logo

    Enter Quick logger – a compact GUI Android (well, cross-platform due to Fyne) app I've crafted using Go and the nifty Fyne framework. With Fyne, the app can be compiled easily into an Android APK. As of this writing, this app's whole Go source code is only 75 lines short!! This little tool is designed for spontaneous moments, allowing me to quickly log my thoughts as plain text files on my Android phone. There are no fancy file formats. Just plain text!

    @@ -36,7 +36,7 @@
    For the code-savvy folks out there, Quick logger is a neat example of what you can achieve with Go and Fyne. It's a testament to building functional, cross-platform apps without getting bogged down in the nitty-gritty of platform-specific details. Thanks to Fyne, I am pleased with how easy it is to make mobile Android apps in Go.

    -Quick logger running on Android
    +Quick logger running on Android

    My Android apps will never be polished, but they will get the job done, and this is precisely how I want them to be. Minimalistic but functional. I could spend more time polishing Quick logger, but my Quick logger app then may be the same as any other notes app out there (complicated or bloated).

    diff --git a/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/logo-small.png b/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/logo-small.png deleted file mode 100644 index dc29011c..00000000 Binary files a/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/logo-small.png and /dev/null differ diff --git a/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/screenshot-android.png b/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/screenshot-android.png deleted file mode 100644 index a8a604e3..00000000 Binary files a/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/screenshot-android.png and /dev/null differ diff --git a/gemfeed/a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/logo-small.png b/gemfeed/a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/logo-small.png new file mode 100644 index 00000000..dc29011c Binary files /dev/null and b/gemfeed/a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/logo-small.png differ diff --git a/gemfeed/a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/screenshot-android.png b/gemfeed/a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/screenshot-android.png new file mode 100644 index 00000000..a8a604e3 Binary files /dev/null and b/gemfeed/a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/screenshot-android.png differ diff --git a/gemfeed/atom.xml b/gemfeed/atom.xml index c57057f9..4cce8311 100644 --- a/gemfeed/atom.xml +++ b/gemfeed/atom.xml @@ -1,6 +1,6 @@ - 2024-07-07T12:47:11+03:00 + 2024-07-24T22:36:34+03:00 foo.zone feed To be in the .zone! @@ -1744,7 +1744,7 @@ http://www.gnu.org/software/src-highlite -->
    I have tried many note apps for my Android (I use GrapheneOS) phone. Most of them either don't do what I want, are proprietary software, require Google Play services (I have the main profile on my phone de-googled) or are too bloated. I was never into mobile app development, as I'm not too fond of the complexity of the developer toolchains. I don't want to use Android Studio (as a NeoVim user), and I don't want to use Java or Kotlin. I want to use a language I know (and like) for mobile app development. Go would be one of those languages.

    -Quick logger Logo
    +Quick logger Logo

    Enter Quick logger – a compact GUI Android (well, cross-platform due to Fyne) app I've crafted using Go and the nifty Fyne framework. With Fyne, the app can be compiled easily into an Android APK. As of this writing, this app's whole Go source code is only 75 lines short!! This little tool is designed for spontaneous moments, allowing me to quickly log my thoughts as plain text files on my Android phone. There are no fancy file formats. Just plain text!

    @@ -1764,7 +1764,7 @@ http://www.gnu.org/software/src-highlite -->
    For the code-savvy folks out there, Quick logger is a neat example of what you can achieve with Go and Fyne. It's a testament to building functional, cross-platform apps without getting bogged down in the nitty-gritty of platform-specific details. Thanks to Fyne, I am pleased with how easy it is to make mobile Android apps in Go.

    -Quick logger running on Android
    +Quick logger running on Android

    My Android apps will never be polished, but they will get the job done, and this is precisely how I want them to be. Minimalistic but functional. I could spend more time polishing Quick logger, but my Quick logger app then may be the same as any other notes app out there (complicated or bloated).

    @@ -1803,7 +1803,7 @@ http://www.gnu.org/software/src-highlite --> Recently, my employer sent me to a week-long AWS course. After the course, there wasn't any hands-on project I could dive into immediately, so I moved parts of my personal infrastructure to AWS to level up a bit through practical hands-on.
    -

    From babylon5.buetow.org to *.buetow.cloud


    +

    From babylon5.buetow.org to *.buetow.cloud



    Published at 2024-02-04T00:50:50+02:00

    @@ -1813,7 +1813,7 @@ http://www.gnu.org/software/src-highlite -->
    Old man yells at cloud

    -

    The old *.buetow.org way


    +

    The old *.buetow.org way



    Before the migration, all those services were reachable through buetow.org-subdomains (Buetow is my last name) and ran on Docker containers on a single Rocky Linux 9 VM at Hetzner. And there was a Nginx reverse proxy with TLS offloading (with Let's Encrypt certificates). The Rocky Linux 9's hostname was babylon5.buetow.org (based on the Science Fiction series).

    @@ -1833,7 +1833,7 @@ http://www.gnu.org/software/src-highlite -->
  • KISS (Keep it Simple Stupid)
  • Cheap

  • -

    I kept my buetow.org OpenBSD boxes alive


    +

    I kept my buetow.org OpenBSD boxes alive



    As pointed out, I only migrated the Docker-based self-hosted services (which run on the Babylon 5 Rocky Linux box) to AWS. Many self-hostable apps come with ready-to-use container images, making deploying them easy.

    @@ -1854,7 +1854,7 @@ http://www.gnu.org/software/src-highlite --> KISS server monitoring with Gogios
    Let's encrypt with OpenBSD and Rex

    -

    The new *.buetow.cloud way


    +

    The new *.buetow.cloud way



    With AWS, I decided to get myself a new domain name, as I could fully separate my AWS setup from my conventional setup and give Route 53 as an authoritative DNS a spin.

    @@ -1884,11 +1884,11 @@ http://www.gnu.org/software/src-highlite -->
  • org-buetow-elb sets up the Elastic Load Balancer, a prerequisite for any service running in ECS Fargate.
  • org-buetow-ecs finally sets up and deploys all the Docker apps mentioned above. Any apps can be turned on or off via the variables.tf file.

  • -

    The container apps


    +

    The container apps



    And here, finally, is the list of all the container apps my Terraform manifests deploy. The FQDNs here may not be reachable. I spin them up only on demand (for cost reasons). All services are fully dual-stacked (IPv4 & IPv6).

    -

    flux.buetow.cloud


    +

    flux.buetow.cloud



    Miniflux is a minimalist and opinionated feed reader. With the move to AWS, I also retired my bloated instance of NextCloud. So, with Miniflux, I retired from NextCloud News.

    @@ -1897,7 +1897,7 @@ http://www.gnu.org/software/src-highlite --> https://miniflux.app/


    -

    audiobookshelf.buetow.cloud


    +

    audiobookshelf.buetow.cloud



    Audiobookshelf was the first Docker app I installed. It is a Self-hosted audiobook and podcast server. It comes with a neat web interface, and there is also an Android app available, which works also in offline mode. This is great, as I only have the ECS instance sometimes running for cost savings.

    @@ -1905,7 +1905,7 @@ http://www.gnu.org/software/src-highlite -->
    https://www.audiobookshelf.org

    -

    syncthing.buetow.cloud


    +

    syncthing.buetow.cloud



    Syncthing is a continuous file synchronisation program. In real-time, it synchronises files between two or more computers, safely protected from prying eyes. Your data is your own, and you deserve to choose where it is stored, whether it is shared with some third party, and how it's transmitted over the internet.

    @@ -1915,7 +1915,7 @@ http://www.gnu.org/software/src-highlite -->
    https://syncthing.net/

    -

    radicale.buetow.cloud


    +

    radicale.buetow.cloud



    Radicale is an excellent minimalist WebDAV calendar and contact synchronisation server. It was good enough to replace my NextCloud Calendar and NextCloud Contacts setup. Unfortunately, there wasn't a ready-to-use Docker image. So, I created my own.

    @@ -1925,21 +1925,21 @@ http://www.gnu.org/software/src-highlite --> https://codeberg.org/snonux/docker-radicale-server
    https://www.davx5.com/

    -

    bag.buetow.cloud


    +

    bag.buetow.cloud



    Wallabag is a self-hostable "save now - read later" service, and it also comes with an Android app which also has an offline mode. Think of Getpocket, but open-source!

    https://wallabag.org/
    https://github.com/wallabag/wallabag

    -

    anki.buetow.cloud


    +

    anki.buetow.cloud



    Anki is a great (the greatest) flash-card learning program. I am currently learning Bulgarian as my 3rd language. There is also an Android app that has an offline mode, and advanced users can also self-host the server anki-sync-server. For some reason (not going into the details here), I had to build my own Docker image for the server.

    https://apps.ankiweb.net/
    https://codeberg.org/snonux/docker-anki-sync-server

    -

    vault.buetow.cloud


    +

    vault.buetow.cloud



    Vaultwarden is an alternative implementation of the Bitwarden server API written in Rust and compatible with upstream Bitwarden clients, perfect for self-hosted deployment where running the official resource-heavy service might not be ideal. So, this is a great password manager server which can be used with any Bitwarden Android app.

    @@ -1951,11 +1951,11 @@ http://www.gnu.org/software/src-highlite -->
    Sweating the small stuff

    -

    bastion.buetow.cloud


    +

    bastion.buetow.cloud



    This is a tiny ARM-based Amazon Linux EC2 instance, which I sometimes spin up for investigation or manual work on my EFS file system in AWS.

    -

    Conclusion


    +

    Conclusion



    I have learned a lot about AWS and Terraform during this migration. This was actually my first AWS hands-on project with practical use.

    @@ -2220,7 +2220,7 @@ http://www.gnu.org/software/src-highlite -->
    And here is the cute illustration:

    -Bash fork bomb
    +Bash fork bomb

    Inner functions



    @@ -3900,7 +3900,7 @@ http://www.gnu.org/software/src-highlite -->
    Published at 2023-06-01T21:10:17+03:00

    -Gogios logo
    +Gogios logo

    Introduction



    @@ -5191,7 +5191,7 @@ http://www.gnu.org/software/src-highlite --> Do you need help fully discharging from work in the evenings or for the weekend? Shutting down from work won't just improve your work-life balance; it will also significantly improve the quality of your personal life and work. After a restful weekend, you will be much more energized and productive the next working day. So it should not just be in your own, but also your employers' interest that you fully relax and shut down after work.
    -

    How to shut down after work


    +

    How to shut down after work



    Published at 2023-02-26T23:48:01+02:00

    @@ -5212,13 +5212,13 @@ http://www.gnu.org/software/src-highlite -->
    Do you need help fully discharging from work in the evenings or for the weekend? Shutting down from work won't just improve your work-life balance; it will also significantly improve the quality of your personal life and work. After a restful weekend, you will be much more energized and productive the next working day. So it should not just be in your own, but also your employers' interest that you fully relax and shut down after work.

    -

    Have a shutdown routine


    +

    Have a shutdown routine



    Have a routine. Try to finish work around the same time every day. Write any outstanding tasks down for the next day, so you are sure you will remember them. Writing them down brings wonders as you can remove them from your mind for the remainder of the day (or the upcoming weekend) as you know you will surely pick them up the next working day. Tidying up your workplace could also count toward your daily shutdown routine.

    A commute home from the office also greatly helps, as it disconnects your work from your personal life. Don't work on your commute home, though! If you don't commute but work from home, then it helps to walk around the block or in a nearby park to disconnect from work.

    -

    Don't work when you officially don't work


    +

    Don't work when you officially don't work



    Unless you are self-employed, you have likely signed an N-hour per week contract with your employer, and your regular working times are from X o'clock in the morning to Y o'clock in the evening (with M minutes lunch break in the middle). And there might be some flexibility in your working times, too. But that kind of flexibility (e.g. extending the lunch break so that there is time to pick up a family member from the airport) will be agreed upon, and you will counteract it, for example, by starting working earlier the next day or working late, that one exception. But overall, your weekly working time will stay N hours.

    @@ -5232,7 +5232,7 @@ http://www.gnu.org/software/src-highlite -->
    Checking for your messages constantly outside of regular office times makes it impossible to shut down and relax from work altogether.

    -

    Distract your mind


    +

    Distract your mind



    Often, your mind goes back to work-related stuff even after work. That's normal as you concentrated highly on your work throughout the day. The brain unconsciously continues to work and will automatically present you with random work-related thoughts. You can counteract this by focusing on non-work stuff, which may include:

    @@ -5245,23 +5245,23 @@ http://www.gnu.org/software/src-highlite -->
    Some of these can be habit-stacked: Exercise could be combined with watching videos about your passion project (e.g. watching lectures about that new programming language you are currently learning for fun). With walking, for example, you could combine listening to an Audiobook or music, or you could also think about your passion project during that walk.

    -

    Get a pet


    +

    Get a pet



    Even if you have children, it helps wonders to get a pet. My cat, for example, will remind me a few times daily to take a few minute's breaks to pet, play or give food. So my cat not only helps me after work but throughout the day.

    My neighbour also works from home, and he has dogs, which he regularly has to take out to the park.

    -

    Journal your day


    +

    Journal your day



    If you are upset about something, making it impossible to shut down from work, write down everything (e.g., with a pen in a paper journal). Writing things down helps you to "get rid" of the negative. Especially after conflicts with colleagues or company decisions, you don't agree on. This kind of self-therapy is excellent. Brainstorm all your emotions and (even if opinionated) opinions so you have everything on paper. Once done, you don't think about it so much anymore, as you know you can access that information if required. But stopping ruminating about it will be much easier now. You will likely never access that information again, though. But at least writing the thoughts down saved your day.

    Write down three things which went well for the day. This helps you to appreciate the day.

    -

    Don't stress about what your employer expects from you


    +

    Don't stress about what your employer expects from you



    Think about what's fun and motivates you. Maybe the next promotion to Principal or a Manager role isn't for you. Many fall into the trap of stressing themselves out to satisfy the employer so that the next upgrade will happen and think about it constantly, even after work. But it is more important that you enjoy your craftsmanship. Work on what you expect from yourself. Ideally, your goals should be aligned with your employer. I am not saying you should abandon everything what your manager is asking you to do, but it is, after all, your life. And you have to decide where and on what you want to work. But don't sell yourself short. Keep track of your accomplishments.

    -

    Call it a day


    +

    Call it a day



    Every day you gave your best was good; the day's outcome doesn't matter. What matters is that you know you gave your best and are closer to your goals than the previous day. This gives you a sense of progress and accomplishment.

    @@ -5285,7 +5285,7 @@ http://www.gnu.org/software/src-highlite --> Art by Joan Stark
    -

    Why GrapheneOS rox


    +

    Why GrapheneOS rox



    Published at 2023-01-23T15:31:52+02:00

    @@ -5325,7 +5325,7 @@ Art by Joan Stark https://GrapheneOS.org
    https://LineageOS.org

    -

    User Profiles


    +

    User Profiles



    GrapheneOS allows configuring up to 32 user profiles (including a guest profile) on a single phone. A profile is a completely different environment within the phone, and it is possible to switch between them instantly. Sessions of a profile can continue running in the background or be fully terminated. Each profile can have completely different settings and different applications installed.

    @@ -5335,7 +5335,7 @@ Art by Joan Stark
    You notice how much longer (multiple days) your phone can be on a single charge when Google Play Services isn't running in the background. This tells a lot about the background activities and indicates that using Google Play shouldn't be the norm.

    -

    Proxying some of the Google offerings


    +

    Proxying some of the Google offerings



    There's also the case that I am using an app from the Google Play store (as the app isn't available from F-Droid), which doesn't require Google Play Services to run in the background. Here's where I use the Aurora Android store. The Aurora store can be installed through F-Droid. Aurora acts as an anonymous proxy from your phone to the Google Play Store and lets you install apps from there. No Google credentials are required for that!

    @@ -5343,7 +5343,7 @@ Art by Joan Stark
    There's a similar solution for watching videos on YouTube. You can use the NewPipe app (also from F-Droid), which acts as an anonymous proxy for watching videos from YouTube. So there isn't any need to install the official YouTube app, and there isn't any need to login to your Google account. What's so bad about the official app? You don't know which data it is sending about you to Google, so it is a privacy concern.

    -

    Google Play Sandboxing


    +

    Google Play Sandboxing



    Before switching to GrapheneOS, I had been using LineageOS on one of my phones for a couple of years. Still, I always had to have a secondary personal phone with all of these proprietary apps which (partially) only work with Google Play on the phone (e.g. Banking, Navigation, various travel apps from various Airlines, etc.) somewhere around as I didn't install Google Play on my LineageOS phone due to privacy concerns and only installed apps from the F-Droid store on it. When travelling, I always had to carry around a second phone with Google Play on it, as without it; life would become inconvenient pretty soon.

    @@ -5361,7 +5361,7 @@ Art by Joan Stark
    It is great to have the flexibility to use any proprietary Android app when needed. That only applies to around 1% of my phone usage time, but you often don't always know when you need "that one app now". So it's perfect that it's covered with the phone you always have with you.

    -

    The camera and the cloud


    +

    The camera and the cloud



    I really want my phone to shoot good looking pictures, so that I can later upload them to the Irregular Ninja:

    @@ -5381,7 +5381,7 @@ Art by Joan Stark
    I also use NextCloud to synchronize my notes (NextCloud Notes), my RSS news feeds (NextCloud News) and contacts (DAVx5). All apps required are available in the F-Droid store.

    -

    Fine granular permissions


    +

    Fine granular permissions



    Another great thing about GrapheneOS is that, besides putting your apps into different profiles, you can also restrict network access and configure storage scopes per app individually.

    @@ -5389,7 +5389,7 @@ Art by Joan Stark
    The app also wants to store and read some data from your phone (e.g. it could be a proprietary app for enhancing photos, and therefore storage access to a photo folder would be required). In GrapheneOS, you can configure a storage scope for that particular app, e.g. only read and write from one folder but still forbid access to all other folders on your phone.

    -

    Termux


    +

    Termux



    Termux can be installed on any Android phone through F-Droid, so it doesn't need to be a GrapheneOS phone. But I have to mention Termux here as it significantly adds value to my phone experience.

    @@ -5401,7 +5401,7 @@ Art by Joan Stark
    There are Pixel phones with a screen size of 6", and that's decent enough for occasional use like that, and everything (the phone, the BT keyboard, maybe an external battery pack) all fit nicely in a small travel pocket.

    -

    So, why not use a pure Linux phone?


    +

    So, why not use a pure Linux phone?



    Strictly speaking, an Android phone is a Linux phone, but it's heavily modified and customized. For me, a "pure" Linux phone is a more streamlined Linux kernel running in a distribution like Ubuntu Touch or Mobian.

    @@ -5416,7 +5416,7 @@ Art by Joan Stark
    SailfishOS

    -

    Small GrapheneOS downsides


    +

    Small GrapheneOS downsides



    Sometimes, switching a profile to use a different app is annoying, and you can't copy and paste from the system clipboard from one profile to another. But that's a small price I am willing to pay!

    @@ -5442,11 +5442,11 @@ Art by Joan Stark As a regular participant in the annual Pet Project competition at work, I always try to find a project where I can learn something new. In this post, I would like to share my takeaways after revisiting Java. You can read about my motivations in my 'Creative universe' post:
    -

    (Re)learning Java - My takeaways


    +

    (Re)learning Java - My takeaways



    Published at 2022-12-24T23:18:40+02:00

    -
    +

    As a regular participant in the annual Pet Project competition at work, I always try to find a project where I can learn something new. In this post, I would like to share my takeaways after revisiting Java. You can read about my motivations in my "Creative universe" post:

    @@ -5460,46 +5460,46 @@ Art by Joan Stark
    At my workplace, as an SRE, I don't do Java a lot. I have been reading Java code to understand the software better so I can apply and suggest workarounds or fixes to existing issues and bugs. However, most of our stack is in Java, and our Software Engineers use Java as their primary programming language.

    -

    Stuck at Java 1.4


    +

    Stuck at Java 1.4



    Over time, I had been missing out on many new features that were added to the language since Java 1.4, so I decided to implement my next Pet Project in Java and learn every further aspect of the language as my main goal. Of course, I still liked the idea of winning a Pet Project Prize, but my main objective was to level up my Java skills.

    -

    (Re)learning & upskilling to Java 18


    +

    (Re)learning & upskilling to Java 18



    -

    Effective Java


    +

    Effective Java



    This book was recommended by my brother and also by at least another colleague at work to be one of the best, if not the best, book about Java programming. I read the whole book from the beginning to the end and immersed myself in it. I fully agree; this is a great book. Every Java developer or Java software engineer should read it!

    -
    +

    I recommend reading the 90-part effective Java Series on dev.to. It's a perfect companion to the book as it explains all the chapters again but from a slightly different perspective and helps you to really understand the content.

    Kyle Carter's 90-part Effective Java Series

    -

    Java Pub House


    +

    Java Pub House



    During my lunch breaks, I usually have a walk around the block or in a nearby park. I used that time to listen to the Java Pub House podcast. I listened to *every* episode and learned tons of new stuff. I can highly recommend this podcast. Especially GraalVM, a high-performance JDK distribution written for Java and other JVM languages, captured my attention. GraalVM can compile Java code into native binaries, improving performance and easing the distribution of Java programs. Because of the latter, I should release a VS-Sim GraalVM edition one day through a Linux AppImage ;-).

    https://www.javapubhouse.com
    https://www.graalvm.org

    -

    Java Concurrency course


    +

    Java Concurrency course



    I also watched a course on O'Reilly Safari Books online about Java Concurrency. That gave an excellent refresher on how the Java thread pools work and what were the concurrency primitives available in the standard library.

    -

    Read a lot of Java code


    +

    Read a lot of Java code



    First, the source code is often the best documentation (if programmed nicely), and second, it helps to get the hang of the language and standard practices. I started to read more and more Java code at work. I did that whenever I had to understand how something, in particular, worked (e.g. while troubleshooting and debugging an issue).

    -

    Observed Java code reviews


    +

    Observed Java code reviews



    Another great way to get the hang of Java again was to sneak into the code reviews of the Software Engineer colleagues. They are the expert on the matter and are a great source to copy knowledge. It's OK to stay passive and only follow the reviews. Sometimes, it's OK to step up and take ownership of the review. The developers will also always be happy to answer any naive questions which come up.

    -

    Took ownership of a roadmap-Java project


    +

    Took ownership of a roadmap-Java project



    Besides my Pet Project, I also took ownership of a regular roadmap Java project at work, making an internal Java service capable of running in Kubernetes. This was a bunch of minor changes and adding a bunch of classes and unit tests dealing with the statelessness and a persistent job queue in Redis. The job also involved reading and understanding a lot of already existing Java code. It wasn't part of my job description, but it was fun, and I learned a lot. The service runs smoothly in production now. Of course, all of my code got reviewed by my Software Engineering colleagues.

    -

    The good


    +

    The good



    From the new language features and syntaxes, there are many personal takeaways, and I can't possibly list them all, but here are some of my personal highlights:

    @@ -5520,7 +5520,7 @@ Art by Joan Stark
  • Lambdas are much cleaner, shorter and easier to read than anonymous classes. Many Java libraries require passing instances of (anonymous) classes (e.g. in Swing) to other objects. Lambdas are so lovely because they are primarily compatible with the passing of anonymous classes, so they are a 1:1 replacement in many instances. Lambdas also play very nicely together with the Java functional interfaces, as each Lambda got a type, and the type can be an already existing functional interface (or, if you got a particular case, you could define your custom functional interface for your own set of Lambdas, of course).
  • I love the concept of Java records. You can think of a record as an immutable object holding some data (as members). They are ideal for pipe and stream processing. They are much easier to define (with much less boilerplate) and come with write protection out of the box.

  • -

    The bad and the ugly


    +

    The bad and the ugly



    There are also many ugly corners in Java. Many are doomed to stay there forever due to historical decisions and ensuring backward compatibility with older versions of the Java language and the Java standard library.

    @@ -5534,7 +5534,7 @@ Art by Joan Stark
  • Being a bit spoiled by Golang's Goroutines, I was shocked about the limitations of the Java threads. They are resource hungry, and you can't just spin up millions of them as you would with Goroutines. I knew this limitation of threads already (as it's not a problem of the language but of how threads work in the OS), but still, I was pretty shocked when I got reminded of them again. Of course, there's a workaround: Use asynchronous sockets so that you don't waste a whole thread on a single I/O operation (in my case, waiting for a network response). Golang's runtime does that automatically for you: An OS thread will be re-used for other tasks until the network socket unblocks. Every modern programming language should support lightweight threads or Coroutines like Go's Goroutines.


  • -

    Conclusion


    +

    Conclusion



    While (re)learning Java, I felt like a student again and was quite enthusiastic about it initially. I invested around half a year, immersing myself intensively in Java (again). The last time I did that was many years ago as a university student. I even won a Silver Prize at work, implementing a project this year (2022 as of writing this). I feel confident now with understanding, debugging and patching Java code at work, which boosted my debugging and troubleshooting skills.

    @@ -5566,7 +5566,7 @@ Art by Joan Stark Art by \ \_! / __!
    -

    I tried (Doom) Emacs, but I switched back to (Neo)Vim


    +

    I tried (Doom) Emacs, but I switched back to (Neo)Vim



    Published at 2022-11-24T11:17:15+02:00; Updated at 2022-11-26

    @@ -5595,13 +5595,13 @@ Art by \ \_! / __!
    So why did I switch back to the Vi-family?

    -

    Emacs is a giant dragon


    +

    Emacs is a giant dragon



    Emacs feels like a giant dragon as it is much more than an editor or an integrated development environment. Emacs is a whole platform on its own. There's an E-Mail client, an IRC client, or even games you can run within Emacs. And you can also change Emacs within Emacs using its own Lisp dialect, Emacs Lisp (Emacs is programmed in Emacs Lisp). Therefore, Emacs is also its own programming language. You can change every aspect of Emacs within Emacs itself. People jokingly state Emacs is an operating system and that you should directly use it as the init 1 process (if you don't know what the init 1 process is: Under UNIX and similar operating systems, it's the very first userland processed launched. That's usually systemd on Linux-based systems, launchd on macOS, or any other init script or init system used by the OS)!

    In many aspects, Emacs is like shooting at everything with a bazooka! However, I prefer it simple. I only wanted Emacs to be a good editor (which it is, too), but there's too much other stuff in Emacs that I don't need to care about! Vim and NeoVim do one thing excellent: Being great text editors and, when loaded with plugins, decent IDEs, too.

    -

    Magit love


    +

    Magit love



    I almost fell in love with Magit, an integrated Git client for Emacs. But I think the best way to interact with Git is to use the git command line directly. I don't worry about typing out all the commands, as the most commonly used commands are in my shell history. Other useful Git programs I use frequently are bit and tig. Also, get a mechanical keyboard that makes hammering whole commands into the terminal even more enjoyable.

    @@ -5610,13 +5610,13 @@ Art by \ \_! / __!
    Magit is pretty neat for basic Git operations, but I found myself searching the internet for the correct sub-commands to do the things I wanted to do in Git. Mainly, the way how branches are managed is confusing. Often, I fell back to the command line to fix up the mess I produced with Magit (e.g. accidentally pushing to the wrong remote branch, so I found myself fixing things manually on the terminal with the git command with forced pushes....). Magit is hotkey driven, and common commands are quickly explorable through built-in hotkey menus. Still, I found it challenging to navigate to more advanced Git sub-commands that way which was much easier accomplished by using the git command directly.

    -

    Graphical UI


    +

    Graphical UI



    If there is one thing I envy about Emacs is that it's a graphical program, whereas the Vi-family of editors are purely terminal-based. I see the benefits of being a graphical program as this enables the use of multiple fonts simultaneously to embed pictures and graphs (that would be neat as a Markdown preview, for example). There's also GVim (Vim with GTK UI), but that's more of an afterthought.

    There are now graphical front-end clients for NeoVim, but I still need to dig into them. Let me know your experience if you have one. Luckily, I don't rely on something graphical in my text editor, but it would improve how the editor looks and feels. UTF8 can already do a lot in the terminal, and terminal emulators also allow you to use TrueType fonts. Still, you will always be limited to one TTF font for the whole terminal, and it isn't possible to have, for example, a different font for headings, paragraphs, etc... you get the idea. TTF+UTF8 can't beat authentic graphics.

    -

    Scripting it


    +

    Scripting it



    It is possible to customize every aspect of Emacs through Emacs Lisp. I have done some Elk Scheme programming in the past (a dialect of Lisp), but that was a long time ago, and I am not willing to dive here again to customize my environment. I would instead take the pragmatic approach and script what I need in VimScript (a terrible language, but it gets the job done!). I watched Damian Conway's VimScript course on O'Reilly Safari Books Online, which I greatly recommend. Yes, VimScript feels clunky, funky and weird and is far less elegant than Lisp, but it gets its job done - in most cases! (That reminds me that the Vim team has announced a new major version of VimScript with improvements and language changes made - I haven't gotten to it yet - but I assume that VimScript will always stay VimScript).

    @@ -5637,15 +5637,15 @@ Art by \ \_! / __! by Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite --> -
    " Clipboard
    -vnoremap ,y !pbcopy<CR>ugv
    -vnoremap ,i !pbpaste<CR>
    -nmap ,i !wpbpaste<CR>
    +
    " Clipboard
    +vnoremap ,y !pbcopy<CR>ugv
    +vnoremap ,i !pbpaste<CR>
    +nmap ,i !wpbpaste<CR>
     

    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.

    -

    The famous Emacs Org mode


    +

    The famous Emacs Org mode



    Org-mode is an Emacs mode for keeping notes, authoring documents, computational notebooks, literate programming, maintaining to-do lists, planning projects, and more — in a fast and effective plain-text system. There's even a dedicated website for it:

    @@ -5665,13 +5665,13 @@ nmap ,i !wpbpaste<C Z shell
    tmux terminal multiplexer

    -

    Seeking simplicity


    +

    Seeking simplicity



    I am not ready to dive deep into the whole world of Emacs. I prefer small and simple tools as opposed to complex tools. Emacs comes with many features out of the box, whereas in Vim/NeoVim, you would need to install many plugins to replicate some of the behaviour. Yes, I need to invest time managing all the Vim/NeoVim plugins I use, but I feel more in control compared to Doom Emacs, where a framework around vanilla Emacs manages all the plugins. I could use vanilla Emacs and manage all my plugins the vanilla way, but for me, it's not worth the effort to learn and dive into that as all that I want to do I can already do with Vim/NeoVim.

    I am not saying that Vim/NeoVim are simple programs, but they are much simpler than Emacs with much smaller footprints; furthermore, they appear to be more straightforward as I am used to them. I only need Vim/NeoVim to be an editor, an IDE (through some plugins), and nothing more.

    -

    Conclusion


    +

    Conclusion



    I understand the Emacs users now. Emacs is an incredibly powerful platform for almost everything, not just text editing. With Emacs, you can do nearly everything (Writing, editing, programming, calendar scheduling and note taking, Jira integration, playing games, listening to music, reading/writing emails, browsing the web, using as a calculator, generating HTML pages, configuring interactive menus, jumping around between every feature and every file within one single session, chat on IRC, surf the Gopherspace, ... the options are endless....). If you want to have one piece of software which rules it all and you are happy to invest a large part of your time in your platform: Pick Emacs, and over time Emacs will become "your" Emacs, customized to your own needs and change the way it works, which makes the Emacs users stick even more to it.

    @@ -6065,7 +6065,7 @@ REMOTE|fishfinger|100|7|fstab|093f510ec5c0f512.h /usr/local ffs rw,wxallowed,nod Everyone has it once in a while: A bad night's sleep. Here I attempt to list valuable tips on how to deal with it.
    -

    After a bad night's sleep


    +

    After a bad night's sleep



    Published at 2022-09-30T09:53:23+03:00; Updated at 2022-10-12

    @@ -6085,15 +6085,15 @@ jgs (________\ \
    Everyone has it once in a while: A bad night's sleep. Here I attempt to list valuable tips on how to deal with it.

    -

    Don't take the day off.


    +

    Don't take the day off.



    Don't take a day off after not sleeping enough the previous night. That would be wasting the holiday allowance. It wouldn't be possible to enjoy my free time anyway, so why not just work? There's still a way for an IT Engineer to be productive (sometimes even more) with half or less of the concentration power available!

    -

    Start work early


    +

    Start work early



    Probably I am already awake early and am unable to fall asleep again. My strategy here is to "attack" the day: Start work early and finish early. The early bird will also encounter fewer distractions from colleagues.

    -

    Sweat the small stuff


    +

    Sweat the small stuff



    There's never a shortage of small items to hook off my list. Most of these items don't require my full concentration power, and I will be happy to get them off my list so that the next day, after a good night's sleep, I can immerse myself again in focused, deep work with all concentration powers at hand.

    @@ -6107,57 +6107,57 @@ jgs (________\ \
  • Going through any tedious paperwork.
  • Catch up with the journal and mark off all trivial action items.

  • -

    Enter the flow state


    +

    Enter the flow state



    I find it easy to enter the "flow state" after a bad night's sleep. All I need to do is to put on some ambient music (preferably instrumental chill house) and start to work on a not-too-difficult ticket.

    Usually, the "flow state" is associated with deep-focused work, but deep-focused work isn't easily possible under sleep deprivation. It's still possible to be in the flow by working on more manageable tasks and leaving the difficult ones for the next day.

    -

    Reschedule meetings


    +

    Reschedule meetings



    I find engaging in discussions and demanding meetings challenging after a lousy night's sleep. I still attend the sessions I am invited to as "only" a participant, but I prefer to reschedule all meetings I am the primary driver of.

    This, unfortunately, also includes interviews. Interviews require full concentration power. So for interviews, I would find a colleague to step in for me or ask to reschedule the interview altogether. Everything else wouldn't make it justice and would waste everyone's time!

    -

    Invent


    +

    Invent



    The mind works differently under sleep deprivation: It's easier to invent new stuff as it's easier to have a look at things from different perspectives. Until an hour ago, I didn't know yet what I would be blogging about for this month, and then I just started writing this, and it took me only half an hour to write the first draft of this blog post!

    -

    Fast


    +

    Fast



    I don't eat breakfast, and I don't eat lunch on these days. I only have dinner. Not eating means my mind doesn't get foggy, and I keep up the work momentum. This is called intermittent fasting, which not only generally helps to keep the weight under control and boosts the concentration power. Furthermore, intermittent fasting is healthy. You should include it in your routine, even after a good night's sleep.

    -

    Stretch


    +

    Stretch



    I won't have enough energy for strenuous physical exercise on those days, but a 30 to a 60-minute stretching session can make the day. Stretching will even hurt less under sleep deprivation! The stretching could also be substituted with a light Yoga session.

    -

    Walk


    +

    Walk



    Walking is healthy, and the time can be used to listen to interesting podcasts. The available concentration power might not be enough for more sophisticated audio literature. I will have enough energy for one or two daily walks (~10k steps for the day in total). Sometimes, I listen to music during walks. I also try to catch the bright sunlight.

    -

    Red Bull


    +

    Red Bull



    I don't think that Red Bull is a healthy drink. But once in a while, a can in the early afternoon brings wonders, and productivity will skyrocket. Other than Red Bull, drink a lot of water throughout the day. Don't forget to drink the sugar-free version; otherwise, your intermittent fast will be broken.

    -

    Power nap


    +

    Power nap



    I don't know how to "enforce" a nap, but sometimes I manage to power nap, and it helps wonders. A 30-minute nap sometimes brings me back to normal. If you don't tend to fast as you are too hungry, it helps to try to nap approximately 30 minutes after eating something.

    -

    Don't take anything personally.


    +

    Don't take anything personally.



    It's much more challenging to keep the mind "under control" in this state. Every annoyance can potentially upset, which could reflect on the work colleagues. It is wise to attempt to go with a positive attitude into the day, always smile and be polite to the family and colleagues at work. Don't let anything drop out to the people next; they don't deserve it as they didn't do anything wrong! Also, remember, it can't be controlled at all. It's time to let go of the annoyances for the day.

    -

    Meditate


    +

    Meditate



    To keep the good vibe, it helps to meditate for 10 minutes. Meditation must nothing be fancy. It can be just lying on the sofa and observing your thoughts as they come and go. Don't judge your thoughts, as that could put you in a negative mood. It's not necessary to sit in an uncomfortable Yoga pose, and it is not required to chant "Ohhmmmmm".

    -

    Write things down


    +

    Write things down



    Sometimes something requiring more concentration power demands time. This is where it helps to write a note in a journal and return to it another day. This doesn't mean slacking off but managing the rarely available concentration power for the day. I might repeat myself: Today, sweat all the small stuff. Tomorrow, do the deep-focused work on that crucial project again.

    It's easier to forget things on those days, so everything should be written down so that it can be worked off later. Things written down will not be overlooked!

    -

    Social media


    +

    Social media



    I wouldn't say I like checking social media, as it can consume a lot of time and can become addictive. But once in a while, I want to catch up with my "networks". After a bad night's sleep, it's the perfect time to check your social media. Once done, you don't have to do it anymore for the next couple of days!

    @@ -6984,7 +6984,7 @@ rex commons This blog post is a bit different from the others. It consists of multiple but smaller projects worth mentioning. I got inspired by Julia Evan's 'Tiny programs' blog post and the side projects of The Sephist, so I thought I would also write a blog posts listing a couple of small projects of mine:
    -

    Sweating the small stuff - Tiny projects of mine


    +

    Sweating the small stuff - Tiny projects of mine



    Published at 2022-06-15T08:47:44+01:00; Updated at 2022-06-18

    @@ -7005,7 +7005,7 @@ rex commons
    But before going through the tiny projects let's take a paragraph for the 1y anniversary retrospective.

    -

    1y anniversary


    +

    1y anniversary



    It has been one year since I started posting regularly (at least once monthly) on this blog again. It has been a lot of fun (and work) doing so for various reasons:

    @@ -7024,17 +7024,17 @@ rex commons
    But now, let's continue with the small projects worth mentioning :-)

    -

    Static photo album generator


    +

    Static photo album generator



    photoalbum.sh is a minimal static HTML photo album generator. I use it to drive "The Irregular Ninja" site and for some ad-hoc (personal) albums to share photos with the family and friends.

    https://codeberg.org/snonux/photoalbum

    -

    The Irregular Ninja


    +

    The Irregular Ninja



    Photography is one of my casual hobbies. I love to capture interesting perspectives and motifs. I love to walk new streets and neighbourhoods I never walked before so I can capture those unexpected motifs, colours and moments. Unfortunately, because of time constraints (and sometime weather constraints), I do that on a pretty infrequent basis.

    -
    +

    More than 10 years ago I wrote the bespoke small static photo album generator in Bash photoalbum.sh which I recently refactored to a modern Bash coding style and also freshened up the Cascading Style Sheets. Last but not least, the new domain name irregular.ninja has been registered.

    @@ -7048,7 +7048,7 @@ rex commons
    I hope you like this photo site. It's worth checking it out again around once every other month!

    -

    Random journal page extractor


    +

    Random journal page extractor



    I bullet journal. I write my notes into a Leuchtturm paper notebook. Once full, I am scanning it to a PDF file and archive it. As of writing this, I am at journal #7 (each from 123 up to 251 pages in A5). It means that there is a lot of material already.

    @@ -7058,7 +7058,7 @@ rex commons
    There's also a weekly CRON job on my servers to send me a reminder that I might want to read in my old journals again. My laptop also runs this script each time it boots and saves the output to a NextCloud folder. From there, it's synchronized to the NextCloud server so I can pick it up from there with my smartphone later when I am "on the road".

    -

    Global uptime records statistic generator


    +

    Global uptime records statistic generator



    guprecords is a Perl script which reads multiple uprecord files (produced by uptimed - a widely available daemon for recording server uptimes) and generates uptime statistics of multiple hosts combined. I keep all the record files of all my personal computers in a Git repository (I even keep the records of the boxes I don't own or use anymore) and there's already quite a collection of it. It looks like this:

    @@ -7118,7 +7118,7 @@ Pos | System | Kernel | Uptime |
    This all is of no real practical use but fun!

    -

    Server configuration management


    +

    Server configuration management



    The rexfiles project contains all Rex files for my (personal) server setup automation. A Rexfile is written in a Perl DSL run by the Rex configuration management system. It's pretty much KISS and that's why I love it. It suits my personal needs perfectly.

    @@ -7129,7 +7129,7 @@ Pos | System | Kernel | Uptime |
    Hi there! I was searching for a simple way to automate my personal OpenBSD setup. I found that configuration management systems like Puppet, Salt, Chef, etc.. were too bloated for my personal needs. So for a while I was configuring everything by hand. At one point I got fed up and started writing Shell scripts. But that was not the holy grail so that I looked at Ansible. I found that Ansible had some dependencies on Python on the target machine when you want to use all the features. Furthermore, I am not really familiar with Python. But then I remembered that there was also Rex. It's written in my beloved Perl. Also, OpenBSD comes with Perl in the base system out of the box which makes it integrate better than all my scripts (automation and also scripts deployed via the automation to the system) are all in the same language. Rex may not have all the features like other configuration management systems, but its easy to work-around or extend when you know Perl. Thanks!

    -

    Fancy SSH execution loop


    +

    Fancy SSH execution loop



    rubyfy is a fancy SSH loop wrapper written in Ruby for running shell commands on multiple remote servers at once. I also forked this project for work (under a different name) where I added even more features such as automatic server discovery. It's used by many colleagues on a frequent basis. Here are some examples:

    @@ -7154,7 +7154,7 @@ echo foo.example.com |
    https://codeberg.org/snonux/rubyfy

    -

    A KISS dynamic DNS solution


    +

    A KISS dynamic DNS solution



    dyndns is a tiny shell script which implements "your" own DynDNS service. It relies on SSH access to the authoritative DNS server and the nsupdate command. There is really no need to use any of the "other" free DynDNS services out there.

    @@ -7174,7 +7174,7 @@ ssh dyndns@dyndnsserver /path/to/dyndns-update \
    https://codeberg.org/snonux/dyndns

    -

    CPU information gatherer for Linux


    +

    CPU information gatherer for Linux



    This is a tiny GNU Awk script for Linux which displays information about the CPU. All what it does is presenting /proc/cpuinfo in an easier to read way. The output is somewhat more compact than the standard lscpu command you find commonly on Linux distributions.

    @@ -7198,7 +7198,7 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs
    https://codeberg.org/snonux/cpuinfo

    -

    Show differences of two files over the network


    +

    Show differences of two files over the network



    This is a shell wrapper to use the standard diff tool over the network to compare a file between two computers. It uses NetCat for the network part and also encrypts all traffic using OpenSSL. This is how its used:

    @@ -7206,34 +7206,34 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs
    https://codeberg.org/snonux/netdiff

    -

    Delay sending out E-Mails with Mutt


    +

    Delay sending out E-Mails with Mutt



    This is a shell script for the Mutt email client for delaying sending out E-Mails. For example, you want to write an email on Saturday but don't want to bother the recipient earlier than Monday. It relies on CRON.

    https://codeberg.org/snonux/muttdelay

    -

    Graphical UI for sending text messages


    +

    Graphical UI for sending text messages



    jsmstrade is a minimalistic graphical Java swing client for sending SMS messages over the SMStrade service.

    -
    +

    https://codeberg.org/snonux/jsmstrade
    https://smstrade.de

    -

    IPv6 and IPv4 connectivity testing site


    +

    IPv6 and IPv4 connectivity testing site



    ipv6test is a quick and dirty Perl CGI script for testing whether your browser connects via IPv4 or IPv6. It requires you to setup three sub-domains: One reachable only via IPv4 (e.g. test4.ipv6.buetow.org), another reachable only via IPv6 (e.g. test6.ipv6.buetow.org) and the main one reachable through both protocols (e.g. ipv6.buetow.org).

    I don't have it running on any of my servers at the moment. This means that there is no demo to show now. Sorry!

    -

    List open Jira tickets in the terminal


    +

    List open Jira tickets in the terminal



    japi s a small Perl script for listing open Jira issues. It might be broken by now as the Jira APIs may have changed. Sorry! But feel free to fork and modernize it. :-)

    https://codeberg.org/snonux/jsmstrade

    -

    Debian running on "your" Android phone


    +

    Debian running on "your" Android phone



    Debroid is a tutorial and a set of scripts to install and to run a Debian chroot on an Android phone.

    @@ -7243,17 +7243,17 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs
    https://termux.com

    -

    Perl service framework


    +

    Perl service framework



    PerlDaemon is a minimal daemon for Linux and other Unix like operating systems programmed in Perl. It is a minimal but pretty functional and fairly generic service framework. This means that it does not do anything useful other than providing a framework for starting, stopping, configuring and logging. To do something useful, a module (written in Perl) must be provided.

    Checkout my previous post about it

    -

    More


    +

    More



    There are more projects on my Codeberg page but they aren't as tiny as the ones mentioned in this post or aren't finished yet so I won't bother listing them here. However, there also a few more scripts used frequently by me (not publicly accessible (yet?)) which I would like to mention here:

    -

    Work time tracker


    +

    Work time tracker



    worktime.rb, for example, is a command line Ruby script I use to track my time spent working. This is to make sure that I don't overwork (in particular useful when working from home). It also generates some daily and weekly stats and carries over work time (surpluses or minuses) to the next work day, week or even year.

    @@ -7275,19 +7275,19 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs
    All I do when I start work is to run the wtlogin command and after finishing work to run the wtlogout command. My shell will remind me when I work without having logged in. It uses a simple JSON database which is editable with wtedit (this opens the JSON in Vim). The report shown above can be generated with wtreport. Any out-of-bounds reporting can be added with the wtadd command.

    -

    Password and document store


    +

    Password and document store



    geheim.rb is my personal password and document store ("geheim" is the German word for secret). It's written in Ruby and heavily relies on Git, FZF (for search), Vim and standard encryption algorithms. Other than the standard pass Unix password manager, geheim also encrypts the file names and password titles.

    The tool is command line driven but also provides an interactive shell when invoked with geheim shell. It also works on my Android phone via Termux so I have all my documents and passwords always with me.

    -

    Backup procedure


    +

    Backup procedure



    backup is a Bash script which does run once daily (or every time on boot) on my home FreeBSD NAS server and performs backup related tasks such as creating a local backup of my remote NextCloud instance, creating encrypted (incremental) ZFS snapshots of everything what's stored on the NAS and synchronizes (via rsync) backups to a remote cloud storage. It also can synchronize backups to a local external USB drive.

    Check out my offsite backup series

    -

    konpeito.media


    +

    konpeito.media



    Here's a bonus...

    @@ -7332,13 +7332,13 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs
    Published at 2022-05-27T07:50:12+01:00; Updated at 2023-01-28

    -Comic source: XKCD
    +Comic source: XKCD

    Perl (the Practical Extraction and Report Language) is a battle-tested, mature, multi-paradigm dynamic programming language. Note that it's not called PERL, neither P.E.R.L. nor Pearl. "Perl" is the name of the language and perl the name of the interpreter or the interpreter command.

    Unfortunately (it makes me sad), Perl's popularity has been declining over the last years as Google trends shows:

    -
    +

    So why is that? Once the de-facto standard super-glue language for the web nowadays seems to have a bad reputation. Often, people state:

    @@ -7494,7 +7494,7 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs I have been participating in an annual work-internal project contest (we call it Pet Project contest) since I moved to London and switched jobs to my current employer. I am very happy to say that I won a 'silver' prize last week here 🎆. Over the last couple of years I have been a finalist in this contest six times and won some kind of prize five times. Some of my projects were also released as open source software. One had a magazine article published, and for another one I wrote an article on my employer's engineering blog. If you have followed all my posts on this blog (the one you are currently reading), then you have probably figured out what these projects were:
    -

    Creative universe


    +

    Creative universe



    Published at 2022-04-10T10:09:11+01:00; Updated at 2022-04-18

    @@ -7519,7 +7519,7 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs - the universe

    -

    Prelude


    +

    Prelude



    I have been participating in an annual work-internal project contest (we call it Pet Project contest) since I moved to London and switched jobs to my current employer. I am very happy to say that I won a "silver" prize last week here 🎆. Over the last couple of years I have been a finalist in this contest six times and won some kind of prize five times. Some of my projects were also released as open source software. One had a magazine article published, and for another one I wrote an article on my employer's engineering blog. If you have followed all my posts on this blog (the one you are currently reading), then you have probably figured out what these projects were:

    @@ -7538,17 +7538,17 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs
  • I want to learn new technologies or to deepen my knowledge of a given technology. I want to have a personal benefit from the project, even when I don't win any prize. So when the company is offering a contest, why not use it as a motivational trampoline? It's good to have a hard deadline for a project. And the project will also benefit the company in some way. So it's a win-win.
  • I love the idea of combining several old things into a new thing. You can call this creativity. At work, we call this sometimes Lego: Building new things from given blocks. But I also love to add something new and unique to the mix, something that didn't exist as a Lego block before and could not be built by using only the already existing blocks.

  • -

    How to be creative


    +

    How to be creative



    How did I manage to be creative with all these Pet Projects? Unfortunately, there is no step-by-step guide I could point you to. But what I want to do in this blog post is share my personal experience so far.

    -

    Know which problem you want to solve


    +

    Know which problem you want to solve



    There must be a problem to be solved or a thing to be improved. It makes no sense to have a project without a goal. A problem might be obvious to you, and you don't even need to think about it. In that case, you are all set, and you can immerse yourself with the problem.

    If, however, you don't know what problem you want to solve: Do you really need to be creative? All problems are solved anyway, correct? In that case, just go on with your work. As you immerse yourself with your daily work, you will find a project naturally after a while. I don't believe you should artificially find a project. It should come naturally to you. You should have an interest in the problem domain and a strong desire to find a proper solution for the problem. Artificially created projects come with the catch that you might give up on it rather sooner than later due to lack of motivation and desire.

    -

    Immerse / deep dive


    +

    Immerse / deep dive



    If you want to be creative in a field, you must know a lot about it. The more you know about it, the more dots you can connect. When you are learning a new technology or if you are thinking about a tough problem, do it thoroughly. Don't let anything distract you. Read books, watch lectures, listen to podcasts or audiobooks about the topic, talk to other people working on similar topics. Immerse yourself for multiple hours per day, multiple days per week, multiple weeks and maybe even months. Create your own inner universe.

    @@ -7558,7 +7558,7 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs
    Sometimes, depending on how deeply you were immersed, you may need to let the problem go for a couple of days (e.g. over a weekend) before you can download a new insight.

    -

    Always have a notebook with you


    +

    Always have a notebook with you



    Wherever you go, ensure that you always have something to take notes with you. Once you have an idea from nowhere (or from your unconscious but volatile brain), you really want to write it down to persistent storage. It doesn't matter what kind of note-taking device you use here. It can be a paper journal, or it can be your smartphone. 

    @@ -7566,13 +7566,13 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs
    I prefer taking notes on paper, as it gives you more freedom of how to structure it. You can use any colour, and you can also quickly create diagrams without the use of any complex computer program.

    -

    When you didn't sleep enough


    +

    When you didn't sleep enough



    I noticed while being sleep-deprived I am (obviously) unable to concentrate so much, and it is difficult to be immersed in a focused way. But on the other hand, I am a lot more creative compared to when I am not sleep-deprived. Then, my brain suddenly presents me with connections I have not thought of before. Here, I usually write any idea I have down on a sheet of paper or in my journal, so I can pick it up later. I then often continue to philosophise about a possible solution. Sometimes to the absurd, and sometimes to something pretty useful.

    I am not saying that you should skip sleep. By all means, if you can sleep, then sleep. But there are some days when you don't manage to sleep (e.g. think too much about a project and didn't manage to hit the off switch). This is, where you can take advantage of your current state of mind. Disclaimer: Skipping sleep damages your health. So, please don't try this out on purpose. But in case you had a bad night, remember this trick.

    -

    Have regular breaks and relax


    +

    Have regular breaks and relax



    Have regular breaks. Don't skip your lunch break. Best, have a walk during lunchtime. And after work, do some kind of workout or visit a sports class. Do something completely unrelated to work before going to sleep (e.g. visit a parallel universe and read a Science Fiction novel). In short: Totally hit the off-switch after your work for the day is finished. You will be much more energised and motivated the next time you open your work laptop.

    @@ -7582,7 +7582,7 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs
    It also helps a lot eat healthy. Healthy food makes your brain work more efficiently. But I won't go into more details here, as nothing is as contradictory as the health and food industry. Conduct your own research. Your opinion may be different from mine anyway, and everyone's body reacts to certain foods differently. What for one person works may not work for another person. But be aware that you will find a lot of wrong and also conflicting information on the internet. So always use multiple resources for your research.

    -

    Upside-down approach


    +

    Upside-down approach



    It's easy to fall into the habit of "boxed" thinking, but creativity is exactly the opposite. Once in a while, make yourself think "Is A really required to do B?". Many assumptions are believed to be true. But are they really? A concrete example: "At work we only use the programming language L and framework F" and therefore, it is the standard we must use.

    @@ -7596,7 +7596,7 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs
    A small additional trick: you can train yourself to generate new and unconventional ideas. Just write down 20 random ideas every day. It doesn't matter what the ideas are about and whether they are useful or not. The purpose of this exercise is to make your brain think about something new and unconventional. These can be absurd ideas such as "Jump out of the window naked in the morning in order to wake up faster". Of course, you would never do that, but at least you had an idea and made your brain generate something.

    -

    Don't be busy all the time


    +

    Don't be busy all the time



    Especially as a DevOps Engineer, you could be busy all the time with small, but frequent, ad hoc tasks. Don't lose yourself here. Yes, you should pay attention to your job and those tasks, but you should also make some room for creativity. Don't schedule meeting after ad hoc work after meeting after Jira ticket work after another Jira ticket. There should also be some "free" space in your calendar.

    @@ -7616,7 +7616,7 @@ learn () { timedatectl - Control the system time and date
    -

    Conclusion


    +

    Conclusion



    This all summarises advice I have, really.  I hope this was interesting and helpful for you.

    @@ -7974,7 +7974,7 @@ exec /usr/local/bin/dtailhealth --server localhost:2222 This is a list of Operating Systems I currently use. This list is in no particular order and also will be updated over time. The very first operating system I used was MS-DOS (mainly for games) and the very first Unix like operating system I used was SuSE Linux 5.3. My first smartphone OS was Symbian on a clunky Sony Ericsson device.
    -

    Computer operating systems I use(d)


    +

    Computer operating systems I use(d)



    Published at 2022-02-04T09:58:22+00:00; Updated at 2022-02-18

    @@ -8001,7 +8001,7 @@ exec /usr/local/bin/dtailhealth --server localhost:2222
    This is a list of Operating Systems I currently use. This list is in no particular order and also will be updated over time. The very first operating system I used was MS-DOS (mainly for games) and the very first Unix like operating system I used was SuSE Linux 5.3. My first smartphone OS was Symbian on a clunky Sony Ericsson device.

    -

    Fedora Linux


    +

    Fedora Linux



    Fedora Linux is the operating system I use on my primary (personal) laptop. It's a ThinkPad X1 Carbon Gen. 9. Lenovo which comes along with official Lenovo Linux support. I already noticed hardware firmware updates being installed directly through Fedora from Lenovo. Fedora is a real powerhouse, cutting-edge and reasonably stable at the same time. It's baked by Red Hat.

    @@ -8009,7 +8009,7 @@ exec /usr/local/bin/dtailhealth --server localhost:2222
    I use the GNOME Desktop on my Fedora boxes. I have memorized and customized a bunch of keyboard shortcuts. But the fact that I mostly work in the terminal (with tmux) makes the Desktop environment I use only secondary.

    -

    EndeavourOS


    +

    EndeavourOS



    I installed EndeavourOS on my (older) ThinkPad X240 to try out an Arch based Linux distribution. I also could have installed plain Arch, but I don't see the point when there is EndeavourOS. EndeavourOS is as close as you can get to the plain Arch experience but with an easy installer. I am not saying that it's difficult to install plain Arch but it's, unless you are new to Linux and want to learn about the installation procedure, just waste of time in my humble opinion. Give Linux From Scratch a shot instead if you really want to learn about Linux.

    @@ -8025,7 +8025,7 @@ exec /usr/local/bin/dtailhealth --server localhost:2222
    https://endeavouros.com/

    -

    FreeBSD


    +

    FreeBSD



    I have run FreeBSD in many occasions. Right after SuSE Linux, FreeBSD (around 4.x) was the second open source system I used in my life on regular basis. I didn't even go to university yet then I started using it :-). Also, a former employer of mine even allowed me to install FreeBSD on my main workstation (which I actually did and used it for a couple of years).

    @@ -8058,7 +8058,7 @@ GNU/kFreeBSD rhea.buetow.org 8.0-RELEASE-p5 FreeBSD 8.0-RELEASE-p5 #2: Sat Nov 2
    https://www.FreeBSD.org

    -

    CentOS 7


    +

    CentOS 7



    While CentOS 8 is already out of support, I still use CentOS 7 (which will receive security updates until 2024). CentOS 7 runs in a cloud VM and is the home to my personal NextCloud and Wallabag installations. You probably know already NextCloud. About Wallabag: It is a great free and open source alternative to Pocket (for reading articles from the web offline later). Yes, you can pay for a Wallabag subscription, but you can also host it for free on your own server.

    @@ -8071,7 +8071,7 @@ GNU/kFreeBSD rhea.buetow.org 8.0-RELEASE-p5 FreeBSD 8.0-RELEASE-p5 #2: Sat Nov 2
    https://www.centos.org

    -

    OpenBSD


    +

    OpenBSD



    I use two small OpenBSD "cloud" boxes for my "public facing internet front-ends". The services I run here are:

    @@ -8088,7 +8088,7 @@ GNU/kFreeBSD rhea.buetow.org 8.0-RELEASE-p5 FreeBSD 8.0-RELEASE-p5 #2: Sat Nov 2
    https://www.openbsd.org

    -

    macOS (proprietary)


    +

    macOS (proprietary)



    I have to use a MacBook Pro with macOS for work. What else can I say but that this would have never been my personal choice. At least macOS is a UNIX under the hood and comes with a decent terminal and there are plenty of terminal apps available via Brew. Some of the inner workings of macOS were actually forked from the FreeBSD project.

    @@ -8096,7 +8096,7 @@ GNU/kFreeBSD rhea.buetow.org 8.0-RELEASE-p5 FreeBSD 8.0-RELEASE-p5 #2: Sat Nov 2
    I find the macOS UI rather confusing.

    -

    LineageOS (mobile)


    +

    LineageOS (mobile)



    At some point I got fed up with big tech, like Google and Samsung (or Apple, but personally I don't use Apple), spying on me. So I purchased a Google phone (a midrange Pixel phone) and installed LineageOS, a free and open source distribution of Android, on it. I don't have anything from Google installed on it (not even the play store, I install my apps from F-Droid). It's my daily driver since mid 2021 now.

    @@ -8109,33 +8109,33 @@ GNU/kFreeBSD rhea.buetow.org 8.0-RELEASE-p5 FreeBSD 8.0-RELEASE-p5 #2: Sat Nov 2 https://lineageos.org/
    https://termux.com/

    -

    Samsung's Stock Android (mobile proprietary)


    +

    Samsung's Stock Android (mobile proprietary)



    Unfortunatley, I still have to keep my proprietary Android phone around. Sometimes, I really need to use some proprietary apps which are only available form the Google play store and also require the Google services installed on the phone. I don't carry this phone around all the time and I only use it intentionally for very specific use cases. I think this is the best compromise I can make.

    -

    iOS (mobile proprietary)


    +

    iOS (mobile proprietary)



    I have to use an iPhone for work. I like the hardware but I hate the OS (you can also call it spyOS), but it's the necessarries evil, unfortunately. Apple is even worse than Google here (despite claiming for themselves to produce the most secure phone(s)). I don't have it with me all the time or switched off when I don't need it. I also find iOS quite unintuitive to use.

    Being on-call for work means to to be reachable 24/7. This implies that the phone is carried around all the time (in an switched-on state). 1984 is now.
    https://en.wikipedia.org/wiki/Nineteen_Eighty-Four

    -

    Other OSes


    +

    Other OSes



    -

    InfinyTime (smartwatch)


    +

    InfinyTime (smartwatch)



    I use it on my PineTime smartwatch. Other than checking the time and my step count, I really don't do anything else fancy with it (yet).

    https://www.pine64.org/pinetime/
    https://infinitime.io/

    -

    motionEyeOS


    +

    motionEyeOS



    I usually install an army of RaspberryPi 3's in my house before I travel for a prolonged amount of time. All Pi's are equipped with an camera and have motionEyeOS (Linux based video surveillance system) installed. There's a neat Android app in the F-Droid store which let's me keep an eye on everything. I make the Pi's accessible from the internet via reverse SSH tunnels through one of my frontend servers.

    https://github.com/ccrisan/motioneyeos

    -

    Kobo OS (proprietary)


    +

    Kobo OS (proprietary)



    I use a Kobo Forma as my e-reader device. I have started to switch off the Wifi and to only sideload DRM free ePubs on it. Even offline, it's a fully capable reader device. I wouldn't like the Kobo to call home to Rakuten. I would love to replace it one day with an open source e-reader alternative like the PineNote. There are also some interesting attempts installing postmarketOS Linux on Kobo devices. The latter boots already, but is far from being usable as a normal e-reader.

    @@ -8144,28 +8144,28 @@ GNU/kFreeBSD rhea.buetow.org 8.0-RELEASE-p5 FreeBSD 8.0-RELEASE-p5 #2: Sat Nov 2
    But as a fall-back, someone could still use the good old dead tree format!

    -

    Android TV (proprietary)


    +

    Android TV (proprietary)



    An Android TV box is used for watching movies and series on Netflix and Amazon Prime video (yes, I am human too and rely once in a while on big tech streaming services). The Android TV box is currently in the process of being replaced by OSMC, though. Most services seem to work fine with OSMC, but didn't get around tinkering with Netflix and Amazon there yet.

    https://osmc.tv/

    -

    Other OSes..


    +

    Other OSes..



    This section is just for the sake of having a complete list of all OSes I used for some significant amount of time. I might not use all of them any more...

    -

    NetBSD


    +

    NetBSD



    I have been using NetBSD on an old Sun Sparcstation 10 as a student. I also have run NetBSD on a very old ThinkPad with 96MB!!! of RAM (even with X/evilWM). I also installed (but never really used) NetBSD on an HP Jornada 680. But that's all more than 10 years ago. I haven't looked at NetBSD for long time. I want to revive it on an "old" ThinkPad T450 of mine which I currently don't use.

    https://netbsd.org

    -

    Other OSes in use...


    +

    Other OSes in use...



    SailfishOS - Nice mobile OS, but unfortunately includes proprietary components
    Red Hat Enterprise Linux - Only for some work stuff

    -

    Other OSes not used any more...


    +

    Other OSes not used any more...



    SuSE Linux 5.3 - The first Linux OS I used
    SGI's IRIX - On a SGI Onyx 3200
    @@ -8179,7 +8179,7 @@ GNU/kFreeBSD rhea.buetow.org 8.0-RELEASE-p5 FreeBSD 8.0-RELEASE-p5 #2: Sat Nov 2 Linux from scratch - The best way to learn Linux
    SUSE Linux Enterprise - Only for some work stuff

    -

    Other OSes I only had a glance at...


    +

    Other OSes I only had a glance at...



    OpenSolaris - Continuation of the open source version of Solaris
    Arch Linux ARM
    @@ -8197,7 +8197,7 @@ GNU/kFreeBSD rhea.buetow.org 8.0-RELEASE-p5 FreeBSD 8.0-RELEASE-p5 #2: Sat Nov 2 Sun Solaris (now owned by Oracle)
    OpenDarwin ("now" PureDarwin) - Open source operating system based on the open parts of macOS

    -

    Other OSes which seem interesting...


    +

    Other OSes which seem interesting...



    Asteroids OS - Open source smartphone OS
    DragonFly BSD - Fork of FreeBSD 4
    @@ -8221,7 +8221,7 @@ GNU/kFreeBSD rhea.buetow.org 8.0-RELEASE-p5 FreeBSD 8.0-RELEASE-p5 #2: Sat Nov 2 I don't count this as a real blog post, but more of an announcement (I aim to write one real post once monthly). From now on, 'foo.zone' is the new address of this site. All other addresses will still forward to it and eventually (based on the traffic still going through) will be deactivated.
    -

    Welcome to the foo.zone


    +

    Welcome to the foo.zone



    Published at 2022-01-23T16:42:04+00:00

    @@ -8240,7 +8240,7 @@ GNU/kFreeBSD rhea.buetow.org 8.0-RELEASE-p5 FreeBSD 8.0-RELEASE-p5 #2: Sat Nov 2
    https://en.wikipedia.org/wiki/Metasyntactic_variable

    -

    What is the foo zone?


    +

    What is the foo zone?



    It's my personal internet site and blog. Everything you read on this site is my personal opinion and experience. It's not intended to be anything professional. If you want my professional background, then go to my LinkedIn profile.

    @@ -8258,13 +8258,13 @@ GNU/kFreeBSD rhea.buetow.org 8.0-RELEASE-p5 FreeBSD 8.0-RELEASE-p5 #2: Sat Nov 2
    So I think that foo.zone is the perfect match. It's a bit geeky, but so is this site. The meta-syntactic variable relates to computer science and programming, so does this site. Other than that, staying in this sphere, it's a pretty generic name.

    -

    To be in the .zone and not in a .surf club


    +

    To be in the .zone and not in a .surf club



    I was pretty happy finding out that foo.zone was still available for registration. I stumbled across it just yesterday while I was playing around with my new authoritative DNS servers. I was actually quite surprised as usually such short SLDs (second level domains), especially "foo", are all taken already.

    As a funny bit, I almost chose "foo.surf" over "foo.zone" as in "surfing this site", but then decided against it as I would have to tell everyone that I am not into water sports so much. Well, on the other hand, I now may have to explain to non-programmers that I am not a fan of the rock band "Foo Fighters". But that will be acceptable, as I don't expect "normal" people visiting the foo zone as much anyway. If you reached as far, I have to congratulate you. You are not a normal person.

    -

    What about my old hosts


    +

    What about my old hosts



    The host buetow.org will stay. However, not as the primary address for this site. I will keep using it for my personal internet infrastructure as well as for most of my E-Mail addresses. I used buetow.org for that over the past 10 years already anyway and that won't change any time soon. I don't know what I am going to do with snonux.de in the long run. A .de SLD (for Germany) is pretty cheap, so I might just keep it for now.

    @@ -8798,7 +8798,7 @@ PAUL:X:1000:1000:PAUL BUETOW:/HOME/PAUL:/BIN/BASH Log4shell (CVE-2021-44228) made it clear, once again, that working in information technology is not an easy job (especially when you are a DevOps person). I thought it would be interesting to summarize a few techniques to help you to relax.
    -

    How to stay sane as a DevOps person


    +

    How to stay sane as a DevOps person



    Published at 2021-12-26T12:02:02+00:00; Updated at 2022-01-12

    @@ -8830,7 +8830,7 @@ PAUL:X:1000:1000:PAUL BUETOW:/HOME/PAUL:/BIN/BASH
    https://en.wikipedia.org/wiki/Log4Shell

    -

    Set clear expectations


    +

    Set clear expectations



    It's important to set clear expectations. It can be difficult to guess what others expect or don't expect from you. If you know exactly what you are supposed to do, you can work towards a specific goal and don't worry about all the other noise so much.

    @@ -8838,21 +8838,21 @@ PAUL:X:1000:1000:PAUL BUETOW:/HOME/PAUL:/BIN/BASH
    Due to politeness, many people are not setting clear expectations. I personally may sound sometimes "too German" when setting expectations, but so far nobody complained, and I have even received positive feedback about it.

    -

    Always respond to requests but set expectations and boundaries


    +

    Always respond to requests but set expectations and boundaries



    There are many temptations to get side-tracked by other projects and/or issues. It is important to set boundaries here. But always answer to all requests as nothing is more frustrating than asking a person and never getting any answer back. This is especially the case when everyone is working form home where people are using tools such as Slack and E-Mail for most of their communications.

    -

    Dealing with requests


    +

    Dealing with requests



    If the request is urgent, and you have the capacity to help, probably you should help. If it's not urgent, maybe ask to pospone the request (e.g. ask to create a ticket, so that someone from your team can work on it later).

    If the request is urgent, but you don't have the knowledge or the capacity to help, try to defer to a colleague who might be able to help. You could also provide some quick tips and hints, so that the requester can resolve the issue by himself. Make it transparent why you might not have the time right now, as this can help the person to review his own priorities or to escalate.

    -

    Escalation is only a tool


    +

    Escalation is only a tool



    Never make or take an escalation personally. The only forms of escalation should be due to technical issues or lack of resources. An escalation then becomes like a math equation and does not need human resources involved. So de-facto, an escalation is nothing negative, but just a process people can follow to form decision-making. In a good company escalations tend to be an exception, though. Staff knows how to deal with the things by themselves without bothering management too much.

    -

    Think positively


    +

    Think positively



    If times are very stressful, think that it could always be worse:

    @@ -8862,17 +8862,17 @@ PAUL:X:1000:1000:PAUL BUETOW:/HOME/PAUL:/BIN/BASH
  • You probably will never run out of work in the IT sector. So you will always be able to make a living.
  • Your IT job and life is actually pretty good (compared to a homeless person for example). You are probably part of the world's top 1% regarding life standard.

  • -

    Go slower even if you could go faster


    +

    Go slower even if you could go faster



    When working in a team, you may feel that you could get done things faster when you just did everything by yourself. This can be a bit frustrating at times, as you might need to work late hours and also might need to explain things over and over again to others. Also, you could be the one who needs to get things explained over and over again as you are not so familiar with the topic (yet). You will appreciate it if the other person is slowing down for you a bit.

    -

    You work in a team


    +

    You work in a team



    Security is a team sport. So slow down and make sure that everyone is on track with the goals. You can go full-speed with your very own subtasks, though. Not everyone knows how to use all the tools so well like a full-time DevOps person. As a DevOps person, you are not a security expert, though. Security experts are different people in your company, but DevOps will be the main tribe deploying mitigations (following the security recommendations) and management will be the main tribe coordinating all the efforts.

    So even if you think that you can do everything faster by your own, can you really? You probably don't know what you don't know about IT security. The more you know about it, the more you know about what you don't know.

    -

    Don't rush


    +

    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.

    @@ -8880,7 +8880,7 @@ PAUL:X:1000:1000:PAUL BUETOW:/HOME/PAUL:/BIN/BASH
    Read also "Defensive DevOps" about deploying mitigation scripts.

    -

    You are not a superhero


    +

    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 ;-).

    @@ -8888,7 +8888,7 @@ PAUL:X:1000:1000:PAUL BUETOW:/HOME/PAUL:/BIN/BASH
    This doesn't mean, that you shouldn't try your best. But you don't need to try to be the superhero. Maybe someone else will be the superhero, but that's OK as long as it's not always the same person every time. Everyone can have a good day after all. If I could choose between being a superhero or having a good night sleep, I would probably prefer the sleep.

    -

    Give away some of your superpowers


    +

    Give away some of your superpowers



    If you are a superhero, try to give away some of your superpowers, so that you can relax in the evening knowing that others (e.g. the current on-call engineers) know how to tackle things. Every member of the team needs to do DevOps (even the team managers, in my humble opinion). Some may be less experienced than others or have other expertises, but to counteract this you could document the recurring tasks so that they are easy to follow (which then later could be either automated away or, even better, fully fixed).

    @@ -8896,7 +8896,7 @@ PAUL:X:1000:1000:PAUL BUETOW:/HOME/PAUL:/BIN/BASH
    So you are not a superhero. Or, if you are a superhero, then all colleagues should be superheroes too.

    -

    Don't jump on all problems immediately


    +

    Don't jump on all problems immediately



    In a perfect world, every member of a team comes along with the same strengths and skills. But in reality, everyone is different.

    @@ -8906,19 +8906,19 @@ PAUL:X:1000:1000:PAUL BUETOW:/HOME/PAUL:/BIN/BASH
    If the issue is a very critical one, then you might better off trying to resolve it as fast as possible with your full powers in order to avoid any major damage to the company. This, of course, only works if you know how to resolve it quickly. So, don't leave others with not much experience yet looking at it. If possible, work with the team to resolve the issue. Unfortunately, solving it with the team is not always the fastest way. So in this particular circumstance, the company may be better off being saved by a single superhero. Make sure that the problem will not occur again or, at least, that others can fix it the next time without Superman flying by.

    -

    Force breaks; and shutdown now


    +

    Force breaks; and shutdown now



    Be strict about your time off. Nowadays, tech workers check their messages also out of office hours and are reachable 24/7. This really should only be the case when you are on-call, to be honest (or if you work for a startup). All other out-of-office time is owned by you and not your employer. You have signed an 40 hour/week and not 7 days/week contract. Of course, there will be always some sort of flexibility and exceptions. You might need to work over the weekend to get a migration done or a problem solved. But to balance it out, you should have other days off as substitutes.

    It's important to shut down your brain from work during your breaks (be strict with your breaks, leave your desk for lunch or for a walk early afternoon and if you aren't on-call also don't take your work-phone with you). You will be happier and also much more energized and productive in the afternoon. Also, when you are reachable 24/7, your colleagues will start thinking that you don't have anything more important to do than work.

    -

    Block time every day for personal advance


    +

    Block time every day for personal advance



    It does not matter how many tasks are in your backlog or how many issues are to be tackled. *Always* find time for personal advance. The most issues aren't critical anyway and can wait a bit. At the end of the day, you will have a nice feeling that you have accomplished something meaningful. This can be an interesting project or learning a new technology you are interested in. Of course, there must be consensus with your manager (unless you do that kind of thing in your personal time of course).

    If you are too busy at work and just can't block time, then maybe it's time to think about alternatives. But before you do that, probably there is something else you can do. Perhaps you just think you can't block time, but you would be positively surprised to hear from your manager that he will fully support you. Of course, he won't agree to you working full-time on your pet projects. But a certain portion of your time should be allocated for personal advance. After all, your employer also want's you to stay happy so that you don't look for alternatives. It's of everyone's interest that you like your job and stay motivated. The more you are motivated, the more productive you are. The more productive you are, the more valuable you are for the company.

    -

    More


    +

    More



    Another blog post worth reading:

    diff --git a/gemfeed/bash-golf-part-3/bash-fork-bomb.jpg b/gemfeed/bash-golf-part-3/bash-fork-bomb.jpg new file mode 100644 index 00000000..6967c03a Binary files /dev/null and b/gemfeed/bash-golf-part-3/bash-fork-bomb.jpg differ diff --git a/gemfeed/dtail-the-distributed-log-tail-program/dgrep.gif b/gemfeed/dtail-the-distributed-log-tail-program/dgrep.gif new file mode 100644 index 00000000..e2f2ac64 Binary files /dev/null and b/gemfeed/dtail-the-distributed-log-tail-program/dgrep.gif differ diff --git a/gemfeed/dtail-the-distributed-log-tail-program/dtail.gif b/gemfeed/dtail-the-distributed-log-tail-program/dtail.gif new file mode 100644 index 00000000..8f6b56bf Binary files /dev/null and b/gemfeed/dtail-the-distributed-log-tail-program/dtail.gif differ diff --git a/gemfeed/dtail-the-distributed-log-tail-program/title.png b/gemfeed/dtail-the-distributed-log-tail-program/title.png new file mode 100644 index 00000000..4e343c4f Binary files /dev/null and b/gemfeed/dtail-the-distributed-log-tail-program/title.png differ diff --git a/gemfeed/gemtexter-one-bash-script-to-rule-it-all/blog-engine.jpg b/gemfeed/gemtexter-one-bash-script-to-rule-it-all/blog-engine.jpg new file mode 100644 index 00000000..844bc9fc Binary files /dev/null and b/gemfeed/gemtexter-one-bash-script-to-rule-it-all/blog-engine.jpg differ diff --git a/gemfeed/kiss-server-monitoring-with-gogios/gogios-small.png b/gemfeed/kiss-server-monitoring-with-gogios/gogios-small.png new file mode 100644 index 00000000..aebe695c Binary files /dev/null and b/gemfeed/kiss-server-monitoring-with-gogios/gogios-small.png differ diff --git a/gemfeed/perl-is-still-a-great-choice/googletrendsperl.jpg b/gemfeed/perl-is-still-a-great-choice/googletrendsperl.jpg new file mode 100644 index 00000000..397c9f29 Binary files /dev/null and b/gemfeed/perl-is-still-a-great-choice/googletrendsperl.jpg differ diff --git a/gemfeed/perl-is-still-a-great-choice/regular_expressions.png b/gemfeed/perl-is-still-a-great-choice/regular_expressions.png new file mode 100644 index 00000000..acbc2437 Binary files /dev/null and b/gemfeed/perl-is-still-a-great-choice/regular_expressions.png differ diff --git a/gemfeed/realistic-load-testing-with-ioriot-for-linux/figure1-ioriot-io-recording.png b/gemfeed/realistic-load-testing-with-ioriot-for-linux/figure1-ioriot-io-recording.png new file mode 100644 index 00000000..43ac852f Binary files /dev/null and b/gemfeed/realistic-load-testing-with-ioriot-for-linux/figure1-ioriot-io-recording.png differ diff --git a/gemfeed/realistic-load-testing-with-ioriot-for-linux/figure2-ioriot-test-preparation.png b/gemfeed/realistic-load-testing-with-ioriot-for-linux/figure2-ioriot-test-preparation.png new file mode 100644 index 00000000..709d7490 Binary files /dev/null and b/gemfeed/realistic-load-testing-with-ioriot-for-linux/figure2-ioriot-test-preparation.png differ diff --git a/gemfeed/realistic-load-testing-with-ioriot-for-linux/figure3-ioriot-replay.png b/gemfeed/realistic-load-testing-with-ioriot-for-linux/figure3-ioriot-replay.png new file mode 100644 index 00000000..3bd66b6f Binary files /dev/null and b/gemfeed/realistic-load-testing-with-ioriot-for-linux/figure3-ioriot-replay.png differ diff --git a/gemfeed/realistic-load-testing-with-ioriot-for-linux/figure4-ioriot-read-latency.png b/gemfeed/realistic-load-testing-with-ioriot-for-linux/figure4-ioriot-read-latency.png new file mode 100644 index 00000000..160b2305 Binary files /dev/null and b/gemfeed/realistic-load-testing-with-ioriot-for-linux/figure4-ioriot-read-latency.png differ diff --git a/gemfeed/realistic-load-testing-with-ioriot-for-linux/figure5-ioriot-write-latency.png b/gemfeed/realistic-load-testing-with-ioriot-for-linux/figure5-ioriot-write-latency.png new file mode 100644 index 00000000..e30efdbb Binary files /dev/null and b/gemfeed/realistic-load-testing-with-ioriot-for-linux/figure5-ioriot-write-latency.png differ diff --git a/gemfeed/realistic-load-testing-with-ioriot-for-linux/figure6-iostat.png b/gemfeed/realistic-load-testing-with-ioriot-for-linux/figure6-iostat.png new file mode 100644 index 00000000..0d3fc0d8 Binary files /dev/null and b/gemfeed/realistic-load-testing-with-ioriot-for-linux/figure6-iostat.png differ diff --git a/gemfeed/run-debian-on-your-phone-with-debroid/Deboroid.png b/gemfeed/run-debian-on-your-phone-with-debroid/Deboroid.png new file mode 100644 index 00000000..f76cf226 Binary files /dev/null and b/gemfeed/run-debian-on-your-phone-with-debroid/Deboroid.png differ diff --git a/gemfeed/sweating-the-small-stuff/jsmstrade.png b/gemfeed/sweating-the-small-stuff/jsmstrade.png new file mode 100644 index 00000000..ce5276f8 Binary files /dev/null and b/gemfeed/sweating-the-small-stuff/jsmstrade.png differ diff --git a/gemfeed/sweating-the-small-stuff/ninja.jpg b/gemfeed/sweating-the-small-stuff/ninja.jpg new file mode 100644 index 00000000..8a036323 Binary files /dev/null and b/gemfeed/sweating-the-small-stuff/ninja.jpg differ diff --git a/gemfeed/the-well-grounded-rubyist/book-backside.jpg b/gemfeed/the-well-grounded-rubyist/book-backside.jpg new file mode 100644 index 00000000..2190e679 Binary files /dev/null and b/gemfeed/the-well-grounded-rubyist/book-backside.jpg differ diff --git a/gemfeed/the-well-grounded-rubyist/book-cover.jpg b/gemfeed/the-well-grounded-rubyist/book-cover.jpg new file mode 100644 index 00000000..b5a00063 Binary files /dev/null and b/gemfeed/the-well-grounded-rubyist/book-cover.jpg differ diff --git a/gemfeed/ultrarelearning-java-my-takeaways/effective-java.jpg b/gemfeed/ultrarelearning-java-my-takeaways/effective-java.jpg new file mode 100644 index 00000000..213c6e03 Binary files /dev/null and b/gemfeed/ultrarelearning-java-my-takeaways/effective-java.jpg differ diff --git a/gemfeed/ultrarelearning-java-my-takeaways/learnjava.jpg b/gemfeed/ultrarelearning-java-my-takeaways/learnjava.jpg new file mode 100644 index 00000000..4c3b9e7b Binary files /dev/null and b/gemfeed/ultrarelearning-java-my-takeaways/learnjava.jpg differ diff --git a/gemfeed/using-my-nokia-n95-for-fixing-my-mta/nokia-n95.jpg b/gemfeed/using-my-nokia-n95-for-fixing-my-mta/nokia-n95.jpg new file mode 100644 index 00000000..6a11be8b Binary files /dev/null and b/gemfeed/using-my-nokia-n95-for-fixing-my-mta/nokia-n95.jpg differ diff --git a/gemfeed/welcome-to-the-geminispace/amfora-screenshot.png b/gemfeed/welcome-to-the-geminispace/amfora-screenshot.png new file mode 100644 index 00000000..093aec79 Binary files /dev/null and b/gemfeed/welcome-to-the-geminispace/amfora-screenshot.png differ diff --git a/gemfeed/welcome-to-the-geminispace/lagrange-screenshot.png b/gemfeed/welcome-to-the-geminispace/lagrange-screenshot.png new file mode 100644 index 00000000..478d2fdd Binary files /dev/null and b/gemfeed/welcome-to-the-geminispace/lagrange-screenshot.png differ -- cgit v1.2.3