Ohlédnutí za SymfonyWorld Online 2021 Winter Edition

Ve čtvrtek a pátek proběhla předvánoční online konference věnovaná PHP frameworku Symfony. Zároveň jsme dostali novou Symfony 6, takže bylo o čem si povídat. Moje tradiční ohlédnutí za konferencí si můžete přečíst v tomto článku.

Úplně na začátek musím říct, že jsem se přihlásil na poslední chvíli. Den předem a příliš jsem neřešil program. Byl jsem zkrátka nadmíru spokojen s loňskou online akcí o Symfony, takže jsem vyšetřil dva volné dny a uvelebil se u monitoru.

Letošní konference se mi také líbila, ale postrádal jsem ten wau efekt. Loni mě namlsalo představení Symfony 5.2, Symfony UX a povídání okolo Composeru 2. Letošní Symfony 6 tolik přelomová z mého pohledu není.

Online konference proběhla tradičně na osvědčené platformě Hopin, a to ve třech pásmech. Stejně jako loni jsme před přednáškami viděli moderátory, přednášky samotné byly kvůli hladkému průběhu ze záznamu a následně se spíkři připojili živě a odpovídali na dotazy z internetového publika.

Díky vysílání ze záznamu mohly být videa opatřena titulky, což se hodilo u některých francouzských přednášejících vynechávajících celá písmenka (typicky How znělo jako ou). Myslím, že jako Češi vůbec nemusíme mít komplex z našeho přízvuku.

Fabien Potencier – Removing SPoFs

Úvodní přednášku obstaral sám Fabien, autor projektu Symfony. Za zkratkou SPoF se ukrývá výraz Single point of failure a přednáška se týkala o odstraňování těchto potenciálních problémových bodů při vývoji a vedení open source projektu. Velmi inspirativní povídání o tom, co Fabien při tvorbě Symfony zažil a musel řešit ve spojení s open source komunitou.

V bodech: Open source. Udržitelnost a financování. Za 16 let se naučil řadu věcí o tom, jak open source funguje. Přestože na open source spoléhá částečně snad každá firma, nějak stále nechápeme, že free znamená svobodu to kopírovat a měnit, nikoli, že je daný software a kód zcela zadarmo.

Fabien Potencier zmínil nově založenou PHP Foundation a odchod Nikity Popova, jednoho z hlavních tvůrců PHP (a vývojáře v JetBrains), který se nyní bude věnovat LLVM. Před lety mladý Nikita přispěl pull requestem do Twigu. Stejně tak zmiňoval Dimitrije Stogova (?) ze Zendu.

Jde o dva hlavní vývojáře PHP, patří jim samozřejmě dík, ale právě oni jsou tím lidským SPoF pro PHP. Tedy jakousi Achilovou patou, řekli bychom. Ukázalo se to na případě Nikitova odchodu. Doufejme tedy, že financování přes PHP Foundation zajistí světlé zítřky celému PHP.

Následně se Fabien rozpovídal o typické práci na open source projektu a Symfony. Řada open source projektů startuje jako one man show, kde jeden člověk dělá vše od vývoje po marketing. Cílem je tedy získat co nejrychleji lidi, kteří se projekt osvojí a zalíbí se jim. Jakmile začnou lidi projekt zmiňovat, tak si to zamilujete a najednou se nevšimnete, že pracujete zadarmo. Víc a víc.

Postupně přibývají přispěvatelé a projekt roste. Je to jako výhra v loterii. Ale začnou také první problémy. Ne každý přispěvatel sdílí vaše standardy. Nakonec začnete všechno neustále kontrolovat a opravovat, protože je to váš projekt, vaše zodpovědnost. Noty pro přispěvatele jsou nezbytnost, zaberou spoustu času a najednou zjišťujete, že se už nevěnujete kódu a jeho opravám.

Ale nemůžete skončit, přece je to vaše dítě. Být za tu práci placen by bylo fajn, ale často to není možné. Začnete tedy vytvářet strukturu okolo sebe, delegovat, co bude kdo dělat. Jenže, to přináší stres. Co když to nebudou dělat správně? Nemusí to být špatně, ale prostě jinak. Začnete je vzdělávat a jednoho dne někdo uzavře problém s úplně stejnými argumenty, jako byste použili vy.

S dobrovolníky je problém s tím, že vše dělají ve volném čase. Ale ve výsledku je výstup vaše vizitka. Příspěvky do kódu tedy musejí být konzervativnější. Začnete odmítat veliké pull requesty. Řada firem začne projekt používat pro kritické aplikace a volají po stabilitě a předvídatelnosti.

Jak odebrat se vyhnout lidskému SPoF? Starat se o projekt 365/24 je vyčerpávající. Pomáháte tedy největším přispěvatelům a občas máte burst, podobně jako Fabien pracoval na Maileru. Je třeba akceptovat, že už to není váš projekt, ale projekt komunity. To je dost těžké si připustit. Ale je to jediná cesta, jak zajistit, že projekt bude dále úspěšný.

Symfony má přes 20 členů core týmu. Nejsou to pouze vývojáři, ale i dokumentátoři, sekuriťáci, lidi žijící tématem diversity, lidi na Slacku…

Dalším tématem je nástrojové SPoF. Pro sebe si vytvoříte nějaký nástroj pomáhající hlavnímu projektu v růstu. Lidi si toho všimnou a někteří chtějí, abyste dali open source úplně všechno, tedy i tento nástroj. Na začátku vše udržujete manuálně. V počátcích Symfony každý používal Subversion, Composer nebyl ve hře atd. Je třeba vše co nejvíce automatizovat. Proto si Fabien připravil různé skripty.

Často ty skripty bobtnají, nejsou dokumentované, protože jsou prostě jenom vaše, nejdou na veřejnost. A chyba, kterou uděláte, že jste tento svůj nástroj někde zmínili veřejně. Třeba na konferenci. Lidi jsou naštvaní, že máte nástroj, který řeší jenom vaše problémy, a nedáte jej ostatním. Často to kvůli bezpečnosti a univerzálnosti zveřejnit nejde.

Je ale důležité být transparentní a zbavit se role pana božského. Takže začnete upravovat kód těch svých udělátek, lidi chtějí open source a co to přinese? Další práci a práci. Pro ilustraci zmínil github.com/splitsh/lite a github.com/fabpot/local-php-security-checker.

Teď jste v roli, kdy jste dali ven něco dalšího, ale nechcete jít zas cestou open source, protože víte, co to přinese. Udržujte tyto menší projekty jinak než ten hlavní. Fabien na nich na rozdíl od Symfony netráví čas. Pokud nechce, tak prostě issues neřeší. Pokud se Ti to nelíbí, tak to nepoužívej, je mi to fuk.

Mrkněte na Symfony tools. Vývojáři z projektu zde sdílejí svoje utility nikoli kvůli znovu použitelnosti dalšími, ale pro transparentnost. Ber nebo nechej být.

Dva closed source projekty, které jsou důležité v Symfony světě. Prvním je Flex Server. Fabien zjednodušil za poslední rok kód, odebral zbytečnosti, rozdělil to na dvě části. Udělali úpravy, aby to pracovalo nad flat soubory místo řešení v jazyce Go a JSONu.

Flex.symfony.com je mrtvé, Flex 1.17+ pracuje nad statickými soubory na GitHubu a není potřeba open sourcovat Flex Server.

Druhý takový původně zavřený projekt je Symfony CLI. Původně balíček pro správu služby SymfonyCloud. Otevřít tak velký projekt není jednoduché. Nechce to otevřít moc brzy, aby se to vyšperkovalo a najednou je moc kódu a co s tím. Bylo zde 100 000 řádků vztažených k SymfonyCloudu, což je vrstva nad službou platform.sh.

Nyní se SymfonyCloud na platform.sh přesouvá přímo. Díky tomu se může podpora SymfonyCloudu odebrat ze Symfony CLI (80 % kodu) a to se zveřejní na GitHubu.

Fabien končil s tím, že se nechce se stát takový Nikitou ve světě Symfony. Podpořit vývoj můžete na symfony.com/sponsor. Pro velké firmy je připraven program donátorů.

Hugo Monteiro – Decoupling your application using Symfony Messenger and events

Po úvodní keynote se pásmo přednášek rozdělilo a já si vybral povídání o Symfony Messengeru a eventech. Hugo povídal o Domain Driven Designu. Ve stručnosti jde o úpravu struktury projektu tak, aby odpovídal byznysové logice, pro kterou je vytvářen.

Různé součásti je třeba mít jednoduché, aby se daly dobře upravovat tak, jak se byznys vyvíjí. Například e-shopy a objednávkové procesy odpovídající v aplikaci tomu, jak se reálně postupuje. Farmář nějak farmaří. Účetní účtuje. Každý má svůj specifický jazyk. Vždy je potřeba najít nějaká pojítka, dost často je to zákazník a produkt.

Příkladem událostí, které v DDD nastávají budiž u objednávky v e-shopu například UserWasCreated, OdersWasStarted, OrderWasShipped, BookingWasPaid atd.

Pro identifikaci události budete v Symfony potřebovat nějaké UUID, využijte například Symfony UID component nebo Ramsey UUID. Jakmile máte událost, předáte ji do Symfony Messengeru. Ten berte něco jako nástroj pro spouštění úkolů na pozadí:
Například $bus->dispatch(new SalesReport(' 2021-12-01 '));

Dodržováním DDD zajistíme fungování standardů a použijeme stejný jazyk, jako experti v daném oboru a budeme si navzájem rozumět.

Hubert Lenoir – How to handle dynamic data structure?

Tech Lead ze SensioLabs na začátku povídal, že je z Francie, což poznáme podle jeho akcentu. Jak u nás hezky česky říkáme, měl recht. Přednáška shrnovala různé přístupy k ukládání dat v databázi ve vztahu k entitám, jejich atributům a hodnotám.

EAV. Entity – Attribute – Value. Třeba tričko s nějakými vlastnostmi v e-shopu. Hubert vzal několik redakčních systémů a e-shopových řešení a popsal rozdíly mezi nimi, včetně výhod a nevýhod.

Drupal a jeho entity. Tabulka pro každý atribut. Výhodou vysoká konfigurovatelnost, verzování hodnot, hodnoty v různých sloupečcích. Nevýhodou velký počet tabulek a JOINů, nejde použít Doctrine.

Magento. Tabulky jsou pro každý typ hodnoty a pak jedna tabulka s atributy. Jednoduché hledání, Doctrine, ale zase mnoho JOINů, nutnost vytvářet novou tabulku, pokud je hodnota nového typu.

Sylius. Taky e-commerce jako Magento. Tři tabulky. Entity, Value a Attribute. Ve Value jsou sloupečky pro různé datové typy hodnot. Výhody jednoduché hledání, Doctrine, nevýhody nutnost nového sloupečku, když je nový datový typ hodnoty, spousta řádků, spousta NULL hodnot.

Lodel. Méně známý projekt. Má taky EAV, ale value je samostatná tabulka. Výhodou je jeden join, jednoduché hledání podle obsahového typu, nevýhodou samostatné tabulky pro každý typ obsahu, nelze použít Doctrine, atributy musejí být společné napříč typy obsahu.

Další možnost. Entity a Value v JSONu v jedné tabulce a k tomu tabulka atributů. Málo řádků, vše v jedné tabulce entity. Nevýhodou špatný datový typ, vše je JSON. Operace jako hledání, výpis a indexace probíhají nad JSON data typem.

MongoDB. Nerelační databáze – BSON formát. Vše je v jedné kolekci, Mongo nabízí indexaci, agregaci a validaci schématu. Nevýhodou je absence joinu a případná duplikace dat.

Graphové databáze. Entity a atributy jsou uzly, relace reprezentuje spojení mezi entitou a atributy. Proč to použít? Protože je to možné. Nevýhodou těžší učení, nemusí být vhodné pro všechny vaše scénáře.

Které řešení je nejlepší? Žádné. Často si řeknete, moje query jsou dlouhé, moc komplexní a plné JOINů. Řešení? Použijte cache. Doctrine nebo Symfony Cache component. Edge Side Includes. Jiným řešením je No-SQL databáze, např. ElasticSearch. V případě velkého množství dat použijte partitioning.

Tobias Nyholm – Runtime component: The game changer

Nejstahovanější PHP maintainer, jak se na začátku uvedl, povídal svěžím tempem o Runtime komponentě v Symfony. Díky ní se aplikace odpojí od globálního stavu, s okolím komunikuje přes runtime a je jí jedno, co je venku.

Spousta praktických ukázek kódu. Dobře zpracované a sestříhané.

Robin Chalas  – Symfony BC Promise demystified

Další zajímavé povídání o něčem, co je pro Symfony typické. Zpětné kompatibilitě a jejím udržování. BC = backward compatibility. Symfony se drží verzování v podobě major.minor.patch. Publikuje Long Term Support verze a má předvídatelný proces uvolňování nových verzí.

BC promises rozšiřují sémantické verzování. Garantují hladké upgrady. BC Promise je vynucováno Symfony Core Teamem a aplikováno přispěvateli.

Rozhraní (interfaces) jsou v Symfony řešeny takto: nové jsou uvedeny virtuálně. Existující metody nebo celá rozhraní jsou deprecated. Změny přerušující kompatibilitu jsou jenom v další major verzi. Pokud uvidíte deprecation poznámku, upravte to co nejdříve.

Tip: nepoužívejte Symfony classes. Nebo co nejméně to jde. Používejte raději interfaces.

Chyby se stávají, a pokud je porušena zpětná kompatibilita, tak omylem nebo když třeba kvůli zabezpečení nemají jinou možnost. V takovém případě otevřete issue na GitHubu a najde se řešení. Respektujte, že jsou jenom lidi.

Fredric Mitchell  – How Math, Science, and Star Trek Explain the Value of Team Diversity

Vývojář pracující 15 let s PHP a Drupalem tu letos zastupoval nezbytnou indoktrinační přednášku o diverzitě. Jakkoli to na vývojářských konferencích nesnáším, tak tady zcela na rovinu přiznávám, že jsem si řadu myšlenek zapamatoval a přišly mi dobré.

Dost záleží na přednášejícím. Pokud to není fanatik, může i toto ne vyloženě vývojářské téma, být hodně inspirující.

Frederic začal povídání o mentálních modelech. Místo „dokažte mi chybu“, používejte „co mi uniká“. Mít pravdu vs. Být úspěšný. Inkluze v praxi. Spravedlnost je cílem. Neutralita je nepřítel růstu.

Perspektiva: Jak nazíráte na problém. Heuristika: Jak hledáte řešení. Diversita? Demografická – jak vypadáte, jaký máte věk. Zkušenostní. Cognitivní, jak myslíte, jak aspirujete.

Zajímavé bylo přirovnání diversity v kolektivu k postavám ze StarTreku.

Neměli bychom se zaměřovat čistě jenom na IQ v kolektivu, ale také na EQ, emoční kvocient. Proti tomu asi žádná. Přijde mi to tak nějak samozřejmé.

Emoce nejsou dány genderem. Zaměřte na to svou pozornost, a ne pouze na to, jak je kdo dobrý kodér. Ženy jsou klíčem k úspěšnému týmu.

Jak odhalit talent? Chci najmout nejkvalifikovanějšího. Pokud berete ze stejné skupiny, jak matematicky vyberete nejlepšího, když vidíte jen část osobnosti člověka v celém jeho puzzle? Nakonec vyberte takového, o kterém si myslíte, že je nej, nikoli, který takový opravdu je. Obraťte otázku: musíte změnit svou perspektivu a přejít na novou heuristiku. Inovace.

Borgové ze StarTreku představují špatný přístup k diverzitě. Jsou z různých světů, ale berou jen to nejlepší z různých kultur.

Nicolas Grekas – Everything about Symfony 6

Druhý den začal představením novinek v Symfony 6. Symfony není samostatný projekt, skládá se z 190 repozitářů. Průběžná migrace ze Symfony 4 – 5 – 6. Nicolas zmínil BC Promise ze včerejška, a že v rámci stejné major verze nejsou uváděny změny, které by rozbijely kompatibilitu. Plánovanému breaku vždy předchází deprecation upozornění.

Při upgrade by měla být vždy jediná nutná změna v závislosti jádra, například závislost na verzi PHP. Symfony 6 podporuje PHP 8.1. Stejně tak i Symfony 4.4. Záleží pak samozřejmě na tom, jaké konstrukce jazyka použijete ve své konkrétní aplikaci.

Fabien dále zmínil několik konkrétních příkladů, co je třeba v kódu z pohledu kompatibility změnit, například používání návratových typů.

Symfony 6 je vlastně složeno z dílčích změn, které přišly v Symfony 5.1, 5.2 a 5.3. Například UUID, RateLimiter, atributy PHP 8, PHP Config Buildery a jiné. Symfony 5.4 přineslo užitečné dokončování příkazů v Bashi.

Pro Symfony 6.1 je momentálně otevřeno přes 100 pull requestů, různá RFC typu můžeme přidat tuto komponentu, nebo rozdělit tuhle? Aktuálně přes 3000 přispěvatelů, 23 lidí v Core Teamu.

SymfonyWorld Online 2021 Winter Edition

Wouter de Jong: Using the SecurityBundle in Symfony 6

Jako další jsem si zvolil přednášku o bezpečnostním balíčku v Symfony 6. Jeden ze členů dokumentačního a core týmu Symfony doporučuje používat příkazy make pro vytvoření základní kostry kódu:

symfony console make:user

symfony console make:migration

symfony console doctrine:migrate:migrate

symfony console make:regsitration-form

symfony console make:reset-password

Následovaly praktické ukázky úpravy autentifikačního procesu a popis cyklu bezpečnostních událostí.

Nový security systém je dostupný už od Symfony 5.2, není to výsada šestky. Narazíte na několik BC breaků. Například neexistuje už anonymní uživatel, Authentication providery jsou nyní Authenticators.

Co dál v Symfony 6 do budoucna? Pokročilé make nástroje, moderní autentifikátory, podpora autentifikačních faktorů.

William Pinaud – Working with Twig in Symfony “Tips and tricks”

Na tuto přednášku jsem se dnes hodně těšil, bohužel jsem skoro nestíhal dělat poznámky. William všechny své tipy chrlil rychlostí kulometu a jak někdo v chatu podotknul, mluví rychleji, než zvládá většina lidí myslet. Dobrá zpráva je, že šlo o zkrácenou verzi hodinového povídání o Twigu, které bude brzy publikovat.

Nejprve nás seznámil s tím, co to Twig je a jak funguje pod pokličkou. Konfigurace v twig.yaml. Coding standards. Autoformátujte svoje Twigové šablony.

Chcete si něco ve Twigu vyzkoušet? Mrkněte na Twigfiddle.com.

SymfonyWorld Online 2021 Winter Edition

Defensivní programování. Nikdy nevěřte vstupu od uživatele, z databáze atd. Slices. Pomozte si filtrem |u. Prázdné znaky. Filtr |spaceless nebo {% apply spaceless %}

Pozor na operátor in. Používá strpos() z PHP sse všemi jeho výhodami i nevýhodami. Data. Pozor při konverzi z řetězce. Zajímavé byly vychytávky pro správné definování <html>, kanonických URL a metatagů.

SymfonyWorld Online 2021 Winter Edition

Nebojte se logického třídění do podadresářů. Speciality Twigu v Symfony? url(), path(), dump(). Přebíjejte témata, nedělejte změny do defaultů.

Potřebujete rozšíření? Použijte make:twig-extension. Makro, globals, extensions (filtry, funkce, tagy, operátory, testy).

Jako perličku na závěr přednášející zmínil port Twigu do JavaScriptu.

SymfonyWorld Online 2021 Winter Edition

Rolando Caldas – From big ball of mud to clean architecture with Symfony 

Přednáška o tom, jak se vypořádat z balastem v návrhu aplikace v Symfony. Spousta funkcí, málo času a málo lidí. Se Symfony můžete projekt začít velice rychle. Tým roste, projekt roste až pak někdo řekne, bylo by lepší začít znovu od začátku. Implementovat novou architekturu jako Decoupled Code, mít specializované týmy, zaměřit se na microslužby. Potřebujete čistou architekturu, ne framework. Naštěstí Symfony od verze 4 je k tomu stvořená. Dává vám svobodu, kolik z ní a jak ji použijete.

CQRS. Volby: frontend framework, only one app context a použití CQS a eventů se sběrnicemi.

Frontend Framework? Na začátku Twig + Vue.js. Zajímavý popis evoluce a přechodu čistě na Vue.js, díky kterému mohli Twig úplně odebrat a aplikaci rozdělit na frontend a backend.

Pak řešili, že možná neznají pořádně svou doménu, zaměřili se na to a postupně mazali složky, např. Migration a v konfiguraci změnili umístění migrací. Umožnili controllerů, fungovat v infrastruktuře. Aplikovali CQS + Eventy + Sběrnice.

Vyvarujte se anemických entit. Odeberte gettery, když je nepoužijete. Odebíraní validátorů z entity. Nepotřebujete bloky od Doctrine v userovi, je jedno, jak je ukládán.

Alexander M. Turek – Static code analysis: how I learned to love the tool

Přednáška plná praktických ukázek analýzy kódu a toho, co vám to přinese. Programujete v PhpStorm? Pak asi statickou analýzu už používáte. PHPStan a Psalm jako další příklady statických analyzátorů.

Alexander zmínil statistiku svého projektu, který přebíral. Tři roky starý, mrtvý kód, forkované knihovny, plno úkolů atd. První běh analyzátoru našel 5113 chyb. Může být OK, když neopravíte všechny chyby. Zajistěte, že nezanesete nové.

SymfonyWorld Online 2021 Winter Edition

Ryan Weaver  – Give your Traditional Site the "single-page-app" Feel with Turbo

Co k tomu říct? Nejlepší na konec. Známý lektor ze SymfonyCasts.com a jeho charakteristický projev. Na jednoduchém příkladu miniaplikace nám ukázal použití Symfony UX, knihovny Stimulus a knihovny Turbo předělávající kliknutí na AJAXové volání.

Věnovali jsme se také línému načítání controllerů a novinkám, které přidává čerstvý Stimulus 3.

SymfonyWorld Online 2021 Winter Edition

Buďme ve spojení, přihlaste se k newsletteru

Odesláním formuláře souhlasíte s podmínkami zpracováním osobních údajů. 
Více informací v Ochrana osobních údajů.

Autor článku: Jan Polzer

Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Marketing Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.

Komentáře k článku

Přidat komentář

Odesláním komentáře souhlasíte s podmínkami Ochrany osobních údajů

reklama
Moje kniha o CMS Drupal

 

Kniha 333 tipů a triků pro Drupal 9


Více na KnihyPolzer.cz

Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Nové diskuze
Hosting pro Drupal a WordPress

Hledáte český webhosting vhodný nejenom pro redakční systém Drupal? Tak vyzkoušejte Webhosting C4 za 1200 Kč na rok s doménou v ceně, 20 GB prostoru a automatické navyšováním o 2 GB každý rok. Podrobnosti zde.

@maxiorel na Twitteru

Maxiorel na Twitteru