SymfonyLive Berlin is the official Symfony conference in Germany - a single day with two tracks, plus two days full of workshops from experts in the community. See you in Berlin!
09:30 |
Knowing your state machines - The Symfony Workflow Component
Workshop by Tobias Nyholm (8 hour) Web development is not just about delivering a response, it is also about writing good code. The state pattern will help you move complexity from being all over your code to one or more state machines. Tobias' workshop will introduce state machines, show you how to identify uses of them, and implement them in your Symfony application in an object-oriented manner using the Symfony Workflow component. |
Building API-driven apps with API Platform
Workshop by Grégoire Hébert (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. |
|
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. |
|
Symfony Best Practices
Workshop by Christopher Hertel (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. |
|
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 TeilnehmerInnen dieses Workshops lernen, wie sie das Werkzeug PHPUnit, den Standard für Testautomatisierung in der PHP-Welt, in ihren Entwicklungsprozess integrieren. |
|
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. |
|
Hacker-Angriffe verstehen - ein Workshop für Ethical Hacker
Workshop by Andreas Sperber (8 hour) Als EntwicklerIn muss man ständig für sichere Webentwicklung sorgen und Dinge wie CSRF-Tokens, Firewalling und Upload-Validierung umsetzen. Halbwegs ist einem klar, wieso alles erforderlich ist. Aber wie kann man eigentlich prüfen, ob das alles funktioniert? Und welche Angriffe gibt es noch auf Webanwendungen. Würde die eigene Anwendung diesen standhalten? In diesem Workshop lernen wir deshalb Angriffe von Hackern auf Webanwendungen kennen und probieren sie direkt aus. Zunächst wird eine kurze Einführung in mögliche Tools gegeben Anwendungen zu untersuchen und es werden diverse Angriffstechniken vorgestellt. Anschließend können sich alle selbst im Hacken versuchen. Der Workshop findet als Capture the Flag (CTF)-Game im Jeopardy-Modus statt. Alle Teilnehmer sollen lernen, wie sie als Ethical Hacker seine eigene Anwendung prüfen können. |
09:30 |
Knowing your state machines - The Symfony Workflow Component
Workshop by Tobias Nyholm (8 hour) Web development is not just about delivering a response, it is also about writing good code. The state pattern will help you move complexity from being all over your code to one or more state machines. Tobias' workshop will introduce state machines, show you how to identify uses of them, and implement them in your Symfony application in an object-oriented manner using the Symfony Workflow component. |
Richtig guten Code schreiben
Workshop by Sebastian Bergmann (8 hour) Was macht sauberen Code aus? Wie wird Code richtig gut? Und wie schreibt man richtig guten Code? In diesem Workshop lernt Ihr das nicht nur, sondern Ihr könnt es auch direkt in die Praxis umsetzen! Zunächst demonstriert Sebastian Bergmann den Einsatz von Domain-Driven Design und Test-Driven Development, natürlich nicht ohne auch über Themen wie Clean Code oder die SOLID-Prinzipien zu sprechen. Danach arbeitet Ihr in Paaren und setzt das Gelernte in die Praxis um. Wir schließen den Tag ab mit einer Review-Runde, in der Ihr Feedback zu Eurem Code bekommt. Um von diesem Workshop wirklich profitieren zu können, bringst Du bitte Dein eigenes Laptop mit Deiner gewohnten Entwicklungsumgebung mit. Neben IDE (oder Texteditor) brauchst Du eine aktuelle Version von PHP und PHPUnit. Frameworks oder Third-Party-Code wird nicht benötigt. |
|
Schnittstellen-Testing in einer Microservice-Architektur
Workshop by Frank Stelzer (8 hour) Die Definition von Schnittstellen und deren Einhaltung ist essentiell in einer Microservice-Architektur. Applikationen können eigene Schnittstellen zur Verfügung stellen und Schnittstellen von anderen Applikationen benutzen. Bei einem kleineren Projekt mag das noch überschaubar sein, aber wie macht man das in einem Projekt mit vielen Applikationen? Wie stellt man auch langfristig die Funktionalität der Schnittstellen sicher? Das normale Test-Setup, wie man es von normalen Symfony-Applikationen kennt, reicht dafür nicht mehr aus. Hier kommt das Thema Contract Testing ins Spiel. Mit den sogenannten Contracts schließen Applikationen untereinander Verträge ab und durch entsprechende Tools kann man erkennen, wann diese Verträge gebrochen werden. In dem Workshop werde ich auf das Thema tiefer eingehen und das nötige Setup mit Hilfe eines Demo-Projekts erklären. |
|
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 KundInnen 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 EntwicklerInnen 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. |
|
Building Autonomous Services
Workshop by Matthias Noback (8 hour) In this workshop we’ll dive into the topic of Autonomous Service development, with a sandbox project containing several interdependent services. These projects send messages to each other, and they call each other to retrieve data. In other words, they’re not autonomous at all. We’ll figure out some ways in which we can invert dependencies and leverage a messaging solution to achieve autonomy after all. In a relatively short period you’ll get acquainted with the basics of asynchronous integration, CQRS, domain events and integrating bounded contexts. |
|
Symfony under the Hood
Workshop by Andreas Hucks (8 hour) Die meisten EntwicklerInnen, die regelmäßig mit Symfony arbeiten, haben schon mal eigene Services konfiguriert, und können flüssig Routen, Forms, und Constraints konfigurieren. Aber was geht unter der Haube vor? Was passiert, wenn die Konfiguration gelesen wird? Was ist ein Cache Warmer? Was passiert mit einem Request, bevor er den Controller erreicht? Wie funktioniert der HttpKernel? In diesem Workshop benutzen wir einige Features, die nicht allen NutzerInnen des Frameworks bekannt sind, die aber von großem Nutzen sein können - Compiler Passes, Cache Warmer, Custom Authorization, und mehr. |
|
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 |
09:15 |
Symfony without the Framework Bundle
Keynote by Tobias Nyholm in Track 1 (45 minutes) You may have heard people saying that ”Frameworks are bad” or ”Symfony is slow”. It is time to investigate why those people are saying that. We want to see if they are really smart or just stuck in the past. This talk will go over performance to see what you can do to make an application run faster. (There are no quick fixes) We will also see how we can build applications that responds in less that 15ms and then work towards even faster than that. |
10:05 |
Eine Einführung in die Symfony Messenger-Komponente
Talk by Denis Brumann in Track 1 (45 minutes) Eine der großen Neuerungen in Symfony 4.1 ist die Messenger-Komponente, die als experimentelles Feature zur Verfügung steht. In meinem Talk möchte ich die Komponente und ihre Funktionsweise vorstellen. |
Doctrine - mehr als nur ein ORM
Talk by Andreas B. in Track 2 (45 minutes) Die meisten Entwickler denken beim Wort „Doctrine“ an das ORM, welches Teil der Symfony-Standard-Edition ist. Hinter dem ORM verstecken sich aber viele weitere Pakete, welche deutlich weiter verbreitet aber weniger bekannt sind. In diesem Talk wollen wir einen Blick auf diese Pakete werfen sowie darauf, wie sich diese Pakete in den nächsten Monaten weiter entwickeln werden: vollständige Migration auf PHP 7 inklusive strikter Typisierung sowie eine starke Nutzung von statischen Analysetools helfen uns, diese oft benutzten Pakete zu verbessern. |
|
11:20 |
Ein leistungsfähiger Development Workflow mit Kubernetes
Talk by Bastian Hofmann in Track 1 (45 minutes) Kubernetes ist ein sehr mächtiges Werkzeug um zu Orchestrieren, wo Services wie laufen. Aber das Bauen von Docker Images, das Schreiben und Updaten aller notwendigen YAML Dateien und das Anwenden dieser auf dem Cluster kann trotzdem zu einem nervigen Maintenance Overhead werden. In diesem Talk zeige ich, wie man mit Kubernetes und Tools wie Telepresence und Forge einen Development Workflow erstellen kann, der es erlaubt Services schnell und sicher zu bauen, zu testen und zu deployen. |
Content & Master Data Management mit Pimcore
Talk by Christoph Luehr in Track 2 (45 minutes) So gut wie jedes PHP-Projekt benötigt auch ein Backend-UI. Als Entwickler hat man nun die Möglichkeit, ein Interface entweder von Grund auf neu zu entwicklen - gegebenenfalls mittels Scaffolding - oder ein bestehendes CMS / spezielles (Produkt-) Informationsmanagementsystem auf die Anforderungen anzupassen. Dies ist umständlich, zeitaufwendig und / oder führt oft zu unbefriedigenden Ergebnissen. Die Open Source Pimcore Plattform basiert auf Symfony und wurde speziell dafür entwickelt, selbst komplexeste Datenstrukturen zu handhaben. Es ist einfach zu bedienen und schnell zu erweitern. Darüber hinaus enthält Pimcore umfassende CMS-, CRM-, E-Commerce- und Web2Print-Funktionen, mit denen auch leistungsstarke Frontends erstellt werden können. Dieser Einführungsvortrag gibt einen Überblick über die Funktionen der Plattform und wie man sie für eigene Projekte nutzt (Live Demo!). |
|
12:10 |
How to f*ck up your Development team with Microservices
Talk by Stephan Schulze in Track 1 (45 minutes) Microservices sind ein bekanntes Architektur Pattern. Dieser Talk zeigt anhand von realen Erfahrungen und Learnings, welche Dos and Don'ts Du bei ihrem Einsatz beachten solltest um weder Deine Teams noch Dein Projekt zu gefährden. |
The How’s and Why’s of a Clean Git History
Talk by Petr Heinz in Track 2 (45 minutes) We care about a clean and understandable history of changes as it makes our life easier. I’d like to share our best-practices with advanced git techniques, as well as explain the reasons we think it’s worth the extra effort to maintain it. What does a good commit look like? How to create a helpful commit message? For whom am I even writing the message? I’ll explain our workflow, amending commits, squashing, interactive rebasing, and creating aliases for frequently used commands and share real-world examples of how it helped us in the long run. You should be already familiar with the basics of git (commit, pull, push, merge) if you want to get the most from the talk. |
|
14:25 |
Develop Yourself - Ein Plädoyer für mehr Software Handwerkskunst
Talk by Ole Rößner in Track 1 (45 minutes) Softwareentwicklung ist mehr als stumpfes Code runter schreiben. Es vereint logisches Denken, Kreativität und handwerkliches Können. Handwerklich? Ja, unter dem Leitgedanken der Software Craftmanship Bewegung beleuchten wir den handwerklichen Teil der Softwareentwicklung, die Wichtigkeit bestimmter Tools und wie man im professionellen Umfeld regelmäßiges Training, in Form von Code Katas durchführen kann. |
Security Testing
Talk by Prof. Dr. Jan Jürjens in Track 2 (45 minutes) Sicherheit von Webanwendungen ist nach wie vor ein brennendes Thema. Angriffe werden immer komplexer und Anwendungen müssen entsprechend geschützt werden. Symfony als Framework erleichtert Entwicklern die Umsetzung von Dingen wie Authentifikation und bietet einige Sicherheitsfeatures. Nur wenn diese richtig eingesetzt werden, resultiert dies auch in eine sichere Webanwendung. |
|
15:15 |
Success of Blackfire and Continuos PHP performance monitoring at trivago
Talk by Jorge Luis Betancourt Gonzalez in Track 1 (45 minutes) At trivago, we love measuring everything. Collecting metrics and making decisions based on them is natural to our engineers. We follow this workflow also with performance, which is key to succeed in the modern Internet. In this talk, we're going to describe how we integrated Blackfire profiling into the daily workflow of QA Engineers and Software Developers alike. How our own tooling around Blackfire has helped us to keep (and improve) performance over the last year. We will discuss the benefits of enforcing backend performance budgets. Also, we will explain our entire pipeline for PHP continuous monitoring. |
Nomen est Omen - Wie man Dinge gut benennt
Talk by Anne-Julia Seitz in Track 2 (45 minutes) For us developers it is a constant struggle to find the right words to describe things. Naming classes, functions and variables correctly and giving them context helps to create a meaning, and to convey that meaning to other developers. In this talk we will discuss guidelines to find good names for the buildings blocks we use, to aid in our daily challenge to transport our knowledge by leveraging well worded sourcecode. |
|
16:30 |
Webpack Encore - Asset Management für den Rest von uns
Talk by Stefan Adolf in Track 1 (45 minutes) Wer moderne Frontend-Technologie in seinen Projekten einsetzt, kommt an Webpack nicht vorbei. Obwohl die halbe Welt diesen mächtigen Bundler zum Bauen von Assets einsetzt, kann dessen Konfiguration akademische Kenntnisse der Interna erfordern; Symfony bietet mit Encore einen schmalen Wrapper um Webpack an, mit dem Asset Building auch für mehrere Environments “einfach nur funktioniert”. Die Transpilation und das Packaging von Babel, ES6-, Typescript-, Vue- oder React-Code gelingt in weniger als 20 Zeilen Code inklusive Symfony-kompatiblen Asset Manifests. Dieser Talk demonstriert anhand einer iterativ gestalteten Demo, wie man Webpack oder Assetic mit Encore ersetzt und damit ein React-basiertes Frontend für eine Symfony-Applikation entwickelt. Er geht auch auf komplexere Anforderungen wie die Verwendung von Plugins, Sourcemaps oder Chunks ein. |
The Silex Sunset
Talk by Alexander M. Turek in Track 2 (45 minutes) Silex, the micro-framework side-project of Symfony, will reach its end of life soon. However, there are still many applications out there that have been built against Silex and that need to be maintained beyond that point. A migration to Symfony appears to be the best option, so let's have a look at how the migration path could look like. |
|
17:20 |
Using Symfony Forms with Rich Domain Models
Talk by Christian Flothmann, Christopher Hertel in Track 1 (45 minutes) Mit der steigenden Popularität von DDD setzen sich mehr und mehr Rich Domain Models mit Methoden, die den State Change explizit benennen, gegenüber anemischen Models mit simplen Gettern und Settern durch. Allerdings gibt es beim Zusammenspiel mit der Symfony Form Komponente einige Hindernisse. Unsere Domain Models sollten niemals invalid sein, was jedoch im Gegensatz zum allgemeinen User-Input steht. Ein einfacher Ansatz, um dieses Problem zu umgehen, sind sogenannte DTOs, so dass unser Form nicht mehr direkt mit unserem Model, sondern einem Zwischenlayer arbeitet. Das führt allerdings zu einem Overhead an Mapping- und Glue-Code, den wir schreiben und maintainen müssen. eht das nicht einfacher? Wir werden uns in diesem Talk mit diesen Herausforderungen auseinandersetzen, die unterschiedlichen Lösungsstrategien vergleichen und zeigen, wie wir das Problem eleganter lösen können. |
Besucherspezifische Inhalte rasend schnell mit HTTP-Caching und Sulu
Talk by Thomas Schedler in Track 2 (45 minutes) In unserer heutigen, besonders schnelllebigen Gesellschaft ist Zeit unheimlich wertvoll. Auf Inhalte warten, ist inakzeptabel und somit ist Caching von dynamischen Seiten ohne Zweifel ein Muss. Gleichzeit sollte der Inhalt auf den Besucher angepasst sein, um diesem das bestmögliche Erlebnis auf der Seite zu bieten. Ein nicht ganz einfacher Balanceakt. Wie Sulu mit Hilfe von unterschiedlichen HTTP-Caches, wie Symofny oder Varnish dies ermöglicht, werden wir uns im Detail anschauen. Vom Full-Page Cache inklusive Expiring über Tagging und ESI bis hin zu Context based Caching führt die Reise und sollte etwas Licht in eines der komplexesten Themen wie HTTP-Caching bringen. |