The next step of our touring conference, organized by our French PHP-users group, and gathering all PHP and Open Source communities, pros and PHP lovers.

Thursday 18th May 2017

08:45
0
Keynote d'ouverture
Keynote by Geoffrey Bachelet (30 minutes)

Bienvenue au PHP Tour 2017

09:15
1
My app is secure... I think
Workshop by Wim Godden (3 hour)

With more and more sites falling victim to data theft, you've probably read the list of things (not) to do to write secure code. But what else should you do to make sure your code and the rest of your web stack is secure ? In this tutorial we'll go through the basic and more advanced techniques of securing your web and database servers, securing your backend PHP code and your frontend javascript code. We'll also look at how you can build code that detects and blocks intrusion attempts and a bunch of other tips and tricks to make sure your customer data stays secure.

09:20
8
Sécurité Web : et si on continuait à tout casser ?
Talk by Alain Tiemblo (40 minutes)

Sur le même principe que lors de mon talk de l'année dernière ( https://www.youtube.com/watch?v=YRRUbsXHC80 pour les curieux ), je vais vous montrer d'autres moyens de casser des sites, dans le but que vous sachiez comment vous en protéger par la suite. Redirect attacks, URL obfuscation, Man-in-the-Middle, Password reuse, premium phone numbers, captcha cracking, insecure direct object reference.... sont sûrement des buzzwords que vous avez entendus, mais savez-vous les exploiter ?

Does the SPL still have any relevance in the Brave New World of PHP7?
Talk by Mark Baker (40 minutes)

Largely ignored under PHP5, the SPL (Standard PHP Library) offered a powerful toolbox for developers, ranging from it's horrendously named collection of Iterators, and a series of Interfaces allowing us to build our own, to DataStructures, and Object Oriented file handling classes. Fast and powerful, the SPL provided a stable and well-tested library of classes and functions But with all the performance and memory improvements of PHP7, SPL has remained unchanged, and feels like it has been left behind. Now, Generators provide a simpler replacement for writing our own Iterators without all the boilerplate code that SPL's core Iterators require, especially with the introduction of "yield from" in PHP7 for recursive Iterators. And PHP7's performance improvements allow us to write our own Datastructures (based around standard PHP arrays, or custom objects) that are as efficient as SPL's basic Datastructures. So does SPL still have any purpose or value in this new world of PHP7? Let's find out!

10:30
9
2 ans avec Pomm
Talk by Grégoire HUBERT (40 minutes)

Comment survit-on à un long développement sans utiliser Doctrine mais en s'appuyant sur Postgres avec l'OMM Pomm ? Quels problèmes a-t-on rencontré et quelles solutions cela nous a-t-il apporté ? Cette conférence se veut être un retour d'expérience du développement d'une application conséquente avec Symfony & Pomm.

Haute disponibilité native avec MySQL
Talk by Olivier DASINI (40 minutes)

« Disponibilité du service », « Redondance des données », « Tolérance aux pannes », ... ces termes vous sont familiers. Vous savez également que la base de données n'est pas le composant le plus facile à apprivoiser, lorsque l'accès aux données ne doit pas être interrompu, parce que chaque arrêt de service à un coût (sur le Revenue, la Réputation, la Perception client, ...) pour l'entreprise. MySQL InnoDB Cluster c'est : - MySQL Group Replication, le plugin de réplication virtuellement synchrone, avec résolution de conflits et basculement (failover) automatique, qui fournit la haute disponibilité de la base de données. - MySQL Router, le middleware léger et performant qui permet un routage transparent entre l’application et le cluster. - MySQL Shell, le nouveau client interactif multi-langage (JavaScript, Python et SQL) qui permet d’administrer le cluster. Ces 3 composants forment MySQL InnoDB Cluster et procurent une solution de Haute Disponibilité "out-of-the-box" complète et simple à mettre en œuvre.

11:15
2
My slack boat speaks PHP (40 minutes)

Retour d’expérience sur la mise en production, la croissance puis la monétisation de MailClark, le Slack Bot qui permet de recevoir et d’envoyer des emails et des tweets directement dans Slack. MailClark est développé en PHP sous un modèle de micro-services orchestrés par Docker et qui communiquent entre-eux via des queues et consumers RabbitMQ. Le cœur de la solution est un service gérant plus de 5000 connexions WebSocket avec Slack grâce au framework React-PHP, orienté asynchrone. Venez écouter comment nous avons géré la croissance de ce service basé en grande partie sur des technologies émergentes. Les slides : https://www.slideshare.net/GillesFELIX/my-slack-bot-speaks-php

8
Dependency Injection and Dependency Inversion in PHP
Talk by James Mallison (40 minutes)

Dependency Injection and Dependency Inversion are important tools for writing testable and reusable code. They are available in any object oriented language and PHP is no exception. In this talk we will look at both Dependency Injection and the Dependency Inversion Principle, how they fit in with SOLID, and why they should be used when writing object oriented code. How are objects wired together? What is an object graph? Is a Dependency Injection Container the right way forward? Can we do this automatically, and are there any patterns or reusable components available to help us achieve reusable and decoupled code? These are some of the topics covered in this talk from both a theoretical and a practical standpoint. Walking out of the room you should understand why dependency injection is so heavily advocated in programming and how you can use it to write awesome, decoupled code in PHP.

12:00 Comment marier Symfony et ReactJS ?
Talk by Claire Coloma, Suzanne Favot (20 minutes)

ReactJS et Symfony proviennent de deux mondes différents. D’un côté le back, de l’autre le front. Il sont le résultat de deux philosophies, deux courants de pensée, opposés dans l’esprit de beaucoup de développeurs. Celui qui est plébiscité par les uns est donc parfois incompris par les autres. Pourtant, leur réunion peut donner naissance à des applications extrêmement puissantes, alliant la robustesse de Symfony à la flexibilité de ReactJS. Le chemin vers cette union n’est cependant pas exempt d’obstacles et nécessitera l’aide de complices : celle d’alliés puissants tels que Twig et v8js, mais surtout celle de développeurs tels que vous. Dans cette conférence, nous vous donnerons les clés pour intégrer ces deux technos et tirer le meilleur parti de leurs avantages respectifs.

Une API GraphQL: du hype à la prod
Talk by Aurélien David (20 minutes)

Point de débat REST vs GraphQL dans cette conférence, mais du concret ! De plus en plus utilisé par des géants du Web comme Facebook, GitHub, Pinterest, ou encore Shopify, GraphQL a attiré ma curiosité, jusqu’à ce que je me décide à l’utiliser en production. Cette conférence détaille les différentes problématiques rencontrées suite à sa mise en place, comme la description de ce qu'il est possible d'obtenir (on parle de schéma). Mais aussi le nouveau paradigme des requêtes qui implique que le client demande ce qu'il veut, et enfin comment conserver de bonnes performances au sein d’une même requête et comment gérer le cache entre les requêtes.

14:00
8
Thread Safety en PHP (ZTS)
Talk by Julien Pauli (40 minutes)

On entend parfois parler de threads avec PHP, et du mode "Thread safe" de PHP. Mais, c'est quoi au juste ? Nous allons commencer par rappeler l'histoire de l'informatique et l'appartition des threads, tout en tâchant de les définir au passage. Nous nous focaliserons ensuite sur l'intéressant cas de PHP , en le comparant avec d'autres technos comme Java. C'est quoi "PHP thread safe". Peut-on utiliser des threads avec PHP ? Comment ? Quel interet ? Quels dangers ? A quoi sert le mode Zend Thread Safe (ZTS) de PHP ? Tâchons de demystifier ce vaste mais passionnant sujet ensemble.

4
A beginner's guide to deployments
Talk by Michael Heap (40 minutes)

Deploying an application means different things to different people. It may be as simple as running `git pull` on a server, or as complex as building RPMs and deploying to a canary set of servers. This talk covers both ends of the spectrum and the points in between. We outline a tried and tested deployment methodology that everyone can use, whether it’s a simple WordPress site or a dozen micro-services. ---- Additional Notes (for organisers only) Application deployment is a complex and overcrowded area. You can use an FTP client or you can build custom RPMs for every service you use. The sweet spot is actually somewhere in between. This talk will cover code deployments as well as database and media migration, whilst touching on continuous integration as a way to reduce the risk of big bang deployments.

0
Find Bugs in Your Code With PHPStan
Workshop by Ondrej Mirtès (3 hour)

Running static analysis on your codebase can discover a lot of bugs and documentation issues. It can find errors like calling an undefined method, unknown classes in typehints, whether a method returns the same type it declares to return etc. It also reduces the need for unit testing the wiring of your code so you can focus on business logic. I set out to create a static analysis tool that is fast, extensible and user-friendly. It's called PHPStan and I'd love to tell what it can do for you. In this workshop, I'll show you various features and performed checks of PHPStan, how to configure it properly and get the most out of it. Bring your own code and I'll help you to integrate PHPStan into your workflow.

14:45 Make your code great again with the Object Calisthenics
Talk by Maxence POUTORD (40 minutes)

Et si vous utilisiez les Objects Calisthenics pour muscler votre code ? Que sont ces règles ? Pourquoi et comment les appliquer ? La promesse initiale d'améliorer la lisibilité, la maintenabilité et la testabilité de son code est-elle vraiment respectée ? Et surtout, est-ce que c'est applicables à notre merveilleux monde du PHP ? Promis, aucun effort physique ne vous sera demandé.

PHP : The wrong way
Talk by Benjamin 'Ternel' Clay, Loick Piera (40 minutes)

En quelques années, nous avons eu Composer, Symfony et ses composants, phpunit et behat, php-cs-fixer ou encore phan... Bref, aujourd'hui, il est presque devenu impossible de produire du mauvais PHP. Mais impossible n'est pas français, et nous nous amuserons donc à faire le code le plus sale possible avec ce magnifique langage, et pourquoi pas trouver les meilleures façons de le faire violemment crasher ?

15:30 Code review beyond code style (20 minutes)

Reviewing code can feel like a secondary task. Discussing code can be easy though, if you leave out syntax details. Following a couple of guide lines for pull requests can make code reviewing much easier. Some code style rules can drastically reduce the mental overhead needed to understand code changes. Furthermore this talk will give some general guidelines on how to give feedback on PRs as a peer developer or coworker. These rules are not to keep for yourself, share them with your peers and your life will get easier.

3
Des applis PHP 15 fois plus rapides !
Talk by Serge Hardy, Fabien Paitry (20 minutes)

C’est en tous cas la promesse de PHP PM, une librairie PHP qui se propose de troquer l’un des paradigmes fondateurs de PHP, le “share nothing” contre une amélioration significative des performances. Afin de vérifier cette assertion, nous ferons un tour d’horizon des fonctionnalités proposées par la librairie et nous mettrons en évidence les avantages et inconvénients de ce type d’architecture.

16:20 Tagua VM, a safe PHP virtual machine
Talk by Ivan Enderlin (40 minutes)

PHP est un langage extrêment populaire. En 2015, PHP était utilisé par plus de 80% de tous les sites Web. Cependant, 500 vulnérabilités sévères sont répertoriées. Bien qu'inhérent à tous langages populaires, cela reste très dangereux. L'objectif du projet Tagua VM est de fournir une VM PHP qui garantie un haut niveau de sûreté et de qualité en supprimant des larges classes de vulnérabilités, grâce à des outils appropriés comme Rust et LLVM. Rust est un langage remarquable qui apporte des garanties fortes à propos de la sûreté de la mémoire. C'est aussi un langage très rapide qui rivalise avec C. LLVM est une infrastructure de compilateur célèbre qui apporte de la modernité, des algorithmes à la pointe, des performances, une suite d'outils pour développeur etc. Ce projet va résoudre trois problèmes en une fois : 1. Fournir un niveau haut niveau de sûreté et de qualité en supprimant des larges classes de vulnérabilité, et ainsi éviter des coûts de bugs dramatiques ; 2. Fournir de la modernité, une nouvelle expérience développeur et des algorithmes à la pointe de la recherche, donc des performances ; 3. Fournir un ensemble de bibliothèques qui vont composer la VM et qui pourront être réutiliser en dehors du projet (comme le parseur, les analyseurs, les extensions etc.). Durant cette conférence, nous présenterons les objectifs de ce projet, ainsi que son avancement. Nous expliquerons pourquoi il est crucial et pourquoi il reçoit le soutient d'une communauté grandissante et de développeurs notables (avec un rôle important dans le développement de PHP).

7
De la qualité de PHP
Talk by Remi Collet (40 minutes)

Après un rappel sur les versions maintenues de PHP regardons le cycle de vie des versions, avec les différents niveaux de maintenance (active ou sécurité). Regardons aussi le traitement des problèmes de sécurité qui vient d'être récemment modifié. Chaque version "Release Candidate" doit être soumise à des tests approfondis (QA) pour s'assurer que la version finale n'introduit pas de régression, pour cela, la suite de tests de PHP n'est pas suffisante, au contraire il est nécessaire de vérifier le fonctionnement de l'ensemble de la pile PHP, c'est à dire d'un maximum de composants utilisant PHP (bibliothèque, cadre logiciel, application...). Membre de la "QA team" depuis plusieurs années, il s'agit aussi d'un retour d'expérience sur les tests réalisés, quelques régressions découvertes, leur gestion. L'occasion de mettre en lumière la collaboration entre les projets, en amont (développeurs) et en aval (utilisateurs et distributeurs).

17:05
10
Opcode ? Mais à quoi ça sert ?
Talk by Benoit Jacquemont (40 minutes)

En tant que développeur PHP, nous avons certainement tous entendu parler de l'opcode, cette sauce magique qui tourne au sein du moteur PHP qui permet de booster les performances. Mais qu'est-ce que c'est exactement cet opcode ? Pourquoi rend-il l'exécution plus rapide ? Est-ce que ça ne sert qu'à la performance ? Et le cache d'opcode dans tout ça ? Le but de cette conférence est de démystifier ce qui se passe au sein du moteur Zend, de comprendre ce que devient notre code lorsqu'il est digéré par l'interpréteur et transformé en opcode avant d'être exécuté sur la machine virtuelle.

The Big "Why equal doesn't equal" Quiz
Talk by Juliette Reinders Folmer (40 minutes)

So you think you know PHP ? But do you really ? We all compare and test data on nearly every other line in our code, be it input validation, an if-statement, a switch or determining what to display and how. So of course we are all experts on how to do these tests and comparisons…. Or are we? No matter whether you are a beginner or an expert, come and join in the fun for the Big “Why equal doesn’t equal” Quiz, test your knowledge and learn about defensive programming and the quirks of a loose type programming language along the way.

Friday 19th May 2017

08:30
3
Dev rencontre Ops, 1 an après
Talk by Aurore Malherbes, Pauline Bourjot (40 minutes)

Infrastructure AWS hautement résiliante, architecture blue-green, déploiements entièrement automatisés, application Symfony découplée en microservices gérés par un API Manager... Nous avions tous les outils pour former une équipe Devops performante. Pourtant il nous manquait un ingrédient essentiel: la pratique, qui nous a permis d'améliorer significativement la manière dont nous collaborons ! C'est pourquoi, nous, Pauline, ops, et Aurore, dev, souhaitons revenir avec vous sur un an de projet qui a abouti au lancement d'une nouvelle plateforme web d'un leader industriel mondial. Grâce à des exemples concrets, vous découvrirez nos bonnes idées, aussi bien techniques qu'organisationnelles, mais aussi les erreurs que nous avons commises et comment nous les avons corrigées afin que vous puissiez les éviter.

Application profiling using XDebug, XHprof, Blackfire
Talk by Dmytro Naumenko (40 minutes)

It's obvious, that a good application must be fast. Fast execution saves clients' time, server resources and, as a result - company's budget. We will dive into PHP profiling world and will learn, how to profile your app using the Xdebug, XHprof and Blackfire. We will learn how to configure these tools, collect and analyze profiles, search and fix "bottlenecks" in code and evaluate optimization results. We will discuss popular mistakes that lead to lower performance and learn how to avoid them. Plus we'll discuss how to support the application performance during development even without profiler on Yii 2 example.

09:00
2
[ATELIER] Des Lego, des bonnes pratiques et du fun !
Workshop by Eve Vinclair, Cécile Espécel (3 hour)

Expliquer les bonnes pratiques de code est compliqué. La compréhension étant une des clés pour changer l'état d'esprit, et les bonnes pratiques techniques un pré-requis pour créer du code de qualité, il est important de les expliquer. Nous vous proposons d'utiliser les Lego pour comprendre les mécanismes et les intérêts : de la simplicité, du TDD, de la refactorisation, de l'intégration continue, du code "propre". (d'après un atelier original de Mike Bowler et Bryan Beecham) Chaque jeu dure entre 20 et 45mn. En début de session les participants choisiront les jeux auxquels ils souhaitent participer. Cet atelier s'adresse aux dev débutants/managers/RH/PO/clients qui souhaite comprendre à quel point les développeurs et leur manière de coder est une des pierres angulaires de l'agilité. Et surtout comment prendre conscience que du bon code c'est du temps, de la réflexion et du travail d'équipe.

09:15
2
Asynchronous processing with RabbitMQ
Talk by Ondřej Mirtes (40 minutes)

Developers of modern web applications strive for fast response times and efficiency. One of the ways to achieve them is to postpone performing costly and potentially failing operations like sending an e-mail after the HTTP request is complete and the user has seen that his intended action has been successful. This is called asynchronous task processing. In the past it was usually achieved with periodically executed scripts by Cron. This solution requires inserting data about tasks into a persistent storage like a relational database and lock the data to prevent duplicate execution. Tasks are not performed instantly but within the next run of a script. It's also not easy to scale task processing to multiple executors at the same time. This approach became popular because of limited capabilities of shared webhosts. But in the last years it has been more and more difficult to make excuses for preferring Cron over alternative approaches thanks to decreasing prices of VPSes. Message queues do not share the problems of Cron-executed scripts - they offer instant task processing and easy scalability. But at the same time this concept can be more difficult to grasp and creates new troubles in different areas - mainly deployment and integration into existing codebases. In this talk, I will dive into specifics, advantages and disadvantages of developing a web application with the help of RabbitMQ or a similar technology, and share everything we had to do to be able to produce and consume hundreds of thousands messages a day within a large legacy PHP codebase of an application that serves >200k daily visitors.

Code moi une RH !
Talk by Arnaud Langlade (40 minutes)

Est-ce que nous allons parler de gestion des ressources humaines au PHP tour ? Non, je vous vais vous parler des modèles anémiques et des modèles riches. Depuis des années frameworks et ORM nous conditionnent à utiliser des modèles anémiques, une classe avec de simples setters et getters. A travers l’histoire d’Estelle, une RH, qui veut une application pour gérer ses salariés, je vais vous montrer comment changer nos vieilles habitudes afin de nous focaliser sur le métier que nous implémentons. Nous verrons ensemble quels outils utiliser, comme par exemple, le design pattern command bus, l’opérateur NEW de doctrine pour vos Data Transfert Object dans une application Symfony.

10:30
2
Monitoring applications - evolve from text logs to extensive automatic monitoring
Talk by Sven Finke (40 minutes)

Bugs, corrupt data or performance issues on web applications are often recognized far too late. In the worst case they are reported by the customer, so they probably have already done some serious damage - frustrated the user, made them lose trust or even corrupted their data. Finding these bugs or recognizing them early gets especially hard, if your application makes heavy use of background processes, daemons or cronjobs. They might even throw exceptions that are buried somewhere in the logs, and no one will ever be aware of them, until someone has a look into the log files. I want to show a way out of this misery and provide different solutions in form of practical examples. These will include different levels of monitoring - from simple text logs on the servers up to a fully monitored application including hardware monitoring, extensive metrics, indexed and searchable logs of the whole environment, performance analysis and alerts if something odd happens. I'll show different examples and give ideas when such a fully monitored solution is a good idea, or when a "light monitoring" is applicable.

REX API Platform
Talk by Olivier Dolbeau (40 minutes)

API Platform, vous connaissez ? Si on en croit la documentation, il s'agit du framework ultime pour construire des APIs web modernes. Je vous propose de découvrir ce qui se cache réellement derrière ce titre un peu pompeux. :) Suite à l'utilisation de ce framework pour construire une API web, je vous expliquerais ce que ce framework m'a apporté ainsi que les différents problèmes que j'ai rencontrés lors de sa mise en place.

11:15 L'analyse statique ? Oui oui je connais. Mais j'y comprends rien !
Talk by Jean-françois Lépine (40 minutes)

L'analyse statique est économique, facile à mettre en oeuvre. Mais elle a un énorme inconvénient : comme on ne comprend pas grand choses aux chiffres, on parle plus souvent de comment marchent les outils plutôt que de comment tirer profit des informations qu'ils nous livrent. Cette conférence est l'occasion de rentrer en profondeur dans les méandres de l'analyse statique. Comment analyser un code source ? Comment comprendre les impacts de telle ou telle métrique sur la vie d'un projet ? Comment peut-elle avoir un impact sur mon code au quotidien ? Comment sont calculées les métriques et comment les interpréter ? Bienvenue dans l'univers de l'analyse statique !

Learning About Machine Learning
Talk by Joel Lord (40 minutes)

From chatbots to your home thermostat, it seems like machine learning algorithms are everywhere nowadays. How about understanding how this works now? In this talk, you will learn about the basics of machine learning through various basic examples, without the need for a PhD or deep knowledge of assembly. At the end of this talk, you will know what the Naive Bayes classifiers, sentiment analysis and basic genetic algorithms are and how they work. You will also see how to create your own implementations in PHP.

12:00
0
Map, filter, reduce : aidons-les, ils nous aideront
Talk by Olivier Pérès (20 minutes)

Les fonctions array_map, array_filter et array_reduce sont disponibles depuis longtemps en PHP. Pourtant, mesure-t-on vraiment l’intérêt de cette façon de programmer par rapport aux bonnes vieilles boucles qui marchent très bien ? Pourquoi la trouve-t-on associée à Google, Apache Hadoop, ou encore Java 8 ? Je vous propose d’abord de voir que cette approche donne du code clair, focalisé sur la description de l’algorithme plutôt que sur l’implémentation, et qu’elle se combine très bien avec les notions de curryfication et de composition, également issues de la programmation fonctionnelle. Ce sera l’occasion de constater que si PHP7 a facilité l’usage de ces deux concepts, il lui reste encore une marge de progression. Enfin, la démonstration d’une implémentation parallèle 100% PHP de map, filter et reduce, exploitant un processeur multicœur, illustrera le gain de performances que l’on peut en attendre.

2
Synchroniser ses applis simplement avec akeneo/batch
Talk by Grégory Planchat (20 minutes)

On utilise des outils de plus en plus complexes et de plus en plus hétérogènes : Full-stack Symfony, Laravel, Zend, Doctrine, Propel, Magento, Wordpress, Drupal, etc... Et si en plus je pouvais réutiliser mes modèles, mes sérialiseurs, mes clients d'API ? Je simplifierais mon appli et je gagnerais sûrement du temps ! Je vais vous présenter le composant akeneo/batch, un portage léger du composant Batch de Spring en PHP. Il s'intègre en quelques lignes dans vos outils et permet de découper en étapes simples des processus complexes.

14:00 PSRs: quoi, pourquoi et comment ?
Talk by Julien Janvier (40 minutes)

Bien que prenant de plus en plus d'importance dans notre écosystème, les PHP Standards Recommendations restent trop méconnues et quelque peu mystiques pour bon nombre d'entre nous. Dans ce talk, je vous propose de comprendre ce qu'est une PSR puis de parcourir brièvement l'ensemble des recommandations existantes, qu'elles soient validées, acceptées ou en cours d'écriture. Nous reviendrons également sur l'importance et le but de ces standards ainsi que sur leur processus d'élaboration.

0
[ATELIER] CQRS et Event Sourcing, les mains dans le camboui !
Workshop by Pierre Martin (3 hour)

Cet atelier a pour but de présenter concrètement le concept de CQRS et Event Sourcing en faisant développer les participant(e)s sur un petit projet prévu à cet effet. Par un exercice préparé exprès pour l'occasion nous illustrerons les différents points clés d'une architecture Event Sourcée : * utilisation de commandes (création d'après interactions externes) afin d'injecter des actions métiers dans l'application * création de CommandHandlers (et explication rapide des Aggrégats) pour conversion en évènements après validations métier * stockage et publication d'évènements * création (et modification de projections) Les participant(e)s pourront juger de l'intérêt de décorréler le code métier du code des frameworks / librairies au sein de leurs applications, tout en montrant les facilités d'évolutions amenées par l'Event Sourcing. À l'issue de l'atelier, le sujet de l'atelier pourra servir de base à l'apprentissage du concept pour ceux/celles que cela aura vraiment intéréssé.

Year with event sourcing and CQRS
Talk by Miro Svrtan (40 minutes)

For the last few years, PHP community has been buzzing about ES/CQRS, pretty much there was a talk on every conference. Now it's time to see how it worked out for me in practice. ES/CQRS is a different approach to building applications from what we all have been thought to do for years. I'm not going to introduce Event Sourcing and Command Query Responsibility Segregation (ES & CQRS) but speak about my experiences in developing & running it on production. I have implemented it on few projects: in some I run it as a part of bigger application, while in some it's just the core and one where everything is event driven. The shift in architecture and mindset is pretty big: while code structures and logic became simple, amount of code and workflows get complicated to the point of 'where did I loose this input?'. Not to go into too many details, I've had to learn lot of DDD practices that I feel have made me a better developer and use some of the knowledge gathered in this projects into 'everyday' code of projects that I work on.

14:45
2
phpSpec: Les tests unitaires version BDD
Talk by Antoine Lelaisant, Pierre Plazanet (40 minutes)

phpUnit est très généralisé. Voilà l'occassion de découvrir une alternative: PhpSpec ! Ne pensez plus test unitaire, pensez Specifications ! Vous verrez que cet outil permet de mieux découpler votre code et qu'il permet de rédiger des tests parfois plus "unitaire" que certains tests via PHPUnit. Chez KNP, nous utilisons uniquement PhpSpec depuis plusieurs années et nous sommes toujours aussi confiants dans nos tests !

JWT - To authentication & beyond!
Talk by Luis Cobucci (40 minutes)

Tokens are widely used to identify resources and try to add some security to insecure environments, but sometimes the management of those identifiers can get a bit complex - even more on distributed systems. What if we could have an intelligent token, one that simplifies the way things works without losing integrity or security? In this talk we present Json Web Tokens as an alternative for smart and self contained tokens, explaining how to use each claim and giving some common use cases.

15:30
0
PHP Doc Vs PHP 7 Strict Typing
Talk by Danielle KAYUMBI BONKOTO (20 minutes)

Au cours de mes dernières expériences professionnelles, dans l'équipe de développement nous avons eu plusieurs discussions à propos d'une convention à adopter pour la PHP Doc dans nos codes, surtout avec le type hinting enrichi par PHP 7 (types scalaires des variables et type de retour autorisé). Certains pensent que le type hinting de PHP7 suffit amplement, d'autres pensent qu'il faut le mixer avec la php doc, d'autres pensent que selon les cas, la php doc peut être utilisée en complément. Un draft sur la documentation dans la psr 5 est en cours d'écriture mais n'impose pas un standard. Quelle conclusions faut il en tirer ? quelles solutions sont adaptées ? Une présentation de l'étude permettra aux développeurs de mieux documenter leurs codes et de comprendre certaines spécificités.

Retour sur les panama papers et les bases de données graphe (20 minutes)

Au printemps 2016, le premier article de presse sur les "Panama papers" a été publié. Il s'agit de la plus grande 'fuites' de l'histoire avec plus de 3T de données brutes. Cette conférence vous détaillera les technologies que l'ICIJ (International Consortium Of Investigate Journalists) a utilisé pour fournir aux journalistes une interface simple pour leur recherche. Via une démonstration sur les données des panama papers, je vous présenterai notamment le coeur du système, à savoir la base de données graph Neo4j avec son moteur de requête Cypher.

16:20 The ultimate microservice stack (40 minutes)

L'architecture de nos applications a beaucoup évolué ces derniers temps : nous sommes passés des monolithes à des architectures orientées services où chacun de ces services joue un rôle très spécifique et expose une API. D'autre part, le mode de livraison de nos applications a radicalement changé : aujourd'hui nous voulons livrer un MVP rapidement et itérer sur cette base. Les frameworks full-stack ne sont pas forcément adaptés car ils obligent à mettre en place une certaine quantité de choses avant de fonctionner. En PHP, nous avons donc des frameworks permettant de produire rapidement des applications monolithiques mais également beaucoup d'autres petites libraires ou micro-frameworks permettant de créer de petits services rapidement. Je vous propose donc aujourd'hui une présentation sur une pile technique très intéressante pour construire des micro-services et des MVPs rapidement tout en utilisant les bonnes pratiques connues (tests, injection de dépendances, ...). Cette pile s'appuie sur des librairies PHP, des recommandations (PSR) et outils permettant d'être productif du début du développement jusqu'à la mise en production.

Grâce aux tags de Varnish, j'ai switché ma prod sur un Raspberry Pi (40 minutes)

Le moyen le plus rapide d'obtenir une réponse d'un Backend est de ne pas l'appeler ;-) Une solution fournie par les "reverse proxy" me direz vous, mais pas si simple d'invalider le cache... Ce talk aborde une fonctionnalité méconnue de Varnish: les tags. Nous verrons comment en tirer partie via les "event listeners" d'une application Symfony standard. Au menu, un cluster de Rasberry Pi, une API, et des données toujours fraîches sous la milliseconde.

17:00
1
Keynote de clôture
Talk by Geoffrey Bachelet (30 minutes)

Rendez-vous au Forum PHP, 26-27 octobre