SymfonyLive 2019
//
Sebastian Anklamm

Nun zum zweiten mal in Folge besuchte ich mit den Kollegen Bernhard Kau und Patrick Blawert die SymfonyLive vom 24. – 27. September 2019 in Berlin. Im Vergleich zum Vorjahr sollte mit zwei Workshoptagen und zwei Konferenztagen mit nun drei Tracks alles größer, länger und besser werden.

Wir nahmen in diesem Jahr das vollständige Programm mit, was bedeutet, dass die Konferenz für uns zunächst mit je zwei Workshops startete.

Dienstag

Advanced Application Testing

In einer ausführlichen Vorstellungsrunde begannen wir damit gemeinsam den Begriff „Testibility“ zu definieren und vom drückenden Schuh (bzgl. Testing) bei unserem Arbeitgeber zu berichten.

Der Workshop begann dann mit der Abgrenzung von „Infrastructure Code“ und „Core Code“ und der Problematik, dass der Core Code sehr durchsetzt ist von Infrastructure Code und somit das Testing des eigenen Codes sehr verkompliziert. Business-Logik ist durchsetzt mit ORM-Interaktionen, Controller sprechen zwischendurch mit REST API’s usw.

Ziel des Workshops war es dann den Code eines Beispielprojektes so umzuschreiben, dass der Infrastruktur-Code an den Rand rutscht und davon unabhängiger, gut testbarer Code entsteht.
Dazu gab uns Matthias Noback einige Design-Patterns und Techniken an die Hand.
Mit Hilfe von gut aufeinander aufbauenden Aufgaben wurde des Testprojekt schrittweise für die unterschiedlichen Testtypen (Systemtest, Akzeptanztest, Integrationstest und Unittest) umgeschrieben. Für die drei umfassenderen Testtypen verwendeten wir das BDD (Behaviour Driven Development) Testframework Behat und zum Teil die Hilfsbibliothek Mink. Dieses Framework erhöht Struktur und Lesbarkeit von Testfällen ungemein und sollte unbedingt in unseren Projekten eingesetzt werden.

Der Workshop war hervorragend strukturiert und vorbereitet, hatte eine flotte Geschwindigkeit und vermittelte fast die gesamte Testbandbreite.
Mehr hätte ich von diesem Workshop nicht erwarten können.

Bearbeitete Themen waren hier:

  • Systemtests
  • Akzeptanztests
  • Integrationstests
  • Unittests
  • Dependency Inversion Principle
  • Abhängigkeit des ausführbaren Codes von Umgebungsvariablen
  • Application Services
  • Behat und Mink als Testframeworks

Symfony Messenger

Eine der neuen Komponenten im Symfony-Universum beschäftigt sich mit dem Austausch von Nachrichten. Der Clou: Die Nachrichten können sowohl synchron verarbeitet, als auch asynchron an andere Services weitergeleitet werden! Das System ist dabei ähnlich dem Event-Management, wobei ein oder mehrere „Handler“ eine Nachricht zur Weiterverarbeitung erhalten. Die Nachricht selbst ist ein Objekt – ähnlich wie das Event – von beliebiger Implementierung.

Im Workshop haben wir uns mit dem Grundaufbau der neuen Komponente und der Entwicklung eigener Nachrichten und Handler beschäftigte, um ein Projekt nur anhand dieser aufzusetzen. Weiter ging es dann mit den „Middlewares“, den Datenplattformen, an denen alle Nachrichten vorbeigehen. Mit ihnen lässt sich die Ausführung der Handler und der Fluss der Nachrichten lenken.

Der Messenger ist aktuell noch als „experimentell“ gekennzeichnet, wird mit dem Update 4.4 im November allerdings stabilisiert.

Advanced Symfony Security

Jede Webanwendung, bei der sich Benutzer (mit verschiedenen Rollen) anmelden können braucht eine Security-Komponente. Dieser Workshop hatte das Ziel, die verschiedenen Möglichkeiten vom Symfony aufzuzeigen. Hierzu wurde den Teilnehmenden ein Repository mit fünf Lektionen zur Verfügung gestellt. Nach einer Einführung in jedes Themenfeld mussten die Teilnehmenden dann die fehlenden Zeilen Code selbst schreiben. Die fünf Lektionen lauteten wie folgt:

  • Security Komponente Standalone
  • Admin-Bereich
  • Guard-Authenticator
  • Security-Voter
  • Multi-Faktor-Authentifizierung

In der ersten Lektion wurden die Grundlagen sowie die Unterschiede zwischen Authentifizierung und Autorisierung sehr gut erklärt. Leider waren die anderen Inhalte eher auf einem Niveau für den Einstieg in die Security Komponente und nicht wirklich „advanced“. Für die letzte Lektion, die durchaus hätte interessant werden können, wurde aus Zeitgründen nur noch die Lösung präsentiert.

Mittwoch

REST Services in Symfony

Wo der erste Workshop fantastisch vorbereitet war (rechtzeitige Veröffentlichung des Git Repos mit ausführlicher Installationsanleitung) ging es bei diesem sehr holprig los.
Weil sich SensioLabs mit Schulungsmaterial bekanntlich sehr bedeckt hält, wurde das Repo natürlich nicht vorzeitig öffentlich gemacht und so wurde der bessere Teil der ersten Stunde erst einmal mit Projektsetup vergeudet. Immerhin waren neben dem Workshopleiter noch zwei weitere SensioLabs Mitarbeiter anwesend, die bei Schwierigkeiten weiterhelfen konnten.
Als der Workshop dann in die Gänge kam, war dieser dann aber sehr lehrreich und gut vorbereitet.

Es sollte am Beispiel einer Konferenz mit zwei Workshoptagen (wie kamen sie bloß auf dieses Beispiel?) eine REST API mit Symfony entwickelt werden, die Workshops und deren Teilnehmer abbildet.
Zwei Handvoll Code-Challenges, die schrittweise die nötigen Komponenten abbildeten, wurden von knackigen Theorieteilen begleitet und brachten uns einer vollwertigen REST API Stück für Stück näher.

Bearbeitete Themen waren hier:

  • Controller für ListView und SingleView
  • Synfony Serializer für JSON und XML Responses
  • Custom Normalizer
  • Pagination
  • HATEOAS / JSON-HAL (für Links auf Collections bzw. SingleEntries)
  • Content Negotiation (so dass der Client JSON oder XML anfordern kann)
  • POST vs PUT
  • Validation
  • JSON Web Token

Entwicklung einer Anwendung mit einem modernen Symfony CMS – Sulu 2.0

Sulu 2.0 steht in den Startlöchern und wir konnten dem „quasi“ Neustart des Projekt mal direkt unter die Haube schauen. Der Workshop war sehr gut vorbereitet, die Aufgaben in 12 Stufen aufgeteilt. Jede Stufe hatte das Projekt um eine neue Facette erweitert und uns mehr mit dem Backend vertraut gemacht. Warum nur das Backend? Sulu überlässt das Frontend dem Entwickler/Designer – und zwar komplett!

Am Ende des Workshops hatten wir unser Sulu um ein Termin-Management mit eigenen Entitäten erweitert, welches wir beliebig in die Seiten des CMS integrieren konnten. Jetzt bin ich bereit, ein eigenes Sulu-Projekt zu starten und freue mich schon auf die nächste Gelegenheit!

Richtig guten Code schreiben

Der Workshop wurde von Sebastian Bergmann, der Hauptentwickler von PHPUnit gehalten. Er selbst ist passionierter Spieler von Brettspielen und wählte daher ein sehr anschauliches Beispiel für eine „Prozesslogik“ anhand der Bewertungsregel aus dem Spiel.

Die ersten Zeilen Code wurden gemeinsam nach den Grundlagen des Test Driven Developent (TDD) erarbeitet. Dabei wurden verschiedene Tools zur Sicherstellung einer hohen Code-Qualität vorgestellt und eingesetzt. Unter anderem PHPUnit, PHP CS Fixer und Pslam.

Zum Abschluss des Workshops mussten alle Teilnehmende dann die Bewertungsregel umsetzen und hierzu im Vorfeld passende Tests schreiben. Drei Teilnehmende konnten dann ihre Lösungen vorstellen und mit der Gruppe diskutieren.

Donnerstag

Am Donnerstag ging dann die eigentliche Konferenz los. Auf drei Tracks wurde von sehr speziellen Entwicklerthemen über grundsätzliche Konzepte bis zur Vorstellung von E-Commerce-Plattformen eine Menge geboten, so dass es oft schwer fiel, sich für einen Talk zu entscheiden. Glücklicherweise waren wir zu dritt, so dass wir in Summe annähernd das komplette Konferenzprogramm wahrnehmen konnten.

Hier eine kurze Zusammenfassung aller gesehenen Talks.

Keynote

Zum Einstieg in die Konferenz gab Dr. Janina Loh einen recht akademischen Vortrag zum Thema des technischen Posthumanismus mit einer gehörigen Portion Kritik und zeigte prägnant auf, wie bspw. Softwareentwickler dafür verantwortlich sind gesellschaftliche Vorurteile, Ausgrenzung und Stereotypen in ihre Anwendungen einzubacken.

HTTP-Clients in PHP – vom fopen-Wrapper zur Symfony Komponente

Denis Brumann gab einen historischen Abriss zu HTTP-Clients in PHP und stellte Motivation und Implementation der neuen Symfony Komponente vor.
Besonders inspiriert wirkte das ganze nicht, aber so hat Symfony ein weiteres essentielles Feature und das ist ja auch nichts schlechtes.

Statische Code Analyse in PHP

In seinem Vortrag hat Benjamin Cremer viele Beispiele gezeigt, wie eine statische Codeanalyse helfen kann, viele Fehler frühzeitig zu finden und wie es außerdem möglich ist, hierdurch Code zu schreiben, der weniger Unit-Tests benötigt.

Backwards Incompatible Tales

Ein Talk, der sich vor allem an Library-Entwickler und alle, die Code schreiben, von dem andere abhängen richtete.
Anhand vieler Beispiele zeigte Marco Pivetta welche Änderungen am eigenen Code Backwards-Compatibility brechen und wie man als Autor damit umgeht, bzw. diese kommuniziert.

In fünf Jahren wird es keine Tester mehr geben

Dieser etwas reißerische Titel sollte nicht zum Ausdruck bringen, dass gar keine Tester mehr benötigt werden. Es wurde aber in vielen praktischen Beispielen gezeigt, durch welche Maßnahmen man bestimmte Dinge automatisieren oder auslagern kann, um dann nur noch wenige eigene Tests durchzuführen.

Varnish beyond basic web acceleration

Nach einer flotten Einführung in die Grundlagen des weit verbreiteten Caching Servers wurden vor allem die Enterprise-Features vorgestellt, wie diese funktionieren und wie man diese kostengünstig mindestens einmal ausprobieren kann.

Aggregierte Logging Patterns

Philipp Krenn, Entwickler bei Elastic, zeigte eine Menge Szenarien, wie man hohem Loggingaufkommen mit dem Elastic Stack beikommen kann.
Krenn beleuchtete dabei die verfügbare Toolchain, benannte etliche Tipps und Tricks und zeigte zudem wie man Metadaten im Docker- und Kubernetes-Kontext in die Logs mit einfließen lassen kann. Viel Stoff, der Lust darauf macht so etwas intern aufzusetzen.

Meine ehrliche Symfony-Anwendung

Christopher Hertel, seines Zeichens Enwickler und Consultant bei SensioLabs, zeigte an vielen illustrativen Beispielen was in vielen Symfony Projekten falsch gemacht wird und wie man diese Dinge besser machen sollte. Zentrale Punkte dabei waren:

  • ordentliche Namespaces anstatt von Bundles
  • in Services nicht das OOP vergessen
  • bei Services weniger an Dinge und mehr an Use-Cases denken (ReserveDomain + RegisterDomain + Payment statt DomainService)
  • mehr Logik in die Entitäten schieben => erleichtert Testbarkeit
  • insgesamt bessere Projektstruktur, lesbare Businesslogik, Pair-Programming, Code-Review für Onboarding, Wartbarkeit, Qualitätssteigerung…

Start Smoking, Get Confidence – HTTP Smoke Testing

Durch den Einsatz von HTTP Smoke Testing lassen sich automatisiert alle in einer Symfony-Anwendung definierten Routen testen. Petr Heinz hat dies in einer Live-Demo gezeigt und dabei auch erklärt, wie man für die Routen notwendige Parameter definieren kann. Im Optimalfall müssen also keine Unit-Tests für das Testen von Routen geschrieben werden, sondern lediglich eine Dev-Dependency installiert und eine Konfiguration dafür erstellt werden.

Everything about DNS you never dared to ask!

In einem sehr unterhaltsamen Talk führte Ole Michaelis durch den gesamten Prozess, der dafür nötig ist, um eine Domain zu kaufen und auf einen Host zu schalten, schweifte in viele interessante Nebenschauplätze ab und erzählte etliche erheiternde Anekdoten aus diesem Bereich. Tatsächlich weit mehr, als ich mich je getraut hätte zu fragen.

Die ultimative API Plattform

Aus dem letzten Jahr als sehr unterhaltsamer Speaker in Erinnerung geblieben, war es Pflicht auch dieses Jahr wieder dem zu lauschen, was Stefan Adolf von Turbine Kreuzberg zu erzählen hat.
Es sollte um ein Bundle gehen, mit dem man quasi auf Knopfdruck aus bestehenden Symfony Entitäten eine einfache REST API samt Dokumentation generieren kann.
Das Sahnehäubchen auf dem wieder informativen wie unterhaltsamen Talk war ein weiteres Tool, dass in der Lage ist, aus der Swagger API Dokumentation komplette Clients in den verschiedensten Programmiersprachen zu generieren.
Definitiv etwas, das wir für unsere Projekte im Hinterkopf behalten sollten.

Abschluss

Bei Currywurst, Bionade und Bier konnten wir auf dem „Marktplatz“ den Tag Revue passieren lassen und uns über unsere Highlights des Tages austauschen.

Freitag

Symfony Update – On the Road to v5

Der Freitagmorgen startete mit einem kleinen geschichtlichen Abriss von der Entstehung Symfonys bis zu den geplanten Änderungen für Version 5.
Die Tatsache, dass ein v5 Talk mit 40 Minuten Geschichtsstunde ausgeschmückt wurde zeigt, dass es da eigentlich nichts zu erzählen gab.

Pushing the limits of PHP

In einem beeindruckenden Vortrag hat Christian Lück gezeigt, wie schnell PHP sein kann und wie einfach manche vermeintlich komplexen Anwendungen umgesetzt werden können. Dabei hat er in einer Live-Demo einen kleinen Chat-Server gestartet, in dem Teilnehmende sich während des Vortrags unterhalten konnten. Grundlage hierfür war ReactPHP, was in seiner Geschwindigkeit schon fast an native C-Programmierung heranreichen konnte.

Head first into Symfony Cache, Redis & Redis Cache

In diesem Grundlagen-Talk zum Thema Redis ging es vor allem um dessen interne Datentypen und Interaktionsmöglichkeiten mit diesem Caching-Dienst.
Leider gab es hier nicht viel Neues außer der Erkenntnis für gewisse Anwendungsfälle dann auch mal Redis einzusetzen.

Automatisierte Review-Umgebungen mit GitLab-CI und Rancher

Für ein absolutes Highlight nach der Kaffeepause sorgte Daniel Badura, der ausführlich und sehr anschaulich davon berichtete, wie er in seiner Agentur die titel-gebenden Review-Umgebungen umsetzte. Die Möglichkeit diese Umgebungen mit dem weit einfacher aufzusetzenden Rancher statt Kubernetes umzusetzen, war uns bisher nicht bekannt und ist in jedem Fall etwas, dass wir in unseren CI-Prozess intigrieren wollen.

Denormalisiere deine Datenbank – Schema-Design für moderne Datenbanksysteme

Andreas Braun, Mitarbeiter bei MongoDB, zeigte an dem kanonischen Normalisierungsbeispiel, wie man durch geeignete Denormalisierung häufige Datenbankabfragen vereinfachen kann und was man davon lernen kann, sein DB-Modell statt in einer relationalen Datenbank in einer dokumentenbasierten Datenbank abzubilden.
Sehr erhellend, da man sich beim Datenbankdesign selten darüber Gedanken macht, wie die häufigsten bzw. wichtigsten Queries in der fertigen Anwendung aussehen werden und man sich eher daran orientieren sollte statt krampfhaft die Redundanz nahe null zu halten.

Softwarequalität === Gesundheit

In einem sehr mitreißenden Vortrag hat Roland Golla Anekdoten aus seiner beruflichen Laufbahn zum Besten gegeben und erklärt, wieso die Zufriedenheit von Mitarbeitern, ein gutes Teamwork und andere Dinge essentiell dafür sind, dass wir qualitativ guten Code schreiben. Er hat auch dazu aufgefordert, dass man Dinge einfordert, um die eigene Zufriedenheit zu erhöhen und die Produtivität damit zu steigern, da es am Ende für alle Vorteile bringt.

Exploring Async PHP

In einem sehr unterhaltsamen Talk zeigte Daniel Leech verschiedene Möglichkeiten seinen PHP Anwendungen ein wenig Asynchronität und damit Endanwendern weniger Wartezeit zu bescheren.
Nichts, was ich in Produktivsystemen einsetzen würde, aber eine spannende Spielerei.

Und was kostet das? – Scrum als Dienstleister

Franzi Hackhausen (Entwicklerin) und Stefan Kirch (Geschäftsführer) von Bauer+Kirch — einer etwa 50-köpfigen Agentur für Web- und Softwareentwicklung — stellten Erfolge und Schwierigkeiten vor, die sie bei der Umstellung auf kleine Scrum-Teams hatten, wie die Kommunikation dazu mit Kunden aussieht, was Spannungen aber auch Bindung schafft und wie ihnen ganz speziell Transparenz bzgl. Kontierung und Kosten dabei hilft Kundenakzeptanz für agiles Projektmanagement zu erzeugen.

Wie gut sind meine Tests wirklich?

Ein großes Problem bei Tests ist, dass man oft nicht sagen kann, ob man ausreichend viele geschrieben hat, um alle möglichen Eventualitäten zu testen. Ein Werkzeug um hier eine Aussage treffen zu können ist das sogenannte Mutation Testings. Hierbei wird der Quellcode automatisiert verändert und dann erneut getestet. Es wird beispielsweise in einer Bedigung ein „gleich“ zu einem „kleiner gleich“ oder aus einen „true“ ein „false“ gemacht. Es wird hierbei erwartet, dass Tests fehlschlagen. Tun sie das nicht, sind die Tests vermutlich nicht ausreichend. In der Auswertung des Tests kann dann nachvollzogen werden, ob weitere Test notwendig sind, oder ob es sich lediglich um einen „false positive“ handelt. Denn je nach Grad der Veränderung, sind sehr viel mehr „Fehler“ zu erwarten, die nicht alle in einem fehlenden Test begründet liegen. Ein wirklich spannender letzter Vortrag zur Reihe von Vorträgen rund um Testing und Softwarequalität.

SOLIDe Symfony Apps bauen

Zum Abschluss gab es noch einen sehr schönen Talk von Ole Rößner, der objektorientierte DOs and DON’Ts in Synfony-Anwendungen anhand der SOLID-Prinzipien beleuchtete und zeigte, wie man es besser macht. Es gab viel Code zu sehen, aber der witzige und lockere Stil Rößners halfen sehr dabei sich auch noch zu solch später Stunde auf diesen sehr interessanten Talk zu konzentrieren. Es gab einige Anregungen etwas sauberen Code zu schreiben, der sich dann auch leichter warten lässt.

Fazit

Alles in Allem war die SymfonyLive auch in diesem Jahr wieder eine sehr gute Konferenz, deren Workshops und Talks im Wesentlich durch ihre hohe Qualität überzeugen konnten.
Einzig die auffallend mangelnde Diversität störte doch sehr. Ich sah gerade mal zwei Frauen auf der Bühne und mit 1-2 Dutzend Teilnehmerinnen war auch die weibliche Besucherschaft sehr unterrepräsentiert.

Gerne sind wir auch im nächsten Jahr wieder mit von der Partie.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert