Letsencrypt und DNS Round-Robin

Ich weiß jetzt wieder, wie ich Letsencrypt auf DNS Round-Robin mit zwei Servern aufgesetzt hatte und finde es auch mit einigen Jahren Abstand gar nicht mal so schrecklich.

Die Server kennen sich auf Port 80 unter ihrem Namen im Round-Robin und unter einem eigenen Rollennamen:

ServerName www.example.com
ServerAlias www-foo.example.com
ServerName www.example.com
ServerAlias www-bar.example.com

mod_rewrite auf Port 80 fängt zunächst mal alles ab, was nicht nach Letsencrypt aussieht und leitet nach HTTPS weiter; hier auf www-foo.example.com:

ServerName www.example.com
ServerAlias www-foo.example.com

RewriteEngine On

RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Was jetzt noch übrig bleibt, wird daraufhin geprüft, ob a) die angeforderte Challenge im Dateisystem nicht vorhanden ist und b) der Request an den Namen aus dem Round-Robin gestellt wurde (um endlose Proxy-Rekursionen zu verhindern). Falls die Challenge lokal nicht existiert, wird der Request per Reverse Proxy an einen nachgelagerten Server gestellt:

ServerName www.example.com
ServerAlias www-foo.example.com

RewriteEngine On

RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} "www.example.com"
RewriteRule ^/(.*)$ http://www-bar.example.com%{REQUEST_URI} [P,QSA,L]

Mit 2 Servern ist klar, wo die Challenge zu holen ist. Bei 3 und mehr Servern würde ich eher nicht riskieren, in multiple Proxy-Weiterleitungen zu gehen, sondern mod_rewrite über RewriteMap aktiv ermitteln lassen, auf welchem der anderen Server die Challenge denn tatsächlich liegt.

Too good to #0005

Prioritizing own NTP servers for systemd-timesyncd

# cat /etc/systemd/timesyncd.conf.d/timesyncd-corporate.conf 
[Time]
NTP=ntp1.example.com ntp2.example.com ntp.ubuntu.com

Test if text is empty (even if it does contain a linebreak)

Good job by: https://unix.stackexchange.com/q/386499/2028

if ! grep -q '[^[:space:]]' "${file}"; then echo "Text is empty"; fi

Watch for changes in the Gnome registry

(To reproduce manual changes, for configuration management.)

dconf watch / # (Sorry, thats all)

Trigger Debian/Ubuntu unattended-upgrade

(For testing configuration changes)

rm /var/lib/apt/periodic/*
systemctl start apt-daily.service 
systemctl start apt-daily-upgrade.service 

And remember:

tail -f /var/log/unattended-upgrades/*log

Too good to #0004

systemd, the good parts: monotonic timers

When systemd makes you suffer because “run job every 10 minutes” is infinitely harder to specify than in crontab, remember there are monotonic timers in systemd that aren’t derived from wallclock time, or “Calendar Events” as they call it.

Run timer once 60 seconds after system startup, then every 10 minutes after the job finished:

# /etc/systemd/system/demo.timer
[Unit]
Description=demo monotonic timer

[Timer]
OnStartupSec=60
OnUnitInactiveSec=600

[Install]
WantedBy=timers.target    # When in a system session
# WantedBy=default.target # When in a user session (~/.config/systemd, systemctl --user etc.)

Python: Use tabulate to format output in columns

#!/usr/bin/env python3
from tabulate import tabulate

data = [
	[ 'foo', 'bar', 'baz' ],
	[ 'spam', 'eggs', 'bacon' ]
]

headers = ['Eine', '2', 'Whatever']

print(tabulate(data, headers=headers, tablefmt='simple'))

Output:

$ ./tab.py 
Eine    2     Whatever
------  ----  ----------
foo     bar   baz
spam    eggs  bacon

virsh/libvirt, automate key presses

(* Updated to sleep 5 seconds after each keypress.)

for key in R E I S U B; do virsh send-key "${domain}" KEY_LEFTALT KEY_SYSRQ KEY_${key}; sleep 5; done

Too good to #0003

Linux uptime in seconds, once and for all

awk '{printf "%i\n", $1}' /proc/uptime

“Sudo on demand”, re-exec shell script with sudo if not running as root

#!/usr/bin/env bash
printf "Running as: %s\n" "$(id -un)"
[[ ${EUID} -ne 0 ]] && printf "Re-executing with sudo.\n" && exec sudo "${0}"

See also TGT0006, this is just as useful for downgrading privileges on the fly.


“When was the last time apt-get on that Debian/Ubuntu machine installed package upgrades?”

  • Reliably answering this is a lot harder than it looks, subject of countless discussions and really does need to parse /var/log/apt/history.log, which is painful.
  • The script below maintains a file /var/log/apt/lastupgrade with the last upgrade’s time stamp, for further processing.
  • Does NOT track invocations of apt-get upgrade that did not lead to package upgrades.
  • Does NOT look behind logfile rotations, which should not be a problem because it’s closely hooked to dpkg.

/usr/sbin/apt-lastupgrade:

#!/bin/bash

while IFS=: read -r key value
do
	if [[ "${key}" == 'Start-Date' ]]
	then
		upgraded=0
	elif [[ "${key}" == 'Upgrade' ]]
	then
		upgraded=1
	elif [[ "${key}" == 'End-Date' ]]
	then
		if [[ ${upgraded} -eq 1 ]]
		then
			printf -v lastupgrade "%s" "${value}"
		fi
		upgraded=0
	fi
done < /var/log/apt/history.log

if [[ -v lastupgrade ]]
then
	tee /var/log/apt/lastupgrade <<-Here
	# Timestamp of last upgrade: ${lastupgrade}
	Here
	touch -d "${lastupgrade}" /var/log/apt/lastupgrade
fi

/etc/apt/apt.conf.d/90lastupgrade:

DPkg::Post-Invoke {"/usr/bin/systemd-run --on-active=60 /usr/sbin/apt-lastupgrade || /bin/true"};

Path of running shell script, dirname for locating config files, includes etc.

me_path="$(readlink -f "${0}")"
me_dir="$(dirname "${me_path}")"
me_base="$(basename "${me_path}")"

Too good to #0002

Show and update the comment in an SSH private key

ssh-keygen -l -f <keyfile> # show
ssh-keygen -c -f <keyfile> # change interactively
ssh-keygen -c -C <newcomment> -f <keyfile> # change and provide new

ssh-agent in Gitlab CI/CD

  • Define SSH_KEY as a “file” in Gitlab CI/CD variables and SSH_PASSPHRASE as a regular variable
  • If libcrypto errors on execution, make sure SSH_KEY has an additional line ending at the end
before_script:
  - DEBIAN_FRONTEND=noninteractive apt-get update -y
  - DEBIAN_FRONTEND=noninteractive apt-get install -y openssh-client

sftp_to_somewhere:
  stage: deploy
  script:
    - chmod 600 "$SSH_KEY"
    - eval $(ssh-agent)
    - ssh-add "$SSH_KEY" <<< "$SSH_PASSPHRASE"
    - ssh-add -l

Urlwatch, but with a local pop-up window on Linux, no additional infrastructure

Systemd user service:

# ~/.config/systemd/user/urlwatch-to-zenity.service
[Unit]
Description=urlwatch to zenity (service)

[Service]
Type=oneshot
ExecCondition=sh -c 'nmcli net co | grep full'
ExecCondition=sh -c 'urlwatch > %h/.cache/urlwatch.out'
ExecCondition=sh -c 'test -s %h/.cache/urlwatch.out'
ExecStart=sh -c 'zenity --title Urlwatch --text-info --width=600 --height=400 --filename=%h/.cache/urlwatch.out'

[Install]
WantedBy=default.target

Systemd timer:

# ~/.config/systemd/user/urlwatch-to-zenity.timer
[Unit]
Description=urlwatch to zenity (timer)

[Timer]
OnStartupSec=1h
OnUnitInactiveSec=2h

[Install]
WantedBy=default.target

cookiecount – Load a page and show the cookies it sets

$ ./cookiecount https://example.com
0 cookies received.

ps1_anon.bash – anonymize bash prompt, for screenshots and pastes

# Anonymize bash prompt for screenshots and pastes
# Source from or add to ~/.bashrc
function ps1_anon (){
	if [[ -v SAVED_PS1 ]] 
	then
		PS1="${SAVED_PS1}" 
		unset SAVED_PS1 
	else
		SAVED_PS1="${PS1}" 
		PS1='\$ '
	fi
}

Example:

[martin@idefix ~/devel/cookiecount(main=)]$ ps1_anon
$ ./cookiecount https://reddit.com --json | jq .cookiecount
7
$ ps1_anon
[martin@idefix ~/devel/cookiecount(main=)]$

Too good to #0001

Set X11 keyboard layout manually and temporarily (e.g. in i3 if I need to test exotic window managers for my users)

setxkbmap -layout us,us -variant altgr-intl -option caps:none

Speaking of which, set keyboard layout permanently in Gnome

gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'us+altgr-intl')]"

Check if Gnome Screensaver is active (I use this for automated time tracking)

busctl --user call org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver GetActive


Urlwatch for a new package version in an APT repository

After a long wait, I was finally able to find another use for my awful Perl one-liner from 2019 that pivots a Debian Packages.gz into a space-separated table!

---
name: "Pop!OS Firefox package"
command: curl -s http://apt.pop-os.org/release/dists/jammy/main/binary-amd64/Packages.gz |
  gzip -dc | perl -ane 'if($F[0]=~/^Package:/){$p=$F[1]};if($F[0]=~/^Version:/){$v=$F[1];print"$p $v\n";}' |
  grep '^firefox '
diff_filter:
  - grep: '^[+-][^+-]'
---

Phönix aus dem mysqldump

“Haltet die Fresse! Glotzt mehr TV!”, das wählte ich im Sommer 2007 als Überschrift, irgendwie ganz und gar nicht im Verfolgungswahn, unter dem Eindruck des damals bereits nicht mehr ganz so frischen Landgerichts Hamburg, der noch etwas neueren Impressumpflicht, TKÜV, Mediendienstestaatsvertrag und Teledienstgesetz, und dem damals noch richtig neuen Hackerparagraphen.

Danach war zwei Jahre Funkstille, aber irgendwann ab 2009 mussten die Blogposts dann doch aus mir raus, und ich veröffentlichte über die Jahre noch eine Handvoll Artikel quasi-pseudo-überhauptnicht-anonym unter binblog.info, einem auf WordPress gehosteten Blog.

Nun ist es auf perverse Weise noch viel schlimmer gekommen, als ich es in meiner Paranoia damals erwartete. Hass und kriminelle Beschimpfungen regieren die leichter zugänglichen Teile des Social Web, und bis auf allerschwerste Fälle wird das alles mit einem Schulterzucken hingenommen. Ruf doch die Polizei! Oder, noch schlimmer, das Ordnungsamt, weil auf einer deutschen Domain das Impressum fehlt! Ha! Schieß doch!

Ein richtiger Nerd lässt keine Domainregistrierung verfallen, das Haus verliert nichts, und hier ist nun also der Re-Launch auf der alten Domain von 2003. Datenschutzverträglich selbst gehostet, ohne Analysetools und Werbeeinblendungen des kommerziellen WordPress-Service. Fast 20 Jahre Content in 1200 auf Privat geschalteten Posts stecken in der Datenbank. Die “temporäre” Domain, binblog.info, wird in Kürze hier hin migriert. Ausgewählte Artikel, insbesondere aus der OpenSSH-Ecke, die zahlreich extern verlinkt sind, werde ich Zug um Zug wieder freischalten.

Der erste neue Post hier wird unter dem Motto “Too good to” stehen, für Fundstücke aus der täglichen Arbeit, die bei Github oder Twitter nur hoffnungslos untergehen würden.

Der Plan ist, ab dem Relaunch die gesamte Kommentarfunktion über ActivityPub abzuwickeln. Viel Spaß beim Experimentieren.

Sollte binblog.de mit diesem Post bei jemandem nach 15 Jahren im RSS-Reader wieder auftauchen, vielen Dank für deine Hartnäckigkeit, du hast mir die ganze Zeit aufs Übelste gefehlt!

Ab jetzt offiziell alt

Da ich mit meinen 48 Jahren seit kurzem Hörgeräte trage und immer wieder die selben Fragen und Geschichten höre, will ich mal aufschreiben, wie das so gelaufen ist.

Iggy Pop, 72, lebende Legende, im Interview

Prolog

Im Jahr 2004 operierte ich im Alter von 32 Jahren am Rand des Hörsturz herum und wurde vom notfallmäßig aufgesuchten HNO-Arzt gefragt, ob ich denn wisse, dass ich schwerhörig sei. Ich habe mir das nicht weiter zu Herzen genommen, sondern mit einem Schulterzucken abgetan aber ab da zumindest peinlichst darauf geachtet, bei jeglichen lauten Tätigkeiten, Konzertbesuchen u.ä., Gehörschutz zu tragen.

Irgendwann Mitte der 2010er Jahre wurde ich erneut von einem HNO-Arzt darauf angesprochen, bis der selbe Arzt mich im Herbst 2019 schließlich klar aufforderte, mal darüber nachzudenken, mir Hörgeräte anpassen zu lassen. Der Hörtest war in den hohen Tönen extrem durchwachsen und ein Test des Sprachverständnis wirklich miserabel ausgefallen. “WURST”, “DURST”, “ZANK”, “DANK”, “ZOPF”, “TOPF”, wer kann solche sprachlichen Feinheiten schon genau unterscheiden?

OMG erstmal googeln

Wer plötzlich mit diesem Hörgerätegedöns konfrontiert ist, will natürlich auf jeden Fall zunächst einmal und überhaupt unbedingt ein Gerät, das unsichtbar im Gehörgang verschwindet. Bloß kein so ein Ding hinterm Ohr. Nach etwas Recherche bleibt einem aber nichts anderes, als diese einfachen Umstände zu akzeptieren:

  • Wer Bluetooth will, muss aus dem Schädel draußen bleiben, um Funkempfang zu haben.
  • Niemand will sich einen Lithium-Ionen-Akku tief in den Gehörgang schieben. Es gibt keine Akku-Geräte für ins Ohr.

An dieser Stelle darf dennoch bereits gespoilert werden, dass Akku-Geräte auch hinterm Ohr äußerst unüblich sind. Gängig sind Geräte für die Batteriegrößen “Typ 10” und “Typ 312”. Typ 10 ist eine winzige Batterie mit 6mm Durchmesser und der Standard für Geräte im Gehörgang. Typ 312 ist mit 8mm Durchmesser immer noch ziemlich klein und, so wie ich das sehe, der gängigste Standard für Geräte hinterm Ohr.

Da ich bereits Erfahrung mit per Otoplastik angepassten Kopfhörern hatte, die im Gehörgang gern mal nervig, juckend und schwitzig werden, habe ich mich sehr früh gegen ein In-Channel-Gerät entschieden.

Was die Google-Ergebnisse angeht, gibt es im Internet kaum Informationen über Hörgeräte, bei denen es sich nicht um offizielle Verlautbarungen der Hersteller handelt. So gut wie alle jüngeren Hörgeräteträger im Netz sind von Geburt an schwerhörig und haben in dieser Lage wohl nochmal ganz eigene Filterblasen, innerhalb derer der Austausch über die Hardware stattfindet, wenn überhaupt.

Let’s do this

Im Oktober 2019 ging es also los und ich machte mich mit einer Verordnung vom Ohrenarzt auf den Weg zum Akustiker.

Der Siemens-Ableger Signia-Hörgeräte verkauft sich im Web ziemlich hochglänzend als der Marktführer schlechthin, und so startete auch der Akustiker erstmal mit dem Test des Signia Pure 312.

Signia Pure 312

Der Einstieg in die Benutzung dieser Geräte gestaltete sich dann allerdings deutlich weniger angenehm, als erwartet. Wo ich eben noch gelesen hatte, dass Apple iOS die beste Hörgeräteunterstützung bietet, lieferten sich plötzlich das iPhone und das iPad erbitterte Schlachten um die Lautstärkeregelung der Hörgeräte. Die Übergabe der Soundwiedergabe zwischen iPad und iPhone funktionierte bisweilen überhaupt nicht und beim Telefonieren wurden die eingebauten Mikrofone der Hörgeräte nicht benutzt, sondern ich musste das iPhone wie die sprichwörtliche Scheibe Knäckebrot vor den Mund halten.

Begleitet wurde das ganze von wiederkehrenden Störgeräuschen (“Zing!”), die ich auf Haare am Mikrofon zurückführte. Auf der Heimreise vom 36. Chaos Communication Congress kamen dann analog klingende Störgeräusche dazu, die sich anhörten, wie wenn an einem FM-Funkgerät die Rauschsperre kurz aufgeht. Was für ein digitales Gerät schon ziemlich bemerkenswert ist.

Mit meinem beträchtlichen Waschzettel an Macken diagnostizierten Akustiker und Hersteller einen Hardwaredefekt und die Pure 312 wurden durch andere Geräte des selben Modells ersetzt. Diese hatten leider die exakt selben Macken, waren dazu noch extrem empfänglich für Rückkopplungen und hatten extremst kurze und unsymmetrische (links noch einmal 50% kürzer als rechts) Batterielaufzeiten. Nach zwei weiteren Wochen wechselten wir dann auf ein anderes Modell von einem anderen Hersteller.

Sind wir bald da?

Nach der Pleite mit Signia ging es nun also mit einem OPN S 2 von Oticon weiter.

Oticon hat eine vollkommen unterschiedliche Plattform, die anders als Signia nicht nur keine Steuerung per Ultraschall mehr erlaubt, sondern auch Taschensender ausschließlich per Bluetooth Low Energy anbindet, dafür aber erstaunlicherweise nicht kabellos durch den Akustiker konfigurierbar ist. Als Träger wird man zur Anpassung mit einem wirklich beträchtlichen Kabelbaum behangen und der Akustiker muss dabei mit den vielleicht filigransten Adaptern hantieren, die ich je gesehen habe.

Leider zeigten sich sofort, noch im Studio des Akustikers, die selben Probleme mit der Bluetooth-Kommunikation. Im Gegensatz zu Signia gab es hier allerdings ein Telefongespräch mit dem Hersteller, bei dem folgendes rauskam:

  • Die Hörgeräteintegration bei Apple ist nicht so gut, wie man glauben könnte.
  • Wenn man zwischen iPhone und iPad wechseln will, schaltet man besser beim jeweils ungenutzten Gerät Bluetooth aus.
  • Bluetooth Low Energy gibt die Nutzung der in den Hörgeräten verbauten Mikrofone zum Telefonieren nicht her, sondern da muss nochmal ein Stück Hardware zum anclipsen ran (bei Oticon: ConnectClip, bei Signia: Streamline Mic, jeweils ca. 200 Euro), das per Bluetooth mit dem Handy gekoppelt wird und das Mikrofon beinhaltet.

Das war jetzt nicht wahnsinnig begeisternd, aber zumindest klar kommuniziert.

Seit dem Umstieg auf Oticon habe ich keinerlei Störgeräusche mehr im Ohr. Es waren NICHT die Haare! Die Oticons in die Rückkopplung zu treiben, ist nahezu unmöglich, während ich bei Signia nur mit der Hand in die Nähe des Ohrs kommen musste. Zusammen mit der ganz gut gelungenen akustischen Anpassung der Oticon-Geräte werde ich den ganzen Tag kein einziges mal daran erinnert, dass ich Hörgeräte trage.

Stromversorgung

Oticon OPN S2

Wie schon gesagt, sind Akkugeräte unüblich. Sie fallen vor allem durch ihre kurze Laufzeit auf. Die Hersteller werben mit “Leistung für einen ganzen Tag” und selbst Signia verspricht für das Flaggschiff Styletto X in Verbindung mit dem Lade-Etui, also einer Hosentaschenbox mit Akku, wie man sie von den Apple Airpods kennt, nur 4 Tage Unabhängigkeit von der Stromversorgung.

Eine Zink-Luft-Batterie vom Typ 312 hält dagegen 6 Tage, in extrem ruhiger Umgebung auch mal 7 Tage, so dass man mit einem handelsüblichen Sixpack Batterien zum Preis von 2 Euro nicht nur für einen halben Monat unabhängig ist, sondern den international gängigen Batterietyp auch in der hinterletzten Ecke der Welt, wie etwa in der Apotheke oder im Baumarkt, nachkaufen kann.

Da Zink-Luft-Batterien bei Amazon in den Rezensionen massenhaft als “Fälschungen” oder “minderwertige Qualität” in der Luft zerrissen werden, sei an dieser Stelle noch einmal gesagt, dass jede Batterie nach dem Abpulen des Siegels mindestens eine Minute lang atmen muss, bevor man sie einsetzt. In den Batterien sind Luftlöcher, durch diese muss Sauerstoff reinkommen, und erst dann fangen die Dinger an, Spannung abzugeben. Ich habe erst um die 50 Batterien durch, aber bei denen war kein einziger Ausfall dabei.

Kopfhörer, Freisprechen etc.

Mit der so stark beworbenen Bluetooth-Funktionalität gibt es ja nun gewisse Probleme. Da meine Hörgeräte im Gehörgang mit “offenen” Gummischirmchen sitzen, können sie beim Musikhören keinen Bass wiedergeben, so dass ich sie allenfalls mal benutze, um am Handy ein Youtube-Video anzusehen. Steckt man das Handy mit dem Mikrofon nach oben in die Hemdtasche, kann man behelfsweise ganz ordentlich telefonieren.

Da die Oticon-Geräte sehr resistent gegen Rückkopplungen sind, kann man ohrumschließende Kopfhörer schnell drüberziehen, ohne mit Problemen rechnen zu müssen. Kopfhörer mit Active Noise Canceling funktionieren hervorragend, allerdings sind meine Hörgeräte mit ihrer Verstärkung hoher Töne nicht gerade hilfreich, wenn es um die hohen Töne geht, die ANC-Kopfhörer typischerweise nicht gut unterdrücken können.

Ich telefoniere weiterhin hauptsächlich mit meinen Jabra Evolve 75. Auch wenn diese leider ohraufliegend sind, ist die Sprachqualität beim Gegenüber einfach zu überragend, um irgendwelche Experimente zu unternehmen. Die Hörgeräte haben aber natürlich bei ohraufliegenden Kopfhörern absolut freie Bahn, um Außengeräusche ins Ohr zu pumpen. Nachdem ich endlos lange am Handy herumregeln musste, habe ich mir nun die Taste an den Hörgeräten mit der Mute-Funktion belegen lassen, so dass ich sie beim Telefonieren mit einem Handgriff einfach stummschalten kann.

Auf die Anschaffung des ConnectClip werde ich wohl verzichten, da ich mir davon keinen Nutzen verspreche.

Zwischenzeitlich bin ich auch Besitzer des oben bereits erwähnten ConnectClip, der genau wie beworben funktioniert.

Kosten

Es ist wahr, einfach alles. Die dunkle Seite, es gibt sie.

Ein solcher Satz Hörgeräte kostet 4000 Euro, und das ist noch nicht die oberste Preisklasse. Aus nichttrivialen Gründen habe ich beim Akustiker einen ausgesprochen hohen Rabatt auf den Eigenanteil bekommen, so dass ich nach Schnickschnack, Rezeptgebühr, Abschluss einer Versicherung und Rundungsdifferenz mit einem Kreditkartenbeleg von 1600 Euro aus dem Laden raus bin. Die angenommene Lebensdauer beträgt 6 Jahre; erst danach zahlt die Krankenkasse wieder ihre ca. 1500 Euro zu.

Ich habe das teure Gerät genommen, weil ich es kann und es mich technisch interessiert hat, aber wer sich zu einer solchen Ausgabe nicht in der Lage sieht, sollte auf jeden Fall Abstriche beim ohnehin mangelhaften Bluetoothzirkus machen. Auch bei den teuer vermarkteten Signalverarbeitungs-Features (etwa “Own Voice Processing” bei Signia) ist nicht alles Gold, was glänzt, und exzellente Ergebnisse wohl nur mit noch mehr Sitzungen beim Akustiker erreichbar. Die App und die ganze Smartphone-Fernsteuerung habe ich ebenfalls zur Seite gelegt, seit die Tasten an den endgültigen Geräten nach meinen Wünschen belegt sind.

Fazit

Bis die Geräte vernünftig angepasst waren, musste ich mich wirklich verflixt oft auf den Weg zum Akustiker machen. Ich kann mir gut vorstellen, dass manche Leute da irgendwann die Nerven verlieren, Ja und Amen sagen, und schließlich auf Geräten sitzen, die sie nicht tragen wollen.

Wieviel Kraft es das Gehirn gekostet haben muss, ständig zwischen den Zeilen zu interpolieren, was der Gesprächspartner wohl wirklich gesagt hat, merke ich erst jetzt deutlich. Diese Routine ist weg und wenn ich die Geräte heute ablege oder stummschalte, höre ich einfach nur noch unglaubliches Genuschel und frage mich, wie ich jahrelang so leben konnte. Im Garten höre ich wieder die Vögel singen und die Insekten summen. Ich kann ins Café zu meinem Stammtisch gehen, ohne dass ich irgendwann mental auf Durchzug schalten muss. Ich konnte mit den gerade so erstangepassten Signia-Geräten meine Frau zur Weihnachtsfeier ihrer Firma begleiten, ohne wie ein begriffsstutziger Zausel dabei zu sitzen.

Das klingt alles wie ein unglaubliches Klischee aus der Hörgerätereklame, ist aber wirklich genau so gelaufen.

Seid nicht wie Iggy Pop, seid wie ich. 😊

Frage: “Hilft ein Hörgerät auch gegen Tinnitus-Geräusche?”

Ja. Ich höre zwei sehr hohe klirrende Töne um 8 und 10 kHz, die mich zwar noch nie am Einschlafen gehindert haben, aber tagsüber ganz schön zur Belastung werden können. Ich habe vor einiger Zeit mit Tinnitus-Playlisten auf Spotify experimentiert und diese bereits als Entlastung empfunden. Meine Hörgeräte haben einen aktivierbaren Tinnitus-Noiser, um ein relativ hochfrequentes Rauschen einzuspielen. Das kann in stressigen Situationen auf diskrete Weise als Entlastung dienen. Wichtiger ist in den meisten Situationen, dass der Tinnitus durch die Verstärkung der hohen Töne keine Sprachlaute mehr überdeckt. Dadurch kann er sich nicht mehr so einfach in den Vordergrund spielen.

Aggressive NTP configuration on Windows 10

Screenshot of time.is in Esperanto

While clicking around on time.is, which has a nice Esperanto translation that you may want to to check out, I kept running into large-ish time offsets of at least several tenths of a second on a Windows 10 machine.

As a Linux guy, my first instinct was to replace the interval-based synchronization option in Windows with an NTP daemon, and so I found Meinberg’s ntpd distribution for Windows. While this ntpd would start flawlessly, over the course of every day it ran into some impossible to debug condition where NTP time reached a significant offset from the system clock again and unlike at startup, the daemon wouldn’t adjust the system clock anymore.

So I turned back to Windows’ built-in time synchronization. Indeed, the people at Meinberg also have helpful advice for it and suggest a few defaults to keep the system clock closely tied to an NTP reference clock. So here’s an attempt at configuring a clean NTP setup on Windows 10.

First of all, the timekeeping service needs to be stopped and fortunately Windows 10 provides the ability to start over with a fresh timekeeping configuration (all following actions must be applied using an administrator role):

net stop w32time
w32tm /unregister
w32tm /register

At this point, the defaults as suggested by Meinberg can be added to the registry:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config]
"FrequencyCorrectRate"=dword:00000002
"MaxPollInterval"=dword:00000006
"MinPollInterval"=dword:00000006
"UpdateInterval"=dword:00000064

Finally, a restart of the timekeeping service and configuration of the NTP reference clocks:

net start w32time
sc config w32time start=auto
w32tm /config /syncfromflags:manual /manualpeerlist:"0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org 3.pool.ntp.org" /update

NTP synchronization status can be queried using the w32tm command again:

w32tm /query /peers
w32tm /query /status /verbose

In my highly scientific observation of the system, I haven’t seen any clock offsets ever since.

Further reading: “Windows Time Service Tools and Settings” by Microsoft.

What goes up, must come down. Ask any system administrator.