knuspermagier.de
Er bloggt noch? Krass!

Marmelade 2022

Der Garten wirft jedes Jahr einige Früchte ab. In den letzten Jahren haben wir die auch schon häufiger zu Marmelade verarbeitet, das Problem ist nur, dass wir eigentlich fast keine Marmelade essen. Schade, wenn man dann zwei riesige 400ml Gläser im Schrank hat, die man gar nicht schafft. In diesem Jahr hatten wir daher die Idee ein paar kleine Gläser zu kaufen, am besten welche die man an einem oder zwei Frühstücken fertig hat. Gleichzeitig haben die den Vorteil, dass man sie auch ganz gut verschenken kann. Shops wie glaeserundflaschen.de haben sowas ziemlich günstig im Angebot. Für ein paar Euro kauften wir also zwanzig Gläser und Deckel und warteten ab, bis die Früchte fertig sind.

Mittlerweile haben wir Johannisbeeren und Stachelbeeren gepflückt und verarbeitet! Vor allem die letzteren waren mal wieder in großer Menge vorhanden, dass es insgesamt elf Gläschen wurden. Dazu kamen fünf oder sechs Gläser mit roter Johannisbeere und ein Glas, in dem rot, weiß und schwarz vermischt sind, weil, äh, die Büsche noch ganz neu sind und nicht so viel trugen. Oder, weil die Amseln alle Beeren aufgefressen haben, keine Ahnung.

20220718-124333-pwa-4659.jpg
20220718-124407-pwa-4660.jpg

Jetzt fehlen noch die Brombeeren. Also, falls ich sie nicht abschneide, bevor sie reif sind, ich hasse diese stachelige Pflanze.

Kirby Nervigkeiten

Ich habe mehrere Kirby-Blogs und viele Seiten gemacht und ich würde Kirby auch jeder Zeit wieder für alles mögliche verwenden, doch ab und zu gibt es wirklich so Kleinkram, der mich einfach nervt, weil ich denke, ach komm, das ist schnell gemacht, und dann geht es einfach nicht. Das betrifft vor allem Sachen im Panel.

Macht zum Beispiel mal ein type: blocks-Feld und darunter eine section vom Typ files. Angenommen, ihr wollt im dem blocks nun eine Galerie einfügen, wäre es super, wenn man direkt aus der files-Section eine Datei reindroppen könnte, statt zuerst in den Edit-Mode der Gallerie zu gehen und dort auf “Select Files” zu drücken? Geht leider nicht.

Man kann nichtmal aus dem Finder direkt Sachen auf das Gallerie-Preview droppen. Ahh.


Natürlich bin ich auch Programmierer und weiß, dass

  • a) Ich hier ein absolutes Nischenproblem habe, was vorher einfach keinem auffiel, weil die meisten so eine Seite halt einmal anlegen, die Bilder in die Galerie packen und fertig.
  • b) Das sich das nicht mal eben implementieren lässt, da da sicher ein riesiger Rattenschwanz dran hängt, so eine Drag-and-Drop Funktion über verschiedene Komponenten zu bauen, die intern sicher auch noch unterschiedlich aufgebaut sind, weil sie warhscheinlich mit vier Jahren Zeitabstand entwickelt wurden, oder so. Ich würde mich auch anbieten, das einzubauen, fürchte mich aber auch einfach vor zweihundert Jahren Pull-Request-Review, weil es eigentlich erstmal architekturell bedacht werden muss.

Immerhin kann ich mir anderweitig helfen. Alles was ich wollte, war Bilder in einem Grid anzeigen. Alles auf das blocks-Feld umzustellen, nur um zwei Bilder nebeneinander anzuzeigen, wäre eh irgendwie overengineert gewesen. Daher einfach kurz dieser schmutzige Hack:

'hooks' => [
        'kirbytags:before' => function ($text, array $data = [], array $options = []) {
            return preg_replace_callback('/\(grid\)(.*)\(\/grid\)/isU', function ($match) {
                return sprintf('<div class="blog-image-grid"><div class="blog-image-grid-inner">%s</div></div>', $match[1]);
            }, $text);
        }
    ],

Und schon kann ich im Post einfach folgendes verwenden:

(grid)
(imag3: blubb.jpg)
(imag3: blabb.jpg)
(/grid)

(CSS gibts natürlich auch noch.)

So leicht kann's dann doch sein sein! Danke, Kirby.

philipps.photos logo

KirbyExport v1.0

Ich wollte schon immer mal ein Lightroom-Plugin schreiben. Weil es geht. Leider hatte ich lange keine passende Idee — bis jetzt. Auf einer Autofahrt letztens zündete es nicht nur in der Zündkerze, sondern auch in meinem Kopf!

Also, stellt euch vor, ihr habt einen Blog und postet da regelmäßig Fotos, oder ganze Galerien mit dutzenden Fotos. Alles schön exportieren, hochladen, einfügen. Nun fällt euch im Browser auf, dass die Fotos etwas zu dunkel sind oder ein paar Mülltonnen rausretuschiert werden müssen. Also nochmal bearbeiten, exportieren, hochladen, etc. Dazu kommt, dass man in Kirby auch nicht einfach durch neu-drag-and-droppen ersetzen kann, dann kommt nämlich folgendes:

kirby_duplicate.png

(Ja, wenn man das Bild einzeln anklickt, kann man irgendwo “Ersetzen” drücken, aber das ist ja anstrengend für mehrere Bilder)

Klingt nervig, was? Ich dachte also, es könnte ganz cool sein, wenn ich ein Lightroom Export-Plugin hätte, dass die Dateien direkt hochläd und austauscht. Daher habe ich es mir mal angeschaut.


Ich googelte erstmal “How to create lightroom export plugin” und fand diesen etwas älteren Blogpost. Der half mir allerdings schon ganz gut!

Man läd erstmal eine ZIP herunter, in der einige Examples sind. Ich kopierte mir das FTP-Upload-Beispiel und klöppelte etwas drauf rum. Ist gar nicht so kompliziert. Geschrieben sind die Plugins in Lua und Lightroom bringt schon einiges mit, zum Beispiel eine Library für Kommunikation per FTP, die in diesem Beispiel genutzt wurde. Glücklicherweise gibt es auch LrHttp, sogar mit einer Funktion mit der man das File Uploads machen kann, what an experience! Der Code sieht im Grunde so aus:

    for _, rendition in exportContext:renditions{ stopIfCanceled = true } do

        -- Foto rendern
        local success, pathOrMessage = rendition:waitForRender()

        -- Gucken, ob inzwischen abgebrochen wurde
        if progressScope:isCanceled() then break end

        if success then
            local filename = LrPathUtils.leafName(pathOrMessage)
            local content = { 
              { 
                name = 'exportFile',
                fileName = filename,
                filePath = pathOrMessage
              }
            }

            -- Upload!
            local response, debug = LrHttp.postMultipart(exportContext.propertyTable.kirbyUrl, content)

            LrFileUtils.delete(pathOrMessage)       
        end
    end

Nachdem ich das Plugin soweit angepasst hatte, brauchte ich noch einen kleinen Endpunkt im Blog. Hier benutze ich ja Kirby und da gestaltet sich das relativ übersichtlich (natürlich fehlt noch irgendeine Authentifizierung):

 'routes' => [
        [
            'pattern' => 'geheimer-endpunkt-name',
            'method' => 'POST',
            'action' => function() {
                if(empty($_FILES['exportFile'])) {
                    return 'No Image given';
                }

                $file = $_FILES['exportFile'];
                $name = $file['name'];

                $maybeExistingImage = site()->index()->images()->filterBy('filename', $name)->first();

                if(!empty($maybeExistingImage)) {
                    kirby()->impersonate('kirby');     
                    $maybeExistingImage->replace($file['tmp_name']);
                    return 'Replaced' . $maybeExistingImage->root();
                }

                return 'No Image Found';
            }
        ],
    // [...]
]

Das ganze lässt sich sicher auch für andere Blogsysteme anpassen.

Achja, im Export-Dialog gibt es natürlich auch ein kleines Feld, in dem man die URL angeben kann:

screenshot-2022-07-11-at-14.24.21.png

Insgesamt ging das überraschend schnell. Der Nutzen für diesen Blog hier hält sich sicher in Grenzen, aber wenn man zufällig einen Blog mit vielen Fotos hat, bei denen man durchaus ab und zu mal etwas ändert, dann ist das so schon sehr komfortabel.

Das Plugin gibt’s natürlich zur Ansicht bei Github! Achja, es funktioniert, glaube ich, nur mit Lightroom Classic. Keine Ahnung, ob es mit dem Modernen funktioniert

philipps.photos logo

Picky sticky

Letztens baute ich etwas, was ich euch irgendwann noch zeigen werde. Diese Sache hat jedenfalls eine Sidebar und ich wollte, dass diese beim scrollen immer sichtbar bleibt. Wo man früher vielleicht etwas mit JavaScript nachhelfen konnte, kann man sich heut zu Tage ja wunderbar mit CSS-Magie in Form von position: sticky; behelfen. Dachte ich. Es klappte nicht und ich legte das Projekt zu den Akten.

Monate später holte ich es wieder hervor und ärgerte mich, dass die Sidebar nicht sticky war und nahm mir vor, das Problem zu lösen. Einmal kurz Google angeschmissen, das erste Ergebnis angeklickt und sich an den Kopf gefasst: Das Element muss natürlich auch wissen, wo es sticken soll. Man braucht also zum Beispiel noch ein top: 0; dazu. Meine Güte, da hätte ich selber drauf kommen können, aber manchmal sieht man den Wald vor lauter Bäumen nicht! 🤦