Náš blog

Nejznámější tech a IT seriály
Ostatní
12.04.2020
Marián Kristeľ

Nejznámější tech a IT seriály

Připravili jsme pro tebe seznam seriálů z oblasti IT, technologií a vědy. Komediální, kriminální i sci-fi. Pokud máš čas a jsi seriálový maniak, podívej se na náš výběr. IT CrowdZačínáme britskou klasikou se zábavnou dvojkou Royem a Mossem, kteří pracují v IT oddělení firmy Reynholm Industries. Jejich šéfkou se stane svá Jen, která toho o serverech a informačních technologiích neví téměř vůbec nic. Jen nemá zájem pracovat s Royem a Mossem v suterénu budovy, kde se IT oddělení nachází. Postupně však k sobě najdou cestu a vytvoří sehraný tým. Seriál má 5 sérií a na IMDB má hodnocení 8,5. Doporučujeme 👌 Silicon ValleyKomediální seriál z produkce HBO z prostředí mekky technologických firem si od svého začátku získal mnoho fanoušků. Hlavními postavami jsou programátor Richard, jeho spolubydlící Big Head, Gilfoyle a Dinesh. Žijí zdarma v domě milionáře Erlicha výměnou za podíl ve všech svých projektech. Richard vyvine unikátní algoritmus a musí se rozhodnout, zda přijme multimilionové nabídky k odkupu nebo založí vlastní firmu. Seriál nabízí satirický pohled na život ve startupech v Silicon Valley. Celkem bylo natočeno 6 sérií a seriál má na IMDB hodnocení 8,5. Mr. RobotKto má raději drama a thrillery, pro toho doporučujeme seriál Mr. Robot. V jedné bezpečnostní firmě pracuje mladý programátor Elliot (Rami Malek), který má na starosti kyberbezpečnost korporace E Corp. V noci se však z něj stává hacker a chce zničit ty, které přes den chrání. Podaří se mu to s pomocí tajemného Mr. Robota (Christian Slater), který Elliota naverbuje do své hackerské organizace F-Society? Seriál byl ověnčen několika oceněními, včetně Zlatého glóbu za nejlepší dramatický seriál nebo Cenou Emmy za nejlepší herecký výkon v hlavní roli. Seriál má 4 série a hodnocení na IMDB má známku 8,5.  WestworldDalší úspěšná produkce z dílny HBO. Seriál Westworld patří mezi nejsledovanější TV seriály současnosti. Inspirací byl stejnojmenný film a děj tohoto sci-fi dramatu je zasazen do futuristického zábavního parku, který obývají robotické bytosti. Seriál režíruje Jonathan Nolan a jeho manželka Lisa Joy, v hlavních rolích se představila herecká esa jako Anthony Hopkins, Ed Harris, Ewan Rachel Wood nebo Jeffrey Wright. Westworld je thriller z přetechnizované budoucnosti. Zatím jsou venku 3 série a hodnocení je z IMDB je 8,7. The Big Bang TheoryPopulární americký sítcem ze světa mladých vědátorů, fyziků Leonarda a Sheldona, kteří spolu žijí v jednom bytě. Leonard a Sheldon jsou 'geekové' žijící ve svém vlastním světě a reálný život jim moc neříká. Všechno se změní v okamžiku, kdy se do sousedního bytu nastěhuje blondýnka Penny. Dále jsou hlavními postavami seriálu letecký inženýr Howard žijící se svou matkou a astrofyzik Ráj, který má problém povídat si se ženami. 12 lepších i méně povedených sérií hodnotí na IMDB známkou 8,1. Halt and Catch FireTo nejlepší na konec? Vysoce hodnocený seriál o historii IT s názvem Halt and Catch Fire (slovenský překlad PC Rebelové) produkovala televize AMC. Tvůrci se snažili o realistické vykreslení technologií, IT, programování. Seriál tě přenese do 80. let minulého století do období, kdy vznikaly první přenosné počítače. První série byla o vývoji klonu IBM PC, ve druhé je to vytváření online multiplayerové hry a fóra pro online komunitu. Třetí série byla o rizikovém kapitálu v Silicon Valley. Čtvrtá série je o "začátcích" internetu a webových prohlížečích. Pro IT geeky je tento seriál povinná jízda a je mimořádně oblíbený především v technologické komunitě. Byly natočeny 4 série a hodnocení na IMDB veľmi solídních 8,4. Steve Wozniak, jeden ze zakladatelů Apple, ohodnotil tento seriál známkou 10/10 😮 Máš nějaké další tipy na seriály z IT, tech či geek prostředí? 
Konstruktory v Javě
Vzdělávání
03.04.2020
Skillmea

Konstruktory v Javě

V tomto článku se podíváme, co je to konstruktor v Javě (constructor in java). K čemu se používá? Co je to? Třída slouží k popisu a výrobě objektů. Zkusme nyní popřemýšlet nad reálným objektem – například auto. Pokud chceme popsat auto do programu, tak k popisu auta použijeme třídu. Co má auto? Jaké vlastnosti? Má počet dveří, značku, RZ, objem kufru a dalších xy věcí. Ne všechny budeme používat. V našem projektu si vytvoříme novou třídu:[Image] Pojmenujeme ji Auto a napíšeme tam globální proměnné. public class Auto { int doorCount; String brand; String plateNumber; }Nyní si vytvoříme objekt typu Auto. K výrobě objektů budeme používat konstruktor. Konstruktor jako název naznačuje slouží ke zkonstruování nového objektu. Aniž bys ty sám napsal nějaký konstruktor, tak máš jeden dostupný automaticky. Tento se jmenuje – bezparametrický konstruktor – je to jakoby metoda, která na vstupu nemá parametry. Proto je možné vyrobit nový objekt pomocí new Auto(); public class Auto { int doorCount; String brand; String plateNumber; public static void main(String[] args) { Auto auto = new Auto(); } }V programu jsme použili new Auto() i když nic takového nemáme napsáno. Co můžeme udělat, je napsat si takový konstruktor sami. public class Auto { int doorCount; String brand; String plateNumber; public Auto() { } public static void main(String[] args) { Auto auto = new Auto(); } } Do nitra tohoto konstruktoru si nyní můžeme napsat libovolný kód. Konstruktory se nejčastěji využívají vedle výroby nového objektu ik nastavení dat. Například pokud chci vyrobit auto, které je značky Škoda, tak vyrobím nový – druhý konstruktor, jehož vstupní parametr bude právě počet dveří. Volat chceme Auto auto = new Auto(“Škoda”); public Auto(String brand) { }Co ale uděláme s touto proměnnou brand, kterou máme jako parametr? Pokud uvažujeme, tak chceme nastavit globální proměnnou brand pro tento nový objekt. Ale jak řeknu, že globální proměnná brand ať se rovná tomu, co je v parametru metody brand? Udělám to pomocí klíčového slova this. Slovo this se odkazuje na právě tento nový objekt, který konstruujeme. Tedy this se váže na nově vyrobený objekt ze třídy Auto. Po správnosti bych měl říci, že this odkazuje na instanci (instance) objektu. Pomocí konstruktoru vyrobíme novou instanci třídy Auto. Pokud vyrobím 5 objektů, tak jsem vyrobil 5 instancí třídy Auto. Takže this.brand ukazuje kam? Slovo this ukazuje na danou instanci objektu a přes tečku přistupuji k věcem dostupným v dané instanci auta. Co je tam k dispozici? Nyní jsou dostupné globální proměnné. Tak udělám: public Auto(String brand) { this.brand = brand; }public static void main(String[] args) { Auto auto = new Auto("Škoda"); }Po zavolání tohoto konstruktoru mám v proměnné auto odkaz na objekt Auto s nastevním brandem na Škoda. Takto si nyní můžu vytvářet nové instance typu Auto. public static void main(String[] args) { Auto auto = new Auto("Škoda"); Auto auto2 = new Auto("Škoda"); } Jsou tato dvě auta stejná? Ne, nejsou, i když mají stejný brand. Proč? Neboť voláme-li slovíčko new, tak se vytváří vždy zcela nový objekt v paměti. Ukázka konstruktoru, kde nastavujeme všechny globální proměnné. V IDEI stlač ALT+Insert a vyber konstruktor – následně označ všechny proměnné. Tyto proměnné se jinak nazývají také fieldy.[Image] public Auto(int doorCount, String brand, String plateNumber) { this.doorCount = doorCount; this.brand = brand; this.plateNumber = plateNumber; } public static void main(String[] args) { Auto auto = new Auto("Škoda"); Auto auto2 = new Auto("Škoda"); Auto auto3 = new Auto(4, "Opel", "CCdddDD"); }Nové objekty můžeš vytvářet kde chceš a kdy chceš. Teď jsem to dělal v metodě main přímo ve třídě Auto. To ale samozřejmě většinou dělat nebudeš. Více o konstruktorech v Javě a Java programování se dozvíš v našich online kurzech Java a OOP pro začátečníky a Java pro pokročilé. 
Success story: z mateřské k front-endu
Success stories
18.03.2020
Skillmea

Success story: z mateřské k front-endu

Petra Poliaková je další úspěšnou absolventkou našich kurzů, díky kterým si našla práci v IT. Aktuálně pracuje jako front-end developerka pro jednu martinskou firmu. K tvorbě webů se dostala během mateřské, kdy se začala pomaličku věnovat HTML a CSS. Jak se jí podařilo najít si práci v IT a co všechno pro to udělala, to si přečti v tomto blogovém příspěvku 👇 Začněme tvou aktuální prací. Co přesně děláš, jaká je tvá pozice?Pracuji jako front-end developer pro jednu Martinskou firmu, která působí na trhu již několik let. Tvoří e-shopy, webové aplikace a jsem v podstatě freelancer. Než jsem začala spolupracovat s touto firmou jsem vytvářela jen jednoduché prezentační weby. Nyní se zaměřuji více na online obchody, vzdělávám se v oblasti online marketingu (vytváření PPC reklam), nasazuji šablony do CMS systému wordpress a zpracovávám frontendovou část v ODOO systému. Jak jsi k této pozici dostala? Jak jsi k této pozici dostala?Na internetu jsem hledala firmy, které dělají weby, jsou v mém okolí a hledají kolegy, nejlépe is možností zaučení. Buď jsem jim posílala žádosti nebo poslala email. Firma mě kontaktovala, postupně mi dávali na zkoušku dělat projekty a začali jsme spolupracovat. Máš nějaký vzor, který tě inspiruje? Osobu, která je pro tebe motivátorem?V oblasti tvorby webu mě inspiruje Yablko, nejen svými rozsáhlými vědomostmi, ale také svým humorem. A také je to můj partner, který mi trpělivě vysvětluje, jak pochopit programátorský svět a myšlení. Kde bereš inspiraci pro svou práci? Máš nějaké tipy, které zaručeně fungují?Inspiraci hledám na internetu, od zkušenějších, ale i od samotných klientů, se kterými jsem často v kontaktu při tvorbě stránky. Zaručené tipy bohužel nemám. Stále se učím od zkušenějších.[Jeden z webů, na kterých Petra pracovala] V této oblasti je třeba sledovat aktuální trendy, inovace. Jak jsi na tom ty? Stíháš to všechno při práci?Když mám říct pravdu, moc ne. Jsem na úrovni juniora, takže je toho ještě mnoho, co se mám učit, ale některé trendy a inovace přicházejí rovnou s požadavkem webu. Tehdy je stíhat musím 😊 Čím vším sis musela projít, pokud ses vypracoval na tuto pozici?Nemám žádné IT vzdělání, takže jsem začínala úplně od nuly. Během mateřské jsem se začala zajímat o to, jak se dají dělat webové stránky, co to všechno obnáší a vůbec jestli bych něco takového zvládla. Začala jsem studovat HTML a CSS. Všechno jsem se učila přes internet. Lepší a rychlejší cestu jsem našla, když jsem objevila online kurzy od Learn2Code. Začala jsem kurzem Webrebel 1. Co jsem se naučila, to jsem otestovala na známém, který potřeboval webstránku pro svoji firmu. Výsledek se dostavil. Počet zákazníků se díky webové stránce začal zvyšovat. Své znalosti jsem si rozšiřovala o další kurzy z Learn2Code. Dostala jsem možnost pracovat v jedné firmě, ale musela jsem se rychle přeorientovat na Javu. Výhodou Learn2Code bylo to, že i takový kurz tam byl. Ve firmě jsem nějakou dobu programovala. Musela jsem však odejít. Mám dvě malé děti a přišlo období, kdy se střídala jedna nemoc za druhou. Vedle péče o děti jsem se vrátila k vytváření webstránek a začala si budovat svůj web – své portfolio. Znovu jsem využila různorodost kurzů a zaměřila jsem se na marketingové kurzy, které mi pomohly, jak se prezentovat. Udělala jsem si firemní profil na Facebooku a profil na LinkedIn. Takto připravená jsem hledala vhodné firmy. Co tě nejvíc baví na tvé práci? Máš nějaký oblíbený task, který děláš nejraději?Na této práci mě baví, když dosáhnu úspěchu a překonám překážky, které projekt přináší. Velice ráda pracuji s frameworkem bootstrap.[Další ukázka práce] Dnes je obrovská poptávka po programátorech. Co bys poradila všem, kdo nemají žádné zkušenosti, ale chtěli by nějak začít?Nepřemýšlet nad tím, jestli na to mám nebo ne. Nejlepší začít a zkoušet. Nesrovnávat se na začátku s profesionály, z toho je docela slušná depka 😀. Připravit se na to, že výsledky nebudou hned. Všechno potřebuje svůj čas. No a samozřejmě využít možnosti vzdělávat se pomocí kurzů a zkoušet, kódovat, kazit a hledat řešení. Dobré je vyzkoušet i reálný projekt. Co je podle tebe největší výhodou práce v IT odvětví?Výhodou je svoboda, velké množství možností práce a pro mě jedna osobní a obrovská výhoda, která mi pomůže splnit si rodičovský sen – trávit čas s dětmi, když budou růst a ne sedět někde v kacelárii. Měl jsi někdy pocit, že to nezvládneš? Bylo období, kdy jsi chtěl skončit a dělat něco úplně jiného?Několikrát. Ale zjistila jsem, že už ani nevím, co by to jiné mělo být. Potom si uvědomím proč to dělám, nadechnu se a překonávám se dál. Jaké jsou tvé plány do budoucna?Cestu mi zkřížil WordPress, který jsem moc nechtěla ovládat, takže pořádně dostudovat framework Vue a pomalu přejít na backend. Máš nějakou radu, kterou bys chtěl sdílet se studenty, kteří teprve začínají s tvorbou web stránek a programováním nebo se svým vzděláváním v IT oblasti?Nezůstaňte při jednom kurzu. Nenechte se odradit od prvotních neúspěchů. A když budete trpěliví a posouvat se neustále dopředu, tak můžete získat výhodu oproti ostatním. Pomohli ti naše kurzy a našel sis díky nim práci. Napiš nám a rádi s tebou uděláme podobný rozhovor. Pro všechny, kteří váhají s tím, jestli začít a jak začít, na našem YouTube jsou další úspěšné příběhy našich absolventů.
Kolekce v Javě
Vzdělávání
06.03.2020
Skillmea

Kolekce v Javě

V tomto úvodním článku do série pokročilá java se podíváme na zoubek kolekcím (collections in java). Kolekce jsou jako kontejnery, které v sobě drží další objekty. Jinak můžeme kolekce chápat také jako seznamy. Seznam telefonních čísel. Seznam osob. Seznam aut. Seznam souborů. Seznam čísel .... U kolekcí budeme hovořit o Rozhrání, Implementaci a Algoritmech. Java collection framework – Java sama o sobě poskytuje několik kolekcí. Poskytuje nám jejich implementace a také algoritmy pro vyhledávání, vkládání, třídění a podobně. Rozhraní kolekcí v tomto frameworku jsou generická. Tedy umožňují do nich vkládat různé typy objektů. Pamatujte, že Java je striktně typový jazyk a do proměnné typu String prostě int nedáš, musí tam jít pouze String. Ke generikám se ještě dostaneme v pozdějším článku.[Image] Seznam rozhraní Java collection frameworkuCollection – top v hierarchii, používá se k přesunu kolekce, manipulaci kde se požaduje aby tam přišla jakákoliv kolekce. Do Collection můžeš vložit jakýkoli typ kolekce, který tuto kolekci rozšiřuje. Set – nemůže obsahovat duplicity List – seznam, může obsahovat duplicity, pořadí elementů je zachováno pomocí indexů Queue – FIFO – first in first out, což přijde první do této kolekce tak z ní i první odejde, některé implementace mají výjimky Deque - FIFO i LIFO (last in first out) - elementy mohou být vkládány i vybírány z obou konců Map – object který mapuje objekty k jejich klíčům, nemůže obsahovat totožné klíče SortedSet a SortedMap – jsou vlastně seřazeny Map a Set Implementace (nejpoužívanější jsou zvýrazněny boldem): SetEnumSet, HashSet, LinkedHashSet, TreeSetListArrayList, LinkedList, Stack, VectorMapEnumMap, HashMap, LinkedHashMap, TreeMapSortedSet NavigableSetTreeSetSortedMap NavigableMapTreeMapQueueLinkedList, PriorityQueue  SetNeobsahuje duplicitní elementy – lépe řečeno nemůže obsahovat duplicitní elementy. HashSet – neuchovává pořadí v jakém byly elementy vloženy, ale pracuje nejrychleji LinkedHashSet – uchovává pořadí elementů v jakém byly vloženy TreeSet – pořadí elementů je seřazeno podle jejich hodnot, je pomalejší Mějme kolekci, která obsahuje elementy, které jsou duplicitní. Jak z ní nejrychleji získáme kolekci, která nemá duplicity? Collection<Type> noDups = new HashSet<Type>(c); Funguje to tak, že z kolekce se vytvoří Set. A Set už z definice nemůže obsahovat duplicity. Přidání elementů do Setu: Set<String> set1 = new HashSet<>(); String s = "e"; set1.add("element1"); set1.add("element2"); set1.add("element3"); set1.add("element4"); set1.add(s);Je element v kolekci?  System.out.println(set1.contains("e")); //true     Odstranění elementu z kolekce: set1.remove(s);Procházení přes Set: Iterator i = set1.iterator(); while (i.hasNext()){ System.out.println(i.next()); }for(String s : set1) { System.out.println(s); }Zeptám se, jestli všechny elementy ze set1 jsou iv set2 set1.containsAll(set2)); Odstraním z set1 všechny shodné elementy se set2 set1.removeAll(set2);Vše ze set2 přidám do set1 set1.addAll(set2);ListUchovává pořadí elementů. Elementy jsou přístupné i pomocí indexů. Je možné do již vytvořeného Listu přidat nové elementy i na indexy, které jsou obsazeny – elementy se posunou. Můžeme v nich vyhledávat indexOf a lastIndexOf. U dopisů si musíme dávat velký pozor na to, abychom neshodili program kvůli přístupu k neexistujícím elementům – respektive k neexistujícím indexům v listu. Například máš List se 4 elementy a chceš přistoupit k 6-tému elementu. Základní pomocné algoritmy, specifické ke List:  • sort — setřídí elementy v listu • shuffle — náhodně promíchá elementy v listu. • reverse — otočí pořadí elementů v Liste • rotate — otočí pořadí všech elementů od specifického indexu • swap — přehodí elementy z Listu na specifikovaných indexech • replaceAll — nahradí všechny výskyty specifikované hodnoty za druhou specifikovanou hodnotu • fill — přepíše všechny elementy v listu za specifikovanou hodnotu ArrayList – přizpůsobuje svou velikost, základní pole musela mít specifikovanou délku při vytvoření, nemohla růst nebo se zmenšovat LinkedList – jiná implementace, rozdílu jsou v časových zátěžích s různými operacemi nad Listy Přidání elementů do Listu: List<String> list = new ArrayList<>();          list.add("list1");          list.add("list2");          list.add("list3");          list.add("list4");          list.add("list5");  Výběr elementů z listu na indexy 1:         list.get(1);  Je prázdný?         list.isEmpty();  Přidej na pozici 2:         list.add(2,"list2b");  Odstraň element:         list.remove("list1");           list.remove(4);  Různé manipulace:         Collections.sort(list);          Collections.shuffle(list);          Collections.reverse(list);          Collections.rotate(list,2);          Collections.swap(list, 0, 1);          Collections.replaceAll(list, "list4", "new list4");          Collections.fill(list,"Jaro");  MapMapa obsahuje hodnoty vázané na klíč. Takže to máme anglicky key – value hodnoty. Klíče musí být unikátní. HashMap – nedrží si pořadí, náhodné uspořádání LinkedHashMap – drží pořadí Vložení do Mapy: Map<Integer,String> map = new HashMap<>();          map.put(10,"jaro");          map.put(1,"fero");          map.put(3,"duro");          map.put(4000,"karol");          map.put(4000,"peter"); // přepíše předchozí element Získáme a vypíšeme hodnotu elementu s klíčem 1:         System.out.println(map.get(1));  Přechod přes elementy Mapy:         for(Map.Entry m : map.entrySet()){              System.out.printf("key %d, value %s %n",m.getKey(),m.getValue());          }          for(Integer k : map.keySet()){              map.get(k);                  }
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.