Krutá Smršť Přednášek 2015
Seznam přednášek – Karolínka
Hlasování o přednáškách na Smršt již skončilo a Smršt již také proběhla.
Níže se alespoň můžeš podívat na seznam přednášek, může Ti být inspirací nebo motivací třeba pro příští Smršt.
- Matfyzácké přednášky
- Nematfyzácké přednášky
Matfyzácké přednášky
V této kategorii sídlí přednášky týkající se informatiky, případně matematiky či fyziky.
Algoritmy a datové struktury
Důmyslnější varianty vyhledávacích stromů: splay stromy, BB-α stromy, vícerozměrné stromy. Chytřejší haldy: binomiální, Fibonacciho, 2-3. Amortizovaná analýza složitosti. Též několik přátelských randomizovaných datových struktur: skip listy a treapy.
Pojďme spolu na výlet krajinou datových struktur. Vyšlapané cestičky lesem vyhledávacích stromů mineme a raději zahneme do opravdové džungle. Potkáme struktury pracující ve skoro konstantním čase, dynamické reprezentace grafů, roztodivné druhy hešováni a cokoliv dalšího, o co si průvodci řeknete.
Někdy potřebujeme najít podřetězec ve velkém množství textu. Stromeček trochu připomínající ten biologický aneb trie. Proč se ve vstupu vracet neboli Knuthův-Morrisův-Prattův algoritmus. Hledání více řetězců najednou podle Aha a Corasickové. Okénkové hešování Rabina a Karpa.
Pomocí sufixového stromu lze většinu řetězcových problémů vyřešit v lineárním čase. Na přednášce si ukážeme, jak sufixový strom vypadá, jak se pomocí něj řeší problémy, jak souvisí se sufixovým polem a pomalu se budeme přibližovat k jeho konstrukci.
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), Burrowsova-Wheelerova transformace (BZIP). Pokud zbude čas, tak i něco o ztrátové kompresi obrázků a zvuku (prediktory, wavelets, JPEG, MPEG, fraktály).
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.
O problému hledání cest v grafech trochu podrobněji. Obecné relaxační schéma, Bellmanův-Fordův a Dijkstrův algoritmus a jejich zrychlení pomocí různých datových struktur. Potenciálová redukce a heuristiky (třeba A*), zaokrouhlování délek hran. Souvislosti s násobením matic: transitivní uzávěr, Seidelův algoritmus, Kleeneho algoritmus a regulární výrazy.
K čemu je dobré, když grafem teče voda. Předvedeme si klasický problém toků v sítích a jeho všelijaké, mnohdy dosti překvapivé aplikace. Jak rozestavět n věží na šachovnici a jak ji místo toho pokrýt dominovými kostkami? Další souvislosti, jako třeba násobná souvislost grafů.
Předpoklady: Umět plavat (zejména v matematice)Stromy jsou jednou z nejtypičtějších (a nejjednodušších) odrůd grafů. Ledacos pro ně umíme řešit mnohem rychleji než pro obecné grafy, tak se pojďme podívat, jak se to dělá. Předvedeme několik obecných technik pro práci se stromy: DFS očíslování, „vandalskou indukci“, intervalové reprezentace, rozklad na lehké a těžké hrany, Fredericksonův rozklad a ST-stromy.
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.
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í, Voroného diagramy a souvislost s persistentními datovými strukturami.
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.
Strojový překlad udělal za posledních pár let obrovský pokrok, a přestože není těžké počítače nachytat, překlady mezi mnoha dvojicemi jazyků už produkují použitelné výsledky. Jak ale něco takového funguje uvnitř? Morfologická a syntaktická analýza, morfologické odvozování, korpusy, tabulky výjimek. Kontext, jeho reprezentace i ignorování. Ukážeme si stavební kameny a možná dojde i na existující výtvory z nich.
Co si počít, když dostaneme obrázek a potřebujeme zjistit, co je na něm? Podíváme se na několik základních postupů a fíglů, jak toho zjistit co nejvíc. Ukážeme si nějaké úlohy, kde počítač prohraje i proti batoleti, ale i úlohy, které jsou pro lidi neřešitelné, zatímco počítače je zvládnou hravě. Nakonec ochutnáme trochu z neuronových sítí a dalších oborů umělé inteligence.
Teoretická informatika
Trochu hlouběji o složitosti. Přesná definice výpočetního modelu a velikosti vstupu. Složitost v nejlepším, nejhorším a průměrném případě; amortizovaná analýza. Jak dokázat, že úlohu nejde řešit rychleji, aneb dolní odhady. Porovnávání problémů pomocí redukcí, problémy NP-úplné a ještě těžší.
Předpoklady: SLOZSpousta 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.
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?
V HW 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ý, vícepáskový, nedeterministický a univerzální. Random Access Machine (RAM) a Pointer Machine. Až nám začne být smutno, pořídíme si klidně N2 procesorů a spřáhneme je do paralelního počítače (PRAM). Rychlé paralelní slévání a třídění. Pokud zbude čas, ukážeme si buněčné a grafové automaty, nebo třeba dlaždičky v koupelně.
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.
Trochu jiný přístup k obtížným úlohám. Některé úlohy sice vypadají, jako by se za dobu existence vesmíru nedaly vyřešit, nicméně pro rozumně velké vstupy to přesto potřebujeme. Jak backtrackovat rychleji a radostněji – backjumping, backmarking, limited discrepancy search, a jak neprobírat úplné nesmysly – hranová konzistence, konzistence po cestě, bodová konzistence.
Kdy se vyplatí nakoupit akcie? O čem je tenhle článek? Kde jsem nechal klíče? Počítače se musí prát s problémy, které jsou strašně těžké, ale někdo je stejně řešit musí. Jak to dělají? To se dozvíte na této přednášce. Ukážeme si reprezentaci vnějšího světa a automatické uvažování nad jeho obsahem, na což naváže vyhledávání ve stavovém prostoru a úvod do programování s omezujícími podmínkami. Následovat bude pár základních algoritmů strojového učení. Nakonec se můžou podávat speciality z oblasti zpracování přirozeného jazyka, umělého vidění, nebo třeba plánování a rozvrhování.
Často nám nějakou dobu trvá, než vymyslíme algoritmus. Co když se nám ale efektivní algoritmus dlouho vymyslet nedaří, a třeba jsme přesvědčení, že to ani nejde? Evoluční algoritmy pracují s nějakou množinou řešení, která různě upravují a kříží, až se (možná) dostanou k nějakému dobrému řešení. Povíme si o těchto algoritmech víc, kdy je použít (a kdy to nejde), jak se to dělá, na co si dát pozor. Reprezentace, operátory, hodnoticí funkce, výběr jedinců. Předčasná konvergence, stagnace, škálování. Zbude-li čas, inspirujeme se také u mravenců a včel.
Programovací jazyky a nástroje
Jednoho dne se Larry Wall rozhodl, že nasype do jednoho velkého kotle spousty programovacích jazyků a unixový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. Co se Perl 5 přiučil od Perlu 6.
Je to Perl, a přitom to Perl není. Co je to? Aneb jak to dopadne, když se pokusíme navrhnout programovací jazyk budoucnosti a inspirovat se přitom filosofií Perlu. Typový systém, pokud zrovna chcete. Objekty, třídy a metatřídy. Periodická soustava (meta)operátorů. Definování jazyka v sobě samém. A co se to stalo s regulárními výrazy? Jak vypadají implementace P6 a kdy je prozatím lepší programovat na papíře. Praktické cvičení ve stavbě vzdušných zámků a bydlení v nich.
print "Ffff".decode("rot13")
")
[PYTH]
Jak programovat v Pythonu a jak v něm „nepsat Cčko“. Syntaxe, datové typy, funkce, třídy, ... Na co si dát pozor, v čem se Python liší od ostatních jazyků a proč je mezi nimi tak oblíbený.
import antigravity
")
[PYTH2]
Povídání o méně zmiňovaných částech Pythonu. New-style classes, dekorátory, metaclasses, generátory, funkcionální styl programování v Pythonu. Jak napsat quicksort jako lambda funkci. Představení zajímavých modulů.
Ruby je super jazyk: je ohebný a snadno pochopitelný a navíc má okolo sebe skvělý ekosystém. Uvidíte jeho základy a snad i poznáte, proč si ho tolik programátorů zamilovalo.
V přednášce navazující na Ruby si ukážeme, jak se programují webové aplikace v jednom z nejpoužívanějších frameworků: jednoduché věci budou jednoduché, složité věci budou často jednoduché taky, a nad věcmi, které by měly být automatické, nebudeme muset ani přemýšlet. Hodí se mít ponětí o MVC.
Předpoklady: Ruby nebo jiný jazyk s OOP, nějaké zkušenosti s webyJazyk 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.
++
("Je dobré znát, co umí atomová bomba (a její datový typ), abychom ji nechtěli použít.")
[CPP]
Pokročilejší prvky C++
(šablony, přetěžování funkcí a operátorů,
preprocesorové hacky, ...) a možnosti jejich (po|zne)užití. Jak s nimi vytvořit věci
magické (smart pointers, lambda funkce), ale i na první pohled docela obyčejné,
které si bohužel jinak pořídit nejde. Nahlédneme do vnitřností slavné knihovny
Boost. Proč je třeba preprocesorem vygenerovat 512 šablonovaných
typů jen, abychom mohli rozumně předávat pointery na metody? Jaká akrobacie je
nutná pro obyčejnou statickou inicializaci seznamu? A mnohá další překvapení.
Přednáška vás naučí psát v C++
složité věci a přesvědčí, že v něm nechcete
psát ani jednoduché.
++
, staticky alokovaný kyblík
Java je jeden z nejrozšířenějších objektových programovacích jazyků za posledních deset let. Na přednášce se seznámíme s jeho myšlenkou a naučíme základy. Přednáška je dělaná pro posluchače, kteří umí alespoň základy jiného programovacího jazyka.
Mezi programem v Céčku, který jste právě dopsali, a tranzistory uvnitř vašeho procesoru leží obrovské území obývané překladači, linkery, knihovníky, operačními systémy, loadery a jinými bájnými bytostmi. Pojďme zjistit, co jsou zač a co všechno s programem provádějí. Co udělá kompilátor za nás a co musíme naopak udělat my za něj.
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 hardwaruCož 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.
Základní kurz Haskellu – moderního funkcionálního jazyka. Ukážeme si syntaxi, vysvětlíme typovou kontrolu a typový systém. Přičichneme k třídám, zrušíme výjimky a zavedeme zcela bezpečná vlákna. Řekneme si, proč v Haskellu nejde komunikovat s okolním světem a proč nám pomůže si okolní svět uložit do proměnné. A že vlastně v Haskellu žádné proměnné nejsou, jen visačky na datech.
Předpoklady: Sklony k algebraickému chápání vesmíru, odvahu tváří v tvář své vlastní tváři a rekurzi.Android se v našich mobilech, tabletech, netboocích a ledničkách zabydlel, a asi se v nejbližší době neodstěhuje. Na nějakém jednoduchém zadání si ukážeme, jak se pro něj programuje. Vlastní notebook s nainstalovaným Android SDK se může hodit.
Předpoklady: Aspoň pasivní znalost Javy.Hardware a operační systémy
Unixové operační systémy (zejména Linux) dobývají svět. Jak fungují uvnitř a jaké nabízejí výhody? Unixová filosofie a historie. Proč je systém složený ze spousty malých a jednoduchých kousků stabilnější a bezpečnější? Proč ovládání prostřednictím textových příkazů je často efektivnější než klikátka? Jaké to je mít svůj systém pod kontrolou a „vidět mu pod ruce“? V čem spočívá moc textových souborů?
Praktičtěji zaměřená přednáška než UNIX, zabývající se hlavně tím, jak efektivně používat příkazovou řádku. Ukážeme si na spoustě příkladů, jak nám může automatizace všedních činností ulehčit život a jak silné nástroje pro ni UNIXový shell (který navzdory svému názvu existuje i pro Windows) svou jednoduchostí a flexibilitou poskytuje. Budeme spojovat spoustu jednoduchých příkazů do mocných celků a s nimi plnit i na první pohled komplexní úlohy, jako třeba automatické stahování a parsování věcí z webu. Některé činnosti vyžadují lidskou nápaditost a vhled. Ty ostatní bychom měli přenechat strojům.
mkfifo p;nc -lp80<psed -re "s/GET /tac</;s/ .*/;echo;echo& 200 OK/;q"sh|tac>p
")
[SS]
Co vše se dá napsat za pomoci unixového shellu a spřízněných utilit. Webové aplikace, šablonovací systém, síťová komunikace, OOP, ... Proč to obvykle není dobrý nápad, ale občas taky ano.
Jak si program pod Linuxem povídá s operačním systémem, když chce otevřít soubor, přečíst soubor, půjčit trochu paměti a jiná šprťouchlata. Předvedeme si, jaká existují v Linuxu systémová volání. Naučíme se namapovat si soubor rovnou do paměti, posílat a odchytávat signály, uspávat a probouzet proces, plodit děti a další. Pokud zbyde čas, můžeme si napsat démona a klienta a povídat si po síti.
Předpoklady: Schopnost přečíst a napsat jednoduchý program v C.Když se oprostíme od konvenčních postupů a raději si přečteme, co slibuje POSIXový standard, zjistíme, že je možné dělat mnoho zajímavých triků v jazyce C a podobných. Tak si můžeme vyrobit třeba vlastní implementaci swapu v uživatelském prostoru, kooperativní vlákna či chytrý pluginový systém. A stačí toho k tomu celkem málo, jen se nebát a číst mezi řádky manuálových stránek.
Předpoklady: UNIXČo to vlastne ten linuxový kernel obsahuje, čím sa líši programovanie v kerneli od toho bežného. Ako kernel skompilovať, kde hľadať pomoc a akým spôsobom funguje samotný vývoj linuxového kernelu. Ako zmeniť zdrojáky nejakej komponenty, ako ich publikovať a ako ich dostať do „hlavnej“ verzie kernelu dostupnej pre všetkých. Doneste si svoje notebooky, ktorým nefunguje poriadne touchpad, rôzne Fn klávesy, prídavné tlačítka, podsvietenie displeja, klávesnice a pod. Skúsime to odladiť a opraviť, prípadne napísať pre nefunkčné zariadenia nové ovládače.
Vydáme se do země skřítků, kteří pohánějí počítače. Počítačové architektury od hodinek po superpočítač od Craye, jejich křivolaká historie i současnost. Co je to procesor, jak se programuje a jak se chová. Různé druhy pamětí a jejich cacheování. Jak procesory komunikují s okolím – sběrnice, čipové sady, vstupní a výstupní zařízení. A co když je procesorů několik, nebo třeba pár tisíc? Přednáška bude praktická: pár počítačů při ní rozebereme a možná i nějaký postavíme.
Po chvíli zjistíme, že nám lokální a globální proměnné nestačí a je potřeba paměť alokovat dynamicky. Co všechno si musíme udělat sami a co se děje programátorovi „za zády“. Mapování adresního prostoru, ruční alokování a vracení paměti a problémy s tím spojené (chyby programátora), počítání odkazů a daň s nimi spojená (a hele, cyklus), odklízeče odpadu (mark & sweep, kopírovací, generační a jiné triky).
Dnešní procesory mají několik úrovní vyrovnávacích pamětí (cache), což způsobuje, že ačkoliv si jsou všechny části paměti rovny, některé si jsou rovnější. Jak taková cache funguje? Jak se procesor rozhodne, co si v ní zapamatuje a co vyhodí? Jak toho můžeme využívat při programování, aby naše programy běžely rychleji? Předvedeme kousek teorie i několik praktických ukázek s poněkud překvapivým chováním.
Předpoklady: Kešu oříškySítě a bezpečnost
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 packety a jejich routing až k jednotlivým síťovým službám. Adresace, internetworking a dynamický routing. Jak NAT zachránil i zničil Internet a proč se těšíme na IPv6.
Volné navázání na NET. Budeme si povídat o tom, co za data nám po síti běhá a jaké se k tomu používají protokoly – DNS, FTP, HTTP nebo třeba i mailové SMTP a IMAP. Zaměříme se více na ty nejpoužívanější (metody GET a POST v HTTP), nakousneme cacheování a nadlábneme se cookies. 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íchDNS je starý, a přesto moderní protokol. Stojí na něm infrastruktura celého Internetu. Slouží k překladu adres, ale nejen k tomu. Jak zajišťuje spolehlivost, jak bezpečnost. A proč si na něj ani Anonymous netroufnou. V čem je ČR první a co je to digitální lukostřelba.
Jak zjistit, co vám uživatelé dělají na síti. Jak chytit spamera, jak odhalit DDOS, a co jsou jen živelné katastrofy. Jak to dělat doma, v malé síti a jak na 100GBit lince. A co si ještě může administrátor dovolit sledovat v ČR a co v Americe.
Předpoklady: NET, tušení, co je statistika.Kryptologie čili tajuplná nauka o šifrách, jejich konstrukci a hlavně o jejich luštění. Přísně tajné. Š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 na házení korunou po telefonu. Předvedeme nerozluštitelnou šifru a dokonce to o ní i dokážeme.
Pokročilejší a občas nečekané aplikace základních kryptografických primitiv. Jak přesvědčit server, že známe heslo, aniž bychom mu ho posílali? Jak zajistit, aby útočník nemohl dešifrovat komunikaci, ani když dodatečně získá soukromý klíč? Jak funguje BitCoin (decentralizovaná digitální měna) či Tor (protokol znemožňující komukoli po cestě vědět, kdo s kým komunikuje)?
Předpoklady: Základní povědomí o šifrování (CRYPT) a víra v existenci náhodných číselProgramátoři si často myslí, že pro bezpečnou komunikaci stačí vybrat si z knihovny osvědčenou silnou šifru. Jak naivní! Navrhnout bezpečný protokol není maličkost a dá se při tom ledacos zpackat. Replay útoky (jak otevřít auto krabičkou za 30 dolarů), útoky na padding a na blokovou strukturu. Čí že je ten podpis? Jak nepoužívat RSA a jak nehešovat hesla. Jak náhodná jsou vaše čísla? Postranní kanály: časování, spotřeba, záření. K čemu se crackerům hodí termoska s tekutým dusíkem.
Nejslabším článkem bezpečnosti téměř vždy bývá člověk. Na co si dát pozor, když si chráníte data a když posíláte zprávu. Co je to trust model a komu můžete (ne)věřit. Jak udělat bezpečné přihlášení. Co dělat ve chvíli, kdy jsou nějaká data kompromitovaná. A proč zamykat dveře a školit zaměstnance, aby za sebou zavírali a nikoho nepouštěli. Kam data neukládat a jaká data neukládat vůbec.
Předpoklady: ParanoiaCo se stane s e-mailem, když jej odešlete? Kudy chodí a kudy jej čerti nesou? Jaké máte záruky, že přijde; proč občas přijde pozdě nebo vůbec. Problém formátů a kódování, chyby webových i jiných klientů. Protokoly SMTP, POP, IMAP a co se stane, když do nich přimícháme SSL/TLS. E-mailová bezpečnost, SPAM, viry, phishing, BFU a kde koupit levnou viagru. Nakonec se podíváme na ne zrovna triviální grafový problém, který je v emailech skrytý.
Většina webu je dnes založena na protokolu HTTP, pojďme se podívat, jak funguje uvnitř. Metody GET, POST, ale třeba i PUT. Dohadování o typu dat. Cacheování, revalidace a transformace dat. Křupavé sušenky. Jak se vypořádat s dynamicky generovaným obsahem aneb protokol CGI. Mezi klientem a serverem aneb DNS a virtuální servery. Nakonec do toho všeho přimícháme SSL/TLS a máme HTTPS. Malá ochutnávka HTTP/2.0.
Chcete se naučit psát webové stránky? Tady se dozvíte, jak na to. Naučíme se běžnou podmnožinu HTML, jak stránky obarvit a vytvarovat v CSS a možná i jak pomocí nich sbírat a zpracovávat informace.
Každá chytrá webová aplikace musí dneska mít aspoň trochu JavaScriptu. Ukážeme si, jak v něm psát, rozhýbeme pomocí něj webovou stránku a předvedeme si pár běžných knihoven, které nám to usnadní. Co umí JavaScript současnosti a budoucnosti s HTML5.
Předpoklady: WEBOrganizátoři KSPčka rádi dělají pokusy na sobě samých, a tak při vývoji nového webu semináře pohrdli všemi vyzkoušenými webovými frameworky a napsali si potvůrku jménem Hippo. Trochu netradiční, ale v mnoha ohledech velice příjemnou. Namátkově: HTML coby datová struktura, triky s kryptografickými tokeny, kombinování programovacích jazyků a tvorba dynamickych stránek, které jsou přitom skvěle cacheovatelné. Případně také nahlédnutí do dalšího zákulisí KSPčka.
Jak se programy domlouvají mezi sebou? Komunikace v rámci jednoho počítače, uvnitř datacentra nebo přes celý svět: RPC mechanismy jako DBus, JSON-RPC, XML-RPC, SOAP, nebo gRPC. REST, WebSockets. Univerzální formáty dat s různou strukturovanosti: CSV, JSON, YAML, XML, Protocol Buffers. Scraping aneb jak ukrást, co nám nepůjčí. Na pár praktických příkladech si ukážeme, jak s pomocí cizích služeb psát užitečné programy.
Programovací nástroje a techniky
Jak vyvíjet program delší dobu a nezbláznit se u toho. Různé systémy pro správu verzí od diff/patch přes CVS a SVN až ke Gitu. Jak Git funguje: stromy, commity, větve, tagy. Merge mezi větvemi nebo mezi různými počítači. Kouzelnické triky: hledáme bugy půlením historie, přepisujeme dějiny. Jak se liší správa zdrojáků v projektech o jednom, deseti a tisíci programátorech. Udržujeme patche k cizímu programu aneb quilt a StGit.
Pokročilá prednáška o Gite pre tých, ktorí si ho už ošahali ale nerozumejú mu poriadne.
Začneme základnými stavebnými kameňmi gitového repozitára a ako sú v skutočnosti
súbory, adresáre a ich história reprezentované. Ďalej si popíšeme, čo presne jednotlivé
gitové príkazy s repozitárom (a ďalšími súbormi) robia a prečo niekedy užívateľovi
vynadajú. Vysvetlíme si a ukážeme si ako sa majú konflikty v Gite riešiť a ako sa im
jednoducho vyhnúť. Ak bude čas ukážeme si aj mocné nízkoúrovňové gitové príkazy a
napíšeme si pomocou nich vlastný príkaz git commit
. Alebo na želanie hocičo iné.
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.
Programování není zdaleka jenom o programování. Ukážeme si, jak psát kód tak, aby nejenom fungoval, ale aby vyzařoval krásu a pokoj všem programátorům dobré vůle. Povíme si o různých způsobech testování a dalších nástrojích, které pomáhají vyvíjet kvalitní software.
Předpoklady: Aspoň jeden jazyk s OOPCo mají společného automat na jízdenky, velké červené tlačítko v jaderné elektrárně a KSPácké webové stránky? Jsou to rozhraní, jejichž pomocí lidé něco ovládají a plní nějaké úkoly. Jak taková rozhraní navrhovat a jak je následně testovat? Proč raději nenavrhovat to, o co si lidi řeknou, a proč nevadí, že Vim by v běžném testování určitě neuspěl? A je opravdu nejdůležitější poučka „Zapomeňte na poučky“? Projdeme celý proces návrhu uživatelského rozhraní, pojmenujeme zdánlivě samozřejmé, a přece často opomíjené zásady a upozorníme na časté prohřešky.
Grafika a typografie
Kreslení a zpracování obrazu na počítači. Co vše obnáší vykreslení obyčejné čáry, aby to bylo rychlé a pěkně vypadalo. A co teprve, když ta čáry zatáčí! Vyplňování n-úhelníků a křivkou ohraničených oblastí, flood fill. Také maticové filtry pro zpracování fotek (zaostření, rozmazání), anti-aliasing a dithering. Pokud se stihne, tak navíc základy 3D vykreslování.
Lehké nakousnutí jazyka, ve kterém můžete opravdu kreslit planimetrické obrázky, ale i třeba písma nebo piktogramy do zadání a řešení KSP. V MetaPostu se obrázky „programují“ a díky tomu se dá vytvořit cokoliv od šachovnice, přes grafy goniometrických funkcí až po fraktály. Podíváme se i jak s fonty zachází TeX a jak vypadají třeba CM fonty.
Základy OpenGL, jak vytvořit 3D svět. Kreslení trojúhelníků a jiných úhelníků. Barvy, textury a světlo. Průhlednost a triky s ní. A triky bez ní. Jak udělat žulový náhrobek s vyrytým reliéfním nápisem na 6 obdélníků a hladkou kouli na 16. Jak udělat oheň či vodotrysk jako živý. Náznaky, co vše může dnešní grafická karta dělat a jak moc jsou výrobci her lemry líné.
Předpoklady: GFXJak 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.
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í. Probereme základy TeXu, jeho využití při psaní řešení KSP, ale třeba také povídek, ročenky, slajdů pro prezentaci nebo zpěvníku.
Matematické přednášky
Rychlokurz derivování a integrování. Rychle prolétneme limity, nadefinujeme si derivace a procvičíme jejich výpočty. Dále si řekneme, co je to integrál, jak se definuje a počítá. Na závěr si ukážeme, k čemu je to všechno dobré v reálném či středoškolském světě – „rychlé“ odvozování fyzikálních vzorců, grafy funkcí, všemožné optimalizace.
Ukážeme si, co se stane, když začneme počítat s čísly mimo reálnou osu: co je to imaginární jednotka a jak se s ní počítá, komplexní čísla a počítání s nimi v algebraickém, goniometrickém a exponenciálním tvaru, dále převod mezi těmito tvary. Zobrazení a výpočty v Gaussově rovině. Také si řekneme, k čemu se komplexní čísla dají použít v praxi. Pro fajnšmekry lze doplnit o výpočet (reálných!) integrálů pomocí komplexní roviny a reziduové věty.
Jak s pomocí počítače odhadnout integrál, aniž bychom počítali primitivní funkci? Jak naprogramovat řešení diferenciálních rovnic? Stručně se podíváme na metody numerické integrace (deterministické i Monte Carlo), jednokrokové metody řešení obyčejných diferenciálních rovnic a analýzu jejich vlastností. Na závěr ukážeme aplikace ze simulací reálného světa.
Předpoklady: DIFFExistenci slona v Africe snadno dokážete tím, že ho přivedete. Jak ale ukázat, že tam žádný slon není, případně že sice je, jenže ho nejde najít pomocí pravítka, kružítka a jeepu? Přímo se to dělá těžko, ale existuje spousta krásných triků, jak neřešitelnost problémů dokazovat. Nesložitelné hlavolamy, nerozvázatelné uzly, nepopsatelná čísla, neroztřetitelné úhly, nealgoritmické problémy a jiné slasti nekonstruktivní matematiky. Jak naopak ukázat, že něco existuje, aniž bychom věděli, jak to vypadá?
Středoškolská kombinatorika bývá otravnou „zoologií“ plnou pojmů a vzorečků. My si místo toho ukážeme přístup k počítání založený na elegantních úvahách. 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 a rekurentní rovnice. Také zajdeme na návštěvu k Dlouhému a Širokému a za poněkud zmatenou šatnářkou.
Kolik existuje binárních stromů? Kolika způsoby jde uzávorkovat výraz? A kolika způsoby projít čtvercovou mřížku, aniž bychom překročili úhlopříčku? Kam oko pohlédne, všude se skrývají Catalanova čísla. Kromě případů, kdy za ně zaskakují čísla Fibonacciho. Povídání o dvou zajímavých posloupnostech a jejich početném příbuzenstvu. Dlouhá cesta od hezkého vzorečku k rychlému algoritmu.
Hledáme eleganci každodenní matematiky. Množina s jednou binární operací a přirozenými axiomy: od grupoidu přes monoid a pologrupu k celogrupě. Počítání modulo x aneb cyklické grupy. Eulerova funkce φ a proč jsou prvočísla krásná. Dělitelnost jak ji neznáme a Euklidův algoritmus. Plus mínus krát rovná se okruh, okruh plus děleno rovná se těleso, a těleso je buď nekonečné, nebo elegantně jednoduché. Obecná algebra: zobecnění zobecnění. RSA.
Fyzikální přednášky
Podíváme se na chování našeho světa v rozměrech menších než je atom, kdy je třeba opustit klasické představy a vše popisovat kvantově. Zavedeme vlnovou funkci a pokusíme se ji interpretovat, podíváme se na Schrödingerovu rovnici popisující její vývoj a relace neurčitosti. Jak nahlížet na paradoxy jako je Schrödingerova kočka či kvantové tunelování. Stručně se podíváme na kvantové počítače a kvantové výpočty molekul.
Motivační přednáška o tom, jak se programují fyzikálně věrohodné modely reality. Stručně projdeme úlohy mechaniky kontinua (proudění tekutin, pružnost), molekulární dynamiku, kvantovou mechaniku či jejich kombinaci, úlohy v mechanice těles, optimalizace a další. Některé modely na místě vytvoříme a podíváme se, jak fungují.
Předpoklady: Letmá představa o tom, co je derivaceNematfyzácké přednášky
Nezávazné povídání o Matfyzu a základním matfyzáckém folkloru. 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.
Trocha teoretického vyprávění o tom, jak je lezení po skalách a výškách zajímavé i po technické stránce. Ukážeme si, jaké uzly se hodí znát, jaké raději zapomenout, či jak vyrobit štand (a co to vlastně je). Povíme si o skládání sil, o nosnostech částí jistících systémů a pevnostech v různých směrech. A že je třeba nosit helmu, nebo vám na hlavě přistane vepřová kost. A že nejen správci sítě znají termín „redundance“.
Předpoklady: Základní představy o fyzice.Evoluční teorie je asi jedním z největších převratů v lidském náhledu na svět. Jak se na takovou věc vůbec přišlo, proč to tak dlouho trvalo a proč si myslíme, že je to pravda? Jak si to vše alespoň trochu představit? Mnoho nečekaných překvapení, informatické a fyzikální souvislosti. Proč jsou stromy vysoké, jak souvisí pohlavní rozmnožování s počítačovou bezpečností, co má evoluce společného s Windows a co s halting problémem?
Předpoklady: Základní přednáška nevyžadující předchozí biologické znalosti.Kdo, proč a jak se nás o ně snaží připravit? Co o vás ví Google, Facebook, Apple či NSA a jakou nad vámi mají moc? Kdo může z vašeho telefonu vzdáleně číst a mazat data? Čím hrozí „kyberzákony“ a mezinárodní dohody? DMCA, SOPA, ACTA, TT(I)P a další. Bude Hollywood rozhodovat o tom, co (ne)smíte vidět na internetu a Microsoft o tom, jaký software (ne)smíte používat? Proč je často protizákonné upozornit uživatele na bezpečnostní chyby? A kdy váš to vše může stát život?
Ach ne, co se všemi těmi penězi? Tady se dozvíte, jak a kde se dá dneska smysluplně investovat a co od toho můžeme očekávat. Řekneme si, co je to inflace, dluhopis, komodita, akcie, opce, index a dividenda. Na příkladech poznáme běžné charakteristiky cenných papírů a jak je výhodně používat.
Povídání o různých aspektech živení se softwarem. Jak se pracuje v malých, středních a gigantických firmách, jak si vybrat a jak se do nich dostat? Jak může vypadat 15 let kariéry? Vyprávění zkušeností z Googlu a z Dropboxu, o startupech, o Křemíkovém údolí a vůbec.
Volné povídání o tom, co se všechno skrývá za organizováním různých seminářů a podobných akcí, primárně pak KSPčka. Jaká práce, jaké radosti a jaké starosti s sebou organizování nese, co se přitom člověk může naučit a také pár cenných rad do života. Jak se z toho nezbláznit a pár bláznivých příhod k tomu.
Pobavíme se o základech první pomoci. Jak správně vyhodnotit situaci a kdy je potřeba volat pomoc? Jak se postarat o člověka v bezvědomí, jak kontrolovat životní funkce a jak člověka stabilizovat do příjezdu pomoci? Ukážeme si, jak málo stačí k záchraně života a naučíme se nebát se první pomoci. A také, že naše bezpečí je v každé situaci na prvním místě.
Technické objevy v různých sci-fi (Star Trek/Gate/Wars i dalších) a pohled na ně z perspektivy dnešních fyzikálních znalostí. Proč se v Hollywoodských filmech ozývá ve vesmíru zvuk laserů, i když je tam vakuum, a je možné cestovat rychleji než světlo? Také možná zabrousíme do některých filozofických otázek – primární směrnice o nevměšování ve Star Treku a jiné.
Pojďme si společně hrát s jazyky. Pokusíme se rozluštit útržky více či méně obskurních (a více či méně existujících) jazyků; přelouskáme také pár korektních, ale hlavu motajících konstrukcí v jazycích pro nás zcela běžných. U toho probereme některé zajímavé vlastnosti, které jazyky mají, a přihodíme různé perličky, kterými se exotičtější jazyky liší od těch pro nás méně exotických. To vše zejména prakticky a hravě.
Cestování po železnici už dlouho patří do života mnoha z nás. Kolik o ní ale víme? Trocha historie, zajímavosti z předpisů, pár pohledů za hranice. Jak se staví trať, jak vlak a jak to všechno, když už to je hotové, skloubit do fungujícího systému. Čím se zajišťuje bezpečnost (a jak může z pohledu systému vlak prostě odletět) a k čemu jsou všechna ta návěstidla u tratí.
Ruce programátora patří na klávesnici, přesto se spousta věcí běžně dělá pomocí myši. Pojďme se podívat na programy, které s ovládáním klávesnicí počítají, a triky na ty ostatní. Spíše diskuse než přednáška, postřehy a zkušenosti všech zúčastněných jsou vítány.
Běžný člověk má spoustu práce a úkolů a někteří lidé mají také spoustu starostí s tím, jak to všechno zvládat. Návod na štěstí vám nedáme, ale ukážeme vám kupu prostředků, které jiní s úspěchem používají (a jiní je nechápou). Malé ztrácející se papírky, velké neztrácející se papíry. GTD, myšlenkové mapy. Pomodoro. Časové snímky. SMART, KARAT a další zásady. Pár slov na téma lenora versus prokrastinace. To vše tedy od člověka, který by měl úkoly dělat ne včera, ale před týdnem.
Workshop pro odreagování z přednášek. Vysvětlíme si pravidla řeckořímského zápasu a „šermu“ s „dřevárenskými“ zbraněmi, povíme si, jak se při soubojích nezranit a oboje vyzkoušíme v praxi. Zájemci nechť přijdou v oblečení, které může přijít k újmě na celistvosti.
Předpoklady: Žíněnky nebo suchý venkovní plácekVše o hudební teorii, co jste ve škole nechápali a báli jste se zeptat. Ve svižném tempu si zadefinujeme tóny, intervaly a stupnice a ukážeme si, jak to celé souvisí s matematikou. Po troše nadávání na klasickou hudební notaci se přesuneme k akordům a základům harmonizace v evropské hudbě. Zahrajeme si pár čtyřakordových písniček a třeba složíme i nějakou vlastní. Vhodné jak pro hráče na hudební nástroje, tak ostatní, pro které byla hudba dosud velkou záhadou.
Malá inventura zvuků, které lidé dovedou vytvářet, a jejich použití v komunikaci. Různé způsoby vytváření a modulace zvuku. Kolik různých B dokážete říci? Fonetické kontrasty a co si z nich různé jazyky vybraly. Rázy, polosamohlásky a jiní obyvatelé polosvěta. Přízvuk kontra délka. Asimilace, přehlasování a další „principy líné huby.“ Vše prakticky procvičíme.
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 (z)kreslení. Jak se neztratit v kartografii. Praktické cvičení v terénu.
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.