summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-07-24 22:38:10 +0300
committerPaul Buetow <paul@buetow.org>2024-07-24 22:38:10 +0300
commita36f9d4403f48beeafc64d8b5cf9f9eef5d8a426 (patch)
treec928d4a98cb8786d4d1a2cc394e0fecabec6a56e
parent2feb77308a1013605946a1c8045247b15bfaf869 (diff)
Update content for html
-rw-r--r--gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta.html2
-rw-r--r--gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.html2
-rw-r--r--gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.html12
-rw-r--r--gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html6
-rw-r--r--gemfeed/2021-04-24-welcome-to-the-geminispace.html4
-rw-r--r--gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html2
-rw-r--r--gemfeed/2021-07-04-the-well-grounded-rubyist.html4
-rw-r--r--gemfeed/2022-05-27-perl-is-still-a-great-choice.html4
-rw-r--r--gemfeed/2022-06-15-sweating-the-small-stuff.html4
-rw-r--r--gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.html4
-rw-r--r--gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.html2
-rw-r--r--gemfeed/2023-12-10-bash-golf-part-3.html2
-rw-r--r--gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.html4
-rw-r--r--gemfeed/a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/logo-small.png (renamed from gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/logo-small.png)bin63314 -> 63314 bytes
-rw-r--r--gemfeed/a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/screenshot-android.png (renamed from gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/screenshot-android.png)bin45089 -> 45089 bytes
-rw-r--r--gemfeed/atom.xml310
-rw-r--r--gemfeed/bash-golf-part-3/bash-fork-bomb.jpg (renamed from gemfeed/2023-12-10-bash-golf-part-3/bash-fork-bomb.jpg)bin209399 -> 209399 bytes
-rw-r--r--gemfeed/dtail-the-distributed-log-tail-program/dgrep.gif (renamed from gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dgrep.gif)bin142329 -> 142329 bytes
-rw-r--r--gemfeed/dtail-the-distributed-log-tail-program/dtail.gif (renamed from gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dtail.gif)bin1984520 -> 1984520 bytes
-rw-r--r--gemfeed/dtail-the-distributed-log-tail-program/title.png (renamed from gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/title.png)bin84933 -> 84933 bytes
-rw-r--r--gemfeed/gemtexter-one-bash-script-to-rule-it-all/blog-engine.jpg (renamed from gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all/blog-engine.jpg)bin41291 -> 41291 bytes
-rw-r--r--gemfeed/kiss-server-monitoring-with-gogios/gogios-small.png (renamed from gemfeed/2023-06-01-kiss-server-monitoring-with-gogios/gogios-small.png)bin56698 -> 56698 bytes
-rw-r--r--gemfeed/perl-is-still-a-great-choice/googletrendsperl.jpg (renamed from gemfeed/2022-05-27-perl-is-still-a-great-choice/googletrendsperl.jpg)bin18537 -> 18537 bytes
-rw-r--r--gemfeed/perl-is-still-a-great-choice/regular_expressions.png (renamed from gemfeed/2022-05-27-perl-is-still-a-great-choice/regular_expressions.png)bin107151 -> 107151 bytes
-rw-r--r--gemfeed/realistic-load-testing-with-ioriot-for-linux/figure1-ioriot-io-recording.png (renamed from gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure1-ioriot-io-recording.png)bin220247 -> 220247 bytes
-rw-r--r--gemfeed/realistic-load-testing-with-ioriot-for-linux/figure2-ioriot-test-preparation.png (renamed from gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure2-ioriot-test-preparation.png)bin208235 -> 208235 bytes
-rw-r--r--gemfeed/realistic-load-testing-with-ioriot-for-linux/figure3-ioriot-replay.png (renamed from gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure3-ioriot-replay.png)bin417034 -> 417034 bytes
-rw-r--r--gemfeed/realistic-load-testing-with-ioriot-for-linux/figure4-ioriot-read-latency.png (renamed from gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure4-ioriot-read-latency.png)bin39552 -> 39552 bytes
-rw-r--r--gemfeed/realistic-load-testing-with-ioriot-for-linux/figure5-ioriot-write-latency.png (renamed from gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure5-ioriot-write-latency.png)bin26547 -> 26547 bytes
-rw-r--r--gemfeed/realistic-load-testing-with-ioriot-for-linux/figure6-iostat.png (renamed from gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure6-iostat.png)bin294346 -> 294346 bytes
-rw-r--r--gemfeed/run-debian-on-your-phone-with-debroid/Deboroid.png (renamed from gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid/Deboroid.png)bin576510 -> 576510 bytes
-rw-r--r--gemfeed/sweating-the-small-stuff/jsmstrade.png (renamed from gemfeed/2022-06-15-sweating-the-small-stuff/jsmstrade.png)bin13636 -> 13636 bytes
-rw-r--r--gemfeed/sweating-the-small-stuff/ninja.jpg (renamed from gemfeed/2022-06-15-sweating-the-small-stuff/ninja.jpg)bin302772 -> 302772 bytes
-rw-r--r--gemfeed/the-well-grounded-rubyist/book-backside.jpg (renamed from gemfeed/2021-07-04-the-well-grounded-rubyist/book-backside.jpg)bin179996 -> 179996 bytes
-rw-r--r--gemfeed/the-well-grounded-rubyist/book-cover.jpg (renamed from gemfeed/2021-07-04-the-well-grounded-rubyist/book-cover.jpg)bin140259 -> 140259 bytes
-rw-r--r--gemfeed/ultrarelearning-java-my-takeaways/effective-java.jpg (renamed from gemfeed/2022-12-24-ultrarelearning-java-my-takeaways/effective-java.jpg)bin187342 -> 187342 bytes
-rw-r--r--gemfeed/ultrarelearning-java-my-takeaways/learnjava.jpg (renamed from gemfeed/2022-12-24-ultrarelearning-java-my-takeaways/learnjava.jpg)bin69628 -> 69628 bytes
-rw-r--r--gemfeed/using-my-nokia-n95-for-fixing-my-mta/nokia-n95.jpg (renamed from gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta/nokia-n95.jpg)bin379578 -> 379578 bytes
-rw-r--r--gemfeed/welcome-to-the-geminispace/amfora-screenshot.png (renamed from gemfeed/2021-04-24-welcome-to-the-geminispace/amfora-screenshot.png)bin154951 -> 154951 bytes
-rw-r--r--gemfeed/welcome-to-the-geminispace/lagrange-screenshot.png (renamed from gemfeed/2021-04-24-welcome-to-the-geminispace/lagrange-screenshot.png)bin104677 -> 104677 bytes
-rw-r--r--index.html2
-rw-r--r--notes/search-inside-yourself.html3
-rw-r--r--uptime-stats.html2
43 files changed, 183 insertions, 186 deletions
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/_\|//__
<br />
<span>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). </span><br />
<br />
-<a href='./2008-12-29-using-my-nokia-n95-for-fixing-my-mta/nokia-n95.jpg'><img alt='Picture of a Nokia N95' title='Picture of a Nokia N95' src='./2008-12-29-using-my-nokia-n95-for-fixing-my-mta/nokia-n95.jpg' /></a><br />
+<a href='./using-my-nokia-n95-for-fixing-my-mta/nokia-n95.jpg'><img alt='Picture of a Nokia N95' title='Picture of a Nokia N95' src='./using-my-nokia-n95-for-fixing-my-mta/nokia-n95.jpg' /></a><br />
<br />
<span>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:</span><br />
<br />
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 @@
<br />
<span>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).</span><br />
<br />
-<a href='./2015-12-05-run-debian-on-your-phone-with-debroid/Deboroid.png'><img src='./2015-12-05-run-debian-on-your-phone-with-debroid/Deboroid.png' /></a><br />
+<a href='./run-debian-on-your-phone-with-debroid/Deboroid.png'><img src='./run-debian-on-your-phone-with-debroid/Deboroid.png' /></a><br />
<br />
<h2 style='display: inline' id='Foreword'>Foreword</h2><br />
<br />
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\__/&#39;---&#39;\__/
% sudo ioriot -c io.capture
</pre>
<br />
-<a href='./2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure1-ioriot-io-recording.png'><img alt='Screenshot I/O recording' title='Screenshot I/O recording' src='./2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure1-ioriot-io-recording.png' /></a><br />
+<a href='./realistic-load-testing-with-ioriot-for-linux/figure1-ioriot-io-recording.png'><img alt='Screenshot I/O recording' title='Screenshot I/O recording' src='./realistic-load-testing-with-ioriot-for-linux/figure1-ioriot-io-recording.png' /></a><br />
<br />
<span>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.</span><br />
<br />
@@ -115,7 +115,7 @@ jgs\__/&#39;---&#39;\__/
<br />
<span>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.</span><br />
<br />
-<a href='./2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure2-ioriot-test-preparation.png'><img alt='Screenshot test preparation' title='Screenshot test preparation' src='./2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure2-ioriot-test-preparation.png' /></a><br />
+<a href='./realistic-load-testing-with-ioriot-for-linux/figure2-ioriot-test-preparation.png'><img alt='Screenshot test preparation' title='Screenshot test preparation' src='./realistic-load-testing-with-ioriot-for-linux/figure2-ioriot-test-preparation.png' /></a><br />
<br />
<span>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".</span><br />
<br />
@@ -125,7 +125,7 @@ jgs\__/&#39;---&#39;\__/
<br />
<span>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.</span><br />
<br />
-<a href='./2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure3-ioriot-replay.png'><img alt='Screenshot replaying I/O' title='Screenshot replaying I/O' src='./2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure3-ioriot-replay.png' /></a><br />
+<a href='./realistic-load-testing-with-ioriot-for-linux/figure3-ioriot-replay.png'><img alt='Screenshot replaying I/O' title='Screenshot replaying I/O' src='./realistic-load-testing-with-ioriot-for-linux/figure3-ioriot-replay.png' /></a><br />
<br />
<span>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:</span><br />
<br />
@@ -167,13 +167,13 @@ Total time: 1213.00s
<br />
<span>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.</span><br />
<br />
-<a href='./2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure4-ioriot-read-latency.png'><img alt='Graphite visualization of the mean read access times in ms with CFQ and Deadline Scheduler.' title='Graphite visualization of the mean read access times in ms with CFQ and Deadline Scheduler.' src='./2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure4-ioriot-read-latency.png' /></a><br />
+<a href='./realistic-load-testing-with-ioriot-for-linux/figure4-ioriot-read-latency.png'><img alt='Graphite visualization of the mean read access times in ms with CFQ and Deadline Scheduler.' title='Graphite visualization of the mean read access times in ms with CFQ and Deadline Scheduler.' src='./realistic-load-testing-with-ioriot-for-linux/figure4-ioriot-read-latency.png' /></a><br />
<br />
-<a href='./2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure5-ioriot-write-latency.png'><img alt='Graphite visualization of the average write access times in ms with CFQ and Deadline Scheduler.' title='Graphite visualization of the average write access times in ms with CFQ and Deadline Scheduler.' src='./2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure5-ioriot-write-latency.png' /></a><br />
+<a href='./realistic-load-testing-with-ioriot-for-linux/figure5-ioriot-write-latency.png'><img alt='Graphite visualization of the average write access times in ms with CFQ and Deadline Scheduler.' title='Graphite visualization of the average write access times in ms with CFQ and Deadline Scheduler.' src='./realistic-load-testing-with-ioriot-for-linux/figure5-ioriot-write-latency.png' /></a><br />
<br />
<span>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.</span><br />
<br />
-<a href='./2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure6-iostat.png'><img alt='Output of iostat. The block device sdy seems to be almost fully utilized by 99%.' title='Output of iostat. The block device sdy seems to be almost fully utilized by 99%.' src='./2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure6-iostat.png' /></a><br />
+<a href='./realistic-load-testing-with-ioriot-for-linux/figure6-iostat.png'><img alt='Output of iostat. The block device sdy seems to be almost fully utilized by 99%.' title='Output of iostat. The block device sdy seems to be almost fully utilized by 99%.' src='./realistic-load-testing-with-ioriot-for-linux/figure6-iostat.png' /></a><br />
<br />
<h2 style='display: inline' id='IORiotisOpenSource'>I/O Riot is Open Source</h2><br />
<br />
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 @@
<br />
<span class='quote'>Published at 2021-04-22T19:28:41+01:00; Updated at 2021-04-26</span><br />
<br />
-<a href='./2021-04-22-dtail-the-distributed-log-tail-program/title.png'><img alt='DTail logo image' title='DTail logo image' src='./2021-04-22-dtail-the-distributed-log-tail-program/title.png' /></a><br />
+<a href='./dtail-the-distributed-log-tail-program/title.png'><img alt='DTail logo image' title='DTail logo image' src='./dtail-the-distributed-log-tail-program/title.png' /></a><br />
<br />
<span>This article first appeared at the Mimecast Engineering Blog but I made it available here in my personal internet site too.</span><br />
<br />
@@ -40,7 +40,7 @@
<br />
<span>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.</span><br />
<br />
-<a href='./2021-04-22-dtail-the-distributed-log-tail-program/dtail.gif'><img alt='DTail sample session animated gif' title='DTail sample session animated gif' src='./2021-04-22-dtail-the-distributed-log-tail-program/dtail.gif' /></a><br />
+<a href='./dtail-the-distributed-log-tail-program/dtail.gif'><img alt='DTail sample session animated gif' title='DTail sample session animated gif' src='./dtail-the-distributed-log-tail-program/dtail.gif' /></a><br />
<br />
<span>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.</span><br />
<br />
@@ -65,7 +65,7 @@
<li>dgrep: The distributed grep client for searching text files for a regular expression pattern.</li>
<li>dmap: The distributed map-reduce client for aggregating stats from log files.</li>
</ul><br />
-<a href='./2021-04-22-dtail-the-distributed-log-tail-program/dgrep.gif'><img alt='DGrep sample session animated gif' title='DGrep sample session animated gif' src='./2021-04-22-dtail-the-distributed-log-tail-program/dgrep.gif' /></a><br />
+<a href='./dtail-the-distributed-log-tail-program/dgrep.gif'><img alt='DGrep sample session animated gif' title='DGrep sample session animated gif' src='./dtail-the-distributed-log-tail-program/dgrep.gif' /></a><br />
<br />
<h2 style='display: inline' id='Usageexample'>Usage example</h2><br />
<br />
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 @@
<br />
<span>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&#39;s your (the user&#39;s) choice.</span><br />
<br />
-<a href='./2021-04-24-welcome-to-the-geminispace/amfora-screenshot.png'><img alt='Screenshot Amfora Gemini terminal client surfing this site' title='Screenshot Amfora Gemini terminal client surfing this site' src='./2021-04-24-welcome-to-the-geminispace/amfora-screenshot.png' /></a><br />
-<a href='./2021-04-24-welcome-to-the-geminispace/lagrange-screenshot.png'><img alt='Screenshot graphical Lagrange Gemini client surfing this site' title='Screenshot graphical Lagrange Gemini client surfing this site' src='./2021-04-24-welcome-to-the-geminispace/lagrange-screenshot.png' /></a><br />
+<a href='./welcome-to-the-geminispace/amfora-screenshot.png'><img alt='Screenshot Amfora Gemini terminal client surfing this site' title='Screenshot Amfora Gemini terminal client surfing this site' src='./welcome-to-the-geminispace/amfora-screenshot.png' /></a><br />
+<a href='./welcome-to-the-geminispace/lagrange-screenshot.png'><img alt='Screenshot graphical Lagrange Gemini client surfing this site' title='Screenshot graphical Lagrange Gemini client surfing this site' src='./welcome-to-the-geminispace/lagrange-screenshot.png' /></a><br />
<br />
<span>Why is there a need for a new protocol? As the modern web is a superset of Gemini, can&#39;t we use simple HTML 1.0 instead? That&#39;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&#39;t force every website on the modern web to only create plain and straightforward-looking HTML pages.</span><br />
<br />
diff --git a/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html b/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.html
index 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 @@
<br />
<span>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.</span><br />
<br />
-<a href='./2021-06-05-gemtexter-one-bash-script-to-rule-it-all/blog-engine.jpg'><img alt='Motivational comic strip' title='Motivational comic strip' src='./2021-06-05-gemtexter-one-bash-script-to-rule-it-all/blog-engine.jpg' /></a><br />
+<a href='./gemtexter-one-bash-script-to-rule-it-all/blog-engine.jpg'><img alt='Motivational comic strip' title='Motivational comic strip' src='./gemtexter-one-bash-script-to-rule-it-all/blog-engine.jpg' /></a><br />
<br />
<span>I have exactly done that - I wrote a Bash script, named Gemtexter, for that:</span><br />
<br />
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 @@
<br />
<span>You should learn or try out one new programming language once yearly anyway. If you end up not using the new language, that&#39;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!</span><br />
<br />
-<a href='./2021-07-04-the-well-grounded-rubyist/book-cover.jpg'><img src='./2021-07-04-the-well-grounded-rubyist/book-cover.jpg' /></a><br />
+<a href='./the-well-grounded-rubyist/book-cover.jpg'><img src='./the-well-grounded-rubyist/book-cover.jpg' /></a><br />
<br />
<span>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&#39;t love the syntax, especially the indentations used; they always confused me. I don&#39;t dislike Python, but I don&#39;t prefer to program in it if I have a choice, especially when there are more propelling alternatives available. Personally, it&#39;s so much more fun to program in Ruby than in Python.</span><br />
<br />
-<a href='./2021-07-04-the-well-grounded-rubyist/book-backside.jpg'><img src='./2021-07-04-the-well-grounded-rubyist/book-backside.jpg' /></a><br />
+<a href='./the-well-grounded-rubyist/book-backside.jpg'><img src='./the-well-grounded-rubyist/book-backside.jpg' /></a><br />
<br />
<span>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&#39;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&#39;s already used at my workplace.</span><br />
<br />
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 @@
<br />
<span class='quote'>Published at 2022-05-27T07:50:12+01:00; Updated at 2023-01-28</span><br />
<br />
-<a href='./2022-05-27-perl-is-still-a-great-choice/regular_expressions.png'><img alt='Comic source: XKCD' title='Comic source: XKCD' src='./2022-05-27-perl-is-still-a-great-choice/regular_expressions.png' /></a><br />
+<a href='./perl-is-still-a-great-choice/regular_expressions.png'><img alt='Comic source: XKCD' title='Comic source: XKCD' src='./perl-is-still-a-great-choice/regular_expressions.png' /></a><br />
<br />
<span>Perl (the Practical Extraction and Report Language) is a battle-tested, mature, multi-paradigm dynamic programming language. Note that it&#39;s not called PERL, neither P.E.R.L. nor Pearl. "Perl" is the name of the language and <span class='inlinecode'>perl</span> the name of the interpreter or the interpreter command.</span><br />
<br />
<span>Unfortunately (it makes me sad), Perl&#39;s popularity has been declining over the last years as Google trends shows:</span><br />
<br />
-<a href='./2022-05-27-perl-is-still-a-great-choice/googletrendsperl.jpg'><img src='./2022-05-27-perl-is-still-a-great-choice/googletrendsperl.jpg' /></a><br />
+<a href='./perl-is-still-a-great-choice/googletrendsperl.jpg'><img src='./perl-is-still-a-great-choice/googletrendsperl.jpg' /></a><br />
<br />
<span>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:</span><br />
<br />
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 @@
<br />
<span>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.</span><br />
<br />
-<a href='./2022-06-15-sweating-the-small-stuff/ninja.jpg'><img src='./2022-06-15-sweating-the-small-stuff/ninja.jpg' /></a><br />
+<a href='./sweating-the-small-stuff/ninja.jpg'><img src='./sweating-the-small-stuff/ninja.jpg' /></a><br />
<br />
<span>More than 10 years ago I wrote the bespoke small static photo album generator in Bash <span class='inlinecode'>photoalbum.sh</span> 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 <span class='inlinecode'>irregular.ninja</span> has been registered.</span><br />
<br />
@@ -240,7 +240,7 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs
<br />
<span><span class='inlinecode'>jsmstrade</span> is a minimalistic graphical Java swing client for sending SMS messages over the SMStrade service.</span><br />
<br />
-<a href='./2022-06-15-sweating-the-small-stuff/jsmstrade.png'><img src='./2022-06-15-sweating-the-small-stuff/jsmstrade.png' /></a><br />
+<a href='./sweating-the-small-stuff/jsmstrade.png'><img src='./sweating-the-small-stuff/jsmstrade.png' /></a><br />
<br />
<a class='textlink' href='https://codeberg.org/snonux/jsmstrade'>https://codeberg.org/snonux/jsmstrade</a><br />
<a class='textlink' href='https://smstrade.de'>https://smstrade.de</a><br />
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 @@
<br />
<span class='quote'>Published at 2022-12-24T23:18:40+02:00</span><br />
<br />
-<a href='./2022-12-24-ultrarelearning-java-my-takeaways/learnjava.jpg'><img src='./2022-12-24-ultrarelearning-java-my-takeaways/learnjava.jpg' /></a><br />
+<a href='./ultrarelearning-java-my-takeaways/learnjava.jpg'><img src='./ultrarelearning-java-my-takeaways/learnjava.jpg' /></a><br />
<br />
<span>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:</span><br />
<br />
@@ -36,7 +36,7 @@
<br />
<span>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!</span><br />
<br />
-<a href='./2022-12-24-ultrarelearning-java-my-takeaways/effective-java.jpg'><img src='./2022-12-24-ultrarelearning-java-my-takeaways/effective-java.jpg' /></a><br />
+<a href='./ultrarelearning-java-my-takeaways/effective-java.jpg'><img src='./ultrarelearning-java-my-takeaways/effective-java.jpg' /></a><br />
<br />
<span>I recommend reading the 90-part effective Java Series on <span class='inlinecode'>dev.to</span>. It&#39;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.</span><br />
<br />
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 @@
<br />
<span class='quote'>Published at 2023-06-01T21:10:17+03:00</span><br />
<br />
-<a href='./2023-06-01-kiss-server-monitoring-with-gogios/gogios-small.png'><img alt='Gogios logo' title='Gogios logo' src='./2023-06-01-kiss-server-monitoring-with-gogios/gogios-small.png' /></a><br />
+<a href='./kiss-server-monitoring-with-gogios/gogios-small.png'><img alt='Gogios logo' title='Gogios logo' src='./kiss-server-monitoring-with-gogios/gogios-small.png' /></a><br />
<br />
<h2 style='display: inline' id='Introduction'>Introduction</h2><br />
<br />
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 -->
<br />
<span>And here is the cute illustration:</span><br />
<br />
-<a href='./2023-12-10-bash-golf-part-3/bash-fork-bomb.jpg'><img alt='Bash fork bomb' title='Bash fork bomb' src='./2023-12-10-bash-golf-part-3/bash-fork-bomb.jpg' /></a><br />
+<a href='./bash-golf-part-3/bash-fork-bomb.jpg'><img alt='Bash fork bomb' title='Bash fork bomb' src='./bash-golf-part-3/bash-fork-bomb.jpg' /></a><br />
<br />
<h2 style='display: inline' id='Innerfunctions'>Inner functions</h2><br />
<br />
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 @@
<br />
<span>I have tried many note apps for my Android (I use GrapheneOS) phone. Most of them either don&#39;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&#39;m not too fond of the complexity of the developer toolchains. I don&#39;t want to use Android Studio (as a NeoVim user), and I don&#39;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.</span><br />
<br />
-<a href='2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/logo-small.png'><img alt='Quick logger Logo' title='Quick logger Logo' src='2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/logo-small.png' /></a><br />
+<a href='a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/logo-small.png'><img alt='Quick logger Logo' title='Quick logger Logo' src='a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/logo-small.png' /></a><br />
<br />
<span>Enter Quick logger – a compact GUI Android (well, cross-platform due to Fyne) app I&#39;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&#39;s whole Go source code is only 75 lines short!! This little tool is designed for spontaneous moments,