Heading

Perex Html

Co má společného Picasso a WordCamp Košice 2020?
Události
26.02.2020
Skillmea

Co má společného Picasso a WordCamp Košice 2020?

WordCamp je nezisková konference, která se pořádá v 75 městech po celém světě. Je určena zejména fanouškům redakčního systému WordPress, zároveň má však značný přesah do marketingu, podnikání i osobního života. Rozvíjí znalosti a dovednosti, které jsou v dnešní IT době velmi žádané. Pablo Picasso byl významný umělec 20. století, který měl mnoho talentů. Možná o nich ze začátku ani nevěděl, ale postupným tvořením a rozvíjením se z něj stal maestro. Tak jako Picasso, i ty máš v sobě různé talenty, ale musíš je objevit a rozvíjet.[Image] Díky konferenci WordCamp Košice 2020 máš možnost získat znalosti a dovednosti o používání a škálování systému WordPress, poznat příběhy lidí z WordPress komunity, můžeš se stát součástí této komunity – objev a rozviň svůj #wordpresstalent. „Třetí ročník WordCampu v Košicích s sebou opět přináší nové změny, kterými se snažíme zvyšovat úroveň konference. Jednou z těch větších jsou nové prostory - Kasárny/Kulturpark. Ty se nacházejí v centru města, jen pár minut chůze od Hlavní ulice.“, uvedli organizátoři konference.   Už 16. května tě v prostorách Kasáren/Kulturpark čekají zajímavé přednášky i workshopy z různých oblastí tvorby, používání či propagace webu. Tématické okruhy přednášek a workshopů se budou střídat, takže pokud si např. hardcore dev, budeš mít program vystaraný na celý den. Learn2Code má rádo WordPress a proto jsme hrdým partnerem této konference. Ahoj a vidíme se 16.5.2020 v Košicích na WordCampu.
Rozhovor s lektorem kurzu o 3D modelování
Rozhovory
10.02.2020
Skillmea

Rozhovor s lektorem kurzu o 3D modelování

Nedávno jsme na naší stránce spustili první online kurz zaměřený na 3D modelování s použitím Autodesk Fusion 360. Jako freelancer, tvůrce a spolu-tvůrce se lektor kurzu Agi Gonda od roku 2015 věnuje ruční výrobě dřevěných dekorativních předmětů. Jelikož ho vždy zajímaly nové technologie a jejich možnosti využití ve výrobě, začal se v roce 2018 intenzivně věnovat oblasti konstrukčního modelování s propojením na 3D tisk a jiné možnosti výstupů. Od června 2018 jsem členem komunity e-NABLE, a zakladatelem její slovenské pobočky, jejíž dobrovolníci z celého světa využívají své 3D tiskárny k vytváření „open source“ tištěných dlaní a rukou pro děti a dospělé, kteří náhradu těchto částí rukou potřebují. Přečti si celý rozhovor s lektorem Agim 👇 Na začátek nejprve začněme tvou prací. Co přesně děláš?Na tuto otázku nedokážu odpovědět přesně :-) Když shrnu svůj okruh zájmů a pojmenuji to, co stále jmenujeme „práce“, posledních několik let se jako tvůrce a spolutvůrce věnuji ruční výrobě dřevěných dekorativních předmětů, což je ještě i dnes velkou částí mého fungování . Sám v sobě však cítím potřebu posunout se i za pomoci současných technologií od čistě ruční výroby k výrobě, která je do jisté míry usnadněna i nástroji řízenými počítačem – ať už je to CNC fréza nebo 3D tiskárnu, kterou při práci se dřevem využívám hlavně k výrobě různých šablon a přípravků. Jelikož se snažím všechny mé činnosti co nejefektivněji propojovat, věnuji se i zakázkovému 3D modelování, či poskytování konzultací, které souvisejí s učením se základů konstrukčního 3D modelování. Tak vzniklo i propojení s Learn2Code a video kurzem o získání dovednosti a přehledu při používání programu Autodesk Fusion 360.[Image] Na jakých projektech jsi pracoval? Jaké jsou tvé pracovní aktivity?V posledním období je pro mě velmi významné zapojení do projektu celosvětové komunity e-NABLE, jejíž dobrovolní členové využívají své 3D tiskárny a pro děti a dospělé připravují náhrady prstů, dlaní či celých rukou pro ty, kteří je potřebují a mají o ně zájem. Tato komunita funguje již devátý rok a je do ní po celém světě zapojeno více než 20000 členů s více než 10000 vytvořenými a předanými náhradami. V září 2018 se mi podařilo vytvořit pobočku této komunity i na Slovensku, pod názvem e-NABLE Slovakia ji můžeš najít na internetu i sociálních sítích. Navíc energie momentálně věnuji do přípravy a rozjetí mého nového projektu - GeoDome.sk, který je opět propojen se dřevem. Jde o přípravu a výrobu dřevěných konstrukcí kopule - geodomy, které lze velikostně libovolně přizpůsobit a použít na množství připravovaných realizací - provedení v provedení fóliovníku, výletu - výběhu pro zvířata, překrytí bazénu as dalšími úpravami je lze využít i jako rekreační domek určený pro odpočinek a relax. A znovu jako dosud je opět vše propojeno a na přípravu těchto konstrukcí ve velké míře využívám 3D modelování a tisku šablon na 3D tiskárně.[Image] A jak ses k 3D modelování vůbec dostal?První pokusy naučit se modelovat jsem měl ještě někdy na střední škole. Když jsem se však do učení pustil, velmi rychle jsem s ním skončil s výsledkem a prohlášením, že něco takového nezvládám :-) Potom však přišel můj zájem o 3D tisk as dostupností velmi jednoduchých modelovacích programů, které jsou ve vynikající funkčnosti přístupné ve free verzích i přes webový prohlížeč, jsem dokázal a chtěl vstoupit i do tohoto nového prostoru. Byly to hodiny a hodiny sledování zahraničních instruktážních videí, ze kterých jsem si vybral ty způsoby a postupy, které jsou pro mě nejjednodušší, nejrychlejší a nejefektivnější. Tyto informace se mi hned podařilo vyzkoušet v praxi při spolupráci na modelování a tlačení zmenšených modelů sportovních trenažérů. Proč ses rozhodl spolupracovat s Learn2Code?Myšlenka spolupráce se mi objevila jako nabídka spolupracovat s Learn2Code jako lektor. Byla to pro mě jednoznačně výzva jít do nové zkušenosti a zužitkovat získané informace a znalosti. Co všechno se člověk naučí ve tvém online kurzu Autodesk Fusion 360?Kurz a jeho obsah jsem skládal s myšlenkou, aby se za těch několik desítek minut setkat s 3D modelováním prakticky kdokoli – i když s ním dosud neměl žádnou zkušenost. Zájemce se dokáže seznámit se základními možnostmi a funkcemi tohoto programu as malou dávkou představivosti si po jeho ukončení vymodelovat požadovaný objekt a od úplných základů zjistit, jak funguje vytvoření prostorového objektu přidáním třetí dimenze. Program Fusion 360 jsem zvolil pro jeho dostupnost a vysokou variabilitu v pozdějším - nazvu ho pokročilejším modelování. V kurzu společně přejdeme od stažení a instalace programu, přes jeho základní funkce a nastavení. Možná nebude na začátku dávat smysl, že začneme s kreslením a přiřazováním vztahů objektů ve 2D prostoru a až později přejdeme na přidání jejich třetího rozměru. Je to však v tomto případě nejjednodušší způsob a postup a po narýsování kruhu a čtverce se prakticky jednou dodatečnou funkcí dostaneme z kreslení pločných objektů k tvoření těch prostorových. Je v této oblasti třeba sledovat aktuální trendy a inovace? Jak jsi na tom ty?3D modelování je oblast nekonečných možností. Jen za období tvoření kurzu vývojáři programu Fusion 360 několikrát změnili a zjednodušili pracovní prostředí a přidali mu další užitečné funkce. Jednou z nich bylo vylepšení zjišťování pevnosti a statiky objektů či modelování PCB desek s celým portfoliem doplnění elektroniky ve formě pluginu. Někdy je pro mě nepříliš snadné držet se všemi novinkami krok a naučit se je používat. Dělám to však tak, že nové možnosti programu zaregistruji a naučím se je a začnu používat až ve chvíli, kdy je opravdu potřebuji. Myslím, že při dnešním množství informací a změn to takovýmto způsobem dělá většina z nás :-) Velmi rád však sleduji inovace v oblasti 3D tisku a novinky, které pomohou tento proces výroby zdokonalit a zrychlit. Rychlost procesu výroby je momentálně jednou z velkých výzev pro všechny výrobce těchto zařízení. Co tě nejvíc baví na tvé práci?Na všem do čeho se pustím mě nejvíc baví obrovská dávka kreativity a do velké míry i volnosti při tvoření. Baví mě nové nápady, setkání se stejně naladěnými lidmi, ale mám rád i dobře a efektivně nastavený výrobní stereotyp, kterým si energii neubírám – naopak mě taková činnost dokáže velmi povzbudit. Absolutně vše vidím v nastavení jednoduchosti procesů a nezatěžováním se záležitostmi, které nejsou zrovna v tuto chvíli podstatné. Jaké máš plány do budoucna?I když mám představy o dalším směřování, příliš tuto otázku neřeším. Mnohem více se zaměřuji na to, co můžu udělat lépe a jinak než dosud v tuto konkrétní chvíli. Jak mohu změnit zažitý postoj, kterým jsem se již několikrát nevedl k žádnému citelnému posunu a začít dělat věci novým – otevřenějším způsobem a více důvěřovat přicházejícím okolnostem. Hej, to je můj plán do budoucna :-) Krátký odkaz všem čtenářům na závěrMůj odkaz shrnu do pár slov... Za jakýchkoli okolností - i těch lehkých a ne ne tak lehkých, nepřestávej tvořit. Cokoli! Rukama, nohama, celým tělem, nástrojem, přístrojem, obrazem v mysli či nejhlubším pocitem. Tak, aby to úmyslně neublížilo nikomu druhému, ale aby tě to posunulo v každou novou chvíli o krok vpřed. A hlavně vlož do každého tvoření co nejvíce své energie a srdce, aby sis s každým pohlédnutím do zrcadla či každým večerním usínáním mohl a mohla říct - dnes jsem udělal a udělala nejvíc, co bylo v mých silách. I pro všechny kolem, ale v první řadě pro sebe. Pokud máš na Agiho nějaké dotazy, neváhej je napsat do komentářů 👇 Kurz o 3D modelování v Autodesk Fusion 360 najdeš na naší stránce. 
Známé weby, které používají WordPress
Ostatní
19.01.2020
Martina Baumann

Známé weby, které používají WordPress

WordPress je nejznámější a nejrozšířenější redakční systém CMS (Content Management System) pro tvorbu webstránek, který stále využívá většina uživatelů. Vznikl v roce 2003 a od té doby si už mezi sebou našel miliony uživatelů a fanoušků. Jeho velkou výhodou je dostupnost, srozumitelnost a možnost instalovat spoustu pluginů a widgetů, díky kterým například změříte návštěvnost, doplníte si svůj web různými aplikacemi nebo si jej propojíte se sociálními sítěmi. Tento článek původně vznikl v létě 2017, upravili jsme jej o a doplnili o další weby. Čti dál. A k čemu WordPress slouží?Takový WordPress se používá na klasické webové stránky, klasický e-shop a samozřejmě oblíbené blogy. Jeho velkou výhodou je, že nepotřebujete licence. Tento publikační software je totiž vyvíjen pod licencí GNU GPL (licence pro svobodný software). Používají jej i velké firmy, organizace, redakce na Slovensku a také v zahraničí. Pokud i ty přemýšlíš nad tím, že by sis chtěl udělat webku a nejsi zrovna dobrý v programování, může ti pomoci tento blog na malou inspiraci. Existují různé možnosti, jak si udělat webku jednoduše a rychle ve WordPressu a to od systémů, které jsou zdarma až po ty placené. V tomto případě však určitě platí, pokud chcete rozjet svůj byznys ve velkém stylu, investujte do placené verze – působí to totiž mnohem profesionálněji a potencionální klienti jistě ocení i to, že máte vlastní název web stránky. WordPress.orgNabízí vlastní název webky a také emailovou adresu - kromě toho, že je to (jak jsem již zmiňovala výše) profesionálně, tak je to snáze zapamatovatelné. Dále můžete používat pluginy a také spoustu možností, jak může váš web vypadat. V neposlední řadě nabízí kvalitní SEO. Abyste však neřekli, zde je kratičký přehled šablon, které jsou k použití zdarma: Sydney, Interface, Flash, Zerif Lite, Everal, Astrid, Hestia, ionMag, Writee a mnohé další (opravdu je jich na internetu celá spousta, stačí jen trošku poguglit). WordPress.org je vhodná pro lidi, kteří chtějí mít seriózní profesionálně vypadající webovou stránku nebo eshop. Pokud s WordPressem teprve začínáte, určitě si prohlédněte náš online kurz pro začátečníky o WordPressu ao tom, jak rozběhat a spustit vlastní webstránku. Možná jste se někdy setkali také s platformou WordPress.com. WP.com je vhodná spíše pro netechnické lidi, kteří nemají kapacitu pro různá nastavování ve "klasickém" WordPressu. Známé WordPress webyPojďme se nyní podívat na známé webové stránky, které jsou založeny na WordPressu. Které jsou to? Nemusíte se mnou souhlasit, můžete mi pod článek napsat své vlastní tipy. Objektivní názor v tomto případě jednoznačně neexistuje 😊 A hádat se s vámi nebudu... Denník N Začněme nejprve od populárního slovenského deníku, které se věnuje převážně zpravodajství a investigativní žurnalistice. Má svoji internetovou stránku, která funguje také na WordPressu. Má velkou čtenářskou základnu, denně produkuje desítky článků a různých příspěvků.[Image] Startitup Kdo by neznal na Slovensku tento portál? Populární web, který je zaměřen na úspěšné startupy a přináší velmi mnoho poutavých příběhů nejednoho úspěšného Slováka. Všechny tyto příspěvky na oblíbené webce Slováků čtete právě díky WordPressu.[Image] Dušan Plichta Blog Velmi populární je i tento blog, který mimo jiné získal letos speciální cenu Nejlepší WordPress blog 2017. Součástí webky je také e-shop.[Image] ADMA Asociace digitálních marketingových agentur (ADMA) je známá jako sdružení profesionálních agentur, které působí v oblasti digitálního marketingu. A jejím hlavním úkolem je zvyšování úrovně digitálního marketingu na Slovensku.[Image] Visibility Agentura se na začátku zaměřila na SEO, později se však začala věnovat online marketingu ve velkém a dnes má významné klienty. Webka je spojena kvalitního obsahu a pěkného designu.[Image] PizzaSEO Další špičková agentura, která používá WordPress a je důkazem, že to dělá dobře. Také významné digitální agentury používají WordPress.[Image] Bloger roka A tak určitě musím vzpomenout i tuto webku – ptá si to.[Image] V zahraničí používají WordPress opravdu velká jména, zmíním například tato: FORBES Snad nejdůvěryhodnější magazín, známe jej i díky populárním žebříčkům nejbohatších lidí na planetě, který pravidelně uveřejňuje.[Image] TECH CRUNCH Zpravodajský web o startupech, technologiích, ventura kapitálu a Silicon Valley.[Image] REUTERS Zpravodajská a tisková agentura, která používá WordPress.[Image] THE WALL STREET JOURNAL Známý americký deník se věnuje zejména financím a podnikání.[Image] ebay ebay nemusím ani představovat? Určitě sis tady už něco koupil i ty.[Image] A mně se líbí ještě: Star Wars Blog Oficiální blog o Star Wars - najdeš zde všechny aktuální info, videa, recenze, komunitní sekci a mnoho dalšího.[Image] Baťa Proč bychom nezmínili i něco pro dámy - obuvnická firma, kterou založili sourozenci Anna, Antonín a Tomáš Baťoví ve Zlíně v září 1894.[Image] NFL A aby nebyli zkráceni i muži - tak vzpomínám i tuto webku. National Football League je největší a nejprestižnější liga amerického fotbalu na světě.[Image] The New Yorker Týdeník, který přináší komentáře a zprávy o politice, ekonomice, mezinárodních záležitostech, kultuře, umění a vědě. A samozřejmě používá WordPress.[Image]Vypíchli jsme jen několik webů, které používají WordPress, je jich určitě mnohem víc. Jelikož na WordPressu dnes běží přibližně 20% všech webů na světě. Pokud jsme na nějaký významný web zapomněli, vzpomeň ho v komentáři. Líbil se ti tento článek? Věnuj mu 👍 Pokud máš nějaké rady a tipy i ty a rád by ses s nimi podělil s ostatními, napiš nám dolů do komentáře 👇
Kotlin vs. Java - méně kódu
Vzdělávání
06.01.2020
Skillmea

Kotlin vs. Java - méně kódu

Kotlin a Java jsou kompatibilní programovací jazyky. V tom smyslu, že pokud zkompilujeme Java kód, tak se vytvoří bytecode v souboru .class. Pokud zkompiluji Kotlin kód, tak se vytvoří bytecode v souboru .class. Tedy, jestli pracuješ v Kotlině nebo v Javě, tak nakonec budeš mít kód, který si bude rozumět a který dokáže běžet tam, kde dokáže běžet JVM – java virtual machine. V tomto článku vám chci ukázat to, proč byl Kotlin vytvořen – aby nám co nejvíce zjednodušil psaní kódu. Představ si, že chceš napsat třídu Auto. Ta má fieldy název a počet dveří. Tyto fieldy budou private a final – tedy po prvním nastavení je nemůžeš změnit. Přístup k těmto fieldům můžeš udělat jen přes public get metodu. Zároveň umíš sestrojit auto tak, že mu zadáš jen název. Pokud bude zadán jen název, tak počet dveří bude automaticky 4. Pokud zadáš název a počet dveří, tak se fieldy nastaví tak, jak jsme to zadali v konstruktoru. Kód v JavěTakto bude vypadat kód napsaný v Javě: public class Auto { private final String nazov; private final int pocetDveri; public Auto(String nazov) { this(nazov,4); } public Auto2(String nazov, int pocetDveri) { this.nazov = nazov; this.pocetDveri = pocetDveri; } public String getNazov() { return nazov; } public int getPocetDveri() { return pocetDveri; } }Nejprve máme dva privátní final fieldy: private final String nazov; private final int pocetDveri;Pak konstruktor, pokud chci vytvořit objekt auto jen pomocí názvu: public Auto2(String nazov) { this(nazov,4); } Konstruktor, pokud chci vytvořit auto a nastavit název a počet dveří: public Auto2(String nazov, int pocetDveri) { this.nazov = nazov; this.pocetDveri = pocetDveri; }A nakonec get metody, abychom měli přístup k daným fieldům: public String getNazov() { return nazov; } public int getPocetDveri() { return pocetDveri; }Jak to udělám v Kotlině?Potřebuji tento kód: class Auto (val nazov: String, val pocetDveri: Int = 4) { }To je všechno, těch 20 řádků v Javě je jeden řádek kódu v Kotlině. Za Auto jsou závorky - to je primární konstruktor, ve kterém se nastavují takzvané property. První property je název, který je val – val znamená, že hodnota se nemůže později měnit. Druhá property má nastaveno = 4, to znamená, že pokud chci vytvořit auto jen zadáním názvu, tak se automaticky pocetDveři nastaví na 4. Takto vytvořím Auto zadáním obou property a pod tím je přístup k property přes tečku: val skoda = Auto("Skoda", 5) skoda.nazov skoda.pocetDveriVytvoření auta jen s názvem: val auticko = Auto("Skoda")Záver Líbí se ti tento přístup? Chceš vědět více o programovacím jazyce Kotlin? Sleduj Learn2Code a věřím, že najdeš co hledáš. Připravovaný kurz o Kotlině zveřejníme již brzy.
Testování Java aplikací s JUnit
Vzdělávání
28.11.2019
Skillmea

Testování Java aplikací s JUnit

JUnit framework úvodPředstav si naprosto jednoduchou metodu, která má za úkol spočítat dva vstupní parametry metody. public static int sum(int number1, int number2){ return number1 + number2; }Jak bys otestoval tuto metodu? Zavolal bys danou metodu, a následně bys výsledek porovnal s očekávanou hodnotou. Pokud by metoda nevrátila očekávanou hodnotu, tak bys napsal hlášku, že test neprošel, pokud by vrátil očekávanou hodnotu, tak bys napsal, že test prošel. int sumNumber = sum(1, 4); if(sumNumber!=5){ System.err.println("Test failed."); }else{ System.out.println("Test passed."); }Co jsem udělal, je to, že náš kód jsem porovnal s jedním možným případem výsledku. Anglicky se setkáš s názvem test case. Tedy jsem zatím udělal jeden test case. Ty bys měl ověřit několik test časů. Svůj kód musíš vystavit „stresu“. Tedy si napíšeš několik dalších test časů. Například, jak to bude pracovat s nulou: int sumNumber = sum(1, 0); if(sumNumber!=1){ System.err.println("Test failed."); }else{ System.out.println("Test passed."); }Nebo jak to bude pracovat s negativním číslem: int sumNumber = sum(1, -10); if(sumNumber!=-9){ System.err.println("Test failed."); }else{ System.out.println("Test passed."); }Toto byly takzvané pozitivní testy. Test si považoval za passed – za úspěšný – tehdy, když byla splněna podmínka. Ty umíš ale napsat i takzvané negativní testy. Kde test prošel, pokud nebude splněna podmínka. Například test projde-li částek 2 a 2 není 5 a podobně. int sumNumber = sum(2, 2); if(sumNumber!=5){ System.out.println("Test passed."); }else{ System.err.println("Test failed."); }Náš kód jsme vystavili různým testům casem. Pokud testy projdou, tak metoda je ošetřena určitě víc – je více spolehlivá než kdybychom nenapsali, žádný test case. Co jsme udělali?Připravili jsme si testy. Poskytli jsme vstupní parametry testům – různá čísla ke spočítání. Spustili jsme testy a poskytli jsme také očekávané výsledky. Následně jsme vypsali hlášky, zda testy prošly nebo ne. Pokud bychom měli další metody, které bychom museli otestovat, pak bychom napsali další testy. Udělali bychom vlastně tytéž kroky jako při testování první metody. Co mají první testy odlišné od druhých testů? Voláme jiné metody, máme jiné parametry testů a máme jiné požadované výsledky. Co mají první testy společného s druhými testy? Testy jsme spustili – ke spuštění testů není nic odlišného. Verifikovali jsme výsledky – verifikování proběhlo iv prvním i druhém případě a následně se v obou případech napsaly hlášky na konzoli. JUnit framework nám usnadní způsob, jakým budeme spouštět testy a také způsob, jakým se uživateli sdělí výsledky testů. Spuštění, verifikování a vypsání hlášek bude řídit JUnit framework. My řekneme JUnitu – tady máš můj test kód a ty ho teď spusti a postarej se o to. JUnitu řekneme, tento výsledek očekávám, tyto údaje vkládám - prověřit to. JUnit to prověří a nám sdělí v pěkné čitelné formě, zda testy prošly a pokud neprošly, tak nám řekne přesně, které testy neprošly.[Image]JUnit byl mnoho let ve verzi 4. Verze 5 není přímo kompatibilní s verzí 4, ale tvůrci JUnit 5 připravili api, přes kterou umíme komunikovat i se starými testy – ta se jmenuje Vintage. Dále nové api se jmenuje Jupiter. Tyto api pak spoléhají na core frameworku – tedy zdroj – kód, který se stará o všechno ostatní. Spouštění testů a podobně. Plus máš možnost napsat své vlastní api, které pak bude také využívat core frameworku. Pokud budeš používat Jupiter plus core, tak si do projektu musíš stáhnout tyto závislosti. My budeme používat maven pro tyto účely. Vývojová prostředí jako IntelliJ IDEA nebo Eclipse mají zabudovanou integraci s JUnit 5 frameworkem a tak můžeme testy spouštět pomocí těchto vývojových prostředí. Pokud tě toto téma zajímá víc, sleduj online kurz JUnit a TDD pro programátory.
Lektor Michal Žák: "Nedělej ošklivé věci, pak se jen tak poflakují po světě."
Rozhovory
15.11.2019
Skillmea

Lektor Michal Žák: "Nedělej ošklivé věci, pak se jen tak poflakují po světě."

Vyzpovídali jsme lektora Michala Žáka, který pro tebe na Learn2Code připravil kurz Adobe Illustrator Advanced  a finišuje další online kurz zaměřený na komunikaci s klientem – Client management. Michal se věnuje především grafice, rozjetých má však několik projektů. Jeho kariéra začala v 15-ti, kdy objevil Photoshop, k srdci mu však přirostl Illustrator. Jeho motto? "Nedělej ošklivé věci, ony se pak jen tak poflakují po světě." Proč by měl být právě Illustrator tím vyvoleným softwarem pro grafika a co připravuje v dalším kurzu se dozvíš v rozhovoru.[Image] Na jakých projektech momentálně pracuješ?Momentálně mi většinu času zabírá práce pro AR Visual. Je to malá snaživá firma. Nastoupil jsem na marketingovou pozici, momentálně dělám na product developmentu - programování, práce s klientem, demo videa. A neměnil bych. Grafike se sice věnuji pomálu, ale vždy se umím vyřádit na externích projektech - jako například tvorba kurzu pre Learn2Code. Není to tak snadné, jako když si kreslím podvědomě. Primárně se věnuji hlavně online grafice, UI designu a printu, nepřimárně fotím a kodím weby. Nepohrdnu však ničím, dokud to nejsou zvrhlé požadavky typu „dej mi do loga zkřížené pistole“ nebo „dejme tam slogan 2x, aby pochopili o co jde“. True story. A významný projekt? Například jsem nedávno nakódil .js appku, díky které nám klient odklepl megadrahý projekt na několik let. A ještě jsem jednou dělal takovou tabuli pro kebab, což visela jedno léto na Nitranském koupališti.[Na pozícii v Bistro.sk Michal pochopil, že ilustrácie mu moc nejdú] Při takovém množství aktivit, co ti v životě pomáhá udržovat balanc?Mám tu nejperfektnější a nejtolerantnější ženu, která zná rozdíl mezi helveticí a arialem a zná mě do puntíku. Když je člověk freelancer, tak je důležité, aby mu partner byl oporou. Častokrát sedím nad projektem do čtvrté rána nebo mi vyjde business trip na dceřině narodky. Prostě shit happens. Mít však u sebe někoho, kdo to umí pochopit, je k nezaplacení. Takže balanc mezi 24/7 prací a rodinou. To je významný projekt. Kromě toho máme doma brzy už 10letou slečnu, které se vedle práce nestíhám věnovat tak, jak bych chtěl. Na Vánoce mimochodem obdrží grafický tablet. Tak uvidíme. Já jsem koneckonců začínal s ilustracemi na starém Geniusu na intráku v Nitře. Proč ses rozhodl stát se lektorem v Learn2Code?Toto by ani neměla být otázka 😀 Byli jste se podívat ven? Vždyť to je strašné – nezkernované nápisy, písma typu papyrus a calibri, barevně ani nemluvím. A weby? 😀 Mordor. Lidé se musí učit dělat věci dobře. Musí se naučit, že typografie je důležitá a rozdíly mezi RGB a CMYK nejsou jen v kalibraci monitoru. Ne každý, kdo si stáhne Photoshop a naučí se v něm běhat myškou, je také grafik. Co se lidé naučí ve tvém kurzu Adobe Illustrator Advanced?V první řadě se seznámí s Adobe Illustrator. Zjistí, že to není program jen pro ilustrátory nebo že se tam dělají ikony. Podle mě v 95% případů Illustrator spokojeně nahradí InDesign a Photoshop. Kromě toho mluvím o tom, jak si udělat pořádek ve větších projektech, co je to Grid a proč používat pravítka, něco o typografii, klávesové zkratky, tabulky, štětce, scripty a nějaké speciální efekty :D Nakonec se budeme věnovat UI-čku a tomu, jak nezlobit člověka, který to bude po nás kódovat :) Na co se zaměřuješ v připravovaném kurzu?Kurz bude zaměřen na komunikaci s klientem as lidmi obecně. Jak přesedlat z full time práce na freelancera, jak si nacenit své služby (zejména ty kreativní), kde a jak získat nové klienty, sestavit si portfolio a podobně. Prostě jak to nepokašlat s klientem, je to jedno, jestli jste od grafiky, od webu nebo whataver-ingu. Pokud chce být kreativec v dnešní době úspěšný, minimálně 70% jeho energie a času musí být věnováno práci s klientem. Projedeme si tedy i konfrontační situace, které mohou při komunikaci nastat. Sám jsem si tím vším prošel a přál bych si, aby takový návod někdo vypustil do světa už dříve. A co další plány do budoucnosti?Chtěl bych se pustit do tutoriálu zaměřeného na kódování pro grafiky. Jak si tedy sestrojit vlastní web, aniž bychom táhli Wordpress, WiX a podobné bolehlavy. Navíc ten, kdo pracuje v oblasti UI/UX, by měl vědět, jak web development vlastně funguje. Dokončit bych chtěl i e-book o Typografii a jejím používání na webu, v printu a podobně. Ale nic složitého. Jednoduchá pravidla, vysvětlení hierarchie, kontrastu, párování a podobně. Prostě co nedělat, proč to nedělat a pokud dělat, jak to dělat správně. Co odkazuješ lidem, kteří se chtějí uplatnit v grafickém designu?V oboru grafiky? Jděte do toho! Specializace nevede nikam. Na Slovensku určitě ne a obzvlášť ne v korporátních strukturách. Tedy s výjimkou těch, kterým stačí práce za 700-800 v čistém pro nějakou pseudo-digitálku z horní dolní a naplňuje je logotvorba pro lokální vegan bistrá s životností 4 měsíce. Pokud chcete jít do toho, učte se a sbírejte tolik informací, kolik se jen dá. Například, jak funguje velkoformátový print, specifika mobilních typefaceů, jak zanimovat logo-reveal v After Effects, což je to inverse-square-law při fotografii, jakou uzávěrku zvolit při 30fps, jaké jsou formáty pro google bannery, jak napsat blog, na který lidé reagují, jak nakódovat online 3D product viewer atd. atd. A to vše minimálně proto, abyste měli přehled. Neříkám, že máte být profík v každé disciplíně. A určitě všechny ty znalosti a zkušenosti budete umět jednou dobře využít. :) Líbil se ti rozhovor? Věnuj mu 👍 Pokud máš na Michala nějakou otázku, napiš ji dolů do komentáře 👇
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.
EU Code Week: Evropský týden programování
Události
06.10.2019
Skillmea

EU Code Week: Evropský týden programování

Ve dnech 5.–20. října 2019 vrcholí sedmý ročník Evropského týdne programování, tzv. EU Code Week. Dobrovolníci z řad učitelů, institucí a nadšenců z více než 70 zemí se budou snažit prostřednictvím aktivit představit nové vzdělávací možnosti a materiály, aby tak zvýšily zájem o programování a zatraktivnily jeho výuku. Proč se zapojujeme i my?Hodiny informatiky na základních a středních školách jsou ne vždy vedeny zábavnou a poutavou formou. Jen si vzpomeň na ty své. Digitální gramotnost se však pro uplatnění na trhu práce stává klíčovou a o tom, jakou roli by měla hrát ve vzdělávání není třeba vést diskuse. Něco o tom víme iv Learn2Code, kde se nás denně obracejí lidé s otázkou, kde s programováním začít. Proto jsme se i my s podporou spoločnosti Google opět staly součástí iniciativy EU Code Week, abychom podpořili digitální vzdělávání na školách a pomohli dětem rozvíjet znalosti a dovednosti, které jim pomohou realizovat nápady a usnadní orientaci v digitálním světě. Pokud se v něm totiž budou správně orientovat již nyní, budou lépe připraveni využívat jeho přínosů a čelit jeho nástrahám.[Image] Tento rok sa s Learn2Code vydáváme na východ Slovenska do Košic a okolí, kde se prostřednictvím workshopů budou moci děti na více základních školách seznámit s programováním v prostředí Scratch, který se díky své jednoduchosti výborně hodí pro výuku programování, vytváření interaktivních her a animací. Kromě Scratchu máme pro děti připraveny i zážitkové hodiny s roboty Ozoboty a programování her v jazyce JavaScript pro pokročilejší. Letos jsme spojili síly is leadership programem Teach for Slovakia a některé ukázkové hodiny zorganizujeme na školách zapojených do TfS. Pokud chceš vědět, jak to na takovém našem workshopu vypadá, můžeš si prohlédnout tento sestřih z roku 2016. Jak se můžeš zapojit?Evropský týden programování je nezávislá iniciativa dobrovolníků s podporou Evropské komise, do které se může zapojit kdokoli, tedy i ty. Můžeš být učitel, vést programátorský kroužek nebo se zkrátka dobrovolně angažovat v digitálním vzdělávání. Stačí, když uspořádáš programátorskou aktivitu #CodeWeek a přidáš ji na mapu na stránce codeweek.eu. Na stránce navíc najdeš návod a propagační materiály, které ti s realizací pomohou. Pokud si na něco podobného netroufáš, můžeš tuto akci podpořit i použitím hashtagu #codeweek. 
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.
ReactiveConf 2019: pátý ročník konference míří opět do Prahy
Události
24.09.2019
Katarína Kučáková

ReactiveConf 2019: pátý ročník konference míří opět do Prahy

Pátý ročník konference ReactiveConf 2019 míří do Prahy, aby opět přinesla přehled nejnovějších technologií z prostředí programování a software developmentu. Chceš odkrýt tajemství společností jako jsou Zeit, Google, Brave, Cypress a další? Co pro tebe letos organizátoři připravují? Čekají tě 3 nabité dny přednášek, workshopů, panelových diskusí, které zaklíní závěrečná párty. Tentokrát se organizátoři snažili přesáhnout rámec React, Angular or Vue a rozšířit diskusi na další prvky ekosystému jako jsou ReasonML, Elm, Clojure or Nuxt.js. Dva dny konference + festivalový denReactiveConf se koná od 30.října do 1.listopadu 2019 v prostorách Forum Karlin v centru Prahy. První dva dny jsou konferenční, na 4 stazích budou probíhat přednášky, panelové diskuse a tvz. lightnings talks (krátké několikaminutové přednášky a prezentace). Ze 60 speakerů zmiňme namakaného softwarového inženýra Davida Nolena, Briana Holta z Microsoftu se svou přednáškou o základech futuristického kódu a podobně. Třetí, festivalový den, je věnován především workshopům - čeká jich na tebe více než 15, program bude doplněn o přednášky a na závěr odstartuje afterparty, která se přehoupne až do dalšího dne. Pro koho je konference určena?Je určena pro tebe, pokud programuješ nebo se zajímáš o nové technologie. Poslechneš si novinky ze světa front- a back-endu, mobilních aplikací, mezitím můžeš u kávy a občerstvení networkovat. Letos se očekává více než 1300 účastníků. Kde sehnat lístky?Lístky seženeš přímo na stránce ReactiveConf až do 29.10. 2019. Pokud navíc při platbě zadáš kód "Learn2code", získat 20% slevu na individuální lístek.[Image]
4 nové online kurzy
Novinky
03.09.2019
Skillmea

4 nové online kurzy

Tento týden ti na Learn2Code přinášíme 4 nové kurzy, ve kterých jsme dali prostor několika novým tématům. Jsou to online kurzy zaměřené především na soft skills, zpestřením je určitě šachový kurz se slovenskou jedničkou Jánem Markošem. Zaujalo? Přečti si krátké představení kurzů v článku. Prezentační dovednosti - základyPokud i ty míváš roztřesená kolena vždy, když máš vystoupit na pódium nebo prezentovat svůj nápad před skupinou lidí, měl bys zaměřit pozornost na tento kurz. Nikdo jako řečník z nebe nespadl, i ty se máš možnost osvojit si a zdokonalit své prezentační dovednosti tak, abys při vystupování působil/a sebevědomě. Co máš dělat při vystupování s rukama, kam se dívat a jak pracovat s publikem ti vysvětlí Andrej Mažáry - lídr Slovenských Toastmasters (globální organizace věnující se řečnictví) a středoevropský šampion v řečnických improvizacích.   Jak přemýšlet při fotografováníV nabídce máme mnoho kurzů zaměřených na technickou stránku fotografie. Vytvořit dobrou fotku však není jen věcí kompozice a techniky, fotka by měla být nositelem příběhu, emoce, kterou chce fotograf zachytit. Učit se budeš od tří úspěšných a oceňovaných fotografů, kteří se věnují především dokumentární a reportážní fotografii. Každý z nich ti poskytne vlastní pohled na postupy a techniky, které při focení používají, jak pracují s objektem, s různými zdroji světla, prozradí ti kompoziční tipy a nápady. Kurz je určen tobě, máš-li už zvládnuté základy práce s fotoaparátem, možná uvažuješ nad focením jako svým živobytím a hlavně chceš tvořit fotky, které budou výjimečné.  Kurz podnikání - jak začítKurzem tě bude provázet osm zakladatelů a CEO úspěšných slovenských firem. Tím myslíme značky jako Tuli, CURAPROX, daren & curtis, VISIBILITY, Be Cool a další. V tutoriálech se s tebou podělí o své zkušenosti, Know-how a zodpoví důležité otázky, nad kterými možná uvažuješ i ty. Jak myšlenku přeměnit na realitu, nápad na fungující byznys? Jak umíš odhadnout jeho úspěch? Jakou roli hrají brand, firemní kultura či hodnoty firmy? Vysvětlí ti i plusy a minusy partnerství v podnikání, jak a kdy přijímat nové zaměstnance a co dělat, kdyby to celé nevyšlo. Šachy (Coming soon)Dlouholetá šachová jednička na Slovensku Ján Markoš odhaluje své šachové mistrovství. Uč se od něj o šachových strategiích, taktikách či síle jednotlivých figur. Objevíš strategické a taktické postupy, o kterých jsi možná dosud nevěděl. Kurz je určen mírně a středně pokročilým šachistou. Ať už rozehráváš šachové partie online nebo tváří v tvář, tento kurz tě dostane na vyšší úroveň. Našel jsi kurz, který tě zaujal a bude pro tebe přínosným? Pokud máš případně návrh na další témata kurzů, které bys v Learn2Code uvítal, napiš do komentáře.