Meine Welt

Tag: geek

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.

https://oldbytes.space/@millihertz/109172460432713406

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.

geek, youtube, pi-hole, regex


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.

geek, vim


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

geek, drohne, drl


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.

geglotzt, andor, geek, star-wars


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.

geek, influxdb, python, ocr