Python 29
Vulkan prakticky

Túto časť seriálu venujeme extrémne stručnému popisu praktickej aplikácie, v rámci ktorej využijeme funkcionalitu API Vulkan na vykreslenie jednoduchej scény. Hneď v úvode zopakujeme, že jazyk Python z pohľadu výkonu v žiadnom prípade nesiaha na jednoznačného lídra, ktorým je jazyk C. Efektivitu programového kódu takisto nemožno prehnane vyzdvihnúť pretože Vulkan si v oboch prípadoch vyžaduje omnoho náročnejšiu a hlavne rozsahovo väčšiu prípravu kódu. Čo si však môžeme z tohto článku odniesť je poznanie, že Python je svojou flexibilitou skutočne bezhraničný a okrem ostatnej funkcionality dokáže bez problémov pracovať s modernými programovacími rozhraniami, medzi ktoré patrí aj API Vulkan.

obr2obr1

Python 28
Vulkan

Touto časťou seriálu budeme plynule pokračovať v popise grafických možností jazyka Python, tentoraz v spojitosti s API Vulkan. Hneď v úvode pripomenieme, že spájať Python s programovaním vysoko-výkonnej počítačovej grafiky nie je to pravé orechové. Napriek tomu stále existuje mnoho prípadov, kde toto spojenie vyniká a to najmä pre jeho vysokú efektívnosť. API Vulkan ako nástupca OpenGL síce omnoho plnohodnotnejšie využijeme v spojení s programovacím jazykom C a čo je najdôležitejšie, vôbec ho nemusíme preferovať pred starším OpenGL, avšak jeho znalosť nám určite rozšíri naše programátorské vedomosti a môže nás nasmerovať pri vývoji budúcich grafických aplikácií.

obr2obr1

Python 27
PyOpenGL

V roku 2011, konkrétne v aprílovom vydaní magazínu Infoware, sme publikovali tretiu časť seriálu Programujeme GPU, v rámci ktorej sme predstavili zdrojový kód aplikácie glsl v1.0. O tri roky neskôr, v januári 2014, sme publikovali prvú časť seriálu Programujeme pre Android, v rámci ktorej sme transformovali kód uvedenej aplikácie tak, aby bol spustiteľný na platforme Android. Po ôsmych rokoch sme sa rozhodli ten istý kód oprášiť a napísať ho v jazyku Python. Bez preháňania musíme konštatovať, že sme túto úlohu splnili bravúrne. V prvom rade k tomu prispela jednoduchosť, produktívnosť a efektivita jazyka Python, k čomu sa následne pridala nadčasovosť našich aplikácií. Tým chceme fakticky upozorniť na to, že v roku 2011 sme pripravili a prezentovali kód, ktorý je s minimálnymi úpravami použiteľný aj v roku 2022. Svojou štruktúrou a obsahom dodržuje štandardy, ktoré sú stále platné, a ktoré sú základom pre ďalší vývoj v danej oblasti.

obr2obr1

Python 26
PyCharm

Po tom ako sme si v úvodných častiach seriálu uviedli teoretické základy programovania v Pythone, sme neskôr pokračovali najmä v príprave rôznych webových aplikácií s použitím IDE (Integrated Development Environment) JupyterLab. Na úpravu drobných častí kódu sme občas použili vývojové prostredie IDLE, alebo jednoduchšie textové editory ako napr. UNIX vi, Kate, resp. GNU nano. Ako by to však vyzeralo, keby sme zabudli na IDE, pomocou ktorého by sme mohli písať klasické lokálne (newebové) aplikácie? Presne také IDE, na aké sme boli zvyknutí z dávnej minulosti keď sme začali písať naše prvé programy v jazyku Pascal, Basic, alebo C? Áno, podobné vývojové prostredia s plnohodnotným GUI (Graphical User Interface) rozhraním určené na vývoj (nie len) lokálnych aplikácií sú dostupné aj v prípade jazyka Python. A ako to už v dnešnej dobe býva, takých prostredí je hneď niekoľko.

obr3obr2obr1

Python 25
Django VI

V tejto časti seriálu sa rozlúčime s frameworkom Django a to detailnejším popisom tretej – poslednej verzie vzorovej aplikácie s názvom Spotreba energií. Nebudeme riešiť žiadne nové problémy. Našim cieľom bude zosumarizovať všetok doterajší kód a rozšíriť ho o aktivity, v rámci ktorých sa budeme venovať zápisu odpočtov spotreby elektriny a plynu. Najvýznamnejším rozšírením aplikácie je doplnenie grafických prehľadov priemernej dennej spotreby jednotlivých komodít.

obr2obr1

Python 24
Django V

V minulej časti seriálu sme si predstavili druhú verziu vzorovej aplikácie, v rámci ktorej sme začali využívať metódy tried Manager a QuerySet a to bez toho, aby sme si vysvetlili ich význam. Práve preto sa k nim dnes vrátime a predstavíme si detaily ich funkcionality. Pripomeňme, že Manager je rozhranie, pomocou ktorého sú výstupy otázok smerujúcich na databázu (dB Queries) odovzdávané modelom. Výstupy manažéra sú sadou objektov triedy QuerySet. Objekty nachádzajúce sa v sade QuerySet možno po ich vytvorení mnohými spôsobmi filtrovať, limitovať a agregovať čím získavame požadované – konkretizované výstupy.

obr2obr1

Python 23
Django IV

V dnešnej časti seriálu si predstavíme a detailne popíšeme algoritmy druhej verzie našej vzorovej Django aplikácie s názvom Spotreba energií v2.0. Do aplikácie doplníme všetky základné funkcie, ktorých existencia je nevyhnutná z dôvodu manažmentu záznamov nachádzajúcich sa v databázovej tabuľke. Okrem toho budeme dolaďovať grafický vzhľad aplikácie, riešiť jej odolnosť voči zadávaniu nekorektných vstupov a priebežne vykonávať jej testovanie.

obr3obr2obr1

Python 22
Django III

Posledné dve časti seriálu sme venovali teórii a informáciám, ktoré sa týkali tých najpodstatnejších detailov tvorby webových aplikácií s využitím frameworku Django. V tejto časti seriálu sa vrhneme na praktickú prípravu aplikácie a to riadne z ostra.

obr2obr1

Python 21
Django II

V tejto časti seriálu si uvedieme viacero veľmi dôležitých detailov, ktoré musíme poznať predtým, ako sa naplno pustíme do tvorby Django projektov. Ukážeme si ako sprístupníme správcovskú web stránku a v závere sa začneme venovať tzv. zobrazeniam (Views).

obr1

Python 20
Django I

Pri hľadaní témy na ďalšiu časť seriálu som mal v úmysle predstaviť možnosti Pythonu pri práci s databázami. Najdôležitejšou podmienkou bola vizuálna reprezentácia a správa údajov uložených v databáze. Okrem predstavenia vybranej databázy teda bolo potrebné vybrať nástroj, ktorý by vytvoril prezentačnú vrstvu. V minulosti sme si predstavili frameworky Flask a Dash. Tentoraz vystúpime omnoho vyššie a budeme sa venovať frameworku Django. Teoretické informácie, ktoré uvedieme vo veľmi skrátenej forme, pretavíme do aplikácie, ktorá bude určená na správu údajov uložených v databáze MySQL a to prostredníctvom interaktívnej webovej stránky generovanej nástrojmi Django.

obr2obr1

Python 19
Sliedič v.2

Dnešná časť seriálu bude priamym pokračovaním predošlej, v ktorej sme opísali funkcionalitu vzorovej aplikácie Sliedič v.1. Nadväznosť textového obsahu úzko súvisí s nadväznosťou programového kódu aplikácie. V podstate ide o rozšírenie jej prvej verzie o aktívnu časť. Tá bude realizovať tzv. poškodenie ARP záznamov. Ide o jeden zo základných spôsobov aktívneho sliedenia počítačových sietí.

obr2obr1

Python 18
Sliedič v.1

V minulých častiach seriálu sme sa naučili ako pracovať so sieťovým manipulátorom Scapy. Súčasne sme si ukázali ako používať framework Dash a vytvárať pomocou neho prezentačnú vrstvu našich webových aplikácií. Dnes tieto naše ťažko nadobudnuté skúsenosti naplno zužitkujeme. Vytvoríme rozsiahlejšiu aplikáciu, pomocou ktorej implementujeme sieťový sliedič (sniffer). V prvej verzii aplikácii nebudeme do siete nijako zasahovať, tzn. aplikácia bude pracovať v čisto pasívnom móde. Môžeme si ju teda dovoliť spustiť kdekoľvek bez strachu, že by sme tým porušili bezpečnostné pravidlá.

obr2obr1

Python 17
Skener dátovej siete II

Táto časť seriálu bude priamym pokračovaním predošlých dvoch článkov, v ktorých sme sa začali venovať skenom počítačových sietí. Dnes si dokončíme popis funkcií slúžiacich konkrétne na skenovanie portov. Hneď na to si popíšeme aplikáciu netmap, pomocou ktorej prakticky realizujeme jednotlivé skeny.

obr2obr1

Python 16
Skener dátovej siete

V tejto časti seriálu budeme pokračovať v skenovaní počítačovej siete pričom sa zameriame na skenovanie pripojených zariadení. Budeme pritom vychádzať z informácií, ktoré už poznáme. Doplníme ich o podrobnosti týkajúce sa zasielania sieťových paketov a prijímania odpovedí. Prezentačná vrstva bude rovnaká – Dash, avšak detailnejšie rozpracovaná a doplnená o nové prvky. V úvode musíme zdôrazniť, že sa ideme venovať získavaniu detailných informácií o našej počítačovej sieti. Táto aktivita je obvykle prípustná v našom domácom prostredí, resp. po predošlom povolení od správcu siete. Bez tohto povolenia skeny nikdy nespúšťajme!

obr3obr2obr1

Python 15
Scapy

V tejto časti seriálu využijeme nadobudnuté vedomosti týkajúce sa frameworku Dash na vytvorenie grafického rozhrania aplikácie, ktorej úlohou bude skenovať dostupné bezdrôtové siete. Využijeme pritom vizuálne komponenty knižnice Plotly (tabuľka, stĺpcový graf). Programovú logiku postavíme na funkciách paketového analyzátora Scapy (https://scapy.net). Skenovať budeme bezdrôtové siete čím neporušíme žiadne legislatívne pravidlá. Technickým prostriedkom bude obyčajný PC s bezdrôtovým sieťovým adaptérom.

obr2obr1

Python 14
Dash

Touto časťou seriálu síce nadviažeme na predošlé články, avšak diametrálne zmeníme prístup k tvorbe vzorovej aplikácie. Aj naďalej sa budeme venovať grafickej reprezentácii údajov prostredníctvom webových stránok. Budeme pracovať na štvrtej verzii aplikácie, ktorej úloha ostáva nezmenená a síce bude slúžiť na zobrazenie technických parametrov áut vo forme grafov. Framework Flask však vymeníme za jeho nadstavbu s názvom Dash čím kompletne zmeníme náš programátorský prístup k vývoju aplikácie.

obr2obr1

Python 13
Čítanie Excelových tabuliek

V tejto časti seriálu si predstavíme tretiu verziu aplikácie cars_v3, ktorej hlavným rozšírením oproti predchádzajúcej verzii, je schopnosť čítania a prezentácie údajov uložených vo formáte Microsoft Office Excel. Samotné čítanie z Excelových súborov je realizované triviálne pomocou funkcií knižnice Pandas. Problematickejšiu časť kódu tvorí konverzia získaných údajov do stavu, v ktorom ich chceme prezentovať na našej webovej stránke.

obr2obr1

Python 12
Grafická reprezentácia údajov

V tomto článku si predstavíme viacero možností grafickej reprezentácie údajov v rámci dynamicky vytváraných webových stránok. S využitím niekoľkých alternatív vytvoríme druhú verziu aplikácie, ktorej vlastnosti doplníme o možnosť vstupu údajov a ich grafickej vizualizácie.

obr4obr3obr2obr1

Python 11
Webový prihlasovací formulár II

V tomto článku dokončíme popis algoritmu webového prihlasovacieho formulára verzie 1.0. Zameriame sa pritom na viaceré dôležité detaily algoritmu. V úvode si uvedieme adresárovú štruktúru aplikácie s umiestnením jej jednotlivých súborov. Následne sa zameriame na popis významu a funkcionality jej konkrétnych Python modulov a HTML súborov.

obr2obr1

Python 10
Webový prihlasovací formulár I

V tejto a takisto aj v nasledujúcej časti seriálu sa budeme venovať prepojeniu Pythonu s webovým prostredím. Toto naše jasné smerovanie sleduje moderný trend tvorby programových diel, ktorého cieľom je sprístupniť aplikácie maximálnemu počtu používateľov so súčasným využitím výhod aplikačného prostredia typu klient-server. Jednou z najdôležitejších vlastností mnohých internetových stránok je autentifikácia, teda rozpoznanie – identifikácia konkrétneho používateľa. Často je to jeden z prvých krokov pri práci na danom portály a preto začneme práve touto témou. Vytvoríme jednoduchý webový prihlasovací formulár, ktorý okoreníme použitím tzv. jednorázového hesla (OTP – One Time Password).

obr2obr1

Python 9
Kópia snímok z IP kamery

Mnohí z nás majú doma či v práci nainštalované tzv. IP kamery najrôznejšieho typu a využitia. Môže ísť pritom o jednoduché-lacné kamery alebo o zložitý-drahý kamerový systém. V každom prípade pokiaľ hovoríme o technológii IP, takéto kamery pripájame k bežnej počítačovej sieti, prostredníctvom ktorej následne využívame poskytované služby. Najčastejšie ide o sledovanie obrazu snímaného kamerou. V prípade ak chceme obraz sledovať mimo lokálnej počítačovej siete, často sa stretávame s pojmami ako PortForwarding, Public IP, DDNS, IPsec, Onvif, rtsp... Veľkou otázkou je počítačová bezpečnosť. Ďalšou je napr. ukladanie záznamu v lokálnom (domácom) prostredí, ktoré môže byť pri incidente kompletne kompromitované vrátane zničenia záznamu.

obr2obr1

Python 8
Regulárne výrazy, PIP, JSON

Regulárne výrazy (Regular Expressions – RegEx) sú sekvencie znakov, ktoré tvoria tzv. vyhľadávací vzor (search pattern). PIP (Python Package Installer) je manažér balíčkov programovacieho jazyka Python. Na zdôraznenie faktu, že programovací jazyk Python je možné s výhodou využiť na prácu s databázami a ďalšími zdrojmi údajov, v krátkosti si predstavíme formát JSON (JavaScript Object Notation).

obr15obr14

Python 7
Výnimky, objektovo orientované programovanie

Interpreter Pythonu pri vzniku chyby, ktorá nastane počas vykonávania programu (runtime error), vytvorí objekt nazývaný výnimka (exception). So zväčšovaním sa programových balíkov a s tým súvisiacim nabaľovaním kódu, ktorý už nepripravoval jediný programátor, ale veľká skupina ľudí, začalo programovanie nadobúdať omnoho väčšie rozmery. Údaje a im prislúchajúce funkcie preto začali byť zoskupované do celkov – objektov s cieľom systematizácie práce a čo najjednoduchšej orientácie v rozsiahlom programovom kóde. Vzniklo tak objektovo orientované programovanie (OOP).

obr13

Python 6
Súbory, množiny a pevné množiny, rekurzia

V čase kedy pracujeme so spusteným programom (runtime) sú všetky naše údaje uložené v pamäti počítača (RAM), ktorej obsah je po ukončení vykonávania programu, resp. pri vypnutí počítača, zmazaný. V prípade ak chceme spracovávané údaje uchovať pre budúce využite, musíme ich uložiť do súborov (files). Jednou z najbežnejších funkcionalít, ktorá je implementovaná v mnohých programovacích jazykoch, je tzv. rekurzia. Ide o programovú konštrukciu, v rámci ktorej funkcia volá samú seba.

obr12obr11

Python 5
Typy, moduly, menné priestory

List je sekvenčné zoskupenie položiek (items), resp. elementov rôznych typov do jedného celku, ktorý ohraničujeme hranatými zátvorkami. Slovníky sú meniteľným dátovým typom, ktorý mapuje nemeniteľné kľúče (keys) k ľubovolným typom údajov. Modul je súbor, ktorý obsahuje definície a výkonné výrazy, ktoré môžeme využiť v rámci našich programov. Menné priestory (namespaces) sú kolekcie identifikátorov, ktoré patria konkrétnemu modulu, resp. funkcii.

obr10obr9

Python 4
Funkcie, reťazce, typy

Funkcia je pomenovaná sekvencia výrazov, ktoré tvoria jeden funkčný celok. Ich primárny význam je štrukturalizácia programov na menšie celky. Pomocou funkcií zjednodušujeme kód programov a to tým, že väčšie, často opakujúce sa sekvencie výrazov nahrádzame jednoduchým výrazom, resp. volaním funkcie.

priklad5priklad4

Python 3
Tok programu

Interpreter Pythonu vykonáva kód programu krok za krokom, resp. riadok za riadkom. Hovoríme pritom o tzv. toku vykonávania (flow of execution) programu, ktorý môže byť zmenený niekoľkými možnými spôsobmi. Všetky sú pritom založené na tzv. podmienenom vykonávaní (conditional execution). Pomocou podmienok dokážeme riadiť vykonávanie programu, resp. meniť jeho tok nami požadovaným smerom.

obr6obr5

Python 2
Programovanie programu

Programovaním vo vybratom programovacom jazyku rozumieme zápis výrazov v súlade s jasne definovanými pravidlami a stanovenou štruktúrou. Výrazy sa skladajú zo základných elementov (tokens), medzi ktoré patria čísla, slová, špeciálne znaky a operátory (symboly), výkonné prvky (statements) a kľúčové slová (keywords). Štruktúra programu definovaná programovacím jazykom stanovuje spôsob usporiadania výrazov. Preklad alebo interpretácia programu je vykonávaná pomocou tzv. syntaktickej analýzy (parsing), pri ktorej analyzátor (parser) sleduje stanovenú štruktúru, v rámci ktorej identifikuje jednotlivé výrazy a ich základné elementy.

  • Článok: cl2.doc
  • Publikované v PC Revue 11/2019
obr4obr3obr2obr1

Python 1
Úvod

Programovací jazyk Python (python.org) sa za posledný rok stal najdynamickejšie sa rozvíjajúcim jazykom a má viaceré predpoklady stať sa jedničkou v konkurencii omnoho silnejších hráčov. Seriál rozdelíme na dva väčšie celky. Prvý bude obsahovať všeobecné základy programovania v jazyku Python. V druhom sa budeme venovať rozšíreným možnostiam Pythona, resp. riešeniu konkrétnych problémov. Informácie o jazyku Python môžeme získať z extrémneho množstva informačných zdrojov – elektronických aj tlačených. V dnešnej dobe so všadeprítomným Internetom nie je najmenší problém nájsť zdroje, ktoré hĺbkovo popisujú nielen samotný jazyk, ale aj jeho špecifiká a rozdiely v porovnaní s inými programovacími jazykmi. Ambíciou tohto seriálu je informácie roztrúsené na rôznych miestach zosumarizovať a podať v ucelenej podobe.

  • Článok: cl1.doc
  • Publikované v PC Revue 10/2019