Seznam přednášek aneb Karolínka
PřihlásitMůžete si také stáhnout PDF verzi.
Milý účastníku jarního soustředění KSP, máš možnost vybrat si přednášky předem, aby se organizátoři mohli pořádně připravit již před soustředěním a přednášky byly co nejkvalitnější.
Přednášky jsou rozděleny do několika kategorií. Každé kategorii přednášek budou vyhrazeny nějaké přednáškové sloty a v každé kategorii se tedy hlasuje nezávisle na ostatních.
Po vyplnění přihlášky na soustředění (a případně přihlášení k účtu, pokud mezitím došlo k odhlášení) můžeš každé přednášce přiřadit 0 až 100 bodů a tím si ji vybrat. Body jsou kladná celá čísla nebo 0 a jejich součet přes všechny přednášky v kategorii musí být menší nebo roven 100. Doporučujeme nevyplýtvat vše na pár přednášek (či dokonce jednu).
Hlasování končí ve středu 22. 3. ve 24:00, takže hlasování prosím neodkládej. Na samotném soustředění další hlasování o přednáškách již nebude. Pokud se Tvá oblíbená přednáška nedostane do výběru nebo budeš chtít slyšet o něčem jiném, můžeš zkusit na soustředění přemluvit k přednášení někoho z organizátorů.
- Základní přednášky
- Pokročilé přednášky
- Půlnoční přednášky
Základní přednášky
Mezi těmito přednáškami jsou věci, které by měl každý začínající programátor umět. Bez pochopení většiny věcí přednášených na těchto přednáškách se budete na pokročilých přednáškách, které na ně navazují, jen obtížně chytat. Doporučujeme proto nejdříve zvládnout tyto přednášky a osvěžit si nějaký základní programovací jazyk, než se pustíte do pokročilejších věcí.
Úvodní trojdílná přednáška pro ty, kteří mají s programováním jen malé, nebo dokonce žádné zkušenosti. Vysvětlíme si od základů problematiku programování, jako je zápis cyklů, podmínek a funkcí, ukážeme si základní datové typy (n-tice, seznamy, slovníky), datové struktury (fronta, zásobník) a zkusíme si prakticky naprogramovat několik základních algoritmů. Vše se bude ukazovat hlavně na jazyku Python, který je jednoduchý na naučení a přesto zároveň velmi mocný. Jednotlivé přednášky se budou prolínat s přednáškami ZALG.
Základní vícedílný kurz algoritmů a datových struktur, který se bude prolínat se ZAKL. Jak poznat, který algoritmus je efektivnější? Přehled základních algoritmů. Co je to datová struktura a několik jejích ukázek. Vše si procvičíme na příkladech.
Spousta algoritmických problémů se dá popsat pomocí teorie grafů. Ukážeme si její základy: co je to graf, jak se dá v programu reprezentovat a k čemu se dá použít. Naučíme se hledat nejkratší cestu v bludišti nebo na mapě.
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.
Základní programovací jazyky a techniky
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 Pythonu pro ty, kteří již umí programovat v jiném jazyce. V čem se liší od ostatních jazyků a proč se v něm píše tak snadno. Proč se překládá až při spuštění, jaké výhody a jaké nevýhody to s sebou nese. Letmý úvod do balíčků aneb skoro všechno již někdo napsal za nás.
Pokročilé přednášky
Tyto přednášky by měly jednak dále rozvíjet znalosti ze základních přednášek, ale také nabízet další zajímavé programátorské techniky a technologie, které se mohou každodenně hodit.
Algoritmizace
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, jejich použití si ukážeme na úlohách. Dáme se můžeme zabívat tím, jak je upravovat, aby toho zvládly ještě víc.
Někdy potřebujeme najít podřetězec ve velkém množství textu. Jak to udělat co nejrychleji? K tomu se nám budou hodit vyhledávací automaty, například Knuthův-Morrisův-Prattův algoritmus. Od toho dojdeme k dalším algoritmům na zpracování textu.
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.
V rámci této přednášky se budeme zabývat problémy tak těžkými, že nikdo na světě pro ně neumí vymyslet efektivní (rozuměj polynomiální) algoritmus. Spousta lidí dokonce věří, že to vůbec možné není. Abychom mezi tyto problémy pronikli, seznámíme se s pojmy NP-úplnosti a NP-těžkosti. Především si však konkrétní těžké úlohy ukážeme a naučíme se i některé těžké úlohy rozpoznat. Závěrem si řekneme, jak se s těžkými úlohami vypořádat v praxi.
Spousta algoritmů je mnohem rychlejší, než jak na první pohled vypadají. Šikovný způsob, jak takové chování zkoumat, je amortizovaná časová složitost. Předvedeme několik trochu překvapivých příkladů amortizace: dvojková a jiná počitadla, datové struktury založené na přebudovávání, vyhledávací stromy bez otravného vyvažování, dynamizace datových struktur, udržování historie.
Další programovací jazyky a techniky
Představíme si SQL, jazyk databází. Ukážeme si základní příkazy i práci o kus složitější. Jak databázi dát data a jak se na ně potom ptát. K čemu se hodí složený dotaz a klíčové slovo JOIN. Jak si data skupinkovat pomocí GROUP. Co jsou to vlastně ty transakce když mluvíme o databázích a proč je používat.
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.
Jak vypadá víceprocesorový či vícejádrový počítač a co to znamená pro programátora? Procesy, vlákna a úskalí komunikace mezi nimi aneb jak se stejným kusem paměti může pracovat více procesů. 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 hardwaruPočítače, sítě, systémy
Co se děje za oponou, když do prohlížeče zadáte adresu svých oblíbených stránek? A jak si takovou stránku taky pořídit? Přelet nad protokolem HTTP, seznámení s HTML a předvedení kaskádových stylů. Jak fungují dynamické stránky a jaký je rozdíl v tom, jestli něco běží na serveru nebo v prohlížeči.
Jak funguje Internet a počítačové sítě vůbec: od elektronů v drátech (fotonů v optických kabelech nebo elektromagnetických vln) přes komunikaci na jedné malé síti až ke komunikaci v celém Internetu. Vysvětlíme si rámce, pakety, MAC a IP adresy, routování v malých i ve velkých sítích. Jak to reálně funguje s IPv4 a NATem, co to jsou porty a jak se od sebe liší TCP a UDP. A na závěr radosti a strasti IPv6 (až ho konečně zavedeme).
Volné navázání na NET aneb máme fungující síť a chceme nad ní provozovat složitější komunikaci. ICMP aneb servisní protokol Internetu, DNS a překlad doménových jmen, jednoduché textové protokoly jako je FTP, SMTP, IMAP nebo nejpoužívanější webové HTTP, kterého se zastavíme trochu déle – hlavičky, návratové kódy, cookie, více domén na stejné IP adrese. A pokud zbude čas, využijeme zranitelnosti některých protokolů a provedeme síťový útok.
Předpoklady: Základní povědomí o počítačových sítích v rozsahu NETOperační systém Linux si původně vyrobili programátoři pro sebe, a dodnes to na něm je vidět. Nenabízí tolik uživatelského pozlátka, ale dá se s ním pracovat mnohem efektivněji. Pojďme ho trochu prozkoumat. Zjistíme, že je to stavebnice složená ze spousty malých kousků, které dělají jednoduché věci a dají se kombinovat. Ovládají se pomocí příkazů, což byvá často rychlejší než klikátka. Také můžete mít svůj systém pod kontrolou a přesně vědět, co se děje uvnitř.
Jak vytvořit jednoduchý Linuxový server, který poskytuje služby vaší domácnosti, nebo třeba nějaké větší síti. Co se tam hodí provozovat? Povíme o SSH, kličích, šifrování, systemd, Apache a Nginxu, nastavení mailového serveru i DNS. Jak server zabezpečit před útočníky, jak před ztrátou dat a jak před uklízečkou. Vše si vyzkoušíme prakticky, třeba na virtuálním počitači.
Předpoklady: Základní znalost Linuxu.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.
Předpoklady: Hodí se základní znalost jazyka C.Vývoj software
Když se něco vyvíjí delší dobu, přijde vhod nějaký nástroj, který by uměl zjistit kdo co přidal a proč, uměl by se vrátit k předchozí verzi nebo třeba vrátit jenom jednu změnu, co udělal kamarád před rokem. Na jeden takový, Git, se podíváme. Povíme si, jak Git ukládá změny, co jsou commity, větve, tagy a jak vypadá merge mezi větvemi. Nakonec možná předvedeme i nějaké užitečné triky: třeba hledání bugů půlením historie.
Výroba software není zdaleka jenom o programování. Pokud chceme vyvíjet větší kus softwaru ve více lidech, pojí se s tím spoustu věcí – verzování, merge requesty, code review, testování a mnoho dalšího. Ukážeme si, jak může vypadat vývoj něčeho většího (ať už je to zadání KSPčka nebo třeba software pro tisíce serverů) a jaké zvyky je dobré si vypěstovat (a jaké ne). Povíme si o různých způsobech testování, o tom, jak udržet v kódu pořádek, a o dalších nástrojích, které pomáhají vyvíjet kvalitní software.
Návrh uživatelského rozhraní není jen o vzhledu, ale i o tom, jak navrhnout aplikaci, která bude užitečná, efektivní a použitelná. A nejenom aplikaci, ale třeba i tlačítka na přivolání výtahu. A že to přece není nic složitého? Ukážeme si pár případů špatného návrhu uživatelského rozhraní, pár příkladů těch dobrých, a pak se sami vrhneme na návrh - stránky na převod měn, mechanické injekční stříkačky pro nemocnice... - a prodiskutujeme si spolu, co je na nich dobře a co špatně. A možná trochu zabrousíme i do Figmy - takového užitečného a docela jednoduchého nástroje pro návrh rozhraní.
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.
Aplikace informatiky a matematiky
Donald E. Knuth napsal TeX před desítkami let proto, že mu nikdo nebyl schopen vysázet matematický text podle jeho požadavků. Od té doby se hojně používá pro sazbu nejrůznějších publikací. V této spíše praktické přednášce si ukážeme použití TeXu od hladké sazby knihy až po zběsilosti hraničící s programováním. Pozornost věnujeme i zdrojům informací a rozdílům mezi různými dialekty TeXu.
Píšete seminárku či řešení KSP a chcete, aby výsledek vypadal k světu? TeX je pro vás příliš složitý? Pak sáhněte po LaTeXu. Ukážeme si, jak málo stačí k tomu, abychom zvládli vysázet hezký dokument.
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.
Čá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, ...
Prakticky si ukážeme jak v Pythonu použít algoritmy, které z příkladů samy nějak usoudí co mají dělat. Na co si dát při jejich používání pozor, co si od nich můžete slibovat a na co se tento přístup (ne)hodí. Pro představu se podíváme jak některé tyto algoritmy fungují.
Základy neuronových sítí: od biologického neuronu a jeho modelu – perceptronu, přes algoritmus back propagation, až po hluboké a konvoluční sítě a jejich použití na rozpoznávání obrázků.
Jak se vyhnout překlepům? Jak zkontrolovat dlouhý dokument za zlomek sekundy? A jak se vypořádat s češtinou, která skloňuje a časuje? Představíme si program Hunspell, který umožňuje kontrolu pravopisu v libovolném jazyce a stačí mu k tomu překvapivě málo. Ukážeme si, jak do něj přidat svá vlastní slova, a následně se podíváme, jak funguje pod pokličkou.
O světě jde sehnat spousta zajímavých dat ve strojově zpracovatelné podobě: obce a domy v nich, linky hromadné dopravy, katalogy hvězd, slova v češtině, katalog pokémonů, ... Pojďme se podívat, jak s daty zacházet. Naučíme se číst různé formáty dat od CSV až po XML, data zkoumat, filtrovat a kreslit podle nich pěkné grafy. Vyzkoušíme si prakticky v Pythonu. Předvedu své oblíbené nástroje, pojďte ostatním předvést ty své.
Povídání o tom, jak programovat počítačové soupeře do šachů a her jim podobným. Základní minimaxový algoritmus a jeho vylepšení neboli α-β ořezávání. Stále pomalé? Několik nápadů na efektivnější ořezávání. Ne u všech her však funguje hrubá síla (minimax) dobře, ukážeme si tedy, jak hru zanalyzovat.
Matematické přednášky
Teorie grafů trochu teoretičtěji. Různé druhy grafů a jejich vlastnosti. Stromy a lesy. Kreslení grafů jedním tahem. Princip sudosti a skóre grafu. Jaké speciální vlastnosti mají rovinné grafy a jak je lze obarvit šesti nebo možná i pěti barvami. Jak poznat, že dva grafy (ne)jsou isomorfní. Mosty, artikulace a ušaté lemma. Párování, střídavé cesty a Hallova věta.
Pokusíme se vybudovat kombinatoriku intuitivně. Co nejvíce se vyhneme počítání se vzorci, vystačíme si s elegantními úvahami. Kromě základních technik si ukážeme, jak nám mohou pomoci rekurence a jak se úlohy dají převádět mezi sebou. Procvičíme na spoustě příkladů.
V rychlosti si zavedeme derivace a integrály a následně si ukážeme, k čemu všemu se hodí. Hledání minima funkce, kleslení hladkých křivek, aproximace. Výpočet délky spirály nebo objemu roztodivných těles. Využití ve fyzice: pohyb s odporem vzduchu, zamrzání ledu na rybníce a mnoho dalšího.
Podíváme se, čím se to ta lineární algebra vlastně zabývá. Řekneme si, co jsou matice, jak se s nimi počítá a k čemu jsou dobré. Seznámíme se s pojmy jako těleso, vektor a vektorový prostor, představíme si jejich zajímavé vlastnosti a uvedeme je do různých souvislostí.
Což takhle projednou neříkat počítači, jak má věci počítat, ale jenom mu zadat podmínky, které má výsledek splňovat? Neprocedurální programování vychází přesně z této myšlenky. Podíváme se na programovací jazyk Prolog, který vychází z formální logiky. Zjistíme, které problémy se v něm neobyčejně zjednoduší a které naopak programování promění v noční můru. Pokud jsi milovník rekurze, budeš u této přednášky nejspíš skoro celou dobu spokojeně vrnět.
Objektově orientované programování přináší jiný náhled na návrh řešení problémů. Vysvětlíme, jak se liší objektové a procedurální programování. Co je to objekt a co třída. Základní vlastnosti objektů (dědičnost, zabalení, polymorfismus). Co je to metoda, překrývání metod, virtuální metody (pozdní vazba) a čistě virtuální (abstraktní) metody. Jak se liší OOP ve statických (C++, C#, Java) a dynamických (Python) jazycích. Jak programovat objektově i bez podpory jazyka, třeba v Céčku.
Předpoklady: Znalosti procedurálního programování, například v Pascalu, v Pythonu nebo v C.O jazycích přirozených, počítačových a matematických, jejich popisu a rozpoznávání. Začneme těmi nejjednoduššími: regulární jazyky a výrazy, konečné deterministické a nedeterministické automaty. Pak budeme stoupat po příčkách Chomského hierarchie, kam až to půjde. Jak výpočetně silný je třeba takový automat na kafe?
Zadefinujeme si, co je to informace, jak jí můžeme měřit a jaké to má důsledky. Z počátku se prokoušeme pravděpodobností, řekneme si, co je to entropie a jak souvisí s bitem informace. Následně si povíme, co je to kód a jak nejlépe můžeme zakódovat informaci. Vysvětlíme si Huffmannovo kódování a, pokud zbude čas, i aritmetický kód a Ziv-Lempelův rekurenční kód.
Řekneme si, čím se zabývá teorie čísel a vysvětlíme si její nejznámější aplikaci, RSA. Vybudujeme teorii kolem dělitelnosti, řekneme si základní větu aritmetiky, vysvětlíme si Eukleidův algoritmus, Bézoutovu rovnost, Eulerovu funkci a důležité vlastnosti prvočísel. Když budeme znát všechny tyto pojmy, můžeme se pustit do vysvětlení, proč vlastně RSA funguje. Na závěr si řekneme slabiny RSA a proč už se dneska přestává používat.
Půlnoční přednášky
Aneb přednášky přednášené (nejen) o půlnoci na různá zajímavá témata nejen o informatice. Pokud nějaká z nich nebude oficiálně vypsaná, je možné si konkrétního organizátora ve volné chvíli chytit a přesvědčit ho k přednášení.
Převážně nevážné a mírně nepřed-vídatelné po-vídání o jazyku i jazyce. Základní jazykové rodiny a jejich podobnosti i odlišnosti. Co má společného čínština s angličtinou a co nikoliv. Jak se jazyky vyvíjejí a jak se navzájem ovlivňují. Kde jsme přišli k pravidlům a jaký je jejich smysl. Existují synonyma? Proč je jazyk nejednoznačný a proč je to dobře. Jak se na jazyk dívá matematik a jak se na matematiku dívají lingvisté. Jak vzniklo písmo? A jak otazník? Jak zapsat zachrochtání a jak třeba mlasknutí &c.
GPS je vstutku magická technologie, a ačkoli se to nezdá, využívá jedny z nejdůležitějších výsledků moderní vědy. Vysvětlíme si, na jakém pricipu GPS funguje, a proč by to jinak nešlo.
Základoškolský přístup „množina je kupříkladu miska jablíček“ nabízí spoustu otázek: Když jablíčka přesuneme do sáčku, bude to stále tatáž množina? A co když kousek jablíčka ukousneme? V rámci této přednášky se pokusíme o vybudování teorie množin od základů (rozuměj axiomů) a to v duchu Zermelo-Fraenkelovském. Pak uvidíme, jak na teorii množin vystavět zbytek matematiky.
Jak na počítači text nejen napsat, ale také vysázet tak, aby pěkně vypadal a aby (což je důležitější) se i příjemně četl. Jak se sází pohádka, jak báseň a jak vzorové řešení KSP plné komplikovaných vzorců. Jak jde dohromady staleté umění typografické a moderní technika. Přineste knihy i letáky, zkritizujeme sazeče, co se do nich vejde.
Pojďme usednout k šálku lahodného čaje a povídat si o tom, co se v něm skrývá. Kde se čaj vzal, kde se pěstuje, jak se zpracovává a jak ho připravovat. Trocha čajového zeměpisu, dějepisu i čajové chemie a čajové kultury. Též o všelijakých substancích čaji podobných.