Tato aplikace funguje nejlépe s povoleným JavaScriptem.

Vyzkoušeli jsme inovativní technologie, spolupráci s lidmi, se kterými se normálně na projektu nesejdeme a inovativní přemýšlení.

Delivery Camp 7.0

  • inovace
  • delivery camp
Začátkem listopadu jsme uspořádali již sedmý a zároveň největší DeliveryCamp v historii Lundegaardu, tentokrát v příjemném prostředí statku Vletice.

alry_1911041153_1913.jpg

Účastnilo se celkem 27 lidí napříč celou firmou. Rozdělili jsme se do několika týmů, které celé tři dny pracovaly na předem stanovených tématech. Cílem bylo si vyzkoušet inovativní technologie, spolupracovat s lidmi, se kterými se normálně na projektu nesejdeme a inovativně přemýšlet. To vše v souladu s našimi hodnotami a cíli v Lundegaardu.

Mimo usilovné práce na projektech jsme naplno využili i volnočasové aktivity, které nám prostory Statku Vletice nabízely. Našel se tak čas na relax v sauně nebo ve vířivce, na společné hraní her, dobrou kávu, pivko nebo míchané koktejly.

„Letošní premiérový DeliveryCamp, dříve známý pod oddělenými pojmy jako DevCamp a DXCamp, si stanovil nemalý cíl: Propojit dílčí esence našeho Delivery by Lundegaard do multi-cross-týmové události a prozkoumat tak naše silné stránky, poznat kolegy i z jiných pohledů a v jiných disciplínách a hlavně focus a prostor pro koncentraci na naši společnou myšlenku a cíl.“ říká hlavní organizátor akce Tomáš Plecháč.

Každé téma mělo svého mentálního vůdce – leadera, který dohlížel na dodržení cíle jeho týmu a také na to, aby dané téma korelovalo s cíli Lundegaardu. Zde představujeme detailnější popis vybraných témat dCampu.

REAKTIVNÍ JAVA BACK-END

Microservices s REST API už máme nacvičené. Protože jsme ale zvědavá parta, motala se nám hlavou slova jako reactive, streams, webflux a non-blocking. Když už nám to ani spát nedalo, objevil se dCamp jako ideální příležitost vyzkoušet a poměřit tyto technologie v praxi.

Připravili jsme jednoduchý ale reprezentativní scénář. Naše aplikace měla za úkol vystavit API pro nalezení volného ubytování do určité vzdálenosti od zadaných souřadnic (MongoDB Geo). Nabídnutá ubytování pak bylo možné rezervovat. Rezervace se propsala do PostgreSQL databáze a proběhlo vygenerování potvrzujícího PDF, které API společně s dalšími daty vrátilo.

Architekturu jsme navrhli jako microservices s gateway, discovery, monitoringem, orchestrační službou a potom službou na dostupnost a službou na rezervace. I architektura tak reprezentovala scénáře z praxe. Hlavním cílem bylo naimplementovat tento scénář pomocí blokujících REST klientů ve Spring Boot a proti tomu pomocí neblokujících volání webflux a reaktivních Mongo a PostgreSQL driverů a změřit výkon, prostupnost a stabilitu služeb pomocí JMeter zátěžových testů.

Obě implementace se nám během dCampu podařilo připravit, otestovat a změřit. Vyhodnotili jsme, že webflux implementace není sama o sobě rychlejší, ale je řádově stabilnější při velké zátěži a má větší propustnost. Zároveň jsme si ale ověřili, že přechod na reaktivní způsob psaní kódu a myšlení není vůbec jednoduchý. Protože nám zbylo trochu času, načali jsme i implementaci v ktor frameworku a v MicroProfile, na kterých budeme pracovat v následujících dnech a porovnáme je s původními výsledky.

VOICE UI

Jak už je z názvu patrné, v tomto týmu jsme se zabývali hlasovým ovládáním zařízení. Cílem bylo odzkoušet jednak nástroj, který umožňuje jako vstup kromě klasického klikání nebo „tapnutí“ i hlasový vstup. Zároveň jsme chtěli navrhnout a vést takovýto rozhovor.

Po vytvoření prototypu v nástroji Adobe XD jsme všechny tři navržené situace nahráli do Amazon Echo, který ve vyšších verzích podporuje i jednoduchý grafický výstup. Díky tomu jsme náš prototyp připravili i pro zobrazení jednoduchých informací.

AI TRACK

V tomto týmu bylo cílem vytvořit narrow umělou inteligenci, která předčí lidské schopnosti. Konkrétně vytvořit agenta umělé inteligence, který bude umět hrát hru Othello (nebo-li Reversi) a porazí člověka. Rozhodli jsme se pro to použít metodu, která nabývá stále na popularitě tzv. Reinforcement Learningu. Tato metoda strojového učení je založena na interakci agenta s prostředím. Ten se snaží maximalizovat kumulativní odměnu a za každou svou akci je odměněn nebo penalizován.

I když jsme si hru zjednodušili z původních 8x8 polí na 5x5, tak hra nabývá asi 870 miliard potenciálních stavů, což bylo výpočetně mimo naše možnosti. Výpočet modelu jsme pustili i přes noc, ale dosahoval asi jenom 70% úspěšnosti proti náhodně hrajícímu hráči. Čili dalším krokem bylo vytvořit agenta využívajícího hlubokou neuronovou síť (DNN). Dokázali jsme tím velmi zrychlit trénink modelu a také jednoznačně porazit náhodně hrajícího hráče (úspěšnost 90-95 % na 5x5 polí a 87 % na 8x8 polí). Kromě her s lidským agentem jsme i na závěr testovali hru umělé inteligence s tradičním minimax algoritmem. Na menším poli dokázala AI konkurovat na větším poli již ne. Tam bychom potřebovali vylepšit učení AI, tak aby se učila již z těchto pokročilých her, ale na to se již v rámci dCampu nedostalo a je to podnět k dalšímu zlepšení.

MOBILNÍ VÝVOJ REASONML

Tento tým se rozhodl posunout lásku k funkcionálnímu programování a mobilnímu vývoji zase o něco dál. V Lundegaardu jsme doposud mobilní aplikace zakládali na technologii React-native a na dCampu jsme si ho okořenili funkcionálním žargonem ve formě ReasonML. Tato technologie je totiž jen jedna z mála možností, jak vyvíjet mobilní aplikace ve funkcionálním paradigmatu. Kromě toho se nám líbila historická spojnice s Reactem jako takovým. Jeho prapůvodní verze byla napsána v Ocaml (ReasonML je jeho alternativní syntaxí).

Pro začátek jsme si dali za cíl vytvořit jednoduchou mobilní aplikaci, která by kolegům v Lundegaardu pomohla s evidencí pracovních cest. Již během prvního dne jsme zjistili, že nás čeká spousta práce a studia. Kromě samotného jazyka bylo potřeba nastudovat a integrovat frameworky na řešení obecných problémů, jako je samotné UI, formuláře nebo state management. Zjistili jsme, jak využít překladač BuckleScript k interoperabilitě s JavaScriptovým, respektive Reactím, ekosystémem. Díky tomu většinu knihoven určených pro React-native je možné použít i v ReasonML světě.

Vedle mobilní aplikace vzniklo restové API pro generování dokumentů nutných k evidenci pracovních cest. Zde jsme se rozhodli jít již prošlápnutou cestou Node.js. Příjemné prostředí statku Vletice a jeho okolí nám dodalo spoustu chuti do dalších projektů s ReasonML.

MOBILNÍ VÝVOJ FLUTTER (MEETING COSTS APP)

Obdobně jako druhý mobilní tým jsme se rozhodli prozkoumat alternativu k preferovanému React Native. Vydali jsme se ale úplně opačným směrem a zvolili technologii Flutter poháněnou objektovým Dartem, protože ve vývojářských kruzích poslední roky rezonuje a jde o hlavní "konkurenci" pro RN. Z předchozích průzkumů jsme navíc věděli, že Flutter vyniká právě v oblastech, kde má RN největší nedostatky.

Pro průzkum jsme si vymysleli jednoduchou aplikaci na počítání nákladů na meetingy. Ta umožňuje zadávat meetingy s počtem účastníků a podle průměrné MD rate v reálném čase zobrazuje vynaložené náklady. Jako velmi jednoduchý back-end jsme použili firebase, pro který má Flutter skvělou podporu (obojí technologie Google) a nám tedy umožnil s minimem času implementovat rychlou databázi s obnovou dat v reálném čase pomocí websocketů.

Aplikaci se nám nepodařilo dotáhnout k naší úplné spokojenosti, ale rozhodli jsme se, že ji nenecháme umřít a dotlačíme ji až ke skutečnému releasu do storů.

Závěrem můžeme říci, že ve Flutteru je velmi rychlá práce s UI – za jeden den se nám podařilo poskládat základní view aplikace. Animace fungují výrazně lépe než v RN. Díky InteliSense většina kódu vznikla pouhým zmáčknutím Enteru, ale obecně je Dart trochu nepřehledný a shodli jsme se, že bychom v tom nechtěli udržovat velký projekt. U mobilní appky toto však nemusí být tolik podstatné.

MACHINE LEARNING - TOOL EVALUATION

Misí tohoto týmu bylo zanalyzovat, případně vyzkoušet, technologie umožňující automatizaci či zjednodušení práce s Machine Learning modely.

Shrnutí: Aktuální situace rozděluje prozatímní technologická řešení do následujících kategorií:

  • Komplexní řešení postavené na Kubernetes, případně rovnou placené služby (aktuálně nezajímavý segment, řešící často zpracování obrazu nebo jsou dané technologie užitečné při big data machine learning problémech)
  • Pipeline svázané pouze s jedním algoritmem či ML knihovnou (vendor lockin)
  • Řešení užitečné pouze na menší segment naší problematiky (model versioning, ML prediction přes REST)

V rámci evaluace jsme provedli otestování open source produktu MlFlow. Řešení aktuálně nabízí pestrou podporu pro nasazování modelů různých projektů (H2O, TensorFlow, PyTorch ..) a flexibilní zápis metrik či artefaktů pro jednotlivé modely. V rámci testování jsme provedli testovací use case a práci s metrikami a registrací artefaktů. Tato technologie by v rámci projektu FastAI mohla řešit historické zápisy při tvorbě a tréninku modelů pro jejich znovunatrénování a zpětnou analýzu. Technologie sama o sobě je poměrně jednoduchá a nepřináší do projektu přílišnou komplexitu. Zároveň nabízí flexibilitu a vyžaduje přípravu ze strany týmu pro její adopci (tvorba modelů musí s užitím MlFlow počítat).

Závěry: MlFlow neřeší celý problém s nasazováním ML modelů, avšak jednoduše a elegantně nabízí jejich verzování a historický pohled na jejich tvorbu (hyper-parameter tuning).

SASSDOC - AUTOMATICKY GENEROVANÝ DESIGN SYSTÉM

V tomto týmu si kodéři vzali za úkol prozkoumat automatizovanou dokumentaci pro stylování SassDoc. Cíl byl jednoduchý: zprovoznit a upravit SassDoc pro potřeby našich projektů, kde bude sloužit jako centralizovaný zdroj informací pro úpravu a údržbu UI komponent. Kvalitní a systematická dokumentace pak není jen vodítko pro vývojáře, ale může sloužit i jako solidní základ pro design systém.

SassDoc není ve světe front-endu žádnou novinkou. No codebase a architektura SassDocu dokáže rozšířit již kvalitní nástroj pro podrobnou dokumentaci projektu na automaticky generovaný (technický) design systém. Jednoznačně nás překvapila jednoduchost v škálovatelnosti celého SassDoc-u a spousta možností zobrazení dokumentace. Závěrem můžeme konstatovat, že cíl byl splněn, pivo bylo vypito a Slávka vybojovala remízu s Barcou ... deliveryCamp jako vínko. 😊

Tomáš ještě závěrem dodává: „V duchu neformální atmosféry, dobrého jídla, inspirativního pití, venkovského prostředí a díky entuziasmu, se kterým se kolegyně a kolegové zhostili svých rolí, se nám, mohu slovem organizátora konstatovat, cíl podařilo nejen splnit, ale i předčit. Společně se tak těšíme na další ročník 2020.“

Máte zájem s námi spolupracovat?

Pošlete nám svůj kontakt. Rádi se vám ozveme zpět.

Kontaktujte nás