Decorate docker logs with multitail

Colorscheme from ~/.multitailrc

colorscheme:docker
# cs_re:cyan:.*\.(INFO|DEBUG).*
cs_re:red:.*\[error\].*
cs_re:yellow:.*\.(ERROR|WARNING).*
cs_re:white,red,bold:.* HTTP.* 500 .*
cs_re:white,red,bold:.*\.(ALERT|CRITICAL|EMERG|FATAL).*
cs_re:white,red,bold:.*\[php.*(warn|crit)\].*

Then run multitail command

multitail -cS docker -l 'docker-compose logs -f app1 app2'

Inspired by https://gist.github.com/Stubbs/9504462 and https://devsrealm.com/cloud-computing/ubuntu/monitoring-multi-files-in-realtime-with-multitail-ubuntu/

To scroll back press “b”

To switch colorscheme just press “c” and select

Transmission daemon wait for mount

After reboot I had to manually start transmission due ConditionPathIsDirectory=/media/usb-4tb/torrent

Finally found the solution at https://unix.stackexchange.com/a/247547/39470

With systemctl list-units --type=mount just list your mounts and add the unit name to After=

My /etc/systemd/system/transmission.service looks the following now

[Unit]
Description=Transmission BitTorrent Daemon
After=network.target systemd-networkd-wait-online.service media-usb\x2d4tb.mount
ConditionPathIsDirectory=/media/usb-4tb/torrent

StartLimitIntervalSec=500
StartLimitBurst=3 # Only 3 retries of restart

[Service]
User=transmission
Type=notify
ExecStart=/usr/bin/transmission-daemon -f --log-error
ExecReload=/bin/kill -s HUP $MAINPID
NoNewPrivileges=true
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

Fixing Java Runtime

Wanted to try Bisq, but got error

bisq-desktop                                                                                                               [7:45:13]
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: bisq/desktop/app/BisqAppMain has been compiled by a more recent version of the Java Runtime (class file version 54.0), this version of the Java Runtime only recognizes class file versions up to 52.0
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601)

Solution was to set JAVA_HOME before running it

JAVA_HOME=/usr/lib/jvm/java-11-openjdk bisq-desktop

I ended up aliasing it

alias bisq-desktop='JAVA_HOME=/usr/lib/jvm/java-11-openjdk bisq-desktop'

Set Brave browser as default in Linux

You might test/check if it isn’t already with

$ xdg-mime query default x-scheme-handler/http
google-chrome.desktop
$ xdg-settings get default-web-browser
brave-browser.desktop
$ echo $BROWSER
/usr/bin/brave

To set xdg-mime

$ xdg-mime default brave-browser.desktop x-scheme-handler/http
$ xdg-mime default brave-browser.desktop x-scheme-handler/https

Setting BROWSER env via .bashrc or .zshrc just append export BROWSER=/usr/bin/brave

Monitor remote service via LibreNMS

I wanted to monitor with LibreNMS if transmission-daemon process is running . On the remote host I had to install https://www.monitoring-plugins.org/ due check_procs command

Test monitoring command

$ cd /usr/lib/monitoring-plugins
$ ./check_procs -c 1:1 -a transmission-daemon
PROCS OK: 1 process with args 'transmission-daemon' | procs=1;;1:1;0;

Also on the remote host I had to install LibreNMS agent Check_MK which pushes data to LibreNMS server. Had to download and configure check_mrpe

wget https://raw.githubusercontent.com/librenms/librenms-agent/master/agent-local/check_mrpe
mv check_mrpe /usr/lib/check_mk_agent/local
chmod +x /usr/lib/check_mk_agent/local/check_mrpe
echo "transmission /usr/lib/monitoring-plugins/check_procs -c 1:1 -a transmission-daemon" > /etc/check_mk/mrpe.cfg

To monitor transmission service I had to Add service in LibreNMS service, select type mrpe and fill parameters

Save tabs/context in PHPStorm

Today I wanted to save open file tabs in PHPStorm due task switch so if I had to come back to the previous task I would have some guidance. Fortunately PHPStorm has some help for this, read https://www.jetbrains.com/help/phpstorm/managing-tasks-and-context.html#work-with-context

Just enable plugin Task management

After restarting you should see Tasks & Contexts under Tools

Migrating back to Xiaomi smartphone

After some hours, days of review/research the winner is Xiaomi Mi Note 10 Lite
https://www.gsmarena.com/xiaomi_mi_note_10_lite-10183.php
My current Sony Xperia XZ 2 https://www.gsmarena.com/sony_xperia_xz2-9081.php was great during 2 years of usage, but instead having IP68 https://en.wikipedia.org/wiki/IP_Code the Rotate a Brightness adaptation doesn’t work anymore 😦
My research candidates were OnePlus 7T (great HW and UI), Nokia 7.2 (due Android One participation) and Pixel 4
OnePlus folded due still high price, Nokia, because of the UI of bottom navigation and Google Pixel 4 is too expensive for the included hardware.

So Xiaomi became the winner due hardware, but also due previous good experience. My son inherited the Xiaomi Redmi 4A https://www.gsmarena.com/xiaomi_redmi_4a-8420.php from me and after his “caring” usage (5 year old) the phone still works (also the adaptive brightness and rotate)

DSC_0112

Hope that Android Auto will work properly.

Notes from Calibrating Memo of Howard Marks

“What I would to is figure out how much you’ll want to have invested by the time the bottom is reached”
 
“All great investments begin in discomfort. One thing we know is that there’s great discomfort today”
 
“Oaktree explicitly rejects the notion of waiting for the bottom; we buy when we can access value cheap.”
 
“The investor’s goal should be to make a large number of good buys, not just a few perfect ones.”
 

Mosaic/grid view of RTSP streams with ffmpeg

Finally found a solution for grid/mosaic playback of RTSP streams.

ffmpeg -rtsp_transport tcp \
-i rtsp://smartiptv:PASSWORD@192.168.2.3:6911/Streaming/Channels/101 \
-i rtsp://smartiptv:PASSWORD@192.168.2.3:6911/Streaming/Channels/201 \
-i rtsp://smartiptv:PASSWORD@192.168.2.3:6911/Streaming/Channels/301 \
-i rtsp://smartiptv:PASSWORD@192.168.2.3:6911/Streaming/Channels/401 \
-filter_complex "
nullsrc=size=1920×1080 [base];
[0:v] setpts=PTS-STARTPTS, scale=960×540 [upperleft];
[1:v] setpts=PTS-STARTPTS, scale=960×540 [upperright];
[2:v] setpts=PTS-STARTPTS, scale=960×540 [lowerleft];
[3:v] setpts=PTS-STARTPTS, scale=960×540 [lowerright];
[base][upperleft] overlay=shortest=1 [tmp1];
[tmp1][upperright] overlay=shortest=1:x=960 [tmp2];
[tmp2][lowerleft] overlay=shortest=1:y=540 [tmp3];
[tmp3][lowerright] overlay=shortest=1:x=960:y=540
" \
-c:v libx264 -preset superfast -crf 18 -f matroska – | ffplay –

Source: https://trac.ffmpeg.org/wiki/Create%20a%20mosaic%20out%20of%20several%20input%20videos