====== Trénink ====== Jedná se o první verzi, budu rád za připomínky a další náměty. Zde najdete některé úlohy, které nejsou součástí cvičení. Můžete to pojmout jako připravu na cvičení, nebo jako vzorek toho, co byste již měli umět. Pokud si je vyzkoušíte splnit, získáte dovednosti, které se Vám na cvičení budou hodit. Programovací jazyk použijte dle svého uvážení. ===== Příprava vývojového SW ===== Doporučuji si nainstalovat [[https://www.python.org/downloads/|Python 3]]. Na cvičeních budou k dispozici ukázky kódu právě v Pythonu. Zjistěte si také, jak doinstalovat nějaké balíčky (json, requests, ...). Zkuste si spustit nějaké Hello World. Vývojová prostředí pro různé jazyky naleznete třeba na serveru [[https://download.cvut.cz]]. ===== GIT ===== Tutoriálů a návodu týkajících se verzovacího systému GIT je na webu [[http://www.lmgtfy.com/?q=git+tutorial|spousta]]. Vyberte si sami. Nainstalujte si GIT a vybraný tutoriál si vyzkoušejte v příkazové řádce. K dispozici máte [[http://gitlab.fel.cvut.cz|GitLab]]. ===== Big vs Little Endian ===== Měli byste být schopni načíst soubor s daty s libovolnou [[https://en.wikipedia.org/wiki/Endianness|endianitou]]. Pokud máte pocit, že se Vás to netýká, mějte na paměti, že výchozí endianita u platformy x86 je LE, u síťových zařízení naopak BE. * Stáhněte si {{:courses:a6m33li:endianity.zip|archiv}}, ve kterém jsou dva BIN soubory. * Vyzkoušejte si, zda dokážete tyto soubory korektně načíst (v obou reprezentacích). * K dispozici máte nejen logy z vytvoření souborů, ale i hexadecimální přepis. * Oba soubory BIN obsahují stejná čísla (stejné hodnoty), akorát v jiné endianitě. Doporučený postup je následující: - Prohlédněte si oba logy a současně je porovnejte s obsahem (HEXDUMP.TXT) daného BIN souboru. Měli byste být schopni tam vidět rozdíly mezi reprezentací BE a LE: Po dvou úvodních řetězcích byla zapsána dvoubajtová proměnná bez znaménka (//usigned short//) s hodnotou 4660, tj. ''0x1234''. V souboru přejěte na offset ''0x0c''. V jednom ze souborů je zapsána jako dvojice bytů ''{0x12,0x34}'', v druhém ''{0x34,0x12}''. - Zkuste si tuto hodnotu z obou souborů korektně načíst. Když se to povede, pokračujte dále. Následují 4bajtové hodnoty (//unsigned int//). To by neměl být větší problém. - Následují proměnné se znaménkem. Zde opět vyřešte načítání pro jednu z reprezentací, např. LE. a pak pokračujte k té druhé. - Pokud chcete, můžete práci rozšířit o floating point čísla. - Měli byste také tušit, jak funguje [[https://en.wikipedia.org/wiki/Type_conversion|přetypování]] ve Vašem programovacím jazyce. **Zajímavost**: Víte, že původ Big/Little Endian souvisí s [[https://en.wikipedia.org/wiki/Endianness#Etymology|Guliverovými cestami, občanskou válkou a vejci]]...? ===== Vykreslení pixelu do canvasu ===== Ve svém oblíbeném programovacím jazyce vykreslete např. sinusoidu. Pripravte si však funkci, která umí vykreslit pixel na libovolné souřadnice obrázku, zadanou barvou: public void putPixel(int x, int y, int R, int G, int B) {...} public void putPixel(int x, int y, int grayLevel) {...} ===== TCP/IP ===== Měli byste mít alespoň základní znalosti o způsobu fungování protokolu [[https://en.wikipedia.org/wiki/Transmission_Control_Protocol|TCP]]/[[https://en.wikipedia.org/wiki/Internet_Protocol|IP]] a souvisejících (UDP, DHCP, DNS, HTTP, ...). Měli byste také znát základní metody protokolu HTTP (GET, POST, ...) a jejich použití při komunikaci s REST API. ==== Packet capture ==== Zjistěte si, jak ve vašem počítači odchytíte paket TCP/IP spojení a zobrazíte jeho obsah. Zkuste např. odchytit HTTP((pozor, HTTP/2 je již binární)) požadavek z prohlížeče. ==== Connection ==== Ve svém programovacím jazyku zkuste vytvořit jednoduché TCP spojení. Můžete např. poslat webovému serveru jednoduchý ''HTTP GET'' požadavek. Zkuste si související pakety odchytit. ==== Server ==== Pokud jste již zvládli komunikaci HTTP GET, zkuste si napsat jednoduchý server, např. tzv. echo. Co mu přijde, to pošle zpět. Vyjděte z implementace předchozího klienta a až Vám bude bezchybně fungovat, začněte vytvářet server. Měli byste vědět, že většina serverů využívá jisté paralelizace zpracování požadavků, viz např. [[http://berb.github.io/diploma-thesis/original/042_serverarch.html|přehled]]. Zkuste si Váš server přepsat s využitím např. ''fork()'' nebo [[https://en.wikipedia.org/wiki/Thread_(computing)|vláken]], příp. ještě lépe [[https://en.wikipedia.org/wiki/Thread_pool|Thread pool]]. ==== DICOM ==== Nainstalujte si [[http://dicom.offis.de/dcmtk.php.en|Dicom Toolkit]]. Seznamte se se zakladnimi prikazy. Vyzkousejte si je. Ve Vašem OS i programovacím jazyku si zjistěte, jak zachytíte výstup z provedeného příkazu (a zpracujete jej). Pozor, občas budete muset zachytit i ''stderr''((standardní chybový výstup)). ===== Textové formáty ===== Zkuste si načíst a zpracovat, příp. validovat jednotlivé typy souborů: * [[https://en.wikipedia.org/wiki/Comma-separated_values|CSV]] * [[https://en.wikipedia.org/wiki/JSON|JSON]] * [[https://en.wikipedia.org/wiki/XML|XML]] * [[https://en.wikipedia.org/wiki/XSLT|XSLT]] * [[http://caristix.com/help-center/v3/test/task/hl7-er7-encoding/|ER7]], který je použit v HL7 Zkuste použít vhodné knihovny. Pokud se chcete více procvičit, zkuste si napsat vlastní. ===== Databáze ===== Měli byste znát [[https://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model|E-R modelování]], [[https://en.wikipedia.org/wiki/Database_normalization|normální formy relačních databází]], SQL (včetně agregačních funkcí -- s klauzulí GROUP BY). [[http://www.lmgtfy.com/?q=database+SQL+tutorial+E-R+normal+form|Najděte si]] vhodný tutorial, je jich spousta. ===== HL7 ===== Stáhněte a vyzkoušejte si nějakou implementaci knihoven pro práci s HL7, např.: [[http://hl7api.sourceforge.net/index.html|HL7API]], [[http://hl7apy.org/|HL7APY]], apod.