In vier Schritten zum Umstieg auf PHP 8.x – Ein Interview mit Juliette Reinders Folmer
Veröffentlicht: 2023-03-04Das Upgrade einer WordPress-Site, eines Plugins oder eines Designs auf eine neue PHP-Version ist eine Aufgabe, die regelmäßig wiederholt wird. Aber wie macht man das möglichst effizient? Woher wissen Sie, dass Sie nichts übersehen? Gibt es dafür einen Fahrplan?
In diesem Artikel werden wir diese Fragen (und mehr) angehen und uns ansehen, was zu einem reibungslosen Übergang zu PHP 8.x für Ihre WordPress-Site, Ihr Plugin oder Ihr Theme gehört, einschließlich einer Roadmap.
Wir tun dies auf der Grundlage eines Interviews, das wir mit der PHP-Expertin Juliette Reinders Folmer geführt haben. Sie widmet den größten Teil ihres täglichen Lebens der Programmierung und allem, was damit zusammenhängt, und konzentriert sich hauptsächlich auf Open-Source-Projekte, einschließlich WordPress.
Sind Sie auch bereit für einen reibungslosen Wechsel? Neugierig auf unseren Schritt-für-Schritt-Plan? Dann lass uns gleich eintauchen!
PHP 8.x – Was hat sich geändert
Für einen Überblick über die Änderungen empfehlen wir die folgenden Artikel:
- Versionshinweise für PHP 8.0 und PHP 8.1
- Migrationsanleitung für PHP 8.0 und PHP 8.1
- WordPress und PHP 8.0 und aktueller Stand
- Was ist neu in PHP 8.0 und PHP 8.1
Nachdem Sie diese Artikel gelesen haben, sind Sie vollständig darüber informiert, was sich in PHP 8.x geändert hat und was Sie tun müssen, um Ihre PHP-Projekte problemlos zum Laufen zu bringen.
Wenn Sie sich nicht sicher sind, wie Sie am besten anfangen sollen, kein Problem. Im Gespräch mit Juliette haben wir das ausführlich besprochen, und wir werden Ihnen in diesem Artikel so ausführlich wie möglich erklären, wie Sie auf PHP 8.x umsteigen können.
Wir werden auch in informativen Kästen erklären, wie Sie verschiedene Operationen in MyKinsta, unserem proprietären Control Panel für alle Ihre WordPress-Sites, Anwendungen und Datenbanken, durchführen.
Wechsel zu PHP 8.x: Erste Schritte
Der Umstieg auf PHP 8.x klingt einfach und ist es technisch gesehen auch. Bei vielen Hostern können Sie im Admin-Bereich angeben, welche PHP-Version Sie für Ihre Website verwenden möchten. Bei Kinsta kann der Wechsel der PHP-Version mit einem einzigen Klick im MyKinsta-Dashboard erfolgen.
Aber bevor Sie das tun, gibt es einige Dinge, derer Sie sich sicher sein müssen. Je nach Kenntnisstand und Erfahrung empfehlen wir Folgendes:
- Wenn Sie Ihre eigene WordPress-Site mit Standardthemen und Plugins erstellt haben, ohne viel PHP-Kenntnisse zu haben, beauftragen Sie einen Entwickler oder eine Agentur, um zu untersuchen, ob Ihre Site für die Ausführung auf PHP 8.x geeignet ist. Suchen Sie einen Dritten, der Ihnen dabei helfen kann? Dann sehen Sie sich unsere Partnerseite an, auf der mehrere vertrauenswürdige Unternehmen aufgelistet sind, die Ihnen helfen können.
- Wenn Ihre WordPress-Site von einer externen Partei, einem Entwickler oder einer Agentur erstellt wurde, wenden Sie sich an diese, um zu fragen, ob Ihre Site auf PHP 8.x ausgeführt werden kann.
- Wenn Sie Ihre WordPress-Site erstellt haben – zum Beispiel mit Ihrem eigenen benutzerdefinierten Design oder selbst entwickelten Plugins – haben wir unten eine Roadmap für Sie.
Wenn Ihre Website in eine der ersten beiden Kategorien fällt, laden wir Sie auf jeden Fall ein, den Rest des Artikels durchzulesen, aber wir empfehlen Ihnen nicht, Ihre Website selbst auf PHP 8-Kompatibilität zu testen. Überlassen Sie es den Profis.
Wie auch immer Sie sich entscheiden, wir würden Ihnen raten, Ihre Live-Site nicht einfach auf PHP 8 umzustellen und „zu sehen, ob es funktioniert“. Sind Sie neugierig, wie Ihre Website aussehen wird, und können es kaum erwarten, sie auf PHP 8 laufen zu sehen? Beginnen Sie dann mit dem Testen in einer Staging-Umgebung. Ein guter Gastgeber ermöglicht es Ihnen, auf einfache Weise eine Staging-Umgebung einzurichten.
In der Staging-Umgebung können Sie PHP 8.x aktivieren und sehen, ob dieses Update gut mit Ihrer Website funktioniert. Es ist auch möglich, mit einer lokalen Kopie Ihrer Website zu arbeiten. Mit unserem kostenlosen DevKinsta-Entwicklungstool kannst du deine Website ganz einfach aus dem MyKinsta-Dashboard importieren, wonach du die PHP-Version auf 8.0 oder 8.1 ändern kannst.
Wenn Sie keine Probleme in der Staging-Umgebung sehen, bedeutet das nicht unbedingt, dass es keine Probleme gibt. Die folgende Roadmap verrät Ihnen warum.
PHP 8.x-Kompatibilitätstest: Die Roadmap
Testen: das Schlüsselwort zu guter Software. Selbst für WordPress-Websites und ihre Komponenten wie Themes, Plugins und den WordPress-Kern ist das Testen das Mittel, um sicherzustellen, dass keine Dinge passieren, die Sie nicht wollen.
Ein Softwareentwicklungsprojekt besteht größtenteils aus Tests. In diesem Artikel betrachten wir speziell die Tests, die Ihnen helfen können, den Übergang zu PHP 8.x reibungslos zu gestalten. In unserem Artikel über DevOps-Tools finden Sie einen Abschnitt mit einer Sammlung von Tools, die Sie verwenden können.
Die folgenden Arten von Tests werden in diesem Blogbeitrag besprochen:
Schauen wir uns die verschiedenen Arten von Tests genauer an, die wir durchführen können.
Statische Analyse (oder statisches Testen)
Der erste Schritt, den Sie als PHP-Entwickler unternehmen können, besteht darin, eine statische Analyse Ihres Codes mit verschiedenen Tools durchzuführen. Statische Analyse ist der Prozess der Analyse von Software, ohne den Code auszuführen. Mit der statischen Analyse ist es möglich, Fehler zu erkennen, Probleme mit der PHP 8.x-Kompatibilität zu erkennen, Codierungsstandards durchzusetzen (z. B. die WordPress-Codierungsstandards) und sogar den Code zu ändern und zu bereinigen.
Werkzeuge für die statische Analyse
Sie können eine statische Analyse mit verschiedenen Tools durchführen, wie z.
- PHP-Kompatibilität
- Psalm
- PHPStan
Zum Zeitpunkt des Schreibens werden nicht alle PHP 8.1-Prüfungen in der neuesten PHPCompatibility-Version unterstützt. PHP 8.1-Prüfungen können in der Entwicklungsversion enthalten sein, stellen Sie also sicher, dass Sie diese (vorerst) verwenden, wenn Sie PHPCompatibility verwenden, um Ihr Projekt zu analysieren und zu sehen, welche Fehler/Empfehlungen es gibt.
PHP 8.1 Checks werden in Kürze in einer neuen Hauptversion veröffentlicht. Wenn Sie diesbezüglich auf dem Laufenden bleiben möchten und ein GitHub-Konto haben, öffnen Sie das GitHub-Repository von PHPCompatibility und navigieren Sie zu Watch -> Custom -> Releases , wo Sie auswählen können, dass Sie benachrichtigt werden, wenn eine neue Version veröffentlicht wird.
PHPCompatibility, das nur die Kompatibilität für eine bestimmte Version (oder einen Bereich von Versionen) von PHP testet, ist einfach einzurichten. Sie erhalten die besten Ergebnisse, wenn Sie eine testVersion – zum Beispiel 8.0+ (8.0 und höher) – innerhalb von PHPCompatibility ausführen.
Sie sollten nach veralteten oder gelöschten Funktionen, geänderten Standardwerten von Funktionsparametern, ob concat ohne Klammern verwendet werden soll, ob match als Funktionsname verwendet werden soll (da es seit PHP 8.0 reserviert ist) usw.
Psalm und PHPStan sind gute Ergänzungen und können Ihnen helfen, indem sie zusätzliche Prüfungen in Bezug auf Variablentypen durchführen. Der Nachteil dieser Tools ist, dass viel Konfiguration erforderlich ist, um Berichte über PHP 8.0 und 8.1 zu erhalten. Selbst wenn sie erfolgreich sind, können Sie mit vielen Fehlalarmen rechnen. False Positives sind Benachrichtigungen, die falsch gegeben werden, verursacht durch die Einschränkungen der statischen Analyse.
Um die Ergebnisse dieser beiden Tools richtig zu interpretieren, sind solide Kenntnisse erforderlich, aber dieses Wissen kann Ihnen helfen, zusätzliche Inkompatibilitäten zu identifizieren, die PHPCompatibility nicht finden kann. Sehen Sie sich die Dokumentation für Psalm und PHPStan an, wenn Sie mehr darüber erfahren möchten.
Zusammenfassung:
- Führen Sie statische Analysen mit PHPCompatibility, Psalm, PHPStan durch
- Beheben Sie alle legitimen Probleme
Unit-Tests
Der nächste Schritt in diesem Prozess ist der Komponententest. Unit-Tests sind eine Methode zum individuellen Testen von Codeteilen. Beim Unit-Testing werden spezifische gezielte Tests für jede Unit entwickelt. Dabei werden verschiedene Szenarien durchgespielt. Vorzugsweise wird jedes Szenario getrennt von den anderen getestet, so dass die Tests voneinander unabhängig sind.
Unit-Tests allein reichen natürlich nicht aus. Sie müssen auch ausgeführt werden. Unit-Tests lassen sich am besten mit CI-Tools (Continuous Integration) wie Jenkins, GitHub Actions oder Travis automatisieren.
Unterstützung mehrerer Versionen von PHP
Wenn Sie als Plugin-Ersteller mehrere PHP-Versionen unterstützen möchten, stellen Sie sicher, dass die Tests in CI für alle von Ihnen unterstützten PHP-Versionen ausgeführt werden.
Natürlich können Sie auch nur neuere Versionen unterstützen, die Wahl liegt ganz bei Ihnen.
Das Testen mit mehreren PHP-Versionen erfordert, dass Sie je nach PHP-Version mehrere PHPUnit-Versionen verwenden. Da PHPUnit im Laufe der Jahre mehrere Änderungen eingeführt hat, die sich darauf auswirken, wie Tests geschrieben werden, kann dieser Teil schwierig sein.
Um dies zu umgehen, können Sie die PHPUnit Polyfills verwenden (geschrieben von Juliette und gesponsert von Yoast). Auf diese Weise können Sie Tests schreiben, die für PHPUnit 9 offiziell nicht unterstützt werden (und daher auf PHP 8.x ausgeführt werden können). Die Polyfills sorgen dann dafür, dass Ihre Tests in PHPUnit 4.x bis 9.x und mit PHP 5.4 bis PHP 8.1 (ab sofort) funktionieren.[/notice]
Nachdem Sie die Tests ausgeführt haben, besteht der nächste Schritt darin, sicherzustellen, dass die in den Tests gefundenen Probleme behoben werden.
Codeabdeckung
Das Ausführen dieser Tests ist der zuverlässigste Weg, um Inkompatibilitäten zwischen den Versionen zu finden.
Achten Sie dabei auf die Code Coverage Ihrer Tests:
- Angenommen, Sie haben eine Funktion A und einen Test dafür geschrieben, und Funktion A ruft die Funktionen B, C und D als Teil der Logik in der Funktion auf.
- Der Test für Funktion A wurde geschrieben, um die Logik von Funktion A zu testen, aber er ruft während des Tests auch die Funktionen B, C und D auf. Für die Funktionen B, C und D testen Sie dann normalerweise nur den „glücklichen Weg“ – die Situation, in der alles gut geht – und daher sind diese Funktionen auch noch nicht vollständig getestet, obwohl (ein Teil von) dem Code in diesen Funktionen ist während des Testens der Funktion A ausgeführt.
- Geben Sie für jeden Ihrer Tests an, welcher Code speziell getestet wird. Sie tun dies, indem Sie jedem Test ein @covers zuweisen. Auf diese Weise werden B, C und D bei der Berechnung der Codeabdeckung nicht „gezählt“, sodass Sie sehen können, welcher Teil Ihres Codes von Tests abgedeckt wird.
Oft schreiben und testen Entwickler – manchmal sogar unwissentlich – für den „glücklichen Pfad“. In diesen Fällen muss auch getestet werden, was passiert, wenn unerwartete Daten an eine Funktion übergeben werden. Das Testen nur mit erwarteten Werten/Typen reicht nicht aus .
Der zweite Teil des obigen Zitats wird oft vergessen, obwohl er vielleicht sogar wichtiger ist als der erste Teil. Was passiert, wenn Sie einen falschen Typ bestehen? Bekommst du eine Fehlermeldung? Oder wird die Variable umgewandelt, wobei die Funktion normal fortgesetzt wird? Was ist, wenn der Funktion ein unerwarteter Wert übergeben wird?
Stellen Sie sicher, dass Sie Ihre Funktionen mit unerwarteten Variablen, Typen und Werten testen. Nur dann können Sie sich auf Ihre Tests verlassen, um Probleme zu finden, die eine neue PHP-Version verursachen kann.
PHP wird strenger
PHP wird immer präziser (strenger) im Umgang mit „Typen“ für PHPs eigene Funktionen sowie mit Dingen wie dynamischen Eigenschaften. Diese Änderungen sollen im Allgemeinen Entwicklern dabei helfen, fehlerfreien Code zu liefern (also Code mit weniger Fehlern). Dies kann jedoch eine ziemliche Upgrade-Hürde für bereits vorhandenen Code darstellen, der auf der Grundlage der „alten“ Grundsätze von PHP geschrieben wurde.
Aufgrund dieses Strebens nach hilfreicheren Fehlermeldungen in PHP können Sie sehen, dass es immer mehr Zeit in Anspruch nimmt, vorhandenen Code für neue PHP-Versionen geeignet zu machen. Code, der auf PHP 5.6 funktionierte, für PHP 7.0 geeignet zu machen, dauerte in den meisten Fällen nur einen Bruchteil der Zeit im Vergleich zum Upgrade von Code, um ihn für PHP 8.1 geeignet zu machen. Und das trotz der Tatsache, dass PHP 7.0 ein „Major“-Release war, während PHP 8.1 ein „Minor“-Release ist.
In vielen Fällen ist das Testen immer noch der einzige zuverlässige Weg, um festzustellen, was geändert werden muss, um eine neue Version zu unterstützen.
Unit-Tests sind mit verschiedenen Tools möglich, darunter:
- PHPUnit
- Spott
- Behat,
- Storyplayer
Viele dieser Tools basieren auf oder in Verbindung mit PHPUnit.
Letztendlich spielt es keine Rolle, welche Tools Sie verwenden. Das Wichtigste ist, dass Sie testen und die Tests auf neuen PHP-Versionen zum Laufen bringen. Dieser Schritt kann manchmal sehr knifflig sein, aber zum Glück gibt es dafür, wie bereits erwähnt, Tools wie PHPUnit Polyfills.
Integrationstests
Integrationstests sind der nächste Schritt, den wir nach der statischen Analyse und den Komponententests durchführen. Bei einem Integrationstest werden reale Situationen in einem größeren Kontext als nur einer „Codeeinheit“ getestet. Dazu gehören das Testen mit einer aktiven (Test-)Datenbank oder das Testen mit einer externen API, um nur zwei Beispiele zu nennen.
Wenn Sie also den Code eines Plugins oder Themes im Kontext von WordPress testen und eine echte Version verwenden, handelt es sich per Definition um Integrationstests.
WP Test Utils (wieder geschrieben von Juliette und gesponsert von Yoast) ist ein hervorragendes Tool für Integrationstests. WP Test Utils bietet Tools zum Schreiben von Integrations- und Einheitentests, bei denen WordPress mit Brainmonkey und Mockery „nachgebildet“ wird, wobei häufig verwendete WordPress-Funktionen „gefälscht“ werden, sodass Sie Ihren eigenen Code und nicht den WordPress-Code testen.
Das Testen der Integration mit WordPress ist eine kniffligere Geschichte, da es um die Integration mit WordPress und der Testsuite von WordPress geht. Je nachdem, welche WordPress-Versionen ein Plugin oder Theme unterstützt, müssen Sie berücksichtigen, welche PHPUnit-Versionen von WordPress selbst unterstützt werden, um die Tests auf verschiedenen PHP-Versionen auszuführen.
Beispielsweise verwendet WordPress 5.6 bis 5.8 PHPUnit 5 bis 7 zum Testen von PHP 5.6 bis PHP 8.0, aber ab WordPress 5.9 verwendet WordPress selbst auch PHPUnit Polyfills für eine breitere Unterstützung. WP Test Utils fungiert als Brücke, um all diese Unterschiede zu überwinden.
Möchten Sie mehr darüber erfahren, wie Sie Integrationstests für mehrere verschiedene Versionen von WordPress ausführen, einschließlich WordPress 5.9 und höher? Dann lies darüber auf der Website von WordPress.
Manuelles Testen
Nachdem Sie nun Komponenten- und Integrationstests durchlaufen und alle gefundenen Probleme behoben haben, ist es an der Zeit, manuelle Tests durchzuführen. Ihre Website läuft und Ihr eigener Code funktioniert, aber Sie verwenden auch die Plugins A, B und C. Wissen Sie, ob diese Plugins kompatibel sind?
Überprüfen Sie dies beispielsweise mit den Autoren des Plugins und prüfen Sie, ob sie angeben, dass es mit PHP 8.x kompatibel ist. Die Frage ist dann natürlich, wie das Plugin getestet wurde. Oft lautet die Antwort hier: isoliert. Die Funktionen des Plugins wurden in der Regel nur in Verbindung mit WordPress ohne andere aktive Plugins getestet. Und selbst wenn andere Plugins in diesen Tests verwendet wurden, waren die Chancen gut, dass nicht alle von Ihnen verwendeten Plugins Teil des Tests waren, also nehmen Sie eine solche Kompatibilitätsaussage mit Vorsicht.
Zum Beispiel eine WordPress-Site mit 3 Plugins (A, B und C). Es ist möglich, dass beispielsweise Plugin B über einen Filter einen falschen Variablentyp zurückgibt, mit dem Plugin C mit demselben Filter arbeiten möchte. Dies kann dann zu einem schwerwiegenden Fehler führen, da der Typ nicht mehr dem erwarteten entspricht. Plugin C wird dann als Übeltäter für die Fehlermeldung angesehen, obwohl Plugin B der eigentliche Übeltäter ist.
Plugin-Interoperabilitäts-Inkompatibilitäten können beim isolierten Testen nicht entdeckt werden. Je aktiver Plugins sind, desto wahrscheinlicher geht etwas schief. Beispielsweise wäre es sehr vorteilhaft, Seitenanfragen von einer Live-Website an eine Staging-Umgebung (mit aktivierter Fehlerprotokollierung) weiterzuleiten, um herauszufinden, was tatsächlich schief läuft.
Bei dieser Art von Problem sieht ein Websitebesitzer normalerweise nur eine Meldung, dass beim zuletzt ausgeführten Code (in diesem Fall von Plugin C) ein Fehler aufgetreten ist, obwohl Plugin C nicht unbedingt die Ursache des Problems sein muss.
In den meisten Fällen ist viel manuelle, menschliche Arbeit erforderlich, und es ist eine gesunde Menge Muskelkraft erforderlich, um diese Probleme zu erkennen und zu beheben. Dies könnte mithilfe von End-to-End-Tests automatisiert werden, aber wir sehen dies nicht oft in WordPress.
Testverfügbarkeit für verwendete Plugins
Für Entwickler und Entwicklungsteams: Akzeptieren Sie Code nur, wenn Tests verfügbar sind. Auf diese Weise stellen Sie sicher, dass weniger manuelle Tests erforderlich sind, was Ihnen viel Zeit spart.
Hinterfrage seine Teststrategie, wenn du ein kommerzielles Plugin oder Theme kaufen möchtest. Auf diese Weise schaffen wir gemeinsam ein Bewusstsein unter den Entwicklern/Entwicklungsteams in der WordPress-Community, um das Testen höher auf die Tagesordnung zu setzen, und wir alle profitieren davon.
Das Testen wird oft – zu Unrecht – als Kostenfaktor angesehen, obwohl es in Wirklichkeit Geld spart. Die zusätzliche Investition, die zum Schreiben von Tests erforderlich ist, zahlt sich in Form von deutlich weniger Fehlerberichten und weniger Zeitaufwand für die Fehlerbehebung aus. Darüber hinaus können mit automatisierten Softwaretests Erweiterungen und Änderungen schneller durchgeführt werden, da die Tests schnell bestätigen können, dass vorhandene Funktionen weiterhin funktionieren.
Die Rolle von WordPress-Hosts und PHP 8.x
Für den durchschnittlichen Websitebesitzer ist die Anleitung durch Ihren Host sehr wünschenswert. Folgendes berücksichtigen:
- Dokumentation und Updates für Kunden, dass WordPress Core, Plugins und/oder Themes (in einigen Fällen) nicht PHP-versionsübergreifend kompatibel sind
- Optionen zum Testen (z. B. Arbeiten mit einer Staging-Umgebung)
- Methoden zur Fehlerberichterstattung und Kontaktaufnahme mit dem Support
Dies kommt auch einem Webhoster zugute, da Websitebesitzer den Host häufig um Hilfe bitten, wenn Probleme auftreten. Bei einem Wechsel auf PHP 8.0 oder 8.1 ist der Seitenbesitzer für mögliche Probleme verantwortlich, und je mehr Informationen der Besitzer hat, um sich richtig auf den Wechsel vorzubereiten, desto besser.
Kunden als Webhoster PHP 8.0 oder 8.1 zur Verfügung zu stellen, ist eine Sache, aber dabei müssen sie sicherstellen, dass sie ein Bewusstsein bei den Kunden schaffen, damit sie wissen, dass Probleme auftreten können. Es wird empfohlen, Ihre Website in einer Staging-Umgebung mit einer anderen Version als Live zu testen. (Die Auswahl von PHP-Versionen ist standardmäßig bei Kinsta verfügbar.)
Minimale PHP-Version für WordPress
Über 15 % aller Websites verwenden derzeit die PHP-Version 7.0 oder niedriger. Dies ist in den offiziellen WordPress-Statistiken ersichtlich. Etwa 83 % aller WordPress-Seiten verwenden derzeit die PHP-Version 7.4 oder niedriger. Bitte beachten Sie, dass alle Versionen kleiner oder gleich Version 7.4 derzeit nicht mehr von PHP unterstützt werden. Die Verwendung von End-of-Life-Versionen von PHP kann zu Problemen führen, da keine Sicherheitsupdates mehr veröffentlicht werden.
Um Probleme zu vermeiden, ist es wichtig, dass die Eigentümer von WordPress-Sites die PHP-Mindestversion kennen und darüber informiert sind, damit ihre Site sicher ausgeführt werden kann. Seitenbesitzer ihrerseits können die PHP-Version selbst modifizieren (bei Kinsta für alle Pakete möglich) oder ihren Host bitten, die Seite auf eine neuere PHP-Version zu aktualisieren. Im Extremfall können Sie auf einen Host wechseln, der diese neueren Versionen unterstützt.
Da WordPress nur eine Mindestversion von 7.4 benötigt, ist die Motivation für viele Hoster und Website-Besitzer zu gering, ihre Seiten zu aktualisieren. Und das, obwohl PHP 7.4 im November 2022 sein Lebensende erreicht hat.
Sollte WordPress jemals die minimale PHP-Version erhöhen, kann dies dazu führen, dass viele Seiten mit einem Update auf die neuste WordPress-Version nicht mehr kompatibel sind. Für diese veralteten Versionen werden jedoch noch einige Zeit Sicherheitsupdates veröffentlicht.
Zusammenfassung
Um für Ihre Website zu PHP 8.0 oder höher zu wechseln, müssen Sie oder Ihr Entwickler mehrere Schritte ausführen. Wichtige Schritte umfassen:
- Statische Analyse
- Unit-Tests
- Integrationstest
- Manuelles Testen
Stellen Sie beim Umstieg auf PHP 8.x sicher, dass alles ordnungsgemäß getestet wurde. Nur so ist gewährleistet, dass Ihre Seite auch auf einer neueren PHP-Version einwandfrei, schnell und sicher läuft.
Wir danken Juliette immens für die Teilnahme an diesem Artikel und für all ihre Arbeit an den genannten Tools!
Foto von Juliette, aufgenommen von Jip Moors und mit Genehmigung verwendet.