Beats

Beschreibung
Die Internet Time ist eine Erfindung aus der Schweiz, auch als Swatch™ Beats® bekannt.
Es ist absurd und genial zugleich:
Der Tag wird in 1000 Einheiten (Beats) unterteilt, und diese sind weltweit einheitlich. Sommer- bzw. Normalzeit gibt es nicht.
Punktabzug in der B-Note gibt es, dass dazu eine neue Zeitzone erfunden wurde - die Biel Mean Time.
Ist aber deckungsgleich mit der Normalzeit Europe/Berlin bzw. UTC+1
Projekt
Das Problem an sich ist einfach, aber lass doch mal was mit MQTT und WebSockets machen.
Buzzword-Kompatibel einen Microservice in Java mit Spring-Boot.
Zum vollen Beat wird dieser per MQTT veröffentlicht, die Webseite zeigt Beats, Centi-Beats und Milli-Beats an.
Auch gibt es eine REST-Api und eine Metrics Integration für Prometheus.
Werkzeuge
Spring-Boot auf Java 17 (damals; inzwischen 21), dazu den WebSocket Stater. Eclipse Paho für den MQTT Client.
Im Frontent: Vue3, SockJs und WebStomp. Dazu Bulma fürs CSS.
Implementierung
Ein Tag hat 86400 Sekunden (24 Stunden * 60 Minuten * 60 Sekunden).
Fein durch Tausend geteilt ergibt das den Faktor 86.4
Diesen muss man nur mit der momentanen Anzahl der Sekunden des Tages (in UTC+1 natürlich) multiplizieren, fertig ist der Karton!
Das ganze ins Spring Framework geworfen, WebSockets dran kleben, einen Aktuator für Prometheus implementieren,
dazu noch bisschen mit Paho einen MQTT Client basteln und zum richtigen Moment die Beats auf das (konfigurierbare) Topic publishen.
Nichts weltbewegendes, ganz normaler (Business-) Wahnsinn.
Aber: es macht Spaß, und so soll es doch auch sein!
Impression
Beats Screenshot
Zugegeben: Visuell ist die Webseite nicht sehr anspruchsvoll. Mehr Information als die aktuelle Zeit ist halt einfach nicht drin.
Immherhin hab ich noch die eine Progress-Bar hingezimmert.
Beim Klick wechselt die Anzeige der Zahl zwischen Vollen-, Centi- und Milli-Beats. Such wow!
Man kann errechnen wie viel Uhr es zum Zeitpunkt des Screenshot war - exakt 17:33:32 Uhr (UTC).
Vortrag
Für den lokalen Hackerspace™ vor Ort hatte ich mal einen kurzen Vortrag über diesen Service gehalten.
Schließlich läuft Beats auch dort, und füttert die MQTT Installation brav mit der aktuellen Uhrzeit. Internet kompatibel.
Ganz klar, dazu gibt es auch Folien.
Probleme
Zur Zeit des Vortrags hatte ich noch einen fießen Bug im Code...
Das Problem war: Bei Anzeige von Centi- & Milli-Beats wurden manchmal die Nachkommastellen übersprungen.
Im Prinzip™ hat alles funktioniert, die (normalen) Beats waren doch immer korrekt.
Es hat bisschen gedauert, und ich hab viel gefrickelt, bis es mir wie Schuppen von den Augen fiel...
Ein Beat ist zwar nur eine Minute und 26.4 Sekunden lang
Aber für ein zehntel oder sogar hundertstel davon ist die sekundengenaue Auflösung viel zu grob.
Sieh an: Nachdem ich alles auf Nanosekunden umgestrickt habe schnurrt alles wie ein Kätzchen. Butterweich. Phänomenal!
Fazit
Die Komplexität ist echt überschaubar. Der Sinn dahinter: Naja.. Fragwürdig.
Dennoch: Es ist eine Fingerübung.
Es ist also möglich mit der sperrigen Sprache Java filigrane Sachen zu machen, und dabei alles mit Unit-Tests abzudecken.
Außerdem wollte ich mir das Thema WebSockets mal ein bisschen näher anschauen... Es ist interessant, überzeugt mich aber (noch?) nicht.
Auch habe ich eine Menge über MQTT gelernt. Das ist die Hauptsache.
Alles in allem - hat Spaß gemacht; Gerne wieder.
Internet Time
Erstellt
02.10.2022 - 07:56:26
Editiert
20.04.2024 - 21:44:42
Tags
Java
MQTT
Microservice
Projekt