Vyzkoušej všechny online kurzy na 30 dní nyní v akci -50%
Akce
Zpět na blog
Vzdělávání

Agilní vývoj - úvod do problematiky

Skillmea
10.05.2021
5 minut čtení
Agilní vývoj - úvod do problematiky

Co je agilní vývoj? 

Agilní metodiky pro řízení vývoje software jsou takové metodiky, které využívají agilního přístupu, tedy pružně reagují na změnu, průběžně rozvrhují práci v průběhu vývoje a ověřují výstupy s uživateli. Agilní metodiky obsahují základní principy, kterými by se měl úspěšný projekt vývoje software řídit. Proces vývoje je díky agilnímu přístupu postaven na týmové spolupráci, otevřené komunikaci týmu, zapojení zákazníka a celkové flexibilitě a otevřenosti změnám.

Využití agilních metodik pro vývoj softwaru v praxi: Agilní přístup k vývoji se uplatňuje především u složitého, komplexního nebo inovačního softwaru, u kterého je velmi obtížné sepsat detailní požadavky na začátku projektu. Ty se postupně upřesňují nebo tvoří průběžně na základě zkušeností s prototypy z jednotlivých iterací vývoje na základě zpětné vazby od uživatelů. Agilní metodiky jsou zaměřeny na efektivnost práce, kvality výsledků a spokojenost uživatelů. Nesnaží se potlačovat změny oproti původnímu plánu, ale naopak je pro ně charakteristické upřesňování a přizpůsobování výsledného softwaru.“ (zdroj: managementmania.com)

Následně když víme, že budeme používat agilní vývoj, potřebujeme nějaký tool – nástroj, kde budeme řídit úkoly. Jedním z nejznámějších nástrojů je Jira.

Agilní přístupy a metodiky

Agilních přístupů a metodik je mnoho. Záleží, co v projektu potřebujete. Nejznámější metodika je Srum. V Jiře si umíme zvolit zejména mezi Scrum a Kanban. Co vybrat? Záleží na projektu. Ve firmě budeš pravděpodobně používat Srum. Jaký je rozdíl?

Kanban je o hlavně o vizualizaci práce. Kanban používá kolonky, které představují různá stádia vývoje. Vezmu si roli – je přidělena. Daný člověk na ní začne dělat - je v kolonce in progress (pracuje se na ní). Poté je úloha posunuta na test nebo dokončena. Kolonky si můžete přizpůsobit. Zde si o tom můžeš přečíst obšírněji.

Scrum týmy pracují ve stanovených intervalech zvaných sprinty. Sprint je přibližně týden nebo dva. Během sprintu pracují lidé na úkolech, které jim byly přiděleny na začátku sprintu na takzvaném plánování sprintu. Srum vede jedna osoba a tou je takzvaný Srum master. Během Srum vedení týmu se cíle projektu upravují – sbírají se informace od klientů, od uživatelů a poté se aplikují změny. Tady si o tom můžeš přečíst obšírně.

Jira

Jira je zdarma pro jednoduchý projekt a tím. Na této stránce si umíš založit svou Jiru. Jira je tool pro management úkolů a tyto úkoly musí být přiřazeny do projektů.
Tedy jako první krok je vytvoření projektu. Jsi přihlášen v Jiře a v pravém horním rohu budeš mít tlačítko na vytvoření projektu.
Vytvoríš si projekt:
Jako Template je vybrán Kanban. Toto umíme změnit po stisku Change template.
Co zvolíš je na tobě. Pojdu si ukázat Scrum. Vyberu Scrum a vytvořím projekt.
Momentálně nemáme žádný sprint. Musíme jej vytvořit, abychom začali vývoj. Jdeme do Backlogu, což je místo, kde máme vytvořené úkoly.
Bez úkolů nebude sprint. Vytvoř si úkoly. Máš na výběr několik míst, kde vytvořit úkoly, ale princip je stále tentýž – mít úkoly, na kterých se může pracovat.
Když máme vytvořené úkoly, tak umíme spustit sprint.
 
Vytvořil si sprint. Nyní je prázdný. S týmem se domluvíte, co se má udělat a dané úkoly se přetáhnou z backlogu do sprintu. Dohodli jsme se, že uděláme dva úkoly a jeden ponecháme v backlogu. Následně spustíme sprint.
Při spuštění určíme, jak dlouho má sprint probíhat. Nyní je sprint aktivní a umíme si prohlédnout nástěnku sprintu. V této nástěnce vidíme, v jakém jsou úkoly stádiu.
Samozřejmě nesmíš zapomenout daný úkol někomu přidělit. Otevřeš si úlohu a assigneš (přidělíš) ji někomu.
Daný uživatel si umí vypsat jen jeho úkoly v daném sprintu.
Autorem článku je Jaroslav Beňo.
Skillmea
🥇 Sme jednotka v online vzdelávaní na Slovensku.

Na našom webe nájdeš viac ako 600 rôznych videokurzov z oblastí ako programovanie, tvorba hier, testovanie softwaru, grafika, UX dizajn, online marketing, MS Office a pod.

Vyber si kurz, ktorý ťa posunie vpred ⏩

Mohlo by tě zajímat

O zlatém řezu a jeho aplikacích v designu
Vzdělávání
11.04.2021
Ľudovít Nastišin

O zlatém řezu a jeho aplikacích v designu

V designu jako takovém je velmi důležité, aby byl výsledek práce jasný a každý mu chápal. Ať už je to ve formě zalomení textu, oříznutí fotografie nebo navržení loga. Za tímto účelem se kromě jiných pomůcek často využívá i aplikace zlatého řezu, o kterém si nyní něco povíme. Z angl. „Golden ratio“ hovoříme o konkrétním matematickém poměru, který se velmi často vyskytuje iv přírodě a designové odvětví se jím inspiruje. Zlatý řez nám pomáhá dosáhnout co nejpřirozeněji působících proporcí, tvarů či struktury. “Zlatý řez vznikl již ve starověkém Řecku” Jedná se o velmi speciální číslo - 1,618. Vychází ze známé Fibonacciho posloupnosti a jeho aplikaci můžeme nalézt iv přírodě, například ve tvaru mořské mušle či ve formaci oblaků u hurikánů. Tato posloupnost je tvořena vždy částkou dvou předchozích čísel (0-1-1-2-3-5-8-13-21-...). A právě z této sekvence odvodili už ve starověkém Řecku zlatý řez (golden ratio), aby uměli lépe vyjádřit rozdíly mezi čísly sekvence. Jak používat zlatý řez v designuAplikace zlatého řezu do designérské profese vůbec není tak náročná, jak by se mohlo na první pohled zdát. Jeho využitím můžeme vytvářet například proporcionální layouty na web. Pokud chceme navrhnout web, který má vedle prostoru pro hlavní obsah i sidebar, tak právě s využitím zlatého řezu umíme stanovit jejich přesnou šířku. Pokud by se jednalo řekněme o prostor o šířce 960px, tak prostor pro hlavní obsah by měl mít šířku 593px (960px/1,618) a sidebar šířku 367px (593px/1,618). Samozřejmě, že v praxi do toho vstupuje několik dalších faktorů (např. padding), ale logiku tohoto poměru to deklaruje skvěle.[Image] A jelikož toto číslo vychází ze sekvence nekonečného množství čísel, tak jeho opakovaným aplikováním získáme různé velikosti (délky, šířky,...), se kterými můžeme v designu pracovat a vyskládat z nich funkční a intuitivní UI. Jak jsme si již říkali, zlatý řez lze aplikovat v podstatě na všechny oblasti designu či kreativy. Ukážeme si k tomu několik příkladů. Ořezávání obrázkůPokud se jedná pouze o ořez prázdného prostoru na kraji fotografie, věc je jednoznačná. Ale pokud je třeba oříznout i samotný obsah fotografie či obrázku, situace se mění. Výsledek musí zůstat vyvážený a ty nejdůležitější věci na obrázku by měly mít své místo. Právě s tím nám umí pomoci zlatý řez.[Image] (Zdroj: industrydev.com) Typografie a hierarchie Umíme si také pomoci při výběru správné kombinace velikosti použitých fontů. Takto bude mít název, podnázev a samotný text tu správnou velikost a hierarchie mezi nimi bude okamžitě jasná.[(Zdroj: Invisionapp)] UI Webdizajn Rozložení jednotlivých elementů a ploch na webu rozhoduje o tom, jak intuitivně se bude návštěvník webu cítit. A stejně tak, jestli se mu to bude líbit. Jak jsme již dříve psali v článku, například šířka jednotlivých sloupců je díky zlatému řezu jasně stanovena.[(Zdroj: Apiumhub)] LogoA posledním příkladem je využívání zlatého řezu při tvorbě loga. Tady to možná na první pohled není až tak očividné. No věřte, že zlatý řez se zde aplikuje velmi často ai ta nejznámější loga byla vytvořena právě s jeho pomocí.[(Zdroj: Twitter, NatGeo)]Někdy jej v logu najdete jednoduše (National Geographic logo), jindy je to trošku skryté (Twitter logo). Právě v tom druhém případě bylo logo vytvářeno za pomoci série kružnic s jasně danými velikostmi. Ty pomáhaly vytvářet všechny křivky a záhyby loga, dokud z něho nevzniklo ikonické logo, které působí přirozeně a hezky. A není to náhoda. Zlatý řez je není technika, je to spíše myšlenkový proces. Vědět ho aplikovat efektivně chce svůj čas. Určitě se však vyplatí pohrát si s ním a zkoušet podle něj vytvářet nějaké layouty či ořezávat důležité fotografie. Šikovnou pomůcku v podobě spirály zlatého řezu najdeš zde.
Kotlin Raw String
Vzdělávání
19.02.2021
Skillmea

Kotlin Raw String

String je základní datový typ v programovacích jazycích. Slouží k uchování textu. Pokud chceme napsat String tak text vložíme mezi dvojité uvozovky. val cesta = "cesta";Ve většině případů je to dostačující. Co když do textu chceme nastavit cestu na soubor jako text. C:\work\tools\__test Musíme ho vložit do proměnné typu String a všechna lomítka zdvojit - escapnout. val cesta = "C:\\work\\tools\\__test";Kotlin má také pomůcku a tou je Raw String. Pro napsání textu použiji třikrát dvojité uvozovky na začátku i na konci. val cestaRaw = """C:\work\tools\__test"""Raw String nám umožňuje zapsat String na více řádků bez nutnosti spojování pomocí +. Mám text, který chci napsat na více řádků. Co musím udělat, pokud to chci v jednom Stringu? Všechny části spojím pomocí + a přidám speciální značku pro nový řádek \n. val text = "1 639,33\n" + "6 540,03\n" + "8179,36\n" + "+2500,04"U Raw Stringu jen stisknu enter pro nový řádek a pokračuji v psaní. val textRaw = """1 639,33 6 540,03 8179,36 +2500,04"""Tento způsob ale není pěkně čitelný – veškerý text mám zasazený na levou stranu, neboť nechceme abychom tam dali např. taublátor – v původním textně nebyl. Co můžeme udělat je přidat nějaké speciální značku na začátek řádku, který chci odsadit a pak řeknu, že vše nalevo od značky spolu se značkou považuji jen za odsazení textu. Přidejte značku (hocijakou): val textRaw = """1 639,33 #6 540,03 #8179,36 #+2500,04"""Nyní řekneme, že # je speciální značka pro odsazení. val textRaw = """1 639,33 #6 540,03 #8179,36 #+2500,04""".trimMargin("#") A můžeme odsadit pro lepší čitelnost: val textRaw = """1 639,33 #6 540,03 #8179,36 #+2500,04""".trimMargin("#")Nebo použijeme default znak oddělovače, což je pipe |. val textRaw = """1 639,33 |6 540,03 |8179,36 |+2500,04""".trimMargin()Nyní se tyto dva Stringy budou rovnat. println("${text == textRaw}") //truePoužití v reálné aplikaciUrčitě bys rád viděl příklad z reálné aplikace. Jedním z takových příkladů by bylo použití při psaní Android aplikace. Přesněji například při psaní příkazů pro poptávku na databázi v Room frameworku, který se používá pro zjednodušený přístup k databázím. V Room píšeme takzvané Dao třídy pro přístup k databázi. Vezměme si jeden příklad kde chci napsat SQL příkaz k vyjmutí filmů z databáze. @Query("SELECT id, movie_name, genres, directors year FROM MOVIES") suspend fun getAllMovies(): List<MovieShort>Příkaz bys rád napsal na více řádků, aby byl lépe čitelný. @Query("SELECT id, movie_name, genres, directors year " + "FROM MOVIES") suspend fun getAllMoviesInShortForm(): List<MovieShort>Nebo použiješ Raw String. @Query(""" SELECT id, movie_name, genres, directors year FROM MOVIES """)Určitě si umíš představit jak se ti zlepší čitelnost, budeš-li mít složitější select příkazy v kombinaci například s join.
Jak na vlastní Virtuální privátní server - část 1.
Vzdělávání
21.01.2021
Lubo Herko Edited

Jak na vlastní Virtuální privátní server - část 1.

Každý týden jeden blog. Takové jsem si dal předsevzetí do nového roku. Hned první týden se to nepodařilo, ale co už 🤦🏻‍♂️ . V tomto textu (nebo seriálu?) budeme řešit tvůj vlastní Virtuální privátní server (VPS). Konkrétně: • zjistíme co to VPS vlastně je a jaké jsou výhody a případné nevýhody, • zkusíme analyzovat naše potřeby a vybrat vhodné parametry našeho serveru, • VPS koupíme, nastavíme, zajistíme a připravíme pro naši aplikaci, • z GitHub repozitáře nasadíme naši aplikaci do produkce pomocí GithubActions (CI), • koupíme doménu a nasadíme SSL certifikát pomocí letsencrypt. Je to hodně práce, pome na to.[Image] K čemu mi je vlastní server?Hned na začátku si to vyjasněme: VPS je pro většinu projektů zbytečný. Při dnešních možnostech, jak svou aplikaci umíme nasadit do produkce a zpřístupnit ji uživatelům na pár kliků, je často zbytečné řešit komplikované nastavování vlastního serveru. Hlavně údržba a řešení případných problémů nám může připomenout, jak špatně jsme se rozhodli. Přesto VPS má své místo a někdy se opravdu může hodit, například: • pokud máš linux v malíčku, nebo svůj VPS už máš (jsi zkušený/á), • pokud výkon sdíleného hostingu viditelně nestačí a už neumíš svou aplikaci dále optimalizovat, • pokud nepostačují dostupné technologie sdíleného hostingu (potřebuješ doinstalovat vlastní knihovny, tooly), • pokud má aplikace extrémní nároky na výkon procesoru, velikost paměti, nebo potřebuješ ukládat gigabajty/terabajty dat, • pokud jsou data, se kterými pracuješ příliš senzitivně na to, aby byla uložena na jednom místě spolu s daty jiných uživatelů sdíleného hostingu. Asi bychom našli i další případy, specifika, kdy se hodí VPS, tyto nám však prozatím postačí. Pokud tedy spadáš do některého z kritérií, čti dále. Jaký výkon serveru potřebuji?Brzdí. Než přistoupíme ke koupi serveru bychom měli vědět, jaké jsou naše požadavky. Alespoň přibližně. Potřebujeme spoustu jader procesoru? Nebo si vystačíme s jedním, případně dvěma jádry? Potřebujeme spoustu operační paměti, nebo terabajty dat na disku? To jsou těžké otázky, ale poradím ti: • Pokud aplikace neexistuje a chceš VPS jen vyzkoušet, zvol nejlevnější server jaký je v nabídce. Zda máš 1 procesor, nebo 32 procesorů - terminál reaguje vždy stejně rychle. • Pokud je aplikace nová a neznáš její nároky, začni raději s méně výkonným a levnějším serverem. Například CPU s jedním nebo dvěma jádry a 2G RAM. Většina providerů disponuje jednoduchým škálovacím nástrojem. Pokud se zvýší nároky, pohneš v administračním rozhraní nějakým sliderem a šup, máš o dvě jádra více, případně dvojnásobek RAM - do pár vteřin. • Pokud jsi narazil na limity sdíleného hostingu, pravděpodobně znáš důvod, proč chceš vyzkoušet VPS. Nejlepší pokud si komunikoval s podporou svého providera a potvrdili, že jsi narazil na limit jejich CPU, nebo RAM. Kde koupit server?Takže, pokud víme alespoň přibližně co chceme, udělejme průzkum. Osobně mám vyzkoušených těchto prodejců VPS: • Linode, DigitalOcean, Hetzner, WebSupport Ubuntu Server a terminál bude u každého prodejce stejný. Řídit se tedy můžeme podle následujících kritérií: 1. cena 2. ještě jednou cena 3. možnosti administračního rozhraní a případného navyšování výkonu do budoucnosti 4. lokalita datového centra (co nejblíže uživatelům) Moje zkušenost V poslední době to u mě osobně vyhrává Hetzner (hetzner.de). Frajeři mají vynikající ceny (vlastní server v době psaní tohoto textu umíš získat již za 3E/měsíc) a navyšování počtu CPU a RAM je řešeno jednoduchým sliderem v administračním rozhraní. Super věc 🎉. Datové centrum můžeš zvolit relativně blízko – Falkenstein, Nemecko. TIP: V levém horním rohu změníš jazyk webu z německého na anglický. 😎 Vytvoření účtu HetznerJak se už konečně tedy dostaneme k vlastnímu serveru? Takto: 1. Vytvoř si účet na hetzner.de (klik) 2. Klikni na linku, kterou ti Hetzner poslal na email zadaný při registraci 3. V sérii formulářů vyplň své iniciály (poslední formulář vyžaduje údaje o platbě, žádná platba předem však není nutná) 4. Po vyplnění a odeslání formulářů se implicitně zobrazí formulář - nastavení tvých iniciál. Vpravo nahoře klikej na čtverečky a vyber z nabídky možnost "Cloud": Pokud máš po absolvování předchozích kroků před sebou takovou obrazovku:[Konzole cloudu Hetzner.de. je vše v pořádku.] Můj server!Už jsme blízko. V seznamu projektů (předchozí obrázek) klikni na "Default" (tento název umíš změnit přes ikonu tří teček v pravém horním rohu karty produktu) a následně "Add server".[Vytvoření nového VPS.] Parametry serveruNyní zvolíme parametry serveru. V tomto případě zvolíme nejlevnější variantu, ale některé možnosti popíšeme blíže. Parametry serveru tedy nastavíme následovně: 1. Location (umístění datového centra): Falkenstein, protože je nejblíže Slovensku. 2. Image (operační systém): Ubuntu 20.04, protože s ním umím pracovat a také existuje obrovská komunita uživatelů Ubuntu serveru, což usnadní vyhledání návodů a řešení případných problémů. Se serverem Ubuntu bude dále pokračovat i tento tutoriál. 3. Type (typ serveru): Standardní, protože nám nevadí, že spolu s naším VPS budou na fyzickém serveru běžet i jiné virutální servery. Dedikovaný typ serveru je vhodný jen tehdy, potřebujeme-li opravdu velký výpočetní výkon pro naše použití. Z dalších možností typu serveru vyberme hned první s označením CX11 a tedy 1x VCPU, 2GB RAM, 20GB SSD v ceně €2.99 za měsíc. 4. Volume (externí disk): Nevytváříme externí disk. 1. TIP: Pokud vytvoříme VPS o velikosti SSD 20GB a potřebujeme více dat, nemusíme hned měnit velikost SSD na serveru, ale můžeme připojit k serveru externí disk. Má to jednu velkou výhodu a jednu menší. Velkou výhodou je, že v případě zvyšování výkonu (např. z 1CPU a 2GB RAM na 4CPU 8GB RAM) můžeme zvolit možnost, že nechceme navyšovat i velikost SSD – tedy SSD zůstane na hodnotě 20GB. Takové rozhodnutí nám v budoucnu umožní i krok zpět a tedy snížení počtu VCPU a RAM. Takto můžeme ušetřit nemálo finančních prostředků, pokud potřebujeme zvýšit výkon VPS jen dočasně, ne natrvalo (např. pokud je aplikace přetížena jen v období Vánoc). 5. Network (síť): Nevytváříme síť, protože nevytváříme skupinu serverů, které potřebujeme mít na jedné síti (např. pokud bychom potřebovali zvlášť VPS pro webserver a databázový server). 6. Additional features (další možnosti): V případě možnosti User data nespekulujeme (zatím). To se nám může hodit tehdy, chceme-li některé činnosti automatizovat, například automaticky přidat uživatele do systému, spustit různé skripty po instalaci a podobně. Backups jsou pravidelné zálohy, což je nutnost na produkčním serveru, kde běží ostrá aplikace. Tato služba je však zpoplatněna – 20% z ceny našeho serveru. Pokud tedy vytváříš produkční server, nafurt, tak doporučuji i se zálohami. Pokud jen testuješ, tak je to na tobě 😉 . 7. SSH Key (SSH klíč): Pokud máš zkušenosti s *nix systémy, možná máš vytvořený svůj id_rsa.pub klíč. Pokud ano, tady ho můžeš použít a tak se autentifikovat při připojování k serveru. V opačném případě (a to je náš případ) ti bude zasláno heslo k root uživateli na tvůj email. Tady tedy nespekulujeme a zatím nezaškrtneme tuto možnost. 1. TIP: Povolit vzdálený přístup pro root uživatele není bezpečné a používá se pouze pro prvotní nastavení serveru (první přihlášení do nového VPS). Jedním z prvních kroků po přihlášení se do nového VPS by mělo být vytvoření vlastního uživatele, který se bude přihlašovat pomocí klíče (ne hesla) a zakázání vzdáleného přístupu pro root uživatele. To bude také náš postup. 8. Name (Název): Toto je název serveru, který je zobrazen v administračním panelu hetzner, ale iv konzole po připojení k serveru přes SSH protokol. TIP: Vzpomeň si na nějaké názvy světů, postav z tvých oblíbených počítačových her, komiksů nebo filmů 😎 . Hodně čtení kvůli pár klikům. Nastavení serveru tedy může vypadat i takto:[Nastavenie parametrov VPS.] První SSH spojení Po potvrzení nastavení chvíli počkáme na spuštění nové instance našeho VPS. Zároveň nám Hetzner doručí email s informacemi o IP adrese, na kterou se budeme připojovat a heslem pro root uživatele. Tak zkontroluj email a pojď se přihlásit na server přes SSH. Jaký program použít k přihlášení přes SSH? Pro MacOS je to Terminal nebo iTerm. V případě linuxu (jakéhokoli) je to velmi podobné MacOS - tedy opět Terminal. Uživatelé Windows mohou použít pro SSH připojení program Putty, případně nainstalovat WSL doplněk a použít WSL terminal. Napiš nám pokud se setkáš s nějakým problémem, pořešíme. Z emailu jsem se dozvěděl, že IP mého serveru je 78.47.244.57 a heslo k uživateli root je ss3PgfWnHwxUhUaKEEr9 (ani nezkoušej, server v době čtení tohoto textu již nebude existovat).[Email s autorizáciou do nášho VPS.] TerminalPříkaz ssh, který použijeme v MacOS, Linux nebo WSL terminálu má následující syntax: ssh pouzivatel@ip_servera Tedy v našem případě: ssh root@78.47.244.57 Terminál si vyptá heslo, můžeme ho jen zkopírovat a přilepit. Při zadávání hesla do terminálu se nezobrazují žádné hvězdičky ani odezva. Proto jen potvrdíme příkaz klávesou Enter. Pokud se na server připojujeme poprvé, SSH se zeptá, zda chceme server uložit do seznamu SSH serverů. Napíšeme yes a spojení se v případě správného hesla úspěšně naváže:[Image] První připojení k serveru přes SSH. Při prvním přihlášení je nutné změnit heslo uživatele root. Zadáme staré heslo a vytvoříme nové. Hotovo. Náš nový VPS server Ubuntu 20.10 je vytvořen. Co dál?V další části blogu budeme pokračovat s nastavením našeho serveru: 1. vytvoříme si na lokálním počítači SSH klíč 2. vytvoříme na serveru vlastního uživatele a nastavíme přihlašování přes SSH klíč 3. zajistíme server pomocí firewallu, fail2ban a jiných nástrojů 4. nainstalujeme a spustíme webový server (nginx) 5. nainstalujeme a spustíme databázový server (postgresql, pokud budeš potřebovat tak i MySQL) 6. nainstalujeme závislosti (git, nodejs, ...) Ve třetí části budeme řešit deploy naší aplikace na VPS: 1. koupíme doménu a nasměrujeme ji na server 2. naklonujeme naši aplikaci na server, spustíme ji pod doménou a vytvoříme k ní službu (systemd service aby se automaticky spustila při případném restartu serveru) 3. pomocí certbot nastavíme doméně SSL certifikát a zpřístupníme aplikaci pod HTTPS 4. pomocí GithubActions nastavíme continous integration tak, aby se po push do main branche spustily automatizované testy a v případě bezchybnosti se aplikace rovnou nasadí do produkce Hodně roboty máme. Ale hodně se také naučíme. Čtvrtá část není.

Nezmeškej info o nových kurzech a speciálních nabídkách