Nur ein kurzer Check-In zu diesem Projekt: Ich habe es gestoppt.
Die Tatsache, dass ich nicht an die Tags komme, und noch ein paar andere Kleinigkeiten haben meine Motivation leider ziemlich getrübt. Ich hab wirklich keine Lust in meiner App einen weiteren Datenlayer mit neuen Tags zu pflegen, die in der OG Reminders.app nicht angezeigt werden, nervt mich. Auch so Sachen wie die Sortierung der Listen und Todos wäre blöd geworden. So viel Zeit-Invest ist es mir doch nicht wert, dass ich am Ende eckige Checkboxen habe.
Ich erkläre dieses Projekt damit erstmal für beendet. Spaß hatte ich trotzdem und gelernt habe ich eine Menge! SwiftUI gefällt mir richtig gut.
Außerdem habe ich mir überlegt, die Kategorie “Projekte” im Wiki irgendwie aufzusplitten und noch “Experimente” einzufügen. Habe einen faden Beigeschmack dabei, so eine unendlich lange Liste von angefangenen “Projekten“ zu haben, von denen keins fertig wurde. Experiment trifft es einfach besser.
Ich mochte Better Call Saul die ganze Zeit über, für diese langsame, teilweise fast langweilige Erzählweise. Kein Actionfeuerwerk, teilweise so mittelspannende Themen, aber die Transformation von Jimmy McGill zu Saul Goodman so detailliert und gemächlich begleiten zu können war super.
Die letzte Staffel setzte der ganzen Sache nochmal das i-Tüpfelchen auf, in dem die Timeline vor Breaking Bad, die Timeline danach, mit Saul in seiner neuen Identität als Zimtschneckenbäcker, und sogar noch ein paar Szenen aus der Zeit mit Walt und Jesse zusammengeführt werden.
Breaking Bad und Better Call Saul zusammen sind schon eine der besten TV-Sachen dieses Jahrtausends.
Seit Jahren frage ich mich, ob und wenn ja, wie viel man eigentlich spart, wenn man sich bei McDonald‘s oder Burger King für ein Menü entscheidet. Schon des Öfteren stand ich vor der schweren Frage, ob es sich lohnt, ein Menü zu nehmen, wenn man zum Beispiel eh noch etwas zu Trinken im Rucksack hat. Wenn man das Getränk eh dazu geschenkt bekommt, wäre es ja Quatsch drauf zu verzichten. So eine frisch gezapfte Cola mit Eiswürfeln ist ja auch eh irgendwie leckerer als das abgestandene Leitungswasser im Rucksack.
Natürlich habe ich mich mich die letzten vierunddreißig Jahre nicht dazu aufraffen können, diese Rechnung aufzustellen, aber nun ist es soweit, ich werde dieses Mysterium lösen. Schauen wir es uns also mal an:
Okay. Man spart in beiden Fällen etwas, aber auf jeden Fall weniger, als so ein Getränk kostet, man bekommt es also nicht komplett geschenkt, aber immerhin zu einem ziemlich großen Discount. Die Frage, ob ich nun ein Menü nehme, obwohl ich schon ein Getränk besitze, wird also weiterhin eine Einzelfallentscheidung sein, die darauf beruht, wie viel Bock ich auf kalte Cola habe.
(Natürlich sollte man nicht darüber nachdenken, dass man im Supermarkt für das Geld fünf Liter Cola bekommt. Aber so viel Cola wäre ja auch irgendwie ungesund.)
Das Home Assistant existiert, war mir schon lange klar. Doch jahrelang benutzte ich es nicht, weil ich in diversen Blogs immer nur riesige Yaml-Blobs zur Konfiguration fand und das war mir irgendwie unsympathisch. Da kann ich mir auch kurz ne NodeJS-App schreiben, dachte ich mir, wenn ich mal was automatisieren will.
Jahrelang blieb mein Home also nicht besonders smart. Abgesehen davon, dass ich wenig Ideen zu sinnvollen Automationen hatte, konnte ich das ein oder andere mit den Homekit-Boardmitteln abdecken.
Vor einem halben Jahr fasste ich mal den Plan, Home Assistant doch mal anzugucken und jetzt habe ich diesen auch endlich in die Tat umgesetzt. Ich führte das Docker-Image aus, konfigurierte ein bisschen was und schwupps, ich bin ganz schön geplättet.
Home Assistant erkennt erstmal super viel im Netzwerk vollkommen automatisch und installiert die passenden Plugins. Fritzbox, Sonos, Apple TV, HomeKit. Für alles andere kann man mit drei Klicks zusätzliche Plugins installieren. Spotify, Synology, und so weiter. Es ist so verrückt, es funktioniert einfach alles wie Butter und ich musste noch nichtmal eine Yaml-Datei angucken.
Ich kann jetzt zum Beispiel meinen Wasser-Sensor anlecken und er spielt automatisch eins meiner Lieblingslieder von Keimzeit auf der Sonos-Box, wie cool ist das denn. Vom lokalen Plex-Server gestreamt! 🤯
Das einzige, was mich noch stört ist diese Material UI-Pest. Es sieht einfach kacke aus, sorry, Google. Immer noch besser als das klassische Open Source-System ohne Design, aber weit weg von schön.
Ich sage Bescheid, sobald ich mir eine Automatisierung überlegt habe, die mehr Sinn ergibt, als meine Testfahrt.
Zum Glück speichert MacOS alle iMessages in einer Sqlite-Datenbank. Will man nun zum Beispiel alle Links exportieren, die von einem bestimmten Kontakt geschickt wurden, um sie… irgendwo zu speichern, wo sie besser durchsuchbar sind, zum Beispiel, kann man sie mit einer einfachen Query rausholen:
sqlite3 ~/Library/Messages/chat.db "select datetime(message.date/1000000000 + strftime('%s', '2001-01-01') ,'unixepoch','localtime'), text from message where handle_id = 1 and text LIKE '%http%' order by date limit 100;"
Natürlich müsst ihr vorher mit einem SELECT * FROM handle herausfinden, welche handle_id verwendet werden muss, oder man lässt das einfach weg, um sich alle Links herauszufischen. Die kuriose Datetime-Geschichte am Anfang ist natürlich, weil die Daten als Nanosekunden seit dem 1.1.2001 gespeichert werden, oder so. Warum auch nicht.
Achja, damit das funktioniert braucht eure Terminal-App natürlich Full Disk Access, was man in den System Preferences unter Security einstellen muss
Ich wollte den Post schon länger schreiben, aber ich kam noch nicht dazu, weil ich gerade mal wieder eine Runde Factorio spielte.
Doch, warum mache ich das eigentlich? Habe ich nichts besseres mit meiner Zeit anzufangen, als ein Spiel zu spielen, in dem man riesige Produktionsstraßen für diverse Produkte aufbaut, dabei die Umwelt mit seinen schmutzigen Kraftwerken verpestet und zu guter Letzt noch die auf dem Planeten heimische Fauna zu Grunde metzelt? Na gut, das letzte stimmt in meinem Fall nicht, denn ich spiele Factorio immer in dem Modus, in dem mich die fiesen Monster nicht angreifen, so lang ich sie nicht angreife, daher gehen wir immer getrennte Wege. Quasi easy-mode.
Was gibt es schöneres als Schmelzöfen bei Nacht?
Seit dem das Spiel im Jahre 2016 herauskam und ich es damals für günstige Early-Access-20€ erwarb, bin ich mehrfach ein- und ausgestiegen und witzigerweise immer zu einem ähnlichen Zeitpunkt, zwischen zehn und zwanzig Stunden Spielzeit. Das Spiel besteht im Kern aus einem riesigen Technologie-Baum, der ein oder andere kennt es vielleicht noch aus Age of Empires, und mit jeder Sache die man freischaltet, kann man neue Dinge herstellen, von denen man die meisten aber nur braucht um nochmal neue Dinge herzustellen. Das Ziel des Spiels, ist es alle Technologien zu erforschen, um am Ende eine Rakete zu bauen und zum Heimatplaneten zurück zu fliegen, nachdem man seine temporäre Zuflucht komplett der Resourcen beraubt hat.
Das Problem ist, dass es am Anfang doch viel Spaß macht. Alles ist noch sehr übersichtlich. Man baut Eisen- und Kupfererz ab und schmilzt es zu Platten ein, okay. Aus den Stahlplatten macht man Zahnräder, aus dem Kupfer Kabel, okay. Nach zehn Stunden hat man auch Ölpumpen und stellt Plastik und Schwefel her und lässt es von einem automatisierten Zug-System hin und her fahren, damit die Produktionsstrecken in der Homebase nun auch die Advanced Electric Circuits herstellen können, die dann für die nächste Stufe von irgendwas gebraucht werden. So langsam fängt es an einfach anstrengend zu werden. Die Erz-Vorkommen vom Spielstart gehen langsam zur Neige und man müsste neue erschließen, hier und da gerät mal etwas ins Stocken. Das zentrale Bus-System, das man sich überlegt hat, ist mittlerweile einen halben Bildschirm hoch und hat so viele Abzweigungen, dass es auch einfach nicht mehr hübsch aussieht.
Ich glaube, hier wäre der Punkt, an dem man dann die etwas fortgeschritteneren Sachen ausprobiert. Das ganze Circuit-System, wo man basierend auf Dingen andere Dinge tun kann. Wenn eine Kiste voll mit Eisenplatten ist, dann die Eisenschmelze abstellen, dies das. Außerdem könnte man ja mal einen Blick auf die Community oder Youtube-Videos werfen, wie man seine Basis besser aufbaut, damit alles effektiver ist. Das Problem: Ich habe darauf gar keine Lust. Ich wollte nur ein paar Transportbänder bauen und mir kein hochkomplexes logistisches Konzept ausdenken und auch nicht stundenlang Tutorials angucken.
Versteht mich nicht falsch, Factorio ist ein tolles Spiel, das ich seit sechs Jahren gerne ab und an spiele, aber ich… habe nach zehn Stunden einfach keine Lust mehr. Entweder baue ich noch mehr vom selben, was einfach nur langweilig ist, weil es sehr viel Geklicke ist, oder ich müsste mich tief damit beschäftigen, was mir für ein Spiel einfach zu viel Arbeit ist.
Komischerweise habe ich ja schon immer eine Tendenz zu solchen Endlosspielen, ich liebe ja auch Anno sehr. Aber auch das artet irgendwann in Arbeit aus, so richtig perfektioniert habe ich da auch noch keine Spielpartie, sondern immer vorher die Lust verloren.
Vielleicht könnte ich ja mal daraus lernen und nicht schon wieder eine neue Runde starten?
Insgesamt ist Factorio ja etwas wie programmieren, nur dass es sich bei letztem lohnt, die extra Meile zu gehen und zu lernen, wie man seinen Spaghetticode besser macht, weil man im Zweifelsfall am Ende Geld damit verdienen kann.
Was ich an Factorio mag, ist ja die Tatsache, dass man mal eben reinspringen kann, und 10 Minuten ein paar Dinge herumbaut, oder repariert, dafür ist echt schön. Man weiß immer genau, was man gerade zu tun hat. Letztens gab es eine Ankündigung, dass sie Factorio für die Switch umgesetzt haben und ich freute mich kurz, weil ich mir das ganz gut auf dem Sofa vorstellen konnte, dann las ich aber davon, dass die Startup Time 70 Sekunden oder so sind, da verging mir direkt wieder die Lust. Ich warte doch keine siebzig Sekunden, das sind ja fast zwei Minuten! Vier Mark!
(Ich schaute später mal bei der Mac-Version und der “Loading Sprites“-Step dauert auch ganz schön lang, bestimmt 30-40 Sekunden. Dafür kann ich Factorio auf dem Mac aber auch einfach die ganze Zeit im Hintergrund anlassen, auf der Switch muss es sich seinen Multitasking-Platz ja mit Mario Kart und Animal Crossing teilen)
Eine einfache Text-Liste war mir aber zu langweilig, irgendwelche Bilder aus dem Internet klauen mag ich aber auch nicht, also überlegte ich mir, dass ich sie wohl abmalen muss und die Idee verselbstständigte sich etwas. Was mache ich mit den Bildern? Wäre ja lustig, wenn die nebeneinander hängen würden, als hingen sie an einer Wand. Wenn sie nun so da hängen, wäre es ja aber auch noch witziges Easteregg, wenn man sie bewegen könnte… und natürlich müssten sie kaputt gehen, wenn man sie nicht vernünftig auf einen Wandhalter hängt.
Leider machen mir die besonders sinnlosen Sachen am meisten Spaß. Anfangs dachte ich, ich male die Gitarren in einem Vektor-Programm, damit ich sie beim Aufprall schöner zerstören kann, also richtig den Hals rausbrechen. Nach fünf Minuten war es mir allerdings zu aufwändig, die Kurven ordentlich zu ziehen und ich verwarf die Idee. Eventuell habe ich auch einfach gar keine Ahnung von Vektorprogrammen und es wäre vielleichter gegangen, als einzelne Punkte zu setzen und dann die Bézierkurven zu ziehen bis es auf die Gitarrenrundung passt. Es kam mir aber auch ganz gelegen, denn irgendwie male ich auch einfach gerne in Procreate.
Um trotzdem einen kleinen Zerstörungseffekt hinzubekommen, kam mir die Idee, dass ich das Bild einfach in zwei Teile schneide und ein bisschen herumdrehe, dass es irgendwie durcheinander aussieht. Dazu nehme ich zwei <canvas>-Elemente und male in jedes eine Hälfte der Gitarre und ✨schwupps✨. Bisher hatte ich keine Gitarre, bei der das super dumm aussah, weil der Body mehr als die Hälfte des Gesamtbildes groß ist, oder so.
Das ganze Dragging wollte ich erst per Hand machen, also einfach mit .addEventListener('drag', […]), aber da stieß ich auch schnell an Grenzen, es ging schon damit los, dass ich das Ghost-Image, also das Bild, was der Browser halt anzeigt, wenn man einen Drag-Vorgang startet, nicht weg bekam und alle Stack Overflow-Tricks nicht funktionierten. Da ich eh schon vermutete, dass ich für die ein oder andere Animation GSAP einsetzen werde, schaute ich, ob die zufällig was dafür haben und fand das Draggable-Plugin, das ziemlich gut funktioniert. Super wäre noch das Intertia-Plugin, dann wäre das noch alles etwas physikalischer, aber das kostet leider Geld.
Am Anfang hatte ich ein paar Probleme mit den Koordinatensystemen, in denen sich die einzelnen Elemente befanden, und das Snapping funktionierte nicht so richtig, wie ich das wollte, aber nach genug Factorio spielen löste sich das auch auf, hatte ein position: relative auf dem richtigen Container vergessen.
Joa, ich wünschte, ich könnte noch mehr dazu berichten, aber im Großen und Ganzen sind es nur ein paar Zeilen Code und die größte Arbeit war es natürlich, die Gitarrenbilder herzustellen. Ich bin aber zufrieden. Es sieht witzig aus und irgendwie macht es Spaß die Gitarren herumzubewegen und fallen zu lassen. War ein Spaßiges kleines Ding und ich hab wenigstens wieder ein bisschen mehr mit GSAP gemacht. Der Code ist natürlich einfach komplett inline, das hier ist schließlich mein Blog, da kann ich machen, was ich will!
Letztes Jahr kaufte ich Vorpremieren-Karten für die deutsche Version von Hamilton. Es sollte ja im Februar 2022 starten. Dieser Termin konnte dann leider nicht gehalten werden und wurde in den September, bzw. Oktober 2022 verschoben. Ich fand das nicht so schlimm, ich habe eh ein paar Bedenken bei der deutschen Fassung und naja, ich hab ja Zeit. Als die Bitte kam, das Ticket auf einen beliebigen anderen Termin umzubuchen, mit dem Bonus, dass man sich auch gratis bessere Karten aussuchen kann, als man kaufte, habe ich das gerne gemacht und bin auf Ende September ausgewichen.
Nun hatte ich leider das Problem, dass mir dieser Termin nicht mehr in den Kalender passte, aber zum Glück hatte ich mich ja bei der ursprünglichen Buchung für die Flex-Option entschieden, die damals sogar gratis war. Sie erlaubt mir, bis maximal 48 Stunden vor Vorstellungsbeginn, noch einmal umzubuchen.
Eigentlich dachte ich, nun folgt ein riesiger Rant, dass das alles nicht funktioniert und ich übel abgezockt wurde, aber so schlimm wird es gar nicht. Denn es hat wunderbar geklappt! Nur der Prozess war etwas blöd und einen Wermutstropfen gibt es trotzdem, aber bleibt dran!
Der Prozess für die Flex-Option ist nämlich dergestalt, dass man quasi neue Karten kauft und danach ein Kontaktformular ausfüllt, wo man die alte Bestellnummer (mit Flex-Option) und die neue Bestellnummer einträgt. Die Anfrage wir danach, so wirkte es, noch von einem Menschen manuell durchgewunken. Am Ende bekommt man das Geld für die alte Bestellung zurück erstattet.
Mein Problem dabei: Man geht ja erstmal mit der neuen Bestellung in Vorleistung, ohne zu Wissen, ob die Anfrage akzeptiert wird. Musicals.de benutzt ticketonline.de als Ticket-Provider, warum bauen die nicht eine Flex-Options-UI ein, wo man das alles automatisiert in einem Rutsch durchführen kann, ohne was neues zu kaufen, ohne zu wissen, ob vielleicht was schief geht.
Naja, aber ist ja alles gut gegangen, obwohl ich das 48-Stunden-Limit fast gerissen hätte, da ich nicht wusste, was ich ins Formular eintippen soll — die Tatsache mit der gezwungenen Umbuchung vom Februar auf September machte mich nämlich etwas unsicher. Zum Einen wusste ich nicht, welche alte Bestellnummer ich nun eingebe (Original, oder Umbuchung) und zum Anderen wusste ich nicht, ob ich mir nun wieder die teureren Plätze aussuchen darf, oder nur welche auf dem Preislevel der Originalbestellung.
Da die Zeit knapp wurde und die Hotline einfach abgeschaltet ist (“Bitte benutzen sie unser Kontaktformular im Internet!”) habe ich mich für die Plätze aus der Originalbestellung entschieden und nicht weiter darüber nachgedacht. Bye bye, Reihe 5!
Letztens warf Markus einen Link zu passkeys.io in den Chat. Ich hatte schon wieder ganz vergessen, dass iOS 16 ja Passkey-Support mitbringt und freute mich über diese kleine Gedankenstütze!
Doch was sind Passkeys? Am Besten kann es natürlich die oben verlinkte Webseite rüberbringen. Passkeys sind eine Initiative von Apple, Google und Microsoft um Passwörter abzulösen. Das baut alles auf den FIDO und Webauthn-Standards auf, was erstmal gut ist, denn die werden bereits von Geräten und Software unterstützt! Statt eines Passworts benutzt man zum Login auf einer Seite halt Touch ID, Face ID oder die entsprechenden Funktionen der anderen Hersteller, um den Login per Passkey freizugeben.
Ich hatte direkt Lust, das in eins meiner Projekte zu integrieren. Der Login mit Passwort ist zwar auch nicht so schlimm, da entsprechende Passwortmanager auch auf dem Handy alles automatisch ausfüllen, aber Zukunft! Außerdem dachte ich, vielleicht gibt es ein paar spannende Erkenntnisse zur Einbindung, die ich dann hier teilen könnte.
Zunächst suchte ich also ein Package, das Laravel mit Webauthn verbindet und fand laragear/webauthn. Das installiert man schnell in die Laravel-App, ändert ein paar Konfigurationen und schwupps, kann man es benutzen. Da Webauthn zum Teil auch ein Browserfeature ist, muss man natürlich auch ein bisschen JavaScript schreiben, um die richtigen APIs anzusprechen um die entsprechenden Dialoge im Browser zu triggern. Die Schnipsel sind in der README vom Package auch dabei.
Ich hatte nun also schonmal einen “Login with Webauthn”-Button, aber der Login klappte einfach nicht. Ich ärgerte mich zehn Minuten damit rum, bis mir einfiel, dass ich meinen bestehenden Account noch gar nicht mit dem Passkey verknüpft hatte, 🤦. Also erstmal die Username/Passwort-Authentifizierung wieder aktiviert und den “Register Passkey”-Button eingebaut, um den seitenspezifischen Passkey zu erstellen und in der Datenbank zu hinterlegen.
Danach klappte es dann auch einfach! Verrückt. Ich bin davon ausgegangen, noch irgendetwas and er Konfiguration des Pakets ändern zu müssen, oder verrückte JavaScripte zu schreiben, um dieses Webauthn-Paket für Passkeys fit zu machen, aber ich kann berichten: It just works.
Das Gute ist: Will man gar keine Passkeys verwenden, sondern einen YubiKey, oder so etwas, dann funktioniert es auch einfach, denn es ist ja einfach dieser Webauthn-Standard, den es schon seit ein paar Jahren gibt.
Die einzigen Bedenken, die ich bei der Sache jetzt noch habe ist, dass das Package, was ich verwende, nur 61 Stars bei Github hat. Ich habe mir den Code auch noch nicht genauer angesehen, da es jetzt eh nur Quaschprojekte sind, für die ich es benutze. Sollte man es produktiv verwenden, sollte man natürlich nochmal einen genaueren Checkup machen, ist ja doch eine relativ elementare Komponente einer App.