diff options
63 files changed, 746 insertions, 518 deletions
diff --git a/gemfeed/2008-06-26-perl-poetry.md b/gemfeed/2008-06-26-perl-poetry.md index 0de1bdaf..e64cd0f4 100644 --- a/gemfeed/2008-06-26-perl-poetry.md +++ b/gemfeed/2008-06-26-perl-poetry.md @@ -2,6 +2,12 @@ > Published at 2008-06-26T21:43:51+01:00; Updated at 2021-05-04 +Here are some Perl Poems I wrote. They don't do anything useful when you run them, but they don't produce a compiler error either. They only exist for fun and demonstrate what you can do with Perl syntax. + +Wikipedia: "Perl poetry is the practice of writing poems that can be compiled as legal Perl code, for example the piece known as Black Perl. Perl poetry is made possible by the large number of English words that are used in the Perl language. New poems are regularly submitted to the community at PerlMonks." + +[https://en.wikipedia.org/wiki/Perl](https://en.wikipedia.org/wiki/Perl) + ``` '\|/' * -- * ----- @@ -28,20 +34,11 @@ _~~|~/_|_|__/|~~~~~~~ | / ~~~~~ | | ~~~~~~~~ ## Table of Contents * [⇢ Perl Poetry](#perl-poetry) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ math.pl](#mathpl) * [⇢ ⇢ christmas.pl](#christmaspl) * [⇢ ⇢ shopping.pl](#shoppingpl) * [⇢ ⇢ More...](#more) -## Introduction - -Here are some Perl Poems I wrote. They don't do anything useful when you run them, but they don't produce a compiler error either. They only exist for fun and demonstrate what you can do with Perl syntax. - -Wikipedia: "Perl poetry is the practice of writing poems that can be compiled as legal Perl code, for example the piece known as Black Perl. Perl poetry is made possible by the large number of English words that are used in the Perl language. New poems are regularly submitted to the community at PerlMonks." - -[https://en.wikipedia.org/wiki/Perl](https://en.wikipedia.org/wiki/Perl) - ## math.pl ```perl diff --git a/gemfeed/2010-04-09-standard-ml-and-haskell.md b/gemfeed/2010-04-09-standard-ml-and-haskell.md index daad07b5..cdf4c5d5 100644 --- a/gemfeed/2010-04-09-standard-ml-and-haskell.md +++ b/gemfeed/2010-04-09-standard-ml-and-haskell.md @@ -8,6 +8,16 @@ As you will see, SML and Haskell are very similar (at least when it comes to the Haskell is also a "pure functional" programming language, whereas SML also makes explicit use of imperative concepts. I am by far not a specialist in either of these languages, but here are a few functions implemented in both SML and Haskell: +## Table of Contents + +* [⇢ Standard ML and Haskell](#standard-ml-and-haskell) +* [⇢ ⇢ Defining a multi-data type](#defining-a-multi-data-type) +* [⇢ ⇢ Processing a multi](#processing-a-multi) +* [⇢ ⇢ Simplify function](#simplify-function) +* [⇢ ⇢ Delete all](#delete-all) +* [⇢ ⇢ Delete one](#delete-one) +* [⇢ ⇢ Higher-order functions](#higher-order-functions) + ## Defining a multi-data type Standard ML: diff --git a/gemfeed/2010-05-09-the-fype-programming-language.md b/gemfeed/2010-05-09-the-fype-programming-language.md index c7f8850d..3885a031 100644 --- a/gemfeed/2010-05-09-the-fype-programming-language.md +++ b/gemfeed/2010-05-09-the-fype-programming-language.md @@ -2,6 +2,12 @@ > Published at 2010-05-09T12:48:29+01:00; Updated at 2021-05-05 +Fype is an interpreted programming language created by me for learning and fun. The interpreter is written in C. It has been tested on FreeBSD and NetBSD and may also work on other Unix like operating systems such as Linux based ones. Besides learning and fun, there is no other use case of why Fype exists as many other programming languages are much faster and more powerful. + +The Fype syntax is straightforward and uses a maximum look ahead of 1 and an effortless top-down parsing mechanism. Fype is parsing and interpreting its code simultaneously. This means that syntax errors are only detected during program runtime. + +Fype is a recursive acronym and means "Fype is For Your Program Execution" or "Fype is Free Yak Programmed for ELF". You could also say, "It's not a hype - it's Fype!". + ``` ____ _ __ / / _|_ _ _ __ ___ _ _ ___ __ _| |__ / _|_ _ @@ -11,11 +17,33 @@ |___/|_| |___/ |___/ ``` -Fype is an interpreted programming language created by me for learning and fun. The interpreter is written in C. It has been tested on FreeBSD and NetBSD and may also work on other Unix like operating systems such as Linux based ones. Besides learning and fun, there is no other use case of why Fype exists as many other programming languages are much faster and more powerful. - -The Fype syntax is straightforward and uses a maximum look ahead of 1 and an effortless top-down parsing mechanism. Fype is parsing and interpreting its code simultaneously. This means that syntax errors are only detected during program runtime. - -Fype is a recursive acronym and means "Fype is For Your Program Execution" or "Fype is Free Yak Programmed for ELF". You could also say, "It's not a hype - it's Fype!". +## Table of Contents + +* [⇢ The Fype Programming Language](#the-fype-programming-language) +* [⇢ ⇢ Object-oriented C style](#object-oriented-c-style) +* [⇢ ⇢ Data types](#data-types) +* [⇢ ⇢ Syntax](#syntax) +* [⇢ ⇢ ⇢ Comments](#comments) +* [⇢ ⇢ ⇢ Variables](#variables) +* [⇢ ⇢ ⇢ Synonyms](#synonyms) +* [⇢ ⇢ Statements and expressions](#statements-and-expressions) +* [⇢ ⇢ ⇢ Parenthesis](#parenthesis) +* [⇢ ⇢ ⇢ Basic expressions](#basic-expressions) +* [⇢ ⇢ ⇢ Bitwise expressions](#bitwise-expressions) +* [⇢ ⇢ ⇢ Numeric expressions](#numeric-expressions) +* [⇢ ⇢ Control statements](#control-statements) +* [⇢ ⇢ Scopes](#scopes) +* [⇢ ⇢ Definedness ](#definedness-) +* [⇢ ⇢ System ](#system-) +* [⇢ ⇢ ⇢ I/O ](#io-) +* [⇢ ⇢ Procedures and functions](#procedures-and-functions) +* [⇢ ⇢ ⇢ Procedures](#procedures) +* [⇢ ⇢ ⇢ Nested procedures](#nested-procedures) +* [⇢ ⇢ ⇢ Functions](#functions) +* [⇢ ⇢ ⇢ Nested functions](#nested-functions) +* [⇢ ⇢ Arrays](#arrays) +* [⇢ ⇢ Fancy stuff](#fancy-stuff) +* [⇢ ⇢ May the source be with you](#may-the-source-be-with-you) ## Object-oriented C style diff --git a/gemfeed/2011-05-07-perl-daemon-service-framework.md b/gemfeed/2011-05-07-perl-daemon-service-framework.md index e393a1ea..7364826f 100644 --- a/gemfeed/2011-05-07-perl-daemon-service-framework.md +++ b/gemfeed/2011-05-07-perl-daemon-service-framework.md @@ -2,6 +2,8 @@ > Published at 2011-05-07T22:26:02+01:00; Updated at 2021-05-07 +PerlDaemon is a minimal daemon for Linux and other Unix like operating systems programmed in Perl. It is a minimal but pretty functional and fairly generic service framework. This means that it does not do anything useful other than providing a framework for starting, stopping, configuring and logging. To do something useful, a module (written in Perl) must be provided. + ``` a'! _,,_ a'! _,,_ a'! _,,_ \\_/ \ \\_/ \ \\_/ \.-, @@ -12,7 +14,6 @@ ## Table of Contents * [⇢ Perl Daemon (Service Framework)](#perl-daemon-service-framework) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ Features](#features) * [⇢ ⇢ Quick Guide](#quick-guide) * [⇢ ⇢ How to configure](#how-to-configure) @@ -23,10 +24,6 @@ * [⇢ ⇢ ⇢ Your own module](#your-own-module) * [⇢ ⇢ May the source be with you](#may-the-source-be-with-you) -## Introduction - -PerlDaemon is a minimal daemon for Linux and other Unix like operating systems programmed in Perl. It is a minimal but pretty functional and fairly generic service framework. This means that it does not do anything useful other than providing a framework for starting, stopping, configuring and logging. To do something useful, a module (written in Perl) must be provided. - ## Features PerlDaemon supports: diff --git a/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.md b/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.md index fd54242c..f0c1af25 100644 --- a/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.md +++ b/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.md @@ -2,6 +2,12 @@ > Published at 2015-12-05T16:12:57+00:00; Updated at 2021-05-16 +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). + +[](./run-debian-on-your-phone-with-debroid/Deboroid.png) + +A couple of years have passed since I last worked on Debroid. Currently, I am using the Termux app on Android, which is less sophisticated than a fully blown Debian installation but sufficient for my current requirements. The content of this site may be still relevant, and it would also work with more recent versions of Debian and Android. I would expect that some minor modifications need to be made, though. + ``` ____ _ _ _ | _ \ ___| |__ _ __ ___ (_) __| | @@ -11,13 +17,16 @@ ``` -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). - -[](./run-debian-on-your-phone-with-debroid/Deboroid.png) +## Table of Contents -## Foreword - -A couple of years have passed since I last worked on Debroid. Currently, I am using the Termux app on Android, which is less sophisticated than a fully blown Debian installation but sufficient for my current requirements. The content of this site may be still relevant, and it would also work with more recent versions of Debian and Android. I would expect that some minor modifications need to be made, though. +* [⇢ Run Debian on your phone with Debroid](#run-debian-on-your-phone-with-debroid) +* [⇢ ⇢ Step by step guide](#step-by-step-guide) +* [⇢ ⇢ ⇢ First debootstrap stage](#first-debootstrap-stage) +* [⇢ ⇢ ⇢ Copy Debian image to the phone](#copy-debian-image-to-the-phone) +* [⇢ ⇢ ⇢ Second debootstrap stage](#second-debootstrap-stage) +* [⇢ ⇢ ⇢ Setup of various scripts](#setup-of-various-scripts) +* [⇢ ⇢ ⇢ Entering Debroid and enable a service](#entering-debroid-and-enable-a-service) +* [⇢ ⇢ ⇢ Include to Android startup:](#include-to-android-startup) ## Step by step guide diff --git a/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.md b/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.md index 3879df57..60df5a1b 100644 --- a/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.md +++ b/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.md @@ -2,6 +2,8 @@ > Published at 2016-04-09T18:29:47+01:00 +Over the last couple of years I wrote quite a few Puppet modules in order to manage my personal server infrastructure. One of them manages FreeBSD Jails and another one ZFS file systems. I thought I would give a brief overview in how it looks and feels. + ``` __ __ (( \---/ )) @@ -25,16 +27,11 @@ ## Table of Contents * [⇢ Jails and ZFS with Puppet on FreeBSD](#jails-and-zfs-with-puppet-on-freebsd) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ ZFS](#zfs) * [⇢ ⇢ Jails](#jails) * [⇢ ⇢ Inside-Jail Puppet](#inside-jail-puppet) * [⇢ ⇢ Managing multiple Jails](#managing-multiple-jails) -## Introduction - -Over the last couple of years I wrote quite a few Puppet modules in order to manage my personal server infrastructure. One of them manages FreeBSD Jails and another one ZFS file systems. I thought I would give a brief overview in how it looks and feels. - ## ZFS The ZFS module is a pretty basic one. It does not manage ZFS pools yet as I am not creating them often enough which would justify implementing an automation. But let's see how we can create a ZFS file system (on an already given ZFS pool named ztank): diff --git a/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.md b/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.md index b320bbab..23a30ce2 100644 --- a/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.md +++ b/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.md @@ -2,12 +2,20 @@ > Published at 2016-05-22T18:59:01+01:00 -## Background - Finally, I had time to deploy my authoritative DNS servers (master and slave) for my domains "buetow.org" and "buetow.zone". My domain name provider is Schlund Technologies. They allow their customers to edit the DNS records (BIND files) manually. And they also allow you to set your authoritative DNS servers for your domains. From now, I am making use of that option. [Schlund Technologies](http://www.schlundtech.de) +## Table of Contents + +* [⇢ Spinning up my own authoritative DNS servers](#spinning-up-my-own-authoritative-dns-servers) +* [⇢ ⇢ All FreeBSD Jails](#all-freebsd-jails) +* [⇢ ⇢ PF firewall](#pf-firewall) +* [⇢ ⇢ Puppet managed BIND zone files](#puppet-managed-bind-zone-files) +* [⇢ ⇢ The result](#the-result) +* [⇢ ⇢ Monitoring](#monitoring) +* [⇢ ⇢ DNS update workflow](#dns-update-workflow) + ## All FreeBSD Jails To set up my authoritative DNS servers, I installed a FreeBSD Jail dedicated for DNS with Puppet on my root machine as follows: diff --git a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.md b/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.md index 3c876f60..04846fdb 100644 --- a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.md +++ b/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.md @@ -2,6 +2,16 @@ > Published at 2018-06-01T14:50:29+01:00; Updated at 2021-05-08 +This text first was published in the german IT-Administrator computer Magazine. 3 years have passed since and I decided to publish it on my blog too. + +[https://www.admin-magazin.de/Das-Heft/2018/06/Realistische-Lasttests-mit-I-O-Riot](https://www.admin-magazin.de/Das-Heft/2018/06/Realistische-Lasttests-mit-I-O-Riot) + +I havn't worked on I/O Riot for some time now, but all what is written here is still valid. I am still using I/O Riot to debug I/O issues and pattern once in a while, so by all means the tool is not obsolete yet. The tool even helped to resolve a major production incident at work caused by disk I/O. + +I am eagerly looking forward to revamp I/O Riot so that it uses the new BPF Linux capabilities instead of plain old Systemtap (or alternatively: Newer versions of Systemtap can also use BPF as the backend I have learned). Also, when I wrote I/O Riot initially, I didn't have any experience with the Go programming language yet and therefore I wrote it in C. Once it gets revamped I might consider using Go instead of C as it would spare me from many segmentation faults and headaches during development ;-). I might also just stick to C for plain performance reasons and just refactor the code dealing with concurrency. + +Pleace notice that some of the screenshots show the command "ioreplay" instead of "ioriot". That's because the name has changed after taking those. + ``` .---. / \ @@ -13,17 +23,21 @@ jgs\__/'---'\__/ ``` -## Foreword - -This text first was published in the german IT-Administrator computer Magazine. 3 years have passed since and I decided to publish it on my blog too. - -[https://www.admin-magazin.de/Das-Heft/2018/06/Realistische-Lasttests-mit-I-O-Riot](https://www.admin-magazin.de/Das-Heft/2018/06/Realistische-Lasttests-mit-I-O-Riot) - -I havn't worked on I/O Riot for some time now, but all what is written here is still valid. I am still using I/O Riot to debug I/O issues and pattern once in a while, so by all means the tool is not obsolete yet. The tool even helped to resolve a major production incident at work caused by disk I/O. - -I am eagerly looking forward to revamp I/O Riot so that it uses the new BPF Linux capabilities instead of plain old Systemtap (or alternatively: Newer versions of Systemtap can also use BPF as the backend I have learned). Also, when I wrote I/O Riot initially, I didn't have any experience with the Go programming language yet and therefore I wrote it in C. Once it gets revamped I might consider using Go instead of C as it would spare me from many segmentation faults and headaches during development ;-). I might also just stick to C for plain performance reasons and just refactor the code dealing with concurrency. - -Pleace notice that some of the screenshots show the command "ioreplay" instead of "ioriot". That's because the name has changed after taking those. +## Table of Contents + +* [⇢ Realistic load testing with I/O Riot for Linux](#realistic-load-testing-with-io-riot-for-linux) +* [⇢ The article](#the-article) +* [⇢ ⇢ Background: Existing Techniques](#background-existing-techniques) +* [⇢ ⇢ Benchmarking the Email Cloud at Mimecast](#benchmarking-the-email-cloud-at-mimecast) +* [⇢ ⇢ Using I/O Riot](#using-io-riot) +* [⇢ ⇢ ⇢ Installation](#installation) +* [⇢ ⇢ ⇢ Recording of I/O events](#recording-of-io-events) +* [⇢ ⇢ ⇢ Test preparation](#test-preparation) +* [⇢ ⇢ ⇢ Test Initialization](#test-initialization) +* [⇢ ⇢ ⇢ Replay](#replay) +* [⇢ ⇢ I/O Riot is Open Source](#io-riot-is-open-source) +* [⇢ ⇢ Systemtap](#systemtap) +* [⇢ ⇢ More refereces](#more-refereces) # The article diff --git a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.md b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.md index b0a2bf0f..0caa64b0 100644 --- a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.md +++ b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.md @@ -2,12 +2,23 @@ > Published at 2021-04-22T19:28:41+01:00; Updated at 2021-04-26 +This article first appeared at the Mimecast Engineering Blog but I made it available here in my personal internet site too. + +[Original Mimecast Engineering Blog post at Medium](https://medium.com/mimecast-engineering/dtail-the-distributed-log-tail-program-79b8087904bb) + +Running a large cloud-based service requires monitoring the state of huge numbers of machines, a task for which many standard UNIX tools were not really designed. In this post, I will describe a simple program, DTail, that Mimecast has built and released as Open-Source, which enables us to monitor log files of many servers at once without the costly overhead of a full-blown log management system. + +At Mimecast, we run over 10 thousand server boxes. Most of them host multiple microservices and each of them produces log files. Even with the use of time series databases and monitoring systems, raw application logs are still an important source of information when it comes to analysing, debugging, and troubleshooting services. + +Every engineer familiar with UNIX or a UNIX-like platform (e.g., Linux) is well aware of tail, a command-line program for displaying a text file content on the terminal which is also especially useful for following application or system log files with tail -f logfile. + +Think of DTail as a distributed version of the tail program which is very useful when you have a distributed application running on many servers. DTail is an Open-Source, cross-platform, fairly easy to use, support and maintain log file analysis & statistics gathering tool designed for Engineers and Systems Administrators. It is programmed in Google Go. + [](./dtail-the-distributed-log-tail-program/title.png) ## Table of Contents * [⇢ DTail - The distributed log tail program](#dtail---the-distributed-log-tail-program) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ A Mimecast Pet Project](#a-mimecast-pet-project) * [⇢ ⇢ Differentiating from log management systems](#differentiating-from-log-management-systems) * [⇢ ⇢ Combining simplicity, security and efficiency](#combining-simplicity-security-and-efficiency) @@ -18,20 +29,6 @@ * [⇢ ⇢ For the future](#for-the-future) * [⇢ ⇢ Open Source](#open-source) -## Introduction - -This article first appeared at the Mimecast Engineering Blog but I made it available here in my personal internet site too. - -[Original Mimecast Engineering Blog post at Medium](https://medium.com/mimecast-engineering/dtail-the-distributed-log-tail-program-79b8087904bb) - -Running a large cloud-based service requires monitoring the state of huge numbers of machines, a task for which many standard UNIX tools were not really designed. In this post, I will describe a simple program, DTail, that Mimecast has built and released as Open-Source, which enables us to monitor log files of many servers at once without the costly overhead of a full-blown log management system. - -At Mimecast, we run over 10 thousand server boxes. Most of them host multiple microservices and each of them produces log files. Even with the use of time series databases and monitoring systems, raw application logs are still an important source of information when it comes to analysing, debugging, and troubleshooting services. - -Every engineer familiar with UNIX or a UNIX-like platform (e.g., Linux) is well aware of tail, a command-line program for displaying a text file content on the terminal which is also especially useful for following application or system log files with tail -f logfile. - -Think of DTail as a distributed version of the tail program which is very useful when you have a distributed application running on many servers. DTail is an Open-Source, cross-platform, fairly easy to use, support and maintain log file analysis & statistics gathering tool designed for Engineers and Systems Administrators. It is programmed in Google Go. - ## A Mimecast Pet Project DTail got its inspiration from public domain tools available already in this area but it is a blue sky from-scratch development which was first presented at Mimecast’s annual internal Pet Project competition (awarded with a Bronze prize). It has gained popularity since and is one of the most widely deployed DevOps tools at Mimecast (reaching nearly 10k server installations) and many engineers use it on a regular basis. The Open-Source version of DTail is available at: diff --git a/gemfeed/2021-05-16-personal-bash-coding-style-guide.md b/gemfeed/2021-05-16-personal-bash-coding-style-guide.md index 87f8ccb0..d2c0f050 100644 --- a/gemfeed/2021-05-16-personal-bash-coding-style-guide.md +++ b/gemfeed/2021-05-16-personal-bash-coding-style-guide.md @@ -2,6 +2,10 @@ > Published at 2021-05-16T14:51:57+01:00 +Lately, I have been polishing and writing a lot of Bash code. Not that I never wrote a lot of Bash, but now as I also looked through the Google Shell Style Guide, I thought it is time also to write my thoughts on that. I agree with that guide in most, but not in all points. + +[Google Shell Style Guide](https://google.github.io/styleguide/shellguide.html) + ``` .---------------------------. /,--..---..---..---..---..--. `. @@ -18,7 +22,6 @@ ## Table of Contents * [⇢ Personal Bash coding style guide](#personal-bash-coding-style-guide) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ My modifications](#my-modifications) * [⇢ ⇢ ⇢ Shebang](#shebang) * [⇢ ⇢ ⇢ Two space soft-tabs indentation](#two-space-soft-tabs-indentation) @@ -37,12 +40,6 @@ * [⇢ ⇢ Use common sense and BE CONSISTENT.](#use-common-sense-and-be-consistent) * [⇢ ⇢ Advanced Bash learning pro tip](#advanced-bash-learning-pro-tip) -## Introduction - -Lately, I have been polishing and writing a lot of Bash code. Not that I never wrote a lot of Bash, but now as I also looked through the Google Shell Style Guide, I thought it is time also to write my thoughts on that. I agree with that guide in most, but not in all points. - -[Google Shell Style Guide](https://google.github.io/styleguide/shellguide.html) - ## My modifications These are my modifications to the Google Guide. diff --git a/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.md b/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.md index 580aceab..f71fb3d0 100644 --- a/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.md +++ b/gemfeed/2021-06-05-gemtexter-one-bash-script-to-rule-it-all.md @@ -2,6 +2,10 @@ > Published at 2021-06-05T19:03:32+01:00 +You might have read my previous blog posts about entering the Geminispace, where I pointed out the benefits of having and maintaining an internet presence there. This whole site (the blog and all other pages) is composed in the Gemtext markup language. + +This comes with the benefit that I can write content in my favourite text editor (Vim). + ``` o .,<>., o |\/\/\/\/| @@ -46,8 +50,7 @@ ## Table of Contents * [⇢ Gemtexter - One Bash script to rule it all](#gemtexter---one-bash-script-to-rule-it-all) -* [⇢ ⇢ Introduction](#introduction) -* [⇢ ⇢ ⇢ Motivation](#motivation) +* [⇢ ⇢ Motivation](#motivation) * [⇢ ⇢ Output formats](#output-formats) * [⇢ ⇢ Taking it as far as I should, but no farther](#taking-it-as-far-as-i-should-but-no-farther) * [⇢ ⇢ ⇢ Modularization ](#modularization-) @@ -60,13 +63,7 @@ * [⇢ ⇢ Future features](#future-features) * [⇢ ⇢ Conclusion](#conclusion) -## Introduction - -You might have read my previous blog posts about entering the Geminispace, where I pointed out the benefits of having and maintaining an internet presence there. This whole site (the blog and all other pages) is composed in the Gemtext markup language. - -This comes with the benefit that I can write content in my favourite text editor (Vim). - -### Motivation +## Motivation Another benefit of using Gemini is that the Gemtext markup language is easy to parse. As my site is dual-hosted (Gemini+HTTP), I could, in theory, just write a shell script to deal with the conversion from Gemtext to HTML; there is no need for a full-featured programming language here. I have done a lot of Bash in the past, but I am also often revisiting old tools and techniques for refreshing and keeping the knowledge up to date here. diff --git a/gemfeed/2021-07-04-the-well-grounded-rubyist.md b/gemfeed/2021-07-04-the-well-grounded-rubyist.md index 0e2b2def..07d40f0a 100644 --- a/gemfeed/2021-07-04-the-well-grounded-rubyist.md +++ b/gemfeed/2021-07-04-the-well-grounded-rubyist.md @@ -14,6 +14,20 @@ Superficially, Perl seems to have many similarities to Ruby (but, of course, it 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. +## Table of Contents + +* [⇢ The Well-Grounded Rubyist](#the-well-grounded-rubyist) +* [⇢ ⇢ My Ruby problem domain](#my-ruby-problem-domain) +* [⇢ ⇢ Being stuck in Ruby-mediocrity](#being-stuck-in-ruby-mediocrity) +* [⇢ ⇢ O'Reilly Safari Books Online](#o-reilly-safari-books-online) +* [⇢ ⇢ Key takeaways](#key-takeaways) +* [⇢ ⇢ ⇢ "Everything" is an object](#everything-is-an-object) +* [⇢ ⇢ ⇢ "Normal" objects and singleton objects](#normal-objects-and-singleton-objects) +* [⇢ ⇢ ⇢ Domain specific languages](#domain-specific-languages) +* [⇢ ⇢ ⇢ Ruby is "self-ish"](#ruby-is-self-ish) +* [⇢ ⇢ ⇢ Functional programming](#functional-programming) +* [⇢ ⇢ Perl](#perl) + ## My Ruby problem domain I wrote a lot of Ruby code over the last couple of years. There were many small to medium-sized tools and other projects such as Nagios monitoring checks, even an internal monitoring & reporting site based on Sinatra. All Ruby scripts I wrote do their work well; I didn't encounter any significant problems using Ruby for any of these tasks. Of course, there's nothing that couldn't be written in Perl (or Python), though, after all, these languages are all Turing-complete and all these languages also come with a huge set of 3rd party libraries :-). diff --git a/gemfeed/2021-08-01-on-being-pedantic-about-open-source.md b/gemfeed/2021-08-01-on-being-pedantic-about-open-source.md index a57e01aa..7fea060c 100644 --- a/gemfeed/2021-08-01-on-being-pedantic-about-open-source.md +++ b/gemfeed/2021-08-01-on-being-pedantic-about-open-source.md @@ -2,6 +2,8 @@ > Published at 2021-08-01T10:37:58+03:00; Updated at 2023-01-23 +I believe that it is essential to always have free and open-source alternatives to any kind of closed-source proprietary software available to choose from. But there are a couple of points you need to take into consideration. + ``` __ _____....--' .' @@ -14,7 +16,23 @@ '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^' LGB - Art by lgbearrd ``` -I believe that it is essential to always have free and open-source alternatives to any kind of closed-source proprietary software available to choose from. But there are a couple of points you need to take into consideration. +## Table of Contents + +* [⇢ On being Pedantic about Open-Source](#on-being-pedantic-about-open-source) +* [⇢ ⇢ The costs of open-source](#the-costs-of-open-source) +* [⇢ ⇢ Commercial providers](#commercial-providers) +* [⇢ ⇢ Earning on open-source](#earning-on-open-source) +* [⇢ ⇢ Open-source organizations and individual contributors](#open-source-organizations-and-individual-contributors) +* [⇢ ⇢ Lesser known projects and the charm of clunkiness](#lesser-known-projects-and-the-charm-of-clunkiness) +* [⇢ ⇢ The security aspect](#the-security-aspect) +* [⇢ ⇢ Always watch out for open-source alternatives](#always-watch-out-for-open-source-alternatives) +* [⇢ ⇢ What about mobile?](#what-about-mobile) +* [⇢ ⇢ Know the alternatives](#know-the-alternatives) +* [⇢ ⇢ You can't control it all](#you-can-t-control-it-all) +* [⇢ ⇢ The middle way](#the-middle-way) +* [⇢ ⇢ The downside of being a nobody](#the-downside-of-being-a-nobody) +* [⇢ ⇢ Mobile open-source OSes are still evolving](#mobile-open-source-oses-are-still-evolving) +* [⇢ ⇢ Conclusion](#conclusion) ## The costs of open-source diff --git a/gemfeed/2021-09-12-keep-it-simple-and-stupid.md b/gemfeed/2021-09-12-keep-it-simple-and-stupid.md index 35215a19..a8617c16 100644 --- a/gemfeed/2021-09-12-keep-it-simple-and-stupid.md +++ b/gemfeed/2021-09-12-keep-it-simple-and-stupid.md @@ -2,6 +2,8 @@ > Published at 2021-09-12T09:39:20+03:00; Updated at 2023-03-23 +A robust computer system must be kept simple and stupid (KISS). The fancier the system is, the more can break. Unfortunately, most systems tend to become complex and challenging to maintain in today's world. In the early days, so I was told, engineers understood every part of the system, but nowadays, we see more of the "lasagna" stack. One layer or framework is built on top of another layer, and in the end, nobody has got a clue what's going on. + ``` _______________ |*\_/*|_______ | ___________ | .-. .-. ||_/-\_|______ | @@ -20,7 +22,6 @@ ## Table of Contents * [⇢ Keep it simple and stupid](#keep-it-simple-and-stupid) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ Need faster hardware](#need-faster-hardware) * [⇢ ⇢ Too complex to be replaced](#too-complex-to-be-replaced) * [⇢ ⇢ ⇢ On COBOL](#on-cobol) @@ -35,10 +36,6 @@ * [⇢ ⇢ When KISS is not KISS anymore](#when-kiss-is-not-kiss-anymore) * [⇢ ⇢ Other relevant readings](#other-relevant-readings) -## Introduction - -A robust computer system must be kept simple and stupid (KISS). The fancier the system is, the more can break. Unfortunately, most systems tend to become complex and challenging to maintain in today's world. In the early days, so I was told, engineers understood every part of the system, but nowadays, we see more of the "lasagna" stack. One layer or framework is built on top of another layer, and in the end, nobody has got a clue what's going on. - ## Need faster hardware This not just makes the system much more complex, difficult to maintain and challenging to troubleshoot, but also slow. So more experts are needed to support it. Also, newer and faster hardware is required to make it run smoothly. Often, it's so much easier to buy speedier hardware than rewrite a whole system from scratch from the bottom-up. The latter would require much more resources in the short run, but in the long run, it should pay off. Unfortunately, many project owners scare away from it as they only want to get their project done and then move on. diff --git a/gemfeed/2021-10-22-defensive-devops.md b/gemfeed/2021-10-22-defensive-devops.md index d46311ff..2fa5849a 100644 --- a/gemfeed/2021-10-22-defensive-devops.md +++ b/gemfeed/2021-10-22-defensive-devops.md @@ -2,6 +2,16 @@ > Published at 2021-10-22T10:02:46+03:00 +I have seen many different setups and infrastructures during my carreer. My roles always included front-line ad-hoc fire fighting production issues. This often involves identifying and fixing these under time pressure, without the comfort of 2-week-long SCRUM sprints and without an exhaustive QA process. I also wrote a lot of code (Bash, Ruby, Perl, Go, and a little Java), and I followed the typical software development process, but that did not always apply to critical production issues. + +Unfortunately, no system is 100% reliable, and you can never be prepared for a subset of the possible problem-space. IT infrastructures can be complex. Not even mentioning Kubernetes yet, a Microservice-based infrastructure can complicate things even further. You can take care of 99% of all potential problems by following all DevOps best practices. Those best practices are not the subject of this blog post; this post is about the sub 1% of the issues arising from nowhere you can't be prepared for. + +Is there a software bug in a production, even though the software passed QA (after all, it is challenging to reproduce production behaviour in an artificial testing environment) and the software didn't show any issues running in production until a special case came up just now after it got deployed to production a week ago? Are there multiple hardware failure happening which causes loss of service redundancy or data inaccessibility? Is the automation of external customers connected to our infrastructure putting unexpectedly extra pressure on your grid, driving higher latencies and putting the SLAs at risk? You bet the solution is: Sysadmins, SREs and DevOps Engineers to the rescue. + +You agree that fixing production issues this way is not proactive but rather reactive. I prefer to call it defensive, though, as you "defend" your system against a production issue. But, at the same time, you have to take a cautious (defensive) approach to fix it, as you don't want to make things worse. + +Over time, I have compiled a list of fire-fighting automation strategies, which I would like to share here. + ``` c=====e H @@ -12,15 +22,17 @@ ASCII Art by Clyde Watson ``` -I have seen many different setups and infrastructures during my carreer. My roles always included front-line ad-hoc fire fighting production issues. This often involves identifying and fixing these under time pressure, without the comfort of 2-week-long SCRUM sprints and without an exhaustive QA process. I also wrote a lot of code (Bash, Ruby, Perl, Go, and a little Java), and I followed the typical software development process, but that did not always apply to critical production issues. - -Unfortunately, no system is 100% reliable, and you can never be prepared for a subset of the possible problem-space. IT infrastructures can be complex. Not even mentioning Kubernetes yet, a Microservice-based infrastructure can complicate things even further. You can take care of 99% of all potential problems by following all DevOps best practices. Those best practices are not the subject of this blog post; this post is about the sub 1% of the issues arising from nowhere you can't be prepared for. - -Is there a software bug in a production, even though the software passed QA (after all, it is challenging to reproduce production behaviour in an artificial testing environment) and the software didn't show any issues running in production until a special case came up just now after it got deployed to production a week ago? Are there multiple hardware failure happening which causes loss of service redundancy or data inaccessibility? Is the automation of external customers connected to our infrastructure putting unexpectedly extra pressure on your grid, driving higher latencies and putting the SLAs at risk? You bet the solution is: Sysadmins, SREs and DevOps Engineers to the rescue. - -You agree that fixing production issues this way is not proactive but rather reactive. I prefer to call it defensive, though, as you "defend" your system against a production issue. But, at the same time, you have to take a cautious (defensive) approach to fix it, as you don't want to make things worse. - -Over time, I have compiled a list of fire-fighting automation strategies, which I would like to share here. +## Table of Contents + +* [⇢ Defensive DevOps](#defensive-devops) +* [⇢ ⇢ Meet Defensive DevOps](#meet-defensive-devops) +* [⇢ ⇢ Don't fully automate from the beginning](#don-t-fully-automate-from-the-beginning) +* [⇢ ⇢ Develop code directly on production systems](#develop-code-directly-on-production-systems) +* [⇢ ⇢ ⇢ Don't make it worse](#don-t-make-it-worse) +* [⇢ ⇢ Test your code](#test-your-code) +* [⇢ ⇢ Automation](#automation) +* [⇢ ⇢ Out of office hours](#out-of-office-hours) +* [⇢ ⇢ Retrospective](#retrospective) ## Meet Defensive DevOps diff --git a/gemfeed/2021-11-29-bash-golf-part-1.md b/gemfeed/2021-11-29-bash-golf-part-1.md index d0e4fb26..a9f0c793 100644 --- a/gemfeed/2021-11-29-bash-golf-part-1.md +++ b/gemfeed/2021-11-29-bash-golf-part-1.md @@ -2,6 +2,12 @@ > Published at 2021-11-29T14:06:14+00:00; Updated at 2022-01-05 +This is the first blog post about my Bash Golf series. This series is about random Bash tips, tricks and weirdnesses I came across. It's a collection of smaller articles I wrote in an older (in German language) blog, which I translated and refreshed with some new content. + +[2021-11-29 Bash Golf Part 1 (You are currently reading this)](./2021-11-29-bash-golf-part-1.md) +[2022-01-01 Bash Golf Part 2](./2022-01-01-bash-golf-part-2.md) +[2023-12-10 Bash Golf Part 3](./2023-12-10-bash-golf-part-3.md) + ``` '\ . . |>18>> @@ -17,7 +23,6 @@ jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ## Table of Contents * [⇢ Bash Golf Part 1](#bash-golf-part-1) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ TCP/IP networking](#tcpip-networking) * [⇢ ⇢ Process substitution](#process-substitution) * [⇢ ⇢ Grouping](#grouping) @@ -27,14 +32,6 @@ jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [⇢ ⇢ : aka the null command](#-aka-the-null-command) * [⇢ ⇢ (No) floating point support](#no-floating-point-support) -## Introduction - -This is the first blog post about my Bash Golf series. This series is about random Bash tips, tricks and weirdnesses I came across. It's a collection of smaller articles I wrote in an older (in German language) blog, which I translated and refreshed with some new content. - -[2021-11-29 Bash Golf Part 1 (You are currently reading this)](./2021-11-29-bash-golf-part-1.md) -[2022-01-01 Bash Golf Part 2](./2022-01-01-bash-golf-part-2.md) -[2023-12-10 Bash Golf Part 3](./2023-12-10-bash-golf-part-3.md) - ## TCP/IP networking You probably know the Netcat tool, which is a swiss army knife for TCP/IP networking on the command line. But did you know that the Bash natively supports TCP/IP networking? diff --git a/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person.md b/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person.md index 03367c30..72b3486d 100644 --- a/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person.md +++ b/gemfeed/2021-12-26-how-to-stay-sane-as-a-devops-person.md @@ -2,6 +2,12 @@ > Published at 2021-12-26T12:02:02+00:00; Updated at 2022-01-12 +Log4shell (CVE-2021-44228) made it clear, once again, that working in information technology is not an easy job (especially when you are a DevOps person). I thought it would be interesting to summarize a few techniques to help you to relax. + +(PS: When I mean DevOps, I also mean Site Reliability Engineers and Sysadmins. I believe SRE, DevOps Engineer and Sysadmin are just synonym titles for the same job). + +[https://en.wikipedia.org/wiki/Log4Shell](https://en.wikipedia.org/wiki/Log4Shell) + ``` ) ) (( ( @@ -22,13 +28,25 @@ ||| \ __/_|| __||__ -----||-/------`-._/||-o--o---o--- ~~~~~' -``` - -Log4shell (CVE-2021-44228) made it clear, once again, that working in information technology is not an easy job (especially when you are a DevOps person). I thought it would be interesting to summarize a few techniques to help you to relax. - -(PS: When I mean DevOps, I also mean Site Reliability Engineers and Sysadmins. I believe SRE, DevOps Engineer and Sysadmin are just synonym titles for the same job). - -[https://en.wikipedia.org/wiki/Log4Shell](https://en.wikipedia.org/wiki/Log4Shell) +``` + +## Table of Contents + +* [⇢ How to stay sane as a DevOps person ](#how-to-stay-sane-as-a-devops-person-) +* [⇢ ⇢ Set clear expectations](#set-clear-expectations) +* [⇢ ⇢ Always respond to requests but set expectations and boundaries](#always-respond-to-requests-but-set-expectations-and-boundaries) +* [⇢ ⇢ ⇢ Dealing with requests](#dealing-with-requests) +* [⇢ ⇢ ⇢ Escalation is only a tool](#escalation-is-only-a-tool) +* [⇢ ⇢ Think positively](#think-positively) +* [⇢ ⇢ Go slower even if you could go faster](#go-slower-even-if-you-could-go-faster) +* [⇢ ⇢ ⇢ You work in a team](#you-work-in-a-team) +* [⇢ ⇢ ⇢ Don't rush](#don-t-rush) +* [⇢ ⇢ You are not a superhero](#you-are-not-a-superhero) +* [⇢ ⇢ ⇢ Give away some of your superpowers](#give-away-some-of-your-superpowers) +* [⇢ ⇢ Don't jump on all problems immediately](#don-t-jump-on-all-problems-immediately) +* [⇢ ⇢ Force breaks; and shutdown now](#force-breaks-and-shutdown-now) +* [⇢ ⇢ Block time every day for personal advance](#block-time-every-day-for-personal-advance) +* [⇢ ⇢ More](#more) ## Set clear expectations diff --git a/gemfeed/2022-01-01-bash-golf-part-2.md b/gemfeed/2022-01-01-bash-golf-part-2.md index 5f6df763..d1330128 100644 --- a/gemfeed/2022-01-01-bash-golf-part-2.md +++ b/gemfeed/2022-01-01-bash-golf-part-2.md @@ -2,6 +2,12 @@ > Published at 2022-01-01T23:36:15+00:00; Updated at 2022-01-05 +This is the second blog post about my Bash Golf series. This series is random Bash tips, tricks and weirdnesses I came across. It's a collection of smaller articles I wrote in an older (in German language) blog, which I translated and refreshed with some new content. + +[2021-11-29 Bash Golf Part 1](./2021-11-29-bash-golf-part-1.md) +[2022-01-01 Bash Golf Part 2 (You are currently reading this)](./2022-01-01-bash-golf-part-2.md) +[2023-12-10 Bash Golf Part 3](./2023-12-10-bash-golf-part-3.md) + ``` '\ '\ . . |>18>> @@ -17,7 +23,6 @@ jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ## Table of Contents * [⇢ Bash Golf Part 2](#bash-golf-part-2) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ Redirection](#redirection) * [⇢ ⇢ HERE](#here) * [⇢ ⇢ RANDOM](#random) @@ -26,14 +31,6 @@ jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [⇢ ⇢ ⇢ -e](#-e) * [⇢ ⇢ ⇢ pipefail](#pipefail) -## Introduction - -This is the second blog post about my Bash Golf series. This series is random Bash tips, tricks and weirdnesses I came across. It's a collection of smaller articles I wrote in an older (in German language) blog, which I translated and refreshed with some new content. - -[2021-11-29 Bash Golf Part 1](./2021-11-29-bash-golf-part-1.md) -[2022-01-01 Bash Golf Part 2 (You are currently reading this)](./2022-01-01-bash-golf-part-2.md) -[2023-12-10 Bash Golf Part 3](./2023-12-10-bash-golf-part-3.md) - ## Redirection Let's have a closer look at Bash redirection. As you might already know that there are 3 standard file descriptors: diff --git a/gemfeed/2022-02-04-computer-operating-systems-i-use.md b/gemfeed/2022-02-04-computer-operating-systems-i-use.md index d19adeb9..ea88b859 100644 --- a/gemfeed/2022-02-04-computer-operating-systems-i-use.md +++ b/gemfeed/2022-02-04-computer-operating-systems-i-use.md @@ -2,6 +2,8 @@ > Published at 2022-02-04T09:58:22+00:00; Updated at 2022-02-18 +This is a list of Operating Systems I currently use. This list is in no particular order and also will be updated over time. The very first operating system I used was MS-DOS (mainly for games) and the very first Unix like operating system I used was SuSE Linux 5.3. My first smartphone OS was Symbian on a clunky Sony Ericsson device. + ``` /( )` \ \___ / | @@ -26,7 +28,6 @@ ## Table of Contents * [⇢ Computer operating systems I use(d)](#computer-operating-systems-i-used) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ Fedora Linux](#fedora-linux) * [⇢ ⇢ EndeavourOS](#endeavouros) * [⇢ ⇢ FreeBSD](#freebsd) @@ -48,10 +49,6 @@ * [⇢ ⇢ ⇢ Other OSes I only had a glance at...](#other-oses-i-only-had-a-glance-at) * [⇢ ⇢ ⇢ Other OSes which seem interesting...](#other-oses-which-seem-interesting) -## Introduction - -This is a list of Operating Systems I currently use. This list is in no particular order and also will be updated over time. The very first operating system I used was MS-DOS (mainly for games) and the very first Unix like operating system I used was SuSE Linux 5.3. My first smartphone OS was Symbian on a clunky Sony Ericsson device. - ## Fedora Linux Fedora Linux is the operating system I use on my primary (personal) laptop. It's a ThinkPad X1 Carbon Gen. 9. Lenovo which comes along with official Lenovo Linux support. I already noticed hardware firmware updates being installed directly through Fedora from Lenovo. Fedora is a real powerhouse, cutting-edge and reasonably stable at the same time. It's baked by Red Hat. diff --git a/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.md b/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.md index 42527f51..98b238d0 100644 --- a/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.md +++ b/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.md @@ -2,6 +2,10 @@ > Published at 2022-03-06T18:11:39+00:00 +I have recently released DTail 4.0.0 and this blog post goes through all the new goodies. If you want to jump directly to DTail, do it here (there are nice animated gifs which demonstrates the usage pretty well): + +[https://dtail.dev](https://dtail.dev) + ``` ,_---~~~~~----._ _,,_,*^____ _____``*g*\"*, @@ -19,7 +23,6 @@ ## Table of Contents * [⇢ The release of DTail 4.0.0](#the-release-of-dtail-400) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ So, what's new in 4.0.0?](#so-what-s-new-in-400) * [⇢ ⇢ ⇢ Rewritten logging](#rewritten-logging) * [⇢ ⇢ ⇢ Configurable terminal color codes](#configurable-terminal-color-codes) @@ -34,12 +37,6 @@ * [⇢ ⇢ ⇢ Use of memory pools](#use-of-memory-pools) * [⇢ ⇢ What's next](#what-s-next) -## Introduction - -I have recently released DTail 4.0.0 and this blog post goes through all the new goodies. If you want to jump directly to DTail, do it here (there are nice animated gifs which demonstrates the usage pretty well): - -[https://dtail.dev](https://dtail.dev) - ## So, what's new in 4.0.0? ### Rewritten logging diff --git a/gemfeed/2022-04-10-creative-universe.md b/gemfeed/2022-04-10-creative-universe.md index f884dc1b..4f49e989 100644 --- a/gemfeed/2022-04-10-creative-universe.md +++ b/gemfeed/2022-04-10-creative-universe.md @@ -2,6 +2,22 @@ > Published at 2022-04-10T10:09:11+01:00; Updated at 2022-04-18 +I have been participating in an annual work-internal project contest (we call it Pet Project contest) since I moved to London and switched jobs to my current employer. I am very happy to say that I won a "silver" prize last week here 🎆. Over the last couple of years I have been a finalist in this contest six times and won some kind of prize five times. Some of my projects were also released as open source software. One had a magazine article published, and for another one I wrote an article on my employer's engineering blog. If you have followed all my posts on this blog (the one you are currently reading), then you have probably figured out what these projects were: + +[DTail - The distributed log tail program](./2021-04-22-dtail-the-distributed-log-tail-program.md) +[Realistic load testing with I/O Riot for linux](./2018-06-01-realistic-load-testing-with-ioriot-for-linux.md) + +Note that my latest silver prize project isn't open source software and because of that there is no public material I can refer to. Maybe the next one again? + +I want to point out that I never won the "gold" prize and it's the first time I won "silver", though. I believe, looking at the company's contest history, I am the employee with the most consecutive successful project submissions (my streak broke as I didn't participate last year) and am also the one with the highest successful project count in total. Sorry if this all sounds a bit self-promotional, but I think it is something to be proud of. Consistency beats a one-off success. + +I often put endless hours and sometimes sleepless nights into such projects and all of that in my own time. I, an engineer whose native tongue is not English, also have to present such a project in front of the CEO, CTO and CPO, the Chief Scientist, the founders of the company, and, if it is not enough, to all other staff of the company too. I usually also demonstrate a working prototype live on a production grid during the presentation. 😓 + +So why would I sign up myself for such side projects? Isn't it a lot of stress and extra work? Besides the prize in form of money (you can not count on that, you may win or you may not win something) and recognition, there are also other motivational points: + +* I want to learn new technologies or to deepen my knowledge of a given technology. I want to have a personal benefit from the project, even when I don't win any prize. So when the company is offering a contest, why not use it as a motivational trampoline? It's good to have a hard deadline for a project. And the project will also benefit the company in some way. So it's a win-win. +* I love the idea of combining several old things into a new thing. You can call this creativity. At work, we call this sometimes Lego: Building new things from given blocks. But I also love to add something new and unique to the mix, something that didn't exist as a Lego block before and could not be built by using only the already existing blocks. + ``` . + . . . . . . . . . * @@ -23,23 +39,18 @@ - the universe ``` -## Prelude - -I have been participating in an annual work-internal project contest (we call it Pet Project contest) since I moved to London and switched jobs to my current employer. I am very happy to say that I won a "silver" prize last week here 🎆. Over the last couple of years I have been a finalist in this contest six times and won some kind of prize five times. Some of my projects were also released as open source software. One had a magazine article published, and for another one I wrote an article on my employer's engineering blog. If you have followed all my posts on this blog (the one you are currently reading), then you have probably figured out what these projects were: - -[DTail - The distributed log tail program](./2021-04-22-dtail-the-distributed-log-tail-program.md) -[Realistic load testing with I/O Riot for linux](./2018-06-01-realistic-load-testing-with-ioriot-for-linux.md) - -Note that my latest silver prize project isn't open source software and because of that there is no public material I can refer to. Maybe the next one again? - -I want to point out that I never won the "gold" prize and it's the first time I won "silver", though. I believe, looking at the company's contest history, I am the employee with the most consecutive successful project submissions (my streak broke as I didn't participate last year) and am also the one with the highest successful project count in total. Sorry if this all sounds a bit self-promotional, but I think it is something to be proud of. Consistency beats a one-off success. - -I often put endless hours and sometimes sleepless nights into such projects and all of that in my own time. I, an engineer whose native tongue is not English, also have to present such a project in front of the CEO, CTO and CPO, the Chief Scientist, the founders of the company, and, if it is not enough, to all other staff of the company too. I usually also demonstrate a working prototype live on a production grid during the presentation. 😓 - -So why would I sign up myself for such side projects? Isn't it a lot of stress and extra work? Besides the prize in form of money (you can not count on that, you may win or you may not win something) and recognition, there are also other motivational points: - -* I want to learn new technologies or to deepen my knowledge of a given technology. I want to have a personal benefit from the project, even when I don't win any prize. So when the company is offering a contest, why not use it as a motivational trampoline? It's good to have a hard deadline for a project. And the project will also benefit the company in some way. So it's a win-win. -* I love the idea of combining several old things into a new thing. You can call this creativity. At work, we call this sometimes Lego: Building new things from given blocks. But I also love to add something new and unique to the mix, something that didn't exist as a Lego block before and could not be built by using only the already existing blocks. +## Table of Contents + +* [⇢ Creative universe](#creative-universe) +* [⇢ ⇢ How to be creative](#how-to-be-creative) +* [⇢ ⇢ ⇢ Know which problem you want to solve](#know-which-problem-you-want-to-solve) +* [⇢ ⇢ ⇢ Immerse / deep dive](#immerse--deep-dive) +* [⇢ ⇢ ⇢ Always have a notebook with you](#always-have-a-notebook-with-you) +* [⇢ ⇢ ⇢ When you didn't sleep enough](#when-you-didn-t-sleep-enough) +* [⇢ ⇢ ⇢ Have regular breaks and relax](#have-regular-breaks-and-relax) +* [⇢ ⇢ ⇢ Upside-down approach](#upside-down-approach) +* [⇢ ⇢ ⇢ Don't be busy all the time](#don-t-be-busy-all-the-time) +* [⇢ ⇢ Conclusion](#conclusion) ## How to be creative diff --git a/gemfeed/2022-05-27-perl-is-still-a-great-choice.md b/gemfeed/2022-05-27-perl-is-still-a-great-choice.md index 2849a07f..b7ba1644 100644 --- a/gemfeed/2022-05-27-perl-is-still-a-great-choice.md +++ b/gemfeed/2022-05-27-perl-is-still-a-great-choice.md @@ -2,20 +2,6 @@ > Published at 2022-05-27T07:50:12+01:00; Updated at 2023-01-28 -[](./perl-is-still-a-great-choice/regular_expressions.png) - -## Table of Contents - -* [⇢ Perl is still a great choice](#perl-is-still-a-great-choice) -* [⇢ ⇢ Introduction](#introduction) -* [⇢ ⇢ Write-only language](#write-only-language) -* [⇢ ⇢ Is Perl abandoned?](#is-perl-abandoned) -* [⇢ ⇢ Why use Perl as there are better alternatives?](#why-use-perl-as-there-are-better-alternatives) -* [⇢ ⇢ Why all the sigils? It looks like an exploding ASCII factory!!](#why-all-the-sigils-it-looks-like-an-exploding-ascii-factory) -* [⇢ ⇢ Where do I personally still use perl?](#where-do-i-personally-still-use-perl) - -## Introduction - 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: @@ -29,6 +15,17 @@ So why is that? Once the de-facto standard super-glue language for the web nowad * Why use Perl as there are better alternatives? * Why all the sigils? It looks like an exploding ASCII factory!! +[](./perl-is-still-a-great-choice/regular_expressions.png) + +## Table of Contents + +* [⇢ Perl is still a great choice](#perl-is-still-a-great-choice) +* [⇢ ⇢ Write-only language](#write-only-language) +* [⇢ ⇢ Is Perl abandoned?](#is-perl-abandoned) +* [⇢ ⇢ Why use Perl as there are better alternatives?](#why-use-perl-as-there-are-better-alternatives) +* [⇢ ⇢ Why all the sigils? It looks like an exploding ASCII factory!!](#why-all-the-sigils-it-looks-like-an-exploding-ascii-factory) +* [⇢ ⇢ Where do I personally still use perl?](#where-do-i-personally-still-use-perl) + ## Write-only language Is Perl really a write-only language? You have to understand that Perl 5 was released in 1994 (28 years ago as of this writing) and when we refer to Perl we usually mean Perl 5. That's many years, and there are many old scripts not following the modern Perl best practices (as they didn't exist yet). So yes, legacy scripts may be difficult to read. Japanese may be difficult to read too if you don't know Japanese, though. diff --git a/gemfeed/2022-06-15-sweating-the-small-stuff.md b/gemfeed/2022-06-15-sweating-the-small-stuff.md index cbc0311f..43807184 100644 --- a/gemfeed/2022-06-15-sweating-the-small-stuff.md +++ b/gemfeed/2022-06-15-sweating-the-small-stuff.md @@ -2,14 +2,6 @@ > Published at 2022-06-15T08:47:44+01:00; Updated at 2022-06-18 -``` - _ - /_/_ .'''. - =O(_)))) ...' `. - jgs \_\ `. .''' - `..' -``` - This blog post is a bit different from the others. It consists of multiple but smaller projects worth mentioning. I got inspired by Julia Evan's "Tiny programs" blog post and the side projects of The Sephist, so I thought I would also write a blog posts listing a couple of small projects of mine: [Tiny programs](https://jvns.ca/blog/2022/03/08/tiny-programs/) @@ -19,6 +11,39 @@ Working on tiny projects is a lot of fun as you don't need to worry about any st But before going through the tiny projects let's take a paragraph for the `1y` anniversary retrospective. +``` + _ + /_/_ .'''. + =O(_)))) ...' `. + jgs \_\ `. .''' + `..' +``` + +## Table of Contents + +* [⇢ Sweating the small stuff - Tiny projects of mine](#sweating-the-small-stuff---tiny-projects-of-mine) +* [⇢ ⇢ `1y` anniversary](#1y-anniversary) +* [⇢ ⇢ Static photo album generator](#static-photo-album-generator) +* [⇢ ⇢ ⇢ The Irregular Ninja](#the-irregular-ninja) +* [⇢ ⇢ Random journal page extractor](#random-journal-page-extractor) +* [⇢ ⇢ Global uptime records statistic generator](#global-uptime-records-statistic-generator) +* [⇢ ⇢ Server configuration management](#server-configuration-management) +* [⇢ ⇢ Fancy SSH execution loop](#fancy-ssh-execution-loop) +* [⇢ ⇢ A KISS dynamic DNS solution](#a-kiss-dynamic-dns-solution) +* [⇢ ⇢ CPU information gatherer for Linux](#cpu-information-gatherer-for-linux) +* [⇢ ⇢ Show differences of two files over the network](#show-differences-of-two-files-over-the-network) +* [⇢ ⇢ Delay sending out E-Mails with Mutt](#delay-sending-out-e-mails-with-mutt) +* [⇢ ⇢ Graphical UI for sending text messages](#graphical-ui-for-sending-text-messages) +* [⇢ ⇢ IPv6 and IPv4 connectivity testing site](#ipv6-and-ipv4-connectivity-testing-site) +* [⇢ ⇢ List open Jira tickets in the terminal](#list-open-jira-tickets-in-the-terminal) +* [⇢ ⇢ Debian running on "your" Android phone](#debian-running-on-your-android-phone) +* [⇢ ⇢ Perl service framework](#perl-service-framework) +* [⇢ ⇢ More](#more) +* [⇢ ⇢ ⇢ Work time tracker](#work-time-tracker) +* [⇢ ⇢ ⇢ Password and document store](#password-and-document-store) +* [⇢ ⇢ ⇢ Backup procedure](#backup-procedure) +* [⇢ ⇢ konpeito.media](#konpeitomedia) + ## `1y` anniversary It has been one year since I started posting regularly (at least once monthly) on this blog again. It has been a lot of fun (and work) doing so for various reasons: diff --git a/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.md b/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.md index 746dab78..35870c2c 100644 --- a/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.md +++ b/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.md @@ -2,6 +2,8 @@ > Published at 2022-07-30T12:14:31+01:00 +I was amazed at how easy it is to automatically generate and update Let's Encrypt certificates with OpenBSD. + ``` / _ \ The Hebern Machine \ ." ". / @@ -32,7 +34,6 @@ ## Table of Contents * [⇢ Let's Encrypt with OpenBSD and Rex](#let-s-encrypt-with-openbsd-and-rex) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ ⇢ What's Let's Encrypt?](#what-s-let-s-encrypt) * [⇢ ⇢ Meet `acme-client`](#meet-acme-client) * [⇢ ⇢ Configuration](#configuration) @@ -46,10 +47,6 @@ * [⇢ ⇢ All pieces together](#all-pieces-together) * [⇢ ⇢ Conclusion](#conclusion) -## Introduction - -I was amazed at how easy it is to automatically generate and update Let's Encrypt certificates with OpenBSD. - ### What's Let's Encrypt? > Let's Encrypt is a non-profit certificate authority run by Internet Security Research Group that provides X.509 certificates for Transport Layer Security (TLS) encryption at no charge. It is the world's largest certificate authority, used by more than 265 million websites, with the goal of all websites being secure and using HTTPS. diff --git a/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.md b/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.md index 8e7a2464..24161520 100644 --- a/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.md +++ b/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.md @@ -2,6 +2,12 @@ > Published at 2022-08-27T18:25:57+01:00 +I proudly announce that I've released Gemtexter version `1.1.0`. What is Gemtexter? It's my minimalist static site generator for Gemini Gemtext, HTML and Markdown written in GNU Bash. + +[https://codeberg.org/snonux/gemtexter](https://codeberg.org/snonux/gemtexter) + +It has been around a year since I released the first version `1.0.0`. Although, there aren't any groundbreaking changes, there have been a couple of smaller commits and adjustments. I was quite surprised that I received a bunch of feedback and requests about Gemtexter so it means that I am not the only person in the universe actually using it. + ``` -=[ typewriter ]=- 1/98 @@ -17,7 +23,6 @@ ## Table of Contents * [⇢ Gemtexter 1.1.0 - Let's Gemtext again](#gemtexter-110---let-s-gemtext-again) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ What's new?](#what-s-new) * [⇢ ⇢ ⇢ Automatic check for GNU version requirements](#automatic-check-for-gnu-version-requirements) * [⇢ ⇢ ⇢ Backticks now produce `inline code blocks` in the HTML output](#backticks-now-produce-inline-code-blocks-in-the-html-output) @@ -28,14 +33,6 @@ * [⇢ ⇢ ⇢ Sub-section support](#sub-section-support) * [⇢ ⇢ ⇢ More](#more) -## Introduction - -I proudly announce that I've released Gemtexter version `1.1.0`. What is Gemtexter? It's my minimalist static site generator for Gemini Gemtext, HTML and Markdown written in GNU Bash. - -[https://codeberg.org/snonux/gemtexter](https://codeberg.org/snonux/gemtexter) - -It has been around a year since I released the first version `1.0.0`. Although, there aren't any groundbreaking changes, there have been a couple of smaller commits and adjustments. I was quite surprised that I received a bunch of feedback and requests about Gemtexter so it means that I am not the only person in the universe actually using it. - ## What's new? ### Automatic check for GNU version requirements diff --git a/gemfeed/2022-09-30-after-a-bad-nights-sleep.md b/gemfeed/2022-09-30-after-a-bad-nights-sleep.md index 91c6f553..100c55b8 100644 --- a/gemfeed/2022-09-30-after-a-bad-nights-sleep.md +++ b/gemfeed/2022-09-30-after-a-bad-nights-sleep.md @@ -2,6 +2,8 @@ > Published at 2022-09-30T09:53:23+03:00; Updated at 2022-10-12 +Everyone has it once in a while: A bad night's sleep. Here I attempt to list valuable tips on how to deal with it. + ``` z z @@ -16,7 +18,24 @@ jgs (________\ \ '-' ``` -Everyone has it once in a while: A bad night's sleep. Here I attempt to list valuable tips on how to deal with it. +## Table of Contents + +* [⇢ After a bad night's sleep](#after-a-bad-night-s-sleep) +* [⇢ ⇢ Don't take the day off.](#don-t-take-the-day-off) +* [⇢ ⇢ Start work early](#start-work-early) +* [⇢ ⇢ Sweat the small stuff](#sweat-the-small-stuff) +* [⇢ ⇢ Enter the flow state](#enter-the-flow-state) +* [⇢ ⇢ Reschedule meetings](#reschedule-meetings) +* [⇢ ⇢ Invent](#invent) +* [⇢ ⇢ Fast](#fast) +* [⇢ ⇢ Stretch](#stretch) +* [⇢ ⇢ Walk](#walk) +* [⇢ ⇢ Red Bull](#red-bull) +* [⇢ ⇢ Power nap](#power-nap) +* [⇢ ⇢ Don't take anything personally.](#don-t-take-anything-personally) +* [⇢ ⇢ Meditate](#meditate) +* [⇢ ⇢ Write things down](#write-things-down) +* [⇢ ⇢ Social media](#social-media) ## Don't take the day off. diff --git a/gemfeed/2022-10-30-installing-dtail-on-openbsd.md b/gemfeed/2022-10-30-installing-dtail-on-openbsd.md index bf3d9a96..232e7bb4 100644 --- a/gemfeed/2022-10-30-installing-dtail-on-openbsd.md +++ b/gemfeed/2022-10-30-installing-dtail-on-openbsd.md @@ -2,6 +2,18 @@ > Published at 2022-10-30T11:03:19+02:00 +This will be a quick blog post, as I am busy with my personal life now. I have relocated to a different country and am still busy arranging things. So bear with me :-) + + In this post, I want to give a quick overview (or how-to) about installing DTail on OpenBSD, as the official documentation only covers Red Hat and Fedora Linux! And this blog post will also be used as my reference! + +[https://dtail.dev](https://dtail.dev) + +I am using Rexify for my OpenBSD automation. Check out the following article covering my Rex setup in a little bit more detail: + +[Let's Encrypt with OpenBSD and Rex](./2022-07-30-lets-encrypt-with-openbsd-and-rex.md) + +I will also mention some relevant `Rexfile` snippets in this post! + ``` ,_---~~~~~----._ _,,_,*^____ _____``*g*\"*, @@ -42,7 +54,6 @@ ## Table of Contents * [⇢ Installing DTail on OpenBSD](#installing-dtail-on-openbsd) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ Compile it](#compile-it) * [⇢ ⇢ Install it](#install-it) * [⇢ ⇢ ⇢ Rexification](#rexification) @@ -54,20 +65,6 @@ * [⇢ ⇢ Use it](#use-it) * [⇢ ⇢ Conclusions](#conclusions) -## Introduction - -This will be a quick blog post, as I am busy with my personal life now. I have relocated to a different country and am still busy arranging things. So bear with me :-) - - In this post, I want to give a quick overview (or how-to) about installing DTail on OpenBSD, as the official documentation only covers Red Hat and Fedora Linux! And this blog post will also be used as my reference! - -[https://dtail.dev](https://dtail.dev) - -I am using Rexify for my OpenBSD automation. Check out the following article covering my Rex setup in a little bit more detail: - -[Let's Encrypt with OpenBSD and Rex](./2022-07-30-lets-encrypt-with-openbsd-and-rex.md) - -I will also mention some relevant `Rexfile` snippets in this post! - ## Compile it First of all, DTail needs to be downloaded and compiled. For that, `git`, `go`, and `gmake` are required: diff --git a/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim.md b/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim.md index adefac5d..1f92fd71 100644 --- a/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim.md +++ b/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim.md @@ -2,6 +2,18 @@ > Published at 2022-11-24T11:17:15+02:00; Updated at 2022-11-26 +As a long-lasting user of Vim (and NeoVim), I always wondered what GNU Emacs is really about, so I decided to try it. I didn't try vanilla GNU Emacs, but Doom Emacs. I chose Doom Emacs as it is a neat distribution of Emacs with Evil mode enabled by default. Evil mode allows Vi(m) key bindings (so to speak, it's emulating Vim within Emacs), and I am pretty sure I won't be ready to give up all the muscle memory I have built over more than a decade. + +[GNU Emacs](https://www.gnu.org/software/emacs/) +[Doom Emacs](https://github.com/doomemacs/) + +I used Doom Emacs for around two months. Still, ultimately I decided to switch back to NeoVim as my primary editor and IDE and Vim (usually pre-installed on Linux-based systems) and Nvi (usually pre-installed on *BSD systems) as my "always available editor" for quick edits. (It is worth mentioning that I don't have a high opinion on whether Vim or NeoVim is the better editor, I prefer NeoVim as it comes with better defaults out of the box, but there is no real blocker to use Vim instead). + +[Vim](https://www.vim.org) +[NeoVim](https://neovim.io) + +So why did I switch back to the Vi-family? + ``` _/ \ _(\(o / \ / _ ^^^o @@ -15,17 +27,16 @@ Art by \ \_! / __! ^^----^^ "^--v' ``` -As a long-lasting user of Vim (and NeoVim), I always wondered what GNU Emacs is really about, so I decided to try it. I didn't try vanilla GNU Emacs, but Doom Emacs. I chose Doom Emacs as it is a neat distribution of Emacs with Evil mode enabled by default. Evil mode allows Vi(m) key bindings (so to speak, it's emulating Vim within Emacs), and I am pretty sure I won't be ready to give up all the muscle memory I have built over more than a decade. - -[GNU Emacs](https://www.gnu.org/software/emacs/) -[Doom Emacs](https://github.com/doomemacs/) +## Table of Contents -I used Doom Emacs for around two months. Still, ultimately I decided to switch back to NeoVim as my primary editor and IDE and Vim (usually pre-installed on Linux-based systems) and Nvi (usually pre-installed on *BSD systems) as my "always available editor" for quick edits. (It is worth mentioning that I don't have a high opinion on whether Vim or NeoVim is the better editor, I prefer NeoVim as it comes with better defaults out of the box, but there is no real blocker to use Vim instead). - -[Vim](https://www.vim.org) -[NeoVim](https://neovim.io) - -So why did I switch back to the Vi-family? +* [⇢ I tried (Doom) Emacs, but I switched back to (Neo)Vim](#i-tried-doom-emacs-but-i-switched-back-to-neovim) +* [⇢ ⇢ Emacs is a giant dragon](#emacs-is-a-giant-dragon) +* [⇢ ⇢ Magit love](#magit-love) +* [⇢ ⇢ Graphical UI](#graphical-ui) +* [⇢ ⇢ Scripting it](#scripting-it) +* [⇢ ⇢ The famous Emacs Org mode](#the-famous-emacs-org-mode) +* [⇢ ⇢ Seeking simplicity](#seeking-simplicity) +* [⇢ ⇢ Conclusion](#conclusion) ## Emacs is a giant dragon diff --git a/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.md b/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.md index 90f57d05..4dedc97d 100644 --- a/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.md +++ b/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.md @@ -2,8 +2,6 @@ > Published at 2022-12-24T23:18:40+02:00 -[](./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: [Creative universe](./2022-04-10-creative-universe.md) @@ -16,6 +14,23 @@ However, after that, I became a Linux Sysadmin and mainly continued programming At my workplace, as an SRE, I don't do Java a lot. I have been reading Java code to understand the software better so I can apply and suggest workarounds or fixes to existing issues and bugs. However, most of our stack is in Java, and our Software Engineers use Java as their primary programming language. +[](./ultrarelearning-java-my-takeaways/learnjava.jpg) + +## Table of Contents + +* [⇢ (Re)learning Java - My takeaways](#relearning-java---my-takeaways) +* [⇢ ⇢ Stuck at Java 1.4](#stuck-at-java-14) +* [⇢ ⇢ (Re)learning & upskilling to Java 18](#relearning--upskilling-to-java-18) +* [⇢ ⇢ ⇢ Effective Java](#effective-java) +* [⇢ ⇢ ⇢ Java Pub House](#java-pub-house) +* [⇢ ⇢ ⇢ Java Concurrency course](#java-concurrency-course) +* [⇢ ⇢ ⇢ Read a lot of Java code](#read-a-lot-of-java-code) +* [⇢ ⇢ ⇢ Observed Java code reviews](#observed-java-code-reviews) +* [⇢ ⇢ ⇢ Took ownership of a roadmap-Java project](#took-ownership-of-a-roadmap-java-project) +* [⇢ ⇢ The good](#the-good) +* [⇢ ⇢ The bad and the ugly](#the-bad-and-the-ugly) +* [⇢ ⇢ Conclusion](#conclusion) + ## Stuck at Java 1.4 Over time, I had been missing out on many new features that were added to the language since Java 1.4, so I decided to implement my next Pet Project in Java and learn every further aspect of the language as my main goal. Of course, I still liked the idea of winning a Pet Project Prize, but my main objective was to level up my Java skills. diff --git a/gemfeed/2023-01-23-why-grapheneos-rox.md b/gemfeed/2023-01-23-why-grapheneos-rox.md index 765c0825..2cd45d62 100644 --- a/gemfeed/2023-01-23-why-grapheneos-rox.md +++ b/gemfeed/2023-01-23-why-grapheneos-rox.md @@ -2,6 +2,19 @@ > Published at 2023-01-23T15:31:52+02:00 +In 2021 I wrote "On Being Pedantic about Open-Source", and there was a section "What about mobile?" where I expressed the dilemma about the necessity of using proprietary mobile operating systems. With GrapheneOS, I found my perfect solution for personal mobile phone use. + +[On Being Pedantic about Open-Source](./2021-08-01-on-being-pedantic-about-open-source.md) + +What is GrapheneOS? + +> GrapheneOS is a privacy and security-focused mobile OS with Android app compatibility developed as a non-profit open-source project. It's focused on the research and development of privacy and security technologies, including substantial improvements to sandboxing, exploits mitigations and the permission model. + +GrapheneOS is an independent Android distribution based on the Android Open Source Project (AOSP) but hardened in multiple ways. Other independent Android distributions, like LineageOS, are also based on AOSP, but GrapheneOS takes it further so that it can be my daily driver on my phone. + +[https://GrapheneOS.org](https://GrapheneOS.org) +[https://LineageOS.org](https://LineageOS.org) + ``` Art by Joan Stark _.===========================._ @@ -25,18 +38,17 @@ Art by Joan Stark '-'-'-'--' ``` -In 2021 I wrote "On Being Pedantic about Open-Source", and there was a section "What about mobile?" where I expressed the dilemma about the necessity of using proprietary mobile operating systems. With GrapheneOS, I found my perfect solution for personal mobile phone use. - -[On Being Pedantic about Open-Source](./2021-08-01-on-being-pedantic-about-open-source.md) - -What is GrapheneOS? - -> GrapheneOS is a privacy and security-focused mobile OS with Android app compatibility developed as a non-profit open-source project. It's focused on the research and development of privacy and security technologies, including substantial improvements to sandboxing, exploits mitigations and the permission model. - -GrapheneOS is an independent Android distribution based on the Android Open Source Project (AOSP) but hardened in multiple ways. Other independent Android distributions, like LineageOS, are also based on AOSP, but GrapheneOS takes it further so that it can be my daily driver on my phone. - -[https://GrapheneOS.org](https://GrapheneOS.org) -[https://LineageOS.org](https://LineageOS.org) +## Table of Contents + +* [⇢ Why GrapheneOS rox](#why-grapheneos-rox) +* [⇢ ⇢ User Profiles](#user-profiles) +* [⇢ ⇢ Proxying some of the Google offerings ](#proxying-some-of-the-google-offerings-) +* [⇢ ⇢ Google Play Sandboxing ](#google-play-sandboxing-) +* [⇢ ⇢ The camera and the cloud ](#the-camera-and-the-cloud-) +* [⇢ ⇢ Fine granular permissions](#fine-granular-permissions) +* [⇢ ⇢ Termux](#termux) +* [⇢ ⇢ So, why not use a pure Linux phone?](#so-why-not-use-a-pure-linux-phone) +* [⇢ ⇢ Small GrapheneOS downsides ](#small-grapheneos-downsides-) ## User Profiles diff --git a/gemfeed/2023-02-26-how-to-shut-down-after-work.md b/gemfeed/2023-02-26-how-to-shut-down-after-work.md index 8212c60c..90a71d7b 100644 --- a/gemfeed/2023-02-26-how-to-shut-down-after-work.md +++ b/gemfeed/2023-02-26-how-to-shut-down-after-work.md @@ -2,6 +2,8 @@ > Published at 2023-02-26T23:48:01+02:00 +Do you need help fully discharging from work in the evenings or for the weekend? Shutting down from work won't just improve your work-life balance; it will also significantly improve the quality of your personal life and work. After a restful weekend, you will be much more energized and productive the next working day. So it should not just be in your own, but also your employers' interest that you fully relax and shut down after work. + ``` |\ "Music should be heard not only with the ears, but also the soul." |---|--\-----------------------|-----------------------------------------| @@ -17,7 +19,16 @@ -@- [kom...@uwec.edu] ``` -Do you need help fully discharging from work in the evenings or for the weekend? Shutting down from work won't just improve your work-life balance; it will also significantly improve the quality of your personal life and work. After a restful weekend, you will be much more energized and productive the next working day. So it should not just be in your own, but also your employers' interest that you fully relax and shut down after work. +## Table of Contents + +* [⇢ How to shut down after work](#how-to-shut-down-after-work) +* [⇢ ⇢ Have a shutdown routine](#have-a-shutdown-routine) +* [⇢ ⇢ Don't work when you officially don't work](#don-t-work-when-you-officially-don-t-work) +* [⇢ ⇢ Distract your mind](#distract-your-mind) +* [⇢ ⇢ Get a pet](#get-a-pet) +* [⇢ ⇢ Journal your day](#journal-your-day) +* [⇢ ⇢ Don't stress about what your employer expects from you](#don-t-stress-about-what-your-employer-expects-from-you) +* [⇢ ⇢ Call it a day](#call-it-a-day) ## Have a shutdown routine diff --git a/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.md b/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.md index f8b31a17..a025fd8f 100644 --- a/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.md +++ b/gemfeed/2023-03-25-gemtexter-2.0.0-lets-gemtext-again-2.md @@ -2,6 +2,14 @@ > Published at 2023-03-25T17:50:32+02:00 +I proudly announce that I've released Gemtexter version `2.0.0`. What is Gemtexter? It's my minimalist static site generator for Gemini Gemtext, HTML and Markdown written in GNU Bash. + +[https://codeberg.org/snonux/gemtexter](https://codeberg.org/snonux/gemtexter) + +This is a new major release, so it contains a breaking change (see "Meta cache made obsolete"). + +Let's list what's new! + ``` -=[ typewriters ]=- 1/98 @@ -18,7 +26,6 @@ ## Table of Contents * [⇢ Gemtexter 2.0.0 - Let's Gemtext again²](#gemtexter-200---let-s-gemtext-again) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ Minimal template engine](#minimal-template-engine) * [⇢ ⇢ Added hooks](#added-hooks) * [⇢ ⇢ Use of safer Bash options](#use-of-safer-bash-options) @@ -26,16 +33,6 @@ * [⇢ ⇢ XMLLint support](#xmllint-support) * [⇢ ⇢ More](#more) -## Introduction - -I proudly announce that I've released Gemtexter version `2.0.0`. What is Gemtexter? It's my minimalist static site generator for Gemini Gemtext, HTML and Markdown written in GNU Bash. - -[https://codeberg.org/snonux/gemtexter](https://codeberg.org/snonux/gemtexter) - -This is a new major release, so it contains a breaking change (see "Meta cache made obsolete"). - -Let's list what's new! - ## Minimal template engine Gemtexter now supports templating, enabling dynamically generated content to `.gmi` files before converting anything to any output format like HTML and Markdown. diff --git a/gemfeed/2023-04-01-never-split-the-difference-book-notes.md b/gemfeed/2023-04-01-never-split-the-difference-book-notes.md index 171d357b..0dcc7a8e 100644 --- a/gemfeed/2023-04-01-never-split-the-difference-book-notes.md +++ b/gemfeed/2023-04-01-never-split-the-difference-book-notes.md @@ -16,6 +16,21 @@ These are my personal takeaways after reading "Never split the difference" by Ch ''' ``` +## Table of Contents + +* [⇢ "Never split the difference" book notes](#never-split-the-difference-book-notes) +* [⇢ ⇢ Tactical listening, spreading empathy](#tactical-listening-spreading-empathy) +* [⇢ ⇢ Mindset of discovery](#mindset-of-discovery) +* [⇢ ⇢ ⇢ More tips ](#more-tips-) +* [⇢ ⇢ "No" starts the conversation](#no-starts-the-conversation) +* [⇢ ⇢ Win-win](#win-win) +* [⇢ ⇢ On Deadlines](#on-deadlines) +* [⇢ ⇢ Analyse the opponent](#analyse-the-opponent) +* [⇢ ⇢ Use different ways of saying "no."](#use-different-ways-of-saying-no) +* [⇢ ⇢ Calibrated question](#calibrated-question) +* [⇢ ⇢ The black swan ](#the-black-swan-) +* [⇢ ⇢ More](#more) + ## Tactical listening, spreading empathy Be a mirror, copy each other to be comfy with each other to build up trust. Mirroring is mainly body language. A mirror is to repeat the words the other just said. Simple but effective. diff --git a/gemfeed/2023-04-09-algorithms-and-data-structures-in-golang-part-1.md b/gemfeed/2023-04-09-algorithms-and-data-structures-in-golang-part-1.md index dd8fc38a..265fe76b 100644 --- a/gemfeed/2023-04-09-algorithms-and-data-structures-in-golang-part-1.md +++ b/gemfeed/2023-04-09-algorithms-and-data-structures-in-golang-part-1.md @@ -2,6 +2,12 @@ > Published at 2023-04-09T22:31:42+03:00 +This is the first blog post about my Algorithms and Data Structures in Go series. I am not a Software Developer in my day job. In my current role, programming and scripting skills are desirable but not mandatory. I have been learning about Data Structures and Algorithms many years ago at University. I thought it would be fun to revisit/refresh my knowledge here and implement many of the algorithms in Go. + +[2023-04-09 Algorithms and Data Structures in Go - Part 1 (You are currently reading this)](./2023-04-09-algorithms-and-data-structures-in-golang-part-1.md) + +This post is about setting up some basic data structures and methods for this blog series. I promise, everything will be easy to follow in this post. It will become more interesting later in this series. + ``` ,_---~~~~~----._ _,,_,*^____ _____``*g*\"*, @@ -19,21 +25,12 @@ ## Table of Contents * [⇢ Algorithms and Data Structures in Go - Part 1](#algorithms-and-data-structures-in-go---part-1) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ Type constraints](#type-constraints) * [⇢ ⇢ ArrayList](#arraylist) * [⇢ ⇢ Helper methods](#helper-methods) * [⇢ ⇢ Sleep sort](#sleep-sort) * [⇢ ⇢ ⇢ Testing](#testing) -## Introduction - -This is the first blog post about my Algorithms and Data Structures in Go series. I am not a Software Developer in my day job. In my current role, programming and scripting skills are desirable but not mandatory. I have been learning about Data Structures and Algorithms many years ago at University. I thought it would be fun to revisit/refresh my knowledge here and implement many of the algorithms in Go. - -[2023-04-09 Algorithms and Data Structures in Go - Part 1 (You are currently reading this)](./2023-04-09-algorithms-and-data-structures-in-golang-part-1.md) - -This post is about setting up some basic data structures and methods for this blog series. I promise, everything will be easy to follow in this post. It will become more interesting later in this series. - ## Type constraints First, the package `ds` (data structures) defines the `types.go`. All examples will either operate on the `Integer` or `Number` type: diff --git a/gemfeed/2023-05-01-unveiling-guprecords b/gemfeed/2023-05-01-unveiling-guprecords index e69de29b..8b137891 100644 --- a/gemfeed/2023-05-01-unveiling-guprecords +++ b/gemfeed/2023-05-01-unveiling-guprecords @@ -0,0 +1 @@ + diff --git a/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.md b/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.md index 8a2e31a9..e546bcc8 100644 --- a/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.md +++ b/gemfeed/2023-05-06-the-obstacle-is-the-way-book-notes.md @@ -2,10 +2,23 @@ > Published at 2023-05-06T17:23:16+03:00 +These are my personal takeaways after reading "The Obstacle Is the Way" by Ryan Holiday. This is mainly for my own use, but you might find it helpful too. + +``` + ,.......... .........., + ,..,' '.' ',.., + ,' ,' : ', ', + ,' ,' : ', ', + ,' ,' : ', ', + ,' ,'............., : ,.............', ', +,' '............ '.' ............' ', + '''''''''''''''''';''';'''''''''''''''''' + ''' +``` + ## Table of Contents * [⇢ "The Obstacle is the Way" book notes](#the-obstacle-is-the-way-book-notes) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ Reframe your perspective](#reframe-your-perspective) * [⇢ ⇢ Embrace rationality](#embrace-rationality) * [⇢ ⇢ Control your response](#control-your-response) @@ -19,23 +32,6 @@ * [⇢ ⇢ Love everything that happens](#love-everything-that-happens) * [⇢ ⇢ Conclusion](#conclusion) -## Introduction - -These are my personal takeaways after reading "The Obstacle Is the Way" by Ryan Holiday. This is mainly for my own use, but you might find it helpful too. - - -``` - ,.......... .........., - ,..,' '.' ',.., - ,' ,' : ', ', - ,' ,' : ', ', - ,' ,' : ', ', - ,' ,'............., : ,.............', ', -,' '............ '.' ............' ', - '''''''''''''''''';''';'''''''''''''''''' - ''' -``` - "The obstacle is the way" is a powerful statement that encapsulates the wisdom of turning challenges into opportunities for growth and success. We will explore using obstacles as fuel, transforming weaknesses into strengths, and adopting a mindset that allows us to be creative and persistent in the face of adversity. ## Reframe your perspective diff --git a/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.md b/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.md index d9a34b54..9da6dceb 100644 --- a/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.md +++ b/gemfeed/2023-06-01-kiss-server-monitoring-with-gogios.md @@ -2,12 +2,17 @@ > Published at 2023-06-01T21:10:17+03:00 +Gogios is a minimalistic and easy-to-use monitoring tool I programmed in Google Go designed specifically for small-scale self-hosted servers and virtual machines. The primary purpose of Gogios is to monitor my personal server infrastructure for `foo.zone`, my MTAs, my authoritative DNS servers, my NextCloud, Wallabag and Anki sync server installations, etc. + +With compatibility with the Nagios Check API, Gogios offers a simple yet effective solution to monitor a limited number of resources. In theory, Gogios scales to a couple of thousand checks, though. You can clone it from Codeberg here: + +[https://codeberg.org/snonux/gogios](https://codeberg.org/snonux/gogios) + [](./kiss-server-monitoring-with-gogios/gogios-small.png) ## Table of Contents * [⇢ KISS server monitoring with Gogios](#kiss-server-monitoring-with-gogios) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ Motivation](#motivation) * [⇢ ⇢ Features](#features) * [⇢ ⇢ Example alert](#example-alert) @@ -22,14 +27,6 @@ * [⇢ ⇢ ⇢ High-availability](#high-availability) * [⇢ ⇢ Conclusion:](#conclusion) -## Introduction - -Gogios is a minimalistic and easy-to-use monitoring tool I programmed in Google Go designed specifically for small-scale self-hosted servers and virtual machines. The primary purpose of Gogios is to monitor my personal server infrastructure for `foo.zone`, my MTAs, my authoritative DNS servers, my NextCloud, Wallabag and Anki sync server installations, etc. - -With compatibility with the Nagios Check API, Gogios offers a simple yet effective solution to monitor a limited number of resources. In theory, Gogios scales to a couple of thousand checks, though. You can clone it from Codeberg here: - -[https://codeberg.org/snonux/gogios](https://codeberg.org/snonux/gogios) - ``` _____________________________ ____________________________ / \ / \ diff --git a/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.md b/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.md index 67439538..3a28aa17 100644 --- a/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.md +++ b/gemfeed/2023-07-17-career-guide-and-soft-skills-book-notes.md @@ -2,16 +2,29 @@ > Published at 2023-07-17T04:56:20+03:00 +These notes are of two books by "John Sommez" I found helpful. I also added some of my own keypoints to it. These notes are mainly for my own use, but you might find them helpful, too. + +``` + ,.......... .........., + ,..,' '.' ',.., + ,' ,' : ', ', + ,' ,' : ', ', + ,' ,' : ', ', + ,' ,'............., : ,.............', ', +,' '............ '.' ............' ', + '''''''''''''''''';''';'''''''''''''''''' + ''' +``` + ## Table of Contents * [⇢ "Software Developmers Career Guide and Soft Skills" book notes](#software-developmers-career-guide-and-soft-skills-book-notes) -* [⇢ Introduction](#introduction) -* [⇢ Improve](#improve) -* [⇢ ⇢ Always learn new things](#always-learn-new-things) -* [⇢ ⇢ Set goals](#set-goals) -* [⇢ ⇢ Ratings](#ratings) -* [⇢ ⇢ Promotions](#promotions) -* [⇢ ⇢ Finish things](#finish-things) +* [⇢ ⇢ Improve](#improve) +* [⇢ ⇢ ⇢ Always learn new things](#always-learn-new-things) +* [⇢ ⇢ ⇢ Set goals](#set-goals) +* [⇢ ⇢ ⇢ Ratings](#ratings) +* [⇢ ⇢ ⇢ Promotions](#promotions) +* [⇢ ⇢ ⇢ Finish things](#finish-things) * [⇢ ⇢ Expand the empire](#expand-the-empire) * [⇢ ⇢ Be pragmatic and also manage your time](#be-pragmatic-and-also-manage-your-time) * [⇢ ⇢ ⇢ The quota system](#the-quota-system) @@ -35,25 +48,9 @@ * [⇢ ⇢ Testing](#testing) * [⇢ ⇢ Books to read](#books-to-read) -# Introduction - -These notes are of two books by "John Sommez" I found helpful. I also added some of my own keypoints to it. These notes are mainly for my own use, but you might find them helpful, too. - -``` - ,.......... .........., - ,..,' '.' ',.., - ,' ,' : ', ', - ,' ,' : ', ', - ,' ,' : ', ', - ,' ,'............., : ,.............', ', -,' '............ '.' ............' ', - '''''''''''''''''';''';'''''''''''''''''' - ''' -``` - -# Improve +## Improve -## Always learn new things +### Always learn new things When you learn something new, e.g. a programming language, first gather an overview, learn from multiple sources, play around and learn by doing and not consuming and form your own questions. Don't read too much upfront. A large amount of time is spent in learning technical skills which were never use. You want to have a practical set of skills you are actually using. You need to know 20 percent to get out 80 percent of the results. @@ -70,18 +67,18 @@ Fake it until you make it. But be honest about your abilities or lack of. There Boot camps: The advantage of a boot camp is to pragmatically learn things fast. We almost always overestimate what we can do in a day. Especially during boot camps. Connect to others during the boot camps -## Set goals +### Set goals Your own goals are important but the manager also looks at how the team performs and how someone can help the team perform better. Check whether you are on track with your goals every 2 weeks in order to avoid surprises for the annual review. Make concrete goals for next review. Track and document your progress. Invest in your education. Make your goals known. If you want something, then ask for it. Nobody but you knows what you want. -## Ratings +### Ratings That's a trap: If you have to rate yourself, that's a trap. That never works in an unbiased way. Rate yourself always the best way but rate your weakest part as high as possible minus one point. Rate yourself as good as you can otherwise. Nobody is putting for fun a gun on his own head. * Don't do peer rating, it can fire back on you. What if the colleague becomes your new boss? * Cooperate rankings are unfortunately HR guidelines and politics and only mirror a little your actual performance. -## Promotions +### Promotions The most valuable employees are the ones who make themselves obsolete and automate all away. Keep a safety net of 3 to 6 months of finances. Safe at least 10 percent of your earnings. Also, if you make money it does not mean that you have to spent more money. Is a new car better than a used car which both can bring you from A to B? Liability vs assets. @@ -93,7 +90,7 @@ The most valuable employees are the ones who make themselves obsolete and automa * If you want a raise be specific how much and know to back your demands. Don't make a thread and no ultimatums. * Best way for a promotion is to switch jobs. You can even switch back with a better salary. -## Finish things +### Finish things Hard work is necessary for accomplish results. However, work smarter not harder. Furthermore, working smart is not a substitute for working hard. Work both, hard and smart. diff --git a/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.md b/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.md index 92531bbb..f98ce69d 100644 --- a/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.md +++ b/gemfeed/2023-07-21-gemtexter-2.1.0-lets-gemtext-again-3.md @@ -2,6 +2,10 @@ > Published at 2023-07-21T10:19:31+03:00 +I proudly announce that I've released Gemtexter version `2.1.0`. What is Gemtexter? It's my minimalist static site generator for Gemini Gemtext, HTML and Markdown, written in GNU Bash. + +[https://codeberg.org/snonux/gemtexter](https://codeberg.org/snonux/gemtexter) + ``` -=[ typewriters ]=- 1/98 .-------. @@ -18,7 +22,6 @@ ## Table of Contents * [⇢ Gemtexter 2.1.0 - Let's Gemtext again³](#gemtexter-210---let-s-gemtext-again) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ Why Bash?](#why-bash) * [⇢ ⇢ Switch to GPL3 license](#switch-to-gpl3-license) * [⇢ ⇢ Source code highlighting support](#source-code-highlighting-support) @@ -27,12 +30,6 @@ * [⇢ ⇢ HTML Mastodon verification support](#html-mastodon-verification-support) * [⇢ ⇢ More](#more) -## Introduction - -I proudly announce that I've released Gemtexter version `2.1.0`. What is Gemtexter? It's my minimalist static site generator for Gemini Gemtext, HTML and Markdown, written in GNU Bash. - -[https://codeberg.org/snonux/gemtexter](https://codeberg.org/snonux/gemtexter) - ## Why Bash? This project is too complex for a Bash script. Writing it in Bash was to try out how maintainable a "larger" Bash script could be. It's still pretty maintainable and helps me try new Bash tricks here and then! diff --git a/gemfeed/2023-09-25-dtail-usage-examples.md b/gemfeed/2023-09-25-dtail-usage-examples.md index 6eeb4521..595afb36 100644 --- a/gemfeed/2023-09-25-dtail-usage-examples.md +++ b/gemfeed/2023-09-25-dtail-usage-examples.md @@ -2,22 +2,6 @@ > Published at 2023-09-25T14:57:42+03:00 -## Table of Contents - -* [⇢ DTail usage examples](#dtail-usage-examples) -* [⇢ ⇢ Introduction](#introduction) -* [⇢ ⇢ Following logs](#following-logs) -* [⇢ ⇢ Aggregating logs](#aggregating-logs) -* [⇢ ⇢ How to use `dcat`](#how-to-use-dcat) -* [⇢ ⇢ How to use `dgrep`](#how-to-use-dgrep) -* [⇢ ⇢ How to use `dmap`](#how-to-use-dmap) -* [⇢ ⇢ How to use the DTail serverless mode](#how-to-use-the-dtail-serverless-mode) -* [⇢ ⇢ ⇢ Serverless map-reduce query](#serverless-map-reduce-query) -* [⇢ ⇢ ⇢ Aggregating CSV files](#aggregating-csv-files) -* [⇢ ⇢ ⇢ Other serverless commands](#other-serverless-commands) - -## Introduction - Hey there. As I am pretty busy this month personally (I am now on Paternity Leave) and as I still want to post once monthly, the blog post of this month will only be some DTail usage examples. They're from the DTail documentation, but not all readers of my blog may be aware of those! DTail is a distributed DevOps tool for tailing, grepping, catting logs and other text files on many remote machines at once which I programmed in Go. @@ -38,6 +22,22 @@ DTail is a distributed DevOps tool for tailing, grepping, catting logs and other | | ``` +## Table of Contents + +* [⇢ DTail usage examples](#dtail-usage-examples) +* [⇢ ⇢ Commands](#commands) +* [⇢ ⇢ Following logs](#following-logs) +* [⇢ ⇢ Aggregating logs](#aggregating-logs) +* [⇢ ⇢ How to use `dcat`](#how-to-use-dcat) +* [⇢ ⇢ How to use `dgrep`](#how-to-use-dgrep) +* [⇢ ⇢ How to use `dmap`](#how-to-use-dmap) +* [⇢ ⇢ How to use the DTail serverless mode](#how-to-use-the-dtail-serverless-mode) +* [⇢ ⇢ ⇢ Serverless map-reduce query](#serverless-map-reduce-query) +* [⇢ ⇢ ⇢ Aggregating CSV files](#aggregating-csv-files) +* [⇢ ⇢ ⇢ Other serverless commands](#other-serverless-commands) + +## Commands + DTail consists out of a server and several client binaries. In this post, I am showcasing their use! * Use `dtail` to follow logs diff --git a/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.md b/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.md index e9321c24..dd8c0167 100644 --- a/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.md +++ b/gemfeed/2023-10-29-kiss-static-web-photo-albums-with-photoalbum.sh.md @@ -2,6 +2,12 @@ > Published at 2023-10-29T22:25:04+02:00 +Once in a while, I share photos on the inter-web with either family and friends or on my The Irregular Ninja photo site. One hobby of mine is photography (even though I don't have enough time for it - so I am primarily a point-and-shoot photographer). + +I'm not particularly eager to use any photo social sharing platforms such as Flickr, 500px (I used them regularly in the past), etc., anymore. I value self-hosting, DIY and privacy (nobody should data mine my photos), and no third party should have any rights to my pictures. + +I value KISS (keep it simple and stupid) and simplicity. All that's required for a web photo album is some simple HTML and spice it up with CSS. No need for JavaScript, no need for a complex dynamic website. + ``` ___ .---------.._ ______!fsc!_....-' .g8888888p. '-------....._ @@ -22,7 +28,6 @@ ## Table of Contents * [⇢ KISS static web photo albums with `photoalbum.sh`](#kiss-static-web-photo-albums-with-photoalbumsh) -* [⇢ ⇢ Motivation](#motivation) * [⇢ ⇢ Introducing `photoalbum.sh`](#introducing-photoalbumsh) * [⇢ ⇢ Installation](#installation) * [⇢ ⇢ Setting it up](#setting-it-up) @@ -31,14 +36,6 @@ * [⇢ ⇢ HTML templates](#html-templates) * [⇢ ⇢ Conclusion](#conclusion) -## Motivation - -Once in a while, I share photos on the inter-web with either family and friends or on my The Irregular Ninja photo site. One hobby of mine is photography (even though I don't have enough time for it - so I am primarily a point-and-shoot photographer). - -I'm not particularly eager to use any photo social sharing platforms such as Flickr, 500px (I used them regularly in the past), etc., anymore. I value self-hosting, DIY and privacy (nobody should data mine my photos), and no third party should have any rights to my pictures. - -I value KISS (keep it simple and stupid) and simplicity. All that's required for a web photo album is some simple HTML and spice it up with CSS. No need for JavaScript, no need for a complex dynamic website. - ## Introducing `photoalbum.sh` `photoalbum.sh` is a minimal Bash (Bourne Again Shell) script for Unix-like operating systems (such as Linux) to generate static web photo albums. The resulting static photo album is pure HTML+CSS (without any JavaScript!). It is specially designed to be as simple as possible. diff --git a/gemfeed/2023-11-11-mind-management-book-notes.md b/gemfeed/2023-11-11-mind-management-book-notes.md index 9efc6f85..863f33e5 100644 --- a/gemfeed/2023-11-11-mind-management-book-notes.md +++ b/gemfeed/2023-11-11-mind-management-book-notes.md @@ -2,21 +2,6 @@ > Published at 2023-11-11T22:21:47+02:00 -## Table of Contents - -* [⇢ "Mind Management" book notes](#mind-management-book-notes) -* [⇢ ⇢ Introduction](#introduction) -* [⇢ ⇢ Empty slots in the calendar](#empty-slots-in-the-calendar) -* [⇢ ⇢ When you safe time...](#when-you-safe-time) -* [⇢ ⇢ Follow your mood](#follow-your-mood) -* [⇢ ⇢ Boosting creativity](#boosting-creativity) -* [⇢ ⇢ The right mood for the task at hand](#the-right-mood-for-the-task-at-hand) -* [⇢ ⇢ Creativity hacks](#creativity-hacks) -* [⇢ ⇢ Planning and strategizing](#planning-and-strategizing) -* [⇢ ⇢ Fake it until you make it. ](#fake-it-until-you-make-it-) - -## Introduction - These are my personal takeaways after reading "Mind Management" by David Kadavy. Note that the book contains much more knowledge wisdom and that these notes only contain points I personally found worth writing down. This is mainly for my own use, but you might find it helpful too. ``` @@ -31,6 +16,21 @@ These are my personal takeaways after reading "Mind Management" by David Kadavy. ''' ``` +## Table of Contents + +* [⇢ "Mind Management" book notes](#mind-management-book-notes) +* [⇢ ⇢ It's not about time management](#it-s-not-about-time-management) +* [⇢ ⇢ Empty slots in the calendar](#empty-slots-in-the-calendar) +* [⇢ ⇢ When you safe time...](#when-you-safe-time) +* [⇢ ⇢ Follow your mood](#follow-your-mood) +* [⇢ ⇢ Boosting creativity](#boosting-creativity) +* [⇢ ⇢ The right mood for the task at hand](#the-right-mood-for-the-task-at-hand) +* [⇢ ⇢ Creativity hacks](#creativity-hacks) +* [⇢ ⇢ Planning and strategizing](#planning-and-strategizing) +* [⇢ ⇢ Fake it until you make it. ](#fake-it-until-you-make-it-) + +## It's not about time management + Productivity isn't about time management - it's about mind management. When you put a lot of effort into something, there are: * The point of diminishing returns diff --git a/gemfeed/2023-12-10-bash-golf-part-3.md b/gemfeed/2023-12-10-bash-golf-part-3.md index 6e58a05e..f315e387 100644 --- a/gemfeed/2023-12-10-bash-golf-part-3.md +++ b/gemfeed/2023-12-10-bash-golf-part-3.md @@ -2,6 +2,12 @@ > Published at 2023-12-10T11:35:54+02:00 +This is the third blog post about my Bash Golf series. This series is random Bash tips, tricks, and weirdnesses I have encountered over time. + +[2021-11-29 Bash Golf Part 1](./2021-11-29-bash-golf-part-1.md) +[2022-01-01 Bash Golf Part 2](./2022-01-01-bash-golf-part-2.md) +[2023-12-10 Bash Golf Part 3 (You are currently reading this)](./2023-12-10-bash-golf-part-3.md) + ``` '\ '\ '\ . . |>18>> @@ -17,7 +23,6 @@ jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ## Table of Contents * [⇢ Bash Golf Part 3](#bash-golf-part-3) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ `FUNCNAME`](#funcname) * [⇢ ⇢ `:(){ :|:& };:`](#--) * [⇢ ⇢ Inner functions](#inner-functions) @@ -27,14 +32,6 @@ jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * [⇢ ⇢ Multi-line comments](#multi-line-comments) * [⇢ ⇢ Don't change it while it's executed](#don-t-change-it-while-it-s-executed) -## Introduction - -This is the third blog post about my Bash Golf series. This series is random Bash tips, tricks, and weirdnesses I have encountered over time. - -[2021-11-29 Bash Golf Part 1](./2021-11-29-bash-golf-part-1.md) -[2022-01-01 Bash Golf Part 2](./2022-01-01-bash-golf-part-2.md) -[2023-12-10 Bash Golf Part 3 (You are currently reading this)](./2023-12-10-bash-golf-part-3.md) - ## `FUNCNAME` `FUNCNAME` is an array you are looking for a way to dynamically determine the name of the current function (which could be considered the callee in the context of its own execution), you can use the special variable `FUNCNAME`. This is an array variable that contains the names of all shell functions currently in the execution call stack. The element `FUNCNAME[0]` holds the name of the currently executing function, `FUNCNAME[1]` the name of the function that called that, and so on. diff --git a/gemfeed/2024-02-04-from-babylon5.buetow.org-to-.cloud.md b/gemfeed/2024-02-04-from-babylon5.buetow.org-to-.cloud.md index dacb1fe5..f78a7d51 100644 --- a/gemfeed/2024-02-04-from-babylon5.buetow.org-to-.cloud.md +++ b/gemfeed/2024-02-04-from-babylon5.buetow.org-to-.cloud.md @@ -8,6 +8,23 @@ So, I migrated all of my Docker-based self-hosted services to AWS. Usually, I am [](./from-.org-to-.cloud/old-man-yells-at-cloud.jpg) +## Table of Contents + +* [⇢ From `babylon5.buetow.org` to `*.buetow.cloud`](#from-babylon5buetoworg-to-buetowcloud) +* [⇢ ⇢ The old `*.buetow.org` way](#the-old-buetoworg-way) +* [⇢ ⇢ I kept my `buetow.org` OpenBSD boxes alive](#i-kept-my-buetoworg-openbsd-boxes-alive) +* [⇢ ⇢ The new `*.buetow.cloud` way](#the-new-buetowcloud-way) +* [⇢ ⇢ The container apps](#the-container-apps) +* [⇢ ⇢ ⇢ `flux.buetow.cloud`](#fluxbuetowcloud) +* [⇢ ⇢ ⇢ `audiobookshelf.buetow.cloud`](#audiobookshelfbuetowcloud) +* [⇢ ⇢ ⇢ `syncthing.buetow.cloud`](#syncthingbuetowcloud) +* [⇢ ⇢ ⇢ `radicale.buetow.cloud`](#radicalebuetowcloud) +* [⇢ ⇢ ⇢ `bag.buetow.cloud`](#bagbuetowcloud) +* [⇢ ⇢ ⇢ `anki.buetow.cloud`](#ankibuetowcloud) +* [⇢ ⇢ ⇢ `vault.buetow.cloud`](#vaultbuetowcloud) +* [⇢ ⇢ ⇢ `bastion.buetow.cloud`](#bastionbuetowcloud) +* [⇢ ⇢ Conclusion](#conclusion) + ## 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). diff --git a/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.md b/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.md index 6c0421df..2d7a0873 100644 --- a/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.md +++ b/gemfeed/2024-03-03-a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang.md @@ -2,20 +2,20 @@ > Published at 2024-03-03T00:07:21+02:00 -## Table of Contents - -* [⇢ A fine Fyne Android app for quickly logging ideas programmed in Go](#a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-go) -* [⇢ ⇢ Introduction](#introduction) -* [⇢ ⇢ All easy-peasy?](#all-easy-peasy) - -## Introduction - I am an ideas person. I find myself frequently somewhere on the streets with an idea in my head but no paper journal noting it down. 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. [](a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-golang/logo-small.png) +## Table of Contents + +* [⇢ A fine Fyne Android app for quickly logging ideas programmed in Go](#a-fine-fyne-android-app-for-quickly-logging-ideas-programmed-in-go) +* [⇢ ⇢ Enter Quick logger](#enter-quick-logger) +* [⇢ ⇢ All easy-peasy?](#all-easy-peasy) + +## Enter Quick logger + 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! [https://codeberg.org/snonux/quicklogger](https://codeberg.org/snonux/quicklogger) diff --git a/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.md b/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.md index f45b5c14..84875f62 100644 --- a/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.md +++ b/gemfeed/2024-04-01-KISS-high-availability-with-OpenBSD.md @@ -2,6 +2,14 @@ > Published at 2024-03-30T22:12:56+02:00 +I have always wanted a highly available setup for my personal websites. I could have used off-the-shelf hosting solutions or hosted my sites in an AWS S3 bucket. I have used technologies like (in unsorted and slightly unrelated order) BGP, LVS/IPVS, ldirectord, Pacemaker, STONITH, scripted VIP failover via ARP, heartbeat, heartbeat2, Corosync, keepalived, DRBD, and commercial F5 Load Balancers for high availability at work. + +But still, my personal sites were never highly available. All those technologies are great for professional use, but I was looking for something much more straightforward for my personal space - something as KISS (keep it simple and stupid) as possible. + +It would be fine if my personal website wasn't highly available, but the geek in me wants it anyway. + +> PS: ASCII-art below reflects an OpenBSD under-water world with all the tools available in the base system. + ``` Art by Michael J. Penick (mod. by Paul B.) ACME-sky @@ -30,7 +38,6 @@ _____|_:_:_| (o)-(o) |_:_:_|--'`-. ,--. ksh under-water (((\'/ ## Table of Contents * [⇢ KISS high-availability with OpenBSD](#kiss-high-availability-with-openbsd) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ My auto-failover requirements](#my-auto-failover-requirements) * [⇢ ⇢ My HA solution](#my-ha-solution) * [⇢ ⇢ ⇢ Only OpenBSD base installation required](#only-openbsd-base-installation-required) @@ -42,16 +49,6 @@ _____|_:_:_| (o)-(o) |_:_:_|--'`-. ,--. ksh under-water (((\'/ * [⇢ ⇢ ⇢ Rex automation](#rex-automation) * [⇢ ⇢ More HA](#more-ha) -## Introduction - -I have always wanted a highly available setup for my personal websites. I could have used off-the-shelf hosting solutions or hosted my sites in an AWS S3 bucket. I have used technologies like (in unsorted and slightly unrelated order) BGP, LVS/IPVS, ldirectord, Pacemaker, STONITH, scripted VIP failover via ARP, heartbeat, heartbeat2, Corosync, keepalived, DRBD, and commercial F5 Load Balancers for high availability at work. - -But still, my personal sites were never highly available. All those technologies are great for professional use, but I was looking for something much more straightforward for my personal space - something as KISS (keep it simple and stupid) as possible. - -It would be fine if my personal website wasn't highly available, but the geek in me wants it anyway. - -> PS: ASCII-art reflects an OpenBSD under-water world with all the tools available in the base system. - ## My auto-failover requirements * Be OpenBSD-based (I prefer OpenBSD because of the cleanliness and good documentation) and rely on as few external packages as possible. diff --git a/gemfeed/2024-05-01-slow-productivity-book-notes.md b/gemfeed/2024-05-01-slow-productivity-book-notes.md index 138cec50..b53ac2ee 100644 --- a/gemfeed/2024-05-01-slow-productivity-book-notes.md +++ b/gemfeed/2024-05-01-slow-productivity-book-notes.md @@ -2,18 +2,6 @@ > Published at 2024-04-27T14:18:51+03:00 -## Table of Contents - -* [⇢ "Slow Productivity" book notes](#slow-productivity-book-notes) -* [⇢ ⇢ Introduction](#introduction) -* [⇢ ⇢ Pseudo-productivity and Shallow work](#pseudo-productivity-and-shallow-work) -* [⇢ ⇢ Accomplishments without burnout](#accomplishments-without-burnout) -* [⇢ ⇢ Do fewer things](#do-fewer-things) -* [⇢ ⇢ Work at a natural pace](#work-at-a-natural-pace) -* [⇢ ⇢ Obsess over quality ](#obsess-over-quality-) - -## Introduction - These are my personal takeaways after reading "Slow Productivity - The lost Art of Accomplishment Without Burnout" by Cal Newport. The case studies in this book were a bit long, but they appeared to be well-researched. I will only highlight the interesting, actionable items in the book notes. @@ -32,6 +20,18 @@ These notes are mainly for my own use, but you may find them helpful. ''' ``` +## Table of Contents + +* [⇢ "Slow Productivity" book notes](#slow-productivity-book-notes) +* [⇢ ⇢ It's not "slow productivity"](#it-s-not-slow-productivity) +* [⇢ ⇢ Pseudo-productivity and Shallow work](#pseudo-productivity-and-shallow-work) +* [⇢ ⇢ Accomplishments without burnout](#accomplishments-without-burnout) +* [⇢ ⇢ Do fewer things](#do-fewer-things) +* [⇢ ⇢ Work at a natural pace](#work-at-a-natural-pace) +* [⇢ ⇢ Obsess over quality ](#obsess-over-quality-) + +## It's not "slow productivity" + "Slow productivity" does not mean being less productive. Cal Newport wants to point out that you can be much more productive with "slow productivity" than you would be without it. It is a different way of working than most of us are used to in the modern workplace, which is hyper-connected and always online. ## Pseudo-productivity and Shallow work diff --git a/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.md b/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.md index 8230e707..8badb762 100644 --- a/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.md +++ b/gemfeed/2024-05-03-projects-i-currently-dont-have-time-for.md @@ -2,6 +2,8 @@ > Published at 2024-05-03T16:23:03+03:00 +Over the years, I have collected many ideas for my personal projects and noted them down. I am currently in the process of cleaning up all my notes and reviewing those ideas. I don’t have time for the ones listed here and won’t have any soon due to other commitments and personal projects. So, in order to "get rid of them" from my notes folder, I decided to simply put them in this blog post so that those ideas don't get lost. Maybe I will pick up one or another idea someday in the future, but for now, they are all put on ice in favor of other personal projects or family time. + ``` Art by Laura Brown @@ -18,7 +20,6 @@ Art by Laura Brown ## Table of Contents * [⇢ Projects I currently don't have time for](#projects-i-currently-don-t-have-time-for) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ Hardware projects I don't have time for](#hardware-projects-i-don-t-have-time-for) * [⇢ ⇢ ⇢ I use Arch, btw!](#i-use-arch-btw) * [⇢ ⇢ ⇢ OpenBSD home router](#openbsd-home-router) @@ -53,10 +54,6 @@ Art by Laura Brown * [⇢ ⇢ ⇢ Project secure](#project-secure) * [⇢ ⇢ ⇢ CPU utilisation is all wrong](#cpu-utilisation-is-all-wrong) -## Introduction - -Over the years, I have collected many ideas for my personal projects and noted them down. I am currently in the process of cleaning up all my notes and reviewing those ideas. I don’t have time for the ones listed here and won’t have any soon due to other commitments and personal projects. So, in order to "get rid of them" from my notes folder, I decided to simply put them in this blog post so that those ideas don't get lost. Maybe I will pick up one or another idea someday in the future, but for now, they are all put on ice in favor of other personal projects or family time. - ## Hardware projects I don't have time for ### I use Arch, btw! diff --git a/gemfeed/2024-06-23-terminal-multiplexing-with-tmux.md b/gemfeed/2024-06-23-terminal-multiplexing-with-tmux.md index 142d059a..c20d523a 100644 --- a/gemfeed/2024-06-23-terminal-multiplexing-with-tmux.md +++ b/gemfeed/2024-06-23-terminal-multiplexing-with-tmux.md @@ -2,6 +2,15 @@ > Published at 2024-06-23T22:41:59+03:00 +Tmux (Terminal Multiplexer) is a powerful, terminal-based tool that manages multiple terminal sessions within a single window. Here are some of its primary features and functionalities: + +* Session management +* Window and Pane management +* Persistent Workspace +* Customization + +[https://github.com/tmux/tmux/wiki](https://github.com/tmux/tmux/wiki) + ``` _______ |.-----.| @@ -17,7 +26,7 @@ jgs `-=========-`() ## Table of Contents * [⇢ Terminal multiplexing with `tmux`](#terminal-multiplexing-with-tmux) -* [⇢ ⇢ Introduction](#introduction) +* [⇢ ⇢ Before continuing...](#before-continuing) * [⇢ ⇢ Shell aliases](#shell-aliases) * [⇢ ⇢ The `tn` alias - Creating a new session](#the-tn-alias---creating-a-new-session) * [⇢ ⇢ ⇢ Cleaning up default sessions automatically](#cleaning-up-default-sessions-automatically) @@ -34,16 +43,7 @@ jgs `-=========-`() * [⇢ ⇢ Copy and paste workflow](#copy-and-paste-workflow) * [⇢ ⇢ Tmux configurations](#tmux-configurations) -## Introduction - -Tmux (Terminal Multiplexer) is a powerful, terminal-based tool that manages multiple terminal sessions within a single window. Here are some of its primary features and functionalities: - -* Session management -* Window and Pane management -* Persistent Workspace -* Customization - -[https://github.com/tmux/tmux/wiki](https://github.com/tmux/tmux/wiki) +## Before continuing... Before continuing to read this post, I encourage you to get familiar with Tmux first (unless you already know the basics). You can go through the official getting started guide: diff --git a/gemfeed/2024-07-05-random-weird-things.md b/gemfeed/2024-07-05-random-weird-things.md index cbe595ae..f8866ba7 100644 --- a/gemfeed/2024-07-05-random-weird-things.md +++ b/gemfeed/2024-07-05-random-weird-things.md @@ -2,10 +2,20 @@ > Published at 2024-07-05T10:59:59+03:00 +Every so often, I come across random, weird, and unexpected things on the internet. I thought it would be neat to share them here from time to time. As a start, here are ten of them. + +``` + /\_/\ +WHOA!! ( o.o ) + > ^ < + / - \ + / \ + /______\ \ +``` + ## Table of Contents * [⇢ Random Weird Things](#random-weird-things) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ 1. `bad.horse` traceroute](#1-badhorse-traceroute) * [⇢ ⇢ 2. ASCII cinema](#2-ascii-cinema) * [⇢ ⇢ 3. Netflix's Hello World application](#3-netflix-s-hello-world-application) @@ -18,19 +28,6 @@ * [⇢ ⇢ 9. `jq` is a functional programming language](#9-jq-is-a-functional-programming-language) * [⇢ ⇢ 10. Regular expression to verify email addresses](#10-regular-expression-to-verify-email-addresses) -## Introduction - -Every so often, I come across random, weird, and unexpected things on the internet. I thought it would be neat to share them here from time to time. As a start, here are ten of them. - -``` - /\_/\ -WHOA!! ( o.o ) - > ^ < - / - \ - / \ - /______\ \ -``` - ## 1. `bad.horse` traceroute Run traceroute to get the poem (or song). diff --git a/gemfeed/2024-07-07-the-stoic-challenge-book-notes.md b/gemfeed/2024-07-07-the-stoic-challenge-book-notes.md index ba326c66..55edb442 100644 --- a/gemfeed/2024-07-07-the-stoic-challenge-book-notes.md +++ b/gemfeed/2024-07-07-the-stoic-challenge-book-notes.md @@ -2,15 +2,6 @@ > Published at 2024-07-07T12:46:55+03:00 -## Table of Contents - -* [⇢ "The Stoic Challenge" book notes](#the-stoic-challenge-book-notes) -* [⇢ ⇢ Introduction](#introduction) -* [⇢ ⇢ Negative visualization](#negative-visualization) -* [⇢ ⇢ Oh, nice trick, you stoic "god"! ;-)](#oh-nice-trick-you-stoic-god--) - -## Introduction - These are my personal takeaways after reading "The Stoic Challenge: A Philosopher's Guide to Becoming Tougher, Calmer, and More Resilient" by William B. Irvine. ``` @@ -25,6 +16,15 @@ These are my personal takeaways after reading "The Stoic Challenge: A Philosoph ''' ``` +## Table of Contents + +* [⇢ "The Stoic Challenge" book notes](#the-stoic-challenge-book-notes) +* [⇢ ⇢ Got sets you up for a challenge](#got-sets-you-up-for-a-challenge) +* [⇢ ⇢ Negative visualization](#negative-visualization) +* [⇢ ⇢ Oh, nice trick, you stoic "god"! ;-)](#oh-nice-trick-you-stoic-god--) + +## Got sets you up for a challenge + Gods set you up for a challenge to see how resilient you are. Is getting angry worth the price? If you stay calm then you can find the optimal workaround for the obstacle. Stay calm even with big setbacks. Practice minimalism of negative emotions. Put a positive spin on everything. What should you do if someone wrong you? Don't get angry, there is no point in that, it just makes you suffer. Do the best what you got now and keep calm and carry on. A resilient person will refuse to play the role of a victim. You can develop the setback response skills. Turn a setback. e.g. a handycap, into a personal triumph. diff --git a/gemfeed/2024-08-05-typing-127.1-words-per-minute.md b/gemfeed/2024-08-05-typing-127.1-words-per-minute.md index 94900c69..25a484c4 100644 --- a/gemfeed/2024-08-05-typing-127.1-words-per-minute.md +++ b/gemfeed/2024-08-05-typing-127.1-words-per-minute.md @@ -2,6 +2,14 @@ > Published at 2024-08-05T17:39:30+03:00 +After work one day, I noticed some discomfort in my right wrist. Upon research, it appeared to be a mild case of Repetitive Strain Injury (RSI). Initially, I thought that this would go away after a while, but after a week it became even worse. This led me to consider potential causes such as poor posture or keyboard use habits. As an enthusiast of keyboards, I experimented with ergonomic concave ortholinear split keyboards. Wait, what?... + +* Concave: Some fingers are longer than others. A concave keyboard makes it so that the keycaps meant to be pressed by the longer fingers are further down (e.g., left middle finger for `e` on a Qwerty layout), and keycaps meant to be pressed by shorter fingers are further up (e.g., right pinky finger for the letter `p`). +* Ortholinear: The keys are arranged in a straight vertical line, unlike most conventional keyboards. The conventional keyboards still resemble the old typewriters, where the placement of the keys was optimized so that the typewriter would not jam. There is no such requirement anymore. +* Split: The keyboard is split into two halves (left and right), allowing one to place either hand where it is most ergonomic. + +After discovering ThePrimagen (I found him long ago, but I never bothered buying the same keyboard he is on) on YouTube and reading/watching a couple of reviews, I thought that as a computer professional, the equipment could be expensive anyway (laptop, adjustable desk, comfortable chair), so why not invest a bit more into the keyboard? I purchased myself the Kinesis Advantage360 Professional keyboard. + ``` ,---,---,---,---,---,---,---,---,---,---,---,---,---,-------, |1/2| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | + | ' | <- | @@ -20,7 +28,6 @@ ## Table of Contents * [⇢ Typing `127.1` words per minute (`>100wpm average`)](#typing-1271-words-per-minute-100wpm-average) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ Kinesis review](#kinesis-review) * [⇢ ⇢ ⇢ Top build quality](#top-build-quality) * [⇢ ⇢ ⇢ Bluetooth connectivity](#bluetooth-connectivity) @@ -46,16 +53,6 @@ * [⇢ ⇢ Upcoming custom Kinesis build](#upcoming-custom-kinesis-build) * [⇢ ⇢ Conclusion](#conclusion) -## Introduction - -After work one day, I noticed some discomfort in my right wrist. Upon research, it appeared to be a mild case of Repetitive Strain Injury (RSI). Initially, I thought that this would go away after a while, but after a week it became even worse. This led me to consider potential causes such as poor posture or keyboard use habits. As an enthusiast of keyboards, I experimented with ergonomic concave ortholinear split keyboards. Wait, what?... - -* Concave: Some fingers are longer than others. A concave keyboard makes it so that the keycaps meant to be pressed by the longer fingers are further down (e.g., left middle finger for `e` on a Qwerty layout), and keycaps meant to be pressed by shorter fingers are further up (e.g., right pinky finger for the letter `p`). -* Ortholinear: The keys are arranged in a straight vertical line, unlike most conventional keyboards. The conventional keyboards still resemble the old typewriters, where the placement of the keys was optimized so that the typewriter would not jam. There is no such requirement anymore. -* Split: The keyboard is split into two halves (left and right), allowing one to place either hand where it is most ergonomic. - -After discovering ThePrimagen (I found him long ago, but I never bothered buying the same keyboard he is on) on YouTube and reading/watching a couple of reviews, I thought that as a computer professional, the equipment could be expensive anyway (laptop, adjustable desk, comfortable chair), so why not invest a bit more into the keyboard? I purchased myself the Kinesis Advantage360 Professional keyboard. - ## Kinesis review For an in-depth review, have a look at this great article: @@ -1,6 +1,6 @@ # foo.zone -> This site was generated at 2024-08-26T22:12:05+03:00 by `Gemtexter` +> This site was generated at 2024-08-26T23:06:58+03:00 by `Gemtexter` ``` |\---/| diff --git a/notes/a-monks-guide-to-happiness.md b/notes/a-monks-guide-to-happiness.md index 420470f1..be51425d 100644 --- a/notes/a-monks-guide-to-happiness.md +++ b/notes/a-monks-guide-to-happiness.md @@ -2,6 +2,17 @@ > Last updated 21.5.2023 +## Table of Contents + +* [⇢ "A Monk's Guide to Happiness" book notes](#a-monk-s-guide-to-happiness-book-notes) +* [⇢ ⇢ Understanding Happiness](#understanding-happiness) +* [⇢ ⇢ The Role of Meditation](#the-role-of-meditation) +* [⇢ ⇢ Managing Thoughts and Emotions](#managing-thoughts-and-emotions) +* [⇢ ⇢ Practice and Discipline](#practice-and-discipline) +* [⇢ ⇢ Perspectives on Relationships and Interactions](#perspectives-on-relationships-and-interactions) +* [⇢ ⇢ Reflective Questions](#reflective-questions) +* [⇢ ⇢ Miscellaneous Guidelines](#miscellaneous-guidelines) + ## Understanding Happiness * Happiness is a skill we can train. diff --git a/notes/career-guide-and-soft-skills.md b/notes/career-guide-and-soft-skills.md index 9978544e..b49caaf0 100644 --- a/notes/career-guide-and-soft-skills.md +++ b/notes/career-guide-and-soft-skills.md @@ -2,16 +2,29 @@ > Published at 2023-07-17T04:56:20+03:00 +These notes are of two books by "John Sommez" I found helpful. I also added some of my own keypoints to it. These notes are mainly for my own use, but you might find them helpful, too. + +``` + ,.......... .........., + ,..,' '.' ',.., + ,' ,' : ', ', + ,' ,' : ', ', + ,' ,' : ', ', + ,' ,'............., : ,.............', ', +,' '............ '.' ............' ', + '''''''''''''''''';''';'''''''''''''''''' + ''' +``` + ## Table of Contents * [⇢ "Software Developmers Career Guide and Soft Skills" book notes](#software-developmers-career-guide-and-soft-skills-book-notes) -* [⇢ Introduction](#introduction) -* [⇢ Improve](#improve) -* [⇢ ⇢ Always learn new things](#always-learn-new-things) -* [⇢ ⇢ Set goals](#set-goals) -* [⇢ ⇢ Ratings](#ratings) -* [⇢ ⇢ Promotions](#promotions) -* [⇢ ⇢ Finish things](#finish-things) +* [⇢ ⇢ Improve](#improve) +* [⇢ ⇢ ⇢ Always learn new things](#always-learn-new-things) +* [⇢ ⇢ ⇢ Set goals](#set-goals) +* [⇢ ⇢ ⇢ Ratings](#ratings) +* [⇢ ⇢ ⇢ Promotions](#promotions) +* [⇢ ⇢ ⇢ Finish things](#finish-things) * [⇢ ⇢ Expand the empire](#expand-the-empire) * [⇢ ⇢ Be pragmatic and also manage your time](#be-pragmatic-and-also-manage-your-time) * [⇢ ⇢ ⇢ The quota system](#the-quota-system) @@ -35,25 +48,9 @@ * [⇢ ⇢ Testing](#testing) * [⇢ ⇢ Books to read](#books-to-read) -# Introduction - -These notes are of two books by "John Sommez" I found helpful. I also added some of my own keypoints to it. These notes are mainly for my own use, but you might find them helpful, too. - -``` - ,.......... .........., - ,..,' '.' ',.., - ,' ,' : ', ', - ,' ,' : ', ', - ,' ,' : ', ', - ,' ,'............., : ,.............', ', -,' '............ '.' ............' ', - '''''''''''''''''';''';'''''''''''''''''' - ''' -``` - -# Improve +## Improve -## Always learn new things +### Always learn new things When you learn something new, e.g. a programming language, first gather an overview, learn from multiple sources, play around and learn by doing and not consuming and form your own questions. Don't read too much upfront. A large amount of time is spent in learning technical skills which were never use. You want to have a practical set of skills you are actually using. You need to know 20 percent to get out 80 percent of the results. @@ -70,18 +67,18 @@ Fake it until you make it. But be honest about your abilities or lack of. There Boot camps: The advantage of a boot camp is to pragmatically learn things fast. We almost always overestimate what we can do in a day. Especially during boot camps. Connect to others during the boot camps -## Set goals +### Set goals Your own goals are important but the manager also looks at how the team performs and how someone can help the team perform better. Check whether you are on track with your goals every 2 weeks in order to avoid surprises for the annual review. Make concrete goals for next review. Track and document your progress. Invest in your education. Make your goals known. If you want something, then ask for it. Nobody but you knows what you want. -## Ratings +### Ratings That's a trap: If you have to rate yourself, that's a trap. That never works in an unbiased way. Rate yourself always the best way but rate your weakest part as high as possible minus one point. Rate yourself as good as you can otherwise. Nobody is putting for fun a gun on his own head. * Don't do peer rating, it can fire back on you. What if the colleague becomes your new boss? * Cooperate rankings are unfortunately HR guidelines and politics and only mirror a little your actual performance. -## Promotions +### Promotions The most valuable employees are the ones who make themselves obsolete and automate all away. Keep a safety net of 3 to 6 months of finances. Safe at least 10 percent of your earnings. Also, if you make money it does not mean that you have to spent more money. Is a new car better than a used car which both can bring you from A to B? Liability vs assets. @@ -93,7 +90,7 @@ The most valuable employees are the ones who make themselves obsolete and automa * If you want a raise be specific how much and know to back your demands. Don't make a thread and no ultimatums. * Best way for a promotion is to switch jobs. You can even switch back with a better salary. -## Finish things +### Finish things Hard work is necessary for accomplish results. However, work smarter not harder. Furthermore, working smart is not a substitute for working hard. Work both, hard and smart. diff --git a/notes/influence-wihout-authority.md b/notes/influence-wihout-authority.md index 9ee67e38..afdac330 100644 --- a/notes/influence-wihout-authority.md +++ b/notes/influence-wihout-authority.md @@ -6,6 +6,16 @@ These notes capture key strategies from "Influence Without Authority" by Allan R These are my personal notes, but maybe you will find them usefull too. +## Table of Contents + +* [⇢ "Influence without Authority" book notes](#influence-without-authority-book-notes) +* [⇢ ⇢ Building Relationships and Communication](#building-relationships-and-communication) +* [⇢ ⇢ Managing Emotions and Conflicts](#managing-emotions-and-conflicts) +* [⇢ ⇢ Strategic Influence and Reciprocity](#strategic-influence-and-reciprocity) +* [⇢ ⇢ Working with Management](#working-with-management) +* [⇢ ⇢ Adapting to Workplace Culture](#adapting-to-workplace-culture) +* [⇢ ⇢ Diplomacy and Discretion](#diplomacy-and-discretion) + ## Building Relationships and Communication * Make relationships before they are needed. A good reputation acts as a reserve for difficult times. diff --git a/notes/mind-management.md b/notes/mind-management.md index 3b9f4bf0..52c3c359 100644 --- a/notes/mind-management.md +++ b/notes/mind-management.md @@ -2,21 +2,6 @@ > Published at 2023-11-11T22:21:47+02:00 -## Table of Contents - -* [⇢ "Mind Management" book notes](#mind-management-book-notes) -* [⇢ ⇢ Introduction](#introduction) -* [⇢ ⇢ Empty slots in the calendar](#empty-slots-in-the-calendar) -* [⇢ ⇢ When you safe time...](#when-you-safe-time) -* [⇢ ⇢ Follow your mood](#follow-your-mood) -* [⇢ ⇢ Boosting creativity](#boosting-creativity) -* [⇢ ⇢ The right mood for the task at hand](#the-right-mood-for-the-task-at-hand) -* [⇢ ⇢ Creativity hacks](#creativity-hacks) -* [⇢ ⇢ Planning and strategizing](#planning-and-strategizing) -* [⇢ ⇢ Fake it until you make it. ](#fake-it-until-you-make-it-) - -## Introduction - These are my personal takeaways after reading "Mind Management" by David Kadavy. Note that the book contains much more knowledge wisdom and that these notes only contain points I personally found worth writing down. This is mainly for my own use, but you might find it helpful too. ``` @@ -31,6 +16,21 @@ These are my personal takeaways after reading "Mind Management" by David Kadavy. ''' ``` +## Table of Contents + +* [⇢ "Mind Management" book notes](#mind-management-book-notes) +* [⇢ ⇢ It's not about time management](#it-s-not-about-time-management) +* [⇢ ⇢ Empty slots in the calendar](#empty-slots-in-the-calendar) +* [⇢ ⇢ When you safe time...](#when-you-safe-time) +* [⇢ ⇢ Follow your mood](#follow-your-mood) +* [⇢ ⇢ Boosting creativity](#boosting-creativity) +* [⇢ ⇢ The right mood for the task at hand](#the-right-mood-for-the-task-at-hand) +* [⇢ ⇢ Creativity hacks](#creativity-hacks) +* [⇢ ⇢ Planning and strategizing](#planning-and-strategizing) +* [⇢ ⇢ Fake it until you make it. ](#fake-it-until-you-make-it-) + +## It's not about time management + Productivity isn't about time management - it's about mind management. When you put a lot of effort into something, there are: * The point of diminishing returns diff --git a/notes/never-split-the-difference.md b/notes/never-split-the-difference.md index f69e7774..5b091d53 100644 --- a/notes/never-split-the-difference.md +++ b/notes/never-split-the-difference.md @@ -16,6 +16,21 @@ These are my personal takeaways after reading "Never split the difference" by Ch ''' ``` +## Table of Contents + +* [⇢ "Never split the difference" book notes](#never-split-the-difference-book-notes) +* [⇢ ⇢ Tactical listening, spreading empathy](#tactical-listening-spreading-empathy) +* [⇢ ⇢ Mindset of discovery](#mindset-of-discovery) +* [⇢ ⇢ ⇢ More tips ](#more-tips-) +* [⇢ ⇢ "No" starts the conversation](#no-starts-the-conversation) +* [⇢ ⇢ Win-win](#win-win) +* [⇢ ⇢ On Deadlines](#on-deadlines) +* [⇢ ⇢ Analyse the opponent](#analyse-the-opponent) +* [⇢ ⇢ Use different ways of saying "no."](#use-different-ways-of-saying-no) +* [⇢ ⇢ Calibrated question](#calibrated-question) +* [⇢ ⇢ The black swan ](#the-black-swan-) +* [⇢ ⇢ More](#more) + ## Tactical listening, spreading empathy Be a mirror, copy each other to be comfy with each other to build up trust. Mirroring is mainly body language. A mirror is to repeat the words the other just said. Simple but effective. diff --git a/notes/slow-productivity.md b/notes/slow-productivity.md index 2a7df242..b4099378 100644 --- a/notes/slow-productivity.md +++ b/notes/slow-productivity.md @@ -2,18 +2,6 @@ > Published at 2024-04-27T14:18:51+03:00 -## Table of Contents - -* [⇢ "Slow Productivity" book notes](#slow-productivity-book-notes) -* [⇢ ⇢ Introduction](#introduction) -* [⇢ ⇢ Pseudo-productivity and Shallow work](#pseudo-productivity-and-shallow-work) -* [⇢ ⇢ Accomplishments without burnout](#accomplishments-without-burnout) -* [⇢ ⇢ Do fewer things](#do-fewer-things) -* [⇢ ⇢ Work at a natural pace](#work-at-a-natural-pace) -* [⇢ ⇢ Obsess over quality ](#obsess-over-quality-) - -## Introduction - These are my personal takeaways after reading "Slow Productivity - The lost Art of Accomplishment Without Burnout" by Cal Newport. The case studies in this book were a bit long, but they appeared to be well-researched. I will only highlight the interesting, actionable items in the book notes. @@ -32,6 +20,18 @@ These notes are mainly for my own use, but you may find them helpful. ''' ``` +## Table of Contents + +* [⇢ "Slow Productivity" book notes](#slow-productivity-book-notes) +* [⇢ ⇢ It's not "slow productivity"](#it-s-not-slow-productivity) +* [⇢ ⇢ Pseudo-productivity and Shallow work](#pseudo-productivity-and-shallow-work) +* [⇢ ⇢ Accomplishments without burnout](#accomplishments-without-burnout) +* [⇢ ⇢ Do fewer things](#do-fewer-things) +* [⇢ ⇢ Work at a natural pace](#work-at-a-natural-pace) +* [⇢ ⇢ Obsess over quality ](#obsess-over-quality-) + +## It's not "slow productivity" + "Slow productivity" does not mean being less productive. Cal Newport wants to point out that you can be much more productive with "slow productivity" than you would be without it. It is a different way of working than most of us are used to in the modern workplace, which is hyper-connected and always online. ## Pseudo-productivity and Shallow work diff --git a/notes/the-obstacle-is-the-way.md b/notes/the-obstacle-is-the-way.md index 1a42361e..22a0423d 100644 --- a/notes/the-obstacle-is-the-way.md +++ b/notes/the-obstacle-is-the-way.md @@ -2,10 +2,23 @@ > Published at 2023-05-06T17:23:16+03:00 +These are my personal takeaways after reading "The Obstacle Is the Way" by Ryan Holiday. This is mainly for my own use, but you might find it helpful too. + +``` + ,.......... .........., + ,..,' '.' ',.., + ,' ,' : ', ', + ,' ,' : ', ', + ,' ,' : ', ', + ,' ,'............., : ,.............', ', +,' '............ '.' ............' ', + '''''''''''''''''';''';'''''''''''''''''' + ''' +``` + ## Table of Contents * [⇢ "The Obstacle is the Way" book notes](#the-obstacle-is-the-way-book-notes) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ Reframe your perspective](#reframe-your-perspective) * [⇢ ⇢ Embrace rationality](#embrace-rationality) * [⇢ ⇢ Control your response](#control-your-response) @@ -19,23 +32,6 @@ * [⇢ ⇢ Love everything that happens](#love-everything-that-happens) * [⇢ ⇢ Conclusion](#conclusion) -## Introduction - -These are my personal takeaways after reading "The Obstacle Is the Way" by Ryan Holiday. This is mainly for my own use, but you might find it helpful too. - - -``` - ,.......... .........., - ,..,' '.' ',.., - ,' ,' : ', ', - ,' ,' : ', ', - ,' ,' : ', ', - ,' ,'............., : ,.............', ', -,' '............ '.' ............' ', - '''''''''''''''''';''';'''''''''''''''''' - ''' -``` - "The obstacle is the way" is a powerful statement that encapsulates the wisdom of turning challenges into opportunities for growth and success. We will explore using obstacles as fuel, transforming weaknesses into strengths, and adopting a mindset that allows us to be creative and persistent in the face of adversity. ## Reframe your perspective diff --git a/notes/the-power-of-neuroplasticity.md b/notes/the-power-of-neuroplasticity.md index 8ec93e53..0b1a115c 100644 --- a/notes/the-power-of-neuroplasticity.md +++ b/notes/the-power-of-neuroplasticity.md @@ -2,6 +2,19 @@ These notes capture key points from "The Power of Neuroplasticity" by Shad Helmstetter. These are for my personal use, but you might find them useful, too. +## Table of Contents + +* [⇢ "The Power of Neuroplasticity" book notes](#the-power-of-neuroplasticity-book-notes) +* [⇢ ⇢ Your thoughts can influence changes in your brain](#your-thoughts-can-influence-changes-in-your-brain) +* [⇢ ⇢ Wire on what we can do and not what we can't](#wire-on-what-we-can-do-and-not-what-we-can-t) +* [⇢ ⇢ Choose the friends you spend time woth carefully](#choose-the-friends-you-spend-time-woth-carefully) +* [⇢ ⇢ Beware of the brain's autopilot](#beware-of-the-brain-s-autopilot) +* [⇢ ⇢ Cultiate a positive mindset](#cultiate-a-positive-mindset) +* [⇢ ⇢ The monkey mind](#the-monkey-mind) +* [⇢ ⇢ Wiring good attitudes](#wiring-good-attitudes) +* [⇢ ⇢ Techniques to train the brain](#techniques-to-train-the-brain) +* [⇢ ⇢ Meditation ](#meditation-) + ## Your thoughts can influence changes in your brain Your thoughts can influence changes in your brain, a concept derived from the field of neuroscience. It's observed that your brain can rewire itself based on your thoughts and it doesn't remain fixed once you reach adulthood. Its plasticity allows it to adapt even in old age - yes, you can teach an old dog new tricks. If you want to change your life, you need to rewire your brain. This rewiring is a continuous feedback loop. You can program your future self by focusing on your desired outcomes, and your brain will then unconsciously guide you toward them. For instance, if you ruminate negatively about an upcoming presentation, you're likely to perform poorly. You would perform significantly better if you had approached it with a positive mindset. Ultimately, you become what you think about most. diff --git a/notes/the-stoic-challenge.md b/notes/the-stoic-challenge.md index 50ad3cdb..d08c1ce1 100644 --- a/notes/the-stoic-challenge.md +++ b/notes/the-stoic-challenge.md @@ -2,15 +2,6 @@ > Published at 2024-07-07T12:46:55+03:00 -## Table of Contents - -* [⇢ "The Stoic Challenge" book notes](#the-stoic-challenge-book-notes) -* [⇢ ⇢ Introduction](#introduction) -* [⇢ ⇢ Negative visualization](#negative-visualization) -* [⇢ ⇢ Oh, nice trick, you stoic "god"! ;-)](#oh-nice-trick-you-stoic-god--) - -## Introduction - These are my personal takeaways after reading "The Stoic Challenge: A Philosopher's Guide to Becoming Tougher, Calmer, and More Resilient" by William B. Irvine. ``` @@ -25,6 +16,15 @@ These are my personal takeaways after reading "The Stoic Challenge: A Philosoph ''' ``` +## Table of Contents + +* [⇢ "The Stoic Challenge" book notes](#the-stoic-challenge-book-notes) +* [⇢ ⇢ Got sets you up for a challenge](#got-sets-you-up-for-a-challenge) +* [⇢ ⇢ Negative visualization](#negative-visualization) +* [⇢ ⇢ Oh, nice trick, you stoic "god"! ;-)](#oh-nice-trick-you-stoic-god--) + +## Got sets you up for a challenge + Gods set you up for a challenge to see how resilient you are. Is getting angry worth the price? If you stay calm then you can find the optimal workaround for the obstacle. Stay calm even with big setbacks. Practice minimalism of negative emotions. Put a positive spin on everything. What should you do if someone wrong you? Don't get angry, there is no point in that, it just makes you suffer. Do the best what you got now and keep calm and carry on. A resilient person will refuse to play the role of a victim. You can develop the setback response skills. Turn a setback. e.g. a handycap, into a personal triumph. diff --git a/uptime-stats.md b/uptime-stats.md index 538d1f69..e5f61506 100644 --- a/uptime-stats.md +++ b/uptime-stats.md @@ -1,6 +1,6 @@ # My machine uptime stats -> This site was last updated at 2024-08-26T22:12:05+03:00 +> This site was last updated at 2024-08-26T23:06:58+03:00 The following stats were collected via `uptimed` on all of my personal computers over many years and the output was generated by `guprecords`, the global uptime records stats analyser of mine. |
