Skip to content

LanguageTool

Schon seit längerem setze ich LanguageTool zur Grammatik- und Rechtschreibprüfung ein und es hat mir mehr als einmal geholfen, halbwegs korrekte Texte zu verfassen.

Das Tool besteht aus einem Plugin für gängige Software, wie beispielsweise Webbrowser und Textverarbeitung und einer Serverkomponente, die man selber hosten kann oder die in "der Cloud" (tm) liegt. Momentan schreibe ich zu wenig, als dass sich ein Premium-Account für mich lohnen würde, allerdings bietet dieser zusätzliche Features.

Bei mir kommen beispielsweise die Plugins für Firefox und LibreOffice zum Einsatz. Für LaTeX setze ich das Visual Studio Code Plugin LanguageTool Extension und die dazu passenden Sprachen Deutsch und Englisch ein. Achtung: der Autor der VSCode-Extensions ist leider verstorben und daher werden sie nicht weiterentwickelt. Momentan funktionieren sie aber noch sehr gut. Für Thunderbird gibt es übrigens auch ein Plugin, was ich allerdings nicht getestet habe, weil ich kein Thunderbird benutze.

Wenn man den Server lokal betreiben will - das mache ich auf allen meinen Linux-Clients - benötigt man ein installiertes Java und den LanguageTool embedded HTTP Server, den man sich unter diesem Link herunterladen kann.

Ein aktuelles Java, kann man sich von der Webseite des OpenJDK-Projektes herunterladen.

Installation Java.

cd ~/Downloads

curl -LO https://download.java.net/java/GA/jdk17.0.1/2a2082e5a09d4267845be086888add4f/12/GPL/openjdk-17.0.1_linux-x64_bin.tar.gz

tar xzf openjdk-17.0.1_linux-x64_bin.tar.gz

ln -s jdk-17.0.1 java

Anmerkung: Wenn ein aktuelleres oder anderes Java benutzt werden soll, muss man einfach den Link umsetzen.

Funktionstest.

export JAVA_HOME=~/Downloads/java

export PATH=${JAVA_HOME}/bin:${PATH}

java -version
openjdk version "17.0.1" 2021-10-19
OpenJDK Runtime Environment (build 17.0.1+12-39)
OpenJDK 64-Bit Server VM (build 17.0.1+12-39, mixed mode, sharing)

Installation LanguageTool-Server.

cd ~/Downloads

curl -LO https://languagetool.org/download/LanguageTool-5.5.zip

unzip LanguageTool-5.5.zip

ln -s LanguageTool-5.5 LanguageTool

Sollte die aktuelle Version mit einem Plugin oder einer Extension nicht funktionieren, so findet man vorhergehende Versionen auf der Download-Seite.

Funktionstest.

Für den Funktionstest würde ich gleich ein Start-Skript - hier ~/Downloads/LanguageTool.bash - schreiben, dass man später auch für das automatische Starten des Servers via systemd verwenden kann.

#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail

export JAVA_HOME=~/Downloads/java

cd ~/Downloads/LanguageTool

${JAVA_HOME}/bin/java -cp languagetool-server.jar \
    org.languagetool.server.HTTPServer --port 8081 --allow-origin "*"

Getestet wird mit dem folgenden curl-Aufruf, der JSON zurückliefert.

curl --noproxy localhost -d "language=en-US" -d "text=a simple test" http://localhost:8081/v2/check

{"software":{"name":"LanguageTool","version":"5.5","buildDate":"2021-10-02 12:33:00 +0000","apiVersion":1,"premium":false,"premiumHint":"You might be missing errors only the Premium version can find. Contact us at support<at>languagetoolplus.com.","status":""},"warnings":{"incompleteResults":false},"language":{"name":"English (US)","code":"en-US","detectedLanguage":{"name":"French","code":"fr","confidence":0.815771}},"matches":[{"message":"This sentence does not start with an uppercase letter.","shortMessage":"","replacements":[{"value":"A"}],"offset":0,"length":1,"context":{"text":"a simple test","offset":0,"length":1},"sentence":"a simple test","type":{"typeName":"Other"},"rule":{"id":"UPPERCASE_SENTENCE_START","description":"Checks that a sentence starts with an uppercase letter","issueType":"typographical","category":{"id":"CASING","name":"Capitalization"}},"ignoreForIncompleteSentence":true,"contextForSureMatch":-1}]}

Automatisches Starten mit systemd.

Erstellen der Datei /etc/systemd/system/LanguageTool.service mit folgendem Inhalt ("EuerUser" und "EuerHome" müssen ent1sprechend ersetzt werden). Zu systemd-user-services mache ich einmal einen separaten Artikel.

[Unit]
Description=LanguageTool
Wants=network.target
After=network.target

[Service]
User=
Type=simple
Restart=on-failure
RestartSec=10s
ExecStart=/Downloads/LanguageTool.bash
WorkingDirectory=/Downloads/LanguageTool

[Install]
WantedBy=multi-user.target

Aktivieren des Services.

sudo systemctl daemon-reload
sudo systemctl enable --now LanguageTool

sudo systemctl status LanguageTool
Viel Spass!

Föderation

Viele Menschen sehen das Folgende anders, aber das hier ist meine Meinung und ich bin auf den Austausch mit Euch gespannt.

XMPP zeigt leider alle Nachteile, die eine Föderation mit sich bringt. Es ist ein geniales Protokoll und die Antwort auf fast alles, was Messaging angeht (Matrix hat das aber mittlerweile überholt).

Randbemerkung an dieser Stelle: Das XMPP-Protokoll wird von einigen proprietären Messengern wie beispielsweise dem Facebook Messenger verwendet, allerdings ohne Kontakt "nach aussen" zu anderen XMPP-Servern.

Es gibt leider mit Conversations nur einen einzigen Referenzclient und nur auf Android. Clients auf anderen Betriebssystemen kommen weder einmal annähernd daran, noch schafft man es, dass man den gleichen Nachrichtenstand auf allen Plattformen hat.

Unterschiedliche Serverimplementationen führen dazu, dass man einen Compliancetester benötigt, um festzustellen, welche Spezifikationen durch einen bestimmten Server unterstützt werden.

Matrix macht das insofern richtig, als es mit Element (früher Riot) eine Client-Referenzimplementation für nahezu alle Plattformen gibt und dass es (derzeit) nur eine Serverimplementation gibt.

Matrix ist also in dem Sinne föderiert, dass es jeder hosten kann, aber (noch) nicht so, dass man alles mit jedem Client tun kann (mit der Referenzimplementation allerdings schon).

Das Fediverse entwickelt sich leider in die gleiche Richtung, da hat sich Mastodon nahezu durchgesetzt (was ich nicht wahrhaben wollte).

Für föderierte Systeme wird ja häufig das Beispiel E-Mail gebracht. Das Beispiel ist gut, weil es viele verschiedene E-Mail-Server - Anbieter und Software - gibt. Und ebenfalls sehr viele E-Mail-Clients, da ist für jeden Geschmack etwas dabei.

Was häufig verschwiegen wird, ist, dass das Protokoll stagniert und viele sinnvolle Erweiterungen nicht implementiert werden. Als ein Beispiel von vielen sei hier Verschlüsselung zu und von SMTP-Servern genannt. Es gibt immer noch die Empfehlung, unverschlüsselte Verbindungen zuzulassen, weil nicht alle Mailserver verschlüsselte Verbindungen zulassen. Das sagt schon fast alles.

Web-Suchmaschinen

Malte hat in seinem Blog die neue Brave-Suchmaschine getestet und ist sehr angetan davon.

Aufgrund dieser Bewertung des Brave-Browsers stehe ich dem skeptisch gegenüber, weil Suchmaschine und Browser ein ähnliches Businessmodell haben.

Natürlich habe ich schon sehr viele Suchmaschinen benutzt. Mit Qwant bin ich leider nicht warm geworden. Ecosia fand ich noch klasse, aber da haben irgendwann die Suchergebnisse nicht mehr gepasst, vermutlich wurde am Index geschraubt.

Momentan bin ich (wieder) bei DuckDuckGo.

Über den Blogartikel von Malte habe ich mir aus Neugierde die Comparison of web search engines angeschaut (generell sind die "Comparison"-Seiten der englischsprachigen Wikipedia eine gute Informationsquelle) und bin auf die Suchmaschine Mojeek gestossen, von der ich noch nie etwas gehört habe.

Die werde ich mal testen, herausgefunden habe ich schon, dass sie "sauschnell" ist.

Update: Suchergebnisse von Mojeek für mich nicht gut genug.

Meine Podcast-Geschichte

podcast

In den letzten Wochen wurde ich häufiger gefragt, wie ich zum Podcasting gekommen bin. Mittlerweile bin ich - mit Unterbrechungen - schon zwölf Jahre in unterschiedlichen Konstellationen dabei.

Der Ursprung liegt interessanterweise hier im Blog und in meinem Ubuntu-Engagement, beide starteten 2005 (wow, das ist lange her).

Bevor ich das Engagement deutlich herunterfuhr, war dieses Blog einmal sehr erfolgreich und hatte ordentlich Reichweite. Das lag zum Teil auch daran, dass es noch nicht so wahnsinnig viele Blogs gab und diese durch die Blogosphäre stark miteinander vernetzt waren.

Im Jahr 2008 bin ich in die Schweiz ausgewandert und, um Menschen kennenzulernen, habe ich an einem regelmässigen Bloggertreffen namens "Bloggy Friday" teilgenommen.

Auf einem dieser Treffen habe ich Roman Hanhart kennengelernt, damals ebenfalls ein sehr erfolgreicher Blogger ("Yoda") und ebenfalls sehr aktiv im Ubuntu-Umfeld. Wir "kannten" uns vorher schon virtuell und waren uns auf dem Treffen gleich sympathisch, sodass es eigentlich nur logisch war, dass wir uns darauf verständigt haben, einmal etwas zusammen zu machen.

Roman war damals aktiv für RadioTux, einem der ältesten deutschen Podcasts (schon lange bevor es das Wort "Podcast" gab), und schlug vor, dass wir einen gemeinsamen Podcast erstellen sollten. Für mich war das Neuland, aber ich war sehr interessiert und so erblickte die erste Episode von DeimHart am vierten Mai 2009 das Licht der Welt. Für die Star-Wars-Fans unter Euch, ja wirklich "May, the 4th", was eher zufällig passiert ist (obwohl wir zwei ebenfalls Star-Wars-Fans sind).

Roman und ich haben uns mit DeimHart "verwirklichen" können, wir hatten gemeinsam sehr viel über Audio- und Audiosetups gelernt, hatten viele Formate ausprobiert und damit DeimHart zu einem der erfolgreichsten deutschsprachigen Podcasts im Bereich Linux, Open-Source-Software und Gesellschaft gemacht.

Wir durften viele Kritiker Lügen strafen, dass ein solcher Podcast nur unter Einsatz von Linux nicht möglich wäre. DeimHart mussten wir leider Anfang 2015 nach einer schweren Erkrankung von Roman einstellen, es war eine tolle Zeit.

In der DeimHart-Zeit liess ich mich von Roman anstecken, habe Ingo Ebel kennengelernt und eine Zeit lang bei RadioTux mitgemacht, den Anfang nahm das mit Folge 100, in der ich zusammen mit Frank Karlitschek (Gründer von ownCloud und Nextcloud) zu Gast war.

Da wir mit dem Hackerfunk von Martin "Venty" Ebnöther und Axel "XTaran" Beckert neben der räumlichen Nähe auch thematisch eine grosse Schnittmenge hatten, war es nur natürlich, dass wir uns gegenseitig in den Podcasts "besucht" haben.

Ingo Ebel wusste, dass ich mal als Datenbankadministrator gearbeitet habe und fragte mich, ob ich Interesse hätte an einer Sendung zu NoSQL im Rahmen eines neuen Formats namens Binaergewitter mitzumachen (ja, klar!).

Ich habe fast schon verdrängt, dass ich natürlich auch ein eigenes Format namens Wattenichsachs produziert habe, nur, um mich mit der Technik auseinander zu setzen. Mir wurde sehr schnell klar, dass ich nicht der Podcaster bin, der gerne alleine in Mikrofon spricht. Daher gibt es auch nur zwölf Folgen.

Nach dem Ende von DeimHart habe ich bis auf wenige Ausnahmen etwa viereinhalb Jahre Pause mit dem aktiven Podcasting pausiert. Natürlich habe ich in der Zeit weiter Podcasts gehört.

Ralf Hersel, ein Bekannter aus der Freien-Software-Bewegung fragte mich in 2019, ob ich mir vorstellen könnte bei LibreZoom, einem Podcast über Freie Software, mitzumachen. Mit Folge 12 war es dann so weit, dass ich bis zum Ende des Podcasts Mitte 2020 als Co-Host Ralf unterstützt habe.

Der Podcast LibreZoom wurde von Marius Quabeck (NerdZoom Media) produziert, was mich dann auch zur Teilnahme an einigen wenigen Episoden des NerdZoom-Podcasts gebracht hat.

Seit September 2020 bestreite ich jetzt mit Mario Hommel, den ich über die gemeinsam genutzte Blogsoftware Serendipity (er ist wenige Monate länger dabei als ich) kenne, den Podcast BuzzZoom, der ebenfalls von Marius produziert wird.

Buzzwords, zu Deutsch Schlagwörter begegnen uns täglich in den Medien, im Arbeitsleben und im Privaten. Oft werden sie als Modewörter benutzt, ohne die wirkliche Bedeutung dabei im Blick zu haben.

Dirk und Mario analysieren in jeder Folge ein Buzzword, sprechen über seine Bedeutung und die Hintergründe. Hierbei wird auch die ein oder andere leere Worthülse mit einem guten Schuss Ironie entlarvt. Obwohl die beiden beruflich und privat eher technisch unterwegs sind, sind nicht nur Buzzwords aus IT und Technik ein Thema.

Von Sujeevan Vijayakumaran wurde ich mal gesiezt als er mich auf der OpenRheinRuhr 2010 angesprochen hat, zu dem Zeitpunkt war ich noch Vereinsvorstand für den Ubuntu Deutschland e. V. Wir wollten auch immer mal etwas zusammen machen. Wir kommen beide aus dem Ruhrgebiet und interessieren uns beide für "Leben und Arbeiten in Tech". Ich durfte Sujeevan einen Teil seines Berufslebens begleiten und so ist im November 2020 der Podcast TILpod entstanden, der genauso wie BuzzZoom immer noch aktiv ist.

Sujeevan und Dirk reden über Themen, die Ihnen in der letzten Zeit untergekommen sind. Die Abkürzung "TIL" steht für "Today I learned", es geht also um Themen, die neu für die beiden waren oder die sie in der letzten Zeit erst so richtig verstanden haben.

Dazu kommen Hinweise, wie sie versuchen, ihr Arbeitsleben zu verbessern und zusätzlich gibt es auch den einen oder anderen Karrierehinweis.

So, das ist die Geschichte. Ich hoffe, dass ich keinen grösseren Meilenstein oder Link vergessen habe. Falls doch bin ich für Hinweise in den Kommentaren dankbar.

Blogtradition

Im letzten Artikel habe ich kurz angemerkt, dass wir vielleicht alte Blogtraditionen einmal aufleben lassen und uns (alte) Blogger wieder stärker mit Trackbacks und Pingbacks zu vernetzen. (Das ist übrigens eine Sache, die Blogs aus statischen Generatoren nicht können).

Robert hat den Ball gleich aufgenommen und meinen Bloggeburtstag in einem Blog errwähnt und damit dann auch gleich einen Trackback an mein Blog gesendet. In meiner Blogsoftware tauchen Tracbacks und Pingbacks im Kommentarbereich auf.

Robert und Mario betreiben ihre Blogs Nur ein Blog und Hommel-Net Weblog übrigens genauso lange wie ich.

Bloggeburtstag Nummer 16

Vor 16 Jahren hätte ich nie gedacht, dass dieses Blog so lange existieren wird.

Dieser Geburtstag wird mit den folgenden "Gedenktagen" geteilt:

Tue, 25.05.2021, Towel Day, year 2001, age 20 years
Tue, 25.05.2021, Geek Pride Day, year 2006, age 15 years
Tue, 25.05.2021, Nerd Pride Day, year 2006, age 15 years
Tue, 25.05.2021, Star Wars Premiere, year 1977, age 44 years
Tue, 25.05.2021, Dirks Logbuch, started 2005, ago: 16 years


Towel Day und Geek Pride Day.

Leider kann ich mich momentan nur selten dazu aufraffen, mehr als den (überwiegend) wöchentlichen Linkdump zu verfassen. Allerdings habe ich die Hoffnung, dass es irgendwann mal wieder mehr werden könnte.

Das Blog läuft seit Beginn mit der Software Serendipity und - obwohl ich von Zeit zu Zeit darüber nachdenke, die Software zu wechseln - bin ich dennoch nie gewechselt. (Wenn mir die Kommentarfunktion nicht so wichtig wäre, hätte ich vermutlich auf eine statische Blogsoftware umgestellt).

Monitoring Zwischenintermezzo

Jetzt habe ich schon einen neuen Rechner, kann aber natürlich nicht sagen, wie ich ihn im Normalbetrieb auslaste. Dass die NVMe-Performance sehr gut ist, habe ich ja bereits geschrieben.

Um es vorweg zu nehmen: Gar nicht!

Mehr über den neuen Rechner herauszufinden, ist aber eine gute Gelegenheit, sich einmal mit Prometheus und Grafana auseinanderzusetzen. Im Rahmen der Beschäftigung damit war sehr positiv überrascht, wie leicht das alles ist, zumindest in diesem einfachen Fall.

Disclaimer: Bitte versteht das folgende als "Proof of Concept", um schnell zu einem Ergebnis zu kommen. Benutzt es bitte nicht für ein Produktionssetup auf Servern im Internet.

Ganz bewusst nutze ich keine Pakete, sondern die Binaries von den Webseiten der Hersteller. Wenn ich das Experiment beende, können die Daten und Installationen sehr schnell gelöscht werden.

Hier werde ich keine Einführung in Prometheus geben, dafür gibt es zahlreiche Webseiten, die das schon sehr ausführlich gemacht haben. Für dieses Setup muss man nur so viel wissen, dass Prometheus selber die zentrale Komponente ist, die in regelmässigen einstellbaren Abständen, Daten von den Exportern sammelt und in eine eigene "Time series database" schreibt. Der Node Exporter stellt Daten über Diskbelegung, I/O-Verhalten, CPU, Load, ... und vieles andere mehr zur Verfügung. Grafana greift auf diese gesammelten Daten zu und bereitet sie grafisch in Dashboards auf.

Der Spass beginnt mit der Anlage des Users, mit dem alles laufen soll.

# adduser --system --home /srv/monty --shell /sbin/nologin monty

Danach folgt der Download der nötigen Archive von der Prometheus Download Seite und der Grafana Downloadseite (die ist ein bisschen versteckt).

# mkdir /srv/monty/archive 

# cd /srv/monty/archive 

# curl -LO https://github.com/prometheus/prometheus/releases/download/v2.26.0/prometheus-2.26.0.linux-amd64.tar.gz

# curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz

# curl -LO https://dl.grafana.com/oss/release/grafana-7.5.3.linux-amd64.tar.gz

Die einzelnen Archive werden ausgepackt und es wird jeweils ein Link auf das ausgepackte Archiv gesetzt. Das macht das Update deutlich einfacher.

# cd /srv/monty

# tar xzf archive/prometheus-2.26.0.linux-amd64.tar.gz

# tar xzf archive/node_exporter-1.1.2.linux-amd64.tar.gz

# tar xzvf archive/grafana-7.5.3.linux-amd64.tar.gz

# ln -s grafana-7.5.3 grafana

# ln -s node_exporter-1.1.2.linux-amd64 node_exporter

# ln -s prometheus-2.26.0.linux-amd64 prometheus

Jetzt noch schnell je ein Verzeichnis für die Grafana- und die Prometheus-Daten anlegen und die mitgelieferten Konfigurationen kopieren. Der Nodeexporter ist "dumm", der plappert wie ein Wasserfall, wenn er gefragt wird.

# cd /srv/monty

# mkdir promdata grafdata

# cp prometheus/prometheus.yml promdata

# cp grafana/conf/defaults.ini grafdata/grafana.ini

In der grafana.ini-Datei sind die folgenden Änderungen vorzunehmen, alles andere muss nicht angefasst werden:

data = /srv/monty/grafdata
logs = /srv/monty/grafdata/log
plugins = /srv/monty/grafdata/plugins
provisioning = /srv/monty/grafdata/provisioning

An die prometheus.yml-Datei muss man nur die folgenden Zeilen hinter - targets: ['localhost:9090'] anhängen:

- job_name: 'terrania'

scrape_interval: 5s

static_configs:

  - targets: ['localhost:9100']

Der Name ist natürlich frei. Prometheus und Node Exporter arbeiten sehr ressourcenarm, daher kann man durchaus alle 5 Sekunden (oder noch öfter) Werte nehmen. Weitere Exporter werden einfach an das Ende der Datei angehängt. Das Standard-Abfrageintervall sind 15 Sekunden.

Abschliessend noch dem User monty alle Dateien und Verzeichnisse übereignen.

# chown -R monty /srv/monty

Bleibt noch systemd, bitte kopiert die folgenden Service-Files nach /etc/systemd/system und führt danach ein systemd daemon-reload aus.

# /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=monty
WorkingDirectory=/srv/monty/node_exporter
Type=simple
ExecStart=/srv/monty/node_exporter/node_exporter

[Install]
WantedBy=multi-user.target

Bitte beachtet, dass nach den Backslashes "\" nur das Zeilenende kommen darf.

# /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=monty
Type=simple
WorkingDirectory=/srv/monty/prometheus
ExecStart=/srv/monty/prometheus/prometheus \
    --config.file /srv/monty/promdata/prometheus.yml \
    --storage.tsdb.path /srv/monty/promdata \
    --web.console.templates=/srv/monty/prometheus/consoles \
    --web.console.libraries=/srv/monty/prometheus/console_libraries

[Install]
WantedBy=multi-user.target
# /etc/systemd/system/grafana.service
[Unit]
Description=Grafana
Wants=network-online.target
After=network-online.target

[Service]
User=monty
WorkingDirectory=/srv/monty/grafana
Type=simple
ExecStart=/srv/monty/grafana/bin/grafana-server \
    -config /srv/monty/grafdata/grafana.ini \
    -homepath /srv/monty/grafana \
    web

[Install]
WantedBy=multi-user.target

Die Services werden der Reihe nach gestartet und aktiviert.

# systemctl enable --now node_exporter

# systemctl enable --now prometheus

# systemctl enable --now grafana

Eventuell auftretende Fehler systemctl status node_exporter prometheus grafana sollten natürlich behoben werden.

Grafana lässt sich nun über localhost:3000 aufrufen. Im Standard sind Username und Passwort auf "admin" gesetzt.

Um die ersten bunten Bilder zu sehen, muss noch eine Datasource und ein Dashboard angelegt werden.

Als Datasource solltet Ihr über das Zahnrad und "Data Sources" den Eintrag "Prometheus" auswählen. Prometheus hört standardmässig auf Port 9090, ich musste die komplette URL angeben, das "Scrape interval" habe ich auf "5s" gesetzt.

Als Dashboard empfehle ich den Import von 1860 und die Angabe der gerade konfigurierten Datenquelle Prometheus.

Ich wundere mich immer wieder, dass die CPU-Werte ganz oben angezeigt werden und nicht die aussagekräftigere "System Load".

Abschliessende Anmerkung: Einige von Euch wundern sich vermutlich über die Links, die ich gesetzt habe. Als ich den Artikel geschrieben habe, habe ich auch gleich ein Update von Prometheus und Grafana eingespielt, das funktioniert wie folgt:

# cd /srv/monty/archive

# curl -LO https://github.com/prometheus/prometheus/releases/download/v2.26.0/prometheus-2.26.0.linux-amd64.tar.gz
# curl -LO https://dl.grafana.com/oss/release/grafana-7.5.3.linux-amd64.tar.gz

# cd ..

# tar xzf prometheus-2.26.0.linux-amd64.tar.gz
# tar xzf grafana-7.5.3.linux-amd64.tar.gz

# systemctl stop grafana 
# rm grafana 
# ln -s grafana-7.5.3 grafana 
# systemctl start grafana

# systemctl stop prometheus 
# rm prometheus 
# ln -s prometheus-2.26.0.linux-amd64 prometheus 
# systemctl start prometheus

Wenn man das alles in eine Zeile schreibt, dauert der Teil Stoppen, Link ändern und Starten deutlich unter einer Sekunde.

Viel Spass, bin gespannt auf Eure Kommentare.

TUXEDO CORE One

Der Entscheidungsprozess für einen neuen Rechner hat dann doch etwas länger gedauert als erwartet. Ich habe mir die Entscheidung nicht leicht gemacht und viel Feedback von aussen eingeholt.

Wie im Betreff angedeutet, ist es ein TUXEDO CORE One AMD-Ryzen-Series v10 + Micro-ATX Tower mit folgenden Komponenten geworden:

  • 64 GB (4x 16GB) 3600Mhz G.Skill
  • AMD Ryzen 9 3900 (12x 3.1-4.3GHz Twelve-Core, 24 Threads, 70 MB Cache, 65W TDP)
  • 1000 GB Samsung 980 PRO (NVMe PCIe)
  • 2x 4 TB HDD (Seagate / 5.400 rpm / SATAIII)
  • DVD-Brenner
  • CORE One mATX Tower
  • NVIDIA GeForce GTX 1650 4GB GDDR5, 1x HDMI2.0, 1x DisplayPort 1.4, 1x DVI-D
  • mit Intel Wi-Fi 6 AX200 & Bluetooth 5.1 (bis zu 2400Mbps)
  • Gigabyte AMD B450 Chipsatz
  • Ultra Silent 1250 (80+ Gold | 140mm | 1250 Watt | Modular)

Das Gerät ist klasse, sehr gut verarbeitet und rasend schnell. Ich habe es bis jetzt noch nicht geschafft, es auch nur annähernd auszulasten. Es erfüllt meine Anforderungen, die Ihr im verlinkten Artikel finden könnt, zu 100%.

Ich hatte eigentlich eine passiv gekühlte Grafikkarte bestellt, die leider nicht mehr lieferbar war. TUXEDO Computers hat dann eine etwas teurere aktiv gekühlte Grafikkarte ohne Aufpreis geliefert. Natürlich nach Rückfrage, ob ich damit einverstanden bin.

Mir wurde gesagt, dass ich die gleichen Komponenten günstiger bekommen kann. Das stimmt, aber ich habe zwei linke Hände und mir macht es nicht zuletzt deswegen keinen Spass, an Hardware zu schrauben. Dazu kommt, dass ich vom Support von TUXEDO Computers überzeugt bin, den wir für den Rechner meiner Frau auch schon nach der Garantiezeit in Anspruch nehmen mussten. Die Abwicklung war unkompliziert und der Kontakt sehr freundlich. Beides, der Support und auch das Zusammenschrauben hat einen Wert - meine Arbeitszeit übrigens auch.

Ergänzend möchte ich noch erwähnen, dass es in Deutschland leider nur wenige Versender gibt, die in die Schweiz schicken. Damit fallen viele der "üblichen Verdächtigen" unter deutschen Online-Shops aus.

Mir wurde gesagt, dass TUXEDO Computers nur "ein weiterer Kistenschieber" ist. Ja, und? Selbst in Markenhardware von namhaften Herstellern stecken manchmal die gleichen Komponenten.

Zur Aussage, dass ich mir ein neues Notebook mit aktuellen Spezifikationen kaufen sollte, habe ich die folgende Meinung. Mein aktuelles Notebook - mittlerweile fünf Jahre alt - hat bis auf zwei oder drei Wochenenden im Jahr einer Dockingstation gesteckt. Zum Einsatz kam es nur auf Veranstaltungen und dem Weg dorthin und von dort nach Hause. Das wird das alte Notebook auch weiterhin leisten können. Wenn es in die ewigen Jagdgründe geht, kann ich Präsentation und mobiles Arbeiten auch mit einem Tablet oder Chromebook erledigen. Dazu kommt, dass ein Notebook mit nur annähernd vergleichbarer Leistung zu einem Standgerät ein vielfaches von dem Standgerät kostet (wenn es die Leistung überhaupt in einem Notebook gibt).

Ich bin sehr gespannt auf Eure Kommentare.

Disk Performance

Der neue Rechner ("terrania") ist mittlerweile da und läuft.

Die Performance NVMe vs. SSD beim fünf Jahre alten Notebook ("crest") ist schon beeindruckend:

$ grep IOPS crest.rand*
crest.randread.txt:  read: IOPS=94.5k, BW=369MiB/s (387MB/s)(4096MiB/11096msec)
crest.randrw.txt:  read: IOPS=63.4k, BW=248MiB/s (260MB/s)(3070MiB/12391msec)
crest.randrw.txt:  write: IOPS=21.2k, BW=82.8MiB/s (86.8MB/s)(1026MiB/12391msec); 0 zone resets
crest.randwrite.txt:  write: IOPS=66.6k, BW=260MiB/s (273MB/s)(4096MiB/15734msec); 0 zone resets

$ grep IOPS terrania.rand*
terrania.randread.txt:  read: IOPS=391k, BW=1528MiB/s (1602MB/s)(4096MiB/2681msec)
terrania.randrw.txt:  read: IOPS=254k, BW=992MiB/s (1040MB/s)(3070MiB/3094msec)
terrania.randrw.txt:  write: IOPS=84.9k, BW=332MiB/s (348MB/s)(1026MiB/3094msec); 0 zone resets
terrania.randwrite.txt:  write: IOPS=117k, BW=458MiB/s (480MB/s)(4096MiB/8939msec); 0 zone resets

Es werden drei Tests durchgeführt: "random read", "random read/write" (75% read, 25% write) und "random write". Spannend ist, dass das Lesen generell vier Mal schneller ist, vom alten zum neuen Rechner. Im Mix ist auch das Schreiben vier Mal schneller. Beim ausschliesslichen Schreiben ist der Neue aber "nur" noch knapp doppelt so schnell.

Als Tool kommt fio - Flexible IO Tester zum Einsatz. Wenn jemand eine bessere URL kennt, nur her damit. FIO ist in den meisten Distributionen enthalten.

Über synthetische Tests kann man natürlich geteilter Meinung sein, die Werte geben aber einen guten Anhaltspunkt für Vergleiche.

Ich benutze dieses kleine Skript, um die Daten zu sammeln.

#!/bin/bash

echo randrw
fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75 --output=$(hostname --short).randrw.txt --output-format=normal
[[ -r test ]] && rm test
echo

echo randread
fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randread  --output=$(hostname --short).randread.txt --output-format=normal
[[ -r test ]] && rm test
echo

echo randwrite
fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randwrite --output=$(hostname --short).randwrite.txt --output-format=normal
[[ -r test ]] && rm test
echo

Repositories zusammenführen

Meine Daten, unter anderem den Schriftverkehr, meine Präsentationen und kleinen Skripte, verwalte ich in Git-Repositories (Mehrzahl). Nach längerer Diskussion bin ich zu der Einsicht gekommen, dass es sinnvoller ist, alles in einem einzigen Repository zu haben.

Natürlich möchte ich dabei die Historie nicht verlieren.

Der folgende Weg löst den Import für mich.

Ergänzungen von Euch sind mir jederzeit willkommen.

Im Source-Repository (ausgescheckt nach presentations.git):


$ cd presentations.git

$ tomove=$(ls -1a | egrep -v '^(.|..|.git)$' | xargs)

$ mkdir presentations

$ git mv $tomove presentations

$ git commit -am "Vorbereitung für den Merge"

$ git push

$ cd ..
 

Im Destination-Repository (ausgecheckt in main.git):


$ cd main.git

$ git remote add -f presentations URL/presentations.git

$ git merge --allow-unrelated-histories presentations/master

$ git push

$ git remote remove presentations
 

Ungoogled Chromium

Auf meinem privaten Hauptarbeitsrechner habe ich mir einmal verschiedene Browser angeschaut, darunter Brave, Chrome, Opera und Vivaldi. Dabei habe ich festgestellt, dass alle Browser, die auf Chrome basieren auf meiner fünf Jahre alten Hardware schneller waren als der Firefox, den ich sonst benutzt habe.

Da ich es immer noch etwas spooky finde, meinen Browser einer Firma anzuvertrauen, bei der ich jeweils nicht weiss, was mit meinen Browsing-Daten passiert, habe ich mich nach Alternativen umgeschaut. Früher habe ich einmal Iridium als Zweitbrowser verwendet, der scheint aber nicht mehr weiterentwickelt zu werden. Bei meiner Recherche bin ich dann auf Ungoogled Chromium gestossen, der sehr viel versprechend aussieht. Ich habe dern Browser auch in der TILpod Episode 5 als Tooltipp genannt.

"Ungoogled" bedeutet auch, dass der Browser ohne Zugriff auf den Webstore für die Erweiterungen kommt. Dafür gibt es aber mit dem chromium-web-store-Plugin, das sich manuell installieren lässt, eine Abhilfe. Generell ist es eine gute Idee, sich die FAQ des Browsers anzuschauen.

Fazit für mich nach einer Woche ausschliesslicher Nutzung: Der Browser ist eine echte Alternative zu Firefox er hinkt Chrome um weniger Versionsnummern hinterher, funktioniert aber bestens. Es gibt Repositories für das rpm- oder deb-Paketformat oder AppImage für andere Linux-Distributionen (auch Binaries für MacOS und Windows).

Aber: Beim Benutzen von Ungoogled Chromium habe ich gemerkt, dass ich einige Features von Firefox wirklich vermisse und ich deswegen auch wieder zurück zum Firefox wechsele. (Ein Hardware-Upgrade wird ja in den nächsten Wochen kommen).

Facebook und WhatsApp verlassen

Das fühlt sich mal so richtig gut an.

Es war eigentlich schon sehr lange an der Zeit und ich habe die beiden Accounts nur aus traditionellen Gründen behalten. Aktiv genutzt habe ich sie schon sehr lange nicht mehr.

Facebook lief in einem Facebook Container in Firefox (wenn Ihr Euren Account behalten wollt, wäre das eine Option), bitte nicht auf dem Handy oder als App benutzen. Da werden noch mehr Daten gesammelt, als man eigentlich möchte.

"Natürlich" machen es einem die Dienste nicht einfach, dass man sie verlässt.

Hier sind zwei Anleitungen, die es gut erklären.

Für WhatsApp: Nase voll? WhatsApp-Konto löschen

Für Facebook: Facebook komplett löschen - so geht's

Update zu Messengern

Ich bin völlig zu Recht darauf hingewiesen worden, dass mein Artikel zu Messengern ein Update benötigt. In dem verlinkten Artikel gibt es auch Informationen zu meinem Status bezüglich XMPP und Wire.

Ein weiterer Grund für das Update ist die Tatsache, dass WhatsApp seine Nutzungsbestimmungen angepasst hat und dass man zustimmen muss, dass alle gesammelten Daten - inklusive dem Adressbuch - anderen Unternehmen des Konzerns wie Facebook und Instagram und - noch schlimmer - auch Dritten zur Verfügung gestellt werden sollen.

Meiner Meinung nach wird man nie alle Menschen dazu bekommen, sich auf einen Messenger bzw. ein Protokoll zu einigen, dafür sind sie zu unterschiedlich und bieten unterschiedliche Features, die interessant sein könnten.

Mich könnt Ihr über drei (vier) verschiedene Protokolle und Messenger erreichen, wenn Ihr das möchtet. Die Kontaktdaten findet Ihr auf meiner Homepage.

  • Es gibt immer noch nur einen Messenger bzw. ein Protokoll, das alles erfüllt, was ich von einem modernen Messenger erwarte und das ist Matrix mit Element als Client.
  • Threema ist ein kommerzieller Messenger, bei dem der Quelltext des Clients neulich als Open Source freigegeben wurde. Die Server-Software ist weiterhin Closed-Source-Software, der Hersteller ist an die Datenschutzgesetze der Schweiz (und damit auch der EU) gebunden. Eine grosse Besonderheit ist, dass die Firma hinter Threema den Quelltext und die Infrastruktur regelmässigen unabhängigen Audits unterziehen lässt und die Ergebnisse veröffentlicht. Threema arbeitet immer noch an der Multiplattformfähigkeit, Threema Web ist da leider nur ein dürftiger Ersatz.
  • Telegram verschlüsselt leider nicht und wenn, dann nur Ende-zu-Ende, so dass man die verschlüsselten Nachrichten nicht mit allen eigenen Clients lesen kann, sondern nur mit dem, der an der verschlüsselten Kommunikation beteiligt war. Der Server ist auch kein FLOSS und föderierbar ist es auch nicht. Immerhin behaupten die Betreiber, dass alle Nachrichten verschlüsselt gespeichert werden.
  • Signal ist bekannt geworden als "der Messenger, den auch Edward Snowden benutzt". Ich bin damit nie warm geworden, habe mir aber gestern wieder einen Account zugelegt. Wenn ich da innerhalb eines halben Jahres keine aktiven Kontakte habe, wird er wie schon zuvor bei anderen Messengern abgestellt.

Meine Kriterien oder Wünsche an einen Messenger:

  • FLOSS, Client und Server
  • Verschlüsselung n:m
  • Verschlüsselung nachweisbar auditiert
  • Föderiert
  • Unterstützung für Proxies
  • Clients für die gängigen Plattformen
    • Android
    • iOS
    • Web (oder alternativ native Clients für Linux, MacOS und Windows)

Derzeit erfüllt nur Matrix alle meine Wünsche.

Visual Studio Code Plugins

Es reicht ja, wenn es eine Person interessiert (Hallo Oliver!).

Hier kommen die Visual Studio Code Plugins, die ich beruflich und / oder privat einsetze.

Der grösste Unterschied ist, dass ich beruflich alle Plugins bis auf Remote SSH remote einsetze und nicht lokal, da ich mich den ganzen Tag mit VSCode nur auf dem Jumpserver befinde. Das Bearbeiten findet lokal auf Windows mit Dateien unter Linux statt.

  • Nur Job: Remote - SSH, um über SSH auf Dateien zuzugreifen und diese zu bearbeiten.
  • Nur Job: Remote - SSH: Editing Configuration Files, wird automatisch vom vorherigen Plugin mitinstalliert.
  • Bracket Pair Colorizer 2 finde ich enorm praktisch, weil es zu jeder Klammer die korrespondierende in der gleichen Farbe anzeigt.
  • GitLens erweitert den eingebauten Git-Client um einige sinnvolle Features.
  • Nur privat: LaTeX language support, weil ich privat viel mit LaTeX mache. Dieses Plugin hat den Vorteil, nicht automatisch die Dateien zu übersetzen.
  • Markdown All in One bringt hilfreiches rund um Markdown mit (ich möchte deutlich mehr mit Markdown machen).
  • markdownlint weist auf unschönen Markdown-Quellcode hin.
  • Python für die Entwicklung von Python-Skripten.
  • Jupyter wird von Python mit installiert, brauche ich nicht.
  • Spell Right benutze ich zur Rechtschreibkontrolle.

Welche Plugins nutzt Ihr und warum nutzt Ihr sie?

Meine Firefox-Addons Ende 2020

Und als letztes ein Update von Meine Firefox-Addons Ende 2019.

Bei meinen Firefox Addons hat sich eine Menge getan. Fragen gerne in die Kommentare.

Die Links unten findet Ihr auch in meiner Shaarli-Instanz.

Besteht seitens der Leserschaft eigentlich Interesse an Visual Studio Code Plugins, die ich einsetze? Sind nicht ganz so viele.