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.
(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