Jedním z technických dluhů, který máme je "bezvýpadkové nasazování". Naše výpadky běžně trvají 1-2 minuty (sem tam více) a postihují nás jednou týdně v ranních hodinách. Není to málo, ale dosud jsme prioritizovali jiné technické úkoly. Například upgrade serverů, automatické a výkonnostní testy, mock servery za složitá API nebo přechod na Gitlab. Na cestě k bezvýpadkovému nasazování se nyní pouštíme do prvního dílčího úkolu: přesun session z filesystému do nějakého vhodnějšího úložiště. Redis nám nevyhovuje kvůli nepodpoře transakcí. Hlavním kandidátem je tedy Memcache, který má sice v nám dostupné verzi problémy se zabezpečením připojení, ale s tím se vyrovnáme.
Git flow a GitHub flow jsou dostatečně známé. Stranou stojí GitLab flow, ale zdá se, že k němu zvolna míříme. Uvidíme, jestli se nám přechod z Tracu, kde máme definovány vlastní statusy jako jsou code review a merge na gitlabí Issues a Merge requesty osvědčí.
Po sérii návštěv všelijakých školení na téma GDPR a také po několika konzultacích s právníky, jsme se pustili do prvního celofiremního představení, co GDPR je. A také proč je. Základní údaje naleznete například na stránkách Úřadu pro ochranu osobních údajů.
Prošli jsme si všech 12 faktorů, které by měla mít aplikace aspirující na škálovatelnou, snad udržovatelnou a všeobecně radost přinášející aplikací. A prodiskutovali jsme je. Něco dávno zvládáme, někde máme trochu jiný názor... a někde se polepšíme.
Kolega Tomáš se zúčastnil soutěže The Catch pořádané Forenzní laboratoří Cesnet. Výsledky sice ještě nebyly vyhlášeny, ale protože v případě shody bodů rozhoduje čas a Tomáš má (prý) plný počet bodů, nemůže ho (prý) již nikdo předstihnout a skončí na konečném 32. místě (z cca 800 účastníků). My mu sice nerozumíme, ale my mu věříme.
All Day DevOps je čtyřiadvacetihodinová online konference, během které v několika kanálech probíhají přes Youtube přednášky z oblastí CI/CD, DevSecOps, Modern Infrastructure a dalších. Nevěnovali jsme se tomu po celý den, ale kdo chtěl mohl si odběhnout do zasedačky na "promítání s diskusí".
Výživná přednáška Petra Ferschmanna o GraphQL, která o samotném GraphQL skoro ani není. Nejprve se dozvíte o motivacích k tomu, proč se GrapQL vůbec zabývat (intenet je nejpomalejší, co kdy byl... a lepší to nebude). Následně Petr představí nástroje, jak s GraphQL pracovat (v javascriptu).
Petr Ferschmann - REST API je mrtvé, ať žije GraphQL a Relay
Po prázdninovém volnu navazujeme v říjnu dalším promítáním. Tentokrát o tom, že pure funkce jsou fajn, jak vyndat stav z existující funkce, že jde potom vytvářet historii stavů a jak se k tomu hodí persistentní datové struktury.
Brian Maddy: State, Immutability, and Persistent Data Structures
Ačkoliv jsme stále částečně v prázdninovém módu, někteří z nás si našli čas na běhání v rámci charitativní akce Teribear, kde jsme jako Travelport zároveň jedním z hlavních partnerů.
Z interních debat o tom, jak by asi měl vypadat jednoduchý Dependency Injection Container vzešla třída Cee\SimpleDi\Container.
Návštěva na konferenci Microservices byla přínosná. Řečníci mluvili o motivaci, obecných principech, praktických zkušenostech a pokročilejších problémech s odolnosti aplikací proti výpadkům.
Do stránky Do týmu hledáme jsme doplnili krátkou informaci o průběhu pohovorů.
Přes léto si s pouštěním přednášek dáváme zatím trochu pauzu. Ale připravili jsme samostatnou stránku se seznamem proběhlých meetupů.
Jak používají message brokera RabbitMQ v Mall.cz? Paralelizace procesů pomocí zpráv s využitím populární technologie. A ukázka simulátoru RabbitMQ v browseru.
Doplnili jsme diagram popisující, z jakých částí se GOL IBE skládá a které technologie jsou v nich hlavně použity.
Jaké je vhodné použití key-value storage? Cache a session. Možná - je třeba vyřešit problém zámků. Celkem solidní, rychlý úvod do používání Redisu.
Při psaní testů během refactoringu nás čeká otázka: Má smysl napsat nejdřív test na původní chování a pak se pustit do refactoringu? Debatu nad tímto tématem jsme shrnuli do jednoho obrázku.
JSON má nějaké výhody a nějaké nevýhody. S chybějící formální validací se snaží popasovat JSON schema. Relativně elegantně. Sice je to už několik let pouze draft, ale už to má spoustu implementací pro spoustu jazyků.
Jan Tvrdík: Jak pomocí JSON schema validovat API požadavky/odpovědi
Tester Libor připravil prezentaci, jak píše end-to-end testy. Rádi bychom jejich psaní využili už v rámci programování. Zatím se zdá, že interní testovací nadstavba postavená na Page Object Patternu dělá psaní některých testů dostatečně snadným, aby se jich programátoři ujmuli.
Zvolili jsme jedno z těch témat, u kterých se programátoři vždycky nakonec nespokojeně ošívají a koukají do země - Bezpečnost. Vydařená přednáška Filipa Procházky. A vážně se netýká jen Nette. Stripujte ty Exify...
Filip Procházka: Časté bezpečnostní chyby nejen v Nette aplikacích
Začínáme se zajímat o problematiku GDPR. Martin se vydal na přednášku organizovanou panem Kokešem z https://gdpr.systems/. Mise sledoval konferenci GDPR na Twitteru, kde se pár informací dozvíte i z animovaných obrázků. Další relevantní zdroj je třeba https://gdpr.cz.
Jako zdroj poznání jsme vyzkoušeli youtube kanál Zonky engineering teamu. Docker, microservicy a AWSko táhnou...
Tentokrát jsme vyrazili na UX konferenci od TUESDAY Business Network a Internet Info. Je fajn poslouchat, jak se dneska různí vývojáři různě perou nejen s uživatelským testováním, ale hlavně i s výzkumem a vyhodnocováním.
S AWS Cloudem trochu koketujeme, tak jsme si pustili tipy na co si dát pozor od Soukiho. Jak sám protagonista říká "Je to jasné, když vám to říkám, ale nenapadne vás to, když to děláte."
Tyto stránky jsou nově nasazovány akceptováním Merge requestu z masteru do větve production. Jde o výsledek pokusů s využíváním Gitlab CI. Nyní budeme zvažovat použítí pro další projekty.
ELK už sice sporadicky používáme, ale i tak vyhrál hlasování. Mnoho nového jsme se nedozvěděli, ale aspoň jsme se pobavili na téma: Měl by každý programátor automaticky logovat, tak aby si sám po nasazení kódu do produkce ověřil, jak je funkcionalita používána uživateli?
Neodolali jsme a pochlubili se vlastním monitoringem.
Druhé sezení se vzdělávacími videi. Tentokrát o Vue.js, javascriptovém frameworku, o kterém jsme slyšeli poprvé.
Apiary meetup: How we chose Vue.js (Jakub Mikuláš), Vue.js 101 (Jiří Kratochvíl)
Zkoušíme nový způsob, jak se dozvědět něco nového. V pátek ráno jsme sešli ke sledování videa o Dockeru a krátké diskusi nad ním. Přizvali jsme i kolegy z IDC-softwarehouse.
Trawyse jsme si nechali otestovat Dobrým webem. Do pozorovatelské místnosti se vypravil každý, kdo měl chuť (nakonec všichni). Uživatelé se ukázali překvapivě schopní.
Jirka, Michal a Mise se vypravili na Devel.cz. Mise si poctivě dělal poznámky.
Michal připravil článek s tipem, jak upravit zpracování screenshotů selhaných testů ve VisualCeption.
Michalovi se podařilo prosadit některé své úpravy pro VisualCeption do hlavního repositáře. Jde o rozšíření testovací frameworku Codeception, které umožňuje porovnávání screenshotů stránek. Autoři zároveň Michalovi nabídli správcovství projektu, které přijal. Slavíme.
Náš zbrusu nový nástroj na rezervování dodatečných služeb k letenkám - Trawys jsme nasadili do testovacího provozu. S návrhem uživatelského rozhraní nám pomáhal Dobrý web. Těšíme se na uživatelské testování.
Vyvíjíme rezervační systém, kterému říkame GOL. Zkratka IBE znamená Internet booking (= rezervační) engine. Rezervujeme primárně letenky. Označení D4 značí čtvrtou generaci, vyvinutou v javascriptovém frameworku Next.js, postaveném na Reactu. Z původního Flow jsme přešli na Typescript. Testujeme v Jestu a Cypressu. Aplikace má i verzi určenou pro korporátní zákazníky - TripGate a s využitím React Native i verzi mobilní.
Uvnitř GOLu se skrývá C++ jádro staré více než 10 let. Historicky podporovalo několik zdrojů letenkových a hotelových dat, rezervace aut a pojištění. Stále je v něm co zlepšovat. Při vývoji si pomáháme mockováním všech externích zdrojů dat, se kterými spolupracujeme. To nám umožňuje psát automatické testy. Nový kód píšeme v C14 a když je to potřeba, využíváme Boost.
Starší verze GOLu. Systém stále intenzivně vyvíjíme a zároveň udržujeme v provozu přes 10 let. To znamená, že v začátcích GOLu vypadal webový vývoj úplně jinak než dnes. Ale neznamená to, že bychom ho dělali celou dobu stejně. Jsme na PHP 8.0, využíváme PHPStan (na nižších levelech), testy píšeme v Codeception a PHPUnit.
Využíváme různá API z cestovního ruchu. Nejvíce používáme API k systému Galileo, které využívají i největší hráči v oboru. V ČR jsou to například Kiwi.com, StudentAgency, nebo Pelikan. Obdobné je to s API Travelfusion.