From f2abb2964e4fa979c4084055c3ef8559f7ffaa6a Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 24 Jul 2024 22:38:10 +0300 Subject: Update content for gemtext --- ...-12-29-using-my-nokia-n95-for-fixing-my-mta.gmi | 2 +- .../nokia-n95.jpg | Bin 379578 -> 0 bytes ...12-05-run-debian-on-your-phone-with-debroid.gmi | 2 +- .../Deboroid.png | Bin 576510 -> 0 bytes ...ealistic-load-testing-with-ioriot-for-linux.gmi | 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 ...4-22-dtail-the-distributed-log-tail-program.gmi | 6 +- ...-dtail-the-distributed-log-tail-program.gmi.tpl | 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.gmi | 4 +- .../2021-04-24-welcome-to-the-geminispace.gmi.tpl | 4 +- .../amfora-screenshot.png | Bin 154951 -> 0 bytes .../lagrange-screenshot.png | Bin 104677 -> 0 bytes ...05-gemtexter-one-bash-script-to-rule-it-all.gmi | 2 +- ...emtexter-one-bash-script-to-rule-it-all.gmi.tpl | 2 +- .../blog-engine.jpg | Bin 41291 -> 0 bytes gemfeed/2021-07-04-the-well-grounded-rubyist.gmi | 4 +- .../book-backside.jpg | Bin 179996 -> 0 bytes .../book-cover.jpg | Bin 140259 -> 0 bytes .../2022-05-27-perl-is-still-a-great-choice.gmi | 4 +- ...2022-05-27-perl-is-still-a-great-choice.gmi.tpl | 4 +- .../googletrendsperl.jpg | Bin 18537 -> 0 bytes .../regular_expressions.png | Bin 107151 -> 0 bytes gemfeed/2022-06-15-sweating-the-small-stuff.gmi | 4 +- .../jsmstrade.png | Bin 13636 -> 0 bytes .../2022-06-15-sweating-the-small-stuff/ninja.jpg | Bin 302772 -> 0 bytes ...022-12-24-ultrarelearning-java-my-takeaways.gmi | 4 +- .../effective-java.jpg | Bin 187342 -> 0 bytes .../learnjava.jpg | Bin 69628 -> 0 bytes ...23-06-01-kiss-server-monitoring-with-gogios.gmi | 2 +- ...6-01-kiss-server-monitoring-with-gogios.gmi.tpl | 2 +- .../gogios-small.png | Bin 56698 -> 0 bytes gemfeed/2023-12-10-bash-golf-part-3.gmi | 2 +- gemfeed/2023-12-10-bash-golf-part-3.gmi.tpl | 2 +- .../2023-12-10-bash-golf-part-3/bash-fork-bomb.jpg | Bin 209399 -> 0 bytes ...-quickly-logging-ideas-programmed-in-golang.gmi | 4 +- ...ckly-logging-ideas-programmed-in-golang.gmi.tpl | 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.gmi | 2 +- uptime-stats.gmi | 2 +- 75 files changed, 195 insertions(+), 195 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.gmi b/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta.gmi index f52d9bb9..33484e6c 100644 --- a/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta.gmi +++ b/gemfeed/2008-12-29-using-my-nokia-n95-for-fixing-my-mta.gmi @@ -23,7 +23,7 @@ The last week I was in Vidin, Bulgaria with no internet access and I had to fix 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). -=> ./2008-12-29-using-my-nokia-n95-for-fixing-my-mta/nokia-n95.jpg Picture of a Nokia N95 +=> ./using-my-nokia-n95-for-fixing-my-mta/nokia-n95.jpg 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.gmi b/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.gmi index 2f15096a..f31ba96b 100644 --- a/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.gmi +++ b/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.gmi @@ -13,7 +13,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). -=> ./2015-12-05-run-debian-on-your-phone-with-debroid/Deboroid.png +=> ./run-debian-on-your-phone-with-debroid/Deboroid.png ## 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.gmi b/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.gmi index 31ce85cc..4aeae0c6 100644 --- a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.gmi +++ b/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.gmi @@ -81,7 +81,7 @@ During recording, ioriot acts as a wrapper and executes all relevant Systemtap c % sudo ioriot -c io.capture ``` -=> ./2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure1-ioriot-io-recording.png Screenshot I/O recording +=> ./realistic-load-testing-with-ioriot-for-linux/figure1-ioriot-io-recording.png 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. @@ -105,7 +105,7 @@ The test will most likely want to access existing files. These are files the tes 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. -=> ./2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure2-ioriot-test-preparation.png Screenshot test preparation +=> ./realistic-load-testing-with-ioriot-for-linux/figure2-ioriot-test-preparation.png 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". @@ -115,7 +115,7 @@ After initialization, you can replay the log with -r. You can use -R to initiate 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. -=> ./2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure3-ioriot-replay.png Screenshot replaying I/O +=> ./realistic-load-testing-with-ioriot-for-linux/figure3-ioriot-replay.png 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: @@ -157,13 +157,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. -=> ./2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure4-ioriot-read-latency.png Graphite visualization of the mean read access times in ms with CFQ and Deadline Scheduler. +=> ./realistic-load-testing-with-ioriot-for-linux/figure4-ioriot-read-latency.png Graphite visualization of the mean read access times in ms with CFQ and Deadline Scheduler. -=> ./2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure5-ioriot-write-latency.png Graphite visualization of the average write access times in ms with CFQ and Deadline Scheduler. +=> ./realistic-load-testing-with-ioriot-for-linux/figure5-ioriot-write-latency.png 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. -=> ./2018-06-01-realistic-load-testing-with-ioriot-for-linux/figure6-iostat.png Output of iostat. The block device sdy seems to be almost fully utilized by 99%. +=> ./realistic-load-testing-with-ioriot-for-linux/figure6-iostat.png 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.gmi b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi index aafd82f3..21e7d316 100644 --- a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi +++ b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi @@ -2,7 +2,7 @@ > Published at 2021-04-22T19:28:41+01:00; Updated at 2021-04-26 -=> ./2021-04-22-dtail-the-distributed-log-tail-program/title.png DTail logo image +=> ./dtail-the-distributed-log-tail-program/title.png DTail logo image This article first appeared at the Mimecast Engineering Blog but I made it available here in my personal internet site too. @@ -30,7 +30,7 @@ Why not just use a full-blown log management system? There are various Open-Sour 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. -=> ./2021-04-22-dtail-the-distributed-log-tail-program/dtail.gif DTail sample session animated gif +=> ./dtail-the-distributed-log-tail-program/dtail.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. @@ -54,7 +54,7 @@ Following the UNIX philosophy, DTail includes multiple command-line commands eac * 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. -=> ./2021-04-22-dtail-the-distributed-log-tail-program/dgrep.gif DGrep sample session animated gif +=> ./dtail-the-distributed-log-tail-program/dgrep.gif DGrep sample session animated gif ## Usage example diff --git a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi.tpl b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi.tpl index bdae8e19..5c955c66 100644 --- a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi.tpl +++ b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi.tpl @@ -2,7 +2,7 @@ > Published at 2021-04-22T19:28:41+01:00; Updated at 2021-04-26 -=> ./2021-04-22-dtail-the-distributed-log-tail-program/title.png DTail logo image +=> ./dtail-the-distributed-log-tail-program/title.png DTail logo image This article first appeared at the Mimecast Engineering Blog but I made it available here in my personal internet site too. @@ -30,7 +30,7 @@ Why not just use a full-blown log management system? There are various Open-Sour 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. -=> ./2021-04-22-dtail-the-distributed-log-tail-program/dtail.gif DTail sample session animated gif +=> ./dtail-the-distributed-log-tail-program/dtail.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. @@ -54,7 +54,7 @@ Following the UNIX philosophy, DTail includes multiple command-line commands eac * 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. -=> ./2021-04-22-dtail-the-distributed-log-tail-program/dgrep.gif DGrep sample session animated gif +=> ./dtail-the-distributed-log-tail-program/dgrep.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.gmi b/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi index 6ceea858..26e56715 100644 --- a/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi +++ b/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi @@ -48,8 +48,8 @@ Around the same time, I discovered a relatively new, more lightweight protocol n 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. -=> ./2021-04-24-welcome-to-the-geminispace/amfora-screenshot.png Screenshot Amfora Gemini terminal client surfing this site -=> ./2021-04-24-welcome-to-the-geminispace/lagrange-screenshot.png Screenshot graphical Lagrange Gemini client surfing this site +=> ./welcome-to-the-geminispace/amfora-screenshot.png Screenshot Amfora Gemini terminal client surfing this site +=> ./welcome-to-the-geminispace/lagrange-screenshot.png 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.gmi.tpl b/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi.tpl index 9b103c48..0a036349 100644 --- a/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi.tpl +++ b/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi.tpl @@ -48,8 +48,8 @@ Around the same time, I discovered a relatively new, more lightweight protocol n 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. -=> ./2021-04-24-welcome-to-the-geminispace/amfora-screenshot.png Screenshot Amfora Gemini terminal client surfing this site -=> ./2021-04-24-welcome-to-the-geminispace/lagrange-screenshot.png Screenshot graphical Lagrange Gemini client surfing this site +=> ./welcome-to-the-geminispace/amfora-screenshot.png Screenshot Amfora Gemini terminal client surfing this site +=> ./welcome-to-the-geminispace/lagrange-screenshot.png 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.gmi b/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.gmi index f8e5fdde..c8e39d48 100644 --- a/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.gmi +++ b/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.gmi @@ -51,7 +51,7 @@ This comes with the benefit that I can write content in my favourite text editor 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. -=> ./2021-06-05-gemtexter-one-bash-script-to-rule-it-all/blog-engine.jpg Motivational comic strip +=> ./gemtexter-one-bash-script-to-rule-it-all/blog-engine.jpg 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.gmi.tpl b/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.gmi.tpl index ad55cc9d..61cd65be 100644 --- a/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.gmi.tpl +++ b/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.gmi.tpl @@ -51,7 +51,7 @@ This comes with the benefit that I can write content in my favourite text editor 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. -=> ./2021-06-05-gemtexter-one-bash-script-to-rule-it-all/blog-engine.jpg Motivational comic strip +=> ./gemtexter-one-bash-script-to-rule-it-all/blog-engine.jpg 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.gmi b/gemfeed/2021-07-04-the-well-grounded-rubyist.gmi index e3357370..55e8b0b1 100644 --- a/gemfeed/2021-07-04-the-well-grounded-rubyist.gmi +++ b/gemfeed/2021-07-04-the-well-grounded-rubyist.gmi @@ -6,11 +6,11 @@ When I was a Linux System Administrator, I have been programming in Perl for yea 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! -=> ./2021-07-04-the-well-grounded-rubyist/book-cover.jpg +=> ./the-well-grounded-rubyist/book-cover.jpg 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. -=> ./2021-07-04-the-well-grounded-rubyist/book-backside.jpg +=> ./the-well-grounded-rubyist/book-backside.jpg 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.gmi b/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi index 90ac0f44..5719847c 100644 --- a/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi +++ b/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi @@ -2,13 +2,13 @@ > Published at 2022-05-27T07:50:12+01:00; Updated at 2023-01-28 -=> ./2022-05-27-perl-is-still-a-great-choice/regular_expressions.png Comic source: XKCD +=> ./perl-is-still-a-great-choice/regular_expressions.png 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: -=> ./2022-05-27-perl-is-still-a-great-choice/googletrendsperl.jpg +=> ./perl-is-still-a-great-choice/googletrendsperl.jpg 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.gmi.tpl b/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi.tpl index 26b5c67c..ea0170e2 100644 --- a/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi.tpl +++ b/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi.tpl @@ -2,13 +2,13 @@ > Published at 2022-05-27T07:50:12+01:00; Updated at 2023-01-28 -=> ./2022-05-27-perl-is-still-a-great-choice/regular_expressions.png Comic source: XKCD +=> ./perl-is-still-a-great-choice/regular_expressions.png 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: -=> ./2022-05-27-perl-is-still-a-great-choice/googletrendsperl.jpg +=> ./perl-is-still-a-great-choice/googletrendsperl.jpg 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.gmi b/gemfeed/2022-06-15-sweating-the-small-stuff.gmi index e270d436..aba7fa93 100644 --- a/gemfeed/2022-06-15-sweating-the-small-stuff.gmi +++ b/gemfeed/2022-06-15-sweating-the-small-stuff.gmi @@ -47,7 +47,7 @@ But now, let's continue with the small projects worth mentioning :-) 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. -=> ./2022-06-15-sweating-the-small-stuff/ninja.jpg +=> ./sweating-the-small-stuff/ninja.jpg 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. @@ -229,7 +229,7 @@ This is a shell script for the Mutt email client for delaying sending out E-Mail `jsmstrade` is a minimalistic graphical Java swing client for sending SMS messages over the SMStrade service. -=> ./2022-06-15-sweating-the-small-stuff/jsmstrade.png +=> ./sweating-the-small-stuff/jsmstrade.png => 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.gmi b/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.gmi index 944940a3..d3b4d94d 100644 --- a/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.gmi +++ b/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.gmi @@ -2,7 +2,7 @@ > Published at 2022-12-24T23:18:40+02:00 -=> ./2022-12-24-ultrarelearning-java-my-takeaways/learnjava.jpg +=> ./ultrarelearning-java-my-takeaways/learnjava.jpg 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: @@ -26,7 +26,7 @@ Over time, I had been missing out on many new features that were added to the la 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! -=> ./2022-12-24-ultrarelearning-java-my-takeaways/effective-java.jpg +=> ./ultrarelearning-java-my-takeaways/effective-java.jpg 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.gmi b/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi index bba6886c..cec0f470 100644 --- a/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi +++ b/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi @@ -2,7 +2,7 @@ > Published at 2023-06-01T21:10:17+03:00 -=> ./2023-06-01-kiss-server-monitoring-with-gogios/gogios-small.png Gogios logo +=> ./kiss-server-monitoring-with-gogios/gogios-small.png Gogios logo ## Introduction diff --git a/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi.tpl b/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi.tpl index d49e9f1c..ec42c787 100644 --- a/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi.tpl +++ b/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.gmi.tpl @@ -2,7 +2,7 @@ > Published at 2023-06-01T21:10:17+03:00 -=> ./2023-06-01-kiss-server-monitoring-with-gogios/gogios-small.png Gogios logo +=> ./kiss-server-monitoring-with-gogios/gogios-small.png 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.gmi b/gemfeed/2023-12-10-bash-golf-part-3.gmi index 576b6735..d480ae80 100644 --- a/gemfeed/2023-12-10-bash-golf-part-3.gmi +++ b/gemfeed/2023-12-10-bash-golf-part-3.gmi @@ -73,7 +73,7 @@ So, it's a fork bomb. If you run it, your computer will run out of resources eve And here is the cute illustration: -=> ./2023-12-10-bash-golf-part-3/bash-fork-bomb.jpg Bash fork bomb +=> ./bash-golf-part-3/bash-fork-bomb.jpg Bash fork bomb ## Inner functions diff --git a/gemfeed/2023-12-10-bash-golf-part-3.gmi.tpl b/gemfeed/2023-12-10-bash-golf-part-3.gmi.tpl index d8bd95d6..45ae457e 100644 --- a/gemfeed/2023-12-10-bash-golf-part-3.gmi.tpl +++ b/gemfeed/2023-12-10-bash-golf-part-3.gmi.tpl @@ -71,7 +71,7 @@ So, it's a fork bomb. If you run it, your computer will run out of resources eve And here is the cute illustration: -=> ./2023-12-10-bash-golf-part-3/bash-fork-bomb.jpg Bash fork bomb +=> ./bash-golf-part-3/bash-fork-bomb.jpg 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.gmi b/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.gmi index bd6afec0..833c5b35 100644 --- a/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.gmi +++ b/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.gmi @@ -6,7 +6,7 @@ I am an ideas person. I find myself frequently somewhere on the streets with an 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. -=> 2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/logo-small.png Quick logger Logo +=> a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/logo-small.png 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! @@ -26,7 +26,7 @@ Quick logger's user interface is as minimal as it gets. When I launch Quick logg 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. -=> 2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/screenshot-android.png Quick logger running on Android +=> a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/screenshot-android.png 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.gmi.tpl b/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.gmi.tpl index db04fea9..c5f106af 100644 --- a/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.gmi.tpl +++ b/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.gmi.tpl @@ -6,7 +6,7 @@ I am an ideas person. I find myself frequently somewhere on the streets with an 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. -=> 2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/logo-small.png Quick logger Logo +=> a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/logo-small.png 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! @@ -26,7 +26,7 @@ Quick logger's user interface is as minimal as it gets. When I launch Quick logg 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. -=> 2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/screenshot-android.png Quick logger running on Android +=> a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/screenshot-android.png 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 b415e81e..10b2ab26 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