Přihlásit

Účastníci Online Jarního soustředění KSP 2021 měli možnost vybrat si z následující nabídky přednášek. Hlasování o přednáškách bylo již uzavřeno a přednášky vybrány.

Níže se můžeš podívat na seznam všech nabízených přednášek.

  • Přednášky
(Kliknutím na název přednášky zobrazíte její detail)

Základní přednášky

Základy algoritmizace, složitosti a datových struktur ("Co by měl každý programátor znát.") [ZALG]
Jirka Setnička

Cílem této přednášky je naučit základní přemýšlení o algoritmech a jejich rychlosti a představit základní nejužitečnější datové struktury a kdy kterou z nich použít. Užitečným základem je pole, které se ale nehodí na všechno. Na dynamičtější věci jsou šikovnější spojové seznamy, ze kterých lze vytvořit například fronty nebo zásobníky. Pokud potřebujeme rychle hledat minima nebo maxima, mohou se nám hodit haldy a pro vyhledávání zase vyhledávací stromy. Pokud tyto struktury neznáš, je tato přednáška to vhodné místo, kde se je naučit. V opačném případě spíše doporučíme nějakou pokročilejší.

Grafy & algoritmy ("Pokud jste ještě neslyšeli o informatických grafech, tak tato přednáška je právě pro vás.") [GA]
Jirka Setnička, Filip Štědronský

Cílem této přednášky bude ukázat graf ve smyslu vrcholů a hran mezi nimi a naučit se, že informatický graf je jednou z nejmocnějších reprezentací reálného světa v programu. Například silniční sít s městy a cestami je graf stejně tak jako bludiště. Naučíme se, jak na těchto grafech hledat místa, kam se lze dostat, jak nalézt nejkratší cestu mezi dvěma vrcholy nebo jak uspořádat činnosti v továrně.

Rekurze ("Cihla váží kilo a půl cihly ...") [REC]
Martin Mareš

Jedním z nejmocnějších algoritmických nástrojů jsou rekruzivní funkce – tedy takové, které volají samy sebe. Ukážeme, k čemu může být rekurze užitečná a jak se v ní neztratit. A kdy je naopak lepší se rekurzi vyhýbat.

Dynamické programování ("Kampak jsem si to jenom schoval?") [DYNP]
Jiří Kalvoda

Dynamické programování je programátorská technika využívající velice prostinkého nápadu: Proč něco počítat několikrát, když to mohu spočítat jednou a výsledek si uložit? Na této přednášce si ukážeme, že tento jednoduchý nápad může pomoci efektivně vyřešit i poměrně obtížné úlohy.

(Kliknutím na název přednášky zobrazíte její detail)

Algoritmy a datové struktury

Hledání v textu (">>Vyšíváme v seníku!<< – kde jsem to jen viděl?") [TEXT]
Jiří Kalvoda, Filip Štědronský

Často se stane, že máme velký objem textu (knihu, všechny dokumenty na našem disku, celý internet), ve kterém opakovaně hledáme krátké řetězce (slova či sousloví). Pak se vyplatí předpočítat si pro text pomocnou datovou strukturu, která nám hledání urychlí. V našem případě touto strukturou bude sufixové pole, které nám umožní vyhledávat v čase logaritmickém k délce prohledávaného textu. Ukážeme si i další vyhledávací algoritmy, které se vyplatí třeba pokud naopak hledáme hodně dlouhá „slova“. To se hodí na trochu překvapivých místech – například se pomocí hledání v textu dají řešit některé úlohy o stromech.

Intervalové stromy ("Já bych ty intervaly nejradši... dal do stromu!") [ITREE]
Jiří Kalvoda

Intervalový strom je datová struktura pracující s intervaly, se kterou se můžeme setkat v mnoha úlohách (zejména soutěžních). Řekneme si, co to intervalový strom je, jaké všechny druhy intervalových stromů existují, a jejich použití si ukážeme na úlohách. Na závěr si představíme jednu „magickou“ datovou strukturu jménem Fenwickův strom.

Geometrické algoritmy ("Nerušte mé kruhy! (ani jiné kvadriky)") [GEOM]
Martin Mareš

Jak se na počítači řeší geometrické úlohy. Začneme jednoduchými otázkami, jako jsou průsečíky přímek nebo poloha bodu vůči polorovině. Ukážeme algoritmus na konvexní obal a výpočet obsahu mnohoúhelníka. Pomocí matic popíšeme transformace souřadnic. A pak si vezmeme koště a budeme zametat rovinu.

Datové struktury pro pokročilé ("Pojďme na procházku binárním lesem") [DS]
Jiří Kalvoda, Martin Mareš

Přehled šikovných datových struktur, které se nevešly do ZALG. Vyhledávací stromy a různé způsoby jejich vyvažování a „ozdobení“. Hešování aneb hledáme v téměř konstantním čase. Líné datové struktury a amortizovaná složitost.

(Kliknutím na název přednášky zobrazíte její detail)

Programovací jazyky a techniky

Programování v jazyce C [C]
Filip Štědronský

Jazyk C patří k nejrozšířenějším jazykům, hodí se pro low-level programování i kusy kódu, které mají zejména být rychlé. Představíme si datové typy a běžné programové konstrukce, vysvětlíme si základy práce s ukazateli a také se seznámíme se standardními knihovnami jazyka C.

Jazyk Go [GOLANG]
Jirka Setnička

Go je moderní kompilovaný jazyk vyvinutý Googlem proto, aby se v něm snadno psaly rychlé věci, například webové servery. Syntaxí patří mezi moderní Cčkové jazyky, out-of-box podporuje vícevláknové aplikace a kanály pro synchronizaci, má již celkem vyzrálý ekosystém balíčků a vzrůstající popularitu. Tato přednáška bude cílit na představení Go lidem, kteří již alespoň v jednom programovacím jazyce psát umějí a základ jazyka prolétneme spíše v rychlosti. O to víc času budeme věnovat silným vlastnostem a tomu, jak se píše taková malá aplikace v Go a používá se celý ekosystém (od získávání balíčků po snadné psaní unit testů) okolo.

Předpoklady: Instalovat si Go do systému podle předem poskytnutého návodu.
Procesy a vlákna ("Koupil jsem dalších 15 procesorů, proč je to stále stejně pomalé?") [THREAD]
Jirka Setnička, Filip Štědronský

Jak vypadá víceprocesorové či vícejádrové PCčko a co to znamená pro programátora. Procesy, vlákna a úskalí komunikace mezi nimi. Jak se snese n kohoutů na jednom smetišti? Synchronizační primitiva: mutexy, semafory, podmínkové proměnné. Spinlocky, deadlocky a livelocky. Jde to i bez synchronizace: atomické operace, transakční paměť. Které jazyky nám pomáhají a které spíš škodí. Kdy je lepší vlákna použít, a kdy ne.

Předpoklady: Trochu představy o hardwaru
Systém pro správu verzí Git [GIT]
Jirka Setnička

Programy vyvíjené delší dobu nebo ve větších týmech (nebo dokonce oboje) potřebují často nástroj, který zvládne udržet různé verze zdrojového kódu, navzájem je slučovat či se podívat an to, jak vypadal zdrojový kód pro minulou verzi. Jedním z nejpoužívanějších systémů pro správu verzí je Git (stačí se podívat, kolik softwaru světa je sdíleno na webech postavených okolo Gitu, například na Githubu). Cílem přednášky bude ukázat základní koncept Gitu (na sebe navázané změny neboli commity) a jak se Git používá v reálných situacích. Společně si založíme nějaký repozitář a budeme se s ním učit pracovat. Podle času a zájmu ukážeme s Gitem různé triky.

Předpoklady: Vytvořený účet na Githubu
Parsing čili analýza textu ("1+2*4 = 12") [PARSE]
Martin Mareš

Často potřebujeme načíst nějaký složitý textový vstup: matematický výraz, webovou stránku v HTML, zdroják programu, .... Ukážeme si, jak texty analyzovat (neboli parsovat), aniž bychom v nich zabloudili: rozdělení na lexikální a syntaktickou vrstvu, železničářský algoritmus na parsování výrazů, popis syntaxe pomocí regulárních výrazů a gramatik. Cestou zjistíme, že uživatelé jsou ještě větší potvory, než jsme si mysleli.

Asynchronní programování (nejen) v Pythonu [ASYNC]
Filip Štědronský

Ukážeme si asynchronní programování... jednu poměrně zajímavou techniku, jak psát programy, které dělají víc věcí najednou. Ta se hodí například pro síťové aplikace, uživatelská rozhraní a další druhy programů, které „moc nepočítají“. Asynchronní programování oproti např. použití vláken je jednodušší a méně náchylné na zrádné chyby. Příklady si budeme ukazovat na Pythonu s knihovnou Trio, ale podobné koncepty lze najít v mnoha jazycích.

Předpoklady: Základní znalost Pythonu.
(Kliknutím na název přednášky zobrazíte její detail)

HW, OS, sítě a další technikálie

Sítě a Internet ("Sítě nejen na ryby.") [NET]
Jirka Setnička

Jak funguje Internet a počítačové sítě vůbec. Lokální sítě s dráty i bez nich a různé způsoby, jak je mezi sebou propojovat. Protokoly rodiny TCP/IP a nad nimi postavené aplikační protokoly: DNS, SMTP, HTTP a celý zvěřinec dalších. Bezpečnost sítí a všelijaké útoky na ni. Pár taktů hudby budoucnosti: IPv6, multicasting, přenos v reálném čase atd.

Kryptografie ("Gbgb arav zbp gnwan mcenin.") [CRYPT]
Martin Mareš

Kryptografie se zabývá šiframi, jejich konstrukcí a zejména jejich luštěním. Začneme se symetrickými a asymetrickými šiframi a jednosměrnými funkcemi. Z nich pak vybudujeme složitější kryptografické protokoly na bezpečný přenos, autentikaci a digitální podpisy. Vymyslíme dokonce, jak si hodit korunou po telefonu, a také předvedeme nerozluštitelnou šifru a dokonce to o ní dokážeme. Podíváme se, jak fungují praktické protokoly a k čemu jsou všechny ty certifikáty.

Principy počítačů ("A opravdu uvnitř počítače běhají malí trpaslíci?") [HW]
Filip Štědronský

Ukážeme si proč programy fungují tak, jak jsme zvyklí. Co umí procesor, co dělá paměť a jak se to dá k něčemu použít. Ukážeme si nějaký program v Céčku a v Asembleru a koukneme se, kolik toho řeší Python za nás. Co dělá operační systém, jak je třeba možné, že na jednom procesoru běží najednou několik procesů. Ukážeme si, že počítače jsou překvapivě hloupá stvoření, co umí jenom základní počty, ale na programování nám to stačí.

Úvod do Linuxu [LNX]
Filip Štědronský

Úvodní povídání o operačním systému Linux a ekosystému kolem něj... Představíme si jeho zajímavé vlastnosti jak z pohledu uživatele (obrovskou přizpůsobitelnost na míru konkrétním potřebám, otevřenost a průhlednost – je snadné vidět systému „pod ruce“ a chápat, co se v něm děje), tak z pohledu návrhu a architektury (proč je systém skládající se ze spousty malých a jednoduchých kousků v mnohém lepší než velké monolitické celky). Ukážeme si také, jak zautomatizovat nudné každodení činnosti pomocí skriptování v shellu a dalších nástrojů.

Mikrokontroléry ("Nejlepší debugger je LEDka.") [MCU]
Filip Štědronský

Srdcem mnoha dnešních technických hraček je mikrokontrolér. To je čip, na kterém je integrovaný nejen procesor, ale i paměť a spousta zajímavých periferií. Ukážeme si, jak se mikrokontroléry programují, jaké periferie typicky obsahují a jak je používat ke komunikaci s okolním světem. Něco si vyzkoušíme i prakticky na STM32. Podle možností rozešleme zájemcům před soustředěním mikrokontroléry, na kterých si můžou sami něco zkoušet a/nebo bude možnost si vyzkoušet svůj program vzdáleně.

Předpoklady: Hodí se základní znalost jazyka C.
(Kliknutím na název přednášky zobrazíte její detail)

Ostatní

Hesla ("Byl tam dolar, nebo ampersand?") [PASS]
David Klement

Kdo si má všechna ta hesla pamatovat? A ještě po mně chcete, abych je měnil každý měsíc? Hesla jsou dnes potřeba skoro všude, většině lidí však působí jen problémy. Povíme si, jak vylepšit své zabezpečení bez nutnosti pamatovat si desítky různých hesel. Většinu odvodíme na základě toho, jak se hesla ukládají na serverech a jak se prolamují. Nakonec ještě zmíníme jiné způsoby přihlašování, které hesla v mnohém překonávají.

Design Thinking ("Tvoříme abychom tvořili, nebo aby to někdo používal?") [DeTh]
Vašek Šraier

Jsme v pozici dodavatele softwaru. Přijde za námi ředitel řetězce supermarketů s požadavkem, že systém na pokladnách není dostatečně efektivní a že by ho chtěl zrychlit. Co budeme dělat? Můžeme si systém proklikat a hledat problémy s uživatelským interfacem. Můžeme začít spouštět systém pod profilerem a hledat výkonnostní problémy. Nebo můžeme dojít na opravdovou prodejnu, dívat se nějakou dobu odbavování zákazníků a promluvit si s různými lidmi. Jako řešení pak koupit pokladním rukavice, protože se zmrzlými prsty dělají na dotykových obrazovkách spoustu chyb. Design Thinking je metodologie na obecné řešení kreativních problémů vytvořená na Stanfordu, aktivně používaná například v Googlu. Na tomto workshopu si ji ukážeme a dokonce i prakticky vyzkoušíme. Zapnutá kamera nutností.

Sdílení pracovních zkušeností ("Pracuješ vedle školy? Nebo chceš? Pojď si o tom popovídat!") [wrk]
Vašek Šraier, Jirka Setnička

Společná diskuse na téma práce při škole. Pracuješ? Pojď s námi sdílet své zkušenosti. Nepracuješ a chceš? Čeho se obáváš? Probereme témata jako hledání práce, psaní životopisu nebo třeba první pohovor a otázku výdělku. Nepůjde o klasickou přednášku, spíše o řízenou diskusi. Zapnutá kamera nutností.

Jak nakreslit mrak ("The Cloud musí mít každý!") [volcloud]
Kuba Pelc

V seriálu o shaderech jsme kreslili pevné objekty. Jak ale nakreslit něco, co nemá žádný povrch? Krok po kroku projdeme, jak se něco takového programuje. A vy si to do předem připravené kostry naprogramujete taky. Ideálně byste měli znát shadery na úrovni cca 4. dílu letošního seriálu. Pokud jste seriál neřešili, ale znáte nějakou analytickou geometrii (k čemu je skalární součin?) a libovolný céčkovský jazyk, také byste se měli chytat.

Vykreslování ve hrách ("Chceme snímky za sekundu, ne sekundy za snímek!") [3DENG]
Kuba Pelc

Praktický pohled do vnitřností vykreslování herních enginů. Jak se to dělá, aby světla svítila, věci se leskly, aby v lese byly temné stíny a proč je to všechno naprosto špatně. Co znamenají různé obskurní zkratky v grafickém nastavení jako SSAO nebo TAA. Co všechno umí grafické karty a jak se toho využívá při optimalizaci her. Co je to raytracing a proč je tak skvělý. Co jsou to textury, meshe, shadery a jiné potvůrky, se kterými se setkáte i třeba v Unity nebo Unrealu. Jaké je to něco takového si sám napsat. A kdo ví, možná nějaký ten engine i za živa rozpitváme...

Handsfree programování ("No keyboard found. Say F11 to continue.") [HANDSFREE]
Ríša Hladík

Ať už vás po dni plném programování trochu bolí ruce, nebo je zrovna máte obě v sádře, nemusíte hned házet flintu do žita. Ukážeme si, jak ovládat počítač pomocí hlasu, pohledu, mlaskání a dalších netradičních vstupních metod. Povíme si, jak bez rukou brouzdat na internetu, třídit maily, programovat nebo dokonce hrát hry. Nahlédneme, že hláskovat program po znacích není zdaleka ten nejefektivnější způsob, a že s trochou cviku a lenosti můžeme občas dokonce být rychlejší bez klávesnice než s ní. To všechno doprovázené ukázkami programu Talon, který nejen, že umí všechno tohle, ale ještě navíc si v něm člověk může doprogramovat v podstatě cokoliv dalšího. Na závěr si povíme něco málo o tom, jak Talon funguje vevnitř a ukážeme si, že dosáhnout lepší přesnosti než Google není zase až tak těžké, když tušíme, co můžeme od uživatele čekat.

Čárové kódy ("Jak naučit počítače číst láhve od Coly") [BAR]
Martin Mareš

Čárové kódy dnes potkáváme na každém kroku, ale jak doopravdy fungují? Prozkoumáme klasické jednorozměrné kódy (UPC, EAN, Code39, Code128), jakož i novější dvojrozměrné (QR, Aztec, DataMatrix). Kódovací a dekódovací algoritmy plus trocha matematiky okolo zabezpečení proti chybám. Další počítačem čitelné značky: RFID, bíle křížky na asfaltu, ...

Textový editor Vim ("Víš, jaký je nejlepší textový editor? Vim.") [VIM]
Martin Mareš

Odložme na chvíli své myše a pojďme si vyzkoušet textový editor, který umí poslouchat na slovo. Pravda, budeme se ta slova muset chvíli učit, ale výsledek bude proklatě efektivní. Základní příkazy, práce s regulárními výrazy, makra, kouzla. Vimovité ovládání jiných programů, třeba webového prohlížeče.

Úvod do robotiky ("Beep. Boop.") [ROBOT]
Tomáš Sláma

Na robotovi Vex V5 si ukážeme základní principy a algoritmy autonomního ovládání (bang-bang, dead reckoning, PID) a orientace robota v prostoru (odhad přes enkódery a gyroskop). Robota budeme programovat přes online editor v Pythonu, aby se na jeho ovládání mohl podílet každý účastník.

Praktický úvod do Jekyllu [JEKYLL]
Tomáš Sláma

Chtěl sis někdy vytvořit vlastní webovou stránku, ale ručně psát HTML a CSS tě otravuje? Zajímalo by tě, jak z Markdownu generovat pěkně vypadající, databázemi a jinou havětí nezatížené webové stránky? Ukážeme si, jak si pomocí Jekyllu vytvořit, spravovat a v neposlední řadě také publikovat webovou stránku.

Animace s Manimem a kamarády ("Znáte 3b1b?") [MANIM]
Tomáš Sláma

Naučíme se vytvářet profesionálně vypadající animace (převážně o matematice a informatice) programaticky, s použitím knihovny Manim v Pythonu. Částečně také nahlédneme i do zdrojového kódu knihovny a ukážeme si, jak i vy můžete pomoci v jejím vývoji!

Rozbalit všechny přednášky