Skip to content

Flow Framework mit XDebug-Proxy

Ich hatte kürzlich mit einem Projekt auf Basis des Flow Frameworks zu tun. Zu den Besonderheiten dieses PHP-Frameworks gehört unter anderem die Unterstützung von Aspect-Oriented Programming (AOP), mithilfe dessen sich generische Funktionalitäten relativ sauber über verschiedene Klassen hinweg verwenden lassen (cross-cutting concerns). Wie das funktioniert, ist in der Dokumentation ausführlich beschrieben.

Zu diesem Zweck erstellt Flow automatisch Proxy-Klassen, welche die Original-Klassen erweitern und die nicht zuletzt aus Performance-Gründen gecachet werden. Dabei werden gegebenenfalls Aspekte, Pointcuts oder Advices in Klassen "eingewoben". Die Applikation verwendet die auf diese Weise generierten Klassen, in der Entwicklung wird aber weiterhin nur mit den Originalen gearbeitet.

Ein bedeutender Nachteil dieser Vorgehensweise ist, dass Debugging - z.B. mit XDebug - nicht mehr ohne Weiteres möglich ist, denn die IDE kennt nur die Original-Klassen, nicht aber die dynamisch erstellten Proxy-Klassen. Um dieses Problem zu lösen, wurde flow-debugproxy geschreiben, ein Flow Framework Debug-Proxy for XDebug in Go, der die Proxy-Klassen auf die Original-Klassen "mappt".

Da dieser Proxy nicht ganz trivial zu installieren ist, habe ich hier eine kurze Anleitung aufgeschrieben, die in dem genannten Projekt funktioniert hat (und mir nebenbei eine Kiste Bier eingebracht hat ;-)):

"Flow Framework mit XDebug-Proxy" vollständig lesen

PHP 7.1 ist da!

Vor wenigen Stunden hat Release-Manager Davey Shafik gemeldet, dass Version 7.1 der Programmiersprache PHP veröffentlich wurde:

Im Release Announcement werden die wichtigsten neuen Features aufgelistet. Auf der PHP Unconference in Hamburg im September sowie bei der PHP User Group Rheinhessen im Oktober habe ich die Neuigkeiten in PHP 7.1 ebenfalls vorgestellt, die Slides zu den Talks liegen hier auf GitHub.

Ich denke, die neue Version bringt einige Verbesserungen und Präzisierungen, etwa bei den Type Hints und Return Types, für Closures und Exceptions, die sinnvoll und nützlich sind. Nach dem "großen Wurf" PHP 7 sorgt der neue Minor Release für Feinschliff. Vielen Dank an alle, die an den Verbesserungen mitgearbeitet haben!

JeoPHPardy! PHP Quiz for Fun and Profit

Jeopardy! ist eine US-amerikanische Quizshow, die schon seit 1964 läuft. Die Älteren unter euch erinnern sich vielleicht an den Klon "Riskant!", der Anfang der 90er auf RTL lief. Das Format ist unterdessen auch zur Auflockerung von Tech-Konferenzen beliebt. Seit Jahren erfreut etwa das Hacker Jeopardy die Besucher des Chaos Communication Congress (hier das Video vom 32C3). Und Jeremy Mikola tingelt mit seinem JeoPHPardy von einer PHP-Konferenz zur nächsten.

Die typisch blaue JeoPHPardy!-Wand und Meetup-Teilnehmer
JeoPHPardy! beim 39. PHPUGRhh-Meetup (Foto von Ben Dechrai)

Auf GitHub habe ich vor einiger Zeit die PHP-Anwendung tpavlek/Jeopardy gefunden, die Troy Pavlek ursprünglich für eine Starcraft-Community programmiert hat. Das Starcraft Jeopardy! wurde übers Internet gespielt, ein Video zeigt sehr schön, wie das aussah.

Ich hatte schon länger mit dem Gedanken gespielt, ein Jeopardy-Quiz für unsere PHP-Usergroup zu basteln, mit richtigen Hardware-Buzzern für mehrere Quiz-Kandidaten auf der Bühne. Als Grundlage dafür bot sich tpavlek/Jeopardy wirklich an, denn ich musste nur wenige Änderungen vornehmen.

"JeoPHPardy! PHP Quiz for Fun and Profit" vollständig lesen

MailHog, eine Mailcatcher-Alternative in Go

Wer eine PHP-Anwendung entwickelt, die Mails versendet, möchte natürlich, dass diese Mails auf dem Entwicklungsrechner oder der Vagrant-Box nicht wirklich den Empfänger erreichen. Aber dennoch sollen sie irgendwo ankommen, damit Versand und Inhalt geprüft werden können.

Symfony schlägt vor, den E-Mail-Versand in der Test- und ggf. in der Development-Umgebung ganz zu deaktivieren, oder alternativ eine spezielle E-Mail-Adresse für solche Fälle einzurichten.

Ich wollte für eine Legacy-Anwendung, die Mails mittels der PHP-Funktion mail() versendet, aber lieber einen lokalen Mailcatcher verwenden, der die Mails in der Entwicklungsumgebung abfängt.

Es gibt da was für Ruby, aber nachdem die Installation immer noch nicht abgeschlossen war, als ich mit dem Kaffee aus der Küche zurückkam, habe ich das verworfen und mich nach einer Alternative umgesehen. Und gefunden:

"MailHog, eine Mailcatcher-Alternative in Go" vollständig lesen

User Group Code of Conduct

Introduction

As you may know, I'm co-organizing two user groups, PHP User Group Rheinhessen and RheinMainJS, and although we've fortunately never had any complaints about or problems with abusive behavior or harassment, I would like to establish a Code of Conduct for these user groups.

Others have done this before: AmsterdamPHP has a Code of Conduct (CoC). phpMiNDS in Nottingham has one. Several user groups in Berlin support a CoC. A lot of conferences both in the PHP and JS communities have a Code of Conduct, e.g. phpDay and JSConf Europe among many others.

A painting of two men. The man at the center is looking off to his right while drawing a symbol with his right hand. His left hand is resting on a page in a book. He is wearing a robe with a hood. The man on the right is looking towards the front and is wearing a long-sleeve red shirt with a black jacket. Several writing utensils and books are on a table with a green tablecloth in the front of the image.

"User Group Code of Conduct" vollständig lesen