knuspermagier.de

Der privateste Blog von Philipp.
IMG_2612.JPG

Bei der Hitze kleben einem die Tasten am Finger… Ich hoffe, ich bekomme bald einen Termin im Apple Store, die Anfrage ist raus.

eos5scan31.jpg

Vor Ewigkeiten machte ich ja mal ein paar analoge Fotos, mit der EOS 5 von Papa. Monate später scannte ich die Negative mal. Naja. Das hier sieht irgendwie ziemlich künstlerisch aus, vor allem wegen dem ganzen Staub auf dem Scanner.

20180724-155317-pwa-1978.jpg
20180724-155823-pwa-1984.jpg

Volltext-Suche mit Redis

Einer meiner Punkte auf der Todo-Liste für Blogchain war natürlich auch eine Suche. Ständig suchte ich im Wordpress-Blog nach Dingen, die ich irgendwann mal geschrieben habe. Auf dieses Feature verzichten kam also nicht in Frage!

Doch wie?

  1. Die “Viel zu viel Zeit”-Lösung: Einfach komplett selber bauen
  2. Die “Zu viel Zeit und komplett verrückt”-Lösung: Elastic Search aufsetzen
  3. Die “Könnte gerade richtig sein”-Lösung: RediSearch

Ab Version 4.0 unterstützt Redis, der Key-Value-Store meiner Wahl, der hier zum Beispiel auch alle Posts im Cache behält, Module. Eins ist zum Beispiel RediSearch, eine mit ziemlich vielen Features ausgestatte Volltext-Suche.

Wie leicht es war, das nun hier zu integrieren, können wir uns jetzt mal anschauen.

Redis 4.0 & Debian

Das erste Problem ist leider, dass Debian natürlich nicht mit Redis 4 shippt. Zum Glück ist Redis eine tolle Software ohne große Abhängigkeiten und lässt sich super einfach selbst kompilieren kein Problem. Ist das geschafft, installiert man noch das RediSearch Modul, ebenfalls schnell zusammenbauen. Eine Sache von fünf Minuten.

RediSearch-PHP

Nun kann man die Suche schon benutzen, aber die Redis-Befehle manuell zu benutzen ist natürlich mühsam. Zum Glück gibt es RediSearch-PHP. Kurz composer require ethanhann/redisearch-php ausgeführt und schon stehen uns ein paar tolle Klassen im Code zur Verfügung.

Anbindung

Der Dreh- und Angelpunkt ist der Index. Dort werden alle Daten abgelegt und er wird am Ende durchsucht. Statt jetzt ellenlange JSON- oder XML-Konfigurationsdateien anlegen zu müssen, kann man den Index schnell im Code erzeugen:

$postIndex = new Index($redis);

$postIndex->addTextField('title')
    ->addTextField('text')

try {
    $postIndex->info()
} catch(UnknownIndexNameException $e) {
    $postIndex->create();
}

Schon hat man einen Index, in den man jetzt Dokumente werfen kann, die title und text haben. Der try-catch-Block sorgt noch dafür, dass keine Fehlermeldung kommt, wenn man - aus Versehen - versucht einen Index doppelt anzulegen. Hinzufügen von Dingen ist nun ähnlich einfach:

$post = getPost(); // einen Post irgendwoher holen

$doc = $postIndex->makeDocument($post->id);
$doc->title->setValue($post->title);
$doc->text->setValue(strip_tags($post->text));

$index->replace($doc);

replace sorgt automatisch dafür, dass das Dokument im Index aktualisiert wird, falls es schon existiert. Zum Schluss nun das, worauf wir alle gewartet haben, die Suche!

$result = $index->search('Wurst');
var_dump($result->documents());

Das wars! Cool, oder?


Natürlich wäre es noch besser, wenn die Suche auch alte Posts aus dem Archiv findet. Darum kümmere ich mich vielleicht auch noch.


Ich bin froh, dass es neben ElasticSearch und all den anderen schwergewichtigen Lösungen mittlerweile auch RediSearch gibt. Es funktioniert und ist easy einzubauen und, soweit ich das beurteilen kann, zumindest für solche extrem kleinen Anwendungsfälle, wie ein Blog, ganz gut geeignet.

Als nächstes werde ich, glaube ich, versuchen, watched.li entsprechend zu erweitern. Die dumme Suche ist mir da schon lange ein Dorn im Auge und kann so sicherlich um einiges aufgewertet werden.

Sideproject-Tagebuch: Blogchain (2)

Es ist soweit, ich kümmere mich wieder mehr um das System, statt z.B. mal Posts zu verfassen. Egal. Ich hab hier und da noch ein paar Minuten investiert und vieles etwas runder gemacht:

So, jetzt ist das Projekt aber abgeschlossen. 🤡

Sideproject-Tagebuch: Blogchain (1)

Ihr kennt das — da schreibt man einen langen Post, dass man zu viel zu tun hat, der in der Hauptsache eine Entschuldigung dafür war, weil man den großen Screencast zum Thema “Wie baue ich meinen Blog auf Kirby um” abgeblasen hat und ein paar Monate später hat man aus Versehen ein eigenes Blogsystem geschrieben und sich die aufwendige Daten-Migration, die einer der Gründe war, das Kirby-Projekt zu stoppen, einfach gespart.

Hä, was für ein Satz.

Naja, wie auch immer. Blogchain wächst und gedeiht und macht mir leider wirklich Spaß, auch wenn man mal wieder diverse Räder neu erfindet und auch einfach ein paar mehr bestehende Komponenten benutzen könnte. Immerhin habe ich noch nich angefangen einen Markdown-Parser zu schreiben, auch wenn mich Parsedown mindestens schon drei Mal nervte.

Gestern baute ich ein paar nullable Return-Types ein, was dazu führte, dass ich auf PHP 7.1 updaten musste, Stammleser haben die circa 3-minütige Downtime sicher bemerkt und den Blog schmerzlich vermisst.


Damit ich meine Posts in Zukunft nicht in PhpStorm schreiben muss, dachte ich mir, es wäre fein, ein Webinterface zu bauen. Gleichzeitig berichtete Philipp Kühn , wie geil er GraphQL findet und, naja, irgendwann muss man sich ja mal damit beschäftigen. Also baute ich das Panel mit Vue und Apollo statt Vuex und baute ein GraphQL-Plugin für Blogchain. It works. Also, man müsste es mal fertig und benutzbar machen, aber an sich geht es.

Dieser Post entstand aber weiterhin in PhpStorm.


Seit Tagen hab ich ein .doc-File mit einem Rezept in der E-Mail-Inbox und suche daher nach einer guten Rezepte-App. Leider gibt es keine, die mich begeistert und mir fiel ein, dass ich nun dieses tolle Flatfile-CMS mit Webinterface, Plugin-Support, Custom Post-Types und GraphQL-API habe. Ob sich damit nich eine Rezepte-Datenbank abbilden lässt?

Na sichi! 🤓

20180715-211139-pwa-1934.jpg

Ein klassischer Sonnenuntergang an der Alster.

Now Featuring Up to 6-Core Processors and 32GB of Memory, True Tone Display and the Apple T2 Chip

Apple updates MacBook Pro with faster performance… auf apple.com

Endlich neue Macbooks. Leider läuft mein Lease noch bis Ende 2019. Sechs Kerne, 32 GB RAM und 4 TB SSD hätte ich allerdings schon gerne. Schade nur, dass das Macbook in Maximalkonfiguration dann 8.000,00 € kostet. Krasses Ding.

Also, die Hälfte davon geht für die riesige SSD drauf – ich bin gespannt, wie das dann zu Weihnachten 2019 aussieht, wenn ich ein Neues bekomme. Vielleicht kosten 4 TB SSD dann nur noch 2.000 € Aufpreis.

Nachdem gestern Instapaper dran glauben musste, habe ich mir heute spontan überlegt mein Instagram Konto zu löschen

Bye, Bye, Instagram auf need.computer

Seitdem ich Instagram in meinen Self Control-Ordner auf der zweiten Seite des Homescreens gepack habe, verschwende ich wesentlich weniger Zeit damit, Stories durchzuskippen. Wie lang dauert es, bis ich die App auch lösche?

Ich mag es schon noch durch die Fotos zu scrollen, aber gleichzeitig ist es mir auch egal. Ich selber poste fast nichts mehr, da es mir einfach nicht so viel Spaß macht, mir Fotos auf dem kleinen Screen anzugucken, statt z.B. auf dem Retina-Macbook im Blog.

Als die Stories dann kamen war ich erst erfreut – sie sorgten ja dafür, dass niemand mehr das dumme Snapchat benutzte, mit der Zeit fing ich aber auch an einfach durchzuskippen. Zum Einen weil viele Leute natürlich… sprechen und ich nie den Sound anhabe und zum Anderen, weil ich einfach viel zu vielen Leuten folge und ich es nie schaffe, alles zu gucken, wenn ich nicht durchskippe. Schwierig.

Also. Entweder entschlacke ich mal die Liste der Leute denen ich folge ordentlich, oder ich verzichte einfach komplett auf diese Facebook-Datenkrake. Leider verpass ich dann sicherlich auch das ein oder andere schöne Foto von Freunden. Das wäre auch wieder schade.

Wie toll wäre ein alternatives, privates, self-hosted Instagram, das einfach alle benutzen! Eins, wo man die Bilder am Rechner dann auch in 1200 Pixeln Breite anschauen kann! Toll und utopisch.

Wie alles begann

Vor ein paar Tagen trieb ich mich so im Internet herum und fand die Webseite von Hans, dem ich ja schon länger auf Twitter folge und sogar mal in Berlin traf (er baut mit Philipp zusammen, unter anderem, Scrumpy!). Dort fand ich folgenden Satz:

Als Kind bin ich in ein Turbo Pascal Buch gefallen.

Aha!

Ich habe noch nie erzählt, wie ich zum Programmieren gekommen bin, oder? Ich werde es vielleicht irgendwann nochmal genauer erläutern, aber auf jeden Fall startete alles mit diesem Buch:

20180611-185219-pwa-2148.jpg

Ich fragte Hans natürlich direkt bei Twitter, um welches Buch es sich bei ihm gehandelt hatte und tatsächlich, es war das gleiche – nur, dass es sich bei ihm um die zweite, verbesserte Auflage handelte. Witzig!

Wenn ich mich richtig erinnere, war dies das zweite Programmier-Buch, welches mir meine Eltern schenkten. Ich weiß nicht mehr, welches das Erste war, so richtig interessiert hat es mich aber wohl nicht. Turbo Pascal & Delphi für Kids hat mich aber überzeugt und in mir etwas geweckt.

Ich weiß natürlich nicht mehr genau, was aus dem Buch ich genau nachprogrammiert habe, wenn überhaupt. Ich glaube, mit dem Turbo Pascal-Kram hab ich mich nicht lange aufgehalten, Delphi und den eingebauten Interface-Builder fand ich allerdings toll.

Das erste Programm, das ich geschrieben habe, das in meiner Erinnerung noch festhängt: Ein Programm, das… 12 Buttons hat, und auf Klick die aktuellen Horoskope anzeigt. Natürlich händisch abgeschrieben aus der aktuellen Tageszeitung.

Danke an meine Eltern! Ohne dieses Buch wäre einiges bestimmt anders gelaufen.