Hoch Valyrisch und Duolingo

Schon bei Game of Thrones war ich fasziniert von der erfundenen Sprache Valyrisch. Neulich haben wir dann House of the Dragon angeschaut und dort wurde sogar mehr Valyrisch gesprochen. Und nach einer kurzen Recherche habe ich erfahren, dass die Sprache ausgebaut wurde und jetzt wie Klingonisch oder Elbisch ein erlernbare Sprache ist. Und schon kam der Geek in mir durch. Warum nicht lernen? Und so habe ich mich bei Duolingo gefunden. Den Kurs gibt es aber nur mit Englisch als Basissprache. Und da ich vor langer Zeit mal gelesen habe, dass das sogar eine bessere Art ist eine neue Sprache zu lernen habe ich mich angemeldet.
Es ist echt klasse gemacht und überraschend wie weit man mit der kostenlosen Version kommt. Auch wenn man manchmal auf Punkte stößt, die meiner Meinung nach so programmiert sind, um in das Abo gezwungen zu werden. Ich akzeptiere es aber, denn die Firma muss ja Geld verdienen.
Und so werde ich jetzt mal üben und schauen wie weit ich komme.

Wer auch Interesse hat kann mich gerne als „Freund“ hinzufügen.

https://www.duolingo.com/profile/Kobaltauge?via=share_profile

Jedi Tricks – Public IP per bash und Telegram

Am Wochenende war ich unterwegs und wollte kurz zuhause etwas nachschauen. Jedoch konnte ich mich nicht per VPN an meine FritzBox anmelden. Grund dafür ist die geändert Public IP Adresse. Diese ändert sich bei mir nicht sehr oft, aber meistens, wenn man sie braucht, ist sie eine andere als im Smartphone gespeichert.
Und so habe ich eine Möglichkeit gesucht, wie ich immer die Adresse parat habe. Und ja, ich kenne das ganze DynDNS gedöns und über MyFritzBox gibt es sicherlich auch eine Möglichkeit. Aber a) ist mir echt zu nervig zu konfigurieren und b) wird sicherlich bei beiden Diensten ein Account benötigt. Beides also nervig.
Also dachte ich mir, ich schreibe ein kleines Python Skript, dass mit die IP Adresse als Text irgendwo speichert, damit ich sie jederzeit erreichen kann. Doch die einfachste Methode die Public IP zu bekommen ist ein Bash Befehl:

dig +short myip.opendns.com @resolver1.opendns.com

Des Ergebnis in einer Variable/Textfile zu packen und dann mit Python noch einen Schritt durchzuführen, dass was mir auch zu komplex. Und dann kam mir die Idee, warum nicht einfach die Adresse an mein Telegram Chat, den ich auch für andere Überwachungen benutze, schicken. Telegram ist, was Bots betrifft, ein genialer Messenger. Denn eine Nachricht kann man auch mit einem einfachen curl Befehl absetzten. Und das wiederum ist perfekt für die Bash. Und so haben ich diese Fingerübung runtergehackt und lasse sie per Cron Job jede Nacht laufen.
Damit finde ich dann auch heraus wie oft sich meine IP ändert.


#!/bin/bash
GROUP_ID=
BOT_TOKEN=
# URL = "https://api.telegram.org/bot{}/".format(TOKEN)
myip="$(dig +short myip.opendns.com @resolver1.opendns.com)"
curl -s --data "text=$myip" --data "chat_id=$GROUP_ID" 'https://api.telegram.org/bot'$BOT_TOKEN'/sendMessage' > /dev/null

PS: Wie du die ChatId herausfinden und dir einen eigenen Bot Token erstellen kannst, werde ich demnächst erklären.

Pi-hole YouTube ad blocker #2

Gestern habe ich berichtet, dass ich die Blacklist per regex optimiere. Leider hat das nicht lange angehalten.
Nach dem Post, dem Abendessen und der neuen Folge „House of the Dragon“ wollte ich mir noch ein paar YouTube Videos reinziehen. Jedoch hat die App auf dem FireTV komplett gestreikt. Es wurde zwar keine Werbung angezeigt, aber sie hat auch nicht einfach weiter zum Video gesprungen.
Ich weiß nicht, ob das an der App liegt oder ob der Timeout einfach zu lange für meine Geduld war. Gestern Abend habe ich dann die Regel deaktiviert um noch etwas zu schauen.
Weitere Experimente verlege ich dann wohl ins Wochenende, wenn etwas mehr Zeit ist.

Pi-hole YouTube ad blocker

Neulich hat jemand auf Mastodon gefragt, ob man mit dem Pi-hole auch YouTube Werbung blocken kann. Als Antwort darauf gab es einen Link in ein GitHub Repository mit einer scheinbaren Lösung.

Auf der einen Seite bin ich eine Person, die Werbung auf YouTube laufen lässt, weil ich mir damit einbilde, dass ich den Creator damit auch unterstütze. Und wenn ich schon seinen Content kostenlos serviert bekomme, dann kann ich auch mal eine 20 Sekunden Werbung anschauen (ja, auf TikTok sind 20 Sekunden fast 2 Beiträge, aber was soll’s).
Andererseits sind die 20 Sekunden meine oberste Schmerzgrenze. Wenn eine Werbung länger ist, dann ist der Klick auf den „Werbung überspringen“ Button schnell erledigt.

Ich bin aber ein Geek und ich liebe außergewöhnliche Lösungen. Was genau macht denn diese Lösung von kboghdady?
Er selbst pflegt eine Liste mit all den DNS Einträgen der Google Werbeserver. Mit dem bereitgestellten Skript lädt er diese Liste auf den Raspi und schießt diese dann direkt in die SQlite Datenbank des Pi-holes als neue Blackliste. Dabei überprüft er auch doppelte Einträge und bereinigt sie. Ein echt cleveres Skript, dass nur einen Cronjob braucht.

Und funktioniert es? Leider nein. Denn schon an der Beschreibung, dass man das Update Skript stündlich ausführen soll, sieht man, dass es ein Kampf gegen Windmühlen ist. Denn die Ressourcen von Google neue DNS Ad-Server zur Verfügung zu stellen ist unbegrenzt. Und so sehe ich auf meinem FireTV immer noch Werbung. Im Logfile des Pi-hole sehe ich zwar ab und zu geblockte Abfragen, aber dann auch gleich wieder zig neue „grüne“ Einträge.

Jedoch ist mir etwas aufgefallen, dass die DNS Namen ein bestimmtes Muster haben. Sie fangen immer mit 2 oder 3 Zeichen, meistens „r“, an, dann folgen drei Minuszeichen, bis dann der Rest in einer „googlevideo.com“, einer „.c.youtube.com“ oder einer „gvt1.com“ Domain endet.
Also habe ich Folgendes jetzt mal bei mir eingebaut. Klar blocke ich nicht die Domains, denn dann wird YouTube sicherlich nicht mehr funktionieren. Aber im Pi-hole kann man mit Regex arbeiten. Diese zwei Regeln sind jetzt in meiner Blacklist.

^..---.*
^...---.*

Kurze Erläuterung. Das „^“ steht für den Beginn. Der „.“ für ein beliebiges Zeichen. „.*“ dann für alle Zeichen in unbestimmter Anzahl. Damit ergibt sich folgender Suchbegriff:
Es fängt mit 2 beliebigen Zeichen an, gefolgt von 3 Minuszeichen und nach den Minuszeichen kommen beliebige Zeichen in beliebiger Anzahl hinterher.
Der zweite Eintrag ist dann für die Domains, die 3 Zeichen vor den Minuszeichen haben.

Ich werde diese Einstellung mal die nächsten Tage laufen lassen und hier berichten. Es muss doch einen Grund geben, warum kboghdady den cleveren, aber so gesehen umständlichen Weg über die festen Einträge geht.

Jedi Tricks – S-Verweis in VIM

Ich bin immer wieder erstaunt, was mit vim alles möglich ist. Auch wenn es mir unter Windows nicht ganz so fluffig von der Hand läuft wie Notepad++, so gibt es einfach Aufgaben, die einfach nicht anders machbar sind. Heute war wieder so ein AHA-Moment.
Folgenden Situation. Die erste Datei ist eine XML Datei die mittendrin mehreren Dutzend Datenzeilen hat, mit folgender Struktur (nur mir noch mehr „Feldern“).

<id="00001" name="Viserys" alter="100">
<id="00002" name="Daemon" alter="100">
<id="00003" name="Rhaenyra" alter="100">
<id="00004" name="Alicent" alter="100">

Wie man sehen kann haben alle das Alter von 100.
Die zweite Datei kam aus einer Datenbank schön als CSV. Nach dem Löschen von unnötigen Spalten hatte ich folgendes:

26,0003
40,0002
26,0004
60,0001

Wie bekommt man jetzt das richtige Alter in das Feld in die XML ohne die Struktur der Datenzeilen und der gesamten XML zu zerstören?
Früher hätte ich alles irgendwie ins Excel gebracht, mit S-Verweis herumgedoktort, dann in Notepad++ die, dann Tab getrennten Einträge aus Excel, bereinigt und am Ende alle anderen Daten vor und nach den Einträgen per Copy&Paste wieder rangetackert.

Ein Python Skript zu schreiben war mir zu aufwändig, denn es waren insgesamt keine hundert Einträge. Da einen kompletten Parser zu bauen… Nein.

Mir kam die Idee das mit vim Makros zu lösen aber es sind ja zwei Dateien. Und dann kam mir die Idee, was ist wenn das Makro auch mehrer Tabs in vim steuern kann? Und nach einem kurzen Test hatte ich die Bestätigung, es geht. Also beide Dateien in vim in separaten Tabs öffnen und folgendes als Makro gespeichert.

– Sprung an den Anfang der Zeile
0
– Suche Eintrag id
[ESC]:/id[Return]
– Zwei Worte vorwärts und alles in den Anführungszeichen in den Zwischenspeicher lesen
2wvi"y
– In den Tab wechseln zu der Datei (das kann unterschiedlich bei jedem sein wegen der Reihenfolger der Tabs)
[STRG]+h
– Suche nach Eintrag aus dem Zwischenspeicher
[ESC]/[STRG]+r"[Return]
Damit ist man in der entsprechenden Zeile. Das ist der S-Verweis =)
– An den Anfang springen und das Alter in den Zwischenspeicher kopieren
[ESC]0yw
– Zurück in die XML Datei
[STRG]+l
– Den Eintrag „alter“ suchen
[ESC]/alter[Return]
– Zwei Wörter vorwärts alles in Anführungszeichen markieren und durch den Inhalt des Zwischenspeicher ersetzen
2wvi"p
– Und damit man mit der nächsten Zeile weitermachen kann enden die Makros eigentlich fast immer mit „runter“ und an den Anfang der Zeile
[ESC]j0

Und das war’s. An drei Zeilen getestet und als gut befunden. Und dann mit
100@a[Return]
der Magie zugeschaut wie es blitzt und blinkt und alles wie gewünscht aufgeräumt wird. Klar muss man aufpassen das nicht weitere „id“ Einträge irgendwo sind (mein Feldnamen war eindeutiger).
Man kann es aber auch Zeile für Zeile ausführen und trotzdem einen haufen Zeit sparen.

Vim Makros sind das Beste.

DRL – Drone Racing League umsonst im Epic Store

Drohnen sind auch so ein technisches Gadget, die schon soooo lange auf meinem Wunschzettel stehen. Aber nicht nur die Fotodrohnen wie diverse Bekannte von mir haben, sondern die FPV-Drohnen. Ich habe deswegen noch nie „zugeschlagen“ weil mir einfach die Zeit fehlt, das als zusätzliches Hobby durchzuführen. Kurzzeitig habe ich meine Leidenschaft mit der Drone Racing League im Fernsehn befriedigt. Aber diese wird scheinbar nicht mehr gesendet. Zumindest taucht es nicht mehr in meinem Radar auf.
Was aber aufgetaucht ist, ist das aktuelle Angebot von Epic Games in deren Store. Ich habe es mir geschnappt und konnte heute ne lockere Stunde ein wenig herumfliegen. Zuschlagen, denn Mitte Oktober ist das Angebot vorbei.

https://store.epicgames.com/en-US/p/the-drone-racing-league-simulator

Star Wars: Andor (Folge 1-3)

Zur Zeit verfolge ich viele Serien parallel. Das was auch der Grund warum ich, obwohl ich ein sehr großer Star Wars Fan bin, nicht mit Andor anfangen wollte. Jedoch kann man sich der Serie kaum entziehen. Zuerst die Veröffentlichung der ersten drei Folgen und dann das überwältigende positive Feedback von allen Seiten. Und nach dieser harten Woche habe ich beschlossen mir etwas Gutes zu tun.

Die Serie hat echt einen sehr guten Look. Sowas dreckiges, hartes, reelles. Genau das, was mir an…. Oh ha, ich wiederhole mich. Jedoch war ich ein wenig überrascht als die erste Folge zu Ende war. Irgendwie zu früh, sie ist nicht in Fahrt gekommen. Da ahnte ich, warum man drei Folgen auf einmal auf den Markt geworfen hat. Zum Glück hatte ich mir auch genug Zeit genommen. Gleich weiter zu Folge Zwei. Und da genau das Selbe. Zu schnell vorbei und immer noch nicht in der Spur. Dafür schloss Folge 3 das Paket ab. Eine großartige Folge und die Klammer um alle Drei. Besonders die Schlussbilder sind ganz ganz großes Kino.

Ich bin gefesselt und werde die nächsten Mittwoche doch kaum abwarten.

Elektronische Kassenbons – Teil 1

Vor zwei/drei Wochen veröffentlichte Daniel vom Hack the Plant Podcast und Schrankmonster Blog, eine Nachricht, dass er an einem Projekt arbeitet um die eBons auszulesen und die Informationen wegzuschreiben. Das hat er vor Kurzem in diesem Blog Post veröffentlicht.

Davon inspiriert und mit der Kaufland App ausgestattet, habe ich mich hingesetzt und das Ganze in Python nachgebaut. Und es war der Horror.

Angefangen mit dem Problem, dass es keine Möglichkeit in der App gibt die Bons per Email automatisch zu verschicken. Also kann man diese nur herunterladen und abspeichern. Oder ich hätte irgendwie die Netzwerkkommunikation der App abgefangen. Aber das habe ich mir für später aufgehoben. Beim Abspeichern wird dann auch das aktuelle Datum und Uhrzeit als Dateiname verwendet. D.h. man kann nicht erkennen, welchen Bon man schon gespeichert hat und welchen nicht. Ich habe jetzt viele doppelte PDFs im Ordner.

Das nächste Problem war die PDFs einzulesen und die Daten zu extrahieren, denn die PDFs sind nicht lesbar es sind Bilder. Was mich zu einer Testorgie mit OCR Software Paketen gebracht hat. An Ende bin ich bei pytesseract gelandet. Leider muss dafür auf dem Linux Tesseract installiert sein. Aber das ist ja auch kein Problem, nur fällt jetzt Windows als OS erstmal aus. Nach diversen Einstellungen haben ich dann doch eine Lösung gefunden. Und so kann das Skript jetzt auch die Bons einlesen und sogar kleine Scanfehler erkennen.

Der Rest sollte Makulatur sein. Aus den Summen, wenn man z.B. mehrere Packungen gekauft hat, wieder Einzelpreise berechnen. Und dann alles in die Influx schieben. Jedoch ist mir dann aufgefallen, dass durch die OCR manche Produkte doppelt vorkommen, wenn z.B. ein Leerzeichen nicht sauber erkannt wird. Und so sind das wieder Kleinigkeiten die ich noch ausbessern muss.

Als alles lief, wollte ich das Skript auf meinem Raspi 3 zum laufen bringen, denn auf dem läuft ja auch die Influx und mein PiHole. Der läuft eh immer und ich muss ja deswegen nicht mein Rechner dafür anwerfen. Aber da habe ich die Rechnung nicht mit dem Prozessor des Raspi gemacht. Leider geht dieser komplett in die Knie, wenn pytesseract die Arbeit aufnimmt. Und zwar so arg, dass ich sogar kein Internet mehr habe, weil für PiHole zu wenig Ressourcen übrig bleiben. Ich habe dafür noch keine Lösung, und werde das Auslesen wohl weiterhin auf meinem Rechner durchführen.

Im Augenblick arbeite ich daran die Skripte sauber zu machen (also alle hardgecodeten Logins zu entfernen) damit ich alles nach Github werfen kann. Das stelle ich dann euch zur Verfügung. Und als nächstes sind dann die Lidl Bons dran.

Bei Fragen könnt ihr mich gerne kontaktieren. Hier in den Kommentare oder einfach auf Mastodon, Twitter oder auf dem Telegram Kanal.

Dune bei Man nerdet nie aus

Ich bin vor einiger Zeit auf den Podcast „Man nerdet nie aus“ aufmerksam gemacht worden. Als erstes habe ich mir die Buffy Folge angehört und es hat mir sehr gut gefallen. Und als Zweites stand die Dune Folge an. Diese habe ich gerade zu Ende gehört. Und ich muss sagen, dass der Gast sehr gut rüber kam und auch recht kompetent klang. Ich kenne von Dune nur den David Lynch Film, den ich sehr gut fand, und den Neuen von Denis Villeneuve, den ich auch sehr gut fand, jedoch nicht als „DEN“ Meilenstein der Filmgeschichte ansehe. Auf jeden Fall hat es echt Spaß gemacht den Beiden zuzuhören auch wenn heftig Film und Bücher gespoilert werden, aber davor wird ja auch gewarnt.

Nur gegen Ende bin ich ein wenig enttäuscht worden. Denn da hacken die Beiden auf Solo: A Star Wars Story ein. Und mich als Star Wars Fan hat das echt ein wenig getroffen. Aber es geht ja um Dune und nicht um Star Wars.

Star Wars Nachschub

So kann ein Sonntag immer sein. NFL geht wieder los, „meine“ Dolphins sind mit einem 20:7 Sieg gestartet, und Disney hat die D23 Veranstaltung durchgeführt. Es sind viele neue Dinge angekündigt worden die alle irgendwie spannend sind. Meine Highlights betreffen aber das Star Wars Universum.
Angefangen mit dem letzten Trailer von Andor vor dem Serienstart in Kürze. Die Serie sieht so dunkel und dreckig aus, wie Solo: A Star Wars Story. Das gefällt mir und ist auch ein Grund warum ich Star Wars Star Trek vorziehe.

Und dann The Mandalorian Staffel 3. Ok, das war zu erwarten. Die Aussicht die Geschichte von Mandalore weiter erleben ist genial.
https://youtu.be/odnRRZKhNP

Aber die größte Überraschung für mich war die Ankündigung von Tales of the Jedi. Das habe ich überhaupt nicht vorher mitbekommen. Kurzgeschichten á la Star Wars: Visionen, aber im Star Wars: The Clone Wars Setting. Bestens!

Das wird eine aufregende kommende Zeit. Man darf ja auch nicht Ashoka und Bad Batch Staffel 2 vergessen.