5 Stunden Fehlersuche? Krasser scheiß.

Haben Sie schon einmal vom „WordPress White Screen of Death“ gehört? Zu deutsch etwa „weißer Bildschirm des Todes“? Natürlich. Sie sind ja Entwickler und hatten dieses unschöne Problem sicher schon einmal. Wie fixt man es? Eine Vorgehensweise wäre, das Debugging über die Debug-Konstanten in der wp-config.php zu aktivieren. Oft bekommt man dann schon die Fehlermeldung auf dem Silbertablett serviert und man weiß, welches Plugin hier eventuell rumzickt.

Aber es gibt auch extreme Sonderfälle. Was ist, wenn es keine PHP-Fehlermeldung gibt und die Seite trotzdem weiß ist? Was, wenn die Seite manchmal weiß ist und manchmal nicht? Puuh… schwierig? Sie sagen es. Und genau so einen Fall hatte ich vergangen Monat bei einem Kunden. Die verrückte Story möchte ich kurz mit Ihnen teilen. Mein Kunde antwortete mit dem Kommentar „krasser scheiß“ als ich ihm die Problematik schilderte, aber auch eine Lösung präsentieren konnte.

WordPress Fehlersuche = Reengineering?

Einer meiner Kunden machte ein Update von CometCache (ein WordPress-Cache-Plugin). Dann wurden plötzlich einige Seiten nicht mehr richtig zwischengespeichert. Das heißt, einige Seiten waren weiß, andere wiederum nicht. Eine Systematik konnte man nicht erkennen. Wir wussten aber, dass es an diesem Plugin lag. Denn wenn es deaktiviert wurde, funktionierte alles. Was unternimmt man in so einem Fall?

  1. Zuerst habe ich geprüft, ob PHP einen Fehler wirft. Die Antwort: nein.
  2. Danach prüfte ich das Plugin lokal und in einer Staging-Umgebung. Hier hat es funktioniert. Das Problem besteht also nur auf dem Live-System.
  3. Also machte ich eine 1-zu-1 Kopie des Produktivsystems auf das Staging. Ahja und siehe da: hier konnte ich das Problem reproduzieren. Ich wusste allerdings immer noch nicht, woran es lag. Sporadisch waren manche Seiten weiß.
  4. Also deaktivierte ich alle Plugins. Das Problem bestand immer noch.
  5. Also deaktivierte ich auch das Theme. Hier funktionierte das Caching. Lag es am Theme?
  6. Danach begann ich mit den Einstellungen des Cache-Plugins zu spielen und da habe ich gemerkt, dass die HTML-Kompression die Ursache war. Nun war die Fragestellung eine andere: Warum hatte der Kompressor Probleme mit manchen Seiten und mit manchen nicht? Und was hatte das Theme damit zu tun?
  7. Also suchte ich mir im Code von Comet-Cache die Stelle an der die HTML-Kompression durchgeführt wurde. Da bemerkte ich, dass die Entwickler mit preg_replace_callback() eine Ersetzung vornehmen. Die hat zwar eigentlich nichts mit dem Code an sich zu tun, aber interessanterweise gab es – im Vergleich zur vorherigen Version – eine kleine Anpassung. Und zwar die Erweiterung des regulären Ausdrucks um den u-Modifizierer.
  8. Also habe ich nachgeschaut was denn dieser Modifizierer eigentlich tut: Aha! Zwei Dinge: Er schaltet die PCRE-Funktionalität ein und die zu untersuchende Zeichenkette wird als UTF-8 behandelt. Mein Gefühl sagte mir, dass es also ein UTF-8 Problem war. Denn wenn dieser Modifizierer entfernt wurde, funktionierte wieder alles problemlos. Die neue Fragestellung war also: wo im Code des Themes gibt es ein UTF-8 Problem?
  9. Also begann ich mit dem ausschließen des Codes bis ich den entsprechenden Teil gefunden hatte.
  10. Am Ende kam ich bei den Social-Media-Links an. Dort gibt es nämlich einen Link, der es erlaubt, eine Seite per E-Mail zu teilen (<a href="mailto:?subject=Beitragsname">[Mail-Icon]</a>).
  11. Wir übergeben als Betreff den Beitragsnamen. Und die Titel der Beiträge haben in der Regel auch Leerzeichen. Um das zu umgehen, kann man sich der Funktion antispambot() bedienen. Sie sorgt dafür, dass E-Mail-Adressen für Bots schwerer zu lesen sind und man kann auch besondere Dinge (wie Leerzeichen) nutzen.
  12. Beispiel: Der Tag <a href="mailto:?subject=Ein interessanter Artikel">[Mail-Icon]</a> würde zu <a href="mailto:?subject=Ei&#110; i&#110;&#116;e&#114;e&#115;san&#116;e&#114;&#32;Ar&#116;ik&#101;l">[Mail-Icon]</a> werden.
  13. Problem gelöst? Leider nein, denn ich wusste nicht, warum der Kompressor nur auf manchen Seiten Probleme hatte und auf manchen nicht. Die Fragestellung war also: Warum nur auf manchen Seiten?
  14. Und die Antwort war dann folgende: Manche Beiträge hatten Umlaute im Titel. Und genau die waren am Ende das Problem zusammen mit der Umwandlung durch antispambot() und des HTML-Kompressors.
  15. Ich habe ein Issue-Ticket auf Github erstellt und die Entwickler gefragt, ob sie die Problematik reproduzieren können. Bislang jedoch ohne Erfolg. Meines Wissens besteht das Problem auch, wenn man Umlaute in die zu übergebende E-Mail-Adresse einfügt (es muss also nicht unbedingt der subject-Parameter übergeben werden, um den Fehler zu erzeugen).
  16. Die endgültige Lösung für uns? Das Umgehen von Umlauten im Titel und das Anwenden von remove_accents().
  17. Ich wollte dann nicht weiter nachforschen. Meine Vermutung war ein UTF-8-Fehler. Lässt sich das ausschließen? Ich weiß es nicht, denn die Umwandlung durch antispambot() hat nichts mit UTF-8 zu tun. Hat der Kompressor ein Problem mit Umlauten? Das müssen die Entwickler prüfen.

Krasser scheiß? Richtig. Unabhängig von der Problematik sieht man mal wieder, dass Fehler ganz anderer Natur sein könnten als ursprünglich gedacht. Und: Problemsuchen sind extrem Zeitintensiv. Aber man muss sie lösen sonst kommt man nicht mehr weiter.


Freiberuflich auf Kundenfang?

Sind Sie freiberuflicher Entwickler? Wenn ja, sind Sie sicherlich auch immer auf Kundenfang. Zwar sind die Zeiten aktuell gut (jeder braucht irgendwie einen Entwickler) aber wie kommt man eigentlich an die guten Kunden und wie kann man mit diesen perfekt verhandeln?

Am Ende müssen wir nicht nur entwickeln und designen können. Nein, wir müssen auch verkaufen können. Aber wie geht das? Da gibt’s ein paar Tricks und es sind keine Geheimnisse. Jeder kann es lernen. Und zwar einfach indem man ein Buch liest.

Ich hatte mir am Jahresanfang vorgenommen, mehr Bücher zu lesen die ich eigentlich nicht gelesen hätte, die aber doch zu meiner Arbeit passen. Ein Designer schlug mir dann das Design-Buch-für-Nicht-Designer vor. Ein Verkäufer hat mir nun ein zweites Buch vorschlagen welches ich guten Gewissens weiterempfehlen kann:

The Little Red Book of Selling Cover
The Little Red Book of Selling

The Little Red Book of Selling ist zwar schon etwas älter (2004), hat aber von seiner Aktualität nichts verloren. Der Autor –  Jeffrey H. Gitomer – schreibt locker und lässig wie man am besten verkauft.

Hier ein Beispiel: Was tun Sie wenn der Kunde zu Ihnen sagt, dass Ihre Dienstleistung zu teuer sei? Die richtige Herangehensweise wäre, dass man sich gar nicht rechtfertigt, sondern Fragen stellt. So etwas wie „Sind Sie auf der Suche nach dem besten Entwickler oder nach dem billigsten Angebot?“ wäre angebrachter. Und schon ist der Kunde in Zugzwang. Das das tatsächlich funktioniert, kann ich belegen. Ich hab’s nämlich schon ein paar mal gebraucht.

Gitomer präsentiert in seinem englischsprachigen Buch 12 1/2 Prinzipien denen man folgen soll. Wer nicht so sehr auf das Englische steht, dem lege ich Die Kunst des klugen Fragens ans Herz. Es hat zwar nicht direkt einen Bezug zum Verkauf, geht aber in eine sehr ähnliche Richtung.

Nun lassen Sie uns aber zu den WordPress Entwickler-News kommen:


WordPress Entwickler-News

Es gab zwei Updates von WordPress im Januar. Version 4.7.1 schloss unter anderem eine Sicherheitslücke im PHPMailer die erst vor kurzem bekannt wurde. Version 4.7.2 behob eine CSS-Vulnerability und eine SQL-Injection (engl.).


Durch einem Vorschlag von Felix Arntz könnte uns demnächst eine Überarbeitung der Bulk/Row-Actions bevorstehen. Das ist die Funktion in der man mehrere Dinge einer Liste gleichzeitig bearbeiten kann (z.B. die Zuweisung von Benutzern zu einer Seite in der Multisite-Umgebung) (engl.).


Unit Testing. Für viele von uns ein ungeschriebenes Blatt. Thorsten Frommen hat nun einen sehr detaillierten Blogpost veröffentlicht der Ihnen helfen könnte, in das Unit-Testing (mit WordPress) einzusteigen (engl.).


Bei Torque gab es einen guten Artikel zum Thema Dependency Injection in WordPress (engl.).


Im letzten Nicht-Entwickler-Newsletter habe ich darüber berichtet, dass Matt Mullenweg die Tech- und Design-Leads bekanntgegeben hat. Die Arbeit ist schon voll im Gange. Tammie Lister hat deswegen gleich mal in die Runde gefragt, wofür und wie der Customizer bei den verschiedenen Usern zum Einsatz kommt (engl.).


Das Theme-Developer-Handbook wurde nach fast zwei Jahren endlich veröffentlicht (engl.).


Nicht vergessen: Das WordCamp Europe steht an. Wer noch nie in Paris war sollte die Veranstaltung zum Anlass nehmen, sich auch die Stadt näher anzuschauen. Das Camp findet zwischen dem 15. und 17. Juni statt. Es gibt nur noch knapp 60 Tickets!


Ende letzten Jahres habe ich angekündigt, mehr über die etwas unbekannteren Funktionen in WordPress zu schreiben. Im aktuellen Blogpost auf postmeta.blog geht es um die Funktion wp_list_pluck().


PHP-Entwicklung

PHP 5.6. wird seit Januar nicht mehr weiterentwickelt. Es gibt lediglich noch Sicherheitsupdates. Sie sollten ihre Kunden nun auf PHP7 umstellen.


Wie geht PHP intern eigentlich mit Variablen um? Ein sehr interessanter (und verständlicher) Artikel. Allerdings auf englisch.


Was ist eigentlich SRI, CSP, HPKP, HSTS? T3N hat’s erklärt (dt.).


Haben Sie sich auch schonmal darüber geärgert, dass Firefox das Date-Input-Feld nicht unterstützt hat? Das ändert sich wohl jetzt. Juhuu!


Google AMP ist Böse für das Open Web. So lässt sich der Blogpost von Code vs. The World zusammenfassen. Unter anderem, weil man sich zu sehr von Google abhängig macht (engl.).


Welchen Code-Editor nutzt ihr eigentlich? Das war die Frage von Zac Gordon an seine Twitter-Follower. Ca. 250 Entwickler haben teilgenommen. Hier das Ergebnis:


Happy Dev

Eine Million Euro mit WordPress-Plugins machen? Das geht. PippinsPlugins hat seine Umsatzzahlen veröffentlicht (engl.).


Aber nicht immer ist man so erfolgreich. Ein Typ hat bei Reddit beschrieben, dass er über ein Jahr versucht hat, sein eigenes Theme an den Mann zu bringen. Eine irre Geschichte die man unbedingt lesen sollte (engl. mit sehr vielen Kommentaren).


StackOverflow hat die diesjährige Developer-Umfrage gestartet. Sie sollten teilnehmen (engl.).


Was muss man bei der Entwicklung von OpenSource Software überhaupt beachten? Es gibt ein (natürlich) OpenSource eBook dazu. Zum Teil auch auf deutsch: Produktion von OpenSource Software (online eBook, deutsch).


Ist es generell zu Spät in den Theme- und Plugin-Markt einzutreten? Nein, sagt Chris Lema in seinem Blogpost (engl.).


Design

Wer es noch nicht getan hat sollte meiner Empfehlung des letzten Entwickler-Newsletters folgen und das Buch Das Design Buch für Nicht-Designer lesen. Denn im Jahr 2017 dreht sich alles um Design.


Gleich zwei interessante Artikel zum Thema Design-Trends 2017 haben es in meinen Fokus geschafft:


Der neue Font-Stack ist seit WordPress 4.6 ja folgendes:

font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;

Aber andere Entwickler nutzen es anders. Hier steht, welche FontStacks es noch gibt.


CSS4 steht vor der Tür. Und damit kommen viele neue Funktionen. Unter anderem das Festlegen von Farben über spezielle CSS-Funktionen (engl.).


Fundus

Ein neues Plugin kann dabei helfen, ein Child-Theme zu erstellen: Child Theme Generator Plugin.


Chrome kann nun Websits in Android Apps verpacken (engl.).


Affiliate-Links sollten immer „verschleiert“ werden damit diese von Suchmaschinen nicht weiter verfolgt werden. Auf englisch nennt man das „cloaking“. Yoast beschreibt in einem Blogpost, wie man das am besten macht (engl.).


Zeit wird’s! Die aktuelle Version von Chrome hat Flash nun komplett deaktiviert (dt.).


Und nun noch was ganz anderes: Templates für E-Mails zu bauen ist wirklich unglaublich aufwändig. Ein neues Framework (basierend auf React) namens MJML soll dabei helfen, z.B. Newsletter für alle E-Mail-Clients passend aufzubereiten (engl.).


In diesem Sinne: Happy coding!

Ihr Dipl. Ing. (FH) Florian Simeth