Zpět na blog
Tipy a triky

Nejvhodnější software pro editaci videa (část I.)

Katarína Kučáková
17.04.2019
7 minut čtení
Nejvhodnější software pro editaci videa (část I.)
Víme, že v nabídce dostupných softwarů je někdy obtížné se orientovat a vybrat si ten, který bude našim potřebám vyhovovat nejvíce. Toto dilema neobchází ani téma editování videí. V článku ti proto představíme 3 programy, ze kterých si budeš umět vybrat i jako odhodlaný začátečník.
Které to jsou?

Premiere Pro CC 

Premiere Pro z dílny Adobe je zřejmě nejpoužívanějším softwarem používaným pro střih a editaci videí. Pod střechou Premiere Pro prošly takové filmové blockbustery jako Deadpool, Avatar nebo Gone Girl. Je určen pro současné a budoucí profesionály, náročné youtubery a pod. To ovšem nemusí odradit ani nezkušené editory. Pokud jsi začátečník, zřejmě se ti bude zdát používání Premiere Pro dost náročné, obrň se však trpělivostí k překonání těžkých začátků a nebudeš se ho chtít vzdát. Možná ale přece. Důvodem je vyšší cena, software si totiž můžeš koupit jen formou předplatného na časově omezené období, než jsme zvyklí u všech Adobe dětí. V rámci ročního plánu si tak Premiere Pro pořídíš za 23.99 Eur/měsíčně. Výhodou je neustálá aktualizace softwaru, příliš drahé to však bude pro rekreačního uživatele Premiere Pro.

A v čem je Premiere Pro tak výjimečný? Adobe Premiere Pro je dostupný ve verzích pro Windows a Mac OS X, obrovskou výhodou je jeho možné propojení s Adobe sourozenci, kterými jsou např. Photoshop, After Effects nebo Audition sound editor. Flexibilní timeline umožňuje práci na různých elementech videa, jako jsou vrstvy, zvuk, text a obraz, což oceníte při komplexnějších nebo týmových projektech.

Díky preciznímu color gradingu budeš umět přivést svá „syrová“ videa k životu použitím barev, včetně kalibrace bílé barvy a nastavení jasu pro různé světelné podmínky. Software navíc inteligentně analyzuje barvy vybraných klipů a aplikuje na ty požadované. Potěší tě nekonečné možnosti animací, Premiere Pro nezapomíná ani na kvalitní funkce pro zpracování zvuku.

Exportování souborů se může u Premiere Pro jevit jako zdlouhavější, export videí však umíš přizpůsobit tomu, zda je určen pro mobilní obrazovky nebo plátna kin. Pokud tedy znáš svého diváka, budeš umět optimalizovat videa jako nikdy předtím.

Adobe Premiere Rush 

Uživatele sociálních sítí určitě nadchne nová aplikace pro střih a úpravu videa,
kterou je Adobe Premiere Rush. Tato appka výrazně usnadňuje přechod od snímání k editaci videí a jejich sdílení na sociálních sítích. Videa v něm upravíš jednoduše na jakémkoli zařízení, svůj projekt můžeš například začít stříhat v mobilu a dokončit na počítači.

Adobe Rush poskytuje základní možnosti pro úpravu zvuku a obrazu, náročným uživatelům však postrádají pokročilejší funkce. Přesto se jedná o revoluční appku, ve které přeměníš svá amatérská videa na vizuální a zvukový zážitek. A to kdekoli. Úžasný nástroj pro generaci youtuberů, vloggerů nebo prostě lidí, kteří chtějí udělat hezká videa, ale nemají čas učit se náročné editovací programy. Všechny podstatné nástroje pro střih a editaci videí totiž Adobe zabalil do jedné appky.

Jelikož se jedná produkt z rodiny Adobe, uživatel musí počítat s předplatným. Měsíčně tě appka vyjde na 11,99 Eur, možností je vyzkoušet si bezplatně Premiere Rush CC Starter Plan s neomezenou funkčností na neomezeném množství projektů, exportovat ti však dovolí maximálně tři z nich.

Final Cut Pro X 

Dalším z kvalitních střihačských softwarů je Final Cut Pro. Ten je ovšem dostupný pouze pro Mac zařízení, což okamžitě eliminuje velkou část potenciálních userů. Pokud si ale uživatelem jablíčkového zařízení, Final Cut Pro je tím ideálním softwarem.

Jedná se o rychlý (a zřejmě i nejrychlejší) a intuitivní software, který bude vyhovovat všem tvým editorským potřebám. Velkou výhodou Final Cut je jednorázová platba za jeho užívání, nemusíš tak platit „výpalné“ jako u Adobe produktů.

Uživatelské rozhraní Final Cut je nastaveno způsobem dávajícím smysl i uživateli, který software otevřel poprvé. Možnosti úprav jsou v logickém pořadí a konkrétní nástroj tak budeš umět najít, aniž bys zuřivě klikal na nesprávné nástroje ve snaze najít ten požadovaný.
Vytvoříš v něm i složité animace, zvukové a vizuální efekty a nabízí snadný přístup k pluginům. Na Final Cut budeš milovat jeho jednoduchý a přehledný design a inovativní časovou osu, která zajišťuje synchronizaci mezi jednotlivými stopami. Silnou stránkou softwaru je úprava zvuku.

Při importování souborů máš možnost náhledu videí, čímž se vyhneš zdlouhavému nahrávání souborů, které vlastně ani nepotřebuješ. Bezproblémový je i export a renderování, nahrávání souborů. sociální sítě se děje v reálném čase, nemusíš tak čekat na exportování souboru, jeho uložení do počítače a opětovné nahrávání.

Závěr 

Tak jak určit vítěze tohoto battle? Univerzální odpověď neexistuje, záviset to bude na tvých editorských potřebách, zkušenostech, profesionálním využití a podobně. Všechny důležité otázky jsou zodpovězeny, výběr je tedy jen na tobě!

Learn2Code má pro tebe i nabídku online kurzů k uvedeným editorům, abys uměl z kteréhokoli z nich vytěžit maximum:

Pokud chceš být profi user, pro kterého bude editování videí víc, než jen hobby, klikni na:
Ak vlastníš Mac a hľadáš kvalitný a cenovo dostupný editor,nájdeš sa tu: 
Ak si vlogger,youtuber a chceš rýchly a jednoduchý editovací nástroj, toto je pre teba: 

V pokračovaní sa pozrieme na ďalšie z rady video editorov, ako sú Adobe After effects, DaVinci resolve, Sony Vegas a iné.. 
Katarína Kučáková

Ako čerstvá posila tímu Learn2Code ti budem na blogu prinášať nové články, prevažne zo sveta IT.

Mohlo by tě zajímat

Java nejnovější verze (Java 9): příkazový řádek JShell (2. část)
Tipy a triky
21.03.2019
Skillmea

Java nejnovější verze (Java 9): příkazový řádek JShell (2. část)

Java příkazový řádekJShell Command Line je nástroj, kde můžeme zkoušet spouštět kód, aniž bychom museli vytvořit novou třídu s main metodou.[Image]JShell spustíme z bin adresáře, kde máme nainstalovanou jevu jdk ve verzi 9 a více. Při učení se preferuje použít verbose mód jshellu, což nám poskytne co nejvíce zpětné vazby při práci s konzolí. jshell –v Pokud jshell spustil bez –v můžeš jshell vypnout s příkazem /exit a pak spustit znovu s –v nastavením. Nyní můžeš zadávat výrazy. První způsob je zadeklarovat proměnnou s hodnotou a následně hodnotu vypsat:[Image]Nebo můžeš rovnou napsat výraz, který se vyhodnotí a výsledek se zapíše do proměnné, která obdrží pořadové číslo.[Image] Je možné deklarovat metody. Při psaní příkazů, pokud jshell zjistí, že příkaz není ukončen, například si napsal kadeřavou závorku a zmáčkneš enter, tak se vytvoří nový řádek na jehož začátku budou speciální znaky ...> což znamená, že pokračuješ v psaní kódu a výraz se ještě nevyhodnotí.[Image] Metodu pak voláš klasicky:[Image] Pokud bys chtěl přepsat metodu, respektive co dělá uvnitř, tak ji umíš napsat znovu a ona se přepíše a platná bude poslední napsaná. Lze také přepsat typ proměnné. Pokud na začátku bude x číslo, tak později může být String.[Image]Pod výpisy máme vždy i poznámky o tom, co se děje na pozadí. Například, že proměnná x byla nahrazena za String. Můžeš napsat metodu, která uvnitř používá proměnné nebo metody, které ještě nebyly definovány. Fungovat budou až když všechno zadefinuješ. Příkazem /list si zobrazíš kód, který jsi napsal. Každý vstup má číslo, což představuje id vstupu. Tyto id slouží i při výjimkách. Napište si příkaz, který spadne a vypíše se výjimka.[Image]Po výpisu /list zjistíme co znamenají čísla ve výpisu. Za prvé tam máme: at divide (#15:2), což znamená, že chyba nastala na příkazu s id 15 a řádku 2 toho příkazu. Za druhé at (#16:1) je další místo, kde se metoda jmenovala – klasický stack trace, ale s odkazem na /list výpis.[Image]Jshell nabízí také možnosti k doplnění, když stiskneme tab. Pokud do konzole napíšu Sy a zmáčknu tab, tak mi nabídne možnosti. Pak napíšu-li System. a zmáčknu tab, tak mám další možnosti vypsány. A tak dále.[Image]Zde se dostáváme k tomu, že umíme používat klasické dostupné api. Jako například String metody. V konzole jsem napsal prázdný String tečku a stiskl tabulátor.  [Image]Pokud některé třídy nejsou dostupné, tak je umíme importnout. Při psaní umíme typu stiskneme Shift + Tab a pak písmeno i, chceme-li importnout. Potom máme možnost udělat nic nebo importovat.[Image]Do shellu umíme psát i shell specifické prkazy. Setkali jsme se už s /list. Existují i další, například /methods pro výpis dostupných metod, /vars pro výpis dostupných proměnných, nebo /list –all pro výpis všeho i importů i chybně zadaných příkazů. Všechno, co jsme napsali, úspěšně si umíme uložit do souboru pomocí příkazu /save nazevSouboru.txt. Tento soubor je uložen ve složce bin, kde jsme spustili jshell, pokud nezadáme jinak. Znovu umíme tento program otevřít pomocí /open a název souboru. I u těchto příkazů funguje doplňování po stisku tabulátoru.[Image]Je možné psát zkratky příkazů, jsou-li ty zkratky unikátní. Jediný příkaz, který začíná na písmeno l je dopis, tedy lze napsat /l. Totéž platí i pro příkazy pro /l pokud dáme pomlčku a tab, tak dostanu možnosti. Příkaz, který začíná na a je jen jeden tak můžu napsat /l –a místo /list –all.[Image] Tento příkaz jsem spustil nad čistou novou jshell, tak si můžeme prohlédnout, co je importováno jako default. Přiblížili jsme si základní možnosti nastavení příkazové řádky JShell, je jich ale daleko více. Pokud máš zájem se do této problematiky "zavrtat" hlouběji, můžeš si prohlédnout kompletní tutoriál.  Ptáš se „proč Java“? Java je jeden z nejpoužívanějších programovacích jazyků na světě. Pokud se o Javu zajímáš (je jedno, jestli jsi začátečník, nebo už programuješ), připravili jsme pro tebe mnoho kurzů.
Jak se nepředávkovat návody
Tipy a triky
10.02.2019
Lubo Herkoo

Jak se nepředávkovat návody

Tak. Rozhodl ses naučit programovat (na learn2code jsi správně!). Je jedno, jestli chceš být Web Developer (FrontEnd, BackEnd), chceš se vzdělávat v konkrétním jazyce (PHP, JavaScript, Java, C#), nebo ses ještě nerozhodl, a chceš se jen naučit programovat. I když kniha má své kouzlo, můžeš ji číst i elektronicky, s videem to však jde nejrychleji. Tvoji rodiče si při pohledu na Tebe možná myslí, že mrháš časem, Ty však víš, že investuješ do sebe. Správně! Nad kurzy můžeš strávit dlouhé hodiny. Některé z nich mají i více modulů. Každý má však i svůj konec. Záměr autora kurzu přece nebyl získat sledovanost pro jeho videa, ale chtěl tě něco naučit. Možná ses už ocitl v tom začarovaném kruhu, kdy po ukončení jednoho kurzu hledáš hned další, který tě posune na vyšší úroveň. A pak další a další.. Na vyšší úroveň však už tutoriály a přepisování kódu z obrazovky nestačí. Ani jednoduché zadání lektorů z video kurzů nejsou dostačující. Na vyšší úroveň je třeba praxe, je třeba tvořit, pracovat na projektech, vytvářet portfolio.[Pokud se chceš opravdu posunout v programování vpřed, pusti se do zajímavého projektu.] Portfolio programátoraV zajímavém CV nemusí být mnoho projektů. Ten, kdo ho bude číst ví, jestli Tvé portfolio obsahuje zajímavé projekty, kde ses setkal s nějakými výzvami. Při absolvování kurzů si možná vytvořil jednoduchou aplikaci pro správu poznámek v Markdown formátu. Nebo sociální síť, Twitter podle tvé chuti. Všechno jsou to však projekty, které každý zná a ví, že najdeš kopec zdrojů jako takovou aplikaci napsat a tvorba takového projektu byla jen jakýmsi light fitness pro tvou hlavu. Nejdůležitější na tom však je, že ty projekty nejsou tvé. Tvůj projekt přece začíná prázdnou složkou, možná vytvořením index.html souboru, pokračuje nekonečným Google hledáním řešení tvých front-end nebo back-end problémů, implementacemi tvých vylepšení, tvých řešení, testů a refactoringu tvého kódu. V repozitáři vidět, jak dlouho jsi na projektu pracoval a jak se projekt vyvíjel. Při práci na projektech nestojíš na jednom místě, ale tvoříš, učíš se a rosteš.[Při práci na projektech nestojíš na jednom místě, ale tvoříš, učíš se a rosteš.] Na čem tedy začít makat?Každý programátor si dobré nápady na aplikace chrání. Návštěva programátorského fóra s otázkou typu “Nemáte náhodou nápad na nějaký zajímavý projekt?” bude spíše cílem posměchu než zdrojem nápadů pro tvé projekty. Nezoufej, mám pro Tebe několik rad, jak svůj mozek nenechat oddychovat příliš dlouho. Projekty jsem nevymyslel sám, většinou jsou to projekty inspirované stávajícími aplikacemi nebo všeobecně známá zadání. Přidal jsem k nim však také odkazy na dokumentaci, aby si netrávil čas hledáním kde a jak začít. Některé projekty možná nekorespondují s tvojí ideovou představou a mohou být méně zajímavé, když se však rozhodneš na něm pracovat získáš hned několik výhod: • Nestojíš na jednom místě, ale tvoříš, učíš se, rosteš, • setkáváš se s problémy (věř mi, bude jich čím dál tím méně), na které hledáš řešení, • objevuješ nové způsoby řešení problémů, tvoje stará řešení už nestačí, nebo jsou neefektivní. Level 1 - jednoduché projektyLunch picker • Taková appka již existuje, ale udělej vlastní verzi. Podstata je, že vždy když se neumíš rozhodnout, kam s kámoši půjdeš na pivo, nech to na výpočetní sílu. • Zadanie môže mať dve úrovne: První úroveň je, že databázi míst na „zábavu“ si vytvoříš sám a appka náhodně vybere některou z nich. Druhá úroveň by byla, pokud použiješ některé stávající API (Google Reviews), které tě umí lokalizovat a databázi získáš odtamtud. Collection tracker • Publikuj svou sbírku "čehokoli" ve formě katalogu. Promysli strukturu každé položky, zkus je kategorizovat, implementovat vyhledávání. Jednoduchý projektík o něčem, co tě skutečně baví. • Zadání může mít dvě úrovně: První ve formě jednoduché MVC aplikáce s Bootstrapom, napsaná v Laraveli nebo RubyOnRails. Větší skiller si může troufnout navrhnout API a design implementovat v některé JS library - VueJS, React.  Spoiler blocker pro články • Znáš to – píšeš recenzi některého oblíbeného filmu nebo knihy a nechceš čtenáře tvého textu nepříjemně překvapit vyzrazením děje, nebo klíčové informace. Podobně jako fungují "Zobrazit více" odkazy, můžeš takovou informaci ukrýt i pod "Spoiler alert" odkaz. Spoiler v textu můžeš oddělit pomocí data atributu pro tvůj <p> element: <p data-spoiler="true">Spoiler text...</p>. • Zadání může mít dvě úrovně: První ve formě jednoduchého inline javascriptu, který spustíš někde na konci svého textu pomocí <script> tagu. Druhá úroveň ve formě malé knihovny s využitím Module Pattern, kterou může použít ve svém Wordpressu kdokoli. Tax forecaster • I když politici se nás snaží přesvědčit, že si zasloužíme jistoty, jedinou jistotou v životě jsou daně. Navrhni nějakou jednoduchou appku, která bude sbírat částky tvých freelance faktur na základě vzorce, který zjistíš online (a naučíš se přitom i proč platíš tolik na daních). • Zadání může mít dvě úrovně: První úroveň je samotný jednoduchý výpočet – zadáš číslo a dostaneš hodnotu, kterou zaplatíš státu. Druhou úrovní může být databáze s historií tvých FA a implementace grafů, kde můžeš s pomocí knihovny D3.js vylíčit pěkné reporty, kolik jsi vydělal a jak se tvůj výdělek vyvíjel. Pokud tě vystrašila dokumentace D3.js, můžeš se zkusit pohrabat v knihovnách, které používání D3js zjednodušují. FlashCard generator • Pokud jsi ve stádiu učení (co bys měl být neustále) a snažíš se zapamatovat si některé důležité informace, koncepty nebo cokoli, osvědčená technika pamatování si věcí jsou FlashCards. Navrhni appku, která si z databáze nebo JSON objektu vybere pole dvojic, kde prvním prvkem dvojice bude nějaký stručný popis a druhým prvkem bude informace, kterou si máš zapamatovat. Zde je inspirace. • Zadání může mít dvě úrovně: První je implementace, jakou použili v ThoughtBot – tedy informace, kterou se snažíš naučit se jen objeví pod heslem. Druhou úrovní může být využití CSS pro zajímavou animaci, aby to vizuálně vypadalo jako opravdové „otočení karty“. Level 2 - středně náročné projektyBring your umbrella • Pokud nestíháš ráno sledovat počasí, automatizuj to. Napiš appku (nejvíce se asi hodí mobilní appka, ale užitečná může být i webová aplikace), která tě lokalizuje as využitím API ti připomene, aby sis nezapomněl vzít sebou deštník - v okolí tvé lokality bude totiž pršet. Webová appka ti může poslat e-mail oznámení. • Zadání může mít dvě úrovně: První může být aplikace bez grafického rozhraní. Druhou může být plnohodnotná weather appka přizpůsobená tvým potřebám a grafickým nárokům. Music suggestion app • Spotify má také své API. To můžeš použít k vytvoření seznamu skladeb, který budeš tvořit na základě poslouchaných skladeb, jejich žánru a jiných dostupných dat. Takhle získáš data o skladbě, kterou uživatel právě poslouchá. Tu je dokumentace, jak pracovat s playlistem. Expense tracker • Ve formě mobilní appky nebo webové aplikace můžeš vytvořit také svůj tracker příjmů a výdajů. Jejich kategorizace a kreslení grafů by mělo být samozřejmostí. Pokud se ti podaří vyřešit problém manuálního zadávání bločků, dej mi vědět – do takové aplikace rád zainvestuji. V Datamolino už vědí jak na to. • Největší challenge u tohoto projektu je asi UI/UX – aplikace by se mohla učit mé zvyky a inteligentně mi podsouvat data (kategorizaci, tagy) podle historie mých nákupů při vytváření jednotlivých položek. Na základě těchto tagů a kategorií mi oznámit, kde bych mohl příště ušetřit. Downtime tracker • Pokud máš oblíbený web, nebo plánuješ několik svých projektů, můžeš testovat, jestli náhodou tvé aplikace nemají nějaký problém. Jednoduchým scriptem přistoupíš na URL své aplikace a pokud skript nevrátí HTTP Response 200, tak tě tracker notifikuje emailem, že se něco děje. • Zadání může mít dvě úrovně: První úrovní může být notifikace emailem. Druhou úrovní může být notifikace pomocí SMS brány (Twilio), nebo web hook do tvého Slacku - pokud používáš slack. Level 3 - náročnější projektySlack bot • Znáš-li Slack a inspiruje tě automatizace, programování botů je nyní in. Některé vývojářské týmy denně absolvují "standup" - odpoví na jednoduché otázky týkající se aktuálního projektu/zadání (na čem pracují, v jakém jsou stádiu, zda se na něčem zdrželi a podobně). S pomocí Slack API můžeš vytvořit jednoduchého bota, který kontaktuje vývojáře z tvého týmu a zeptá se jich pár otázek. Jejich odpovědi můžeš sesbírat a vyhodnotit v jedné zprávě, kterou odešleš do #dev kanálu. Microlearning app • Denně bys měl věnovat nějaký čas svému vzdělávání – abys jako programátor rostl. Pokud se učíš například React nebo VueJS - můžeš zkusit použít (nebo napsat vlastní) web scrapper a získat tak jednotlivé sekce dokumentace. Denně ti tvoje microlearning aplikace může poslat jednu sekci/stránku z této dokumentace e-mailem ke studiu. Web scraper • Najdi svůj oblíbený e-shop a zkus vytvořit vlastní databázi jeho produktů, kategorií spolu s obrázky. Web scraping je zajímavým a ne jednoduchým tématem pro programátory, protože ke každému webu, který chceme scrapovat musíme přistupovat individuálně. Hint: Před tím, než se pustíš do scrapování některé domény, zkontroluj v nazev-domeny.cz/robots.txt, zda náhodou doména nemá blokovaných některých botů. Quiz Maker • Pokud se nudíš, můžeš přispět ik efektivitě našeho školství. Když jsem učil já, učitelé používali Hot Potatoes jako jejich testovací platformu. Nebo vytištěné testy s kolonkami. Vstupem do tvé quiz platformy může být JSON, který bude obsahovat vhodně zvolenou strukturu testovacích otázek, možných odpovědí a označení správné odpovědi. • Zadání může mít tři úrovně: První může být vygenerování testu z holého .json souboru. Druhou může být vytvoření administračního rozhraní, kde si testující dotazy a možné odpovědi vykliká ve formuláři. Třetí úrovní může být implementace různého typu testovací otázky (jedna správná odpověď, více správných odpovědí, dopsání správné odpovědi, seřazení do správného pořadí, vytvoření správných párů, ...) Browser extension • Nastuduj jak pracují browser pluginy a zvýš svou produktivitu blogováním distraktorů. Inspirací ti může být BlockSite – výborný extension pro blokování stránek. Blokování stránek však nemusí být jediný tip na doplněk do prohlížeče. Doplňky jsou fajn pro zvýšení produktivity, tedy různé poznámkové doplňky, časovače (pomodoro), pořízení snímku z aktuální stránky a leccos možné. Programátorské výzvy - algoritmické úkolyPokud nehledáš nápad na projekt, ale raději by ses zdokonalil v řešení algoritmických úkolů, mám tu něco i pro Tebe: 1. Advent of code • Adventní kalendář programátora (každý rok obsahuje nová zadání). Obsahuje 25 zadání orientovaných na procvičování algoritmického myšlení. Ideální pro ranní probuzení mozku, některé úkoly však mohou zabrat více času. Součástí je i leaderboard, tam se já raději ale nedívám. • Zadání můžeš řešit v kterémkoli jazyce 2. Project Euler • Podobně jako Advent of Code, i toto je sbírka zadání, která jsou však už jen archivem. To ovšem neznamená, že neobsahuje dostatek zadání - je jich tam téměř 650. Při každém zadání je uveden i počet lidí, kteří zadání vyřešili. • Zadání můžeš řešit v kterémkoli jazyce 3. Daily Coding Problem • Toto je mailinglist, který ti každý den pošle jeden programátorský problém, který můžeš rozlousknout. Problémy z této banky pocházejí z pracovních pohovorů ve firmách, jako jsou Google, AirBnB, Facebook, Apple a různé jiné. Jejich obtížnost je proto někdy dosti vysoká. Pokud se ale připravuješ na pracovní pohovor, tyto úkoly ti mohou pomoci. • Nevýhodou je, že k řešením se dostaneš až když si je předplatíš. Abychom to shrnuli. Hodnota každého programátora se ukrývá v jeho portfoliu. Jsou to právě tvé vlastní projekty, které tě budou reprezentovat na pohovoru, které tě odliší od konkurence. V článku jsme ti poskytli tipy na zajímavé projekty, které obohatí tvé CV, ale především posunou tě dál, postaví před nové výzvy a překážky. A to jako dobrý programátor určitě potřebuješ.
Java persistence – JPA, Hibernate, ORM
Tipy a triky
05.02.2019
Skillmea

Java persistence – JPA, Hibernate, ORM

JPA je java persistence api specifikace. K tomu, abys mohl používat JPA ve skutečné aplikaci, potřebuješ implementaci JPA. Buď použiješ servery, které již nabízejí implementaci JPA, jako například GlassFish, nebo použiješ implementaci, kterou ti poskytuje framework Hibernate nebo EclipseLink. Pokud používáme JPA standardy, tak je v budoucnu úplně jedno, jakou implementaci JPA budeme používat. Při programování budeme používat JPA anotace, které pocházejí z balíku javax.persistence. V budoucnu můžeš nasadit aplikaci na GlassFish, který zná javax.persistence a umí s tím pracovat nebo na Tomcat s použitím Hibernate, který také zná javax.persistence a umí s tím pracovat. Co je Persistence?Pokud vytvoříš ledajaký jednoduchý objekt, co se stane? Například objekt Adresa? Vytvoří se v haldě – v paměti. Objekt může mít nasetována nějaká data – informace. Pokud se ale ztratí reference v javovském kódu na tento objekt v haldě - tak se smaže. Pokud si chceme uchovat tyto informace, tak je můžeme uložit do databáze a nejlépe, aby po vytažení z databáze měla tato data stejnou formu – tedy formu objektu Adresa. Tomu se říká, že persistujeme (uchováme stálost) objekt do databáze. Jako by tento objekt existoval i mimo java programu. Tento objekt se uchová v úložišti a znovu se vytvoří, bude-li třeba. Co je ORM?Klasické databáze jako Oracle, MySql a podobně jsou relační databáze, které mají data uložena ve formě tabulek. V jevu ukládáme data ve formě objektů, v databázi ve formě tabulek. Ale co mají podobné? V relační databázi máme sloupce, které mají názvy a v řádcích máme hodnoty. Něco jako klíč hodnota – totéž platí i pro objekty v jevu – tam máme název proměnné a hodnotu v ní uloženou. Tady přichází pod ruku ORM – tedy object relational mapping. Je to něco jako objektově relační mapování. My naše java objekty namapujeme na tabulky relační databáze. Abychom věděli, že toto pole v javovském objektu patří do tohoto sloupce.  Objekty v jevu jsou mezi sebou propojeny pomocí uložení reference na daný objekt. Například člověk má field Adresa, kde je uložena reference na objekt Adresa. Relační tabulky mají mezi sebou také vazby. Buď máme v tabulce pro člověka sloupec adresa, kde bude uložen identifikátor adresy a na základě tohoto identifikátoru najdeme danou adresu. Nebo existuje speciální tabulka, kde budou dva sloupce jeden pro identifikátor adresy a druhý pro identifikátor člověka. My pak umíme najít, jaké adresy má člověk nastaveno, nebo pro jakého člověka je nastavena daná adresa. [Image] Problém s JDBC přístupem – výhoda ORMV kurzu Java pro pokročilé , pokud jsi tento kurz viděl, jsme si ukazovali přístup k databázi přes JDBC. Co jsme udělali? Otevřeli jsme konekci na databázi, napsali jsme sql příkaz, který jsme následně poslali do databáze k provedení. Databáze nám vrátila výsledek ve formě result setu. Představ si, že máš jen 5 až 10 tabulek. Nad každou tabulkou máš například 4 různé sql příkazy - to máme přibližně 20 - 40 sql příkazů. Pokud se ti stane, že musíš změnit databázi – například změníš název sloupce v tabulce? Co musíš udělat? Musíš přepsat název tohoto sloupce na xy místech – na 20 až 40 místech – a to jsme jen v malé aplikaci – co kdyby to bylo na 100 místech?. Byl by v tom nepořádek a mohly by nastat problémy. Pokud ale použijeme ORM, tak v jevu pracujeme s naším kódem, tak jako běžně. Vytvoříme si objekty typu Clovek, nastavíme mu nějaké hodnoty. Dále si vytvoříme kolekci adres pro daného člověka. Nakonec v ORM frameworku řekneme jen persistní mi tento objekt. ORM se pak postará o veškeré uložení těchto objektů do databáze na základě mapování, které mu poskytneme. Clovek clovek = new Clovek(); clovek.setMeno("Jaro"); clovek.setPriezvisko("Beno"); Adresa adresa1 = new Adresa(); adresa1.setUlica("Nejaka 5"); adresa1.setPSC("94404"); Adresa adresa2 = new Adresa(); adresa2 = new Adresa(); adresa2.setUlica("Nejaka 5"); adresa2.setPSC("94404"); List<Adresa> adresaList = Arrays.asList(adresa1, adresa2); clovek.setAdresaList(adresaList); orm.persist(clovek); Pokud bychom nepoužili ORM, sami bychom museli napsat metodu, která nám otevře konekci na databázi, museli bychom napsat INSERT SQL příkaz pro člověka a poté i pro jeho adresy a museli bychom zajistit, abychom nastavili všude data tam, kde mají být a musíme se postarat io propojení mezi těmito dvěma objekty. Pokud ale použijeme ORM, tak se nemusíme starat o tento balast kódu, ale soustředit se zejména na to, co prodává a to je business logika aplikace. Nevýhody JDBC přístupu jsou tedy, že máme příliš mnoho SQL příkazů, velmi mnoho kopie kódu, ručně se musíme postarat o nastavení dat do správných sloupců. Výhodou ORM je, že nemusíme dělat tyto věci z předchozí věty. ORM nám umožní používat java objekty k reprezentaci relační databáze. ORM se nám postará io propojení závislostí. ORM spojí výhody relační databáze a objektového modelu v jevu plus schová veškerou komplexitu SQL příkazů. Co je Hibernate?Hibernate je ORM – object relational mapping framework, který slouží k mapování java objektů na tabulky relačních databází. Java programátoři jsou zvyklí psát kód v objektech, proč tedy potřebují další jazyk – sql – k získání dat z databáze? Hibernate na pozadí sám vytváří sql příkazy nad databází a proto nemusíme psát sql příkazy my. Pokud chceme uložit mapu objektů, například Cloveka, který má Adresu, nebo i více objektů typu Adres, tak nemusíme psát všechny sql příkazy. Stačí, když zavoláme jednoduchou metodu pro uložení objektu do databáze a hibernate se postará o zbytek. Hibernate je také implementace JPA.  [Image] Co je JPA?Zkratka JPA je Java Persistence API. Co to znamená? V jednoduchosti řečeno - je to standard. Poněkud složitěji řečeno – je to specifikace pro OR mapování a je součástí Java EE, ale můžeme ji používat i v Java SE projektech. Některé servery poskytují vlastní implementaci JPA a některé ne – v tom případě použijeme například Hibernate implementaci. Představ si, že celý tvůj kód používá věci z JPA. Nyní je na tobě, kam nasadíš svoji aplikaci. Pokud ji nasadíš na Glassfish nemusíš předělávat svůj kód, který používá JPA – Glassfish ho zná. Pokud svou aplikaci nasadíš na Tomcat, tak mu přihodíš Hibernate, který také zná JPA. Potom tvůj kód bude fungovat všude – neboť používá standardy JPA. Je možné, abychom používali jen Hibernate – tedy bychom nepoužívali nic ze standardů. Žádné anotace z javax.persistence a podobně – to ale nedoporučuji. Ptal jsem seNapadlo mě, že by nebylo od věci zeptat se kolegů developerů, co si myslí o JPA a Hibernatě. Pokud by sis chtěl přečíst jejich názory, ať se líbí – bez cenzury, cituji: Tak toto je náročné téma a navíc složité. JPA resp. ORM obecně (a tedy i Hibernate) jsou vždy složitější, než si uživatelé (tj. vývojáři) uvědomují. Výsledkem jsou často nenápadné chybičky, lazy load exceptions, které vedou k anti-patternům jako je OSIV (open session in view) nebo k výkonovým problémům (n+1 problem). Těchto problémů je typicky o to více, o co složitější je mapování – a přitom právě na řešení složitého mapování bylo ORM vymyšleno. Abychom mohli namapovat doménu do DB. K tomu se často používají i „mimojazykové“ triky jako reflection na private pole, takže objekty jsou implicitně svázány s ORM řešením, i když například. mapování je odděleno do XML namísto anotací, což samo o sobě je také nepraktické. Kromě toho mají obě hlavně implementace dost bugů na to, aby na ně člověk narazil, i když postupuje v souladu se specifikací – stačí jen chtít trosku víc a na nějaký bug určitě narazíte. Takže pak to je kličkování mezi bugy a často komplikovaná možnost vyměnit ORM providera. Co se mi na ORM líbí je lepší mapování typů, možnost customizovat mapování a podobně. Proto používám JPA i na jednoduché mapovačky namísto JDBC. Navíc s JPA používám řadu Querydsl, které je lepší/intuitivnější, než JPA standardní Criteria API. Hibernate používám dlouho ale po pravdě řečeno nikdy jsem se moc nezamýšlel nad výhodami. Zatím jsem neměl výraznější problém, který bych neuměl vyřešit, případně nějak obejít. Plusy : - snadno se provádí mapování do DB s anotacemi i pro začátečníka bez velkých znalostí databáze, zároveň ale bez znalosti DB může být mapování neefektivní - je open source, takže pokud potřebuji, umím podívat zdrojáky jak funguje Minusy : - asociace OneToOne fetch=lazy nefunguje Na používání Hibernate/JPA (celkově ORM vrstvě) se mi líbí : A) Abstrakce od fyzického datového modelu. Vývoj nad doménovým/logickým (entitně-relačním datovým modelem) - blíže k byznys vrstvě. Čili zjednodušené práce s objekty namísto tabulek. B) Možnost využívat různé pokročilejší techniky získávání dat (např. Spring Data JPA, ale také zjednodušující Hibernate Query by example) C) Agnostické od konkrétní databázové technologie (Oracle, MySql, ...) D) Cachování a optimalizace (např. lazy loading) Nevýhody : A) Někdy náročný (až nemožný) performance tuning. B) U některých technologií pomalejší křivka učení. C) I přes používání JPA/Hibernate, je téměř nezbytné, aby developer znal i (native) SQL jazyk a jeho použití. ZávěrPodařilo se ti nahlédnout do problematiky objektově relačního přístupu k databázi a pochopil jsi, co to znamená. Pokud se však chceš dostat ještě o level dál, připravili jsme pro tebe samostatný kurz Java persistence - JPA a Hibernate . Pokud chceš ještě víc, tak klikej:👍 Více o mně:  http://www.jaroslavbeno.cz/   👍 Kurzy (java, git, maven, bootstrap, Asp .Net,):  Learn2Code moje kurzy 👍 Free kurzy:  YouTube kanál JaroslavBeno

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