Heading

Perex Html

Najpopulárnejšie kurzy a články v roku 2020
Ostatné
04.01.2021
Skillmea

Najpopulárnejšie kurzy a články v roku 2020

V roku 2020 sme na našom webe zverejnili viac ako 45 nových online kurzov. V tomto článku ti prinášame prehľad najpopulárnejších a najlepšie hodnotených kurzov roku 2020 a takisto najčítanejšie články z blogu. Poďme na to. Najpopulárnejšie kurzy roku 2020V roku 2020 bol najäčší záujem o online kurz tvorby webstránok Webrebel 1. V tomto kurze sa naučíš technológie HTML, CSS a JavaScript, popritom responzívny dizajn, ako funguje server, hosting, domény a všetky dôležité pojmy spojené s tvorbou webov. Kurz Webrebel 1 odporúčame každému záujemcovi, ktorí chce začať s tvorbou webstránok a programovaním. 1. Webrebel 1: HTML, CSS & JavaScript 🥇 2. Java pre začiatočníkov 🥈 3. Základy programovania a OOP 🥉 4. Webrebel 2: PHP 5. SQL databázy: MySQL a SQLite 6. Python pre začiatočníkov 7. JavaScript a ES6 8. Microsoft Excel 9. Visual Design Digital: Photoshop 10. Social Media Marketing Najlepšie hodnotené online kurzy roku 2020V rámci tohto rebríčka sme zobrali do úvahy len kurzy, ktoré mali 10 a viac hodnotení, inak by bol rebríček oveľa dlhší. Online kurz Základy programovania a OOP hodnotilo v roku 2020 viac ako 35 jeho absolventov a všetci mu udelili maximálnych 5 hviezdičiek. O niečo menej hodnotení, ale tiež len tých najvyšších mali online kurzy React, Angular, Vue (a TypeScript) a Branding - budovanie úspešnej značky. 1. Základy programovania a OOP 🥇 2. React Angular Vue (a TypeScript) 🥈 3. Branding - budovanie úspešnej značky 🥉 4. Git a GitHub základy 5. Microsoft Excel 6. SQL databázy: MySQL a SQLite 7. JavaScript a ES6 8. Úspešný content marketing 9. Client management 10. Pokročilé SEO stratégie Najčítanejšie blogy v roku 2020V tomto zozname sú články, ktoré vás v roku 2020 zaujímali najviac.  1. Vyskúšaj si Learn2Code na mesiac zadarmo 🥇 2. Čo je nové v Bootstrap 5 🥈 3. Známe weby, ktoré používajú WordPress 🥉 4. Success story: Michaela vymenila administratívu za frontend 5. Eratostenovo sito
Abstrakcia a zoraďovanie v kolekciách v Jave
Vzdelávanie
08.12.2020
Skillmea

Abstrakcia a zoraďovanie v kolekciách v Jave

Poďme sa porozprávať o abstraktných triedach v jave (abstract class in java). Abstrakcia slúži na schovanie zložitosti od používateľa a zobrazuje len relevantné informácie. Abstraktné triedy a metódy  V našom príklade vieme, že všetky zvieratá vydávajú zvuk. Je to niečo abstraktné – niečo, čo si vieme predstaviť a v kóde to zapíšeme nasledovne. Upravme metódu v triede Animal. public abstract void makeNoise(); Dáva to zmysel, lebo Animal nepredstavuje určité špecifické zviera a teda nevieme, aký zvuk vydá, ale vieme, že chceme aby všetko, čo bude dediť od Animal, vydávalo zvuk. Pomocou public abstract som povedal, že táto metóda nemusí mať vnútro – nemusí mať kód (implementáciu). Ak mám abstraktnú metódu, tak aj celá trieda musí byť abstract. public abstract class Animal{ public String name = "animal"; public abstract void makeNoise(); }Ak je trieda abstract, tak z nej nemôžem vyrobiť objekt. Načo by som aj robil objekt Animal, však je to len abstrakcia. Toto nebude fungovať: Animal animal = new Animal(); Ak je Animal abstract a obsahuje abstract metódu, tak som povedal, že potomk musí napísať implementáciu abstract metódy alebo bude potom tiež abstract.  Nám vyhovuje, aby Mamal bol tiež abstract. Tým pádom nemusíme vyrobiť implemntáciu. Z triedy Mamal zmažeme makeNoise a označíme ju za abstract. public abstract class Mamal extends Animal { public String name = "mamal"; }Teraz triedy, ktoré dedia od Mamal musia implementovať metódu makeNoise. Cat a Dog už danú metódu implementujú, teda nemusíme nič robiť. Ale Fox túto metódu nemá a preto ju musíme implementovať. IntelliJ IDEA nám v tomto pomôže skratkou. Stlačíme Alt + Insert a vyberieme Implement Methods. public class Fox extends Mamal { @Override public void makeNoise() { System.out.println("Ring-ding-ding-ding-dingeringeding!"); } } Zoraďovanie v kolekciáchPre zoraďovanie použijeme už existujúci algoritmus v triede Collections.sort(l). Písmeno l v tomto prípade bude List. Ak by tento List obsahoval sadu Stringov, boli by zoradené abecende, ak by obsahoval Dátum tak budú zoradene chronologicky. Ako je to možné? Je to preto, lebo tieto triedy implementujú rozhranie Comparable. Ak by si sa snažil takto zoradiť také triedy, ktoré neimplementujú toto rozhranie, tak program vyhodí výnimku.  Existuje ale možnosť, že v tvojej triede implementuješ toto rozhranie. Potom toto triedenie je teraz považované za prirodzené. Príklad: Máme Osobu, ktorá implementuje Comparable. Musíme implementovať metódu compareTo. public class Osoba implements Comparable<Osoba>{ private String meno; private String priezvisko; private int vek; public Osoba(String meno, String priezvisko, int vek) { this.meno = meno; this.priezvisko = priezvisko; this.vek = vek; } //get, set metódy vynechané pre čitatelnosť @Override public String toString() { return "Osoba{" + "meno='" + meno + '\'' + ", priezvisko='" + priezvisko + '\'' + ", vek=" + vek + '}'; } @Override public int compareTo(Osoba o) { int porovnaniePriezvisk = o.getPriezvisko().compareTo(this.getPriezvisko()); return porovnaniePriezvisk !=0 ? porovnaniePriezvisk : o.getMeno().compareTo(this.getMeno()); } } Čo ak chceš použiť úplne iné ako prirodzené triedenie, chceš to triediť napríklad podľa veku. Alebo chceš triediť objekty, ktoré neimplementujú Comparable rozhranie? Tak si ho vyrobíš. Na to použiješ rozhranie Comparator a potom ho požiješ Collections.sort(e, VEK_TRIEDENIE);. public class Sort { private static final Comparator<Osoba> VEK_TRIEDENIE = new Comparator<Osoba>() { @Override public int compare(Osoba o1, Osoba o2) { return Integer.compare(o1.getVek(), o2.getVek()); } };Vyskúšame si: public static void main(String[] args) { Osoba[] osobyArray = { new Osoba("Jaro", "Beno", 20), new Osoba("Peter", "Beno", 25), new Osoba("Karol", "Slepec", 18), new Osoba("Tomas", "Vlak", 22) }; List<Osoba> osoby = Arrays.asList(osobyArray); System.out.println(osoby); Collections.sort(osoby); System.out.println(osoby); Collections.sort(osoby, VEK_TRIEDENIE); System.out.println(osoby); } }V ďalších blogoch sa pozrieme na zopár zaujímavostí z Javy 13 a takisto sa budeme venovať aj Kotlinu. Ostaň nám verný a uč sa Javu 😊
Funkcie VLOOKUP
Vzdelávanie
16.11.2020
Skillmea

Funkcie VLOOKUP

Funkcia VLOOKUP sa používa vtedy, keď potrebujete nájsť údaje v tabuľke alebo rozsahu podľa riadka. Vyhľadajte napríklad cenu automobilovej časti podľa čísla časti alebo vyhľadajte meno zamestnanca na základe ID zamestnanca. Funkcia VLOOKUP patrí k najpraktickejším Excel funkciám. Funkcia VLOOKUP znamená: = VLOOKUP (čo chcete vyhľadať, kde ho chcete vyhľadať, číslo stĺpca v rozsahu obsahujúcom hodnotu, ktorá sa má vrátiť, vráťte približnú alebo presnú zhodu – označenú ako 1/TRUE alebo 0/FALSe). Vysvetlime si danú funkciu na jednoduchom príklade: • v databáze chceme pridať k ID klienta jeho priezvisko a mesto, z ktorého pochádza. • v jednej tabuľke (v ľavej, viď obrázok nižšie) nám chýbajú určité údaje o klientoch, konkrétne priezvisko a mesto • v druhej tabuľke (v pravej, viď obrázok) máme údaje o klientoch - jeho ID, priezvisko a mesto, z ktorého pochádza.[Image] Obidve tabuľky majú spoločný jeden identifikátor, a teda ID_klient. Na základe tejto spoločnej zhody vieme pomocou funkcie VLOOKUP vyhľadať údaje z jednej tabuľky a priradiť ich do druhej tabuľky. Riešenie: zadajme do bunky Priezvisko funkciu VLOOKUP a rozkliknime si ju. Argument funkcie Vyhľadávaná_hodnota je niečo, čo naše dve tabuľky spája, teda ID_klient. Argument funkcie Pole_tabuľky sú údaje z druhej tabuľky, z ktorej čerpáme (túto tabuľku si nezabudnite vo funkcii ukotviť pomocou klávesy F4). Ďalším argumentom fukcie VLOOKUP je Číslo_indexu_stĺpca, do ktorého napíšeme číslo stĺpca z našej druhej tabuľky - hľadáme Priezvisko, čo je druhý stĺpec, tak napíšeme číslo 2. Posledný argument funkcie je Vyhľadávanie rozsahu, ktorá môže byť približná alebo presná zhoda; TRUE (1) alebo FALSE (0). V našom prípade chceme presnú zhodu, teda použijeme 0 - FALSE. Funkcia bude zapísaná nasledovne:[Image] A tu je výsledok, podľa ID_klient sa nám zobrazia v našej prvej tabuľke priezviská zákazníkov Rovnako môžeme postupovať aj v prípade, že chceme doplniť MESTO klienta do prvej tabuľky.[Image] Krátke zhrnutie k funkcii VLOOKUP, obsahuje tieto 4 argumenty: 1. čo hľadám, 2. kde to hľadám, 3. v ktorom stĺpci je výsledok, 4. chcem hľadanú hodnotu presne alebo približne? Pokiaľ máš nejaké otázky k tejto funkcii, alebo je ti z článku niečo nejasné, napíš otázku do komentára. 
Success story: Michaela vymenila administratívu za frontend
Success stories
08.11.2020
Skillmea

Success story: Michaela vymenila administratívu za frontend

V tomto rozhovore ti predstavíme Michaelu, ktorá sa rozhodla vymeniť odvetvie, v ktorom predtým pracovala za IT. Z administratívnej a úradníckej práce presedlala na pozíciu frontend developerky. Prečítaj si Michaelin príbeh, ako sa dostala k programovaniu a IT, čo má rada na svojej aktuálnej práci a čo odporúča každému, kto sa chce v IT uchytiť. Aký je tvoj príbeh? Ako si začala s programovaním a kde si teraz? Vždy ma IT lákalo, chcela som robiť niečo kreatívnejšie, ale nemala som poňatia, ktorým smerom sa uberať. Raz mi jeden známy povedal čo-to o frontende a mňa to zaujalo. Začala som gúgliť, skúšať nejaké základy a zistila som, že presne tu chcem začať. Samovzdelávanie popri práci nebolo dostačujúce, tak som sa obzerala po kurzoch a začala s cieleným vzdelávaním. Po nejakom čase som si našla svoju prvú prácu v tejto oblasti. No a momentálne pracujem v Luigi’s Box.[Image] Čo presne robíš, aká je tvoja pozícia? Integration Specialist. Nastavujem zber dát týkajúcich sa vyhľadávania na webových stránkach, integrácie nášho našepkávača a vyhľadávania na stránkach a zároveň poskytujem pravidelný support pre klientov. Klienti, kreatívny proces a tvorba finálneho dizajnu sa líšia, a to sa mi na mojej práci páči. Zároveň je zaujímavé, koľko informácií sa popri tvorivom procese môžem naučiť. Vďaka tomu mám lepší rozhľad a dokážem sa na zadania pozerať komplexnejšie. Aké boli tvoje ciele, keď si začínala a ako si bola stále motivovaná a vytrvalá? Môj cieľ bol jednoduchý – zmeniť pracovné odvetvie. Prestriedala som administratívu, úradnícku prácu a veľmi ma to ubíjalo. Keď som mala slabé chvíľky, pozrela som sa späť a zhodnotila, že toto skutočne nechcem robiť celý život, takže to nevzdám a zvládnem všetky úlohy, ktoré ma čakajú. Okrem toho, u rodičov som našla potrebnú podporu, bez ktorej by som do toho asi ani nešla.[Image] V tejto oblasti je potrebné sledovať aktuálne trendy, inovácie. Ako si na tom ty? Stíhaš to všetko popri práci? Neustále sa stretávam s pre mňa novými vecami počas práce a pozornosť venujem hlavne tomu, čo práve využijem. Rôzne novinky z oblasti preto sledujem najmä prostredníctvom vlastnej práce. Dobré a netradičné zadanie je ten najlepší impulz na vzdelávanie sa. A keď brázdim po rôznych webových stránkach a zbadám nejaký prvok, ktorý ma na tom webe zaujme, tak ihneď otváram DevTools a prezriem si kód 😀 Čo ťa najviac baví na tvojej práci? Máš nejaký obľúbený task, ktorý robíš najradšej? Veľmi rada tvorím a zároveň mám rada pekný dizajn. Takže u mňa je to práve tá frontendová časť práce, ktorú mám najradšej. Keď môžem pracovať s vizuálom a výsledkom tejto práce je pekná a funkčná časť webovej stránky. [Image] Čo je podľa teba najväčšou výhodou práce v IT odvetví? Od perspektívy, cez plat až po možnosť pracovať odkiaľkoľvek. Je to rýchlo rozvíjajúce sa odvetvie a človek má na výber skutočne veľa možností, akým smerom sa môže uberať.  Čo by si poradila ľuďom, ktorí práve začínajú alebo uvažujú o tom, ako začať s kódovaním? Aby sa nenechali odradiť ťažkými začiatkami. Treba tomu len začať venovať čas, skúšať a postupne si nájsť presne ten smer alebo odvetvie, kde by sa chceli uchytiť. Výsledok stojí za to 😊 Ak máš na Michaelu otázky, neváhaj ich napísať do komentárov.
OOP v C++: trieda reprezentujúca valec a niečo viac
Vzdelávanie
05.11.2020
Skillmea

OOP v C++: trieda reprezentujúca valec a niečo viac

V úvode tohto blogu by som chcel pozdraviť všetkých nadšencov vyššieho programovacieho jazyka C++. V tomto blogu som si pre vás pripravil tému z objektovo orientovaného programovania. Z aplikačného hľadiska som si pre vás pripravil implementáciu triedy, ktorá reprezentuje valec ako 3D geometrický útvar. To znamená, že sa znova budeme baviť v intenciách analytickej geometrie. To nie je z toho dôvodu, že by som vás chcel zaťažovať vyššou matematikou, ale z toho dôvodu, že geometrické objekty sa dajú pekne reprezentovať triedami a objektami implementovanými v jazyku C++. Už v predchádzajúcom kurze som rozvinul myšlienku objektovo orientovaného programovania a okrem iného som tvrdil, že objekt v jazyku C++ odráža vlastnosti a schopnosti objektu reálneho sveta. Za takýto objekt môžeme považovať tiež valec, ktorý si nemusíte skutočne zostrojiť z nejakého materiálu, ale stačí sa naň pozerať z pohľadu analytickej geometrie.  Takže na začiatok si predstavíme trochu teórie, ktorú musíme dotiahnuť do konca práve preto, aby ste rozumeli zdrojovému kódu, ktorý som si pre vás pripravil. Potom vás ešte poverím vyriešením logickej úlohy, ktorú keď chcete úspešne splniť, musíte mať dobré poznatky zo základov analytickej geometrie. Ale o tom potom...  Je treba sa teda pripraviť a zvládnuť pojmy ako sú karteziánsky súradnicový systém, bod, vektor, priamka, rovina, ich algebrický popis, až po skalárny či vektorový súčin vektorov.  Poďme ale pekne poporiadku. Na začiatku vám položím otázku: Ako si ty predstavuješ valec v priestore? Určite by si vedel, ako vyzerá jeho tvar, poprípade by si ho vedel nakresliť. No dobre, z hľadiska geometrie môže byť, ale za tými čiarami sa skrýva aj konkrétny matematický popis. Začnime teda bodom.  Bod je základný geometrický útvar, ktorý je v 3D karteziánskom priestore reprezentovaný tromi súradnicami. Súradnice bodu môžu nadobúdať akúkoľvek hodnotu z oboru reálnych čísel. Prečo hovorím práve o bode ? Je to z toho dôvodu, aby som vám uľahčil prácu. Valec môžeme definovať práve dvoma bodmi. Konkrétne sú to body, ktoré ležia v strede dvoch podstáv valca. To znamená, že stred dolnej podstavy a stred hornej podstavy valca jasne vymedzujú výšku valca. Keď k tomu pridáme polomer podstavy, máme presnú predstavu, o ktorý valec sa jedná.  S tým uľahčením práce som to myslel naozaj vážne, asi by ste predsa nechceli, keby som vám definoval rovnicu dvoch kružníc, ktoré by reprezentovali podstavy valca, hoci aj táto reprezentácia by bola správna. K vysvetleniu reprezentácie valca, ktorá je vlastná analytickej geometrii, vám ponúkam nasledujúci obrázok:[Image] Na obrázku máte znázornený 3D karteziánsky súradnicový systém, ktorý je vlastný výpočtom v analytickej geometrie. Na okraj len podotknem, že sa jedná teda o systém, ktorý je ortogonálny a zároveň ortonormálny. V tomto súradnicovom systéme je zobrazený valec, ktorý je jednoznačne určený dvoma bodmi a polomerom podstáv valca. Spomínané dva body reprezentujú práve stredy podstáv valca.  Vráťme sa teraz na chvíľu do sveta objektovo orientovaného programovania. Už vieme, že chceme reprezentovať valec triedou. Definujme teda vlastnosti a schopnosti valca. Z kurzov viete, že vlastnosti objektu sú reprezentované dátovými členmi triedy. Ja som položil požiadavku na dátové členy triedy nasledovne:  • majme dátový člen, ktorý bude reprezentovať stred dolnej podstavy valca,  • majme dátový člen, ktorý bude reprezentovať stred hornej podstavy valca,  • majme dátový člen, ktorý bude reprezentovať polomer podstáv valca.  Uvedené tri atribúty sú dostatočné na to, aby bol valec reprezentovaný jednoznačne. Ja však kladiem ešte ďalšie požiadavky na dátové členy triedy valec. Napriek tomu, že ďalšie parametre valca sú jasne určené predchádzajúcimi tromi, chcem, aby boli explicitne dopočítané a uložené do dátových členov nasledovné údaje:  • výška valca, ktorá je jasne určená vzdialenosťou stredov podstáv,  • obsah povrchu valca, ktorý je determinovaný polomerom a výškou valca,  • objem valca, ktorý je tiež jasne určený polomerom a výškou valca.  Zatiaľ sme určili požiadavky na dátové členy. Budeme pokračovať kladením požiadaviek na druhú časť členov triedy, ktorými sú členské metódy reprezentujúce schopnosti triedy. Jednoducho povedané, požadujeme, aby mala trieda nasledujúce metódy:  • východiskový konštruktor, ktorý bude užitočný pri vytváraní novej inštancie triedy a bude inicializovať všetky dátové členy na nulové hodnoty,  • druhý používateľom definovaný konštruktor, ktorý sa tiež použije pri vytváraní novej inštancie triedy a bude inicializovať hodnoty dátových členov na argumenty odovzdávané cez parametre konštruktora. Tento konštruktor bude teda parametrický. Okrem inicializácie základných troch atribútov (stredy podstáv, polomer podstáv valca) bude dopočítavať atribúty výška, obsah a objem valca,  • deštruktor, ktorý bude dealokovať pamäť vyhradenú pre novú inštanciu tejto triedy,  • členskú metódu, ktorá bude slúžiť na prestavovanie hodnôt dátových členov, to znamená, že z valca z pôvodnými rozmermi a súradnicami vznikne iný valec, ktorý má nové súradnice a nové rozmery,  • členskú metódu, ktorá bude vracať hodnotu súradníc bodu, ktorý reprezentuje stred dolnej podstavy valca,  • členskú metódu, ktorá bude vracať hodnotu súradníc bodu, ktorý reprezentuje stred hornej podstavy valca,  • členskú metódu, ktorá bude vracať hodnotu polomeru podstáv valca,  • členskú metódu, ktorá bude vracať hodnotu obsahu povrchu valca,  • členskú metódu, ktorá bude vracať hodnotu objemu valca,  • členskú metódu, ktorá bude vracať informáciu o tom, či ľubovoľne zvolený bod definovaný tromi súradnicami patrí do priestoru (objemu valca) alebo nie.  Práve požiadavka na poslednú členskú metódu je analyticko-logická hádanka, ktorú treba vyriešiť, vyžaduje si však širšie znalosti z analytickej geometrie. Tejto úlohe sa budem teda podrobnejšie venovať a to z toho dôvodu, aby ste riešenie pochopili a nestratili sa v spleti matematických vzťahov a implementačných detailoch.  V úvode sme si teda vysvetlili, že uvediem príklad z objektovo orientovaného programovania, ktorý bude aplikovaný na oblasť analytickej geometrie a to konkrétne na geometrický objekt valec. Ďalej sme si ukázali obrázok pre jasnejšiu predstavu a pochopenie úlohy, definovali sme si požiadavky na triedu, ktorú ideme implementovať a ako posledné som zadal úlohu, ktorá rieši problém prieniku ľubovoľne zvoleného bodu a priestoru valca. Bez ďalších okolkov vám na nasledovných riadkoch ponúkam zdrojový kód, ktorý v sebe skrýva implementáciu triedy reprezentujúcu valec, triedu reprezentujúcu bod v 3D karteziánskom priestore, členskú metódu triedy valec, ktorá odpovedá na otázku, či ľubovoľný bod patrí do priestoru valca alebo nie. No a k tomu funkciu main(), v ktorej budeme novú inštanciu triedy valec používať. 001: #include <iostream> 002: #include <cmath> 003: using namespace std; 004: 005: const double pi = 3.14159; 006: 007: class cPoint3D 008: { 009: public: 010: cPoint3D(); 011: cPoint3D(double x, double y, double z); 012: ~cPoint3D(); 013: double x; 014: double y; 015: double z; 016: }; 017: 018: cPoint3D::cPoint3D() 019: { 020: this->x = 0.0; 021: this->y = 0.0; 022: this->z = 0.0; 023: } 024: 025: cPoint3D::cPoint3D(double x, double y, double z) 026: { 027: this->x = x; 028: this->y = y; 029: this->z = z; 030: } 031: 032: cPoint3D::~cPoint3D() 033: { 034: 035: } 036: 037: class cCylinder 038: { 039: public: 040: cCylinder(); 041: cCylinder(cPoint3D V1, cPoint3D V2, double radius); 042: ~cCylinder(); 043: void SetCylinder(cPoint3D V1, cPoint3D V2, double radius); 044: cPoint3D GetV1(); 045: cPoint3D GetV2(); 046: double GetRadius(); 047: double GetHeight(); 048: double GetContent(); 049: double GetVolume(); 050: bool BelongToCylinder(cPoint3D X); 051: 052: private: 053: cPoint3D V1; 054: cPoint3D V2; 055: double radius; 056: double height; 057: double content; 058: double volume; 059: }; 060: 061: cCylinder::cCylinder() 062: { 063: this->V1 = cPoint3D(0.0, 0.0, 0.0); 064: this->V2 = cPoint3D(0.0, 0.0, 0.0); 065: this->radius = 0.0; 066: this->height = 0.0; 067: this->content = 0.0; 068: this->volume = 0.0; 069: } 070: 071: cCylinder::cCylinder(cPoint3D V1, cPoint3D V2, double radius) 072: { 073: this->V1 = V1; 074: this->V2 = V2; 075: this->radius = radius; 076: this->height = sqrt(pow(this->V1.x - this->V2.x, 2.0) + pow(this->V1.y – this->V2.y, 2.0) + pow(this->V1.z - this->V2.z, 2.0)); 077: this->content = 2 * pi * pow(this->radius, 2.0) + 2 * pi * this->radius * this->height; 078: this->volume = pi * pow(this->radius, 2.0) * this->height; 079: } 080: 081: cCylinder::~cCylinder() 082: { 083: 084: } 085: 086: void cCylinder::SetCylinder(cPoint3D V1, cPoint3D V2, double radius) 087: { 088: this->V1 = V1; 089: this->V2 = V2; 090: this->radius = radius; 091: this->height = sqrt(pow(this->V1.x - this->V2.x, 2.0) + pow(this->V1.y - this->V2.y, 2.0) + pow(this->V1.z - this->V2.z, 2.0)); 092: this->content = 2 * pi * pow(this->radius, 2.0) + 2 * pi * this->radius * this->height; 093: this->volume = pi * pow(this->radius, 2.0) * this->height; 094: } 095: 096: cPoint3D cCylinder::GetV1() 097: { 098: return this->V1; 099: } 100: 101: cPoint3D cCylinder::GetV2() 102: { 103: return this->V2; 104: } 105: 106: double cCylinder::GetRadius() 107: { 108: return this->radius; 109: } 110: 111: double cCylinder::GetHeight() 112: { 113: return this->height; 114: } 115: 116: double cCylinder::GetContent() 117: { 118: return this->content; 119: } 120: 121: double cCylinder::GetVolume() 122: { 123: return this->volume; 124: } 125: 126: bool cCylinder::BelongToCylinder(cPoint3D X) 127: { 128: bool flag = true; 129: 130: double u1 = this->V2.x - this->V1.x; 131: double u2 = this->V2.y - this->V1.y; 132: double u3 = this->V2.z - this->V1.z; 133: 134: double d1 = -(u1 * X.x) - (u2 * X.y) - (u3 * X.z); 135: double t = (-(u1 * this->V1.x) - (u2 * this->V1.y) - (u3 * this->V1.z) - d1) / (u1 * u1 + u2 * u2 + u3 * u3); 136: 137: cPoint3D XT = cPoint3D(V1.x + u1 * t, V1.y + u2 * t, V1.z + u3 * t); 138: 139: double dist_01 = sqrt(pow(X.x - XT.x, 2.0) + pow(X.y - XT.y, 2.0) + pow(X.z – XT.z, 2.0)); 140: 141: double d2 = -(u1 * this->V1.x) - (u2 * this->V1.y) - (u3 * this->V1.z); 142: double d3 = -(u1 * this->V2.x) - (u2 * this->V2.y) - (u3 * this->V2.z); 143: 144: double dist_02 = abs(u1 * X.x + u2 * X.y + u3 * X.z + d2) / sqrt(u1 * u1 + u2 * u2 + u3 * u3); 145: double dist_03 = abs(u1 * X.x + u2 * X.y + u3 * X.z + d3) / sqrt(u1 * u1 + u2 * u2 + u3 * u3); 146: 147: if ((dist_01 <= this->radius) && (dist_02 <= this->height) && (dist_03 <= this->height)) 148: { 149: flag = true; 150: } 151: else 152: { 153: flag = false; 154: } 155: 156: return flag; 157: } 158: 159: int main() 160: { 161: cPoint3D V1 = cPoint3D(0.0, 0.0, 0.0); 162: cPoint3D V2 = cPoint3D(0.0, 0.0, 4.0); 163: cCylinder Cylinder = cCylinder(V1, V2, 1.5); 164: 165: cout << Cylinder.BelongToCylinder(cPoint3D(0.0, 0.0, 2.0)) << endl; 166: cout << Cylinder.BelongToCylinder(cPoint3D(0.0, 1.0, 2.0)) << endl; 167: cout << Cylinder.BelongToCylinder(cPoint3D(1.0, 1.0, 2.0)) << endl; 168: cout << Cylinder.BelongToCylinder(cPoint3D(1.5, 0.0, 0.0)) << endl; 169: cout << Cylinder.BelongToCylinder(cPoint3D(1.5, 0.0, 4.0)) << endl; 170: 171: cout << Cylinder.BelongToCylinder(cPoint3D(2.0, 1.0, 2.0)) << endl; 172: cout << Cylinder.BelongToCylinder(cPoint3D(1.0, 2.0, 2.0)) << endl; 173: cout << Cylinder.BelongToCylinder(cPoint3D(10.0, 5.0, 7.0)) << endl; 174: 175: cout << endl; 176: 177: V1.~cPoint3D(); 178: V2.~cPoint3D(); 179: Cylinder.~cCylinder(); 180: 181: return 0; 182: }Na riadku 001 je zavolaná direktíva preprocesora #include, ktorá pridáva hlavičkový súbor iostream do zdrojového kódu. Časť tejto štandardnej knižnice potrebujeme, pretože chceme používať objekt cout, pomocou ktorého budeme zapisovať informáciu do okna konzolovej aplikácie. Podobne je na riadku 002 opäť použitá direktíva preprocesora #include. Tentokrát však kvôli pridaniu hlavičkového súboru cmath. Tento hlavičkový súbor je tiež súčasťou štandardnej knižnice jazyka C++ a potrebujeme ho, pretože budeme používať funkcie pow() a sqrt(). Len pre ozrejmenie funkciu pow() budeme používať pre výpočet druhej mocniny nami zadaného argumentu a funkciu sqrt() pre výpočet druhej odmocniny zadaného argumentu.  Na riadku 003 pomocou kľúčového slova using definujeme, že budeme používať menný priestor std. Tento riadok som do kódu umiestnil preto, aby sme nemuseli ku objektom, triedam a funkciám, ktoré do tohto priestoru patria, pristupovať cez std a operátor prístupu :: . Okrem toho, že funkcie pow(), sqrt(), objekt cout a manipulátor endl prislúchajú nejakým hlavičkovým súborom, patria aj do menného priestoru std.  Na riadku 005 je definovaná konštanta s identifikátorom pi. Tá reprezentuje Ludolfovo číslo a má hodnotu 3,14159. Túto konštantu potrebujeme k výpočtu obsahu povrchu a objemu valca. Pokračujeme riadkom 007, na ktorom pomocou kľúčového slova class deklarujeme triedu s identifikátorom cPoint3D. Táto trieda nám bude v programe reprezentovať bod v 3D karteziánskom súradnicovom systéme. Deklaráciu spomínanej triedy začíname na riadku 008 ľavou programovou zátvorkou, za ktorou na riadku 009 nasleduje kľúčové slovo public, ktorým definujeme, že nasledovným členom bude pridelený verejný prístup.  Na riadku 010 až 012 sú teda deklarované tri členské metódy triedy cPoint3D, pričom sú to špeciálne členské funkcie a to konkrétne dva konštruktory a deštruktor.  Na riadku 010 je deklarovaný východiskový konštruktor, ktorému neprislúchajú žiadne parametre. Tento konštruktor slúži na vytvorenie novej inštancie triedy cPoint3D s tým, že inicializuje dátové členy na nulové (východiskové) hodnoty.  Na riadku 011 je deklarovaný používateľom definovaný konštruktor, ktorý slúži tiež na vytvorenie novej inštancie triedy, pričom pomocou svojich parametrov, cez ktoré sa odovzdávajú konkrétne argumenty (súradnice bodu), inicializuje dátové členy triedy. Rozdiel medzi prvým a druhým konštruktorom je ten, že prvý nepotrebuje parametre, pretože inicializuje dátove členy na 0, ktoré je možné potom prestaviť inou členskou metódou na konkrétne hodnoty, zatiaľ čo druhý konštruktor priraďuje dátovým členom nenulové hodnoty prostredníctvom argumentov odovzdávaných cez parametre konštruktora. K úplnosti textu uvádzam, že druhý konštruktor má tri parametre x, y, a z práve preto, že bod v 3D priestore má tri súradnice a k tomu prislúchajú tiež tri členské premenné triedy cPoint3D. Sú to premenné s tým istým identifikátorom ako parametre konštruktora, čiže x, y, z. Existujú informačné zdroje, ktoré spochybňujú a neodporúčajú totožnosť identifikátorov parametrov konštruktorov a členských premenných triedy. Ja však toto názvoslovie považujem za bežné a správne z toho dôvodu, že existuje kľúčové slovo this, ktoré reprezentuje vo vnútri objektu ukazovateľ na objekt a možno prostredníctvom neho pristupovať k dátovým členom. Týmto zápisom (syntaxou) sa dá odlíšiť identifikácia parametra a členskej premennej objektu. Je predsa jasný rozdiel medzi x a this->x. Prvé je parameter konštruktora a druhé dátový člen, ku ktorému pristupujeme pomocou ukazovateľa.  Na riadku 012 je deklarovaný deštruktor, ktorý nám bude slúžiť na dealokáciu pamäte  vyhradenej pre novú inštanciu triedy cPoint3D po jej vytvorení. Deštruktory sú špeciálne členské funkcie tried, ktoré slúžia práve na spomenutý účel, jednoducho povedané, majú za úlohu upratať po objekte v pamäti.  Na riadkoch 013 až 015 sú deklarované tri dátové členy x, y a z, ktorým je pridelený typ double. Tieto reprezentujú súradnice bodu v 3D karteziánskom súradnicovom systéme. Na riadku 016 sa uzatvára deklarácia triedy cPoint3D pravou programovou zátvorkou a bodkočiarkou. Len pripomeniem, že bodkočiarka tam musí byť uvedená, je to jeden z ojedinelých prípadov v jazyku C++, kedy sa používa bodkočiarka za programovou zátvorkou.  Na riadku 018 začína definícia východiskového konštruktora triedy cPoint3D. Jedná sa o bezparametrický konštruktor, ktorý inicializuje dátové členy na riadkoch 020 až 022 na nulu. Po tomto priradení sa konštruktor ukončuje pravou programovou zátvorkou na riadku 023.  Na riadku 025 začína definícia druhého používateľom definovaného konštruktora tej istej triedy, ktorý na rozdiel od prvého má tri parametre, prostredníctvom ktorého sa odovzdávajú argumenty reprezentujúce súradnice bodu v 3D karteziánskom súradnicovom systéme. Tieto sa na riadku 027 až 029 priraďujú jednotlivým dátovým členom. Konštruktor sa na riadku 030 končí pravou programovou zátvorkou.  Na riadku 032 až 035 je uvedená definícia deštruktora triedy cPoint3D. Jeho telo je prázdne a neobsahuje žiadny kód tak, ako to býva u väčšiny deštruktorov. Pre zopakovanie úlohou deštruktora je dealokovať (uvoľniť) pamäť, ktorá bola konkrétnej inštancii triedy vyhradená.  V zdrojovom kóde sa na riadku 037 ďalej pokračuje deklaráciou triedy cCylinder, ktorá nám bude reprezentovať práve geometrický objekt valec. Na riadku 038 je uvedená ľavá programová zátvorka, ktorá otvára spomínanú deklaráciu. Za ňou je uvedené kľúčové slovo public, ktoré slúži na pridelenie verejného prístupu k dátovým členom a členským metódam, ktoré sú ďalej deklarované. Zatiaľ čo trieda cPoint3D mala len verejné dátové členy a členské metódy, trieda cCylinder obsahuje aj členy súkromné. To znamená, že pri tejto triede budeme využívať techniku skrývania niektorých dátových členov. Obor platnosti verejného prístupu platí v zdrojovom kóde po kľúčové slovo private, čiže po kľúčové slovo, ktoré nastavuje iný typ prístupu k členom triedy. Pre úplnosť informácie dodám, že členom triedy môže byť pridelený ešte tretí typ prístupu protected, čo v preklade znamená chránený prístup. Tento typ prístupu však v tejto úlohe využívať nebudeme.  Vráťme sa ale naspäť ku zdrojovému kódu. Na riadkoch 040 až 050 sú deklarované všetky členské metódy, ktorým je pridelený verejný prístup. Tieto si postupne rozoberieme.  Na riadku 040 je uvedená deklarácia východiskového konštruktora, ktorý má za úlohu inicializovať všetky dátové členy triedy na nulové hodnoty. Ako poznámku uvediem, že nevidím veľmi zmysel týchto konštruktorov, ale v praxi sa volí práve spomínaný postup. To znamená, že sa vytvoria dva konštruktory, jeden bez parametrov, ktorého funkcionalita bola spomenutá vyššie a druhý konštruktor s parametrami, cez ktoré môžete dátovým členom priradiť už konkrétne nenulové hodnoty. Ku východiskovému konštruktoru je potrebné potom doprogramovať implementáciu metódy (tzv. setter), ktorá má rovnakú funkciu ako konštruktor s parametrami. Rozdiel oproti použitiu parametrického konštruktora je ten, že inicializujete dátové členy triedy v dvoch krokoch. V prvom kroku definujete objekt s inicializáciou dátových členov východiskovými nulovými hodnotami a v druhom kroku sa potom tieto členy inicializujú na používateľom zadanú hodnotu. Pre úplnosť doplním, že zmysel používania východiskových konštruktorov vidím pri pointrovej aritmetike, to znamená v prípadoch, kedy sú dátové členy deklarované ako smerníky základných vstavaných typov alebo typov, ktoré sú definované používateľom. Vtedy slúži východiskový konštruktor okrem vytvorenia objektu na alokáciu pamäti (konkrétne haldy) pre daný typ pomocou operátora new.  Na riadku 041 je deklarovaný druhý konštruktor, ktorý má tri parametre. Prvý a druhý parameter sú typu cPoint3D, tie reprezentujú súradnice stredov podstáv valca. Tretí parameter reprezentuje polomer podstáv valca. To sú tri parametre, pomocou ktorých je možné jednoznačne definovať valec.  Na riadku 042 je deklarovaný deštruktor triedy cCylinder. Takisto ako u predošlej triedy má za úlohu dealokovať pamäť, ktorá je vyhradená pre novú inštanciu tejto triedy.  Pokračujeme deklaráciou členskej metódy SetCylinder() na riadku 043. Jedná sa o tzv. setter, čiže metódu, ktorá má za úlohu nastaviť hodnoty členských dát triedy.  Na riadku 044 a 045 sú deklarované členské metódy GetV1() a GetV2(). Tieto metódy nemajú žiadne parametre a vracajú typ cPoint3D. Úlohou prvej z nich je vracať informáciu o súradniciach stredu dolnej podstavy valca, druhá z nich vracia informáciu o súradniciach stredu hornej podstavy valca.  Na riadkoch 046 až 049 sú deklarované členské metódy GetRadius(), GetHeight(), GetContent() a GetVolume(). Sú to getter-y, ktoré majú návratový typ double. V takom poradí ako boli vymenované, slúžia na to, aby vracali hodnotu členských dát, ktoré reprezentujú polomer, výšku, obsah a objem valca.  Na riadku 050 je deklarovaná členská metóda BelongToCylinder(). Ako návratový typ vracia bool. Táto metóda slúži na zistenie toho, či ľubovoľne zvolený bod v 3D karteziánskom súradnicovom priestore patrí do priestoru (objemu) valca alebo nie. Podotýkam, že vyriešenie tejto logickej úlohy je najnáročnejšie, pretože musíte poznať hlbšie súvislosti z analytickej geometrie. Ostatná implementácia triedy cCylinder je pomerne jednoduchá záležitosť oproti spomínanej úlohe.  Na riadku 052 je uvedené kľúčové slovo jazyka C++ private, ktoré zabezpečí, že ďalej deklarované dátové členy budú mať súkromný prístup. Na riadkoch 053 a 054 sú potom deklarované dátové členy V1 a V2, ktoré reprezentujú stred dolnej a hornej podstavy valca. Práve preto im bol pridelený údajový typ cPoint3D. Ďalej sú na riadkoch 055 až 058 deklarované dátové členy radius, height, content a volume. Je im pridelený dátový typ double a v tom istom poradí reprezentujú polomer, výšku, obsah a objem valca.  Na riadku 059 je uvedená pravá programová zátvorka a s bodkočiarkou, ktoré uzatvárajú deklaráciu používateľom definovaného typu (triedy) cCylinder. Implementačné detaily (definícia) tejto triedy pokračuje na ďalších riadkoch zdrojového kódu.  Na riadkoch 061 až 069 je uvedená definícia východiskového konštruktora cCylinder. Konštruktor nemá žiadne parametre, jeho úlohou je vytvárať novú inštanciu triedy cCylinder a inicializovať všetky dátové členy tejto triedy na nulové hodnoty. Na riadkoch 071 až 079 je uvedená definícia druhého používateľom definovaného konštruktora, ktorá má tri parametre. Prvé dva sú typu cPoint3D, pomocou nich sa odovzdávajú súradnice stredov dolnej a hornej podstavy valca. Cez tretí parameter, ktorý je typu double, sa odovzdáva hodnota polomeru valca. Dátovým členom V1, V2 a radius sú priamo priradené hodnoty prislúchajúcich parametrov konštruktora. Hodnota dátového člena height, ktorá reprezentuje výšku valca, je vypočítaná zo súradníc bodov podstáv. Výška valca sa totiž rovná vzdialenosti týchto bodov, ktorá je geometricky daná ako druhá odmocnina súčtu mocnín rozdielu jednotlivých súradníc dvoch bodov. Vzťah pre výpočet vzdialenosti dvoch bodov je nasledovný:[Image] Hodnota dátového člena content, ktorý reprezentuje obsah povrchu valca, je determinovaný výškou valca a polomerom podstavy valca. Vzťah pre výpočet obsahu povrchu valca je nasledovný:[Image] Podľa uvedeného vzťahu sa vypočíta obsah povrchu valca, ktorého hodnota je priradená do členskej premennej content na riadku 077. Na riadku 078 je vypočítaná hodnota objemu valca a priradená do členskej premennej volume. Objem valca je determinovaný tiež polomerom a výškou valca podobne, ako tomu bolo pri výpočte obsahu povrchu valca. Vzťah pre výpočet objemu valca je nasledovný:[Image] Na riadku 079 je uvedená pravá programová zátvorka, ktorá uzatvára definíciu používateľom definovaného konštruktora triedy cCylinder. Na riadku 081 až 084 je uvedená definícia deštruktora triedy cCylinder. Telo deštruktora je prázdne, jeho úlohou je dealokovať pamäť, ktorá bola vyhradená pre novú inštanciu triedy cCylinder.  Na riadku 086 až 094 je uvedená definícia členskej metódy SetCylinder, ktorá má návratový typ void, čiže vracia absenciu informácie. Táto metóda je tzv. setter, ktorý má za úlohu nastaviť (prestaviť) hodnoty dátových členov triedy cCylinder. Jeho funkcionalita je rovnaká ako u používateľom definovaného konštruktora s tým rozdielom, že táto metóda nie je volaná pri vytváraní novej inštancie. Môže byť však aplikovaná na inštanciu, ktorá už bola vytvorená. Pri jej volaní sa zmenia parametre valca, čiže možno ňou definovať iný valec v 3D karteziánskom priestore.  Na riadku 096 až 099 je definovaná členská metóda GetV1(). Má návratový typ cPoint3D, pričom je to getter, ktorý má za úlohu vrátiť súradnice stredu dolnej podstavy valca, ktorý je objektom triedy cCylinder reprezentovaný.  Na riadku 101 až 104 je definovaná členská metóda GetV2(). Má tiež návratový typ cPoint3D, a podobne ako predošlá metóda má za úlohu vrátiť súradnice stredu podstavy valca, v tomto prípade sa však jedná o hornú podstavu.  Na riadku 106 až 109 je definovaná členská metóda GetRadius(). Vracia návratový údajový typ double, ktorý reprezentuje polomer podstavy valca.  Na riadku 111 až 114 je definovaná členská metóda GetHeight(). Jej úlohou je vrátiť hodnotu dátového člena height, ktorý reprezentuje výšku valca.  Na riadku 116 až 119 je definovaná členská metóda GetContent(). Táto metóda má za úlohu vrátiť hodnotu dátového člena content, ktorý reprezentuje vypočítaný obsah povrchu valca.  Na riadku 121 až 124 je definovaná členská metóda GetVolume(). Táto metóda má za úlohu vrátiť hodnotu dátového člena volume, ktorý reprezentuje vypočítaný objem valca.  Na riadkoch 126 až 157 je definovaná členská metóda BelongToCylinder(). Úlohou tejto metódy je rozhodnúť o tom, či bod zadaný cez parameter patrí do priestoru (objemu) valca alebo nie. Návratový typ tejto metódy je bool, ktorý reprezentuje práve pravdivostnú hodnotu spomínaného rozhodnutia. Ak bod so súradnicami zadanými cez parameter metódy patrí do priestoru valca, metóda vracia hodnotu true, ak nie, vracia hadnotu false. Na prvý pohľad sa zadaná úloha zdá jednoduchá, nie je tomu však tak. Práve preto uvediem nasledovné predpoklady, ktoré budeme potom analytickým postupom (výpočtom dokazovať):  • ak bod patrí do priestoru valca, musí byť kolmá vzdialenosť tohto bodu od osi valca menšia nanajvýš rovná polomeru podstavy valca,  • ak bod patrí do  priestoru valca, musí byť kolmá vzdialenosť tohto bodu od jeho dolnej podstavy menšia nanajvýš rovná výške valca,  • ak bod patrí do  priestoru valca, musí byť kolmá vzdialenosť tohto bodu od jeho hornej podstavy menšia nanajvýš rovná výške valca.  K uvedeným predpokladom ešte dodám, že nestačí splnenie jedného alebo dvoch z nich. Ak chceme potvrdiť výrok, že konkrétny bod patrí do priestoru valca, musia byť splnené všetky tri uvedené podmienky. Úspešné vyriešenie úlohy, má nasledovný postup: 1. Vypočítame súradnice smerového vektora priamky, ktorá prechádza stredmi obidvoch podstáv valca. Tejto priamke hovoríme os valca, ktorá je jasne definovaná spomínanými dvoma bodmi (stred dolnej a hornej postavy valca). Súradnice vypočítame odčítaním dvoch bodov, čo znamená, že spravíme rozdiel príslušných súradníc bodov podľa nasledovných vzťahov:[Image] 2. Ďalej zostrojíme rovinu, ktorá je kolmá na os valca a zároveň prechádza bodom, o ktorom rozhodujeme, či patrí do priestoru valca alebo nie. Keďže smerový vektor osi valca je totožný s normálovým vektorom spomínanej roviny, vieme vyjadriť koeficienty a, b, c, ktoré sú súčasťou všeobecného tvaru rovnice roviny. Z uvedeného vyplýva, že potrebujeme dopočítať už len koeficient d všeobecného tvaru rovnice roviny. Všeobecný tvar rovnice priamky je teda nasledovný:[Image] Keď z uvedenej rovnice vyjadríme koeficient d, dostaneme nasledovný matematický vzťah: [Image] Po vypočítaní koeficientu d, pokračujeme nasledovným krokom, v ktorom počítame súradnice bodu, ktorý vznikne prienikom osi valca a rovinou, ktorá je na ňu kolmá a prechádza bodom, o ktorom rozhodujeme, či patrí do priestoru valca alebo nie. 3. Majme teda os valca (priamku), ktorá je daná nasledovným parametrickým vyjadrením[Image] Po rozvinutí pre jednotlivé súradnice, vzniknú nasledovné rovnice:[Image] Keďže počítame prienik priamky a roviny, dosaďme rovnice 3.2, 3.3 a 3.4 do rovnice 2.1, vznikne nám nasledovný matematický vzťah.[Image] Keďže koeficienty a, b, c sú súradnice smerového vektora osi valca, môžeme napísať:[Image] Po úprave rovnice 3.6 a vyjadrení parametra t, dostaneme nasledovný vzťah:[Image] 4. Po vypočítaní koeficientu t, môžeme vypočítať súradnice bodu, ktorý vznikne prienikom osi valca a spomínanej roviny podľa nasledovných vzťahov[Image] 5. Označme bod, o ktorom rozhodujeme, či patrí do priestoru valca identifikátorom A, ďalej označme bod, ktorý vznikne prienikom osi valca a spomínanej roviny ako bod B, vzdialenosť týchto dvoch bodov potom vypočítame podľa nasledovného vzťahu[Image] Ako už bolo povedané, ak je táto vzdialenosť menšia nanajvýš rovná polomeru podstavy valca, máme splnenú prvý predpoklad, že zadaný bod patrí do priestoru valca. 6. V tomto kroku budeme pokračovať analytickým spôsobom, ktorým budeme dokazovať, že bod spĺňa druhý predpoklad, to znamená, že vzdialenosť bodu od dolnej podstavy valca je menšia ako výška valca. Budeme vychádzať zo vzťahu 2.2 a vypočítame koeficient d pre rovinu, ktorá je kolmá na os valca, prechádza však stredom dolnej podstavy valca. Táto rovina má rovnaký normálový vektor ako rovina, ktorá prechádzala tým bodom, o ktorom rozhodujeme, či patrí do priestoru valca alebo nie. Koeficienty a, b, c, ktoré vystupujú vo všeobecnom tvare rovnice roviny, prislúchajú teda hodnotám súradníc smerové vektora osi valca. Z uvedené vyplýva, že keď poznáme súradnice normálového vektora roviny a poznáme bod, ktorý v nej leží (stred dolnej podstavy valca), vieme vyčísliť hodnotu koeficienta d. 7. Po predchádzajúcom kroku nám už stačí dopočítať vzdialenosť bodu od podstavy priamym vzťahom, ktorý je nasledovný:[Image] Ak je táto vzdialenosť menšia nanajvýš rovná výške valca, máme splnený druhý predpoklad, aby sme mohli tvrdiť, že bod patrí do priestoru valca. 8. Pokračujeme výpočtom vzdialenosti bodu od hornej podstavy valca. Zostrojíme teda rovinu, ktorá je kolmá na os valca a prechádza stredom hornej podstavy valca. K tomuto prídeme rovnakým spôsobom ako v kroku 6. Obdobne podľa vzťahu 7.1 vypočítame predmetnú vzdialenosť. Ak je táto menšia nanajvýš rovná výške valca, máme splnený posledný predpoklad, pre tvrdenie výroku, že zadaný bod patrí do priestoru valca. Práve tento postup je zachovaný pri implementácii riadkov zdrojového kódu 128 až 156. Na označenie jednotlivých parametrov, ktoré boli súčasťou priebežného výpočtu sa len použili v niektorých prípadoch iné identifikátory.  Na riadku 128 je deklarovaná premenná typu bool s identifikátorom flag. Do nej sa uloží informácia, ktorá bude reprezentovať pravdivostnú hodnotu výroku o tom, či bod do priestoru valca patrí alebo nie. Na začiatku ju inicializujeme hodnotou true.  Na riadku 130 je deklarovaná premenná u1, ktorá reprezentuje x zložku smerového vektora osi valca, vypočítaná je ako rozdiel x súradníc bodu V2 a V1.  Na riadku 131 je deklarovaná premenná u2, ktorá reprezentuje y zložku smerového vektora osi valca, vypočítaná je ako rozdiel y súradníc bodu V2 a V1.  Na riadku 132 je deklarovaná premenná u3, ktorá reprezentuje z zložku smerového vektora osi valca, vypočítaná je ako rozdiel z súradníc bodu V2 a V1. Pre doplnenie informácie, identifikátory V1 a V2 patria dátovým členom triedy cCylinder, ktoré reprezentujú súradnice stredov podstáv valca.  Na riadku 134 je vypočítaná hodnota premennej d1, ktorá reprezentuje koeficient d vo všeobecnom tvare roviny, ktorá je kolmá na os valca a prechádza bodom X (bod, o ktorom rozhodujeme). Tento koeficient je potrebný k tomu, aby bola kompletná rovnica roviny v priestore. Potom je možné vypočítať parameter t podľa vzťahu 3.7. Práve tento vzťah modeluje priraďovací príkaz na riadku 135.  Po výpočte parametra t môžeme definovať bod XT (bod, ktorý je kolmým priemetom bodu X na os valca), ktorý je typu cPoint3D. Ten je definovaný na riadku 137 tak, že sa zavolá konštruktor triedy cPoint3D, ktorému sa odovzdajú hodnoty argumentov. Tieto hodnoty sa vypočítavajú podľa vzťahov pre výpočet súradníc bodu ležiaceho na priamke, ktorá je daná svojim parametrickým vyjadrením (vzťahy 4.1 až 4.3).  Na riadku 139 je deklarovaná premenná dist_01, ktorej sa priraďuje výpočet vzdialenosti bodu X od osi valca. Tá sa vypočíta ako geometrická vzdialenosť dvoch bodov v 3D karteziánskom priestore, a to konkrétne bodu X a XT podľa vzťahu 5.1.  Na riadku 141 a 142 sú vypočítané hodnoty premenných d2 a d3, ktoré reprezentujú koeficient d rovín, ktoré prechádzajú stredmi podstáv valca a sú kolmé na os x. Z týchto koeficientov, smerového vektora a súradníc bodov X sa vypočítavajú vzdialenosti bodu od hornej a dolnej postavy valca. Tieto vzdialenosti sa v zdrojovom kóde počítajú na riadkoch 144 a 145.  Na riadku 147 je uvedený príkaz if, v ktorom je vyhodnotená pravdivosť výrazu, ktorý je tvorený tromi jednoduchými výrokmi. Prvý z nich tvrdí, že vzdialenosť bodu od osi valca je menšia alebo rovná polomeru valca. Druhý z nich tvrdí, že vzdialenosť bodu od dolnej podstavy valca je menšia alebo rovná výške valca. A posledný z výrokov obdobne tvrdí, že vzdialenosť bodu od hornej podstavy valca je menšia alebo rovná ako výška valca. Výroky sú pospájané logickým operátorom and, čo znamená, že ak sú súčasne všetky pravdivé, zložený výrok je tiež pravdivý a riadenie programu prejde na riadok 149, kde sa hodnote flag priradí pravdivostná hodnota true. Ak je čo len jeden z troch výrokov nepravdivý, zložený výrok je nepravdivý tiež, čo znamená, že bod nepatrí do priestoru valca a riadenie programu prejde na riadok 153 do klauzuly else, kde sa priradí hodnote flag pravdivostná hodnota false. Na riadku 156 sa vracia hodnota premennej flag pomocou kľúčového slova return.  Na riadku 159 sa začína definícia funkcie main(), ktorú volá operačný systém. V tele tejto funkcie sú na riadku 161 a 162 vytvorené nové inštancie triedy cPoint3D, ktoré reprezentujú stredy podstáv valca. Na riadku 163 je vytvorená nová inštancia triedy cCylinder, kde sa pomocou parametrov konštruktora odovzdávajú argumenty reprezentujúce stredy podstáv a polomer valca. Na riadkoch 165  až 173 sú do okna konzolovej aplikácie zapísané informácie o tom, či body, ktorých súradnice zadané ako argumenty členskej metódy BelongToCylinder(), patria do priestoru valca alebo nie. Celkovo sme volali túto členskú v zdrojovom kóde 8-krát. To znamená, že sme preverovali osem bodov. Len pre informáciu prvých päť patrilo do priestoru valca a ďalšie tri nie. Pre správnosť programu si výsledky môžete overiť analytickým postupom, ktorý je v predchádzajúcom texte uvedený.  Na riadku 175 sa len prechádza v okne konzolovej aplikácie na ďalší riadok. Na riadkoch 177 až 179 sú už len zavolané deštruktory definovaných objektov z dôvodu dealokácie pamäte. Na riadku 181 je vrátená hodnota 0 operačnému systému. Na riadku 182 sa ukončuje telo funkcie main() pravou programovou zátvorkou. V závere vám chcem poďakovať za prečítanie blogu. Dúfam, že vás článok, ktorý sa týkal objektovo orientovaného programovania a príkladu z analytickej geometrie zaujal. Podstatnou pridanou hodnotou zdrojového kódu bola členská funkcia, ktorá rozhodla o tom, či bod zadaný ako argument tejto funkcie patrí do priestoru valca alebo nie. Bola to skutočne náročnejšia úloha a preto som rád, že ste riešenie pochopili a spolu so mnou túto úlohu rozlúskli. Autorom tohto článku je Marek Šurka.
Rozhovor s novým lektorom Jakubom
Rozhovory
25.10.2020
Skillmea

Rozhovor s novým lektorom Jakubom

Jakub je lektor z Prahy, ktorého baví tvoriť a motivovať ostatných ku kreativite. Má svoj vlastný YouTube kanál o vývoji hier v Unity a Blenderi. Pracoval okrem iného ako externý redaktor programu Indián, dnes sa živí ako freelancer. Prinášame ti rozhovor s Jakubom, čítaj ďalej. Na začiatok najskôr začnime tvojou prácou. Čo presne robíš? Predovšetkým som študent a youtube. Natáčam videá z prostredia vývoja hier a Blenderu. Študujem multimédia, čo má k oboru veľmi blízko. Na akých projektoch si pracoval? Aké sú tvoje pracovné aktivity? Pracoval som ako externý redaktor programu Indian. Aktuálne sa živím ako freelancer v multimediálnej oblasti, tvorbou modelov do počítačových hier a navrhovaním a vizualizáciou produktov pre trh. A ako si sa k 3D modelovaniu vôbec dostal?Od malička som sa zaujímal o vývoj hier. Potreboval som niekde získať objekty do svojich projektov. Rozpočet som nemal žiadny, tak mi nezostalo nič iné, ako si ich sám vytvoriť. Blender bol pre mňa hneď od začiatku jasná voľba, pretože je zadarmo. Až časom som zistil, ako výkonný nástroj to je. Za SketchUp alebo Cinema 4D by som blender nikdy nevymenil. Prečo si sa rozhodol spolupracovať s Learn2Code?Dostal som od Learn2Code ponuku, ktorá sa neodmieta. Naviac bola s vami super korektná dohoda a vaše kurzy sú na úrovni :) Čo všetko sa človek naučí v tvojom online kurze Blender 2.8?Zručnosti, ktoré majú v dnešnej dobe reálny význam. Blender dnes patrí medzi špičku 3D vizualizačných programov, je skvelým nástrojom ako pri tvorbe modelov do hier, tak špeciálnych efektov do videí a filmov, navrhovaní interiérov aj exteriérov, produktov k predaju či prototypov a všetkého, čo si len ide v 3D predstaviť. My sa v kurze pozrieme na úplné základy. Ovládanie, nástroje, modifikátory, materiály, svetla, render, no skrátka základný balíček, ktorý musí správny kreatívec poznať. Je v tejto oblasti potrebné sledovať aktuálne trendy a inovácie? Ako si na tom ty?Samozrejme! Blender sa neustále vyvíja. Vždy má podporu najmodernejších technológií a je open-source. Ponúka najširšiu škálu nástrojov a má obrovskú komunitu, ktorá vytvára nový obsah zvonku. Patrónmi Blenderu sú spoločnosti ako Unity, EPIC, AMD, Nvidia a tie prostredníctvom Blenderu tlačí svoje technológie ďalej. Čo ťa najviac baví na tvojej práci? Určite kreatívne vyblbnutie. Je super mať prácu spojenú so zábavou. Máš na Jakuba otázky, napíš ich do komentárov. Pokiaľ sa chceš pozrieť Blenderu na zúbok, mrkni Jakubov kurz.
Digitálny svet v G-Suite
Vzdelávanie
13.10.2020
Skillmea

Digitálny svet v G-Suite

Žijeme v dobe, keď sú technológie už povinnou súčasťou našich životov. Postupne ako sme do tohto sveta vstupovali, tak sme si neboli ani vedomí, do akých rozmerov to narastie a stane sa to našou súčasťou. Pre naše pohodlie sme skúšali rôzne technológie, ktoré nám uľahčujú život a pomáhajú riešiť problémy. Dostali sme sa do stavu, že využívame radu programov, ktoré sú online alebo offline a odoberáme rozne novinky či newslettre od rôznych firiem. Zrazu sme sa ocitli v stave, keď nás začali tieto technológie a informácie zahlcovať a vyžaduje si to z našej strany viac času na ich organizáciu. Nie je dôležité, ako to bolo, ale je dôležité čo bude a ako s tým naložíme dnes. Z tohoto dôvodu vám chcem predstaviť G-Suite, mix najlepších aplikácií od Google, ktorý vytvoril rokmi tvrdej práce s ľuďmi. Predstavenie G SuiteG Suite nám ponúka radu nástrojov pod jednou strechou, pod jedným prístupom, všetko krásne pokope. Uľahčuje organizáciu dát, súborov, mailov a ostatných vecí. Kto G Suite nepozná, tu je krátke predstavenie:  G Suite je predplatné cloudových služieb a kancelárskych aplikácií. K tomuto musím spomenúť samozrejme samotný Gmail, ktorý ponúka základné služby G Suite.  G-suite je vhodný ako pre jednotlivcov, tak pre malé, stredné a veľké firmy.  Gmail a G Suite obsahuje:  • Gmail - Mailový server, mailová pošta • Hangouts / Meet - Videokonferencia • Kalendár • Google Disk • Google Dokumenty • Google Tabuľky • Google Formuláre • Google Prezentácie Toto všetko je v základnom balíčku pre Gmail a G Suite. Hlavný rozdiel je v tom, že v G Suite môžete mať vlastnú doménu emailu, v Gmaily máte príponu @gmail.com[Image] Prednosti G Suite sa objavujú pri nasadení vo firemnom prostredí. Obsahuje:  • Archivácia emailov a konverzácií • Google Sejf - Vault • Google Cloud Search • Správa prostedia • Správa mobilných zariadení Jednoducho všetko, čo je potrebné vo firemnom prostredí, v ktorom pracuje viac ľudí a je dôležité mať spoločné kalendáre, nastavenie prístupov do pracovných zložiek, zdieľanie jednotlivých dokumentov, plánovanie, kontrola. Najväčšie výhody G SuiteSpolupracovanie v reálnom čase V dokumentoch či tabuľkách môže pracovať naraz viac ľudí a to zároveň upravovať dokument, písať k nemu komentáre, opravovať ho, editovať.  Ukladať a zdieľať súbory Ukladáte súbory na Google Disk, ktorý je zálohovaný a zabezpečený a zdieľate súbory iba s tým, ským potrebujete, všetko máte presne pod kontrolou.  Zabezpečenie dát Obsahuje bezpečnostné opatrenia, dvojfázové overenie, jednotné prihlásenie. Pri strate zariadenia neprídete o dáta. Archivácie emailov. a veľa dalšieho. Implementácia G SuiteG Suite je ideálne riešnie pre každého, kto má rád jednoduchosť a potrebuje pracovať v digitálnom svete. Vytvárať dokumenty, byť prepojený s kolegami a zdieľať súbory a to všetko je možné z akéhokoľvek miesta na svete, kde máte pripojenie na internet. Ak by ste si chceli takéto riešenie vybudovať sami, stálo by Vás to omnoho viac peňazí ako platíte mesačne Google produktom G Suite. G Suite posúva svoje hranice ďalej a vždy sa snaží dodať to, čo je potrebné. Vzniká veľa ďalších nástrojov ako napriklad:  • Apps Script, čo je vytváranie vlastných príkazov, ktoré sa majú spracúvať či na úrovni makra v tabuľkách alebo iných častí, • Weby, • Google Cloud Platform, ktorý sa postará o chod aplikácií napojených na mobilné zariadenia alebo webové stránky, • Google AI, ktorý pomáha automatizácii, technológia budúcnosti, • a veľa ďalšieho. Pozrite si naše videotutoriály a naučte sa základy práce s G Suite, ak máte otázky napíšte nám. Ak uvažujete o implemetácii G Suite, oslovte nás a sme schopní vám pomôcť od začiatku po úplnú implemetáciu G Suite do vášho prostredia. Vyškolíme vás, ako s G Suite najlepšie pracovať.
Rozhovor s novou lektorkou Lindou
Rozhovory
20.09.2020
Skillmea

Rozhovor s novou lektorkou Lindou

Linda Lukačková je profesionálny recruiter, ktorý získal množstvo projektov za pomoci nástrojov ako farebná typológia a komunikačné skills. Svoje skúsenosti sa odzrkadlili na založení vlastnej firmy, ktorá je zameraná na IT-recruitment a odborné školenie práve v tejto oblasti. Rozhovor s Lindou ti prinášame práve teraz. Na začiatok najskôr začnime tvojou prácou. Čo robíš? Venujem sa prakticky viacerým profesiám súčasne. Okrem vedenia oddelenia IT recruitingu, pretože ako jeden zo spoločníkov zodpovedám práve za túto časť sa venujem aj príprave školení, lektorstvu, business coachingu a terapiám. Dá sa povedať, že moja žltá osobnosť potrebuje mať a zvláda viac stimulov, vtedy ma práca baví.  A ako si sa k recruitingu dostala?Z ministerstva financií som prešla do sales v oblasti financií, ale tam si všimli moj talent pre HR takže som začala školiť obchodné zručnosti a robiť nábory. Po pár rokoch som prešla do IT recruiting-u, kde som za 9 mesiacov prekonala čísla seniorných recruiterov. Rozdiel bol vlastne iba v tom, ze som využívala skúsenosti a techniky z priameho obchodu a z obchodných stretnutí. Naučiť sa správne vyhľadávať je prvý krok, ale potom prichádza to umenie predaja, pretože je úplne jedno či človek ponúka službu alebo pracovnú pozíciu. IT recruiter je vlastne tiež sales.  Čo ťa najviac baví na tvojej práci?V podstate ma na tejto naozaj náročnej práci baví práve to, že vytvárame nielen dlhodobé spolupráce, ale stávajú sa z toho dokonca businessové aj osobné priateľstvá. Spoznávam zaujímavých ľudí. Pamatám sa ako sme na jednej oficiálnej akcii viedli dlhy rozhovor s fanúšikom neuronových sietí a vymieňali sme si poznatky ako funguje a učí sa neurónová sieť a ako napríklad sa mozog posilňuje o neurónové vlákna tak, že často podvedome jednáme automaticky, lebo ideme po tomto vlákne. Pre mňa sú tieto ľudské spojenia naozaj obohacujúce. [Image] Určite zažívaš pri svojej práci aj vtipné situácie. Vypichni nejaké najzaujímavejšie.Neustále sa mi niečo deje. Najčastejšie sa mi stane, že si popletiem krstné mená, ale to sa stáva aj opačne. Ale mám rada, keď na moje zábavné úvody kandidáti odpíšu zábavne späť. Napríklad som ponúkala home-office s tým, že človek môže celé dni tráviť v zime v pyžame. A prišla mi odpoveď, že ostať niekoľko dní v jednom pyžame predsa len nie je zdravé pre telo a pachy ani pre okolie, takže sa treba aspoň prezliekať :D vznikla z toho milá debata.  Prečo si sa rozhodla spolupracovať s Learn2Code?Pretože aj za svojho pôsobenia v agentúrach ešte ako zamestnanec mám pocit, že sa všetko vzdelávanie v tejto oblasti sústredí iba na zvládnutie tzv. hard-skills, naučiť sa správne robiť search, naučiť sa technológie a následne sa očakáva výkon, ale to čaro úspechu tkvie v komunikácii a personal brandingu. Snažím sa práve v tejto oblasti poskytnúť tie vedomosti, skúsenosti a nástroje, ktoré sú potrebné pre dlhodobý úspech v tejto oblasti. Learn2Code mi na to poskytol skvelý nástroj a naozaj svižnú spoluprácu. Ja verím, že ešte spolu vytvoríme viacero projektov a toto je len veľmi vydarený začiatok.  Čo všetko sa človek naučí v tvojom online kurze?Tento online kurz sa zameriava na to, čomu sa nevenuje dostatočná pozornosť a to je soft-skills alebo umenie predaja a umenie prezentácie pozície. A ukazuje jeden z najefektívnejších nástrojov v komunikácií v sales už od čias antiky. Aristoteles to vedel, Platón to vedel, a my by sme to mali vedieť využiť. Farebná typológia je nástroj, ktorý využijete nie len v sales, ale aj doma pri deťoch, partneroch, priateľoch a kdekoľvek sa komunikuje. Ak sa to raz naučíte využívať budete to vedieť aplikovať kdekoľvek. Po jednom mojom školení mi raz prišiel feedback, že celý svet je zrazu farebnejší. Aké máš plány do budúcnosti?Neustále zdokonaľujeme školenia pre sales aj IT recruit, pretože vždy prichádzajú zaujímavé nové príklady, ukážky a skúsenosti. Takže stále dopĺňam a upravujem Hanbook. Chcela by som pripraviť školenia aj na Linkedin Recruiter a ďalej na budovanie Personal Brandu práve na Linkedine s použitím Farebnej typológie. Tých plánov je vo vzelávaní a coachingu naozaj predo mnou dosť a v IT recruitungu práve rozvíjať a budovať to oddelenie ďalej.  Krátky odkaz všetkým čitateľom na záver.Asi to bude atypický záver, ale spomínam si na jeden príbeh z knihy “Báje a povesti: Egypt, Grécko a Gália” volal sa Čarodejník so slovami. Tento príbeh stál za mojim uvedomením si toho, akú silu má spôsob komunikácie pre človeka. Ono je to tých 20% z procesu, ale dokáže vyvolať doslova synergický efekt kde 1 + 1 je rovné 3. Ak viete ľudí nielen nájsť a osloviť, ale aj sa prispôsobiť ich štýlu komunikácie, ten človek Vám možno nenastúpi na hneď prvý projekt, ale získali ste potenciálneho kandidáta do budúcnosti.  Ak máš na Lindu otázky, smelo ich napíš do komentára 👇👇 Lindin online kurz o HR recruitingu nájdeš na tejto stránke.
Java Files, Path, čítanie zo súboru
Vzdelávanie
17.09.2020
Skillmea

Java Files, Path, čítanie zo súboru

File I/O (Featuring NIO.2)Vo verzii 7 prišiel nový balík java.nio, v ktorom je nanovo urobené to, čo bolo v java.io. Chceš vedieť, ako čítať súbory (java read file)? Tak musíš vedieť, čo je to Path a Files. Môžeš používať obidva balíky. Musíš si ale dávať pozor na to, že ak pracuješ na projekte, kde sa používa java 6 a prípadne nižšie, tak ti nepôjdu tieto nové veci. Ale uvažujme, že na takýchto starých projektoch nepracujeme a budeme si vysvetľovať veci s použitím tohto nového balíka.  Budeme si hovoriť o základných triedach Path a Files, budeme manipulovať so súbormi a priečinkami a tak podobne. Tu je zaujímavý link porovnania funkcionality spomenutých balíkov a aké chyby mala java.io: https://docs.oracle.com/javase/tutorial/essential/io/legacy.html#mapping PathJednoducho povedané je to linka na súbor alebo na priečinok v danom operačnom systéme. Súbory sú hierarchicky uložené. Vo windowse je na vrchu označenie disku napríklad C:\home\skuska. V linuxových systémoch je root začínajúci lomítkom / napríklad /home/skuska. Tu môžeme vidieť, že vo windowse a v linuxe sa používajú úplne iné oddeľovače. Na to treba pamätať. Relatívna a absolútna cestaAbsolútnu cestu môžeme chápať ako úplnú celkovú adresu alebo cestu na súbor alebo priečinok.  C:\home\skuska je absolútna cesta, ktorá vždy obsahuje root, teda v tomto prípade označenie disku C:. Ak by som ale napísal len home\skuska\text.txt – tak vidím, že sa snažím pristúpiť na súbor text.txt, ktorý je umiestnení v priečinku home a skuska. Ale kde sa nachádza priecinok home? Bez ďalších informácii to neviem a to je relatívna cesta.  Trieda PathZákladná trieda v tomto balíku – používa sa aby uchovávala informácie o názve súboru, priečinkoch ktoré sú použité na skonštruovanie cesty aby bolo možné lokalizovať dané dokumenty alebo priečinky. Path na windowse je bude odlišná od Path na unixe.  Ak hovoríme o triede Path, tak môžeme v jednoduchosti povedať, že môžeme manipulovať s cestou, ktorá vedie k priečinkom alebo súborom.  Trieda FilesTáto trieda slúži na manipuláciu s priečinkami a súbormi. Používa triedu Path.  Keď pristupujeme k súborom alebo celkovo ku zdrojom na disku – tak sú „otvorené“. Potom s nimi pracujeme a keď už s nimi nepracujeme tak musíme zavolať „uzatvorenie“ práce s týmito zdrojmi aby ich mohol používať niekto iný.  Na automatické uzatvorenie môžeme použiť try-with-resources.  Práca so súbormiMáš Path inštanciu, ktorá reprezentuje súbor alebo priečinok. Teraz ale ešte stále nevieš, či reálne tento súbor alebo priečinok existuje, či sa dá z neho čítať, či sa dá do neho zapisovať a podobne. Existuje subor alebo neexistuje, môžem k nemu pristúpiť? Path path = Paths.get("C:\\work\\tools\\Apache Software Foundation\\Tomcat6\\logs\\service-install.log");  System.out.println(Files.exists(path));  System.out.println(Files.notExists(path));  isReadable(Path)  isWritable(Path) isExecutable(Path) Sú to rovnaké súbory? isSameFile(Path, Path)  mazanie súboru Files.delete(path);  Vyhodí to výnimku prečo sa to nepodarilo ak sa to nepodarilo. Metoda deleteIfExists(Path) tiež zmaže súbor ale ak súbor neexistuje tak sa nevyhodí výnimka.     kopírovanie súboru Files.copy(source, target, REPLACE_EXISTING);Do metody sa dajú dať varargs options. StandardCopyOption a LinkOption enums sú podporované. Všimni si, že ak dáš ctrl a click na copy metodu, tak je tam CopyOption... options. Potom klikni ctrl na copy option a zistíš že je to len interface ale v popise máš napísane, že vieš použiť StandartCopyOption čo implementuje CopyOption.[Image] Tu si môžeš pozrieť implementácie CopyOption rozhrania.  Ak kopíruješ súbor na miesto kde sa takýto súbor už nachádza, tak sa súbor neprepíše ak nezadáš option REPLACE_EXISTING.  Priečinky sa dajú tiež kopírovať ale skopírujú sa prázdne  aj keď v nich bol nejaký súbor.  Čítanie sú súboru (read from file)Konečne sme prišli na kus kódu, vďaka ktorému môžeš čítať zo súboru (read from file):  Path path = Paths.get("C:\\work\\tools\\Apache Software Foundation\\Tomcat6\\logs\\service-install.log"); List<String> lines = Files.readAllLines(path);
Success story: freelance fronte-end developer Patrik
Success stories
12.08.2020
Skillmea

Success story: freelance fronte-end developer Patrik

V tomto článku ti predstavíme ďalšieho úspešného absolventa našich online kurzov. Patrik Stodola sa aktuálne venuje frontendu ako freelancer a tiež rozbieha vlastnú firmu. V rozhovore sa dozvieš, ako sa Patrik k webom dostal, aká bola jeho cesta vzdelávania a čo odporúča začiatočníkom v oblasti tvorby webov a programovania. Čítaj ďalej. Začnime tvojou aktuálnou prácou. Čo presne robíš, aká je tvoja pozícia?Momentálne pracujem ako externý front-end developer pre viaceré firmy, a takisto popri tom riešim aj svoje vlastné zákazky. Ešte ako študent som mal myšlienku vlastnej firmy, ktorá by sa zaoberala kompletnou tvorbou webstránok - digitalnydizajn.sk, môj vlastný projekt, ktorý takisto rozbieham.  Ako si sa k tejto pozícii dostal?Na strednej škole. Dodnes si pamätám, ako sme na praxi začali preberať tvorbu obyčajných, statických HTML stránok. Nevedel som ani “ň”. Vôbec som tomu nerozumel - ale to bolo TO, čo ma k tomu pritiahlo. Vždy, keď si neviem s niečim rady, robím to dovtedy, až kým sa mi to nepodarí. Prišiel som domov, otvoril youtube a začal som sa učiť pracovať s HTML a CSS podľa indických tutoriálov. To boli moje začiatky. Neskôr som objavil stránku Learn2Code - kurzy Webrebel od autora Yablko, ktoré mi neskutočne pomohli a vďaka nim som si začal privyrábať už ako študent SŠ.  Máš nejaký vzor, ktorý ťa inšpiruje? Osobu, ktorá je pre teba motivátorom?Áno, mám. Lektor Yablko, jeden z najlepších programátorov - čo sa týka vedomostí a podania myšlienky divákovi. Kde berieš inšpiráciu pre svoju prácu? Máš nejaké tipy, ktoré zaručene fungujú?Keď potrebujem načerpať inšpiráciu, otváram Instagram alebo Dribble. Pravidelne tam sledujem novinky z oblasti designu a webdesignu, moderné grafické prvky, či rôzne vychytávky, tipy a zaujímavé kombinácie.  V tejto oblasti je potrebné sledovať aktuálne trendy, inovácie. Ako si na tom ty? Stíhaš to všetko popri práci?Snažím sa vzdelávať dennodenne. Za necelý rok a pol som sa naučil pracovať s HTML, CSS, SCSS, PHP, JS, jQuery. Prednedávnom som si doma dokonca spravil vlastný webhosting, ktorý beží na NUC (miniPC), s ktorým mi tiež pomohol návod na Learn2Code. Čiže teraz miesto webhostingových služieb využívam vlastný hosting. V IT sfére je sa vždy čo učiť .. :-)  Čím všetkým si si musel prejsť, pokiaľ si sa vypracoval na túto pozíciu?Zo začiatku bolo celkom náročné, kým som sa naučil rozmýšľať ako programátor. Takisto si pamätám na moje prvé zákazky, ktoré ešte vtedy neboli tak kvalitne prepracované ako dnes. Veľa som študoval, čítal, získaval nové informácie, ale to najhlavnejšie - kódoval a programoval. Čo ťa najviac baví na tvojej práci? Máš nejaký obľúbený task, ktorý robíš najradšej?Len ten pocit že otváram kód, prípadne píšem nový mi prináša pocit šťastia. Takisto ma Veľmi baví stretávať sa s klientmi, komunikovať ohľadom práce alebo zákaziek. Práca s počítačmi bola od mala moja záľuba a odvtedy čo som sa naučil programovať sa to len stupňuje.  Dnes je obrovský dopyt po programátoroch. Čo by si poradil všetkým, ktorí nemajú žiadne skúsenosti, ale chceli by nejako začať?Najprv by som odporúčal naučiť sa pracovať s HTML a CSS, to je základ všetkých web stránok. Neskôr by som isto odporučil Bootstrap alebo Bulma, to je dnes dosť žiadané. A potom by som odporučil rozhodnúť sa, či sa zamerať na web stránky, webové aplikácie, iOS / Android aplikácie alebo rôzne systémy..  (PHP, JS, Python, Java, Swift a mnoho ďalších pre rôzne účely..) Čo je podľa teba najväčšou výhodou práce v IT odvetví?Veľká výhoda je to, že pri práci v IT odvetví môžete pracovať prakticky odkiaľkolvek. Stačí Vám notebook, internet a Vaše vedomosti.   Mal si niekedy pocit, že to nezvládneš? Bolo obdobie, kedy si chcel skončiť a robiť niečo úplne iné?Zatiaľ nie, keď cítim že je toho dosť, vypnem PC, idem sa prejsť, vyventilovať. Keď riešim nejaký programátorský problém, dosť účinná je “Duck Duck” metóda. Aké sú tvoje plány do budúcnosti?Moje plány do budúcnosti sú také, že by som chcel vo väčšom rozbehnúť projekt digitalnydizajn.sk . Popri tom sa sústredim aj na ďalšie projekty, ale toto je jeden z tých najhlavnejších. V prípade záujmu o spoluprácu ma môže hocikto kontaktovať.  Máš nejakú radu, ktorú by si chcel zdieľať so študentami, ktorí len začínajú s tvorbou web stránok a programovaním alebo so svojím vzdelávaním v IT oblasti?Odporúčam sa pravidelne vzdelávať v jazyku, v ktorom pracuješ. Isto nie je naškodu sa naučiť aj niečo pomimo, nikdy nevieš, kedy sa Ti tvoje vedomosti zídu. A hlavne sa nikým a ničím nenechať odradiť. Patrikovi ďakujeme za rozhovor a prajeme veľa úspechov v ďalšom programátorskom živote. Pokiaľ máš na Patrika alebo tento rozhovor nejaké otázky či pripomienky, neváhaj napísať do komentárov 👇👇
Vyskúšaj si Skillmea na mesiac zadarmo 😲
Novinky
04.08.2020
Skillmea

Vyskúšaj si Skillmea na mesiac zadarmo 😲

Pripravili sme si pre teba parádnu akciu - vyskúšaj si naše online kurzy na 30 dní zadarmo. Žiadne triky, skryté podmienky. Jednoducho sa prihlásiš do predplatného na mesiac a môžeš študovať to, na čo máš chuť. Postup aktivácie kurzov na 30 dní zadarmoJe potrebné ísť na stránku https://skillmea.sk/akcia a potom kliknúť na OBJEDNAŤ.[Akcia od Learn2Code]Pokiaľ nie si u nás zaregistrovaný, vytvoríš si registráciu so svojím emailom. Pokiaľ už zaregistrovaný si, jednoducho sa prihlásiš do svojho účtu. Následne sa dostaneš na objednávkový formulár a musíš zaškrtnúť políčko 'Mám zľavový kupón'. A do tohto políčka vložíš kód  “yablko  [V políčku zľavový kód zadaj: yablko]” Voilà, už len klikneš Vstúpiť do kurzu a predplatné máš aktivované. Potom si už len vyberieš kurzy, ktoré chceš študovať. Napríklad pôjdeš na stránku https://skillmea.sk/kurzy/online-kurz-javascript-es6 a klikneš Zapísať kurz. Platnosť tvojho predplatného sa zobrazuje v tvojom profile, môžeš si to pekne skontrolovať. Kód je platný len do 31.8.2020. Čo všetko na teba čakáAbsolvuj toľko kurzov, koľko len chceš! Či už sa zameriavaš na grafiku, weby, video či marketing, vybrať si môžeš z viac ako 140 online kurzov zahŕňajúcich stovky hodín videa. Tvorba stránok, programovanie, Excel, ale ani fotografovanie či strih videa ti už nebudú robiť najmenší problém 💪 Poď na to a aktivuj si svoje predplatné na mesiac ešte dnes, kód je platný do 31.8.2020 👇
Matematické operácie v Exceli
Vzdelávanie
28.07.2020
Skillmea

Matematické operácie v Exceli

Funkcie a vzorce sú možno najvyužívanejšou časťou Excelu a v tomto blogovom príspevku sa pozrieme na najdôležitejšie matematické operácie. Pomocou matematických operácií vieme vypočítať napríklad priemer, maximálne či minimálne hodnoty, súčty. Funkcia SUM (Súčet)Je to pravdepodobne najpoužívanejšia matematická funkcia, ktorá jednoducho spočíta hodnoty vo vybraných bunkách, viď obrázok nižšie. Funkciu SUM môžeme použiť aj na spočítanie normálnych čísiel, napr.  =SUM(9;2;8)funkcia nám dá výsledok 19.[Image] Funkcia SUMIF (Súčet na základe podmienky)Zaujímavou súčtovou matematickou funkciou je SUMIF, ktorá spočíta hodnoty s nejakou podmienkou. Napríklad z tabuľky nižšie chceme spočítať "Cenu po zlave" spolu za všetky objednávky z mesta Martin. V argumentoch funkcie SUMIF nás samotný Excel navádza na to, čo máme zadať. Boldom sú zvýraznené argumenty Kritériá a Rozsah, ktoré spolu súvisia. Kritériom je to, čo je našou podmienkou - teda konkrétne Martin. Rozsah sú tie bunky, v ktorých viete nájsť svoje kritériá. Čiže označíme stĺpec Mesto. Rozsah súhrnu je to, čo chcem spočítať - označíme teda stĺpec 'Cena po zlave'. Klikneme OK a dostaneme výsledný súčet. [Image] Funkcia ROUND (Zaokrúhľovanie)Funkcia Round zaokrúhľuje matematicky.  Argumentami funkcie je číslo, ktoré chceme zaokrúhliť a druhý argument je na koľko desatinných miest chceme dané číslo zaokrúhliť.[Image] Funkcia SUBTOTAL (Súčtový riadok)Táto funkcia sa využíva pri tvorbe súčtových riadkov v tabuľkách. Jedná sa o praktickú funkciu, ktorá dokáže nahradiť niekoľko ďalších funkcií, napr. SUM, COUNT, MIN, MAX a pod. Jej veľkou výhodou je, že pokiaľ použijete napr. filter, umožní ti rozhodnúť sa, čo so skrytými riadkami. Pozrime si obrázky nižšie, v prvom nemáme použité žiadne filtrovanie a výsledky funkcií SUM aj SUBTOTAL sú zhodné. Keď sa však pozrieme na obrázok číslo dva, v ktorom sú už použité filtrovania, výsledky funkcií SUM a SUBTOTAL sú rozdielne a správny výsledok nám dáva práve funkcia SUBTOTAL. Je to práve kvôli tomu, že spočítava len viditeľné hodnoty v bunkách, nie hodnoty v bunkách, ktoré sú skryté.[Image][Image] Funkciu subotal si vyvoláme ako každú inú funkciu a jej argumenty sú nasledovné:  • Číslo funkcie: pokiaľ nepoznáte presné číslo funkcie, je vhodné si otvoriť pomocníka a vyhľadať si tú správnu funkciu. V našom prípade je to číslo funckie 109, pretože ide o funkciu SUM a ignorujeme skryté hodnoty. • Odk1: rozsah, s ktorým má naša funkcia pracovať, čiže označíme všetký bunky, ktoré má funkcia spočítať alebo urobiť inú matematickú operáciu. Čísla funkcií pre funkciu SUBTOTAL: Číslo funkcie (zahŕňa skryté hodnoty)Číslo funkcie (ignoruje skryté hodnoty)Funkcia1101AVERAGE 2102COUNT3103COUNTA4104MAX5105MIN6106PRODUCT7107STDEV8108STDEVP9109SUM10110VAR11111VARP  Average (Priemer)Matematická funkcia Average (Priemer) vypočíta priemernú hodnotu z rozsahu buniek. Vyvoláme si funkciu a do syntaxe označíme všetky hodnoty, z ktorých chceme vypočítať priemer. [Image] Aj túto funckiu môžeme modifikovať pomocou IF a teda použiť funckiu s podmienkou AVERAGEIF. OdmocninaV Exceli viete veľmi rýchlo a jednoducho odmocňovať. Existuje na to matematická funkcia SQRT, ktorá má len jeden argument a teda číslo, z ktorého chceme druhú odmocninu vypočítať. Funkciu SQRT je možné použiť len pre druhú odmocninu. Ak chcete vypočítať inú, je potrebné použiť matematický vzorec Y(1/x) prípadne funkciu POWER(). Pokiaľ sa chceš zdokonaliť v Exceli, pozrite si niektorý z našich Excel online kurzov pre začiatočníkov alebo pokročilých. Ak sa chceš naučiť používať Excel ešte efektívnejšie, prečítaj si aj náš článok o klávesových skratkách v Exceli. V ďalšom blogovom príspevku sa pozrieme na ďalie zaujímavosti z Excelu, zameriame sa na vyhľadávacie funkcie VLOOKUP a HLOOKUP.