Späť na blog
Tipy a triky

Ako sa nepredávkovať návodmi

Lubo Herkoo
10.02.2019
15 minút čítania
Ako sa nepredávkovať návodmi
Tak. Rozhodol si sa naučiť programovať (na Skillmea si správne!). Je jedno, či chceš byť Web Developer (FrontEnd, BackEnd), chceš sa vzdelávať v konkrétnom jazyku (PHP, JavaScript, Java, C#), alebo si sa ešte nerozhodol, a chceš sa len naučiť programovať.

Aj keď kniha má svoje čaro, môžeš ju čítať aj elektronicky, s videom to však ide najrýchlejšie. Tvoji rodičia si pri pohľade na Teba možno myslia, že mrháš časom, Ty však vieš, že investuješ do seba. Správne!

Nad kurzami môžeš stráviť dlhé hodiny. Niektoré z nich majú aj viac modulov. Každý má však aj svoj koniec. Zámer autora kurzu predsa nebol získať sledovanosť pre jeho videá, ale chcel ťa niečo naučiť.

Možno si sa už ocitol v tom začarovanom kruhu, kedy po ukončení jedného kurzu hľadáš hneď ďalší, ktorý ťa posunie na vyššiu úroveň. A potom ďalší a ďalší.. Na vyššiu úroveň však už tutoriály a prepisovanie kódu z obrazovky nestačí. Ani jednoduché zadania lektorov z video kurzov nie sú postačujúce. Na vyššiu úroveň treba prax, treba tvoriť, pracovať na projektoch, vytvárať portfólio.
Ak sa chceš naozaj posunúť v programovaní vpred, pusti sa do zaujímavého projektu.

Portfólio programátora

V zaujímavom CV nemusí byť veľa projektov. Ten, kto ho bude čítať vie, či Tvoje portfólio obsahuje zaujímavé projekty, kde si sa stretol s nejakými výzvami. Pri absolvovaní kurzov si možno vytvoril jednoduchú aplikáciu na správu poznámok v Markdown formáte. Alebo sociálnu sieť, Twitter podľa tvojej chuti.

Všetko sú to však projekty, ktoré každý pozná a vie, že nájdeš kopec zdrojov ako takúto aplikáciu napísať a tvorba takéhoto projektu bola len akýmsi light fitness pre tvoju hlavu.

Najdôležitejšie na tom však je, že tie projekty nie sú tvoje. Tvoj projekt predsa začína prázdnym priečinkom, možno vytvorením index.html súboru, pokračuje nekonečným Google hľadaním riešení tvojich front-end alebo back-end problémov, implementáciami tvojich vylepšení, tvojich riešení, testov a refactoringu tvojho kódu. V repozitári vidieť, ako dlho si na projekte pracoval a ako sa projekt vyvíjal.
Pri práci na projektoch nestojíš na jednom mieste, ale tvoríš, učíš sa a rastieš.

Na čom teda začať makať?

Každý programátor si dobré nápady na aplikácie chráni. Návšteva programátorského fóra s otázkou typu
Nemáte náhodou nápad na nejaký zaujímavý projekt?
bude skôr cieľom posmechu ako zdrojom nápadov pre tvoje projekty. Nezúfaj, mám pre Teba niekoľko rád ako svoj mozog nenechať oddychovať príliš dlho.

Projekty som nevymyslel sám, väčšinou sú to projekty inšpirované existujúcimi aplikáciami, alebo všeobecne známe zadania. Pridal som k nim však aj odkazy na dokumentáciu, aby si netrávil čas hľadaním kde a ako začať.

Niektoré projekty možno nekorešpondujú s tvojou ideovou predstavou a môžu byť menej zaujímavé, keď sa však rozhodneš na ňom pracovať získaš hneď niekoľko výhod:
  • Nestojíš na jednom mieste, ale tvoríš, učíš sa, rastieš,
  • stretávaš sa s problémami (ver mi, bude ich čím ďalej tým menej), na ktoré hľadáš riešenia,
  • objavuješ nové spôsoby riešenia problémov, tvoje staré riešenia už nestačia, alebo sú neefektívne.

Level 1 - jednoduché projekty

Lunch picker
  • Takáto appka už existuje, ale urob vlastnú verziu. Podstata je, že vždy keď sa nevieš rozhodnúť, kam s kamošmi pôjdeš na pivo, nechaj to na výpočtovú silu.
  • Zadanie môže mať dve úrovne: Prvá úroveň je, že databázu miest na "zábavu" si vytvoríš sám a appka náhodne vyberie niektorú z nich. Druhá úroveň by bola, ak použiješ niektoré existujúce API (Google Reviews), ktoré ťa vie lokalizovať a databázu získaš odtiaľ.

Collection tracker
  • Publikuj svoju zbierku "čohokoľvek" vo forme katalógu. Premysli štruktúru kažej položky, skús ich kategorizovať, implementovať vyhľadávanie. Jednoduchý projektík o niečom, čo ťa skutočne baví.
  • Zadanie môže mať dve úrovne: Prvá vo forme jednoduchej MVC aplikácie s Bootstrapom, napísaná v Laraveli alebo RubyOnRails. Väčší skiller si môže trúfnuť navrhnúť API a dizajn implementovať v niektorej JS library - VueJS, React

Spoiler blocker pre clanky
  • Poznáš to - píšeš recenziu niektorého obľúbeného filmu alebo knihy a nechceš čitateľa tvojho textu nepríjemne prekvapiť vyzradením deja, alebo kľúčovej informácie. Podobne ako fungujú "Zobraziť viac" odkazy, môžeš takúto informáciu ukryť aj pod "Spoiler alert" odkaz. Spoiler v texte môžeš oddeliť pomocou data atribútu pre tvoj <p> element: <p data-spoiler="true">Spoiler text...</p>.
  • Zadanie môže mať dve úrovne: Prvá vo forme jednoduchého inline javascriptu, ktorý spustíš niekde na konci svojho textu pomocou <script> tagu. Druhá úroveň vo forme malej knižnice s využitím Module Pattern, ktorú môže použiť vo svojom Wordpresse ktokoľvek.

Tax forecaster
  • Aj keď politici sa nás snažia presvedčiť, že si zaslúžime istoty, jedinou istotou v živote sú dane. Navrhni nejakú jednoduchú appku, ktorá bude zbierať sumy tvojich freelance faktúr na základe vzorca, ktorý zistíš online (a naučíš sa pritom aj prečo platíš toľko na daniach).
  • Zadanie môže mať dve úrovne: Prvá úroveň je samotný jednoduchý výpočet - zadáš číslo a dostaneš hodnotu, ktorú zaplatíš štátu. Druhou úrovňou môže byť databáza s históriou tvojich FA a implementácia grafov, kde môžeš s pomocou knižnice D3.js vykresliť pekné reporty, koľko si zarobil a ako sa tvoj zárobok vyvíjal. Ak ťa vystrašila dokumentácia D3.js, môžeš sa skúsiť pohrabať v knižniciach, ktoré používanie D3js zjednodušujú.

FlashCard generator
  • Ak si v štádiu učenia sa (čo by si mal byť neustále) a snažíš sa zapamätať si niektoré dôležité informácie, koncepty alebo čokoľvek, osvedčená technika pamätania si vecí sú FlashCards. Navrhni appku, ktorá si z databázy, alebo JSON objektu vyberie pole dvojíc, kde prvým prvkom dvojice bude nejaký stručný popis a druhým prvkom bude informácia, ktorú si máš zapamätať. Tu je inšpirácia.
  • Zadanie môže mať dve úrovne: Prvou je implementácia, akú použili v ThoughtBot - teda informácia, ktorú sa snažíš naučiť sa len objaví pod heslom. Druhou úrovňou môže byť využitie CSS na zaujímavú animáciu, aby to vizuálne vypadalo ako ozajstné "otočenie karty".

Level 2 - stredne náročné projekty

Bring your umbrella
  • Ak nestíhaš ráno sledovať počasie, automatizuj to. Napíš appku (najviac sa asi hodí mobilná appka, ale užitočná môže byť aj webová aplikácia), ktorá ťa lokalizuje a s využitím API ti pripomenie, aby si si nezabudol zobrať zo sebou dáždnik - v okolí tvojej lokality bude totiž pršať. Webová appka ti môže poslať e-mail notifikáciu.
  • Zadanie môže mať dve úrovne: Prvou môže byť aplikácia bez grafického rozhrania. Druhou môže byť plnohodnotná weather appka prispôsobená tvojim potrebám a grafickým nárokom.

Music suggestion app
  • Spotify má tiež svoje API. To môžeš použiť na vytvorenie zoznamu skladieb, ktorý budeš tvoriť na základe počúvaných skladieb, ich žánru a iných dostupných dát. Takto získaš dáta o skladbe, ktorú používateľ práve počúva. Tu je dokumentácia, ako pracovať s playlistom.

Expense tracker
  • Vo forme mobilnej appky alebo webovej aplikácie môžeš vytvoriť aj svoj tracker príjmov a výdavkov. Ich kategorizácia a kreslenie grafov by malo byť samozrejmosťou. Ak sa ti podarí vyriešiť problém manuálneho zadávania bločkov, daj mi vedieť - do takej aplikácie rád zainvestujem. V Datamolino už vedia ako na to.
  • Najväčšou challenge pri tomto projekte je asi UI/UX - aplikácia by sa mohla učiť moje zvyky a inteligentne mi podsúvať dáta (kategorizáciu, tagy) podľa histórie mojich nákupov pri vytváraní jednotlivých položiek. Na základe týchto tagov a kategórií mi oznámiť, kde by som mohol nabudúce ušetriť. 

Downtime tracker
  • Ak máš obľúbený web, alebo plánuješ niekoľko svojich projektov, môžeš testovať, či náhodou tvoje aplikácie nemajú nejaký problém. Jednoduchým scriptom pristúpiš na URL svojej aplikácie a ak skript nevráti HTTP Response 200, tak ťa tracker notifikuje emailom, že sa niečo deje.
  • Zadanie môže mať dve úrovne: Prvou úrovňou môže byť notifikácia emailom. Druhou úrovňou môže byť notifikácia pomocou SMS brány (Twilio), alebo web hook do tvojho Slacku - ak používaš slack.

Level 3 - náročnejšie projekty

Slack bot
  • Ak poznáš Slack a inšpiruje ťa automatizácia, programovanie botov je teraz in. Niektoré vývojárske tímy denne absolvujú "standup" - odpovedia na jednoduché otázky týkajúce sa aktuálneho projektu/zadania (na čom pracujú, v akom sú štádiu, či sa na niečom zdržali a podobne). S pomocou Slack API môžeš vytvoriť jednoduchého bota, ktorý kontaktuje vývojárov z tvojho teamu a opýta sa ich zopár otázok. Ich odpovede môžeš zozbierať a vyhodnotiť v jednej správe, ktorú odošleš do #dev kanála. 

Microlearning app
  • Denne by si mal venovať nejaký čas svojmu vzdelávaniu - aby si ako programátor rástol. Ak sa účíš napríklad React, alebo VueJS - môžeš skúsiť použiť (alebo napísať vlastný) web scrapper a získať tak jednotlivé sekcie dokumentácie. Denne ti tvoja microlearning aplikácia môže poslať jednu sekciu/stránku z tejto dokumentácie e-mailom na štúdium.

Web scraper
  • Nájdi svoj obľúbený e-shop a skús vytvoriť vlastnú databázu jeho produktov, kategórií spolu s obrázkami. Web scraping je zaujímavou a nie jednoduchou témou pre programátorov, pretože ku každému webu, ktorý chceme scrapovať musíme pristupovať individuálne.
  • Hint: Pred tým, ako sa pustíš do scrapovania niektorej domény, skontroluj v nazov-domeny.sk/robots.txt, či náhodou doména nemá blokovaných niektorých botov.

Quiz Maker
  • Ak sa nudíš, môžeš prispieť aj k efektivite nášho školstva. Keď som učil ja, učitelia používali Hot Potatoes ako ich testovaciu platformu. Alebo vytlačené testy s kolonkami. Vstupom do tvojej quiz platformy môže byť JSON, ktorý bude obsahovať vhodne zvolenú štruktúru testovacích otázok, možných odpovedí a označenia správnej odpovede.
  • Zadanie môže mať tri úrovne: Prvou môže byť vygenerovanie testu z holého .json súboru. Druhou môže byť vytvorenie adminstračného rozhrania, kde si testujúci otázky a možné odpovede vykliká vo formulári. Treťou úrovňou môže byť implementácia rôzneho typu testovacej otázky (jedna správna odpoveď, viac správnych odpovedí, dopísanie správnej odpovede, zoradenie do správneho poradia, vytvorenie správnych párov, ...)

Browser extension
  • Naštuduj si ako pracujú browser pluginy a zvýš svoju produktivitu blogovaním distraktorov. Inšpiráciou ti môže byť BlockSite - výborný extension na blokovanie stránok.
  • Blokovanie stránok však nemusí byť jediný tip na doplnok do prehliadača. Doplnky sú fajn na zvýšenie produktivity, teda rôzne poznámkové doplnky, časovače (pomodoro), vytvorenie snímky z aktuálnej stránky a všeličo možné.

Programátorské výzvy - algoritmické úlohy

Ak nehľadáš nápad na projekt, ale radšej by si sa zdokonalil v riešení algoritmických úloh, mám tu niečo aj pre Teba:
  1. Advent of code
    • Adventný kalendár programátora (každý rok obsahuje nové zadania). Obsahuje 25 zadaní orientovaných na precvičovanie algoritmického myslenia. Ideálne na raňajšie prebudenie mozgu, niektoré úlohy však môžu zabrať viac času. Súčasťou je aj leaderboard, tam sa ja radšej ale nepozerám.
    • Zadania môžeš riešiť v ktoromkoľvek jazyku
  2. Project Euler
    • Podobne ako Advent of Code, aj toto je zbierka zadaní, ktoré sú však už len archívom. To však neznamená, že neobsahuje dostatok zadaní - je ich tam takmer 650. Pri každom zadaní je uvedený aj počet ľudí, ktorí zadanie vyriešili.
    • Zadania môžeš riešiť v ktoromkoľvek jazyku
  3. Daily Coding Problem
    • Toto je mailinglist, ktorý ti každý deň pošle jeden programátorský problém, ktorý môžeš rozlúsknuť. Problémy z tejto banky pochádzajú z pracovných pohovorov vo firmách, ako sú Google, AirBnB, Facebook, Apple a rôzne iné. Ich obtiažnosť je preto niekedy dosť vysoká. Ak sa ale pripravuješ na pracovný pohovor, tieto úlohy ti môžu pomôcť.
    • Nevýhodou je, že k riešeniam sa dostaneš až ak si ich predplatíš.
Aby sme to zhrnuli. Hodnota každého programátora sa ukrýva v jeho portfóliu. Sú to práve tvoje vlastné projekty, ktoré ťa budú reprezentovať na pohovore, ktoré ťa odlíšia od konkurencie. V článku sme ti poskytli tipy na zaujímavé projekty, ktoré obohatia tvoje CV, ale predovšetkým posunú ťa ďalej, postavia pred nové výzvy a prekážky. A to ako dobrý programátor určite potrebuješ.
Lubo Herkoo
Ruby on Rails programátor, otec štyroch detí, manžel jednej manželky. V Skillmea vediem vývoj a raz za dva roky publikujem článok.

Mohlo by ťa zaujímať

Java persistence – JPA, Hibernate, ORM
Tipy a triky
05.02.2019
Skillmea

Java persistence – JPA, Hibernate, ORM

JPA je java persistence api špecifikácia. Na to, aby si mohol používať JPA v skutočnej aplikácii, potrebuješ implementáciu JPA. Buď použiješ servery, ktoré už ponúkajú implementáciu JPA, ako napríklad GlassFish, alebo použiješ implementáciu, ktorú ti poskytuje framework Hibernate alebo EclipseLink. Ak používame JPA štandardy, tak je v budúcnosti úplne jedno, akú implementáciu JPA budeme používať. Pri programovaní budeme používať JPA anotácie, ktoré pochádzajú z balíka javax.persistence. V budúcnosti môžeš nasadiť aplikáciu na GlassFish, ktorý pozná javax.persistence a vie s tým pracovať alebo na Tomcat s použitím Hibernate, ktorý tiež pozná javax.persistence a vie s tým pracovať.  Čo je Persistence?Ak vytvoríš hocijaký jednoduchý objekt, čo sa stane? Napríklad objekt Adresa? Vytvorí sa v halde – v pamäti. Objekt môže mať nasetované nejaké dáta – informácie. Ak sa ale stratí referencia v javovskom kóde na tento objekt v halde – tak sa zmaže.  Ak si chceme uchovať tieto informácie, tak ich môžeme uložiť do databázy a najlepšie, aby po vytiahnutí z databázy mali tieto dáta tú istú formu – teda formu objektu Adresa.  Tomuto sa hovorí, že persistujeme (uchováme stálosť) objekt do databázy. Akoby tento objekt existoval aj mimo java programu. Tento objekt sa uchová v úložisku a znovu sa vytvorí, ak bude treba.  Čo je ORM?Klasické databázy ako Oracle, MySql a podobne sú relačné databázy, ktoré majú dáta uložené vo forme tabuliek. V jave ukladáme dáta vo forme objektov, v databáze vo forme tabuliek. Ale čo majú podobné? V relačnej databáze máme stĺpce, ktoré majú názvy a v riadkoch máme hodnoty. Niečo ako klúč hodnota – to isté platí aj pre objekty v jave – tam máme názov premennej a hodnotu v nej uloženú.  Tu prichádza pod ruku ORM – teda object relational mapping. Je to niečo ako objektovo relačné mapovanie. My naše java objekty namapujeme na tabuľky relačnej databázy. Aby sme vedeli, že tento field v javovskom objekte patrí do tohto stĺpca.   Objekty v jave sú medzi sebou prepojené pomocou uloženia referencie na daný objekt. Napríklad človek má field Adresa, kde je uložená referencia na objekt Adresa.  Relačné tabuľky majú medzi sebou tiež väzby. Buď máme v tabuľke pre človeka stĺpec adresa, kde bude uložený identifikátor adresy a na základe tohto identifikátora nájdeme danú adresu. Alebo existuje špeciálna tabuľka, kde budú dva stĺpce jeden pre identifikátor adresy a druhý pre identifikátor človeka. My potom vieme nájsť, aké adresy má človek nastavené, alebo pre akého človeka je nastavená daná adresa.[Image] Problém s JDBC prístupom – výhoda ORMV kurze Java pre pokročilých, ak si tento kurz videl, sme si ukazovali prístup k databáze cez JDBC. Čo sme spravili? Otvorili sme konekciu na databázu, napísali sme sql príkaz, ktorý sme následne poslali do databázy na vykonanie. Databáza nám vrátila výsledok vo forme result setu.  Predstav si, že máš len 5 až 10 tabuliek. Nad každou tabuľkou máš napríklad 4 rôzne sql príkazy – to máme približne 20 – 40 sql príkazov. Ak sa ti stane, že musíš zmeniť databázu – napríklad zmeníš názov stĺpca v tabuľke? Čo musíš spraviť? Musíš prepísať názov tohto stĺpcu na xy miestach – na 20 až 40 miestach – a to sme len v malej aplikácii – čo ak by to bolo na 100 miestach?.  Bol by v tom neporiadok a mohli by nastať problémy.  Ak ale použijeme ORM, tak v jave pracujeme s naším kódom, tak ako bežne. Vytvoríme si objekty typu Clovek, nastavíme mu nejaké hodnoty. Ďalej si vytvoríme kolekciu Adries pre daného človeka. Nakoniec v ORM frameworku povieme len persistni mi tento objekt. ORM sa potom postará o všetko uloženie týchto objektov do databázy na základe mapovania, ktoré mu poskytneme.  Clovek clovek = new Clovek(); clovek.setMeno("Jaro"); clovek.setPriezvisko("Beno"); Adresa adresa1 = new Adresa(); adresa1.setUlica("Nejaka 5"); adresa1.setPSC("94404"); Adresa adresa2 = new Adresa(); adresa2 = new Adresa(); adresa2.setUlica("Nejaka 5"); adresa2.setPSC("94404"); List<Adresa> adresaList = Arrays.asList(adresa1, adresa2); clovek.setAdresaList(adresaList); orm.persist(clovek); Ak by sme nepoužili ORM, sami by sme museli napísať metódu, ktorá nám otvorí konekciu na databázu, museli by sme napísať INSERT SQL príkaz pre človeka a potom aj pre jeho adresy a museli by sme zabezpečiť, aby sme nastavili všade dáta tam kde majú byť a musíme sa postarať aj o prepojenia medzi týmito dvoma objektami.  Ak ale použijeme ORM, tak sa nemusíme starať o tento balast kódu, ale sústrediť sa najmä na to, čo predáva a to je business logika aplikácie.  Nevýhody JDBC prístupu sú teda, že máme príliš veľa SQL príkazov, veľmi veľa kópie kódu, ručne sa musíme postarať o nastavenie dát do správnych stĺpcov.  Výhodou ORM je, že nemusíme robiť tieto veci z predchádzajúcej vety. ORM nám umožní používať java objekty na reprezentáciu relačnej databázy. ORM sa nám postará aj o prepojenie závislostí. ORM spojí výhody relačnej databázy a objektového modelu v jave plus schová všetku komplexitu SQL príkazov.  Čo je Hibernate? Hibernate je ORM – object relational mapping framework, ktorý slúži na mapovanie java objektov na tabuľky relačných databáz.  Java programátori sú zvyknutí písať kód v objektoch, prečo teda potrebujú ďalší jazyk – sql – na získanie dát z databázy? Hibernate na pozadí sám vytvára sql príkazy nad databázou a preto nemusíme písať sql príkazy my.  Ak chceme uložiť mapu objektov, napríklad Cloveka, ktorý ma Adresu, alebo aj viac objektov typu Adries, tak nemusíme písať všetky sql príkazy. Stačí, ak zavoláme jednoduchú metódu na uloženie objektu do databázy a hibernate sa postará o zvyšok.  Hibernate je aj implementácia JPA. [Image] Čo je JPA?Skratka JPA je Java Persistence API. Čo to znamená? V jednoduchosti povedané – je to štandard. Trošku zložitejšie povedané – je to špecifikácia pre OR mapovanie a je súčasťou Java EE, ale môžeme ju používať aj v Java SE projektoch.  Niektoré servery poskytujú vlastnú implementáciu JPA a niektoré nie – v tom prípade použijeme napríklad Hibernate implementáciu.  Predstav si, že celý tvoj kód používa veci z JPA. Teraz je na tebe, kam nasadíš svoju aplikáciu. Ak ju nasadíš na Glassfish nemusíš prerábať svoj kód, ktorý používa JPA – Glassfish ho pozná. Ak svoju aplikáciu nasadíš na Tomcat, tak mu prihodíš Hibernate, ktorý tiež pozná JPA. Potom tvoj kód bude fungovať všade – lebo používa štandardy JPA.  Je možné aby sme používali len Hibernate – teda by sme nepoužívali nič zo štandardov. Žiadne anotácie z javax.persistence a podobne – to ale neodporúčam.  Pýtal som saNapadlo mi, že by nebolo od veci spýtať sa kolegov developerov, čo si myslia o JPA a Hibernate. Ak by si si chcel prečítať ich názory, nech sa páči – bez cenzúry, citujem:  Tak toto je náročná téma a navyše zložitá.  JPA resp. ORM všeobecne (a teda aj Hibernate) sú vždy zložitejšie, než si používatelia (t.j. vývojári) uvedomujú. Výsledkom sú často nenápadné chybičky, lazy load exceptions, ktoré vedú k anti-patternom ako je OSIV (open session in view) alebo k výkonovým problémom (n+1 problem).  Týchto problémov je typicky o to viacej, o čo zložitejšie je mapovanie – a pritom práve na riešenie zložitého mapovania bolo ORM vymyslené. Aby sme mohli namapovať doménu do DB. Na to, sa často používajú aj “mimojazykové” triky ako reflection na private polia, takže objekty sú implicitne zviazané s ORM riešením, aj keď napr. mapovanie je oddelené do XML namiesto anotácii, čo samo o sebe je tiež nepraktické.  Okrem toho majú obe hlavne implementácie dosť bugov na to, aby na ne človek narazil, aj keď postupuje v súlade so špecifikáciou – stačí len chcieť trosku viacej a na nejaký bug určite narazíte. Takže potom to je kľučkovanie medzi bugmi a často komplikovaná možnosť vymeniť ORM providera.  Čo sa mi na ORM páči je lepšie mapovanie typov, možnosť customizovať mapovanie a podobne. Preto používam JPA aj na jednoduché mapovačky namiesto JDBC.  Navyše s JPA používam rad Querydsl, ktoré je lepšie/intuitívnejšie, než JPA štandardné Criteria API.  Hibernate používam dlho ale pravdu povediac nikdy som sa veľmi nezamýšľal nad výhodami. Zatiaľ som nemal výraznejší problém, ktorý by som nevedel vyriešiť, prípadne nejako obísť.  Plusy:  - ľahko sa robí mapovanie do DB s anotáciami aj pre začiatočníka bez veľkých znalostí databázy, zároveň ale bez znalosti DB môže byť mapovanie neefektívne  - je open source, takže ak potrebujem, viem pozrieť zdrojáky ako funguje  Mínus:  - asociácia OneToOne fetch=lazy nefunguje  Na používaní Hibernate/JPA (celkovo ORM vrstve) sa mi páči:  A) Abstrakcia od fyzického dátového modelu. Vývoj nad doménovým/logickým (entitno-relačným dátovým modelom) - bližšie k biznis vrstve. Čiže zjednodušené práca s objektami namiesto tabuliek.  B) Možnosť využívať rôzne pokročilejšie techniky získavania dát (napr. Spring Data JPA, ale aj zjednodušujúce Hibernate Query by example)  C) Agnostické od konkrétnej databázovej technológie (Oracle, MySql, ...)  D) Cachovanie a optimalizácia (napr. lazy loading)     Nevýhody:  A) Niekedy náročný (až nemožný) performance tuning.  B) Pri niektorých technológiách pomalšia krivka učenia.  C) Aj napriek používaniu JPA/Hibernate, je takmer nevyhnutné, aby developer poznal aj (native) SQL jazyk a jeho použitie.  ZáverPodarilo sa ti nazrieť do problematiky objektovo relačného prístupu k databáze a pochopil si, čo to znamená. Ak sa však chceš dostať ešte o level ďalej, pripravili sme pre teba samostatný kurz Java persistence – JPA a Hibernate. Ak chceš ešte viac, tak klikaj:👍 Viac o mne: http://www.jaroslavbeno.sk/  👍 Kurzy (java, git, maven, bootstrap, Asp .Net,): Learn2Code moje kurzy 👍 Free kurzy: YouTube kanál JaroslavBeno
Manuálne vs. automatizované testovanie
Tipy a triky
25.01.2019
Skillmea

Manuálne vs. automatizované testovanie

Rád si v detstve všetko rozoberal, špekuloval a škodoradosť hrala v divadle tvojich ranných emócií prím? Si tu správne. Pretože presne to sú hlavné črty testera. Len opatrne s tou škodoradosťou 😉 Manuálne testovanie nie je hanba!Neexistuje nič horšie, ako robiť stále to isté dookola. Našťastie, o tom manuálne testovanie nie je. Ale pekne postupne. Nepoznám krajší pocit v práci (okrem piatkového fajrontu) ako keď ja, človek, ktorý študoval dojivosť kráv a hektárový výnos pšenice, nachytá programátora s nejakou chybou. Manuálne testovanie znamená zobrať novú časť aplikácie, usúdiť či zodpovedá tomu, čo si zákazník želal a popri tom nachytať programátorov. Pri testovaní postupuj rovnako ako pri boji s mafiou. Najskôr ideš po veľkých rybách - chybách, ktoré spravia najviac škody, malé si nevšímaš alebo ich preskočíš, pretože nie je čas. Nech narobíš programátorom dosť roboty. Potom ideš po tých menších, dizajnových vychytávkach, pretože majú rovnakú váhu ako predvčerajšia instastory každej druhej makeup artistky . Vymýšľaš, čo si ešte nevymyslel a ideš po chodníčkoch aplikácie, kadiaľ by sa normálny používateľ nikdy nevydal. Ale Jožo Pročko hovoril 20 rokov dozadu, že nikdy nehovor nikdy. Ako tester to nehovor ani ty. Rozum maká zozačiatku viac ako ruky, a to je fajn. Fajn to byť prestane, keď sa karta obráti a nedajboh, aby si musel dvakrát robiť to isté. Alebo 3-krát. Alebo 4-krát. Alebo furt. Si odsúdený na večnosť regresne testovať celú aplikáciu. Pretože ak sa zmení kód, je potrebné to celé preklikať. A v tento moment mozog vypínaš a pracujú len ruky. Spomínaš si, keď ti ako malému povedali, že ak sa nebudeš učiť, budeš kopať kanále? Toto je to isté, akurát sedíš v bizniscentre s ďalšími korporátnymi kopačmi. Našťastie tú robotu môžeš prenechať počítaču, pretože na rad prichádza... Automatizované testovanie je programovanie!Nechaj zase mozog makať a ruky oddychovať. Automatizované testovanie je o tom, že ty naprogramuješ robota, aby chodil po určitej dráhe, cestičke v aplikácii a on to bude robiť vždy, keď mu prikážeš. Nepredstavuj si robota ako terminátora, ktorý za teba sedí v kancli. A ani takto to nevyzerá:[Image] Ty vidíš, že stránka sa otvorí, ale kliká po nej robot na pozadí, ktorého NIEKTO naprogramoval. A tým niekým si TY. Si programátor so všetkou tou pompou a slávou, píšeš kód napr. v JAVA a vyvíjaš si vlastnú aplikáciu, logiku, ktorá testuje softvér namiesto teba. Zo začiatku je to trošku ťažkopádne ako štartovanie V3S-ky, ale keď tú mašinu raz rozbehneš, práca ti neúmerne až zázračne klesá. A o tom je automatizované testovanie. Robotu, ktorá sa tebe nechce nenecháš na kolegu, ktorý sa vrátil z dovolenky. Ani ju nenaučíš masturbovať, aby sa spravila sama. (cit. Vtipnejší vyhráva 09/1994) Ale prenecháš ju počítaču. A on sa nepomýli, nevynadá ti, nezoberie sa o 16:00 domov a neochorie, keď polovica kancelárie zalieva zázvor vriacou vodou. Nevýhodou však je, že počítač vidí len toľko, koľko ho ty naučíš. Nie je inteligentný a nevidí veci v súvislostiach. Nevie si niečo všimnúť. Povieš mu slová František a Lászlo a on sa nezasmeje. Ani ty sa dúfam nesmeješ. A ešte si dávaj pozor, ako píšeš kód, aby si ho nemusel po sebe 30x opravovať, ak sa na stránke niečo zmení. Pretože to je tiež bolesť, neustále dohľadávať chyby v testoch. Poďme si porovnať manuál a automat. Výhody, nevýhody, kedy ktoré použiť.Manuálne testovanie+ hľadanie nových chýb v aplikácii, exploratory testing + objavenie dizajnových prešľapov + rýchla odpoveď na stav softvéru + improvizácia - nákladné - nevhodné na regresné testovanie - časovo náročné - nespoľahlivé (časový stres, prehliadneš chyby) - ako aplikácia rastie, rastú aj náklady na manuálne testovanie Automatizované testovanie+ regresné testovanie (pred vydaním do produkcie, po každej zmene) + rýchle + spoľahlivé + práca ti postupne ubúda - vyššie vstupné náklady (kým spustíš prvý test) - robot nové chyby nenájde - musíš vedieť programovať - údržba ZáverManuálne testovanie nemôže byť nahradené automatizovaným. Ak si manuálny tester, kľudne si vydýchni. A vydýchni si znovu, pretože ťa viem odbremeniť od tortúry, ktorú ti spôsobuje testovanie po každej jednej zmene. Naučím ťa programovať robota. Základy programovania a automatizovaného testovania ťa naučím v kurze s Batmanom: http://bit.ly/batmanKurz Ako písať efektívny kód, vedieť si postaviť Maven projekt, rozbehať jenkins, to ťa naučím v tomto kurze: http://bit.ly/jokerKurz A ako ten kód pekne zabaliť do jagavého pozlátka, aby mu každý rozumel ťa naučím v kurze s uhorkou: http://bit.ly/cucumberKurz Autorom blogu je Martin "Furby" Škarbala. Keď ťa zaujíma oblasť testovania softvéru, určite daj lajk na jeho Facebook stránku.
Čísla a znaky v Jave
Tipy a triky
28.10.2018
Skillmea

Čísla a znaky v Jave

V tomto článku sa spolu pozrieme na základy práce s číslami a znakmi v programovacom jazyku Java.  Čísla[Image] Prečo používať Numbers a nie primitívne dátové typy? Ak nejaká metóda príjma ako parameter Object, tak jej neviem podsunúť primitívny dátový typ. Môžeš použiť konštanty, ako napríklad MIN_VALUE alebo MAX_VALUE. Môžeme používať metódy na konverziu do a z primitívnych dátových typov ako aj zo String.  Byte b = 127; Byte b2 = 128; //error Byte len do 127Pre všetky typy máme metódy, ktoré z textu vedia vyloviť daný typ. Tu si treba dať pozor, lebo ak chcem zo Stringu dostať Integer – ale zadám tam text, tak to bude chyba. String decimal = "2.5"; double d1 = Double.parseDouble(decimal); decimal = "2.5a"; double d; d = Double.parseDouble(decimal); //chyba Keď hovoríme o číslach, tak nemôžme nespomenúť modulo. Plus, mínus poznáme, ale modulo by nám mohlo robiť problém. private static void modulo() { for(int i = 0; i < 32; i++){ rozdajHracoviKartu(i%4,i); } } private static void rozdajHracoviKartu(int hrac, int karta) { System.out.println("rozdavam hracovi "+hrac+", kartu cislo "+karta); }V tomto príklade výsledok modula nebude nikdy viac ako 3 a menej ako 0. Teda sa karty rozdajú medzi všetkých hráčov v hre. Skús si to pomeniť sám.  Matematické operácie Pre veľa matematických operácií máme triedu Math, ktorá obsahuje množstvo statických metód. Názvy sú samo vysvetľujúce, alebo si pozri nižšie komentáre: System.out.println("a "+a+" abs "+ Math.abs(a)); //absolútna hodnota System.out.println("b "+b+" ceil "+Math.ceil(b)); //zaokrúhli nahor System.out.println("b "+b+" floor "+Math.floor(b)); //zaokrúhli nadol System.out.println("b "+b+" rint "+Math.rint(b)); //klasicke zaokruhovanie zmen b ... vracia double hodnotu intu System.out.println("b "+b+" round "+Math.round(b)); //klasicke zaokruhovanie zmen b ... vracia int alebo long ... int round(float f) System.out.println("c "+c+" a d "+d+" max "+Math.max(c, d)); System.out.println("c "+c+" a d "+d+" min "+Math.min(c, d)); Náhodné číslo V Math triede máme metódu random. Vracia hodnotu od 0.0 po 1.0 . Krátením vieš zvätsit a musíš pretypovať na int ak chceš celé čísla. private static void randomNumbers() { int number = (int)(Math.random() * 100); System.out.println(number); }ZnakyPrimitívny dátový typ char sa používa na uchovanie jedného znaku. Pri char máme tak isto možnosť použiť jeho alternatívu objektovú a to Character V jave existujú escape sekvencie. To sú znaky, teda char, pred ktorým je spätné lomítko. Tieto sekvencie majú pre kompilátor zvláštny zmysel. Neberú sa ako nejaký jednoduchý text.  \t    -  vloží tab  \b   -   vloží backspace  \n   -   vloží nový riadok  \r    -   vloží carriage return  \f    -   vloží formfeed  \'    -    vloží jednu uvodzovku  \"    -   vloží dvojitú uvodzovku  \\    -   vloží spätné lomítko  Máme množstvo pomocných metód: Character ch3 = 'a'; System.out.println("char "+ch); System.out.println("isLetter "+Character.isLetter(ch)); System.out.println("isDigit "+Character.isDigit(ch)); System.out.println("isWhitespace "+Character.isWhitespace(ch)); System.out.println("isUpperCase "+Character.isUpperCase(ch)); System.out.println("isLowerCase "+Character.isLowerCase(ch)); System.out.println("toUpperCase "+Character.toUpperCase(ch)); System.out.println("toLowerCase "+Character.toLowerCase(ch)); System.out.println("toString "+Character.toString(ch));Takýmto spôsobom vieš vložiť aj špeciálne znaky z hora:System.out.println("Some \t nice text. tab"); System.out.println("Some \t\b nice text. backspace"); System.out.println("Some \n nice text. new line"); // je to niečo ako na starom písacom stroji kedy si sa presunul na začiatok riadku //ak nedáš ale nový riadok, tak ti prepíše to čo tam už máš napísané System.out.println("Some \r nice text. carriage return"); System.out.println("Some \r\n nice text. carriage return a new line"); System.out.println("Some \' nice text. "); Ak chceš zadať špeciálnu hodnotu, tak musíš zadať pred daný špeciálny znak lomítko. char uvodzovka = '''; //error char uvodzovka = '\''; System.out.println("Some " nice text."); //error System.out.println("Some \" nice text."); System.out.println("Some \ nice text."); //error System.out.println("Some \\ nice text.");ZáverAk ťa zaujíma Java, tak si tu na https://skillmea.sk pohľadaj kurzy, ktoré sa venujú programovaniu v Jave a nauč sa viac. Ja som Jaro a dúfam sa vidíme pri ďalšom článku alebo videu.

Nezmeškaj info o nových kurzoch a špeciálnych ponukách