knuspermagier.de

Er bloggt noch? Krass!

Ein Jahr R6

Seit fast einem Jahr habe ich nun die EOS R6. Eigentlich war ich ja ein großer Fan der EOS RP, die musste ich im Zuge meines Jobwechsels aber abgegeben und, weil die Gelegenheit da war, habe ich halt auf die R6 gewechselt. Ich könnte kaum zufriedener sein!

Weiterlesen →

BetterReminders (1)

Seit einigen Monaten benutze ich Reminders.app, weil es die Einzige vernünftige Todo-App ist, bei der man Todo-Listen teilen kann. Jaja, es gibt noch Todoist und so, alles ausprobiert. Reminders funktioniert am Ende am Besten und ich bin ja auch immer sehr froh, wenn man die Apple-Standardapps benutzen kann. Also eigentlich wäre ich natürlich froher, könnte ich einfach Things nutzen, aber die wollen ja einfach kein Sharing einbauen.

Jedenfalls gibt es ein paar Sachen, die mich an Reminders sehr stark stören. Das mit Abstand Schlimmste ist es, dass die Checkboxen zum Abhaken rund sind. Wer bitte möchte sein Kreuzchen in einen Kreis machen. Also, gut, Wahlzettel sind auch immer so, aber bei Todolisten hat man ja keine Wahl, alles will erledigt werden!

Abgesehen davon gibt es noch so ein paar Kleinigkeiten. Zum Beispiel finde ich die Überschriften in SF UI Rounded irgendwie hässlich und — ja jetzt kommt endlich ein wirklicher Grund, der nicht nur visuell ist — die Smart-List-Funktion ist einfach ein bisschen zu dumm. Schön, dass ich Listen anlegen kann, um alle Todos mit einem Tag anzuzeigen, aber manchmal würde ich auch noch gerne ein “Todos die TAG nicht enthalten”, oder so, mit reinhauen. Geht nicht.

Außerdem habe ich gern visuell ein paar Trenner in der Listen-Übersicht und würde Listen, die gerade nicht relevant sind gerne ausblenden. Wenn ich… gerade im Urlaub bin, brauche ich die Arbeitsliste nicht zu sehen. Ebenfalls nicht sehen, möchte ich Todos mit einem Due Date, das in ferner Zukunft ist. Die Tatsache, dass ich etwas am 23.05.2023 erneuern muss, will zwar festgehalten werden, aber ich muss es nicht jedes mal sehen, wenn ich in meine Todoliste gucke.


Weil UARRR gerade so motiviert an seiner Swift-App schraubt, juckte es mir natürlich auch mal wieder in den Fingern und ich recherchierte mal etwas, ob ich gut an die Daten komme, und wie ich damit was anfangen kann. Natürlich guckte ich auch erstmal nach alternativen Reminders-Apps, die genau das schon tun, aber es ist eine furchtbare Sache, danach zu suchen, und dabei die tausend anderen normalen Todo-Apps auszublenden. Die einzige, die ich, bzw Markus fand, hatte auch runde Checkboxen, meine Güte.

Jedenfalls kommt man ganz gut an die Daten, denn das EventKit, das von Apple bereitgestellt wird hat da ein paar Schnittstellen im Angebot. Ich überlegte mir also ein kleines MVP und baute drauf los. Mittlerweile fällt es mir schon etwas leichter, liegt vielleicht auch daran, dass seit dem letzten Versuch nicht 23 neue Swift und SwiftUI-Versionen erschienen sind.

obsi.png
Screenshot aus meiner Obsidian-Notiz, ja runde Checkboxen, ich weiß, gräßlich.

Weil der Post jetzt schon ziemlich lang ist und ich daraus eh mal wieder eine ganze Strecke mache, werde ich jetzt nicht auf größere Details eingehen und das in folgenden Posts nachholen, aber natürlich darf ein Screenshot des aktuellen Ergebnisses nicht fehlen:

btrr.png

Besonders gefreut hat es mich, dass hier direkt auch eine Mac-App herausfällt. So konnte ich das Ding gut testen, ohne meine ganzen Reminder irgendwie in den Simulator zu kriegen. Der SwiftUI-NavigationView macht offensichtlich auch direkt eine coole Master-Detail-Ansicht. Man bekommt so viel geschenkt, was früher gefühlt eher anstrengend war.

Links sieht man auf jeden Fall schonmal die Liste der Todo-Listen, inklusive der Trenner-Funktion, die ich schon einbaute! (if(calendar.title == "---"), hochkomplex!)

Rechts habe ich bereits die Funktion eingebaut um Todos, die in ferner Zukunft liegen, auszublenden.


Im nächsten Post erzähle ich bald, auf welche Probleme ich stieß und was ich mir für Lösungen dafür ausdenke. Also, falls meine Motivation noch ein paar Tage hält. Stay tuned!

termine.baby

Ich hatte heute beim Mittag kochen etwas Zeit, schaute auf Twitter und fand diesen Tweet von Michel. Da die Tortellini eh vier Minuten brauchten um fertig zu ziehen dachte ich mir, warum baue ich das nicht mal schnell?

Also kurz eine HTML-Seite mit einem winzigen Formular aufgesetzt und ein süßes Babyfoto für den Hintergrund. Nun brauchte ich noch JavaScript um eine .ics-Datei zu erstellen. Hier unterlief mir ein Fehler, der mich etwas Zeit kostete: ich suchte zu erst nach “npm ical” und fand dieses Package. Nach dem Einbinden stellte ich fest, dass es leider keine .ics-Dateien erzeugt, die meine Calendar.app importieren will. Laut dem offiziellen Validator waren sie sogar kaputt!

Kurz verzweifelte ich, doch dann googelte ich nach “npm ics” und schwupps, fand ich das ics-Paket, welches wunderbar funktioniert. Dazu installierte ich noch file-saver um die erzeugte Datei komfortabel als Download auszuspielen. Keine Ahnung, ob die Browser eigentlich schon weit genug wären, das ohne so ein dickes quasi-Polyfill zu erledigen. Zu guter Letzt ergänzte date-fns das Trio der Dependencies in diesem riesigen Projekt.

Ich bastelte alles schnell zusammen und lies es von Parcel bundlen, einer wirklich tollen Software, die einfach das macht, was ich will, ohne, dass ich jemals eine Zeile Dokumentation gelesen hätte. Dass das Bundle am eine 400kb groß ist für diese minimale Funktion finde ich allerdings etwas fragwürdig, habe aber auch wirklich keine Lust, herauszufinden, warum.

Natürlich musste noch eine passende Domain her und ich habe ja einen kleinen Faible für diese ganzen verrückten TLDs, die es seit ein paar Jahren gibt. Das von Michel vorgeschlagene u.baby hätte leider fast 4.000€ gekostet, also entschied ich mich für termine.baby, auch ganz nett. Hier gab es die zweite zeitliche Verzögerung: Ich hab nur wenige Domains bei Namecheap, kannte das DNS-Tool nicht so gut und hab was in die falsche Zeile eingetragen, upsi!

Auftrag erteilt um 12:20, Fertigstellung um 15:00 und zwischendurch noch Mittag gekocht und gegessen, das ist ganz ok!

screenshot-2022-08-05-at-22.00.21.png

Nachdem Michel nun hoffentlich seine Termine exportiert hat, ist natürlich die Frage, was man jetzt damit macht. Es war lustig, ganz schnell was zusammen zu klöppeln, aber natürlich wäre es auch schade, wenn das jetzt so brach liegt — von alleine wird es wohl keiner finden. Vielleicht kaufe ich mal für fünf Euro ein bisschen Keyword-Werbung bei Google, es wird super bekannt und am Ende kann ich es für 1,2 Milliarden Euro an eltern.de verkaufen, das wäre es doch!


Wenn ihr auch eine Projekt-Idee habt, die sich hinter eine schöne Domain legen lässt, und die man kurz zwischendurch umsetzen kann, sagt Bescheid!

kirby-calendar-view v1.0.0

Vor zwei Jahren baute ich mal eine Kalenderansicht fürs Kirby-Panel, die ich nie so richtig veröffentlichte. Im Zuge der Aufräumerei habe ich sie mal 3.7-kompatibel gemacht und jetzt auch als v1.0.0 getaggt.

Vielleicht braucht es ja jemand!

Das quick-add-Plugin ist nun Kirby 3.7 kompatibel und marginal schöner als vorher!

/uses

Lange Zeit wehrte ich mich gegen den Trend einer /uses-Page. Für alle, die die Blogosphäre nicht als ihr Wohnzimmer bezeichnen würden: Auf so einer Seite schreibt man, was man alles so benutzt. Also an Hardware, Software, etc.

Ich schaute mir solche Seiten zwar immer ganz gerne an, fand es aber zu langweilig, weil ich selber so ein 08/15-Setup habe, außerdem hat es immer so einen Angeber-Vibe, wenn man mit seiner Sammlung von teuren Apple-Geräten prahlt.

Nun hat Hans aber solch eine Seite und Stefan auch und naja, irgendwas in mir konnte sich dann doch nicht zurückhalten und ich musste in den letzten Tagen auch eine solche Seite anlegen, es hat mir einfach keine Ruhe gelassen. Hier ist also knuspermagier.de/uses. Natürlich ist so eine Seite nie komplett fertig, da einem ständig neue Dinge einfallen, die man so benutzt, aber man muss ja mal einen Punkt machen zwischendurch und außerdem will ich mich endlich etwas Neuem widmen!

Lotte
Wer wir geworden sind →

TV Noir-Version.

img_6495.jpeg

Die Pflaumen sind reif und wurden verarbeitet. Also so 10%!

Better (3)

Na, erinnert ihr euch noch an Better?

Im Jahre 2013 baute ich mal eine App, mit der ich versuchte meine Bargeldausgaben besser zu tracken. Damals waren meine Hauptkategorien dafür noch “Restaurant”, “Bar” und “Taxi”. Viele Grüße an meine wilde Vergangenheit.

In den letzten Monaten fiel mir mal wieder auf, dass ich hier und da öfters was Bar bezahlte, weil es irgendwie nicht anders ging, und dass es mal wieder schön wäre, einen Überblick zu bekommen. Normalerweise wäre meine Reaktion da ja, halt schnell was zu programmieren, aber mir fiel ein, dass ich da ja schonmal was programmiert hatte.

Ich fand also das Github-Repository von Better, checkte es aus und versuchte es zu compilieren. Also erstmal versuchte ich die Dependencies, also AFNetworking, per Cocoapods zu installieren, aber das schlug direkt fehl, mit einem schlimm aussehenden Ruby-Komplettfehler. Aber naja, eine Dependency kriegt man doch hin, dachte ich und lud die gute alte Version 1.3.1 von AFNetworking und band sie direkt ein, leider auch ohne Erfolg. Das ganze scheint unter arm64 nicht so compilieren oder so. Keine Ahnung. Ich wollte ja hauptsächlich mal sehen, ob ich das neuere Design jemals umsetzte, daher löschte ich schnell den ganzen Synchronisierungs-Code (zum Glück alles in eine Datei gekapselt, nice!) und schwupps lief dieses NEUN JAHRE alte Projekt einfach im iPhone 13 Simulator. Schon irgendwie cool.

screenshot-2022-08-01-at-22.36.02.png

Leider hatte ich das Design nie umgesetzt. Irgendwie hatte ich mir das wesentlich hübscher in Erinnerung behalten. Egal. Ich werde jetzt doch mal kurz die Augen in den AppStore werfen und gucken, ob es eine andere hübsche App zum Bargeld-Tracking gibt, oder mir zur Not was in der Shortcuts-App schreiben, was mir die Sachen in ein Bear-Dokument kippt. Oder so. Meine Ansprüche sind über die Jahre ja gesunken. War aber schön zu sehen, dass auch uralter Kram theoretisch noch läuft!


Update: Ich fand noch den ios7-redesign-Branch! Leider wurde er wohl nie fertig.

screenshot-2022-08-01-at-22.42.51.png

Es ist aber alles wirklich komisch, denn in einem Kopf war das Design gaaanz anders.


(Benutzt jemand eine App zum Bargeld tracken? Wenn ja, welche?)

I wanted to find if a particular http response was successful, so “anything in the 200s”. How did I write?

Notes from my journey from Rust to … TypeScript? auf blog.chiselstrike.com

In diesem längeren Artikel schreibt Glauber Costa von seiner magischen Reise von Rust zu TypeScript. Diese ganze Sache ist mir relativ egal, aber ein Detail fand ich ganz spannend. Costa ist jahrelanger C++-Entwickler und unter dem obigen Zitat befindet sich folgendes Code-Beispiel:

const success = req.ret / 100 == 2

Wir erinnern uns, er will herausfinden, ob der HTTP-Statuscode irgendwo zwischen 200 und 299 liegt und benutzt dafür diese Division. In C++ und (wahrscheinlich) allen anderen Sprachen, die ein vernünftiges Typ-System haben macht das eine Integer-Division und das Ergebnis ist halt immer 2, egal ob der Statuscode nun 200, 201 oder 299 ist. Der Rest wird abgeschnitten. In JavaScript kommt halt 2.01 oder 2.99 raus und damit funktioniert dieser clevere Code nicht.

Ich selber wäre niemals im Leben auf diese Code-Zeile gekommen und bei einem Code Review hätte ich sie wahrscheinlich auch als zu clever! gekennzeichnet und die Verfasser:in darauf hingewiesen, das bitte mal leserlicher zu schreiben. Aber mit dem Hintergrund, den Costa hat, ergibt es total Sinn, wie er auch selber schreibt:

I swear to you that this makes total sense in the minds of anyone coming from Rust and C++ […]: When you are used to dealing with low-level code, you learn to fear the processor ‘s branch predictor a bit and it is common to avoid branches when possible (although in this case it would likely predict well). Although division is usually not the fastest processor operation either, at least it is consistent, and in many cases you can rewrite them with shifts and bitwise operations (not in this case), so it is a natural way for us to do it.

Immer ganz spannend, solche Einblicke in das Denken anderer Personen zu bekommen.