Tipy a triky

V této sekci naleznete praktické rady a doporučení, jak efektivně využívat vzdělávací kurzy přes úřad práce k získání nových dovedností. Tipy a triky jsou navrženy tak, aby vám pomohly zvládnout běžné úkoly rychleji a efektivněji. Tato kategorie je skvělým místem pro ty, kteří hledají způsob, jak se neustále zlepšovat.

Nejpoužívanější Linuxové příkazy
Tipy a triky
21.05.2022
Marián Kristeľ

Nejpoužívanější Linuxové příkazy

Když se řekne Linux, většina lidí si představí komplikovaný operační systém, který používají pouze programátoři. Není to ovšem tak, jak se na první pohled může zdát. Co je Linux?Linux je celá rodina unixových operačních systémů s otevřeným zdrojovým kódem, které jsou založeny na Linuxovém jádru. To zahrnuje všechny nejpopulárnější systémy založené na Linuxu, jako jsou Ubuntu, Fedora, Mint, Debian a další. Přesněji řečeno, nazývají se distribuce. Celosvětový tržní podíl Linuxu na desktopových počítačích je 2,49 %, avšak když se podíváme na cloudovou infrastrukturu, zde Linux dominuje s podílem přibližně 90 %. Při práci s operačním systémem Linux musíš použít shell – rozhraní, které poskytuje přístup ke službám operačního systému. Většina distribucí Linuxu používá grafické uživatelské rozhraní (GUI) jako svůj shell, hlavně proto, aby svým uživatelům usnadnila používání. Je běžnou praxí používat je při správě VPS. Jakékoliv grafické uživatelské rozhraní (GUI) je jen abstrakcí programů příkazového řádku. Například když zavřete okno kliknutím na „X“, za touto akcí se spustí příkaz. Doporučuje se používat rozhraní příkazového řádku (CLI), protože je výkonnější a efektivnější. Úlohy, které vyžadují vícekrokový proces přes GUI, lze provést během několika sekund zadáním příkazů do CLI. V tomto článku se naučíš 26 základních příkazů Linuxu, které ti jako nováčkovi nepochybně pomohou při navigaci v Linuxu. Co je Linuxový příkaz?Linuxový příkaz je program nebo pomůcka, která se spouští na příkazovém řádku. Příkazový řádek je rozhraní, které přijímá řádky textu a zpracovává je do pokynů pro tvůj počítač. Příznak je způsob, jak můžeš předat možnosti příkazu, který spustíš. Většina příkazů Linuxu má stránku nápovědy, kterou můžeš vyvolat příznakem -h. Argument nebo parametr je vstup, který dáváme příkazu, aby mohl správně běžet. Ve většině případů je argumentem cesta k souboru, ale může to být cokoli, co zadáš do terminálu. Příznaky lze vyvolat pomocí pomlček (-) a dvojitých pomlček (--), zatímco provedení argumentů závisí na pořadí, ve kterém je odešleš funkci. Nejpoužívanější Linuxové příkazyPředtím, než se podíváme na nejpoužívanější Linux příkazy, nezapomeň spustit terminál. Ve většině distribucí Linuxu lze použít klávesovou zkratku Ctrl+Alt+T. Pokud to nefunguje, příkazový řádek najdeš v části Utilities. 1. pwdPomocí příkazu pwd zjistíš cestu k aktuálnímu pracovnímu adresáři (složce), ve kterém se nacházíš. Příkaz vrátí absolutní (úplnou) cestu, což je v podstatě cesta všech adresářů, která začíná lomítkokem (/ ). Příkladem absolutní cesty je /home/username. 2. cdNa navigaci v souborech a adresářích Linuxu použiješ příkaz cd. Vyžaduje buď úplnou cestu nebo název adresáře, v závislosti na aktuálním pracovním adresáři, ve kterém se nacházíš. Například si v /home/username/Documents a chceš přejít do adresáře Photos, který je podadresářem Documents. Jednoduše zadáš následující příkaz: cd Photos. Jiná situace by byla, kdyby si chtěl přejít do zcela nového adresáře, například /home/username/Movies. V tomto případě zadáš cd a za ním absolutní cestu k adresáři: cd /home/username/Movies. Existuje několik zkratek, které vám pomohou při rychlé navigaci: • cd .. (se dvěma tečkami) pro posun o jeden adresář nahoru, • cd k přejetí přímo do domovského adresáře, • cd- (s pomlčkou) pro přesun do předchozího adresáře “Shell Linuxu je case sensitive a rozlišuje velká a malá písmena. Takže musíš zadat název adresáře přesně tak, jak je.” 3. lsPříkaz ls se používá k zobrazení obsahu adresáře. Ve výchozím nastavení tento příkaz zobrazí obsah tvého aktuálního pracovního adresáře. Pokud chceš vidět obsah jiných adresářů, zadej ls a potom cestu k adresáři. Například zadáním ls /home/username/Documents zobrazíš obsah adresáře Documents. Existují tyto verze, které můžete použít s příkazem ls: • ls -R zobrazí seznam všech souborů v podadresářích, • ls -a zobrazí skryté soubory, • ls -al zobrazí seznam souborů a adresářů s podrobnými informacemi, jako jsou oprávnění, velikost, vlastník atp. 4. catcat (zkratka pro concatenate) je jedním z nejčastěji používaných příkazů v Linuxu. Používá se k výpisu obsahu souboru na standardním výstupu (sdout). Pokud chceš spustit tento příkaz, zadej cat a za ním název souboru a jeho příponu. Například: cat file.txt. Zde jsou další způsoby použití příkazu cat: • cat povodnysubor > názevsouboru obsah z původního souboru zkopíruješ a uložíš do souboru názevsouboru, • cat názevsouboru1 názevsouboru2>názevsouboru3 spojí dva soubory (1 a 2) a uloží jejich výstup do nového souboru (3), • ke změně souboru na velká nebo malá písmena použij cat názevsouboru | tr a-z A-Z >output.txt 5. cpPro zkopírování souborů z aktuálního adresáře do jiného adresáře použij příkaz cp. Například příkaz cp skillmea_logo.jpg /home/username/Pictures vytvoří kopii skillmea_logo.jpg (z tvého aktuálního adresáře) do adresáře Pictures. 6. mvPříkaz mv se primárně používá k přesunu souborů, přestože jej lze použít také k přejmenování souborů. Argumenty u mv jsou podobné příkazu cp. Musíš zadat mv, název souboru a cílový adresář. Například: mv hello.txt /home/username/Documents. Pokud chceš přejmenovat soubory, příkaz je mv starýnázev.txt novýnázev.txt 7. mkdirK vytvoření nového adresáře použiješ příkaz mkdir — pokud zadáš mkdir Music, vytvoří se adresář s názvem Music. Existují i další příkazy mkdir: • pro vygenerování nového adresáře v jiném adresáři, použij příkaz mkdir Music/Novyadresar • použijte volbu p (parents) k vytvoření adresáře mezi dvěma existujícími adresáři, například mkdir -p Music/Metallica/Novyadresar vytvoří Novyadresar v adresáři Metallica. Pokud adresář Metalilca neexistuje, tak jej zároveň i vytvoří. 8. rmdirPokud potřebuješ vymazat adresář, použij příkaz rmdir. rmdir však umožňuje mazat pouze prázdné adresáře. 9. rmPříkaz rm se používá k odstranění adresářů a obsahu v nich. Pokud chceš odstranit pouze adresář, jako alternativu k rmdir použijte rm -r. “U tohoto příkazu musíš být velmi opatrný a vždy zkontroluj, ve kterém adresáři se nacházíš. Příkazem se vše vymaže a nelze jej vrátit zpět.” 10. touchTento příkaz umožňuje vytvořit nový prázdný soubor. Zadejte například touch /home/username/Documents/Index.html a vytvořte soubor HTML s názvem Index v adresáři Documents. 11. locateTento příkaz můžeš použít k vyhledání (locate) souboru, stejně jako příkaz k vyhledávání v systému Windows. Při použití argumentu -i spolu s tímto příkazem se nerozlišují malá a velká písmena, takže je možné hledat soubor, i když neumíš jeho přesný název. Pokud potřebuješ vyhledat soubor, který obsahuje dvě nebo více slov, použiješ hvězdičku (*). Například příkaz locate -i meeting*notes vyhledá jakýkoli soubor, který obsahuje slovo „meeting“ a „notes“, a je jedno, zda se jedná o velká nebo malá písmena. 12. findPodobně jako u příkazu locate, pomocí find se také vyhledají soubory a adresáře. Rozdíl je v tom, že k vyhledání souborů v daném adresáři použiješ příkaz find. Například příkaz find /home/ -name notes.txt vyhledá soubor s názvem notes.txt v domovském adresáři a jeho podadresářích. 13. grepDalší ze základních Linuxových příkazů, který je užitečný pro každodenní použití, je grep. Umožňuje prohledávat celý text v daném souboru. Příklad použití: grep deadline notes.txt vyhledá v souboru notes.txt slovo deadline. Řádky, které obsahují hledané slovo, se zobrazí celé. 14. sudoZkratka pro „SuperUser Do“, tento příkaz umožňuje provádět úkoly, které vyžadují oprávnění správce nebo oprávnění root. Nedoporučuje se však používat tento příkaz ke každodennímu použití, protože se může snadno stát, že dojde k chybě, pokud uděláš něco nesprávného. 15. dfPomocí příkazu df získáš zprávu o využití místa na disku v procentech a kB. Pokud potřebuješ zobrazit přehled v megabajtech, zadej příkaz df -m. 16. duPokud chceš zkontrolovat, kolik místa zabírá soubor nebo adresář, použiješ k tomu příkaz du (Disk Usage). Souhrn využití disku však namísto obvyklého formátu velikosti zobrazí čísla bloků disku. Pokud ho chceš vidět v bajtech, kilobajtech a megabajtech, přidej do příkazové řádky argument -h. 17. headPříkaz head se používá k zobrazení prvních řádků libovolného textového souboru. Ve výchozím nastavení se zobrazí prvních deset řádků, ale toto číslo lze změnit dle vlastního uvážení. Například pokud chceš zobrazit jen prvních pět řádků, zadej příkaz head -n 5 název souboru.ext. 18. tailTento má podobnou funkci jako příkaz head, ale místo zobrazení prvních řádků příkaz tail zobrazí posledních deset řádků textového souboru. Například tail -n název_souboru.ext. 19. tarPříkaz tar je nejpoužívanějším příkazem k archivaci více souborů do tarballu – běžného formátu souborů v systému Linux, který je podobný formátu zip, přičemž komprese je volitelná. Tento příkaz je poměrně složitý s dlouhým seznamem funkcí, jako je přidávání nových souborů do stávajícího archivu, seznam obsahu archivu, extrahování obsahu z archivu a mnohé další. 20. killPokud máš nereagující program, můžeš ho ukončit manuálně pomocí příkazu kill. Vyšle určitý signál nesprávně se chovající aplikaci a přikáže aplikaci, aby se sama ukončila. 21. pingPomocí příkazu ping zkontroluješ stav připojení k serveru. Jednoduchým zadáním příkazu ping google.com příkaz zkontroluje, zda se dokážete připojit ke službě Google, a také změří čas odezvy. 22. wgetPříkaz wget je velmi užitečný, pomocí něhož lze dokonce stahovat soubory z internetu. Pokud to chceš udělat, jednoduše zadej wget a za ním odkaz ke stažení. 23. topPříkaz top zobrazí seznam spuštěných procesů a kolik procesoru každý proces využívá. Monitorování využití systémových prostředků je užitečné, je dobré zejména vědět, který proces je třeba ukončit, protože spotřebovává příliš mnoho zdrojů. 24. manNejsi si jistý ohledně funkcí určitých Linux příkazů? Žádné obavy, můžeš se snadno naučit, jak je používat přímo z prostředí Linuxu pomocí příkazu man. Například příkaz man tail zobrazí manuální pokyn pro příkaz tail. 25. echoTento příkaz se používá k přesunu některých dat do souboru. Například, pokud chceš přidat text „Ahoj, jmenuji se Karel“ do souboru s názvem name.txt, napíšeš echo Ahoj, jmenuji se Karel >> name.txt. 26. useradd, userdelProtože Linux je systém pro více uživatelů, znamená to, že se stejným systémem může současně pracovat více osob. useradd se používá k vytvoření nového uživatele, zatímco passwd přidává heslo k účtu tohoto uživatele. Pokud chceš přidat novou osobu s názvem Karel napíšeš: useradd Karel a poté přidej jeho heslo příkazem passwd Karel a systém tě vyzve k zadání a potvrzení hesla. Odstranění uživatele je velmi podobné jako přidání nového uživatele, stačí napsat userdel UserName. ZávěrZákladní Linuxové příkazy ti pomohou provádět úkoly jednodušší a efektivnější. Může chvíli trvat, než si zapamatuješ základní příkazy, ale praxí a neustálým zkoušením získáš jistotu. Znalost a zvládnutí těchto základních Linuxových příkazů bude přínosem pro správu tvého linuxového stroje, ať už desktopu nebo VPS řešení. Hodně štěstí!
8 nejlepších pluginů pro After Effects
Tipy a triky
07.03.2022
Skillmea

8 nejlepších pluginů pro After Effects

V tomto článku přinášíme přehled 8 nejlepších After Effects pluginů a jejich funkcí, o kterých by měl vědět a pracovat s nimi každý seriózní motion designer. Adobe After Effects je skvělý software, ale přichází bod, kdy by vás mohlo zajímat, jak můžete zlepšit svůj workflow, zvýšit svou kreativitu a produktivitu a naučit se nové dovednosti. V tomto momentě vstupují do hry úžasné pluginy do After Effects. Pluginy existují od výmyslu světa: od úpravy postav, korekce barev, glitch efekty, a mnohé další. Výhody a nevýhody používání After Effects pluginů Ještě předtím, než se podíváme na jednotlivé pluginy podrobněji, přejděme si klady a zápory After Effects pluginů. Výhody After Effects pluginů: • umožňují novou úroveň kreativity, • měli by zlepšit váš pracovní workflow v After Effects, • vytvářejte efekty mnohem rychleji než používáním pouze výchozích efektů After Effects, • možňuje vám pracovat s 3D objekty a prvky přímo v After Effects, • vytvořte nádherné pozadí pouze několika klepnutími, • nevyžadují znalost programování, skriptování. Nevýhody After Effects pluginů: • některé pluginy zabírají spoustu paměti a značně zpomalují After Effects během jejich používání, • vykreslení některých pluginů zabere spoustu času, • některé pluginy mohou během používání aplikace After Effects spadnout, • cena pluginů může být relativně vysoká. 1. Orb Plugin Orb je navržen tak, aby pomáhal při vytváření 3-rozměrných koulí. Používá se především při vytváření planet. Orb používá podobný 3D engine jako vynikající doplněk Element 3D od Video Copilot a zaměřuje se na vytváření realistických planet a nabízí celou řadu jedinečných nástrojů pro snadné vytváření planet. Může se zdát, že vytvoření planety v After Effects je tak jednoduché jako vytvoření koule s nějakými texturami. Chcete-li však vytvořit působivou, profesionálně detailní planetu, Orb je nejlepší nástroj, který máte. Nemluvě o tom, že doplněk je bezplatný a má bezplatný návod, který můžete využít. Orb bude fungovat pro 90 procent z nich a je neocenitelným nástrojem pro převis. To platí zejména v kombinaci s jinými zásuvnými moduly After Effects nebo v kombinaci s 3D kamerou z 3D aplikace, kterou lze importovat do After Effects spolu s deskami v popředí pro objekty, jako jsou vesmírné lodě. 2. Animation Composer Řekněme, že spěcháte a chcete animovat svou vrstvu After Effects ve zlomku sekundy? Nejlepším řešením mohou být předvolby pohybu animací – motion presets. Několika klepnutími můžete doslova získat super plynulé odrazy a jednoduchou animaci. Balíček obsahuje více než 1000 presetů, takže si jistě najdete pohyb, který se vám líbí. Bonus: za tímto pluginem stojí Slováci z Mister Horse.[Image] 3. Duik After Effects má dobrý základní systém rozhýbání postav (rigging), ale Duik posouvá rigging na zcela novou úroveň. Klienti stále častěji požadují Duik pro jakoukoli pokročilou práci s animací a plugin se stává klíčovým prvkem animace pro širokou škálu projektů. Tento doplněk je zcela zdarma spolu se zbytkem doplňků Rainbox After Effects. Určitě se vyplatí naučit pracovat s Duik pluginem. Pokud se vám plugin líbí, podpořte jeho tvůrce. Pokud vás zajímá tento plugin a chcete se věnovat charakterovým animacím a rozpohybování postav, podívejte se na náš online kurz Character Animations, ve kterém se věnujeme právě DUIK pluginu.[Image] 4. Motion Boutique - Newton3 Newton3 je jedním z pluginů, který by motion designéři měli mít nainstalován. Je to v podstatě 2D fyzika nebo matematický engine integrovaný do After Effects, který vám umožňuje přesouvat vrstvy realistickým způsobem, protože vše je vypočteno za vás. Ať už chcete ukázat hustotu, tření, odskok, rychlost nebo gravitaci, Newton3 tohle všechno a ještě mnohem více dokáže.   Další věc, kterou můžete udělat, je vytvořit realistické spoje mezi objekty, takže můžete lehce vytvářet složité pohyby. Po dokončení simulace se animace znovu vytvoří v After Effects se standardními klíčovými snímky, takže si můžete přizpůsobit načasování podle svých představ. Cena tohoto pluginu je ovšem poměrně vysoká.  5. Red Giant Trapcode Particular Asi neexistuje seznam nejlepších pluginů pro After Effects, ve kterém by se nenacházel nějaký od Red Giant. A největším frajerem mezi jejich After Effects pluginy je určitě Trapcode Particular. Plugin Red Giant Trapcode Particular funguje podobně a podle nás i mnohem lépe než plugin Particular World od After Effects. Tento plugin je pravděpodobně jedním z nejstarších doplňků After Effects, který zůstal velmi aktivní a efektivní, když motion designéři potřebují animovat částice, které mohou být založeny na různých vzorech, tvarech nebo velikostech. To je velmi užitečné při vytváření prvků počasí, jako je déšť, sníh, oblaka nebo dokonce kouř. Plugin se ve velkém se používá ve filmovém průmyslu.  6. Motion Boutique - Pastiche Tento plugin využijete tehdy, když máte na časové ose spoustu malých vrstev. Pastiche vám umožňuje přesouvat, přeskupovat a umisťovat tyto vrstvy do jednoho tvaru. Pastiche také poskytuje intuitivní ovladače pro jemné doladění polohy, měrky, rotace a neprůhlednosti vrstev koláže. Stáhněte si zkušební verzi tohoto pluginu a vyzkoušejte pracovat s ním alespoň nějaký čas. Vyzkoušejte také zkombinovat Pastiche s pluginem Newton3. 7. Video Copilot Element 3D Další úžasný plugin od společnosti VideoCopilot se nazývá Element 3D. Umožňuje vám importovat 3D objekty do aktuálního pluginu a animovat je a texturovat. Mnoho motion designérů používá Element 3D k vytváření krásných filmových videí a výstupy vypadají velmi profesionálně. Cena tohoto pluginu je 189,95 USD přes Toolfarm. 8. DOF PRO Vývojář Richard Rosenman zpřístupnil DOF PRO (Depth Of Field Generator PRO), svůj populární doplněk ke generování hloubky pole ve Photoshopu, pro After Effects. Od svého prvního vydání v roce 2005 se DOF PRO stal profesionální volbou v motion design odvětví. Nejmodernější funkce DOF PRO poskytují inovativní a špičkové technologie, které jinde nejsou dostupné, výsledkem čehož je jeden z nejvýkonnějších a nejpokročilejších procesorů hloubky pole. Mezi pokročilé funkce patří podpora chromatické a achromatické aberace, diferenciace bokehu ohniskové roviny, astigmatismus a efekty vinětace, podpora vlastních map clony a obnovení hluku. K dispozici je také plná podpora alfa kanálu/průhlednosti nebo podpora 32bitových barev. Cena pluginu je 199,99 USD. Další zajímavé pluginy Mezi další velmi zajímavé pluginy, které jistě stojí za zmínku, patří Plexus 3, Boris Fx nebo Saber. Plexus 3 umožňuje uživatelům spojovat tečky/trojúhelníky s čarami a animovat je ve 3D prostoru. Kromě toho vám Plexus 3 umožňuje vytvářet, manipulovat a vizualizovat data procedurálním způsobem. Zjednodušeně to znamená, že částice mohou být animované a mohou mít mezi sebou vztah. Boris Fx má 3 hlavní pluginy: Sapphire, Mocha a Continuum. Všechny jsou velmi dobře známé v komerčním a celovečerním filmovém průmyslu. Máte-li chvíli času, doporučujeme podívat a vyzkoušet zkušební verzi. Saber je mimořádně výkonný nástroj pro osvětlení a efekty pro širokou škálu účelů. Nejenže lze použít k vytváření paprsků světla (například světelné meče), ale přichází i se širokou škálou přednastavení a možností pracovat s maskami vrstev. Závěr Doufáme, že jste se dozvěděli několik zajímavostí a nových věcí o výše uvedených pluginech pro After Effects. Znáte a používáte zajímavé pluginy pro After Effects? Podělte se o ně v komentářích níže.
5 zdrojů pasivního příjmu pro designéry
Tipy a triky
02.11.2021
Skillmea

5 zdrojů pasivního příjmu pro designéry

V tomto článku ti ukážeme možnosti, jak vydělávat víc a generovat pasivní příjem. Diverzifikace zdrojů příjmu je dobrá strategie. Dnes ti přiblížíme 5 způsobů, díky kterým můžeš jako kreativec vedle svého hlavního zaměstnání vydělávat víc. Každý pasivní příjem zahrnuje úvodní investici. Tou může být čas, námaha a úsilí, peníze nebo kombinace všech prvků. Začněme pěkně popořádku. 1. Vytvářej a prodávej designové templaty / šablonyJednou z nejpopulárnějších strategií pasivního příjmu, kterou designéři rádi využívají, je prodej různých hotových designových vzorů online. Pokud o tom přemýšlíš, mnoho nedesignérů nebo začínajících designérů pravidelně hledá hotové šablony pro různé využití od social media, přes newslettery až po design webstránek. Zkus vytvářet šablony, které jsou univerzální a využitelné širokospektrální, například: • vizitky, • různé mockupy, • design webstránek s různým zaměřením, • prezentace, • fotografie a ilustrace, • životopisy, • další. Templaty mžeš prodávat na různých portálech (marketplace) jako jsou například Shutterstock, Adobe Stock, iStock, ale i Canva nedávno spustila svůj marketplace.[Image] 2. Sdílej své znalostiJako designér máš určitě mnoho vědomostí a zkušeností, o které se můžeš podělit. Určitě budeš mít dobrý pocit, když pomůžeš začínajícím designérům sdílením svých cenných poznatků a zároveň tím umíš vydělat peníze navíc. Jak sdílet své znalosti? Můžeš zorganizovat workshop či školení, napsat knihu (ebook), vytvořit online kurz nebo mentorovat designéry začátečníky.  Samozřejmě, budeš muset investovat čas do přípravy a vytvoření těchto vzdělávacích zdrojů, ale když je zpřístupníš, z dlouhodobého hlediska se mohou stát zajímavým zdrojem příjmu.[Image] 3. Prodávej vlastní nástroje a assetyMezi tyto nástroje a assety můžeme zařadit například ilustrace, PSD zdrojáky, fonty, textury, gridy, UI kity a mnoho dalšího. Jiní designéři se mohou zajímat o tyto zdroje a budou je chtít použít ve svých vlastních designových výtvorech. Pro tebe půjde o ideální pasivní příjem, protože sice vynaložíš čas na vytvoření digitálních produktů, ale potom je budeš prodávat znovu a znovu. Začít je jednoduché, existuje několik stránek, kde můžeš svá díla prodávat, například Envato Market, Vecteezy, Creative Market a další.[Image] 4. Navrhuj a prodávej merchProdej vlastního zboží je zajímavý zdroj příjmu zvláště pokud už máš dostatečně velké publikum, které tě sleduje. Nejprve se tedy pověnuj budování svého brandu a followerů. Prodej merchu je v současnosti poměrně jednoduchý, využij mezinárodní služby jako Printify nebo lokální GoMerch. Pokud už máš spoustu sledovatelů, za zvážení stojí i rozjet Patreon či jiné formy monetizování obsahu, například přes affiliate marketing nebo různé referral programy.[Image] 5. Vytvoř členskou webstránkuPokud to s budováním dlouhodobého online podnikání myslíš vážně, skvělou možností je vytvoření členské webové stránky. Může to být výhodné zejména tehdy, když už máš například blog a hledáš způsob, jak ho zpeněžit. Členská webstránka bude účtovat poplatek (obvykle je na měsíční nebo roční bázi) za přístup k prémiovému obsahu. Obsahem mohou být cokoli od designových návodů, zdroje ke stažení nebo jiný zajímavý obsah pro designéry. Případně se zaměř na úplně jiný typ uživatelů a nabídni jim přidanou hodnotu, za kterou jsou ochotni platit. Není snadné začít a chvíli trvá, než se stránka rozjede a vybuduješ ji, ale pokud se tomu budeš věnovat dlouhodobě, může to být skvělá volba.[Image] Tipy na závěrJe dobré vědět, co je tvou motivací při tvorbě těchto vedlejších projektů. Pokud jsou to jen peníze, přistupuj k tvorbě organizovaněji as obchodním myšlením, vyber si vedlejší projekt s potenciálem tvorby příjmu. Mysli i na časovou stránku věci a snaž se udělat si realistický odhad času, který můžeš vedlejším projektům věnovat. Máš na to pár hodin každý týden, nebo je to spíše sporadický volný čas? Před zahájením projektu je tedy dobré zvážit množství času, které máš k dispozici. Určete ber v úvahu i průběžné požadavky, které také mohou spolknout nějakou porci času a námahy. Obecně by se dalo říci, že grafika, tiskoviny či e-knihy jsou dobré pro designéry, kteří neočekávají, že budou muset investovat mnoho času na průběžnou podporu a servis. A věci jako šablony, pluginy, blogy, komunitní webové stránky nebo online kurzy mají sice potenciál vysokého příjmu, ale na druhé straně vyžadují i ​​potřebu intenzivnější podpory.
Změna oblohy na fotkách ve Photoshopu jediným klikem
Tipy a triky
11.03.2021
Ľudovít Nastišin

Změna oblohy na fotkách ve Photoshopu jediným klikem

Standardní postup při změně oblohy na fotkách vyžaduje jistou zručnost ve výběrech a maskování. Ovšem s novým Photoshopem je na scéně také velmi zajímavá funkce, která tyto časově náročné postupy sloučila v podstatě do jediného kliknutí. Mluvíme o „Sky Replacement Tool“, který najdeme ve Photoshopu 2021. V tomto článku se na tuto funkci podíváme a ukážeme si to i na příkladu. Sky Replacement najdeme v edit>Sky Replacement. Ihned po otevření této funkce začne software automaticky analyzovat obrázek.[Image] Okamžitě poté si sám vytvoří na daném obrázku masku oblohy a vymění ji za jinou. Jediným klikem. Tento nástroj využívá Adobe Sensei (umělou inteligenci společnosti Adobe). Je to něco podobného jako funkce „Select and Mask“, která je v posledních verzích Photoshopu také velmi kvalitní.   Asi to nebudeš využívat každý den, ale čas od času se takový úkol objeví. A tehdy je dobré o tomto nástroji vědět, neboť si ušetříš čas. Nastavení nástroje "Sky Replacement"Je to sice výměna oblohy na jeden klik, ale většinou to třeba trošku doladit. Nejprve si zvolíš obrázek oblohy z nabídky nástroje, které jsou ve třech složkách: Blue Skies, Spectacular a Sunsets. Máš samozřejmě možnost importovat si tam svoji vlastní oblohu. Stačí kliknout na ozubené kolečko v pravém horním rohu a najít možnost „Import Skies“ nebo přes ikonku + a nahrát si oblohu jako .jpeg soubor.[Image] Máme zde i další nastavení, o kterých je třeba si něco říct. Shift Edge – přes tento slider si umíš doladit okraje výběru a zbavit se tak případných nedotažených míst, která Photoshop až tak dobře nezvládl. Refine Edge Brush – pro případ, že tvou pozornost vyžaduje jen nějaká malá část výběru, máš k dispozici i známý nástroj z balíku „Select and mask“, kterým také umíš dotáhnout případné nedokonalosti. Fade Edge – tento nástroj umožňuje vytvořit jemnější přechod při horizontu obrázku. Photoshop ale většinou udělá robotu velmi dobře a další úpravy okrajů nejsou zvláště potřebné. Temperature, Brightness a Scale – tyto nástroje upravují již samotnou oblohu. Většinou je třeba doldit je barevnost, případně je příliš tmavá či světlá. Nebo je nutné oblohu zvětšit aby seděla s horizontem fotky. Všechno to lze upravit v těchto Sky Adjustments úpravách. Foreground Adjustments – máme možnost doladit barevně i samotný obrázek mimo oblohu tak, abychom celou kompozici co nejvíce sjednotili.[Image] Když jsi s výsledkem spokojen, je třeba si ještě stanovit, jakým způsobem se má tato úprava aplikovat do obrázku. Je zde možnost duplikovat vrstvu nebo output do nových vrstev. Skvělé je, že tento nástroj je nedestruktivní. Pokud si vybereš si vybereš output do nových vrstev, celá úprava se zobrazí ve klasické vrstvě s maskou a spolu s adjustment vrstvami. Takto máš plnou kontrolu nad výsledkem a přípravu pro další modifikace této kompozice. Jsou však situace, kdy ti Sky Replacement pomůže jen částečně. Jednou z takových může být situace, kdy se snažíš vyměnit oblohu na obrázku s vodní hladinou. A ta bude stále odrážet původní oblohu. V takovém případě bude třeba tento odraz vyřešit manuálně. Výhodou však je, že většinu potřebných masek vrstev už z tohoto nástroje máš. Sky replacement tool je podle nás skvělý nástroj ai když jej nebudeš používat každý den, v té pravé chvíli ti pomůže. Jeho ukázku se podívej i na tomto videu, ve kterém jsme si pohráli se známou bratislavskou scenérií. Vyměnili jsme oblohu a odstranili všechny postavy. A všechno nám to zabralo jen pár minut.
Lambda výrazy v Javě - část IV.
Tipy a triky
30.10.2019
Skillmea

Lambda výrazy v Javě - část IV.

Funkcionální rozhraníPokud chci používat lambda výraz, tak potřebuji k tomu rozhraní s jednou abstraktní metodou. Daná metoda musí odpovídat popisu našeho lambda výrazu. Pokud se nad tím zamyslíš, tak ve skutečnosti se dané rozhraní může jmenovat ledajak. Na názvu nezáleží. A i metoda v tom rozhraní může mít ledajaký název, pro logiku lambda výrazu to nemá žádný smysl. Jediné, co je důležité je, aby metoda seděla s lamba výrazem v tom, co vrací a to, co je na vstupu metody jako parametr. Bylo by naprosto super, kdybychom nemuseli vždy při psaní lambda výrazu řešit vytvoření nového rozhraní, které nám bude sloužit jako typ daného lambda výrazu. Co řekneš? Řekli jsme si, že java nevytvořila nový typ pro lambdy. Při psaní, jsme si mohli všimnout, že metody jsou často podobné. Vracím nějaký typ nebo vracím void a mám tam název metody tam jsou nebo nejsou parametry. Jsou zde nějaké paterny, nějaké vzorce, které se opakují častěji. Java nám nabízí několik takových rozhraní, která můžeme klidně použít. Tato rozhraní jsou v balíčku java.util.function. V tomto balíčku je mnoho před připravených rozhraní, které můžeš používat. Tato rozhraní používají generika, tak si tam umíš dosadit objekty jaké potřebuješ. Například Predicate je přesně stvořený k tomu, pokud potřebujeme vzít na vstupu objekt a vrátit boolean jako návratovou hodnotu. Takto můžeme použít toto rozhraní namísto toho rozhraní, co jsme si sami napsali, když jsme řešili předchádzající úlohu.  Jak ošetřit výjimkyUdělejme si příklad, který bude obsahovat seznam osob, které budu zpracovávat – vypíšeme jejich jména a dáme je na velká písmena. public class ExceptionHandling { public static void main(String[] args) { ArrayList<Osoba> osoby = new ArrayList<>(); osoby.add(new Osoba("jano", "beno", 3)); osoby.add(new Osoba("peter", "beno", 0)); osoby.add(new Osoba("jaro", "beno", 30)); osoby.add(new Osoba("brano", "beno", 28)); processOsoby(osoby); } private static void processOsoby(ArrayList<Osoba> osoby) { for (Osoba osoba : osoby){ System.out.println(osoba.getMeno().toUpperCase()); } } } Přepíšeme si to na lambda výraz. Náš kód, který chceme metodě prodat jako argument je System.out.println(osoba.getMeno().toUpperCase()). Pracuji tedy jen s objektem osoba. Výsledek napíšu na konzoli. Tím pádem mám jeden argument a tento kus kódu nevrací žádnou hodnotu. Budeme k tomu potřebovat funkcionální rozhraní, které má metodu s jedním parametrem a nevrací nic. Takovým je Consumer s jeho metodou accept. public class ExceptionHandling { public static void main(String[] args) { ArrayList<Osoba> osoby = new ArrayList<>(); osoby.add(new Osoba("jano", "beno", 3)); osoby.add(new Osoba("peter", "beno", 0)); osoby.add(new Osoba("jaro", "beno", 30)); osoby.add(new Osoba("brano", "beno", 28)); processOsoby(osoby, osoba -> System.out.println(osoba.getMeno().toUpperCase())); } private static void processOsoby(ArrayList<Osoba> osoby, Consumer<Osoba> consumer) { for (Osoba osoba : osoby){ consumer.accept(osoba); } } } Nyní si náš seznam osob změním tak, že místo jmen dám do seznamu null. Při zpracovávání lamba výrazu nám program spadne na NullPointerException. osoby.add(new Osoba("jano", "beno", 3)); osoby.add(new Osoba(null, "beno", 0)); osoby.add(new Osoba("jaro", "beno", 30)); osoby.add(new Osoba("brano", "beno", 28));Musíme si ošetřit tuto výjimku. Jak na to? Jedním ze způsobů je obalit volání consumer.accept do try catch bloku. private static void processOsoby(ArrayList<Osoba> osoby, Consumer<Osoba> consumer) { for (Osoba osoba : osoby){ try { consumer.accept(osoba); }catch (NullPointerException e){ //... } } }Ale to je ošklivé řešení. To co přijde do consumer může být leccos možné a nemusí to dát NullPointerException, možná to bude jiná výjimka. Náš kód chceme mít jednodušší. Druhou možností je, aby byla výjimka zpracována přímo v lamba výrazu. public class ExceptionHandling { public static void main(String[] args) { ArrayList<Osoba> osoby = new ArrayList<>(); osoby.add(new Osoba("jano", "beno", 3)); osoby.add(new Osoba(null, "beno", 0)); osoby.add(new Osoba("jaro", "beno", 30)); osoby.add(new Osoba("brano", "beno", 28)); processOsoby(osoby, osoba -> { try { System.out.println(osoba.getMeno().toUpperCase()); }catch (NullPointerException e){ e.printStackTrace(); } }); } private static void processOsoby(ArrayList<Osoba> osoby, Consumer<Osoba> consumer) { for (Osoba osoba : osoby){ consumer.accept(osoba); } } }Dosáhl jsem toho, že metoda processOsoby je krásnější, ale náš lambda výraz je nyní víceřádkový a ne pěkný - jednořádkový. Na jedné straně chceme mít pěkné jednoduché lambda výrazy, na druhé straně chceme, aby bylo postaráno o výjimky. V našem kódu se vraťme k řešení, které nepoužívá try catch blok. K odchycení výjimky použijeme wrapper metodu. Try catch blok si vyvedeme do zvláštní metody a poté obalíme náš lambda výraz, dalším lambda výrazem, který má try catch blok. Udělejme to, co jsem teď napsal. Vytvoříme novou metodu, která bude akceptovat lambda výraz. V našem případě jsme k tomu použili Consumer rozhraní. A protože je to wrapper, tak to co mi přijde na vstup tak dám i na výstup. private static Consumer<Osoba> wrapperLambda(Consumer<Osoba> consumer){ return consumer; }V metodě processOsoby(osoby, osoba -> System.out.println(osoba.getMeno().toUpperCase())); zavolám místo lambda výrazu, wrapper metodu, jejíž argument bude lambda výraz. Udělá to totéž, ale použil jsem wrapper metodu. public class ExceptionHandling { public static void main(String[] args) { ArrayList<Osoba> osoby = new ArrayList<>(); osoby.add(new Osoba("jano", "beno", 3)); osoby.add(new Osoba("peter", "beno", 0)); osoby.add(new Osoba("jaro", "beno", 30)); osoby.add(new Osoba("brano", "beno", 28)); processOsoby(osoby, wrapperLambda(osoba -> System.out.println(osoba.getMeno().toUpperCase()))); } private static void processOsoby(ArrayList<Osoba> osoby, Consumer<Osoba> consumer) { for (Osoba osoba : osoby){ consumer.accept(osoba); } } private static Consumer<Osoba> wrapperLambda(Consumer<Osoba> consumer){ return consumer; } }Tady můžu udělat následující věc. Namísto toho abych lambdu přehnal přes wrapper metodu, tak ji ani nepoužiji, ale použijeme jen její vstupní parametr, což je osoba. Mohu udělat něco takového: private static Consumer<Osoba> wrapperLambda(Consumer<Osoba> consumer){ return osoba -> System.out.println(osoba.getPriezvisko()); }Namísto toho, abych využil vstupní lambdu, která mi přišla přes parametr consumer, jsem na ni zapomněl a jen jsem využil vstupní parametr dané lambdy a vytvořil jsem novou lambdu. Při volání consumer.accept(osoba); v metodě processOsoby se provede lambda výraz z wrapper metody. Toto není skutečný wrapper. Skutečný wrapper, vezme vstupní lambdu a provede co požaduje. Nyní máme jistotu, že se zavolá přesně náš požadovaný lambda výraz a zároveň můžeme přidávat kód kolem. private static Consumer<Osoba> wrapperLambda(Consumer<Osoba> consumer){ return osoba -> consumer.accept(osoba); }Zde přichází nářad try catch blok v wrapper metodě. Upravíme si kód, aby nám házel výjimku. public class ExceptionHandling { public static void main(String[] args) { ArrayList<Osoba> osoby = new ArrayList<>(); osoby.add(new Osoba("jano", "beno", 3)); osoby.add(new Osoba(null, "beno", 0)); osoby.add(new Osoba("jaro", "beno", 30)); osoby.add(new Osoba("brano", "beno", 28)); processOsoby(osoby, wrapperLambda(osoba -> System.out.println(osoba.getMeno().toUpperCase()))); } private static void processOsoby(ArrayList<Osoba> osoby, Consumer<Osoba> consumer) { for (Osoba osoba : osoby){ consumer.accept(osoba); } } private static Consumer<Osoba> wrapperLambda(Consumer<Osoba> consumer){ return osoba -> { try{ consumer.accept(osoba); }catch (NullPointerException e){ System.out.println("Null pointer exception in wrapper lambda"); } }; } }Pokud se zastavuješ při myšlence, že jsme nic nezjednodušili, jen jsme přesunuli kód na jiné místo, tak máš pravdu, ale! Pokud si danou metodu uděláš generickou, tak si do této metody můžeš zabalit ledajakou lambdu, jejíž typ je Consumer rozhraní. Škoda, že tvůrci jevy neudělali takové wrapper metody pro všechna funkcionální rozhraní z balíku java.util.function. private static<T> Consumer<T> wrapperLambda(Consumer<T> consumer){ return osoba -> { try{ consumer.accept(osoba); }catch (NullPointerException e){ System.out.println("Null pointer exception in wrapper lambda"); } }; } Pokračovat s Lambda výrazy budeme opět v dalším článku. Mé jméno je Jaro Beňo a naučím tě programovat v Javě. Ahoj.
Jak zjistit, zda je číslo zadané ze vstupu prvočíslem?
Tipy a triky
16.10.2019
Skillmea

Jak zjistit, zda je číslo zadané ze vstupu prvočíslem?

V 15. kapitole online kurzu vyššího programovacího jazyka C++ úrovně Elementary II najdete mezi zadáními praktických příkladů pro domácí procvičení i úlohu, ve které máte najít největší společný dělitel dvou čísel a také úlohu, ve které máte najít nejmenší společný násobek dvou čísel nebo jejich největší společný dělitel.   Sáhnete-li do osnov matematiky druhého stupně základní školy někde do 6. nebo 7. ročníku, zjistíte, že klíčem k vyřešení těchto dvou úkolů je rozklad obou čísel na součin prvočísel. Úkoly patří z hlediska logiky a analytického myšlení mezi začátečnické. Přesto vím, že jsou náročnější. Právě proto jsem se rozhodl napsat tento blog. V tomto blogu nechci řešit tento úkol za vás, ale alespoň bych vám rád podal návod, jak zjistit, zda je načtené číslo ze vstupu prvočíslem. Tento úkol je jeden z dílčích úkolů, které je třeba řešit při dvou zmíněných příkladech, jejichž řešení jste dostali za úkol najít. Ti, kteří zapomněli, co je prvočíslo, ozřejmím i tento pojem. Prvočíslo je celé kladné číslo, které je dělitelné pouze jednotkou a svojí vlastní hodnotou. Budeme se tedy pohybovat pouze v množině kladných celých čísel. Příkladem prvočísla může být např. číslo 5, protože je dělitelné pouze číslem 1 a 5. dalšími příklady jsou 2, 3, 7, 11, 13, 17 atp. Samotné číslo 1 se za prvočíslo nepovažuje. Řekněme, že máme číslo 60, jeho rozklad na součin prvočísel je 2 x 2 x 3 x 5. Už z rozkladu je zřejmé, že jej můžeme vynásobit číslem 1, nic by to totiž nezměnilo na výsledku, pořád byste dostali číslo 60. Vidíte , a právě proto se matematici dohodli, že 1 prvočíslem nebude, nemá totiž již žádný vliv v součinu prvočísel, jehož výsledkem je nějaké číslo. Takže bez zbytečných dalších prázdných frází přejdu rovnou k věci. Následuje tedy zdrojový kód v jazyce C++, který řeší titulek tohoto blogu: 01: #include <iostream> 02: using namespace std; 03: 04: int main() 05: { 06: int iNumb; 07: 08: cout << "Zadaj lubovolne cele kladne cislo: "; 09: cin >> iNumb; 10: cout << endl; 11: 12: bool flag = true; 13: 14: if (iNumb == 1) 15: { 16: flag = false; 17: } 18: else 19: { 20: for (int i = 2; i <= iNumb / 2; i++) 21: { 22: if (iNumb % i == 0) 23: { 24: flag = false; 25: break; 26: } 27: } 28: } 29: 30: if (flag) 31: { 32: cout << "Cislo " << iNumb << " je prvocislo !" << endl; 33: } 34: else 35: { 36: cout << "Cislo " << iNumb << " nie je prvocislo !" << endl; 37: } 38: 39: cout << endl; 40: 41: cin.get(); 42: cin.get(); 43: 44: return 0; 45: } Na řádku 01 je uvedena direktiva preprocesoru #include, jejímž parametrem je standardní knihovna iostream. Potřebujeme ji z důvodu používání objektů cout, cin a manipulátoru endl. Na řádku 02 uvádíme v platnost jmenný prostor std pro celý zdrojový soubor .cpp. Zmíněné objekty cout, cin a manipulátor endl je zároveň součástí tohoto prostoru. Na řádku 04 je uvedena funkce main i se svým návratovým typem, kterým je int (integer). Tuto funkci volá operační systém. Na řádku 05 je uvedena levá programová závorka, kterou začíná tělo funkce main. Na řádku 06 je deklarována proměnná iNumb pro datový typ int. Tato proměnná reprezentuje hodnotu celého kladného čísla, o kterém chceme zjistit, jestli patří mezi prvočísla. Na řádku 08 je pomocí objektu cout zapsán na výstup konzolové aplikace textový řetězec, který vyzve uživatele k zadání hodnoty kladného celého čísla, jehož vlastnost prvočísla testujeme. Na řádku 09 je prostřednictvím objektu cin načtena tato hodnota do proměnné iNumb. Na řádku 10 je prostřednictvím objektu cout a manipulátoru endl přesunut kurzor konzolové aplikace na další řádek. Na řádku 12 je deklarována proměnná flag a zároveň inicializována na hodnotu true. Tato proměnná nám bude po otestování načteného čísla ukládat informaci, zda je číslo prvočíslem nebo ne. Z hlediska logiky algoritmu je nutno proměnnou flag inicializovat před testováním na hodnotu true. Algoritmem budeme totiž testovat, zda načtené číslo mezi prvočísla nepatří. Používá se zde tedy postup vylučovací. Na řádku 14 je testována podmínka, zda v proměnné iNumb není hodnota 1. Pokud ano, program pokračuje kladnou větví a do proměnné flag se na řádku 16 zapíše hodnota false, která reprezentuje stav, kdy načtené číslo prvočíslem není. Na řádcích 13 a 15 jsou pouze uvedeny programové závorky, které uzavírají blok kódu uvedený v kladné větvi. Pokud zmíněná podmínka splněna není, pokračuje se zápornou větví. Blok kódu v záporné větvi uzavřen programovými závorkami na řádcích 19 a 29. Na řádcích 20 až 27 je uvedeno jádro algoritmu, který testuje vlastnost prvočísla u čísel větších než 1. A v čem spočívá idea jádra algoritmu? V každé iteraci cyklu zjišťujeme, zda je číslo dělitelné hodnotou v proměnné i. Nejmenší číslo, kterým může být načteno testované dělitelné, je číslo 2 (viz. řádek 20 – for smyčka) a proto iterujeme od této hodnoty. Proměnnou i postupně inkrementujeme (viz. řádek 20 – for smyčka) a testujeme, zda je hodnota proměnné iNumb dělitelná beze zbytku pomocí operace modulo na řádku 22, která je umístěna v příkazu if. Pokud je číslo dělitelné hodnotou v proměnné i beze zbytku, tak se na řádku 24 uloží do proměnné flag hodnota false, což reprezentuje stav, kdy načtené číslo není prvočíslem. Proměnná i se inkrementuje po iNumb/2 (viz. řádek 20 – for smyčka). Důvodem je fakt, že žádné celé kladné číslo nemůže být přece dělitelné beze zbytku číslem větším než je jeho polovina. Nenajde-li se tedy číslo, kterým je načtená hodnota testovaného čísla dělitelná beze zbytku, neuloží se do proměnné flag hodnota false, čili po ukončení v ní bude uložena hodnota true, což reprezentuje stav, kdy je načteno testované číslo prvočíslem. Na řádku 25 je uvedeno klíčové slovo break a to z toho důvodu, že v případě nalezení jednoho čísla, které dělí načtené testované číslo beze zbytku, není nutné hledat další dělitele. Testované číslo už prvočíslo totiž být nemůže a proto násilně ukončíme smyčku for, urychlíme program, který následně přejde až na řádek 30. Zde se už jen testuje hodnota v proměnné flag. Pokud je v této proměnné uložena hodnota true, tak se zapíše na výstup konzolové aplikace pomocí objektu cout informace o tom, že je načteno testované číslo prvočíslem (viz. řádek 32), pokud false tak informace, že prvočíslem není. Na řádcích 41 a 42 je již jen načítán vstup z konzolové aplikace pomocí objektu cin, což slouží k tomu, aby se hned program neukončil a byl zobrazen výsledek v okně konzole, dokud uživatel nezatlačí libovolná klávesa. Na řádku 44 vrací funkce main operačnímu systému hodnotu 0, která indikuje stav správného ukončení aplikace. Na řádku 45 je ukončeno tělo programu pravou programovou závorkou. Algoritmus, který jsem navrhl a implementoval v jazyce C++, není ještě optimální. Je však pro účely kurzu úrovně začátečník dostačující. Mezi prvočísly lze ještě sledovat určité vlastnosti, nebudu je však tomto bloku vzpomínat, abych příliš posluchače úrovně začátečník zbytečně nadměrně nezatížil. Optimální algoritmus však budu ještě publikovat a rozebírat v dalším bloku a v kurzu, který bude zaměřen i na matematiku. Autorem blogu je Marek Šurka, lektor online kurzů jazyka C++ na Learn2Code.
Lambda výrazy v Javě - část III.
Tipy a triky
03.10.2019
Skillmea

Lambda výrazy v Javě - část III.

Lambda a vnitřní anonymní třídyVelmi se nám žádá říci, že lambda výrazy jsou jen zkratky jak napsat vnitřní anonymní třídy. Ale pamatuj si, není tomu tak. Vypadá to podobně, ale lambda není implementace rozhraní. Lambda je sama osobě nezávislá jiná věc. Podívejme se na příklad. Namísto toho, abychom použili implementační třídu našeho rozhraní IHelloWord, vytvoříme si vnitřní anonymní třídu. IHelloWord helloWord3 = new IHelloWord() { @Override public void sayHello() { System.out.println("HelloWord impls inner anonymous class"); } };Všechny 3 možnosti, které mají jako návratovou hodnotu rozhraní IHelloWord můžeme podsunout do metody printHelloWord(IHelloWord helloWord). helloWord.printHelloWord(helloWord1); helloWord.printHelloWord(helloWord2); helloWord.printHelloWord(helloWord3); Jak to, jak to?Jak java ví, jaký má použít typ pro lamba výraz? Abychom tomu porozuměli, vytvoříme si novou třídu, kde budeme pracovat s lambda výrazem. Vytvořme si rozhraní, které bude mít jednu metodu, která bude vracet int a na vstupu bude také int. interface Nasob{ int nasob(int a); } Ako by vyerala implementácia tohto rozhrania? class NasobPiatimi implements Nasob{ public int nasob(int a){ return a*5; } }Nyní si navrhněme lambda výraz, který odpovídá dané metodě. Nepotřebujeme návratovou hodnotu int, neboť java umí na ni přijít sama a nepotřebujeme ani název metody a ani modifikátor přístupu public. Náš lambda výraz bude vypadat takto: (int a) -> a*5;Nyní použijte tento lambda výraz: public static void main(String[] args) { Nasob nasobPiatimi = (int a) -> a*5; System.out.println(nasobPiatimi.nasob(10)); }Na výstupu bude 50. V tomto příkladu se lambda tváří jako instance rozhraní Nasob. V předchozích příkladech, kdy jsme používali HelloWord, jsme takovou proměnnou vkládali jako parametr metody printHelloWord (HelloWord3 v IDEi). Namísto toho jsme mohli tuto lambdu vložit přímo do metody. helloWord.printHelloWord(() -> System.out.println("HelloWord impls lambda");); Java kompilátor vezme tento lambda výraz a podívá se kam jde. Jedná se o metody printHelloWord a podívá se, co akceptuje na vstupu. Akceptuje rozhraní HelloWord. Pokud lambda sedí s požadavkem, že dané rozhraní obsahuje jen jednu metodu a ta vrací void a na vstupu nemá žádný parametr, tak java řekne, že daná lambda je typu HelloWord. Toto se jmenuje Type inference. Java si sama zjistí typ. Teď, když víš jak java dokáže zjistit typy, vrátíme se k příkladu, který jsme začali psát v této kapitole. V našem příkladu umíme ještě více zkrátit zápis našeho lambda výrazu. Nasob nasobPiatimi = (int a) -> a*5; System.out.println(nasobPiatimi.nasob(10));Jelikož naše lamba jde do metody rozhraní, kterou známe interface Nasob{ int nasob(int a); } Tak vieme presne povedať aký typ má vstupný paramter metódy. Je to int. interface Nasob{ int nasob(int a); }Když to víme, tak nemusíme při psaní lambda výrazu znovu specifikovat typ vstupního parametru. Nasob nasobPiatimi = (a) -> a*5; A jelikož máme jen jeden parametr, nemusíme psát ani závorky. Násob napětí = a -> a*5; Už nebudeme nic mazat, neboť by nám už nic nezbylo 😃 Nyní můžeme napsat metodu, která bude na vstupu očekávat rozhraní Nasob a když ji použijeme, tak do ní vložíme na vstup náš lambda výraz. public static void printNasob(Nasob nasob){ System.out.println(nasob.nasob(10)); } public static void main(String[] args) { printNasob(a -> a*5); }V jevu mohli klidně vytvořit nový typ pro tyto lambda výrazy. Ale neudělali to a jedním z důvodů je i zpětná kompatibilita se starším kódem. Jak už víme, tak lambda výrazy můžeme použít všude tam, kde máme vyhovující rozhraní. Ve vnitřních anonymních třídách, v metodách kde je na vstupu interface a podobně. Příklad: HelloWord helloWord3 = new HelloWord() { @Override public void sayHello() { System.out.println("HelloWord impls inner anonymous class"); } }; HelloWord helloWord3 = () -> System.out.println("HelloWord impls inner anonymous class"); Při tomto musíme pamatovat, aby rozhraní byla jedno metodová nebo aby ostatní metody rozhraní byly default. A dané metody v rozhraních, aby se shodovaly s lambda výrazem. Takové rozhraní s jednou abstraktní metodou (metoda, která poskytuje popis ne implementaci) se nazývá Functional interface. Představ si, že používáš rozhraní, které má jen jednu metodu a používáš ho pro lambda výrazy. Nyní by někdo cizí přišel a do tohoto rozhraní by přidal další abstraktní metodu, přesněji její popis bez implementace. Takové rozhraní by již více nebylo functional interface a proto by se nemohlo použít pro lambda výraz a nastala by chyba - přestože rozhraní by bylo v pořádku. Třeba na to myslet a pokud chceme něco přidat do functional interfac, tak jen jako default metody. Abychom upozornili kohokoli, kdo by chtěl něco přidat do našeho rozhraní, tak máme možnost přidat anotaci @FunctionalInterface. K anotacím se ještě dostaneme, tak se nebojte. Nyní je důležité vědět, že je to pomůcka – tato pomůcka nám udělá to, že jakmile napíšeme další metodu do našeho rozhraní, tak nastane chyba. Danou anotaci nemusíme psát, ale je to super. @FunctionalInterface public interface HelloWord { void sayHello(); }Příklady na vyzkoušení: 1. vytvoř si seznam míst 2. setřiď seznam 3. napiš metodu, která vypíše vše ze seznamu míst 4. udělej si metodu, která vypíše jen ta města, která se skládají z jednoho slova nepoužívej při tom lambda výrazy Pokračování příště 👋 Články a online kurzy o Javě pro tebe připravuje Jaro Beňo.
Lambda výrazy v Javě - část II.
Tipy a triky
23.08.2019
Skillmea

Lambda výrazy v Javě - část II.

Typy lambda výrazůTento článek je pokračováním první části tutoriálu o Lambda výrazech. Vraťme se k našemu příkladu na začátku, kde jsme do metody vložili implementaci rozhraní a zavolali jsme metodu. Toto si teď zkusíme spolu předělat, tak abychom použili lamba výraz. HelloWord2. Přepište metodu implementace na lambda výraz. public void sayHello() { System.out.println("HelloWord impls"); } () -> System.out.println("HelloWord impls"); Znovu ta samá otázka, jaký typ má lamba výraz pokud ho chci přiřadit do proměnné? lambdaFunkcia = () -> System.out.println("HelloWord impls");Počkat! V Javě přece máme možnost jak deklarovat, jmenovat metody a tu použijeme. Tou možností je použít rozhraní. 1. vytvoření rozhraní s jednou deklarací metody 2. vytvoření metody, která odpovídá našemu lambda výrazu 1. v našem případě nemá žádné argumenty a návratová hodnota je void  Pokud bychom vytvořili rozhraní, kde budeme uvádět několik metod, tak to bude chyba. Jedině pokud budou default - tedy implementovány. Viz sekci o rozhraních. ILambda lambdaFunkcia = () -> System.out.println("HelloWord impls"); … public interface ILambda { void metoda(); // void metoda2(String s); // bude error } Použijme lambda výraz s bezpečným dělením. Napišme si k tomu interface a proměnnou: bezpecneDelenieFunkcia = (int a, int b) -> { if(b==0) { return 0 ; } return a/b; }; public static void main(String[] args) { Hocijako hocijako = (int a, int b) -> { if(b==0){ return 0; } return a/b; }; double d = hocijako.hocico(10, 2); System.out.println(d); } interface Hocijako{ double hocico(int x, int y); }Tady si můžeme říci, že název rozhraní a název metody v rozhraní není důležitý. Důležité je, aby seděly vlastnosti. Tedy rozhraní má jen jednu metodu (mimo default metod) a metodě sedí typ návratové hodnoty a parametry metody. Implemetační třídu už tedy nepotřebujeme, neboť jakoby implementací je lambda výraz. Můžu si to nechat, pokud to potřebuji takto používat, ale v našem případě nepotřebuji implementační třídu. Lambda výraz se chová jako implemtnace rozhraní. Ale není to implementace. Tento příklad bude fungovat: HelloWord3 helloWord = new HelloWord3(); IHelloWord helloWord1 = new HelloWordImpl(); IHelloWord helloWord2 = () -> System.out.println("HelloWord impls lambda"); helloWord1.sayHello(); helloWord2.sayHello();Na výstupu bude: HelloWord impls HelloWord impls lambda Pokračování příště 😗 Mrkni prozatím moje kurzy o Java programování nebo videa, která máme na Youtube.
Tipy, triky a chyby v jazyce C++ pro začátečníky
Tipy a triky
04.08.2019
Skillmea

Tipy, triky a chyby v jazyce C++ pro začátečníky

Tímto článkem bych vám chtěl představit zajímavé tipy a triky v jazyce C++, které byste mohli použít ve vašem kódu. Jsou velmi jednoduché, protože jsou určeny pro začátečníky. Navíc bych vás chtěl upozornit na některé často se opakující chyby, které se ve vašem kódu mohou na začátku vyskytovat. Nejedná se o chybu v pravém slova smyslu, tedy ne takovou, po které by byl váš kód nepřeložitelný, spíše se jedná o obroušení vašeho programátorského stylu, či vytvoření takového kódu, který bude rychle vykonáván. Poslední zmíněnou vlastnost dosáhnete s C++ snadno, protože kódy, které navrhnete v C++ se provedou mnohem rychleji než ty, které navrhnete v jiných jazycích. Umím programovat ve více jazycích a proto to mám skutečně odzkoušené. Pamatujte, že C++ to však neprovede za vás, protože i tam lze vytvořit velmi špatný kód. Záměrně se použil termín špatný, ačkoli není odborný. Myslím tím kód, ve kterém špatným stylem a technikou nedosáhnete požadavků, které se na kód kladou. Příkladem může být právě rychlost provádění spustitelného kódu, jeho přehlednost či snadná udržovatelnost. V následujících řádcích vám to na pár příkladech ozřejmím. Příklady tipů, triků a chybJistě jste se již v programování pokoušeli naprogramovat jednoduché matematické operace. Mějme tedy následující kód: #include <iostream> int main() { int a; int b = -1; int c; int d = 4; int e = 2; int f = 3; int g; a = b + c; d = e - f; g = a * d; std::cout << "g = " << std::endl; std::cin.get(); std::cin.get(); return 0; }Nejprve bych se vás chtěl zeptat, jestli se vám takto napsaný kód na první pohled líbí. Myslím tím po koncepční stránce. První chybou je, že začínající programátoři neodsazují bloky kódu. Tak například tento kód by se dal pěkně odsadit pomocí následujících pravidel. Oddělte direktivy preprocesoru od hlavičky funkci main(). Oddělte deklarace a definice proměnných od zbytku kódu. Někdy, když budete používat mnoho proměnných, můžete také jednotlivé deklarace proměnných uspořádat do logických celků. Můžete vytvořit bloky kódu podle typu proměnné. Navíc jazyk C++ vám umožňuje deklarovat a inicializovat proměnnou na místě, kde to skutečně potřebujete, tedy předtím, než ji použijete. Dále, v tomto kódu oddělte nosnou část kódu a to vytvořte blok kódu, kde se provádějí jednotlivé matematické operace. Nakonec, oddělte zápis na obrazovku a také načtení ze vstupu klávesnice. Potom už jen oddělíte klíčové slovo return s jeho návratovou hodnotou. Po zmíněných úpravách vám vznikne čitelný kód, který vypadá následovně: #include <iostream> int main() { int a; int b = -1; int c; int d = 4; int e = 2; int f = 3; int g; a = b + c; d = e - f; g = a * d; std::cout << "g = " << std::endl; std::cin.get(); std::cin.get(); return 0; }Když se dále podíváme na kód, můžeme některé deklarace umístit na jeden řádek. Konkrétní provedení nechám na vás, ale já bych doporučoval deklarovat na jednom řádku proměnné, které se neinicializují hned na začátku současně s deklarací. Na druhý řádek bych umístil proměnné, které se inicializují současně s deklarací. Takto získáte ještě větší přehled v kódu a ušetříte 4 řádky kódu. Kód bude vypadat následovně: #include <iostream> int main() { int a, c, g; int b = -1, d = 4, e = 2, f = 3; a = b + c; d = e - f; g = a * d; std::cout << "g = " << std::endl; std::cin.get(); std::cin.get(); return 0; }Nyní přejdeme ke zmiňované rychlosti. Je mi jasné, že při tak krátkém kódu ušetříme relativně málo času, ale kdyby se nosná část kódu, tedy tři matematické operace s přiřazováním, prováděly v cyklu například. 1 000 000 krát, viděli byste zaručeně rozdíl. V uvedeném příkladu není nutné použít 7 proměnných a výsledek vyhodnocovat na třikrát. Výsledky b + c a e - f se vynásobí a přiřadí do další proměnné. Tak, jak to je naprogramováno, je to zbytečné. Zkuste vše vyhodnotit jako jeden výraz a přiřadit na jednom řádku. Vznikne nám kód, který bude mít o dva řádky méně a bude provádět totéž. A v čem je vlastně problém. No v operátoru přiřazení. Tato operace je příliš časově náročná. V podstatě se musí přesunout hodnota proměnné uložená na jednom paměťovém místě do paměťového místa, které je určeno pro jinou proměnnou. A po kurzu už víte, že počítač zná jen 0 a 1. Organizačně existuje nejméně jeden bajt. Nezmiňoval jsem sice, co je zásobník, ale když se pohybujeme v jeho paměti, trvá to ještě déle. Vraťme se ale zpět, po úpravě bude kód vypadat následovně: #include <iostream> int main() { int g; int b = -1, d = 4, e = 2, f = 3; g = (b + c) * (e - f); std::cout << "g = " << std::endl; std::cin.get(); std::cin.get(); return 0; } A pojďme ještě dál. K čemu vůbec v tomto kódu používáme proměnné, když je nenačítáme ze vstupu. Výsledek kombinace matematických operací můžeme přece zapsat rovnou na obrazovku, aniž bychom hodnoty přiřazovali do proměnných. Odstraníme tím i deklarace. Po konečné úpravě, bude kód vypadat následovně: #include <iostream> int main() { std::cout << "res = " << (-1 + 4) * (2 - 3) << std::endl; std::cin.get(); std::cin.get(); return 0; }Závěrem bych tedy znovu chtěl zdůraznit, jak jsou programátorský styl a technika důležité. Vidíte, že z 18 řádkového kódu, který jsme získali odsazením původního kódu, nám po několika úpravách zůstal kód, který má 8 řádků. A tento kód, ačkoli je malý, je laicky řečeno, pěkný. To znamená, že se jeho spustitelný kód provede rychle, je přehledný a snadno udržovatelný. Autorem blogu je Marek Šurka, který má na Learn2Code online kurz C++ pro začátečníky.
Lambda výrazy v Javě - část I.
Tipy a triky
21.07.2019
Skillmea

Lambda výrazy v Javě - část I.

V tomto a v následujících článcích se podíváme na zoubek lambda výrazem. Budeme si je vysvětlovat zcela dopodrobna, abychom je pochopili a využívali. Obsahově se zaměříme na tyto oblasti: 1. porozumění lambda výrazům, 2. použití lambda výrazů, 3. funkcionální rozhraní (functional intefaces), 4. reference metod (method references), 5. vylepšení na kolekcích. Proč použít lambda výrazy? Řekneme si pár odrážek, proč je používat. • povoluje použít takzvané funkcionální programování, což je dosud něco, řekl bych divné, protože Java je objektově orientovaný jazyk, • zpřehledňují kód, lepší čitelnost v některých případech, kde bychom použili několik zbytečných řádků, abychom napsali totéž. Možná se zamýšlíš, proč používat funkcionální programování v jazyce, který je objektově orientovaný. Už není OOP tak dobré? Už zanikne? Ne, nezanikne a java je a myslím si, že pořád bude objektově orientovaný jazyk. Toto funkcionální programování ber jen jako další nástroj, který jako vývojář máš ve své ruce. U OOP jsou vývojáři zvyklí přemýšlet v podstatných jménech, v objektech, ve třídách. Například Pes štěká. Štěkání je součástí Psa. Tím pádem metoda, která bude zajišťovat psí štěkání, je součástí třídy Pes. Někdy ale potřebuji kus kódu, metodu – nebo jinak řečeno funkci, která nepatří do žádné třídy speciální. Podsunutí chování do metodyUvažuj nad tím, že máš metodu, která na konzoli vypíše nějaký text. Například staré známé Hello World. Pro tento účel bychom si vytvořili třídu, které by byla metoda pro vypsání Hello Word. Tuto metodu bychom pak vypsali na konzoli v main metodě. Příklad v idea Lambda2. Naším úkolem bude nyní předělat tento kód tak, abych dané metodě podsunul chování a uvnitř té metody se jen provede to chování. Ukažme si na příkladu. Takže jsme udělali, co jsme chtěli. Do metody jsme podsunuli chování jako argument a poté jsme jej provedli. Ale ne tak přesně. Do metody jsme podsunuli něco, co má v sobě chování. Podsunuli jsme implementaci rozhraní, která má v sobě metodu, která provede očekávané chování. Právě tomuto chtějí lambda výrazy zabránit. Chtějí zabránit tomu, abychom podsouvali objekty, ale chtějí, abychom podsouvali funkce. Namísto tohoto: public void printHelloWord(IHelloWord helloWord){ helloWord.sayHello(); } chceme do metody vložit nějakou akci, nějakou funkci. Tento přístup umožňuje chovat se k funkcím jako k hodnotám. public void printHelloWord(funkcia){ funkcia(); } Pokud napíšu String jméno = “Jaro”; tak jsem hodnotu Jaro přidělil do proměnné jméno. Nyní jsme ale nastínili, že do nějaké proměnné bychom chtěli vložit blok kódu, který prezentuje naši funkci. Takže blok kód by se stal hodnotou a ta by se dala vložit do proměnné. Takže tam, kde používám danou proměnnou, tak tam používám i danou funkci, která je v ní. Pro představivost, chceme dosáhnout tohoto: premennaSFunkciou = public void sayHello() { System.out.println("HelloWord impls"); } Toto je možné pomocí lambda výrazů. Nejprve se ale podívejme na tento kus kódu a řekněme si, co nepotřebujeme: • public – označuje mi, jestli je něco veřejně dostupné mimo třídu, dává smysl v kontextu třídy, tady ale přidělujeme do proměnné, tak to nepotřebujeme, neboť funkce je dostupná tomu, kdo pracuje s danou proměnnou. premennaSFunkciou = void sayHello() { System.out.println("HelloWord impls"); } • název sayHello = pokud přistupujeme k hodnotě, která je v proměnné, tak k ní přistupujme názvem proměnné, v našem případě je název proměnné proměnnou SFunkcí, takže ani druhé jméno nepotřebujeme. premennaSFunkciou = void () { System.out.println("HelloWord impls"); } • typ návratové hodnoty – při psaní lambda výrazů nemusím psát, jaký je návratový typ, překladač ví, podle nitra metody, co se vrací. premennaSFunkciou = () { System.out.println("HelloWord impls"); } Toto ale ještě není lambda výraz. Pokud napíšu šipku (pomlčka - a znaménko větší >) mezi závorky a blok kódu, tak tehdy jsme vytvořili labmda výraz. premennaSFunkciou = () -> { System.out.println("HelloWord impls"); } Pokud metoda obsahuje jen jeden řádek, tedy ne více řádků, tak lze dále upravit tento výraz a to tak, že odstraníme složené závorky. Pokud je více řádků, tak složené závorky ponecháme. premennaSFunkciou = () -> System.out.println("HelloWord impls"); Teď si už umíme představit, udělat, to, že pošleme funkci jako parametr metody a uvnitř spustíme danou funkci. public void printHelloWord(------){ -----(); }Do metody můžeme vložit jako argument při volání metody přímo lambda výraz. printHelloWord(() -> System.out.println("HelloWord impls")){ PříkladyNapiš metodu, která vezme jako parametr číslo a vynásobí ho 5ti.nasobokPiatichFunkcia = public int nasobokPiatich(int i){ return i*5; }Přepíšeme to na lambda výraz, vyškrtám všechno, co nepotřebuji. Tedy název, návratovou hodnotu a modifikátor přístupu. nasobokPiatichFunkcia = (int i){ return i*5; }Napíšeme tam šipku a jelikož řádek je tam jen jeden, tak umíme odmazat kudrnaté závorky. nasobokPiatichFunkcia = (int i) -> return i*5;Tady máme další pomůcku, nebo možnost škrtat. Jelikož java kompilátor zná vnitřek metody a ví, co má vrátit, můžu vymazat i return. nasobokPiatichFunkcia = (int i) -> i*5;Když máme jednořádkový lambda výraz bez složených závorek, tak je nezbytné nepoužívat return. SčítáníscitaniFunkce = (int a, int b) -> a+b;  OdčítáníodcitaniFunkce = (int a, int b) -> a-b; Bezpečné děleníbezpecneDelenieFunkcia = (int a, int b) -> { if(b==0) { return 0 ; } return a/b; };Spojení řetězcůstringJoin = (String x, String y) -> x.concat(y);  Stále jsme v Javě. Tedy v typovém jazyce. Jaké jsou typy těchto proměnných, které v sobě drží lambda výrazy? Video:Pokud tě více baví poslouchat a dívat, tak si můžeš prohlédnout sérii videí o lambda výrazech v kurzu Java pro pokročilé. ZáverPokud by ses chtěl dozvědět o Javě víc nebo jsi nepochopil všechno, tak jsem i pro tebe připravil online kurzy o Javě na https://skillmea.sk. Pokud se chceš o mně dozvědět více, tak klikej na jaroslavbeno.sk nebo mě sleduj na sociálních sítích – youtube, facebook, instagram, linkedin.  Zakomponuji i malou reklamu. Ve spolupráci s tvůrci židle Neseda.com ti nabízím s kódem/kuponem JaroslavBeno 10% slevu (aplikovatelná i na zlevněnou židli). Já jsem Jaro a my se vidíme, slyšíme-li Bůh dá příště. Čaves.
Tipy, jak ušetřit čas při práci ve Sketchi, Photoshopu, Illustratore a InDesignu
Tipy a triky
19.06.2019
Katarína Kučáková

Tipy, jak ušetřit čas při práci ve Sketchi, Photoshopu, Illustratore a InDesignu

Práce v grafických programech se někdy podobá cirkusovému chaosu. Ikonky, záložky, nekonečný počet nástrojů, pluginů. Víme, je obtížné se v tom zorientovat. Proto jsme pro tebe ve spolupráci s lektory vybrali tipy, které i nám usnadňují život a hlavně šetří čas. Konkrétně se podíváme na programy Sketch, Adobe Photoshop, Illustrator a inDesign. Sketch Sketch je profesionální ilustrační program pro práci s vektorovou grafikou, který je dostupný pro uživatele Mac OS X. Sketch je intuitivní a uživatelsky nenáročný, jeho zvládnutí na profi úrovni spočívá zejména v malých tricích. Zde jsou některé z nich. [Image] • Rotate copies (rotování kopií)             Nástroj Rotate Copies ti umožní rotovat kopie určité vrstvy kolem konkrétního bodu. Vezmi si třeba květinu. Stačí vytvořit jeden okvětní lístek a desítky jeho kopií můžeš rotovat kolem středu. Voila. Tento nástroj se standardně nenachází v panelu nástrojů, ale můžeš si jej přidat přes control-click a „Customize toolbar“, případně v menu přes Layer > Path > Rotate Copies. • Convert to outlines (převést na obrysy) Jak a kdy převést text na obrysy je nezbytnou znalostí z hlediska vektorové kresby. Fonty totiž dokážou nadělat při tisku spoustu problémů. Na druhé straně, pokud se rozhodneš převést text na obrysy, text se stane grafikou a po konverzi jej již nebude možné upravit. Pro konverzi textu na obrysy zvol v menu Layer > Convert to Outlines (prípadně stlač Shift-Command-O). • Obnovení ztracených dat Mac má skvělou funkci, která je kompatibilní i se Sketchem. Můžeš si tak prohlédnout historii souboru a obnovit ztracená data přes File > Revert To > Browse All Versions. • Vnoření symbolů Vnořený symbol můžeš vytvořit tak, že instanci (kopii) symbolu umístíš do jiného symbolu na stránku symbolů. Při provedení změny rodičovského symbolu se změní všechny jeho instance, bez ohledu na to, zda jsou součástí jiného symbolu, nebo ne. Neexistuje limit na to, jak hluboko lze symbol vnořit, symbol však nesmí obsahovat instanci sebe sama. • Sdílení souborů přes appky (například Slack) Jednoduše sdílej soubory přes appku tak, že potáhneš vybraný file ze sekce Export - file a vložíš na plochu vybrané appky. • Export Presets Tímto nástrojem ušetříš nesmírně mnoho času, můžeš si totiž kopírovat prvky ze svého designu. Vytvoření jednotlivých presets provedeš pomocí Presets preference panel. • Klávesové zkratky Přehled všech užitečných klávesových zkratek najdeš zde! • Pluginy  Užitečné pluginy jsou Stark pro kontrolu kontrastu, Runner pro rychlejší přístup k funkcím  a Rename it + Styles Generator pro stavbu knihoven. Adobe Photoshop Photoshop je velmi oblíbeným nástrojem v oblasti úpravy fotografií a grafiky. Máš už v malíčku všechna jeho zákoutí? [Image] • Kopírování barvy z jakéhokoli obrázku, vzoru a podobně. Pomocí nástroje Eyedropper tool máš možnost vybrat barvu ze zdroje mimo prostředí photoshopu a palety barev. Jednoduše klikni a podrž nástroj kapadlo a se stlačeným tlačítkem přejdi na vybranou stránku nebo obrázek. Namiř kurzor na plochu s barvou, uvolni myš a máš k dispozici novou zadefinovou barvu. • Změna velikosti (a tvrdosti) štětce Asi tě zdržuje neustále měnit velikost a tvrdost štětce pomocí nástrojové lišty. Zejména při úpravách jako je retuš či práce s maskami oceníš klávesovou zkratku Alt+pravé tlačítko myši (Ctrl+Alt+levé tlačítko na Mac). Stačí podržet tlačítko myši a při pohybu vpravo-vlevo můžeš měnit velikost štětce, při pohybu nahoru-dolů zase jeho tvrdost. • Změna prolínacích módů (blend modes) Práce s prolínacími módy je vždy tak trochu experimentováním, výsledek je totiž obtížné odhadnout. Ty se však nechceš zdržovat dlouho, čeká tě spousta další práce, proto by sis měl osvojit zajímavou zkratku Shift+plus. Tato zkratka slouží k rychlému testování efektů na fotce. • Izolace konkrétní vrsty Někdy může projekt obsahovat tolik vrstev, že se zdá nemožné zobrazit jen jednu konkrétní. Tehdy stačí jednoduše podržet Alt (Option na Mac) a klepnout na ikonku oka na vybrané vrstvě. • Bird's-eye-view Tato funkce ti umožní snadno se orientovat v jednotlivých částech obrázku při detailním přiblížení. Pokud jsi právě použil zoom a chceš přejít na jinou část, aniž bys musel view zmenšovat, klikni a podrž H a potom levé tlačítko myši. Nyní pohybuj kurzorem myši a přejdi na požadovanou oblast. Uvolněním tlačítka myši se vrátíš ke standardnímu náhledu. • Exportování všech vrstev do jedné Potřebuješ exportovat všechny vrstvy do jedné? I na to známe zkratku. Pomocí Control+Shift+Alt+E. (Command+Shift+Option+E pro Mac) spojíš všechny vrstvy do jedné. • Přehled klávesových zkratek[Zdroj: www.digitalsynopsis.com] • Užitečné pluginy Pokud jsi designér, nebo grafik, určitě oceníš plugin RH Hover Color Picker. Nabízí přehlednou práci s barvami a moderní rozhraní, které konečně nevypadá jako palubní deska v letadle. Kopec efektů a filtrů ti umožní ON1 Effects, obrázky zase získáš prostřednictvím pluginu Pexels nebo Shutterstock.   Adobe Illustrator Illustrator je velmi oblíbený pro své široké využití, vytvoříš v něm vše od firemního loga, webových ikon až po knižní ilustrace. Pokud si chceš osvojit užitečné tipy a triky pro práci s ním, jsi na správném místě. [Image] • Výběr podobných objektů Pokud už v Illustratore kreslíš složitější tvary, je užitečné se naučit, jak vyhledat podobné objekty. Pokud například chceme změnit vlastnosti více objektem, nemusíme pracné objekty vyhledávat, navíc mohou být částečně zakryty jinými objekty. Stačí vybrat vybrat jeden z objektů, přejít na Select>Same a vybrat požadované kritérium vyhledávání objektů (například Fill Colour). Všechny objekty s požadovanou barvou výplně pak systém vybere a změní pomocí vzorníku barev. • Nauč se správně používat Pen Tool Zvládnutí tohoto nástroje v Illustratori by mělo být tvým prvním krokem. Není to žádné umění a pomocí nástroje Pen Tool získáš větší kontrolu nad tím, co vytváříš. Výhodou je i jeho univerzální použití, jelikož například ve všech Adobe programech funguje stejně. • Použití Pathfinder k vytvoření komplexních tvarů Po zvládnutí Pen Tool by si měl zaměřit pozornost i na nástroj Pathfinder. Pathfinder umožňuje kombinovat objekty do nových tvarů. Můžete například vrstvit jednoduché tvary a poté pomocí ukazatele pohybu je transformovat na jednotnější, složitější tvar. Existuje několik tutoriálů k použití Pathfinder k transformaci základních tvarů na některá úžasná umělecká díla. • Vyrob si vlastní štětce Ilustrátor milujeme, ale je zapotřebí si v něm vytvořit vlastní prostor. Ne všechny jeho základní funkce jsou pro vytvoření vlastní grafiky dostačující. To platí například io štětcích. V Adobe Illustrator existují 4 základní druhy štětců: kaligrafické, rozptylové, umělecké a vzorkové. Ty máš ale možnost přidat si své vlastní. Vyber si všechny tvary, ze kterých chceš udělat štětec. V paletě štětců klikni na malou šipku vlevo vyber "new brush". • Použi Color CC Pokud chceš, aby tvé ilustrace vypadaly profesionálně, měly by obsahovat kombinace barev, které oku lahodí. To je ne vždy jednoduché a pokud nechceš ztrácet čas jejich porovnáváním, určitě využij Color CC. Tento nástroj ti umožní vybrat pěkné, vkusné kombinace barev, navíc jejich přidáním do palety barev budeš mít hned po ruce. • Přehled základních klávesových zkratek[Zdroj: www.digitalsynopsis.com] • Užitečné pluginy Převezmi kontrolu nad svými vektory pomocí VectorScribe v3, kterou tvůrci popisují jako vektorový švýcarský nůž. Pokud si začínající designér, který se chce ponořit do světa 3D grafiky, určitě neobejde plugin Cineware, efektní je i Gold Rush a Phantasm v3. Adobe InDesign Podobně jako Illustrator, je InDesign založen na vektorové grafice. Poskytuje prostor, ve kterém můžeš spojit všechny své ilustrace a grafiku (např. z Photoshopu, Illustratoru) a vytvořit si vlastní interaktivní dokumenty pro web, tisk, mobilní zařízení a podobně. A jaké triky by sis měl osvojit v InDesignu? [Image] • Vytvoření více objektů stejné velikosti Pokud chceš vytvořit více objektů stejné velikosti, nastav potřebnou šířku a výšku jednoho objektu. Potom je už jen třeba vybrat zbývající objekty a zvolit Object> Transform Again> Transform Sequence Again Individually. • Matematické funkce v panelu nástrojů řekněme, že máš obrázek v rámu a chceš ho zvětšit o 1“, protože by tak pravděpodobně vypadal lépe. V panelu nástrojů, konkrétně ve Width field napiš 1 hned vedle stávající hodnoty. Stiskni Tab a InDesign udělá ostatní za tebe. Rovněž můžeš použít i funkce odčítání (-), násobení (*) a dělení (/). • Používej vyplnění zástupným textem. Lorem Ipsum ti určitě nemusím představovat. V InDesignu nám může posloužit jako zástupný text (pravé tlačítko > Vyplnit zástupným textem) v návrzích, kde tento text použijeme pro lepší představu finálního návrhu. • Přizpůsobení rámu (frame fitting) Pokud chceš přizpůsobit rám grafice uvnitř něj, je zapotřebí dvojitý klik na roh rámu. Nebo zmáčkni Cmd-Opt-C (Mac) / Ctrl-Alt-C (PC). • Vkládání více obrázek pomocí Adobe Bridge (multiplace from Bridge) Sice pro vložení obrázku můžeš použít File>Place, případně přetáhnout požadovaný obrázek na plochu InDesign, je však určitě jednodušší vkládat více obrázků najednou. Otevři Adobe Bridge, vyber si obrázky, které chceš použít ve svém layoutu a zvol File>Place>In InDesign. Tím se automaticky přepneš do InDesign, pomocí kláves se šipkami můžeš procházet obrázky v kurzoru a jednoduše je klepnutím umístit. Pro úpravu můžeš využít Object>Fitting. • Aplikování efektu z jednoho objektu na jiný Podařilo se ti vytvořit skvělý efekt, který bys chtěl aplikovat na další objekty? V tom případě vyber objekt s požadovaným formátováním a potáhni ikonu “FX” z panelu efektů na objekt, na který chceš formátování aplikovat. V případě, že chceš vymazat všechny efekty z objektu, zvol „clear effects“ z Effects okna v paneli nástrojov.  • Klávesové zkratky Přehled všech užitečných klávesových zkratek najdeš zde! • Užitečné pluginy Aquafadas AVE ti usnadní digitální publikování - od návrhu po distribuci obsahu, jeho přizpůsobení různým platformám. Placený plugin Active Tables ti do InDesign přinese Excel, díky PDF2Id zase budeš moci importovat PDF soubory a konvertovat na editovatelný formát.   Práce v uvedených softwarech je velmi obsáhlá a komplexní, snažili jsme se ti uvést alespoň několik „hacků“ pro zjednodušení a urychlení práce. Pokud bys chtěl přispět nějakými ověřenými triky, poděl se o ně v komentáři! Zaujalo tě téma grafiky a designu? Na Learn2code jsme pro tebe připravili nabídku online kurzů grafiky, ze kterých si vybereš svůj ušitý na míru.
Java 10 a 11 – vybrané programátorské změny
Tipy a triky
22.05.2019
Skillmea

Java 10 a 11 – vybrané programátorské změny

Zajímá tě, jaké změny se udály v Java 10 a 11? Čti článek a vše podstatné se dozvíš. Java 10VarOd verze 10 je dostupná možnost nespecifikovat typy proměnných pro lokální proměnné, pokud je umí kompilátor zjistit z pravé strany. Namísto napsání typu stačí napsat nespecifikovaný typ a to var. var list = new ArrayList<String>(); Kompilátor umí zjistit, jakého typu je dopis a tedy nelze přidávat čísla do dopisu, ale pouze String. var list = new ArrayList<String>(); list.add("Jaro");Var se nebere jako klíčové slovo, ale jako nespecifikovaný typ. Tedy nemůžeme vytvořit třídy s názvem var, ale lze vytvořit metodu s názvem var. //error String return(){ return ""; } //ok String var(){ return ""; }Nová metoda na kolekcíchU kolekcí přibyla metoda copyOf, která zkopíruje jednu kolekci do druhé. List<String> list = List.of("Jaro", "Fero", "Duro"); Set<String> set = Set.copyOf(list); List<String> listCopy = List.copyOf(set); Map<Integer,String> map = Map.of(1,"Jaro",2,"Fero"); Map<Integer,String> map2 = Map.copyOf(map);Java 11Var v lambda výrazechLambda výrazy podporují typ inferenci, což znamená, že pokud používáš proměnnou v lambda výrazu, tak java kompilátor umí zjistit, jakého je typu a nemusíme typ zadefinovat. list.stream() .map(s -> s.toLowerCase()+".") .collect(Collectors.toList());V předchozích verzích jevy jsme nedokázali psát anotace k proměnným uvnitř lambda výrazu, které neměly zadefinovaný typ. Od verze 11 je to možné, brzy – nemusíme nadefinovat specifický typ, stačí napíšeme-li var. list = list.stream() .map((@Notnull var s) -> s.toLowerCase()+".") .collect(Collectors.toList());Jednodušší spuštění programuPokud si napíšeš jednoduchý program a chceš ho spustit v konzoli, tak jej musíš nejprve zkompilovat přes příkaz javac a poté spustit přes příkaz java. Nyní stačí, když rovnou spustíš .java soubor pomocí java příkazu. Stane se to, že se automaticky soubor zkompiluje a spustí. java Main.java java.lang.String metodyVe třídě String přibyly nové metody. isBlank() – vrací true, pokud je řetězec prázdný nebo obsahuje jen bílé znaky lines() – ze Stringu se vrátí stream řádků – pokud stream obsahuje oddělovače řádků java.util.function.Predicate notPředstavme si takový kód: lines.stream() .filter(s -> !s.isBlank())Pomocí Predicate.not vypadá krásnější a čitelnější: list.stream() .filter(Predicate.not(s -> s.isBlank()));S výhodou použití method reference: list.stream() .filter(Predicate.not(String::isBlank));Použijeme-li statický import: list.stream() .filter(not(String::isBlank));Pokud tě zaujal článek a chtěl by ses dozvědět více, tak klikni na moju stránku a přesuň se na to, co tě zajímá. Programování, kurzy, videa zdarma a jiné záležitosti. Klikej na www.jaroslavbeno.cz