[:fr]La parole est aux speakers : Arnaud Lemaire[:]

[:fr]Jusqu’au PHP Tour Montpellier 2018, retrouvez nos interviews de speakers pour mieux comprendre leur parcours et le sujet qu’ils aborderont lors de leur conférence !

La conférence

CQRS, Fonctionnel, Event Sourcing & Domain Driven Design

Avec autant de buzzwords dans le titre, explicitons le menu 😕 – Nous commencerons avec une étude des principes du CQRS et la notion de projection pour construire les modèles de données dédiées à la lecture, le tout avec un datastore traditionnel (relationnel). ? – Nous continuerons avec le concept d’état en programmation fonctionnelle, et comment les gérer au sein d’une application tout en respectant le principe d’immutabilité. Et comment ils ont transformé la gestion d’états pour la construction d’interface utilisateur. ? – Dans un troisième temps, nous nous intéresserons aux évènements du domaine-métier dans le Domain Driven Design et comment ceux-ci s’intègrent dans la mécanique de construction des projections. ?– Enfin, nous assemblerons toutes ces notions pour faire apparaitre l’«?event sourcing?» comme modèle de persistance pour nos données. ? – Pour clôturer, nous verrons les erreurs les plus courantes rencontrées lors de l’implémentation d’un modèle en event sourcing. Take away: ?– Utiliser CQRS (sans event-sourcing) pour simplifier la gestion de la persistance dans son application. ?– Comprendre comment gérer des états dans un contexte fonctionnel ? – Gérer facilement les évènements-métier au sein d’une architecture DDD. ?– Savoir comment implémenter correctement un système basé sur l’event sourcing.

Salle Jarvis
17/05/2018
16:25-17:05

Tu vas nous parler de DDD et d’Event Sourcing : as-tu eu l’occasion de voir de nombreux projets utilisant ces principes ?

L’approche du Domain Driven Design, comme principe pour la construction d’un logiciel, est devenue, pour moi, un prérequis pour le succès d’un projet logiciel. Le fait d’architecturer le logiciel, à partir du métier qu’il représente, est en effet le meilleur moyen d’éviter que ce dernier ne soit déphasé par rapport à celui-ci. C’est donc une pratique qui est maintenant intégrée dans mon quotidien de développeur.

A contrario, l’application des patterns techniques, comme l’Event Sourcing, est soumis aux contraintes du projet. Il s’agit d’outils qui permettent de bénéficier d’importants avantages, sur certains types de projets. Ces derniers ne doivent, toutefois, pas être appliqués aveuglément (comme n’importe quels autres patterns, d’ailleurs).

Travaillant à la fois en tant que développeur sur des applications pour le compte de clients tiers, mais aussi en accompagnement technique auprès de différentes équipes, j’ai la chance de pouvoir évoluer sur des projets diversifiés en termes de langages, d’industrie ou de taille. Autant de contextes qui m’ont permis de bénéficier d’une expérience éclectique sur la mise en place de ces principes.

(suite…)

[:fr]La parole est aux speakers : Kevin Dunglas[:]

[:fr]Jusqu’au PHP Tour Montpellier 2018, retrouvez nos interviews de speakers pour mieux comprendre leur parcours et le sujet qu’ils aborderont lors de leur conférence !

La conférence

Maîtriser le composant Serializer de Symfony

Le composant Serializer de Symfony existe depuis la première version de Symfony 2, mais a gagné énormément de fonctionnalités au fil du temps. Au cours de ce talk, je présenterai les fonctionnalités méconnues et pourtant très puissantes de cette bibliothèque. Après un rappel des fondamentaux, nous découvrirons comment le composant permet - de manière transparente - de manipuler tous types d'objets PHP, quelques soient leurs styles : getters / setters, propriétés publiques, proxys.... Nous verrons ensuite les différents formats supportés nativement : JSON, XML, YAML et CSV. Puis nous manipulerons des dates, et évoquerons l'upload de fichiers avec le support des "data: URI". Finalement, nous aborderons quelques cas plus complexes tels que choisir les propriétés à sérialiser / désérialiser grâce aux groupes, gérer les références circulaires, sérialiser des arbres en limitant leur profondeur et mettre à jour des objets déjà existants.

Salle Jarvis
17/05/2018
15:15-15:55

Pourrais-tu nous présenter des cas d’usage du composant serializer ?

Le serializer Symfony permet de transformer n’importe quelle structure de données interne au langage de programmation PHP (objet, tableau associatif…) en un format générique intelligible par d’autres langages ou systèmes (tels que le SGBD). Le composant de Symfony supporte nativement les formats JSON, XML, YAML, CSV mais aussi les « data: » URI.

Il est également capable d’effectuer l’opération inverse, à savoir transformer l’un de ces formats génériques en structure de données PHP (désérialisation). Contrairement à json_decode, qui ne sait créer qu’un tableau associatif ou un object stdClass à partir des données formatées passées en entrée, le composant Symfony est assez intelligent pour recréer les types appropriés (les instances des bonnes classes).

De plus, ce composant est très facile à étendre, par exemple le framework API Platform (que je développe) propose, grâce au composant Serializer, le support de formats d’API hypermédias tels que JSON-LD, JSONAPI et HAL.

En bref, le serializer est très pratique pour créer des API web, mais il peut servir dans tous les cas ou l’on doit manipuler des données pour les faire transiter d’un système à un autre.
Par exemple, j’ai réalisé à l’aide du serializer Symfony un petit outil open source nommé Doctrine JSON ODM.

Cette bibliothèque tire parti des colonnes de type JSON que supportent les SGBDR modernes tels que Postgres 9.4+ et MySQL 5.7.8+ : elle serialize automatiquement en JSON enrichi n’importe quel structure de données PHP avant de la stocker dans la colonne JSON. Quand les données sont récupérées, la bibliothèque va effectuer l’opération inverse, à savoir transformer le JSON enrichi en objets typés PHP.

Ainsi, il devient possible stocker des données très dynamiques dans un SGBD classique, en tirant parti des capacités de type NoSQL des moteurs seulement là où c’est nécessaire. Mieux, il est également possible de requêter le contenu du document lui même, et même de poser des index en son sein.

Grâce au Serializer Symfony, cette opération est complètement transparente pour l’utilisateur final si il utilise déjà l’ORM Doctrine.

(suite…)

[:fr]La parole est aux speakers : Joel Wurtz[:]

[:fr]Jusqu’au PHP Tour Montpellier 2018, retrouvez nos interviews de speakers pour mieux comprendre leur parcours et le sujet qu’ils aborderont lors de leur conférence !

La conférence

100% Asynchrone - 0% Callback en PHP

PHP et Asynchrone n'ont jamais fais bon ménage. Pourtant depuis plusieurs années de nombreuses librairies s'y sont essayé mais leurs API ont toujours été rempli de callbacks et la complexité associée. Nous verrons comment nous affranchir des callback et transformer nos scripts en asynchrone pour obtenir des meilleurs performances.

Salle Morpheus
17/05/2018
14:30-15:10

Tu vas nous parler d’asynchrone. As-tu un retour sur des projets tels que ReactPHP ?

Oui, plein ! Il faut savoir que dans la tête de beaucoup de personnes PHP n’a jamais été fait pour de l’asynchrone, ce qui est totalement faux. En effet ce n’est pas du tout un problème de language (même si il peut aider), mais beaucoup plus un problème de librairies. Il y a encore quelques années, ReactPHP était inexistant et il y avait très peu de librairies sur l’asynchrone. Mais ce temps est révolu, ReactPHP est proche d’une version stable et de nombreux autres projets existent tel que Amphp (dont je parlerai). Les choses commencent même à bouger du coté de PHP pour aider tout ce petit monde, mais pour en savoir plus il faudra venir à ma conférence.

(suite…)

[:fr]La parole est aux speakers : Quentin Pautrat[:]

[:fr]Jusqu’au PHP Tour Montpellier 2018, retrouvez nos interviews de speakers pour mieux comprendre leur parcours et le sujet qu’ils aborderont lors de leur conférence !

La conférence

Un autre regard sur la validation

"Persister les données c'est bien, persister les bonnes données c'est mieux". Derrière cet adage se cache, entre autres, la validation, une facette bien connue des développeurs et développeuses. Tellement connue qu'elle en est devenue triviale. À travers les différents frameworks et leurs documentations, nous avons banalisé cet aspect du développement. Il arrive que ces outils ne soient pas toujours adaptés et nous orientent dans de mauvaises directions. Cependant il est de notre responsabilité de voir plus loin et de se poser les bonnes questions.

Salle Morpheus
17/05/2018
16:25-17:05

La génération de formulaires est souvent l’un des composants les plus difficiles à aborder dans un framework. Aurais-tu des conseils pour en apprendre leur usage ?

En réalité, je pense que c’est assez simple. Il semble compliqué parce qu’il permet de faire beaucoup de choses.
Alors qu’en fait il suffit de garder en tête que le formulaire à une responsabilité bien précise. Son rôle est de permettre à l’utilisateur de saisir des informations et de le tenir informé des éventuelles erreurs de saisies. Rien d’autre. Si on limite l’impact du formulaire à la seule couche de présentation, tout devient normalement plus facile. Sans trop en dévoiler, une bonne idée est par exemple de ne pas utiliser ses entités métier directement dans ses formulaires. Si vous voulez en savoir plus j’en parle dans ma présentation.
Bien entendu il est toujours possible de tomber sur des formulaires complexes. Dans ces cas là, il n’y a pas de secret, il faut apprendre et tester… ou bien de déléguer la génération au client. Bon courage !
(suite…)

[:fr]La parole est aux speakers : Julien Vinber[:]

[:fr]Jusqu’au PHP Tour Montpellier 2018, retrouvez nos interviews de speakers pour mieux comprendre leur parcours et le sujet qu’ils aborderont lors de leur conférence !

La conférence

Un peu d'événement dans un monde linéaire.

Bien connu dans d'autres langues, l'utilisation d'événement peut apporter énormément dans la conception d'application en PHP. Que ce soit des événements synchrone pour améliorer la solidité de notre code ou asynchrone pour ne pas perdre en performance et dépasser certaine limitation que l'on peut avoir avec le langage. Après une présentation des avantages et des principes, nous verrons comment concrètement les mettre en places dans notre code, que ce soit directement ou en utilisant un Framworks. Nous aborderons également rapidement l'utilisation de serveur de message comme RabbitMQ pour mettre en places des événements asynchrones.

Salle Jarvis
18/05/2018
11:25-12:05

Qu’est-ce qui t’a donné envie de parler de la programmation évènementielle ?

J’ai choisi de mettre en avant les événements car j’ai pris l’habitude de les utiliser dans d’autres langages. Et même s’il existe de nombreuses solutions pour en faire en PHP, c’est rarement un réflexe d’y penser.
Cela peut s’expliquer en regardant l’histoire du langage. Mais je trouve cela dommage, d’autant plus que bien utilisé cela peut devenir un outil très puissant, en particulier pour gérer les « Single responsibility ».
(suite…)

[:fr]La parole est aux speakers : Edouard Cunibil[:]

[:fr]Jusqu’au PHP Tour Montpellier 2018, retrouvez nos interviews de speakers pour mieux comprendre leur parcours et le sujet qu’ils aborderont lors de leur conférence !

La conférence

Réussir en tant que communauté

"Come for the code, stay for the community". Avec plus d'1 million de membres, il faut croire que Drupal mérite son slogan. Le but de cette conférence est de souligner les multiples facettes de cette communauté et de mettre en valeur les décisions et initiatives qui expliquent sa croissance encore aujourd'hui. Il sera question de valorisation du travail, de protection des personnes, d'inclusion des minorités.

Salle Morpheus
18/05/2018
12:10-12:30

Comment es-tu rentré dans la communauté Drupal ?

Initialement, je cherchais quelques conseils pour l’un de mes tous premiers sites et le formateur qui m’avait lancé avait abordé l’existence d’un salon IRC. En souvenir de mes jeunes années de lycéen geek, j’y suis allé faire un saut et j’ai trouvé ce dont j’avais besoin là bas. Ayant moi-même pas mal œuvré à la grande époque du Site du Zéro pour aider les personnes à progresser dans le développement web, je me suis un peu retrouvé dans ce salon super accueillant et j’ai commencé à aider les gens à mon tour quand je le pouvais, au fil de ma propre montée en compétence. De fil en aiguille, je me suis retrouvé à filer un coup de main sur l’organisation du Drupalcamp Paris 2013 où j’ai physiquement rencontré la plupart de ceux qui étaient devenus des collègues de travail virtuels. C’est à partir de là que j’ai commencé à contribuer plus, ce qui m’a valu la chance de bénéficier quelques temps plus tard d’un scholarship pour aller rendre visite à nos amis Drupaliens de San Francisco au BADCamp, un événement d’une toute autre mesure avec plusieurs milliers de personnes. D’un naturel très timide, j’étais très angoissé à l’idée d’aller là bas, en n’ayant pas vraiment parlé anglais depuis très longtemps et sans connaître personne mais ça a finalement été une des expériences les plus incroyables de ma vie. Quelques personnes ont reconnu mon pseudo et ont décidé de me prendre sous leur aile et j’ai pu rencontrer une quantité énorme de gens incroyablement ouverts et bienveillants.

(suite…)

[:fr]La parole est aux speakers : Nicolas Grekas[:]

[:fr]Jusqu’au PHP Tour Montpellier 2018, retrouvez nos interviews de speakers pour mieux comprendre leur parcours et le sujet qu’ils aborderont lors de leur conférence !

La conférence

Tirer le maximum du moteur PHP 7 - l'exemple de Symfony

PHP 7.0 est déjà de l'histoire ancienne. Mais savez-vous en tirer partie à fond ? Si le moteur est plus rapide sur toutes les opérations en général, il y en a quelques unes qui sont particulièrement optimisées. Avec PHP 5, vous avez peut-être pris certains réflexes qui ne sont plus d'actualité, pour soi-disant écrire du code plus performant ? Je vous propose de passer en revues les différentes techniques d'optimisation mises en place dans Symfony, qui font de la v4 la plus rapide jamais publiée. Ce sera l'occasion de tordre le coup à quelques idées reçues, et de vous en donner quelques autres pour le jour où vous chercherez à presser les dernières millisecondes hors de cette boucle intensive. Benchmark à l'appui évidement.

Salle Jarvis
17/05/2018
09:30-10:10

Tu es un habitué des events AFUP, tu proposes souvent de nouveaux sujets : où trouves-tu ton inspiration ?!

Trouver un sujet n’a rien d’évident. Trouver un sujet qui passionne l’auditoire est encore plus difficile. On met souvent la barre trop haute : un sujet très pointu demandera beaucoup de travail à préparer, et sera difficile à recevoir. Personnellement, j’essaye de dédramatiser : plutôt que de chercher ce qui égoïstement me passionnerait, j’essaye de puiser dans les travaux auxquels j’ai participé, ceux avec lesquels je me sens à l’aise et qui ont un potentiel de transmission intéressant. Je peux aussi emprunter des sujets à d’autres (avec leur accord évidement, merci Ryan). Si l’objectif, en donnant une conférence, est d’accompagner un panel de devs à monter en compétence, je n’ai pas d’hésitation. Évidemment, le contact quotidien avec le « front » Symfony est une bonne source d’inspiration. J’ai aussi un petit carnet sur lequel je note les idées qui me passent par la tête. Et de temps en temps, j’en retiens une. Celui du PHP Tour autour de la performance PHP 7 est la suite logique de cette obsession à gratter la moindre milliseconde pour Symfony 4, doublée de l’envie de partager les choses apprises en interrogeant Julien Pauli (on bosse ensemble sur Blackfire).
(suite…)

[:fr]La parole est aux speakers : Jean Pasdeloup et Romain Cottard[:]

[:fr]Jusqu’au PHP Tour Montpellier 2018, retrouvez nos interviews de speakers pour mieux comprendre leur parcours et le sujet qu’ils aborderont lors de leur conférence !

La conférence

Retour sur 5 ans de CLI PHP pour importer le catalogue chez Deezer

Le catalogue chez Deezer c’est 43 millions de tracks, en augmentation constante et mis à jour régulièrement. Il y a 5 ans, l'import de ce catalogue consistait en quelques scripts PHP perdus dans le gros GIT monolithique de Deezer. Voyons comment cet import a évolué depuis, tout en restant en PHP : évolutions architecturales et focus sur des problématiques techniques. Au programme : de la vraie ligne de commande, des domaines métiers et des applications, un peu de Symfony et beaucoup de framework agnostic, des daemons parallélisés, des events asynchrones... Un talk par Romain & Jean, les 2 Architectes aux "commands" de la team Catalog.

Salle Jarvis
17/05/2018
10:15-10:55

Vous travaillez sur l’importation du catalogue Deezer qui comporte 43 millions de tracks. Quelle est la source d’import de ces tracks ?

Les tracks sont envoyées directement par les “providers”, c’est à dire les maisons de disques, qui possèdent les droits dessus. Les gros utilisent un format standard appelée DDEX, mais il faut également gérer différents petits formats alternatifs.

La grosse difficulté dans ces différents formats, c’est la gestion des droits : le même album peut être livré par différents providers avec des droits différents selon les pays. Ces droits évoluent également dans le temps avec une date de début, et des mises à jour qui peuvent arriver à tout moment pour envoyer une date de fin de droit pour ce provider.

En plus des tracks, on importe également des ressources de partenaires pour ajouter des informations, essentiellement sur les artistes : photos, biographies. Une autre difficulté consiste à faire correspondre correctement ces informations.

(suite…)

[:fr]La parole est aux speakers : Frédéric Hardy[:]

[:fr]Jusqu’au PHP Tour Montpellier 2018, retrouvez nos interviews de speakers pour mieux comprendre leur parcours et le sujet qu’ils aborderont lors de leur conférence !

La conférence

Le RGPD expliqué par un développeur

Souvent, le métier du développeur est bouleversé par une nouvelle technologie, qu'elle soit un nouveau langage, un nouvel outil ou un nouveau concept. Mais il arrive également qu'il le soit par quelque chose qui n'a rien à voir avec la technologie, et le RGPD est l'un de ces choses. Derrière cet acronyme se cache en effet un texte de loi dont nous allons devoir à l'avenir, et très rapidement, tenir compte à la fois lors de nos développement et dans nos relations avec nos client et nos utilisateurs. À moins d'une dizaine de jours de la fin du délai de mise en conformité, je vous propose de faire le point sur l'impact du RGPD dans notre quotidien de développeur !

Salle Morpheus
17/05/2018
09:30-10:10

Tu nous présenteras le RGPD. Est-ce difficile de lire un texte comme celui-ci ?

Le RGPD est un texte juridique qui contient « seulement » 100 articles, mais chacun de ses articles contient souvent beaucoup d’alinéas et de références vers d’autres articles ou d’autres textes de loi.
De plus, il interfère avec d’autres textes de loi, qui sont donc mis à jour en conséquence, même en ce moment alors que le RGPD va être appliqué très prochainement.
Les tournures de phrases sont donc parfois particulières et il représente finalement une masse d’informations importante qu’il est nécessaire d’interpréter correctement afin d’en comprendre tous les tenants et les aboutissants.
Enfin, il y a depuis quelque temps beaucoup « d’experts » qui s’expriment à son sujet et qui diffusent des interprétations plus ou moins différentes, ce qui brouille l’image que l’on peut s’en faire.
L’un dans l’autre, pour un développeur tel que moi, il est donc… délicat d’avoir une vision claire des obligations qu’impose le RGPD, aussi bien pour moi que pour mon équipe ou mon employeur.
Pour autant, ce n’est pas le texte de loi le plus difficile à lire que j’ai eu à décrypter, et à mes yeux, le véritable challenge qu’il propose à un développeur n’est pas sa lecture.
En effet, si le RGPD définit les obligations du développeur vis-à-vis des données personnelles collectées par son code, il ne donne aucune information sur ce qu’il va devoir faire concrètement dans son quotidien pour le respecter, aussi bien techniquement qu’en termes de méthodologie.
Si j’osais une comparaison parlante pour un développeur, je dirais que l’interface `RGPD` existe, mais que la classe `developpeur` qui la supporte est encore à écrire, ou bien c’est encore une classe abstraite.
Il a bien des préconisations rédigées par la CNIL, mais elles s’adressent avant tout à des gens qui sont déjà sensibilisés à la gestion des données privées, ce qui, en France, est loin d’être le cas des développeurs.

(suite…)

[:fr]La parole est aux speakers : Benoit Jacquemont[:]

[:fr]Jusqu’au PHP Tour Montpellier 2018, retrouvez nos interviews de speakers pour mieux comprendre leur parcours et le sujet qu’ils aborderont lors de leur conférence !

La conférence

Bienvenue dans la matrice !

Un processus PHP qui s'emballe sur un environnement sans debuggeur ? Un webservice qui semble fournir une réponse suspecte ? Un processus tout à coup très lent ? Un programme bloqué avec 0% d'utilisation CPU ? Une application avec un comportement inattendu ? Cela vous est déjà certainement arrivé, avec cette question: comment savoir ce qui se passe dans ces cas là, sans toucher au code PHP ? Des outils systèmes (strace, ltrace, lsof, perf-trace, ...) permettent d'intercepter et d'analyser les échanges entre les procesus et le noyau Linux. Ils peuvent s'appliquer aussi bien sur un processus PHP que sur n'importe quel autre processus s'exécutant sur la machine. Bien utilisés, ils permettent de rentrer à l'intérieur du processus et de comprendre ce qu'il est en train de faire. Le contenu des entrées et sorties, les blocages, les temps passés dans les différentes tâches, etc.... Toutes ses informations sont disponibles avec les bons outils. Alors passez en coulisse des processus et venez déchiffrer la matrice avec moi lors de cette présentation !

Salle Jarvis
17/05/2018
11:25-12:05

Tu vas nous parler de nombreux outils du type strace ou ltrace. Quelles sont tes sources pour les découvrir ?

Lorsque je fais du debug sur un problème technique, qu’il soit applicatif, système ou réseau, j’ai vraiment besoin de pouvoir regarder ce qui se passe sous le capot. Au fil du temps, je me suis consistué une petite bibliothèque d’outils et de pratiques pour y parvenir. Je me suis bien sûr inspiré de ce que j’ai pu voir chez mes collègues dev ou ops, mais je suis toujours à l’affût de nouveaux outils. En fait, dès qu’il y a une zone d’ombre dans un fonctionnement, je vais essayer d’obtenir l’outil qui va permettre d’y mettre de la lumière, si celui-ci existe. Bref, c’est généralement un peu de temps à passer sur les moteurs de recherche avec des requêtes très spécifiques 😉

(suite…)