Auch 2018 wird es wieder eine SymfonyLive geben - im Mai treffen wir uns aber nicht wie gewohnt in Köln, sondern etwas weiter südlich: im Phantasialand in Brühl!

Wednesday 2nd May 2018

09:30
1
Symfony Best Practices
Workshop by SensioLabs (8 hour)

Wie baut man ein einfaches Symfony4-Projekt auf? Symfony ist für seine Flexibilität bekannt und wird für die verschiedensten Zwecke benutzt. Angefangen bei Microsites, über Enterprise-Anwendungen, die Millionen von Request beantworten, bis hin zur Basis von anderen Frameworks. Wir geben Tipps zum Aufbau von Standard-Anwendungen mit Symfony, die sich bei unserer Arbeit mit einer Vielzahl von Kundenprojekten in den letzten Jahren als sinnvoll herausgestellt haben. Dieser Workshop baut bereits auf den Neuerungen in Symfony4 auf. Anforderungen: Du solltest Symfony bereits einmal ausprobiert haben, aber generell ist dieser Workshop für Einsteiger geeignet.

4
Building API-driven apps with API Platform
Workshop by Kévin Dunglas (8 hour)

API Platform has become a very popular framework to build advanced and modern API-driven web projects. It includes : a Symfony-based, super-powerful, server component to create hypermedia and GraphQL web APIs a Progressive Web Apps (ReactJS, Vue.js) and native mobile apps (React Native) generator a ReactJS administration interface (ReactJS + admin on rest) After an overview of modern API patterns and formats (REST, Swagger, hypermedia, HATEOAS, JSON-LD, Hydra, Schema.org, GraphQL...), we'll learn how to use and extend the most popular features of the API Platform API component: Swagger documentation, pagination, validation, sorting, filtering, authentication, authorization, content negotiation, data model generation using the Schema.org vocabulary. Finally, we'll discover how easy it is to use the client-side (JavaScript) toolkit.

4
Advanced Application Architecture
Workshop by Matthias Noback (8 hour)

In this workshop we'll take a slice of a pretty standard PHP project and gradually work our way towards an application that has a better architecture. "Better" meaning that: It will be easy to find out what the uses cases of the application are ("screaming architecture") It will be easy to find a place for every piece of the application ("layers") It will be easy to find out how users and other systems can interact with it ("ports & adapters") It will be easy to provide tests and automated acceptance criteria for it ("the testing pyramid") I'm sure you would like your project to have these properties! I'll show you all the little steps that will help you transform your application to this new level. Requirements: This workshops is aimed at advanced developers.

3
DDD Practices applied to Doctrine 2 Projects
Workshop by Marco Pivetta (8 hour)

In this full day of hands-on coding we will approach development with Doctrine ORM from a tactical DDD perspective. We will start from a minimal specification, exploring yet-to-be-discovered business scenarios in a rich domain, how to plan features, how to isolate them into workable units, implement them in a framework-less environment and finally test them effectively. We'll freshen up some DB design done "domain-first", looking at the possible performance issues, how to mitigate them on the long run and how to provide an optimal data model for both writes and reads without sacrificing valuable abstractions in the domain logic. At the end of the day, you will have a good overview of how to attack relational DB abstractions, when to optimise for business interactions, and how to optimise for read interactions.

2
Varnish in-depth
Workshop by Thijs Feryn (8 hour)

In this action-packed Varnish workshop, the mission is to bridge the gap between code and infrastructure from a web performance point of view. Varnish will be the primary tool to perform HTTP-based caching that will make our sites, applications & webservices bulletproof. The question is: do we adapt Varnish to our application code base or vice-versa? I won't answer that question, but instead we'll solve the problem by approaching it from both directions. By the end of this workshop, you'll be familiar with Varnish, how it behaves and how you can write VCL to ensure a good hit rate. Portability, control & developer empowerment is also important when we approach HTTP-caching from an application point of view. In this workshop, I'll also teach you how to write code that is cacheable by leveraging the power of HTTP. We’ll build a Symfony3 app, we’ll apply some HTTP best practices, some tips and tricks, and gradually the hit rate will improve. We’ll also use varnishlog, varnishtop to verify the success of our efforts. Requirements: You should have a basic working knowledge of Symfony.

3
Symfony4 Deep Dive
Workshop by SensioLabs (8 hour)

Mit dem Release von Symfony 4 wird die Architektur und der Entwicklungsworkflow modernisiert - was auch der Einführung von Symfony Flex zu verdanken ist. Im Fokus stehen dabei, das Deployment in Cloud-Umgebungen und die Unterstützung verschiedener Anwendungsgebiete von Prototyping über schlanke Microservice-Architekturen bis zu monolithischen Anwendungen. Im Rahmen des Workshops werden wir gemeinsam eine neue Anwendung mit Flex erstellen und dabei auf alle wichtigen Neuerungen eingehen: Aufsetzen eines neuen Projektes mit Symfony Flex Verwendung der Recipes und Contrib Recipes Repositories Anwendungsdesign ohne Bundles Verwendung neuer Komponenten wie Workflow, Cache und Dotenv Änderungen im Service Container Anforderungen: Du solltest grundlegende Kenntnisse in Symfony 2 oder 3 mitbringen.

Thursday 3rd May 2018

09:30
3
Modernisieren mit Symfony
Workshop by Alexander M. Turek (8 hour)

Eine in die Jahre gekommene Webanwendung. Sie verdient immer noch Geld für uns, aber es wird immer schwieriger, sie zu warten. Feature-Wünsche der Kunden häufen sich, der Bug-Tracker läuft über, aber die Abarbeitung wird immer langsamer und fehleranfälliger. Jetzt einen Rewrite zu starten, das würden viele Entwickler nun gerne tun. Nur wahrscheinlich wird dieser niemals fertig. In diesem Workshop werden wir uns eine alte php-Codebasis vornehmen. Durch Einbinden von Symfony und weiteren Open-Source-Bibliotheken werden wir schrittweise alte Anwendungsteile ablösen und unsere Legacy-Codebasis auf diesem Weg schrittweise in eine moderne Symfony-Anwendung umbauen.

4
Learning Design Patterns with Symfon
Workshop by Hugo Hamon (8 hour)

Established in the 70's by the "Gang of Four", Design Patterns are general reusable abstract solutions to solve often recurring problems in software design. Object oriented frameworks leverage them to design robust, extensible and testable code, letting developers build their applications on top of solid foundations. In this workshop, you'll (re)discover tens of the original design patterns, why and how they're implemented in Symfony.

2
Einstieg in PHPUnit
Workshop by Sebastian Bergmann (8 hour)

Wer sicher sein will, dass Software richtig funktioniert, muss sie laufend testen. Das kann man entweder immer wieder manuell tun und entsprechende Kosten in Kauf nehmen, oder man automatisiert die Tests. Die Teilnehmer dieses Workshops lernen, wie sie das Werkzeug PHPUnit, den Standard für Testautomatisierung in der PHP-Welt, in ihren Entwicklungsprozess integrieren.

0
Basic CQRS und Event Sourcing: Von Konzepten zur Anwendung
Workshop by Marco Pivetta (8 hour)

CQRS und Event Sourcing sind herausfordernd, wenn man sich zum ersten Mal mit ihnen beschäftigt - insbesondere, wenn man bei Null startet. Dieser Workshop bietet einen Überblick über die Grundlagen von CQRS und ES, sowie ihren Vorteilen und Fallstricken. Wir werden basierend auf CQRS und ES eine Anwendung modellieren und implementieren, und uns dabei mit Themen beschäftigen wie: Analyse der Domain Komponenten der Architektur Data Flow Synchronous/Asynchronous Dispatching Aggregates und Domain Logik Projections Scaling Testing

0
Building API-driven apps with API Platform
Workshop by Kévin Dunglas (8 hour)

API Platform has become a very popular framework to build advanced and modern API-driven web projects. It includes : a Symfony-based, super-powerful, server component to create hypermedia and GraphQL web APIs a Progressive Web Apps (ReactJS, Vue.js) and native mobile apps (React Native) generator a ReactJS administration interface (ReactJS + admin on rest) After an overview of modern API patterns and formats (REST, Swagger, hypermedia, HATEOAS, JSON-LD, Hydra, Schema.org, GraphQL...), we'll learn how to use and extend the most popular features of the API Platform API component: Swagger documentation, pagination, validation, sorting, filtering, authentication, authorization, content negotiation, data model generation using the Schema.org vocabulary. Finally, we'll discover how easy it is to use the client-side (JavaScript) toolkit.

2
Docker and Docker Swarm
Workshop by Matthias Noback (8 hour)

The ideal occasion to finally get started with Docker! You'll learn everything you need to know to start using Docker in a professional environment. I'll provide some general background information, but we will mainly take the time to make ourselves familiar with the `docker` command line tool and the Dockerfile configuration format. To keep your sanity, you'll also need to learn Docker Compose, which lets you define multiple containers and their images as services, with lots of interesting configuration options, all in one silly Yaml file! We'll cover this configuration file format, the `docker-compose` command line tool, and we'll take a closer look at Docker networking and volumes. During the last part of this workshop you will learn about Docker Machine and how it can help you prepare your servers for container-based deployments. Then you will get yourself acquainted with the Swarm Mode of the Docker Engine. You will deploy services to virtualized servers on your own machine (which is just as easy as deploying to an actual cloud server it turns out).

Friday 4th May 2018

09:00
10
Keynote
Keynote by Fabien Potencier (20 minutes)

Keynote

09:25 Handle with Care: Verantwortungsvoller Umgang mit (Software-)Paketen
Talk by Matthias Pigulla (45 minutes)

Composer ist heute aus der PHP-Welt nicht mehr wegzudenken. Zum ersten Mal wurde es in PHP wirklich einfach möglich, Code in Pakete zu organisieren. Damit lässt sich die Wiederverwendung fördern und auch z.B. größere Anwendungen intern strukturieren. Über die Jahre musste mein Team und ich mit internen und öffentlichen Bibliotheken sowie Symfony-Bundles jedoch schmerzhaft lernen, dass Composer zwar die technischen Aspekte des Paketmanagements vereinfachen kann, die organisatorischen Herausforderungen für Paket-Manager und Release-Prozess aber unverändert bleiben. In diesem Talk wird daher auf einige Entwurfsprinzipien auf Paketebene eingangen und erklärt, worauf man bei der Entwicklung von offenen oder internen Paketen achten sollte. Dabei wird es unter anderem um die Frage gehen, was die Schnittstelle eines Pakets ausmacht, welche Rolle die Release Policy spielt und wie genau SemVer eigentlich funktioniert.

10:15 Symfony + React = ?
Talk by Denis Brumann (20 minutes)

Immer häufiger wird das Frontend moderner Anwendungen durch ReactJS/Angular/VueJS oder andere reine JS-Frontends umgesetzt. Symfony und PHP dienen dann als reine API-getriebene Backends. Häufig kommt die Frage auf, wie eine Symfony-Anwendung, die auf diesen Use Case zugeschnitten ist, aussehen sollte. Diese Frage wird in diesem Talk versucht zu beantworten.

11:00 Controller - jenseits von HTTP und Symfony
Talk by Hans-Christian Otto (45 minutes)

Für viele Softwareentwickler gehört es zum guten Ton, Fachliches (z.B. die Abbildung von Geschäftsprozessen) und Technisches (z.B. die HTTP-Schnittstelle einer Anwendung) zu trennen. Häufig wird damit aber bei den Controllern aufgehört, oder reichen immer nur 1-2 Methodenaufrufe an eine tiefere Schicht weiter, und sind in erster Linie notwendiger „Boilerplate“. Und das, obwohl Symfony es ermöglicht, Controller zu entwickeln, denen man nicht ansieht, dass sie als HTTP-Controller fungieren. So kann man die gleichen Controller auch verwenden, um z.B. keine HTTP-Requests, sondern E-Mails oder Nachrichten aus Message-Queues zu beantworten. Die eigentlichen Controller beinhalten dabei nicht mal mehr einen Verweis auf Symfony. Das vereinfacht nicht nur Framework-Upgrades, sondern reduziert auch die Gefahr eines Vendor-Lock-Ins, was dem ein oder anderen Framework-Kritiker den Wind aus den Segeln nehmen dürfte.

11:50 Better Console Applications
Talk by Christopher Hertel (40 minutes)

Console Applications sind – ob sie nun Bestandteil einer größeren (Symfony-) Anwendung, oder ein Standalone-Tool sind – häufig das Bash-Script der PHP-Entwickler. Dabei verlässt man gerne mal den sonst so sauberen Stil und hackt sich pragmatisch ans Ziel. Und das obwohl so manche schnelle Lösung doch länger im Projekt bleibt und dauerhaft maintained werden muss. Worauf man bei der Entwicklung von Console Applications achten sollte und mit welchen einfachen Tricks sich der Code verbessern lässt, wird in diesem Talk mit praktischen Beispielen verdeutlicht. Wie entkopple ich meinen Code von der CLI-Runtime, wie kann ich langlebige Prozesse optimieren und vieles mehr.

14:00
12
The Big Whoop! Apache Kafka mit Protobuf und Symfony
Talk by René Kerner (45 minutes)

Heutzutage löst man die Aufteilung und Modularisation von großen monolithischen "Legacy"-Applikationen und Datenbanken mit HTTP Microservices. Trivago ist einen anderen Weg gegangen und nutzt Apache Kafka, Debezium und Stream Processing. Sie haben sich schon vor dem Release von Symfony 2.0.0, im Januar 2012, für die Nutzung von Symfony2 entschieden und ihre PHP-Applikationen basieren seitdem auf Symfony. Der Talk zeigt, wie eine Stream-Architektur aufgebaut ist und wie man performant mit PHP und Symfony Google Protocol Buffer Nachrichten erzeugt und in einen Kafka Stream schreibt. Außerdem wird gezeigt, warum Trivago so von Streaming-Architekturen überzeugt ist und warum dieser Weg 1 Million mal schneller ist als HTTP Microservices.

14:50 Asynchronous Request Processing
Talk by Jan Gregor Triebel (45 minutes)

Moderne Webanwendungen/ APIs müssen oftmals mit komplexen Aufgaben umgehen können. Dafür sind in der Regel viel Disk I/O oder Datenbankabfragen erforderlich. Jan Gregor zeigt wie und - viel wichtiger - warum solche Aufgaben asynchron abgearbeitet werden sollten. Es werden einige Messaging/ Queuing Libraries angesehen und die häufigsten Stolperfallen beleuchtet. Für viele PHP-Entwickler sind länger laufende Prozesse Neuland, was ganz eigene Risiken, aber auch Chancen bietet. Erst wenn diese geklärt sind, kann abgewogen werden, wo und wie solche Techniken in der eigenen Infrastruktur Platz haben.

16:00 Symfony Apps von dev nach prod mit GitLab CI
Talk by Stephan Hochdörfer (45 minutes)

GitLab hat sich in den letzten Jahren zu mehr als "nur" einem web-basierten Git Repository Manager entwickelt. GitLab versteht sich heutzutage als DevOps Lifecycle Plattform. Doch was heißt das? In dieser Session wird Stephan einen Einblick geben, wie man GitLab und GitLab CI richtig einrichtet. Es wird gelernt, wie man mit GitLab CI eigene Build Pipelines aufsetzt, die Apps verifizieren, paketieren und automatisiert auf dev, stage und prod Umgebungen deployen.

16:50 Vorausschauende Sicherheits-Architektur
Talk by Bastian Hofmann (45 minutes)

Eine Web Seite sicher und frei von Sicherheitslücken zu halten ist harte Arbeit, unabhängig davon ob man sich informiert und z.B. die OWASP Top 10 kennt. In diesem Vortrag werden Tools und Best Practices vorgestellt, die helfen, Sicherheitsprobleme vor einem Angreifer zu entdecken und sogar von vorneherein zu vermeiden.