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 index.html | 2 +- notes/search-inside-yourself.html | 3 - uptime-stats.html | 2 +- 69 files changed, 183 insertions(+), 186 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 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