Úč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
Základní přednášky
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ší.
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ě.
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í 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.
Algoritmy a datové struktury
Č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ý 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.
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.
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.
Programovací jazyky a techniky
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.
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.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 hardwaruProgramy 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Č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.
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.HW, OS, sítě a další technikálie
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 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.
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čí.
Ú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ů.
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.Ostatní
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í.
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í.
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í.
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.
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...
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 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, ...
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.
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.
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.
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!