Talks

Writing Php code with only 6 characters

Slides [en]

Mais pourquoi ? Pourquoi donc voudrions nous écrire un programme avec une contrainte aussi absurde ?? Parce que l’important n’est pas la destination, mais le voyage… De même qu’une solution de Code Golf ou de Quine n’a pas pour vocation d’être mise en production, ce challenge est un prétexte pour explorer quelques subtilités de PHP. Idée géniale pour l’obfuscation? Hérésie à ne jamais montrer aux juniors? Accrochez vos ceintures, et venez vous faire une opinion avec ce talk (très) technique et (presque) philosophique !

The Great Circle of Life (of a variable)

Slides [en]

En PHP, pas besoin de se préoccuper de l’allocation mémoire, le ZendEngine gère tout ça pour vous ! Malgré tout, lorsque vous exécutez des processus longs (cron, workers…), il est parfois (trop) facile de consommer beaucoup (trop) de mémoire sans s’en rendre compte… Garbage collection, références cycliques, copy on write, WeakReference… voici un rapide tour d’horizon des pièges et outils à connaître pour optimiser la gestion mémoire de vos programmes.

ReactPhp, AmPhp, RevoltPhp: Asynchronous Frameworks Comparison

Slides [en]

Depuis la sortie des Fibers en PHP 8.1, le langage a maintenant tout ce qu’il faut pour offrir une expérience développeur fluide pour la programmation asynchrone. Les deux frameworks historiques (ReactPhp et Amp) se sont mis à la page, et leurs équipes ont même collaboré pour développer une implémentation commune (et autonome!) d’Event Loop: RevoltPhp. Cette conférence propose un comparatif de ces 3 librairies à travers différents exemples, ainsi que des conseils pratiques pour migrer une application existante. Et si le moment était venu d’optimiser votre application avec la programmation asynchrone ?

Le point virgule de trop

Slides [fr]

Le Php est très largement inspiré du langage C et il en a hérité ce fameux point-virgule pour délimiter chaque instruction (ou statement). Avec un peu d'experience, il est même possible de s'économiser quelques instructions (avec l'opérateur ternaire, coalescent...) et c'est souvent assez plaisant car le code est alors réduit, donnant une (fausse?) impression de simplicité et/ou de lisibilité. Dans ce talk, je vous propose de pousser ce principe à l'extrême: pouvons-nous écrire tous nos programmes avec un seul point virgule? (Voir aucun?) Cet exercice un peu fou nous permettra de nous familiariser avec les Core Concepts de Php (statements, expression, language constructs...), d'évoquer la programmation fonctionnelle et de découvrir plein de petites astuces pour briller lors de vos Pull-Requests.

OpenTelemetry: vers un standard pour surveiller vos applications

Slides [fr]   Video [fr]

Là, maintenant, tout de suite, êtes-vous capable de dire si votre site internet fonctionne correctement ? Et en cas d’incident en pleine nuit, pouvez-vous déterminer la chronologie des évènements ? C’est à ces questions que la télémétrie apporte une réponse, en instrumentant votre code et en envoyant les données collectées dans un outil d’analyse. Mais quel est le meilleur ? Est ce qu’il existe des solutions (presque) gratuites ? Peut-on changer d’avis facilement ? C’est là qu’OpenTelemetry intervient. OpenTelemetry propose une API de télémétrie, indépendante du langage et indépendante du service d’analyse utilisé. Fortement encouragé (et déjà supporté!) par les principaux acteurs du marché, poussé par une communauté active, ce protocole a tout pour devenir un standard de communication pour la télémétrie. Dans cette conférence nous aborderons les concepts fondamentaux de cette API, l’écosystème PHP existant, ainsi que des idées à mettre en pratique (et en production !) dès la semaine suivante.

Fiber: the open door to asynchronous

Slides [en]   Video [fr]

Parmi les nouveautés apportées par Php 8.1, les Fibers tiennent une place particulière. Il s’agit certainement d’une fonctionnalité qui aura un impact majeur sur l’écosystème Php, tout en ayant un impact mineur sur le code que vous écrivez tous les jours. Les Fibers sont comme des générateurs améliorés, des fonctions interruptibles, mais qui peuvent s’imbriquer de manière transparente avec d’autres fonctions. Il est donc enfin possible de créer des fonctions similaires à await et async pour rendre la programmation asynchrone moins intrusive dans notre code et permettre la compatibilité avec les frameworks existants. Voici une introduction à ces nouveaux concepts, ainsi que des exemples concrets de ce que cela permettra dans l’écosystème Php.

6play_API-v2-Final(1).doc

Slides [fr]   Video [fr]

Votre API est confrontée à des contraintes techniques mais elle doit surtout répondre à vos problématiques métier qui ne cessent d'évoluer. Nous avons souvent vécu cette situation pour 6play (service de Replay du Groupe M6), et il nous a fallu plusieurs générations d'API avant d'arriver à une version adaptée à nos besoins. Micro-services, Rest/GraphQL, Developer eXperience… Un récit et des conseils pragmatiques pour concevoir et maintenir votre API.

One year of asynchronous PHP in production

Slides [en]

Yes, it’s possible to use asynchronous programming in PHP and it can massively improve applications velocity. But if it was so simple everybody would already use it. Our team started to use this paradigm one year ago, it was a success in many ways but we faced a lot of questions: which applications are suited for this? How to train your team? Which tools are available? Here our feedback, from daily developments to production.

Why and How to use Generators for Asynchronous Programming

Slides [en]

Generators are often described as a simplification of iterators pattern, but they are also very powerful to perform asynchronous treatments. We will dive into event loops and promises to understand why and how generators can help us to write maintainable asynchronous functions, especially in Php. We will conclude with some concrete use cases from our experience at M6 (French media group).

Graphical Php

Slides [en]   Video [fr]

Qui a dit que PHP devait se cantonner à du développement web? Après tout, c’est « juste » un langage de programmation, pourquoi se limiter? Les extensions PHP permettent de facilement sortir des sentiers battus, alors pourquoi ne pas tenter de faire une interface graphique avec Php? Un jeu? De la 3D? Venez prendre une bouffée d’air frais en découvrant l’extension SDL.

One year of asynchronous PHP in production

Slides [en]   Video [fr]

Oui, il est tout à fait possible de faire de la programmation asynchrone en PHP et il existe des librairies matures pour le mettre en place dans vos projets. Oui, ça peut améliorer considérablement la performance de vos applications, mais si c’était aussi simple tout le monde le ferait déjà. Cela fait plus d'an que les équipes de 6play ont franchit le pas sur certains projets et les applications asynchrones tiennent toutes leurs promesses en production, mais la mise en place a soulevé beaucoup de questions. À quels critères se fier pour rendre une application asynchrone? Comment former les équipes sur ces nouveaux paradigmes? Comment adapter les outils existants et comment gérer ce nouveau type de charge sur les serveurs? Voici notre retour d’expérience sur le PHP asynchrone, du développement à la production, en passant par la vie de tous les jours.

One year of asynchronous PHP in production

Slides [en]

Oui, il est tout à fait possible de faire de la programmation asynchrone en PHP et il existe des librairies matures pour le mettre en place dans vos projets. Oui, ça peut améliorer considérablement la performance de vos applications, mais si c’était aussi simple tout le monde le ferait déjà. Cela fait plus d'an que les équipes de 6play ont franchit le pas sur certains projets et les applications asynchrones tiennent toutes leurs promesses en production, mais la mise en place a soulevé beaucoup de questions. À quels critères se fier pour rendre une application asynchrone? Comment former les équipes sur ces nouveaux paradigmes? Comment adapter les outils existants et comment gérer ce nouveau type de charge sur les serveurs? Voici notre retour d’expérience sur le PHP asynchrone, du développement à la production, en passant par la vie de tous les jours.

Generators for Asynchronous Programming: User Manual

Slides [en]   Video [fr]

Les générateurs sont souvent réduits à une simplification des itérateurs, mais ils sont surtout très pratiques et performants pour executer des traitements asynchrones. Nous aborderons le fonctionnement d’un programme asynchrone, le rôle des promises, et approfondirons l'utilisation des générateurs pour simplifier l’écriture de notre code. Enfin nous détaillerons des cas pratiques « prêts à l’emploi » pour tout type d’application, avec un retour d’expérience sur ce qui a été mis en place chez M6Web.

Generators and Asynchronous Computation

Slides [en]

Un générateur est souvent présenté comme une simplification d'un itérateur, mais il est aussi un outil très performant pour exécuter des traitements asynchrones. Nous aborderons le fonctionnement d’un programme asynchrone, le rôle des promises, et comment utiliser efficacement les générateurs pour simplifier l’écriture de notre code, en s'épargnant l’enfer des callbacks.

Async… and Generators… chronous

Slides [en]

Prolog

Slides [en]

Petite visite guidée de cette autre manière de penser un programme.

Le Web à l'heure du MIDI

Slides [fr]

Le Web à l'heure du MIDI

Slides [fr]

Le MIDI est un protocole créé en 1983 permettant de faire communiquer des instruments ou logiciels de musique ensemble. Fin 2012, le W3C commence à rédiger une spécification pour que les navigateurs puissent utiliser les interfaces MIDI, et Chrome intègre cette API en 2015. Les applications sont nombreuses : composition, apprentissage de la musique, piloter des applications, jouer… Que vous soyez mélomane ou simple curieux, voici un tour d’horizon de ce qu’est le midi, ce qu’on peut en faire, et comment le faire dans votre navigateur.

XDebug: un ami qui vous veut du bien

Slides [fr]

Une donnée presque parfaite

Slides [fr]   Video [fr]

Pour cet épisode, c’est l’équipe Backend qui prépare les données chez 6play.fr. Mais attention, les équipes Frontend (Web, Player, Mobile et IpTv) seront là pour les noter: le contenu des données, sa légèreté, sa fraîcheur, l’attente entre les appels… chaque équipe a ses propres exigences. Sans oublier l’équipe Infra qui attend toujours un service irréprochable, sous peine d’utiliser son droit de véto. Le menu comportera des mets locaux (Php7, Sql, ElasticSearch…) mais proposera aussi des classiques revisités (files d’attentes, workers, dénormalisation des données…). En bonus, vous découvrirez le bêtisier du service, et des recettes à faire à la maison. Bonnes données, et bonne API bien sûr.

Array Tips

Slides [en]   Video [fr]

À mi-chemin entre le puzzle et la programmation fonctionnelle, les Array Tips© sont surtout une excuse pour découvrir les fonctions injustement méconnues (ou peu documentées) sur les tableaux Php. La règle est simple: une seule instruction de pur Php, sans fonctions anonymes. Jusqu’où peut-on aller, et à quel moment s’arrêter? Du pire au meilleur de Php! Hip Hip Hip? Array!

Une donnée presque parfaite

Slides [fr]

Pour cet épisode, c’est l’équipe Backend qui prépare les données chez 6play.fr. Mais attention, les équipes Frontend (Web, Player, Mobile et IpTv) seront là pour les noter: le contenu des données, sa légèreté, sa fraîcheur, l’attente entre les appels… chaque équipe a ses propres exigences. Sans oublier l’équipe Infra qui attend toujours un service irréprochable, sous peine d’utiliser son droit de véto. Le menu comportera des mets locaux (Php7, Sql, ElasticSearch…) mais proposera aussi des classiques revisités (files d’attentes, workers, dénormalisation des données…). En bonus, vous découvrirez le bêtisier du service, et des recettes à faire à la maison. Bonnes données, et bonne API bien sûr.

Array Tips

Slides [en]

Array Tips

Slides [en]

Index SQL: Born to B-Tree

Slides [en]   Video [fr]

Peu importe que vous utilisiez du SQL ou du NoSQL, vos données doivent être indexées pour garantir des temps de recherche acceptables sur de grands volumes. Dans un monde parfait, tout serait indexé sans que nous ayons à nous en soucier. Dans la vraie vie, tout est affaire de compromis et il est difficile de faire les bons choix sans savoir ce qu'il se passe vraiment dans un index. Quand et comment indexer nos données, pour quel type de requêtes? Plongeons au cœur d’un index SQL pour mieux comprendre…

Index SQL: Born to B-Tree

Slides [en]

Peu importe que vous utilisiez du SQL ou du NoSQL, vos données doivent être indexées pour garantir des temps de recherche acceptables sur de grands volumes. Dans un monde parfait, tout serait indexé sans que nous ayons à nous en soucier. Dans la vraie vie, tout est affaire de compromis et il est difficile de faire les bons choix sans savoir ce qu'il se passe vraiment dans un index. Quand et comment indexer nos données, pour quel type de requêtes? Plongeons au cœur d’un index SQL pour mieux comprendre…

Jamais trop tôt pour le cloud

Slides [fr]

Le cloud est utilisé par tous les grands du web mais il ne leur est pas réservé, nul besoin d’attendre plus tard pour déployer son application dans le nuage. Le principal avantage pour une petite entreprise, c’est la flexibilité. Pouvoir n’utiliser que ce dont on a besoin, tout en sachant qu’on peut rapidement passer à l’échelle si besoin. Voici un retour d’expérience sur un hébergement full AWS en startup: pourquoi le cloud, comment migrer pas à pas, comment passer à l’échelle, et combien ça coûte.

El framework de la muerte

Slides [fr]

Lors de la dernière session HumanTalks Lyon, il a été suggéré de présenter le “meilleur du pire“ de ce que l'on a pu voir en programmation: Challenge Accepted! Notre équipe a travaillé plusieurs mois avec un Framework “Maison“ développé par un prestataire, et l'expérience fut assez douloureuse. Le but de ce talk n'est pas de critiquer gratuitement, mais plutôt d'analyser les erreurs commises, leurs conséquences, et de comprendre les raisons qui peuvent pousser un développeur à faire de mauvais choix en pensant bien faire.

Faire coder les candidats: bilan

Slides [fr]

Difficile de reconnaître un “bon“ développeur juste sur la base d'un CV. Cela fait bientôt 2 ans que je fais passer systématiquement un test technique par téléphone via un GoogleDoc, en guise de “présélection“ pour les stages ou jobs. Voici une rapide présentation du “pourquoi“, du “comment“ et surtout des enseignements que j'ai pu en tirer.

Mercurial: l'autre DVCS

Slides [fr]

Articles

What is the minimum number of characters needed to run every possible program in Php?

Here is my journey to write PhpFk, a small library to convert every Php program to a valid Php 8.2 program with a minimum number of characters

Php array functions… with Emojis

Do you know Php array functions? They are powerful, but sometimes tricky to handle… Here a cheat-sheet using Emoji, with some of my favorite tricks: Enjoy!

Workshop: Asynchronous computation and generators

This repository contains a workshop written in Php, to understand how works asynchronous computation with generators.

Elasticsearch: la grande migration

Pour assurer la scalabilité des performances de l’API 6play, les données suivent tout un workflow pour être dénormalisées et stockées dans Elasticsearch. Mi-2016, nous avons identifié des dysfonctionnements majeurs sur nos serveurs, entrainant parfois des interruptions de service. Suite à quelques mesures d’urgences pour stabiliser l’existant, nous avons entrepris de mettre à jour notre version d’Elasticsearch pour bénéficier des dernières améliorations. Nous étions alors sur la version 1.7, et souhaitions passer en version 2.0. Après plusieurs mois d’efforts pour effectuer cette migration sans interruption de service ni gel technique, nous voici en version… 5.2! Voici le récit de cette grande migration, et ce que l’on a appris tout au long de ce périple.

A provably robust and efficient algorithm forreconstruction using structured light

This paper presents a robust solution to the problems underlying real-time movement tracking in the medical domain, and more precisely inthe course of a radiotherapy treatment. However, a large number of themethods used to reconstruct and visualize movements (or acquire datapertaining to them), is inadequate for the medical environment consid-ered in this paper. The general non-invasive scheme we have adopted isto project light dots on to a scene (e.g.,a patient lying on a table), filmedby two cameras. The resolution of correspondances betweensourceandobservedfeatures is modeled using amatch graphand implemented withanO(nlogn) algorithm (nthe number of dots), which only operates ongeometric constraints (epipolar geometry), without making any assump-tion as to the continuity or homogeneity of the observed surface(s), orpossible occlusions in the scene.

Miscellaneous

[Project] PhPresent

PhPresent is a library allowing to create a slideshow program in Php, in the same way that RevealJs for Javascript. It is possible thanks to the Php-SDL extension and Imagick extension.

[Project] Tornado

Tornado is composed of several interfaces to write asynchronous programs using generators. This library provides adapters for popular asynchronous frameworks (ReactPhp, Amp) and built-in adapters to understand how to write your own.

[Podcast] Démystifier la programmation asynchrone en PHP

En Octobre dernier, Benoit Viguier (twitter.com/b_viguier) donnait une conférence au Forum PHP (event.afup.org/forumphp2018/) sur l'asynchrone en PHP (www.youtube.com/watch?v=7TvIIt4c8uY). Nous avons profité de ce rendez-vous pour qu'il nous aide à démystifier cette problématique qui semble à première vue destiné au monde du JavaScript. Benoit nous raconte son parcours avant de devenir lead développeur chez M6Web, les problématiques qu'il cherche à résoudre avec son équipe et ce qui l'a conduit à explorer l'asynchrone en PHP.

[Video] Convergence project

An aborted video game technology, where you can see my head in 3D on a Playstation 3.