Podzimní soustředění KSP 2006

Seznam přednášek

Tento spisek jest nabídkou přednášek, které byste na soustředění mohli slyšet, čili jakási obdoba matfyzácké Karolínky (ta je ale, pravda, ještě stále o něco tlustší). Přednášek je daleko víc, než kolik se dá za týden stihnout, a tak je na vás, abyste si vybrali, o které máte opravdu zájem; pokud byste rádi slyšeli ještě o něčem dalším, klidně to k přednáškám připište, třeba se najde někdo, kdo by vám o tom rád pověděl. Berte a vychutnávejte!

Údaje o jedné přednášce vypadají asi takto:

Stručný úvod do základů teorie vlkodlaků ("Za dne ukryt v hloubi lesa, děs temný zvečera se plazí...") [V023]
RNDr. Á. Cula

Úvod do moderní teorie vlkodlaků, čili též praktická dæmonologie a naiadologie.

Předpoklady: Měsíc v úplňku.

Dozvíte se (čteno v obvyklém pořadí): kód předmětu (pro snadnější odkazování na konkrétní předměty; první písmenko značí obor), jméno přednášky, hvězdičky značící obtížnost (žádné pro velmi jednoduchou přednášku až dvě pro dosti náročnou), v uvozovkách motto přednášky; dále pak jméno přednášejícího, stručný obsah přednášky (na detaily se můžete ptát e-mailem nebo na místě) a speciální předpoklady nutné k účasti na přednášce (nutnost o něčem něco vědět, ale lze i jinak).

Informatické přednášky – teoretické

Algoritmy a jejich složitost [I000]

Problém, algoritmus a program. Časová a paměťová složitost problémů i algoritmů. Složitost rekurzivních algoritmů, složitost v průměrném případě.

Složitější složitost [I001]

Trochu hlouběji o složitosti: amortizovaná časová složitost, dolní odhady, nedeterministické výpočty a třída NP, NP-úplné problémy a příklady redukcí.

Předpoklady: I000
Třídy složitosti [I002]
Martin Mareš, Tomáš Valla

Složitost opravdu důkladně: nejrůznější složitostní třídy a vztahy mezi nimi. Vztahy mezi časem a prostorem, odstraňování nedeterminismu a Savitchova věta. Jak víme, že všechny třídy nejsou stejné: dolní odhady a věty o hierarchii. Stroje s kvantifikátory, třída PSPACE a polynomiální hierarchie. Pravděpodobnostní třídy složitosti. Orákula a neuniformní složitost.

Předpoklady: I001
Vyčíslitelnost ("S Halting problemem na věčné časy a ani o minutu déle!") [I003]
Martin Mareš, Tomáš Valla

Některé problémy se dají vyřešit snadno, jiné obtížněji a některé dokonce vůbec. Obecněji: Ať si vymyslíte jakýkoliv rozumný programovací jazyk, vždycky existuje problém, který se v něm nedá vyřešit. Výpočetní modely a univerzální stroje, rekurzivně spočetné a rekurzivní množiny a funkce. Halting problem a diagonální důkazy. O krok výš aneb orákula a relativní vyčíslitelnost, o krok níž aneb primitivně rekurzivní funkce.

Grafy & algoritmy I ("Pojďme si hrát s obrázky") [I004]

Co to jsou grafy, jak je v programech reprezentovat a hlavně k čemu se dají použít. Prohledávání grafu do šířky i do hloubky. Hledání nejkratších cest: Dijkstrův a Floydův algoritmus. Union-find problem, hledání minimální kostry, topologické třídění grafů a kreslení grafů jedním tahem.

Grafy & algoritmy II [I005]

Pokročilejší grafové algoritmy: toky v sítích, párování v grafech, testování vícenásobné souvislosti a silné souvislosti.

Předpoklady: I004
Matice a grafy ("Já pán, ty pán, ale kdo má graf v matici, je ještě větší pán.") [I006]
Milan Straka, Martin Mareš

Má smysl reprezentovat graf maticí? Co vlastně jsou matice a jak se násobí? Jak nejrychleji umíme matice násobit a jak souvisí násobení matic s hledáním sledů v grafu? Proč funguje Floyd-Warshallův algoritmus a jak ho zobecnit, aby počítal jiné věci, třeba nejspolehlivějí sled? Nebo aby z konečného automatu vytvořil regulární výraz? A proč je tu tolik otázek? Nevíte?

Datové struktury pro začátečníky [I007]

Jak si ukládat data natolik šikovně, abychom je nejen neztratili, ale také našli dříve, než si pro nás přijde Smrť. Klasické struktury jako pole, seznamy, vyhledávací stromy (vyvážené, AVL, a-b, červeno-černé), haldy (binární a obecně regulární) a v neposlední řadě hashování.

Datové struktury pro pokročilé [I008]

Důmyslnější datové struktury: trie, intervalové stromy, splay stromy, BB-α stromy; geometrické struktury pro lokalizaci bodů v rovině; binomiální a Fibonacciho haldy, leftist haldy a 2-3 haldy. Též několik přátelských randomizovaných datových struktur: skip listy a treapy.

Datové struktury pro šílence [I009]
Martin Mareš, Tomáš Valla

Ještě důmyslnější datové struktury dle přání posluchačů. Možno servírovat například: dynamické reprezentace grafů (Sleator-Tarjanovy stromy, ET-stromy, Fredericksonovy topologické stromy), vícerozměrné datové struktury (zobecnění vyhledávacích stromů a intervalových stromů), obecné dynamizační schéma, triky pro malé integery, persistentní datové struktury et cetera.

Algoritmy (bez grafů) ("nevšední algoritmy všedního dne") [I010]
Martin Mareš

Na motivy knížky The Art of Computer Programming od prof. Knutha si předvedeme několik nevšedních, zato však velmi elegantních algoritmů: hledání největších společných dělitelů bez dělení, násobení dlouhých čísel v čase O(n1.59) a možná i rychleji, residuovou aritmetiku, slévání setříděných posloupností v konstantním prostoru, pravděpodobnostní testování prvočíselnosti a jiné kejkle.

Vyhledávací a třídící algoritmy ("Dnes sa zbavím bublifuku!") [I011]
Tomáš Gavenčiak, Petr Škoda, Martin Kruliš, Milan Straka

Základní třídící algoritmy, které se vyplatí znát: quicksort, mergesort, heapsort, radixsort a také něco na velké soubory – vnější třídění. Vyhledávání v polích: půlení intervalu, hledání mediánu resp. k-tého největšího prvku v lineárním čase.

Hledání v textu ("`Vyšívajme v senníku!' – kde jsem to jen viděl?") [I012]
Martin Mareš, Martin Kruliš, Milan Straka

Vyhledávání čehokoliv ve velkém množství textu: Prostá vylepšení brute-force algoritmů: Karp-Rabin, Boyer-Moore. A algoritmy chytřejší: Morris-Pratt, Knuth-Morris-Pratt, Aho-McCorasicková. Konečné automaty prakticky, regulární a „regulární“ výrazy.

Stringové algoritmy ("Co se nedá spočítat v lineárním čase, nestojí za to.") [I013]
Martin Mareš

Předvedeme všeliké algoritmy na zpracování řetězců, které mají (mimo jiné) společné to, že pracují v lineárním čase: třídění za pomoci kyblíčků, vyhledávání podřetězců v textu (Boyer-Moore, trie, Knuth-Morris-Pratt, Aho-McCorasicková), konstrukce suffixových stromů (aneb jak obrátit řetězec naruby) a jejich použití, nejdelší společné podřetězce a třeba i Burrows-Wheelerova transformace.

Komprese dat ("Jnm idln kpln j nstlčtln.") [I014]
Milan Straka, Martin Mareš

Přehled základních kompresních algoritmů: triviální algoritmy (RLE), statistické metody (Huffmanovo a aritmetické kódování), slovníková komprese (LZ77, LZ78, LZW), Burrows-Wheelerova transformace (BZIP). Pokud zbude čas, tak i něco o ztrátové kompresi obrázků a zvuku (prediktory, wavelets, JPEG, MPEG, fraktály).

Aproximační algoritmy ("Součet úhlů v trojúhelníku je vždycky tři ... tedy alespoň ± 5%") [I015]
Martin Mareš, Tomáš Valla

Některé úlohy jsou tak těžké, že je za dobu existence tohoto vesmíru nedokážeme vyřešit (naneštěstí to zatím o většině takových úloh ani nesvedeme dokázat). A tak nám nezbývá než se je pokusit řešit alespoň přibližně. Horolezecké algoritmy, metoda Monte Carlo, simulované žíhání a hit loňské sezóny – genetické algoritmy. Ovšem raději bychom chtěli znát dopředu odhad chyby: aproximační algoritmy a aproximační schémata. Ne vše se aproximovat dá, ale to už přenecháme na I021.

Pravděpodobnost a algoritmy ("Nejen že Bůh hraje v kostky, ale ještě při tom občas švindluje!") [I016]
Martin Mareš, Milan Straka

K čemu jsou při programování dobrá náhodná čísla a jak je generovat. Algoritmy pravděpodobnostní a randomizované, časová složitost v průměrném případě. Proč používat a proč nepoužívat Quicksort. Inkrementální algoritmy (třeba na konvexní obal), vyhledávání v poli v konstantním čase za pomoci hashování, konstrukce perfektního hashování, randomizované datové struktury (skip listy a treapy). Interaktivní protokoly aneb jak vyhrát nad falešným hráčem. Problém studny na Pražském hradě. Míchání karet.

Předpoklady: Vědět, co je to pravděpodobnost (M001), a být ochoten trochu počítat.
Paralelní výpočty ("Největším nepřítelem lidstva je trojrozměrný prostor.") [I017]
Martin Mareš, Tomáš Valla

Když nestihne problém vyřešit jeden procesor, proč jich nepoužít víc? Zkusme na chvíli zavřít oči a představit si, že máme stroj, který umí například pro sečtení N čísel zapnout N procesorů ... nebo rovnou N2, všechny se společnou pamětí a společným programem – teoretikové takovému počítači říkají PRAM. Ukážeme si rychlé paralelní algoritmy všeho druhu: aritmetiku, slévání a třídění, grafové algoritmy, vše v (poly)logaritmickém nebo dokonce konstantním čase. Po probuzení do reality všedního dne trocha praxe: SMP, NUMA, Connection Machine, clustery, koordinované screen savery, FPGA.

Kryptologie ("Gbgb arav zbp gnwan mcenin.") [I018]
Martin Mareš, Milan Straka

Vše, co jste chtěli vědět o šifrování a báli se vám na to odpovědět. Šifrovací systémy jako lego: základními kostičkami nám budou symetrické a asymetrické šifry a jednosměrné funkce, stavět z nich budeme kryptografické protokoly na bezpečný přenos, autentikaci, digitální podpisy a třeba i jak si hodit korunou po telefonu. Jak šifru zkonstruovat a jak ji rozluštit. Předvedeme nerozluštitelnou šifru a dokonce to o ní i dokážeme.

Kryptologie II ("6140 a184 c9a6 41f1 de99 e733 354a f451") [I019]
Martin Mareš

Pokročilejší (dešifruj: zběsilejší) partie vědy kryptologické: utajené výpočty, zero-knowledge proofs, sdílení tajemství, podprahové informace a kvantová kryptografie. Aplikace v reálném životě: digitální peníze, volební systémy. Různé metody útoků na šifry a kryptografické protokoly. Problémy distribuce klíčů a proč se jí raději vyhnout (a jak: Diffie-Hellman key agreement, komutativní šifry). Stručný přehled souvisejících partií matematiky a teorie složitosti.

Předpoklady: Základní povědomí o šifrování (I018) a víra v existenci náhodných čísel
RSA [I020]
Milan Straka

O tom, jak šifrovací algoritmus RSA funguje, proč funguje a jestli bude ještě fungovat. A také jak se dá rozumně rychle naprogramovat.

PCP věta a její důsledky ("Jak kontroluje důkazy líný profesor") [I021]
Martin Mareš

Co všechno lze někomu dokázat, když mu z důkazu smíme ukázat jen 3 bity? Ukážeme, že mnohem víc, než bychom čekali. Jako důsledek pak dostaneme, že některé problémy jsou tak těžké, že je nejde řešit ani přibližně (například nalezení největší kliky v grafu).

Předpoklady: základy algebry (M008), složitosti (I001) a víra, že P≠ NP
Dune snadno a rychle [I022]
Honza Bulánek

Jak si napsat vlastní jednoduchou realtime strategii ve stylu starého Dune. Seznámíte se se základy diskrétní simulace a algoritmem A*, který slouží pro rychlé hledání cest.

Předpoklady: základy OOP a Dijkstrův algoritmus

Informatické přednášky – programovací jazyky a techniky

Programování v jazyce C [I100]
Zbyněk Falt, Milan Straka, Tomáš Gavenčiak

Datové typy jazyka C, programové konstrukce, základy práce s ukazateli v jazyce C. Seznámení se standardními knihovnami jazyka C.

C for wizards ("{ }1[x]+++++x[1]") [I101]
Martin Mareš

Céčkové speciality aneb všechno, co jste chtěli o Céčku vědět, ale nebylo se koho zeptat. Pořadí vyhodnocování, side effecty, sequencing pointy, funkce s proměnným počtem parametrů, preprocesorové triky, celá pravda o vztahu pointerů a polí, o jménech typů a o příkazu switch; alignment, NULL, void, volatile. Všelijaké zrady (velikosti typů, (a+b)+c ≠ a+(b+c), znaménka ...). Dialekty Céčka od K&R až po (staro)nový standard C99 a různá nestandardní rozšíření jazyka. Proč jsou objekty potřebnější v mysli programátorově než v jazyce a proč je C lepší než C++ :–)

Předpoklady: Povšechná znalost jazyka C.
Objektově orientované programování v C++ a Object Pascalu ("I život je objektový, tak proč ne programování...") [I102]
Martin Kruliš, Milan Straka, Tomáš Gavenčiak, Petr Škoda

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. Syntaxe deklarací tříd v C++ a Delphách, viditelnost a přístupová práva ke členům tříd.

Předpoklady: znalosti procedurálního programování v Pascalu a/nebo v C.
C++ pro pokročilé ("Kdo má dobrý vkus, píše v Cé plus plus. Ten, kdo má vkus slabší, tomu céčko stačí.") [I103]
Martin Kruliš

Pokročilé techniky implementace algoritmů v C++. Šablony a jejich použítí, standardní knihovny STL a malý úvod do návrhových vzorů.

Předpoklady: I011
.NET and C# ("Od čeho pochází název CéMříž – vězení?") [I104]
Milan Straka

Spíš povídání o tom, co je to .NET, jak funguje, proč funguje zrovna tak, a k čemu to celé je a není vhodné. Rozebereme používaný mezikód i důvody, proč ho (ne)používat, a vezmeme si na mušku i C#.

Perl ("Jak Pejsek a Kočička vymýšleli programovací jazyk") [I105]
Martin Mareš, Tomáš Valla

Jednoho dne se Larry Wall rozhodl, že nasype do jednoho velkého kotle spousty programovacích jazyků a unixovských utilit, za stálého míchání povaří, posléze přecedí, přikoření a implementuje. Tak vznikl Perl, jazyk původně určený hlavně na zpracování textu, ovšem jak se ukázalo, též šikovný na spoustu dalších věcí. Asociativní pole, libovolně složité datové struktury za pomoci referencí, balíčky a objekty zdarma a hlavně regulární výrazy zde a všude. Zkrátka jazyk, který lze jedině milovat nebo nenávidět, nic mezi tím.

Logické programování ("Detektivem za 90 minut.") [I106]
Jana Kravalová

Proč psát dlouhé a složité programy, když stačí dostatečně přesně popsat situaci a pak se prostě zeptat? Toť princip logického programování, který si ukážeme na Prologu.

LISP ("Lots of Irritating Superfluous Parentheses?") [I107]
Martin Mareš

Lehký úvod do funkcionálního programování a jazyků z lispovské rodiny (Common Lisp, E-Lisp, Scheme, KSP Lisp atd.). Všechno je funkce, zbytek jsou seznamy (a konec konců funkce je také druh seznamu). Proměnné aneb příběh se nemění, jen příjmení a jména. Jak se programuje v Lispu a jak se programuje Lisp.

Předpoklady: Netrpět uncinofobií (((to jest chorobným strachem ze závorek)))
Dynamické programování ("Kampak jsem si to jenom schoval?") [I108]
Tomáš Valla, Petr Škoda, Milan Straka, Honza Bulánek

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.

Jazyk XML a související technologie ("<xml style="vesele"/>") [I109]
Martin Kruliš

Povíme si, co je to jazyk XML, jak vznikl a k čemu je dobrý. Zároveň probereme nástroje pro práci s XML dokumenty, jejich načítání (parsování), generování, validaci atd. Z pokročilejších technik pak ukážeme vyhledávání v XML pomocí jazyka XPath a transformace XML dokumentů pomocí XSLT. Zbyde-li čas ukážeme si i několik konkrétních aplikací (XHTML, WML, SVG, ODF ...).

Databáze a DB systémy ("SELECT * FROM beaverknowledge WHERE code="DB" LIMIT na hoďku a půl") [I110]
Martin Kruliš

Co je to databáze a databázový systém. ER diagramy a jejich převod na tabulky. Klíče, nadklíče, podklíče a paklíče. Normální formy, algoritmus dekompozice a algoritmus syntézy. Jazyk SQL a jeho použití na skutečných databázích. Zbude-li čas, přijde i ukázka relační algebry a doménového a n-ticového kalkulu.

Jak fungují DB systémy uvnitř ("HDD je lednička pro data – když je tam správně uložíte, vydrží déle.") [I111]
Martin Kruliš

Řekneme si, jak fungují současné vnější paměti (především pevné disky) a jak se s nimi pracuje. Protože jsou o hodně pomalejší než operační paměti, je potřeba navrhnout vhodnější datové struktury, které urychlí čtení z takovýchto zařízení. Povíme si o sekvenčních, index-sekvenčních a indexovaných souborech. Navrhneme vhodné způsoby ukládání indexů (B-stromy, hašování). A zbyde-li čas, povíme si i něco o vyhledání podle více klíčů.

Systémy pro správu versí [I112]
Pavel Machek

Jak vyvíjet program delší dobu a nezbláznit se u toho. Něco o tom, jak verse radši nespravovat, a pak dál přes správu ruční pomocí diff a patch, přes CVSku a Subversion až k Archu, Gitu a Mercurialu. Něco o tom, jak udržovat patche proti vyvíjejícímu se mainlinu, a.k.a. quilt. Návod, jak si pořídit zálohu na jiném kontinentě, bude jako perlička na závěr.

Panoptikum Programátorských Projektů [I113]

Přestože prazáklad programování poskytují převážně poznatky přírodovědců, přísluší patřičná pozornost programátorské praxi. Předvedeme proto publiku přednášejícími přímo provozované programátorské projekty.

Portabilní programování ("Šel si program na vandr...") [I114]
Martin Mareš

Většina programátorů dřív nebo později zjistí, že počítačový svět nekončí hranicí jejich monitoru a že je mnohem rozmanitější než nekonečné zelené pláně windowsové pracovní plochy. Jenže jak se v takovém světě domluvit a jak psát programy, aby fungovaly všude? Na co se dá spolehnout a na co ne, jaké se hodí znát jazyky a jaké knihovny k nim. K čemu jsou dobré standardy a k čemu configure. Proč je někdy potřeba vynalézat kolo. Za rok se vrátím aneb jak (nechat) program udržovat.

Programování v UNIXu [I115]
Zbyněk Falt

Stručný přehled unixových utilit. Jak si napsat vlastní skript, přehled základních programových konstrukcí. V případě zájmu a času seznámení s programem awk.

Informatické přednášky – hardware, operační systémy a spol.

Principy počítačů ("A opravdu uvnitř počítače běhají malý trpaslíci?") [I200]
Martin Kruliš, Pavel Machek

Historie a vývoj počítačových technologií a současných architektur. Co je to procesor, jak se programuje (instrukční sady) a jak se chová. Přehled tříd procesorů (skalární a vektorové, RISC). Jak procesor komunikuje s okolím (čipová sada). Nezbytné periferie: vnitřní a vnější paměti, vstupní a výstupní zařízení.

Modely počítačů ("Nač Pentium? Máme Turingovy stroje!") [I201]
Martin Mareš

V I200 se dozvíte, jak fungují „opravdové“ počítače, zde pro změnu na čem počítají teoretici. Všechny počítače jsou si rovny, jen některé jsou si rovnější. Turingův stroj obyčejný, nedeterministický, univerzální a paralelní, orákula, Random Access Machine (RAM), Parallel RAM, Pointer Machine, Data Flow Machine, rekursivní funkce, Markovovy algoritmy, reverzibilní algoritmy, buněčné automaty, ale třeba i dlaždičky v koupelně.

Počítače s více procesory: jak se s nimi dohodnout ("Nač Turingovy stroje, když máme Athlona?") [I202]
Pavel Machek

Jak je vlastně možné, že se víc procesorů snese na jednom smetišti? Spinlocky, semafory, paměťové bariéry. K čemu je dobré dát víc vláken do jednoho procesoru a proč se dává víc procesorů na jednu destičku křemíku. Jak se nám z paměti RAM postupně stává „not-so-Random Access Memory“, co jsou cache a proč jsou dneska tak důležité.

Operační systémy ("Mám 3GHz procesor, tak co ty Windowsy už půl hodiny dělaj?!") [I203]
Martin Mareš, Martin Kruliš, Pavel Machek

Jak vypadá architektura dnešních operačních systémů aneb co musí programátor věďět, aby mu nepadala Wokýnka/Tučňáci. Správa procesů a vláken, plánování, synchronizace. Paměť, adresace a její přidělování. Správa souborů, filesystémy. Čemu se říká jádro a proč se spojuje s pudlem.

UNIX ("UNIX gives you enough rope to hang yourself.") [I204]
Tomáš Valla, Martin Mareš

Kamarád u černobílého textového okna září blahem. Chcete poznat, proč? Jak UNIX vznikl, k čemu je dobrý a k čemu třeba není. UNIXová filosofie. Kouzlo scriptů. Kouzlo speciálních souborů. Kouzlo propojování programů. Kouzlo nechtěného. UNIX byl napsán v C a C vzniklo pod UNIXem.

Linuxové jádro a jak se v něm vyznat ("Jak pořádně otestovat fsck?") [I205]
Pavel Machek

Co ten kernel vlastně je, čím se liší programování v kernelu od normálního kódu, jak sobě vlastní kernel postaviti a jak v něm něco opraviti. Kde najít nejnovější zdrojáky a kde najít pomoc, až se něco pokazí.

MS Windows ("A po restartu třikrát zopakuj "PC moje proradné, Wokno dneska nespadne..."") [I206]
Martin Kruliš

Co jsou to Windows a jaká je jejich filozofie? Od kdy jsou Windows moderním operačním systémem? Jaké jsou rozdíly mezi verzemi Windows, jak Windows vypadají zevnitř a v čem se liší Windows od unixu. Nakousneme také Windows API a zjistíme, proč jsou Wokýnka tak (ne)populární.

Sítě I (a Internet) ("Sítě nejen na ryby.") [I207]
Martin Kruliš, Pavel Machek, Martin Mareš

Jak funguje Internet a počítačové sítě vůbec: od elektronů v drátech (fotonů v optických kabelech, nebo elektro-magnetických vln) přes packety a jejich routing až k jednotlivým síťovým službám. Protokoly rodiny TCP/IP, síťové topologie (a proč Internet vlastně nemá žádnou), internetworking. Pár taktů hudby budoucnosti: IPv6, multicasting, přenos v reálném čase atd.

Sítě II – aneb aplikační protokoly TCP/IP ("Pokud jste se zamotali do sítí, tak se vás pokusíme vymotat.") [I208]
Martin Kruliš, Martin Mareš

Tato přednáška navazuje na „Sítě a Internet“ a zaměří se na konkrétní aplikační protokoly nad TCP/IP. Zajímá vás, jak funguje web, pošta, DNS, FTP nebo třeba Telnet? Poodhalíme roušku tajemství těchto protokolů a když zbyde čas, přidáme ještě nějaké perličky jako RPC (vzdálené volání procedur) nebo SIP (protokol pro internetovou telefonii).

Předpoklady: I207
Mobilní zařízení ("Co je malé, to je hezké, a když ne, tak toho aspoň není moc") [I209]
Pavel Machek

Čím se liší PDA a mobilní telefon, jak vlastně takový mobilní telefon funguje a jak vypadá struktura základnových stanic dovolující, aby fungovat mohl. Power management, vlastnosti různých baterií, metody šetření elektřinou, překlad všech možných 3-písmenných zkratek. Malý přehled toho, co se dá na takových malých věcech spustit.

Mobilní robotika ("3 years in artificial inteligence make you believe in God.") [I210]
Pavel Machek

Jak naučit robota pohybovat se v prostoru. Problémy při konstrukci samočinných robotů, navigační algoritmy s omezeným množstvím paměti a veselé historky o tom, jak to vypadá, když se něco pokazí.

CD ("Cimrmanův Disk") [I211]
Tomáš Valla

Každý je zná, každý je používá. A skoro nikdo neví, jak ve skutečnosti fungují. Fyzikální vlastnosti CD, výroba lisovaných disků, konstrukce snímače (čočka, zaměřování). Fyzická struktura a mnohaúrovňové zabezpečení dat: EFM, rámce, sektory, subkanály a stopy, L1 a L2 Reed-Solomonovy samoopravné kódy na rámcích a sektorech, a další. Různé formáty disků: CD-DA, CD-ROM, jakož i exotické (S)VCD, CD-i, aj. Média CD-R a CD-RW. „Ochrany proti kopírování“ (čti: úmyslně poškozené disky) paranoidních nahrávacích společností, které jsou vlastně ve skutečnosti k ničemu. Pokud zbude čas, nakousneme i modernější disky DVD.

Informatické přednášky – lingvistika a zpracování jazyků

Jazyky, gramatiky a automaty [I300]
Martin Mareš, Tomáš Valla, Petr Škoda

O jazycích přirozených, počítačových a matematických, jejich popisu a rozpoznávání. Regulární jazyky a výrazy, konečné deterministické a nedeterministické automaty. Bezkontextové a kontextové gramatiky a odpovídající výpočetní modely. Chomského hierarchie.

Počítačová lingvistika ("Alkohol je silný, ale maso je zkažené...") [I301]
Pavel Machek, Martin Mareš

Přirozené jazyky a jak s nimi na počítači zápolit. Jak naučit program rozumět češtině nebo angličtině a nedejbože mezi nimi překládat (dokážeme vůbec říci, co to znamená?). Jak vypadá počítačová lingvistika a čím se liší od lingvistiky klasické. Lexikální, syntaktická a sémantická analýza vět a vztahů mezi nimi. O češtině, kterou vás učili ve škole, a jak je to doopravdy. Co nejde a co také nejde; příležitost k bezmocnému úpění? Ne tak docela, statistické metody by nás mohly aspoň zčásti zachránit: co je to korpus, entropie textu, jazykový model a k čemu je to všechno dobré. A co na to říká umělá inteligence. A co Jan Tleskač?

Rozpoznávání a syntéza řeči ("Babičko, a proč máš tak velké mikrofony?") [I302]
Pavel Machek

Co je potřeba udělat, aby počítač dovedl mluvit a poslouchat. Úvod do fonetiky – hlasové ústrojí, hlásky, fonémy, spektrální znázornění řeči. Formantová syntéza, difónová syntéza, transformace psaného textu na mluvený, modelování prosodie. Akustický a jazykový model, borcení časové osy.

Jazykové Zoo [I303]
Martin Mareš

Programovací jazyky jsou všelijaké – procedurální, funkcionální či logické, typované silně, slabě nebo třeba i vůbec, objek... stop, vykládat si o všelijakých rodech, druzích a čeledích jazyků by byla nejspíš nuda, a tak si raději zajdeme do zoo a na ta zajímavější zviřátka se podíváme osobně: APL (či A+, případně J: průvan ve skladišti písmenek), Intercal (když existuje GO TO, proč by nemohlo existovat COME FROM?), Forth (pozpátku píšeme výrazy všechny úplně), Shakespeare (program coby divadelní hra), Oook!, Lingua::Romana::Perligata a další.

Kompilátory ("Jak se dělají kompilátory (a nebo komplikátory?)") [I304]
Martin Mareš

Povídání o tom, jak překladače fungují uvnitř – jak se program parsuje, jak se optimalizuje kód atd. Co je to front end, back end, „middle-end“, mezikód, CSE, peephole optimizer, instruction scheduling, loop unrolling, loop strength reduction a jiná arkána umění kompilátorového. Jak psát programy tak, aby kompilátoru chutnaly, co optimalizovat ručně a co naopak udělá kompilátor lépe než my.

Předpoklady: Základní povědomí o tom, co to je procesor a co dělá.

Informatické přednášky – grafika a typografie

Počítačová grafika ("Čáry nejsou žádná chytrost") [I400]
Martin Mareš, Milan Straka, Martin Kruliš

Kreslení a zpracování obrazu na počítači. Souřadnice (rovinné, prostorové i barevné) a jejich transformace. Základní grafická primitiva: body, úsečky, kružnice, elipsy, Bézierovy křivky. Vyplňování n-úhelníků a křivkou ohraničených oblastí, flood fill. Pár triků navíc: maticové filtry, anti-aliasing a dithering. Grafické formáty a komprese obrázků. Základy trojrozměrného promítání a vykreslování scény.

Geometrie a počítače ("Nerušte mé kruhy! (ani jiné kvadriky)") [I401]
Martin Mareš

Základní algoritmy pro řešení geometrických úloh – konvexní obal, dva nejbližší body v rovině, výpočet obsahu nekonvexního mnohoúhelníka, lokalizace bodu, scanline algoritmus a jeho použití pro výpočet obsahu sjednocení obdélníků. Pokud bude čas a zájem, povíme si i něco o základech kombinatorické geometrie.

Barevné systémy [I402]
Tomáš Gavenčiak

Trocha o tom, jak je v počítačích, fotoaparátech, televizích a podobných zařízeních zapsáno, jakou mají jednotlivé pixelíky barvu. Systémy RGB, CMY(K), HSV, XYZ a jim podobné s jejich výhodami i neduhy. Půltónování, převody palet a základy stínování.

OpenGL ("Je libo krychličku nebo díru do ní?") [I403]
Milan Straka

Popovídáme si o tom, jak a kam se vyvíjí současná 3D grafika, dotkneme se shaderů a zjistíme, jak se to všechno programuje v OpenGL.

Předpoklady: I400
PostScript ("Vy obrázky malujete? To my je programujeme...") [I404]
Tomáš Valla

Jemný úvod do jazyka určeného k tisku grafiky a textu. Základní principy, řídící konstrukce a datové struktury, cesty a kreslení objektů, transformace souřadnic, DSC komentáře. Co je to PDF (Portable Document Format). Různé druhy fontů (např. Type1, TrueType) a jak fungují.

Formát JPEG [I405]
Milan Straka

Povíme si o tom, jak formát JPEG funguje, jak vypadá uvnitř a proč někdy dosahuje nebo nedosahuje dobrých výsledků. Také si povíme o tom, jak takové obrázky rychle načítat a ukládat.

Předpoklady: Povědomí o Fourierově transformaci (M011)
Počítačová typografie ("What You See Is all What You've Got!?") [I406]
Martin Mareš

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? Jednou z možných odpovědí na všechny takové otázky je TeX – není sice WYSIWYG, ale nakonec zjistíme, že tak to je lepší. Ale u toho neskončíme: Metafont, Postscript, pdfTeX a sázení hudby pomocí Lilypondu.

Základní metody vykreslování fraktálů [I407]
Zbyněk Falt

Jak si nakreslit vlastní fraktál. Praktické ukázky IFS fraktálů a L-Systémů. Návod jak vykreslit a obarvit Mandelbrotovu a Juliovu množinu nebo Newtonovy fraktály.

Předpoklady: Znalost komplexních čísel

Matematické přednášky

Logika ("Tato věta sem nepatří.") [M000]
Martin Mareš, Tomáš Gavenčiak

Pokud budeme v životě věřit všemu, co je „přeci zřejmé“, dostaneme se brzy do potíží a v matematice to platí dvojnásob. Ale co s tím? Přírodní vědy si vymyslely verifikovatelné experimenty a matematici logiku a dokazování. Co je to výrok, co jeho důkaz a proč se axiomy nedokazují. Jenže jak si je zvolit? A jak se z toho všeho postaví celá matematika? A bude vůbec matematika někdy celá? Studená sprcha pana Gödela coby sebevražedné dovršení snahy získat dokonalý jazyk. Logika coby hra a problém líného profesora. Důkazy boží existence a neexistence.

Předpoklady: M000
Pravděpodobnost ("Většina lidí má nadprůměrný počet rukou.") [M001]
Martin Mareš, Milan Straka

Toto je přednáška o základech teorie pravděpodobnosti a statistiky. Dozvíte se, co to je podmíněná pravděpodobnost, rozdělení, střední hodnota nebo rozptyl, jak se to všechno počítá a k čemu je to dobré. Součástí přednášky bude i několik zajímavých příkladů z praxe a krátký kurs přežití ve světě plném chybných statistik.

Úvod do Ramseyovy teorie ("Dejte mi dostatečně velký objekt a já v něm najdu nějaký řád.") [M002]
Tomáš Valla, Martin Mareš

Hříčka: ve společnosti šesti lidí vždy existují tři, kteří se navzájem znají, nebo neznají (ověřte ručně). Obecněji, pro libovolné „tři“ existuje „šest“ tak, že shora uvedené tvrzení platí. To je jedna z Ramseyových vět, které říkají, že v každém dostatečně velkém objektu vždy existuje nějaký stejnorodý podobjekt. Jednoduchá tvrzení Ramseyova typu, Ramseyova věta pro grafy dvou a více barev, pro systémy p-tic, nekonečná verze a aplikace. Populárně řečeno, chaos to má těžké.

Barevnost grafů ("Bílá, modrá, červená, co to pro graf znamená?") [M003]
Tomáš Valla

V teorii grafů zaujímá významné místo problém barevnosti grafu, tedy přiřazení co nejmenší počtu barev vrcholům tak, aby se hranami dotýkaly pouze různobarevné vrcholy. Aplikace problému v informatice je nasnadě. Ukážeme si několik zajímavých teoretických výsledků. Barvení grafů na plochách vyššího rodu, channel assignment problem, hranová barevnost, listové barvení, vybíravost grafů a jejich tříd.

Základy algebry [M005]
Milan Straka

Převážně neuspořádaný přehled základních matematických pojmů a konstrukcí. Pár magických slov pro představu: monoidy, grupy, okruhy, obory integrity, tělesa, vektorové prostory, polynomy, částečná uspořádání, booleovy algebry, filtry, ideály. Také si povíme, na co se takové věci dají použít.

Teorie množin a matematika nekonečen ("Je Vlk nedosažitelný kardinál?") [M006]
Martin Mareš, Tomáš Gavenčiak, Tomáš Valla

Teorie množin tvoří páteř veškeré matematiky. Pomocí množin se totiž modelují veškeré objekty, které se v matematice vyskytují. Celou teorii prostupuje magický pojem nekonečno. Jakým způsobem se tohoto, pro spekulativní mysl ošidného, termínu zhostila moderní matematika? Množiny a jejich velikosti. Cantorův diagonální trik. Ordinály a houšť kardinálů. Potenciální kontra aktuální nekonečno. Myslíte si, že máte dobrou představu o tom, co jsou přirozená čísla? Možná vás z ní vyvedeme. A co teprve reálná čísla. Problematika volby axiomů determinovanosti versus výběru.

Grafy bez algoritmů [M007]
Martin Mareš, Tomáš Valla

Vrcholové a hranové barvení grafů, Eulerova věta, hamiltonicita grafů, rovinné grafy a grafy na plochách, Kuratowského věta, Eulerova formule, věta o skóre, grafové minory.

Lineární algebra [M008]
Martin Mareš, Tomáš Valla, Milan Straka, Tomáš Gavenčiak

Lineární algebra původně vznikla jako elegantní prostředek k popisování geometrie lineárních útvarů (bodů, přímek, rovin, ...) v libovolněrozměrném prostoru, ale ukázalo se, že její kouzlo dosahuje daleko dál. Vektorové prostory, lineární (ne)závislost, báze, lineární zobrazení a matice, determinanty, tenzory. Konečné projektivní roviny.

Teorie (vesměs samoopravných) kódů ("f y cn rd ths, y wll b gd cmptr prgrmmr!") [M009]
Martin Mareš, Milan Straka

Jak komunikovat po lince, která průměrně každý k-tý bit přenese špatně? K tomu se hodí teorie samoopravných kódů, která nás naučí: distance slov a jejich souvislost s detekcí a opravou chyb, paritní a lineární kódy, perfektní kódy, Reed-Solomonovy a vůbec polynomiální kódy a několik dolních odhadů nádavkem. A jak s teorií kódů souvisí třeba čeština?

Komplexní a komplexnější čísla ("1=sqrt(1)=sqrt((-1)(-1))=sqrt(-1)sqrt(-1)=i· i=i2=-1. Huh?") [M010]
Martin Mareš, Milan Straka

Jak se nám matematika změní, když připustíme, že se záporná čísla také dají odmocňovat? Čísla imaginární a komplexní a jejich různé podoby. Součtové vzorce pro sin a cos dostaneme téměř zdarma. K čemu se hodí v matematice a k čemu ve fyzice. Proč se zastavit u dvou složek aneb quaterniony, octoniony a Cliffordovy algebry. Remember, life is complex.

Fourierova transformace [M011]
Martin Mareš, Milan Staka

Chytrý trik pana Fouriera patří již dávno k matematické a fyzikální klasice a ukazuje se, že se hodí i při programování, počínaje digitálním zpracováním zvuku a obrazu (spektrální analýza či třeba komprese) a konče nečekaně rychlým násobením polynomů a předlouhých čísel.

Předpoklady: Základy komplexních čísel (M010)
Kombinatorika ("Nemám rád faktoriály. Faktoriály nemám rád. Rád nemám faktoriály...") [M012]
Martin Mareš, Milan Straka

Při navrhování algoritmů a počítání jejich složitosti narazíme na celou řádku zajímavých a ne úplně triviálních kombinatorických problémů, a tak se naučíme, jak na ně. Základní triky s faktoriály a kombinačními čísly, sčítání konečných a občas i nekonečných řad, rekurentní rovnice a princip inkluze a exkluze; taktéž metoda vytvořujících funkcí coby velký podvod v mezích zákona.

Teorie kombinatorických her ("Život je jen hra... Jakou má vyhrávající strategii?") [M013]
Martin Mareš, Tomáš Valla

Rozličné kombinatorické hry se zápalkami, kamínky, barvičkami či grafy. U některých si ukážeme výherní či obranné strategie, u některých dokážeme, že sice příslušná strategie existuje, ale nikdo ji ve skutečnosti nezná. Jak kombinatorické hry souvisí s M002. Zmíníme například: piškvorky, kruhové a zobecněné piškvorky, hex, různé varianty Nimu, vojáčci v poušti, speciality à la Herkules a Hydra, a další. Můžeme se zapovídat i o tom, jak podobné hry programovat na počítači.

Teorie kombinatorických her II ("Život je jen hra... Jakou má vyhrávající strategii jeho d-rozměrné zobecnění?") [M014]
Tomáš Valla

Budeme se věnovat především tzv. pozičním hrám. Do této rodiny patří piškvorky a jejich příbuzní. Jednoduché piškvorky by však byly pod naši úroveň – zajímat nás budou především vícerozměrné piškvorky, jejich další zobecnění a varianty, hry typu „tvůrce-ničitel“, obecné poziční hry na hypergrafech, využití metody potenciálové funkce v herních strategiích a způsob, jakým se dá v teorii her aplikovat elegantní matematika typu M002 či pokročilejší kombinatoriky.

Předpoklady: Nebát se pokročilejší matematiky, M013 výhodou

Fyzikální přednášky

Podzimní obloha [F000]
Martin Mareš

Pozorování podzimní hvězdné oblohy spojené s astronomickým minikursem. Od antických a ještě starších bájí k modernímu příběhu o Velkém Třesku a naopak od celkem seriózní vědy k rozmarnému filosofování o světě a našem místě v něm. Hvězdáři a hvězdopravci, „Už staří Řekové...“, měření a vážení na dálku, vývoj hvězd a kosmologie, antropický princip, kdo schvaluje fyzikální zákony? Jak se podle hvězd orientovat a jak fungují sluneční a třeba i měsíční hodiny.

Předpoklady: Počasí dovolí. Měsíc nejlépe v novu.
Digitální elektronika [F001]
Martin Mareš, Martin Kruliš

Jak fungují digitální elektronické obvody, ze kterých jsou postavené (nejen) počítače. Nuly a jedničky jako napěťové úrovně; kombinační obvody (transistory, hradla, multiplexery), sekvenční obvody (klopné obvody, registry, čítače) a asynchronní obvody. Troška matematiky okolo aneb logické formulky a De Morganovy zákony; proč stačí jenom jeden typ hradel. Třístavová hradla a sběrnice ... zde plynule přecházíme v I200.

Ostatní přednášky

Ne-tak-úplně-obchodní angličtina [X000]
Pavel Machek

Jak napsat mail tak, abyste neurazili obchodníka, a jak napsat mail naopak tak, abyste ho urazili co největší kus. Umění chrlení ohně (a.k.a. flames) včetně praktických ukázek. A něco o tom, jak oheň nechrlit.

Lingvištika ("Přísudek je v této větě podmět") [X001]
Martin Mareš

Převážně nevážné a mírně nepřed-vídatelné po-vídání o jazyku i jazyce. Kolik těch jazyků vlastně je, kde se vzaly a kam směřují? Slovní zásoba na cestách aneb nepožívejte odporné termity. Kde jsme přišli k pravidlům a proč pravidla nejsou všechno. Existují synonyma? A překlady? Proč je jazyk nejednoznačný a proč je to dobře. Co má společného čínština s angličtinou? Jak se na jazyk dívá matematik a jak se na matematiku dívají lingvisté. Jak vzniklo písmo? A jak otazník? &c.

Hudba v počítačích ("Na co gramofon? Pojďme poslouchat nuly a jedničky!") [X002]
Milan Straka

Jak se vlastně hudba v počítači ukládá a jak se vyvíjely formáty pro ukládání hudby. Budeme si spíš povídat a pokud bude k dispozici technika, pustíme si i hojně ukázek.

Seminář strunných hudebních nástrojů ("Hendrixem za 90 minut") [X003]
Tomáš Valla

Hudební nástroje více či méně příbuzné s dnešní kytarou patří v současnosti k těm nejrozšířenějším. Kytaře se budeme věnovat přednostně, dostaneme se však i k nástrojům, jako jsou banjo, mandolína, brač, loutna a další. Jak se liší různé druhy kytar, jak funguje kytara elektrická, elektroakustická, steel-kytara. Doplňky (kapodastry, slidery, typy strun), tabulatury, nákup a údržba nástrojů. Různé hráčské techniky a především jejich hojné praktické ukázky, při vhodném počtu zájemců možno rovnou propojit s jejich výukou.

MFF UK aneb Co obnáší matfyzákem býti ("Maminko, ptá se tatínka, kdy už budu matfyzákem?") [X004]
Milan Straka & Martin Mareš & kdokoliv další

Nezávazné povídání o Matfyzu a základním matfyzáckém folklóru. Určitě si přečteme matfyzáky sepsaný Úvod do matfyzáka a zazpíváme pár matfyzáckých písní. Zbytek už bude záležet na tom, co budete chtít slyšet.

Orientace [X005]
Pavel Machek & Martin Mareš

Jak ze neztratit v terénu a jak se neztratit na moři. Vývoj umění navigace. K čemu je důležité slunce a hvězdy, ale proč mořeplavcům nestačí, alespoň dokud neobjevíme hodinky. Použití mapy, busoly a GPSky. Orientace bez pomůcek a použití ariadniny nitě. Bleskový úvod do sférické astronomie a časomíry čili jak (ne)postavit sluneční a třeba i měsíční hodiny. Jak reprezentovat mapu v počítači a jak raději ne. Jak zapisovat polohu místa na Zemi (přestože Země má tvar podivně nakousnuté hrušky) a kolika způsoby to jde. Různé druhy map a jejich zkreslení. Jak se neztratit v kartografii. Praktické cvičení v terénu.

Digitální fotografie [X006]
Pavel Machek

Jak za pomoci digitálního foťáku vytvořit fotku, na kterou se dá koukat, a o tom, co se dá zkazit tak, že už se na fotku koukat nedá. Vztahy mezi clonou, časem, citlivostí, rozmazáním fotky a šumem. Zoom a proč ho nepoužívat. Jak poznat špatný foťák a proč megapixely nejsou všechno. Jak kouzlit s foťákem, který nemá ani základní ovládání. K čemu se dá použít foťák v mobilu. Pokud počasí dovolí, vyrazíme ven: vlastní foťák vítán, vlastní krabička s CCD čipem taktéž.