From bb1887051b62981096ac93021cf87d4ff84cacdd Mon Sep 17 00:00:00 2001 From: ginifizz Date: Fri, 28 Aug 2026 10:48:18 +0200 Subject: [PATCH] feat: change talks language and add partner --- ...-line-of-defense-for-apis-and-frontends.md | 16 -------------- ...e-ligne-de-defense-des-apis-et-du-front.md | 18 ++++++++++++++++ ...serve-frankenphp-dx-serving-performance.md | 18 ---------------- ...nphp-la-dx-au-service-de-la-performance.md | 20 ++++++++++++++++++ pwa/data/con/2026/partners.ts | 6 ++++++ .../images/con/2026/partners/typesense.png | Bin 0 -> 10911 bytes 6 files changed, 44 insertions(+), 34 deletions(-) delete mode 100644 pwa/data/con/2026/conferences/http-headers-the-first-line-of-defense-for-apis-and-frontends.md create mode 100644 pwa/data/con/2026/conferences/les-en-tetes-http-comme-premiere-ligne-de-defense-des-apis-et-du-front.md delete mode 100644 pwa/data/con/2026/conferences/observe-frankenphp-dx-serving-performance.md create mode 100644 pwa/data/con/2026/conferences/observer-frankenphp-la-dx-au-service-de-la-performance.md create mode 100644 pwa/public/images/con/2026/partners/typesense.png diff --git a/pwa/data/con/2026/conferences/http-headers-the-first-line-of-defense-for-apis-and-frontends.md b/pwa/data/con/2026/conferences/http-headers-the-first-line-of-defense-for-apis-and-frontends.md deleted file mode 100644 index 652d4715..00000000 --- a/pwa/data/con/2026/conferences/http-headers-the-first-line-of-defense-for-apis-and-frontends.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -type: conference -speakers: -florent-morselli-2026 -short: "Master CSP, CORS, and isolation policies with Symfony and API Platform to build a robust client-side shield against modern web vulnerabilities." -tag: 'security,good-practices' -track: '1' -date: '2026-09-18' -start: '11:50' -end: '12:10' ---- - -# HTTP Headers: The First Line of Defense for APIs and Frontends 🇺🇸 - -Server-side security like **authentication** and **data validation** is crucial, but we often overlook the browser's role as the final line of defense. HTTP security headers act as **firewall rules** for the client by dictating which resources are trusted and how they should be isolated. - -In this session, we will explore the **essential headers** every modern application should ship, including CSP, CORS, and advanced isolation policies like COOP and COEP. Using concrete examples with Symfony and API Platform, you will learn how to build a robust security policy that protects your users against XSS, clickjacking, and side-channel attacks. diff --git a/pwa/data/con/2026/conferences/les-en-tetes-http-comme-premiere-ligne-de-defense-des-apis-et-du-front.md b/pwa/data/con/2026/conferences/les-en-tetes-http-comme-premiere-ligne-de-defense-des-apis-et-du-front.md new file mode 100644 index 00000000..b028933c --- /dev/null +++ b/pwa/data/con/2026/conferences/les-en-tetes-http-comme-premiere-ligne-de-defense-des-apis-et-du-front.md @@ -0,0 +1,18 @@ +--- +type: conference +speakers: -florent-morselli-2026 +short: "Maîtrisez les politiques CSP, CORS et d'isolation avec Symfony et API Platform pour bâtir une protection robuste côté client contre les vulnérabilités web modernes." +tag: 'security,good-practices' +track: '1' +date: '2026-09-18' +start: '11:50' +end: '12:10' +--- + +# Les en‑têtes HTTP comme première ligne de défense des APIs et du front 🇫🇷 + +Les en‑têtes HTTP de sécurité sont souvent vus comme un détail de configuration, alors qu’ils **structurent en profondeur le modèle de sécurité du web** : quelles ressources peuvent être partagées entre sites, comment les pages sont isolées entre elles, quels comportements du navigateur sont autorisés ou non, etc. + +Entre les règles de navigation entre origines, les politiques de chargement de ressources et les mécanismes d’isolation des pages, il devient difficile de garder une vision claire. + +Ce talk propose une vision globale et pragmatique de la sécurité. À partir de cas concrets, nous verrons **comment raisonner en termes d’origines, de contextes de navigation et de types de ressources**, puis comment traduire ce modèle dans la configuration d’une API Platform en production, du local jusqu’aux environnements publics. L’objectif : repartir avec une grille de lecture claire et quelques configurations clés pour durcir vos APIs et votre frontend. diff --git a/pwa/data/con/2026/conferences/observe-frankenphp-dx-serving-performance.md b/pwa/data/con/2026/conferences/observe-frankenphp-dx-serving-performance.md deleted file mode 100644 index 23f9adcf..00000000 --- a/pwa/data/con/2026/conferences/observe-frankenphp-dx-serving-performance.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -type: conference -speakers: -alexandre-daubois-2026 -short: "From blind panics to real-time insights: a live deep dive into tracking memory leaks and tuning FrankenPHP workers without the hassle." -tag: 'performance,tools' -track: '1' -date: '2026-09-17' -start: '11:40' -end: '12:20' ---- - -# Observe FrankenPHP: DX Serving Performance 🇺🇸 - -Every application has an engine: the runtime that executes your code. In PHP, it’s this invisible foundation working behind the scenes… Then one day, **production goes down**. - -We shouldn’t, but it’s the ritual of panicked SSH. We run a futile « htop », try to guess which anonymous process is hogging the RAM, and drown in austere dashboards (sometimes ones we’ve never even opened…). Why is observability always perceived as a **chore involving boring YAML files**? - -Let’s take the opposite approach: what if we transformed this black box into a simple, tremendous dashboard? Let’s put an end to tedious monitoring. We’ll dissect FrankenPHP’s behavior live and show you how to understand what’s happening by running one single command, with no configuration required. A surgical deep dive to **track down memory leaks**, **manage your workers**, and **fine-tune your auto-scaling** in real time. No prior knowledge needed. Live demos, stress tests, and open-source runtime insights await! diff --git a/pwa/data/con/2026/conferences/observer-frankenphp-la-dx-au-service-de-la-performance.md b/pwa/data/con/2026/conferences/observer-frankenphp-la-dx-au-service-de-la-performance.md new file mode 100644 index 00000000..26175e81 --- /dev/null +++ b/pwa/data/con/2026/conferences/observer-frankenphp-la-dx-au-service-de-la-performance.md @@ -0,0 +1,20 @@ +--- +type: conference +speakers: -alexandre-daubois-2026 +short: "Fini l'enfer du débogage SSH : contrôlez vos instances FrankenPHP en temps réel avec une seule commande, sans la moindre configuration." +tag: 'performance,tools' +track: '1' +date: '2026-09-17' +start: '11:40' +end: '12:20' +--- + +# Observer FrankenPHP : La DX au service de la performance 🇫🇷 + +Chaque application possède un moteur : le runtime qui exécute votre code. En PHP, c'est cette fondation invisible qui travaille en coulisses… Jusqu'au jour **où la production tombe en panne**. + +On ne devrait pas, mais on saute sur une session SSH directement sur le serveur. On lance un htop en espérant un miracle, on essaie de deviner quel processus anonyme dévore toute la mémoire, et on se noie dans des tableaux de bord austères (parfois même jamais ouverts auparavant…). + +Pourquoi l'observabilité est-elle toujours perçue comme **une corvée faite de fichiers YAML illisibles et repoussants** ? + +Il est temps de transformer cette boîte noire en un tableau de bord simple et agréable à regarder pour mettre fin au monitoring fastidieux. Cela nous permettra de plonger dans le comportement d’une instance FrankenPHP en cours d’exécution pour comprendre ce qu'il se passe en lançant une seule commande, sans aucune configuration. Une plongée chirurgicale pour **traquer les fuites mémoire**, **gérer vos workers** et **affiner votre autoscaling en temps réel**. Aucune connaissance préalable n'est nécessaire. Démonstrations en direct, tests de charge et exploration des coulisses d'un runtime open source vous attendent ! diff --git a/pwa/data/con/2026/partners.ts b/pwa/data/con/2026/partners.ts index 8c765e37..b1412be7 100644 --- a/pwa/data/con/2026/partners.ts +++ b/pwa/data/con/2026/partners.ts @@ -117,6 +117,12 @@ const partners: Partner[] = [ link: "https://larabelles.com/", rank: 4, }, + { + name: "Typesense", + logo: "typesense", + link: "https://typesense.org/", + rank: 4, + }, { name: "Laravel France", logo: "laravel-france", diff --git a/pwa/public/images/con/2026/partners/typesense.png b/pwa/public/images/con/2026/partners/typesense.png new file mode 100644 index 0000000000000000000000000000000000000000..6ea74449578c43b187711740164e4fe445379df6 GIT binary patch literal 10911 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

hGFab*k0eh^RXUzUlB`* zP%+SAkb$Jv@>|YHi|eJ=XMGa)MG}GpvmG$yGsExM<@sXemC0MTXQv4wUv+dAzx8N| zuILy0QZUoe`U_-Owfb)-+1?V}>!Kb-2F(l$un1>+A|5NKLFOOh8iDWW1Q`4zTW?|4 zAQz;*J^Lg}pHv9LmALw+=xpaJvFT3Zp z>Pj{>)tk!mtvrXVjF68o`s8U%@_~z;cif1(jZViOVL|3yw8fg=2cj$J*Qd?s{Ag=O z9Ol|BmhsHR(2lbwzKEh0T$QIs+XI1T!rJA(6HX!pnL?gY{^tFRR%Hjrdw#FPXNAWQ z|C)@;V|=I63?*PyZA(tlkFD5xuZ-+MR(gXTtw|kvqf?|@>~^MF^s~Ku@uFi-@feX` zzADpY#kl9$U73r~68@V+xDIr`I5t1VJVVDY~oVg9$Nxn-N zAPo=-z5>2Dw?M<4pt+X;{ML)ccK_YR{QM7=4r+Tc@0ARu2el(xTq3b9Y>& zcYJlMmwNQ%~=jVigx_YkX4d{anKQ-&#%$r<%q zkz5uZ+={t6LXR?hAiElvPV{v5vx*(>LA4$wdXGFw&PUabTr&HV0DPOFZa4AEn$Hk5HYmAugVafV$N3-|;&IVO2L9U@VRJ>TTS zo&0<@b+U_m3p3qV<-e7#LOidQw}ie1+4UuFx}$Xr(`kc2`+stI=mV3>chsvlO8oR| z>J`?j@MJ-=1iNxWj>rEQR3D z!VmN*&)yMa87;W{`dJF@U!ELp zpJ%S7LNN_{X)Uw2e8Zw-xFU%j7+uL)MHe_h%N!_n5HKu%bGESK6=pHWBgkBU@Hx1; zy!Hgul}NZu(>NKaX|ay$3;JUEPWIK*O{Ll@vXJQo*nyfE_2|%<#)y|nET7!c*pr1~ z@?i*E1VSXhFvnMEIZqi6)YXQ~EMP+#4z}dItY**eWhw+;0%`WPP5%WY@5p=|O0^bF zwS(z_LO0<@X)oWnuM+OmPnWaxY*gX1EV6#p7+Zig8vW~VJdkz$t9Kat@4W|i(t^bgE!H4nYt7u=&y&n(mqs_ay+6(G!;=F;Jt-%49~LGxW?>Fl*y zlgaHeKlQ_TvhKR1_D%5AK{va}sPZfPm+VN&3v%pyzq^i&Q0>Zd^6qcCx+rJMpaKhm zuko=yo>H+ka7g;o@)3NnxKOinfkefYBk2kI7rn@dG*z6x$mso(%<|tVvYba%zt18x z7ACt1-%;Q|&XL&@J2Y8Fk7erZp8a@A%BJ40om7{!Ny>9Ap|qiq4)(>d5>FO+wv|WiC z2=}|dG+)>~Gjfz^*sif#D}1Wi1>a^xK2$_)XWN>ALP1rMEy8;n(Of60H<^U#wGK*h zO0=Sq@-eqrEhkX@v_Q{RQ~8;|x8`3VB~e_hTH+3iB`Cl8neo5RZb4_*#$@FW=4#`b zUf4d(D2*zQPVg*Vr!cqA9amL4B>Yr*Bt?GZwo&&5jZ^(7mI2R8@1762XiJnhP3Vy-ARblIZcs=u)VlXa>Osg5Yn)Oo8Tr2slOL526z`H%Eilq-_6NS4Zw zHOJB!`@J}>j@~l7?+AoEHtBIBG*Cdf!}s#@3!fh&s^54`geIP zjG8+At0KTUX!{c2N9u*W-oS!F0Wvzw9&~@SmQd6f?C!QenCRNk(o6P&%>T(o$-gy>)fCRWJfG3Nmzc!bX zK!z_2xvL$usd0V6*{S|n5P&~-Znee4W^;PGjot^jWuE|+_Ss8-+VlV09(F70|N8|0 gul7s!?a@MyAw8USOu+w69j5?e!^Z{{dJf_L3r|Uyv;Y7A literal 0 HcmV?d00001