Klikni na název přednášky pro podrobnější informace.
Ostatní programovací jazyky
C#
Jestli tomu někdo řekne cé-křížek, bude psát nadosmrti v jávě!
C# je všestranný moderní jazyk - dají se v něm psát weby, GUI aplikace, ale i distribuované nebo výkonné služby. Navíc je z velké části multiplatformní. Ukážeme si zejména vychytávky, díky kterým se v C# píše pohodlně. A vyslovuje se to sí-šárp.
Java
Jsou chvíle, kdy je ukecaný jazyk výhodou...
Od bankovních systémů a oblíbených vývojových prostředí, přes hry až po mobilní aplikace. To vše nám zajišťuje Java. A co je na tom nejlepší? Aplikace jsou multiplatformní a běží téměř všude. Navíc díky rozsáhlé standardní knihovně s minimem externích závislostí. Společně se podíváme na základy jazyka a pustíme se do nejdůležitějších částí standardní knihovny - na práci s datovými vstupy a výstupy a na použítí základních datových struktur.
Pokročilejší Java
I v Javě se dá kód napsat kompaktně.
Když už umíme v Javě napsat něco jednoduchého, pojďme se podívat na některá zákeřnější zákoutí jazyka. Co ví Java v čase překladu, co je uloženo v bytecode a co lze zjistit za běhu. Reflexe. Jak v Jave fungují generika, jak psát generické datové struktury. Záludnosti typového systému. Anotace.
Perl
Jak Pejsek a Kočička vymýšleli programovací jazyk
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.
Logické programování
Detektivem za 90 minut.
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.
Různé
3D tisk
Vše, co potřebujete vědět, abyste mohli tisknout ve 3D.
3D tisk je tu s námi už nějakou chvíli. Pojďme se ohlédnout, kam se stihl posunout. Prozkoumáme nové technologie, principy a co vše dnes 3D tiskárna dokáže. Také se budeme věnovat aktuálnímu trhu a na co si dát pozor při pořízení 3D tiskárny.
Biologie očima programátora
Ti tu nemoc klidně fixnu, jenom dej zdrojáky... oh wait
Nebudeme se učit druhy kytek, ale radši zabrousíme do toho jak fungují buňky - v čem jsou vlastně podobné počítačům a v čem rozhodně ne. K čemu je DNA. K čemu je RNA, i když je to skoro to samé, co DNA. Co se dá zjistit jejich sekvenováním. Proč má skládání proteinů takový hype. Proč se většina léků dnes váže na proteiny, ale medicína budoucnosti *možná* bude spíše cílit na RNA nebo i DNA.
Technologie outdoorové výbavy
Když já zase nevím, co si mám vzít na sebe!
Také u outdoorové výbavy se můžeme bavit o technologiích. Pojďme si v nich udělat pořádek. Bavlna, vlna nebo polyethylen? A co peří? Titan, hliník, ocel nebo uhlík? Tekuté, plynné nebo pevné palivo do vařiče? Co si sebou vzít na vícedenní výlet po Čechách, co si naopak vzít za polární kruh do Norska?
Grafové algoritmy
Můj první algoritmus
Jak se neztratit v bludišti a pěkně si to utřídit.
To, co dělá programátora programátorem, není mlácení kódu. Je to řešení problémů. Společně se na některé jednodušší problémy podíváme. Necháme počítač vyřešit bludiště (aniž by se v něm ztratil). A pak ho necháme nějaké nové bludiště vymyslet. A vlastně, uměli bychom projít bludiště vždy nejkratší možnou cestou? Zkusíme také seřadit podle abecedy všechny účastníky tábora. Nebude to pomalé, když místo účastníků budeme řadit tlustou encyklopedii?
Úvod do grafů
Pojďme si hrát s obrázky.
Grafy jsou velice užitečná věc – nepředstavujte si ale barevné sloupečky a koláče jako v novinách. Informatické grafy jsou spíše spleť bodů a čar. Vysvětlíme si, k čemu je to užitečné, jak grafy v programech reprezentovat a hlavně k čemu se dají použít: jak grafy procházet a jak v nich hledat nejkratší cesty.
Grafové algoritmy
Složitější operace s grafy. Hledání kostry, mostů a komponent souvislosti, topologické třídění, kreslení grafů jedním tahem.
Nejkratší a jiné cesty
Všechny cesty vedou do Horní Dolní, jen některé přes Řím.
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*). Souvislosti s násobením matic: transitivní uzávěr, Seidelův algoritmus, Kleeneho algoritmus a regulární výrazy.
Intervalové stromy
Já bych ty intervaly nejradši... dal do stromu!
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 je zkusíme implementovat.
Stromové algoritmy
Půjdeme na to od lesa.
Stromy jsou jednou z nejtypičtějších (a nejjednodušších) odrůd grafů. Ukážeme si pro ně různé triky: DFS očíslování, binární skoky, co s nimi vše lze dělat. Délky cest ve stromě rychle. Nejmenší společný předek v konstantním čase. Ukázky na úlohách.
Algoritmy
Základní algoritmy
Existují algoritmy, které zná každý pořádný programátor jako své boty. Jsou tak důležité, že mají i své jméno. Ty nejdůležitější si ukážeme: třídící (řadicí) algoritmy v několika verzích, backtracking a další.
Pokročilejší algoritmy
Další várka algoritmů. Vnější třízení, hledání mediánu v linearním čase, aritmetika s dlouhými čísly, vyhodnocování výrazů.
Ne až tak základní algoritmy
Pokročilá technologie není rozlišitelná od magie.
O algoritmech značně magických a nečekaných. Jak násobit n-ciferná čísla rychleji než v kvadratickém čase. Kouzlo na slévání setříděných posloupností v konstantním prostoru. Isomorfismus stromů pomocí přihrádkového třídění. Bitové kejklířství.
Jazyky, gramatiky a automaty
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?
Složitost algoritmů
Čím menší je časová složitost algoritmu, tím větší je složitost kódu.
Různé algoritmy řešící stejný problém mohou být různě rychlé a potřebovat různé množství paměti. Nazýváme to „složitost“. Během přednášky vysvětlíme rozdíl mezi problémem, algoritmem a programem a podíváme se, jak počítat časovou a paměťová složitost problémů i algoritmů.
Složitější složitost
Čím složitěji analyzujeme složitost, tím méně složitá vychází.
Jak poznat složitost u algoritmů, kde není vidět na první pohled. Triky pro počítání složitosti rekurzivních algoritmů. Techniky na přesnější odhady složitosti, když nám nejhorší případ nevyhovuje. Nakonec, jak se odhaduje složitost u algoritmů, které závisejí na náhodě.
Složeně složitá složitost
Drtivá většina problémů nelze vyřešit.
Jakmile si určíte, co vlastně počítač umí počítat, zjistíte, že toho spoustu nemůže umět. Jak přemýšlet o výpočetních modelech a jak jsou silné. Proč na každý vyřešitelný problém připadá nekonečně mnoho nevyřešitelných.
Komprese dat
Jnm idln kpln j nstlčtln.
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). Letem světem ztrátová komprese obrázků a zvuku (prediktory, wavelets, JPEG, MPEG, fraktály).
Kryptologie
Gbgb arav zbp gnwan mcenin.
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 jak si hodit korunou po telefonu. Předvedeme nerozluštitelnou šifru a dokonce to o ní i dokážeme. Nakonec si ukážeme, jak to celé funguje v praxi.
Programování s omezujícími podmínkami
Neumím řešit sudoku, ale znám pravidla!
Často se dostaneme do situace, kdy řešíme NP-problém (sudoku, barvení mapy n barvami) a musíme napsat spoustu stejného (boilerplate) kódu, který vůbec nezávisí na daném problému. Zde přichází na pomoc programování s omezujícimi podmínkami (CSP). Pomůže nám popsat podstatu problému a přitom se nezajímat o to, jak se daný problém bude řešit, ani zbytečnými implementačními detaily. Povíme se o základních technikách, které používají CSP řešiče, a popíšeme nějaký problém v řeči CSP.
Základní datové struktury
Jak si ukládat data tak, abychom měli vždy po ruce ta, která právě potřebujeme. Správně použitá datová struktura totiž rozhoduje, jak bude program rychlý. Vysvětlíme si frontu, zásobník a hashování.
Složitější datové struktury
Datové struktury, které už nejsou pouhým seznamem. Halda, vyhledávací stromy, trie.
Dynamické programování
Kampak jsem si to jenom schoval?
Spousta pomalých algoritmů se dá zrychlit tím, že si uvědomíme, že některé věci počítáme zbytečně a jiné víckrát. Když tuto skutečnost využijeme, dopustíme se dynamického programování a vyzrajeme na složitost algoritmu, byť za cenu třeba o něco vyšší spotřeby paměti.
Lineární programování v Pythonu
Ukážeme si, co je zač lineární programování a jak s jeho pomocí jednoduše formulovat a rychle řešit těžké problémy (batoh, barvení grafů, apod.). Budeme používat programovací jazyk Python a knihovnu Pulp. Předpokládá se základní znalost Pythonu.
Plánování v multi-agentních systémech
Jakým způsobem je zařízeno, že se autonomní roboti ve skladu pohybují a nenarazí do sebe? Problém pohybu robotů v automatizovaném skladu je jednou z konkrétních aplikací problému hledání bezkolizních cest pro skupinu agentů, tzv. Multi-agent path finding problem. Povíme si, jaké problémy s sebou plánování v multiagentních systémech přináší a ukážeme si několik různých algoritmů na plánovaní bezkolizních cest.
Přírodou inspirované algoritmy
Příroda je nádherná. Celá tisíciletí se jí inspirují spisovatelé, básníci a malíři. Nyní jsou na řadě programátoři. Nevíme si rady s těžkým problémem? Zkusme nenápadně opisovat od přírody.
Hledání v textu
>>Vyšíváme v seníku!<< – kde jsem to jen viděl?
Vyhledávání čehokoliv ve velkém množství textu. Prostá vylepšení hledání hrubou silou (Karp-Rabin) a algoritmy chytřejší – Knuth-Morris-Pratt, Aho-McCorasicková.
Principy počítačů
Principy počítačů
Jak počítá počítač?
Z čeho se skládají moderní počítače a jak to, že na nich běží naše programy. Jak funguje procesor, co je to instrukční sada, registry a výpočetní jednotky. Jak si počítač pamatuje data a jak ví, kde co najde. Povíme si také pár slov o architekturách Intel x64, ARM a malých a velkých indiánech.
Principy počítačů 2: Procesory a architektury
Kdepak gotika a baroko. Počítačové architektury!
Podrobnější pohled na moderní i historické procesory. Povíme si trochu teorie (Von Neumann a Harvard, RISC a CISC, skalární a vektorové procesory), řekneme si, jak do toho zapadají či nezapadají některé známější procesory. Poskládáme více procesorů dohromady, přidáme paměť a keše a podíváme se, co to udělá s výkonem. Padnou pojmy jako SMP a NUMA a koherence keší. A pokud zbyde čas, zkusíme vymyslet, jak moc to celé žere energii a jak to narvat do mobilu.
Jak postavit rychlý procesor
Stručně si připomeneme, jak vyrobit procesor, a půjdeme ho zrychlit. Proč nejde jednoduše zvýšit frekvenci, a jak to přesto udělat. Jak ušetřit čas při přístupu do paměti, na co je ta slavná predikce skoků a jak se dá spouštět víc instrukcí najednou, i když se mají spouštět po sobě. Jak pokračovat v programu, i když nám paměť ještě nedodala data, a spouštět instrukce podle toho, jak to zrovna vyjde.
Elektronika pro začátečníky
K tomu, abyste si mohli "bastlit" vlastní hardware, je potřeba znát základy elektrických obvodů. Povíme si, co je to elektrický proud a napětí a jaký je mezi nimi rozdíl, co je to odpor, jak to všechno změřit a jak to spočítat. Vysvětlíme si zákony pánů Ohma a Kirchhoffa.
Programujeme Arduino
Arduino je malý počítač (ale fakt malý), pomocí kterého můžeme svým elektrickým obvodům přidat "rozum". Můžeme reagovat na tlačítka, teplotu, světlo, atd. a podle toho blikat kontrolkami, ukazovat něco na displeji, pípat, ... Přednáška vyžaduje alespoň základní znalosti elektroniky (na úrovni přednášky Elektronika pro začátečníky) a alespoň základní znalosti jazyka C (přednáška Úvod do jazyka C).
Digitální elektronika a hradla
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.
Z tranzistoru počítač
Abstrakce v praxi.
Z tak jednoduché součástky, jako je tranzistor, postavíme celý procesor a přilehlá okolí. Vyrobíme paměťovou buňku, z ní registr a z registrů čítač nebo adresovatelnou paměť. Naučíme tranzistory sčítat, násobit a možná i dělit. Proč nám tohle stačí, abychom to pojmenovali CPU.
Operační systémy a překladače
Kompilátory
Jak se dělají kompilátory (a nebo komplikátory?)
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 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.
Knihovny, závislosti a API
Nahradíme jednu skupinu bezpečnostních chyb jinou skupinou!
Ve svých programech často používáte knihovny, které napsal někdo jiný. Povíme si, jakým způsobem jsou knihovny s vaším programem propojeny. Vysvětlíme rozdíl mezi dynamickým a statickým linkováním, proč se historicky prosadilo dynamické linkování a proč se nové jazyky typu Rust a Go rozhodly linkovat staticky. Připočteme k tomu lenost programátorů přemýšlet nad dobrým návrhem API a nahlédneme do temné budoucnosti plné bezpečnostních děr, které nám zmíněné jazyky přinášejí. Stranou našeho zájmu nezůstanou ani Python a Node.js.
Jak se spouští programy?
Dvakrát kliknu a běží, ne?
Co to reálně znamená, že se spustí nějaký program? Jaký je rozdíl mezi programem napsaným v Pythonu a Céčku? Čím je speciální ten zvláštní soubor, který jde spustit? Co o programu můžu zjistit ještě před jeho spuštěním? Podíváme se na to, co dělá program programem z pohledu uživatele i z pohledu operačního systému. Praktické ukázky budeme dělat na Linuxu, ale principy jsou stejné téměř všude.
Správa paměti
Když má program sklerózu…
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.
Optimalizace
Mám skvělý algoritmus, tak proč to sakra běží tak pomalu?
Role překladače při optimalizaci a jak mu usnadnit práci. Jak fungují cache a jak této znalosti využít. Proč zdvojnásobení počtu procesorů nezvedne výkon dvakrát. Přístup do paměti z více vláken, contention points, profiling. Lži, zatracené lži a benchmarky a co si z nich vybrat.
Operační systémy
Operačních systémů nejspíš znáte několik, ať už jsou to Windows, Linux, Android nebo MacOS X. Principy, na kterých fungují, jsou ale stejné. Vysvětlíme si, co to vlastně operační systém je, jaké funkce se od něj očekávají (a neočekávají) a jak je zajišťuje. Povíme si o některých zapeklitých problémech, které musejí autoři operačních systémů řešit, a proč je nutná podpora hardware, aby se nám programy navzájem nepozabíjely. A také trochu zavítáme do historie.
Operační systémy 2
Zavrtáme se hlouběji do toho, jak zajišťuje operační systém oddělení procesů a uživatelů a jak ovládá hardware. Povíme si více o virtuální paměti a tom, co je TLB. Jak se vyvolávají syscally, co se při tom děje a jak se zachází se zásobníkem. Co dělat s přerušeními a jak je zajištěn multitasking. Co se stane, když program sáhne tam, kam nemá, a na co nesmí sahat zase operační systém. Podíváme se na zoubek DMA a pokud zbyde čas, povíme si o plánování I/O operací.
Performance investigation aneb výzkum výkonnosti
Napsali jste si appku, ale ona je potvora nějak pomalá? Pokusíme se zjistit proč - jaké části žerou nejvíc procesoru, co se změnilo s určitou změnou, jestli se zbytečně nečeká a jak by se to dalo napravit. Ukážeme si hlavně nástroje jako `perf` na Linuxu, nebo PerfView na windows.
Real Time
Vyřízení interruptu se nestihlo, elektrárna vybouchne za tři, dva...
Kritické systémy nemůže řídit operační systém, jaký máte v mobilu. Ani ten, který máte na serveru. Povíme si, co je to Real Time OS a Real Time obecně. Jaké požadavky jsou na takový systém kladeny, a jak se zařídí, aby byly splněny. Proč se Real Time uplatňuje i v systémech, které kritické nejsou. Jaký je rozdíl mezi měkkým a tvrdým reálným časem. Jak se běžné operační systémy inspirují u Real Time operačních systémů.
Virtualizace
Ten počítač neexistuje!
Jak se vyrábí virtuální počítač, k čemu je to dobré a jak je zajištěno, že je to bezpečné. Proč mají procesory speciální podporu virtualizace a proč to jde i bez ní. A proč se přidává podpora virtualizace i do dalších hardwarových součástí počítače. Jak přestěhovat počítač a vyrobit virtuální počítačovou síť. Bonus: zapomenuté počítače aneb virtuální archeologie.
Programování na Windows pro Linuxáky
Když programátor přechází z Windows na Linux, zmizí mu tlačítko play ve Visual Studiu. Když ale přechází z Linuxu na Windows, hrozí daleko větší újmy. Ukážeme si specifika Windows programů, které Linuxák neočekává - duálnost řetězců v ABI, výjimky místo signálů (v C!), asynchronní IO, důležitost registru. Zcela se vyhneme grafickým rozhraním.
Počítačové sítě
Počítačové sítě
Víte, co je to kabelový přenos?
Základy fungování počítačových sítí. Nejdříve trocha historie: od kabelových přenosů k moderním přenosovým technologiím a Internetu. Rozebereme si síť na vrstvy (a nevrstvy) od drátů, přes pakety až k aplikačním protokolům. Načrtneme, jak počítače pospojovat dráty (takzvané síťové topologie). Jak to data dělají, že na síti nezabloudí. Pro zájemce na závěr rychlokurz krimpování konektorů na síťové kabely.
Počítačové sítě 2: Internet
Potřebujeme síť, která přežije nálet!
Jak funguje Internet a proč nemá problém s miliardami připojených zařízení. Protokoly IPv4, IPv6, TCP, UDP, HTTP, FTP a další. IP a DNS adresy, jejich přidělování a překlad (a nedostatek). Lehce naťukneme směrování a povíme si, co je NAT, jaké přináší problémy, a jak funguje firewall.
DNS
Neviditelný stín v pozadí Internetu
DNS je starý a přesto moderní protokol. Stojí na něm infrastruktura celého Internetu. Slouží k překladu adres, ale používá se nejen k tomu. Jak to funguje, když si chcete pořídit vlastní doménu, a co je k tomu třeba. K čemu všemu může doména sloužit.
Drahoušek zákazník.
Co 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. Co to jsou za divná políčka, která musíte ve svém klientu nastavovat. Jak odeslat e-mail bez klienta tím, že ho nadiktujete serveru. Nakonec, proč jsou e-maily na webu ošklivý zlé nepěkná věc.
Web uvnitř
Error 402: Payment Required. Please insert a coin.
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 nebo DELETE. Na čem všem závisí obsah webu, aneb důkladný rozbor požadavku klienta. Ukládání dat po cestě – různé druhy proxy serverů a cache. SSL/TLS, HTTPS a HTTP/2.0.
Konfigurace Internetu
Nebudu se s tebou bavit, nemáš IPv6.
Vysvětlíme si základní dovednosti správce počítače připojeného k síti. Jak nakonfigurovat počítač, aby po internetu komunikoval, a jak zjistit, kde je problém, pokud něco nefunguje. Jak získat IP adresu a kam ji strčit. Anebo jak si ji vymyslet. Jak zajistit, že si popovídáme s počítači na lokální síti a jak se z ní dostat na Internet. A proč na to máme hned dva různé IP protokoly. Jak se hraje na síti ping pong a jak sledovat, kudy se naše data vydala. Pořádáme LAN party s minimálním vybavením.
Architektura Internetu
Kudy vede cestička pro moje datíčka?
Jakmile se Internet trochu rozrostl, začala být ruční konfigurace počítačových sítí neúnosně otravná a kabeláž neuvěřitelně spletitá. Postupně tedy vznikaly routovací protokoly, díky kterým se počítače domlouvají (částečně) automaticky. Předvedeme si, kudy běhají vaše data poté, co opustí váš domácí router, a co si všechno musí routery domluvit k tomu, aby je Internet doručil na správné místo.
Tunelování síťového provozu (VPN)
Jak zařídit, aby na sebe počítače v různých sítích viděly, aniž by je viděl úplně každý. Bezpečné brouzdání z nedůvěryhodné sítě. OpenVPN, IPSec nebo třeba moderní WireGuard.
Linux
Linux
Myši zahoďte, nebudeme je potřebovat.
Použití Linuxu z pohledu zkušenějšího uživatele. Jak se používá příkazový řádek (neboli shell), základní příkazy, adresářová struktura. Jak pracovat s více soubory najednou a jak spojovat příkazy dohromady.
Linux 2: skripty
To si tak spouštím program a najednou koukám, že programuju.
Složitější použití příkazového řádku, které je už vlastně programováním. Proměnné, cykly a podmínky. Skripty a jejich parametry. Všemožné mocné nástroje na zpracování dat.
Linux 3: programování
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, vyrábět děti a další.
Linux 4: Komunikace po síti
Jak si dva programy můžou povídat, aniž by k tomu potřebovaly megabajty knihoven. Jak nám to pradědečkové UNIXu vymysleli, aby se povídalo pohodlně. Vyzkoušíme si otevřít trubku mezi dvěma programy na stejném počítači, z trubky uděláme zásuvku a programy spustíme jinde. Co k tomu potřebujeme a kde se to může pokazit.
Python
Programovací jazyk Python
Základy programování v Pythonu. Ukážeme si, jak používat interaktivní interpretr, jak zapsat podmínky a cykly, jak fungují proměnné a jaké mají typy, speciálně pak řetězce, pole a slovníky. Nejdůležitější funkce ze standardních knihoven.
Programovací jazyk Python II.
Zajímavé triky jak si usnadnit práci s poli, slovníky, funkcemi atd. v Pythonu.
Objektové programování v Pythonu
Objektové programování se hodí překvapivě často. Čím se liší od „normálního“ programování? Řekneme si, co jsou to objekty a jak se používají. Jak si vyrobit vlastní třídu a jak z ní vyrobit objekt. Jak se třídy dědí a jak si objekty předávat. A prozradíme si malé tajemství: v Pythonu je všechno objekt.
Nízkoúrovňové jazyky
Úvod do jazyka C
Základy programovacího jazyka C. Jak zapsat funkce, podmínky, cykly a bloky. Jak se definují proměnné a jaké mají typy. Jak fungují řetězce a pole. Nejdůležitější knihovní funkce.
Více o jazyku C
Složitější konstrukce v Céčku: vedlejší efekty a nedefinované chování, datové struktury, dynamická alokace paměti a ukazatele. Dělení programu do více souborů. Ještě více nejdůležitějších knihovních funkcí.
C for wizards
1[x]+++++x[1]
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 přes dlouho nový standard C99 k ještě novějšímu C11.
Generika a objekty v C
Má C typovou kontrolu? Ano, ale jen občas.
Co je to generická struktura, jak v C napsat spojový seznam, spojovou mřížku, kde se do toho hodí void *, dědičnost a polymorfismus (ano, v C) a preprocesor. Šablony v C++ a v C, aneb neexistuje věc, která by nešla napsat, jen existuje spousta, které se nevyplatí. Jak to řeší jiné jazyky (Java, C#) a jakou za to platíte cenu. Proč jsou objekty potřebnější v mysli programátorově než v jazyce.
Základy jazyka C++
Základní exkurze do jazyka C++ - jazyka, po kterém sáhnete, když skutečně potřebujete výkon. Dává totiž daleko větší kontrolu nad tím, co se kdy bude v systému dít a jak. Není to jazyk pro pohodlné programátory, o to více se jeho znalost cení. Vhodné pro kohokoli.
C++ 2: nutné dovednosti
Destruktory polymorfních tříd musí být virtuální.
Napsat kus programu v C++ je jednoduché. Jak ale napsat kus dobrého C++ programu? Jak zařídit, aby vaše datová struktura nikdy zbytečně nekopírovala paměť, byla generická a ještě k tomu počítala s výjimkami? Aneb reference, move sémantika, šablony kódu a RAII. Vhodné pro ty, kteří už se s C++ setkali.
C++ 3: temná zákoutí
Šablony. Šablony všude. Čím výkonnější systém musí být, tím více práce se musí udělat v době překladu. Ukážeme si, jak nechat překladač spočítat třeba Fibonacciho čísla, nebo jak na překladači nechat polymorfismus.
Ukazatele v C
a->a->a->a->a-> ...
Povíme si, co jsou to ukazatele (pointers, pointery) a k čemu jsou dobré (v jazyce C). Vysvětlíme si předávání parametrů odkazem a hodnotou, podíváme se pod zoubek pole, ukážeme si trochu té pointerové aritmetiky a vytvoříme si struktury využívající ukazatele.
Funkcionální programování
Úvod do funkcionálního programování skrze Haskell
Funkce jsou všude!
Téměř všechny programovací jazyky mají funkci main, ve které je kód, který vykonává celý program. V Haskellu je ale main proměnná, do které se přiřadí popis toho, co má program dělat. Samotný Haskellový kód není posloupnost příkazů, ale deklarace výsledného efektu. Ukážeme si obecné principy funkcionálního programování. Funkcionální přístup s sebou nese mnohé výhody, které si v průběhu přednášky popíšeme. Určitě pak najdete podobnosti s mnoha novými funkcemi běžných programovacích jazyků.
Funkcionální prvky jazyka Python
Krátíme a zpřehledňujeme Pythoní program.
Funkcionální programování je natolik krásný nástroj, že už není výsadou jen čistě funkcionálních programovacích jazyků, ale například i jazyka Python. Ukážeme si, že umět trochu funkcionálně programovat nám může pomoci vyřešit spoustu zajímavých úloh elegantně a často „na jeden řádek“. Kurz je určen i pro ty, kteří nikdy neprogramovali funkcionálně, předpokládá se pouze základní znalost Pythonu.
Scala
Taková lepší, nejenom kratší, Java
Scala je funkcionální programovací jazyk běžící na stejné platformě jako Java. Dají se používat všechny Javové knihovny, i synaxe je Javě podobná. Scala ale nabízí mnohé pokročilé funkce podobné třeba Haskellu. Ukážeme si, jak toho využít a ušetřit si psaní otravného kódu. Také se funkcionálním programováním zbavíme mnoha častých zdrojů chyb, jako jsou NullPointerException, race conditions a nečekané vedlejší efekty.
Paralelní programování
Asynchronní programování
Po přestávce mě probuďte, budeme pokračovat.
Iluzi toho, že počítač dělá několik věcí najednou, za nás obvykle řeší operační systém pomocí vláken. Pokud ale potřebujeme dělat stovky věcí "najednou", může pomoci si vlákna odlehčit a přenést do programu samotného. Jaké techniky se pak používají a jak se z toho nezbláznit. Asynchronní vstup a výstup, podpora pro asynchronní programy v různých jazycích, sliby, propagace chyb. Co dělají klíčová slova async a await, která se teď v jazycích objevují.
Událostmi řízené programování
To vám byla, milá paní, taková událost.
Jak dokázat reagovat na uživatele, zprávy od jiných programů či od připojeného hardware a na síťovou komunikaci současně v jediném programu. Proč bývá GUI program řízený událostmi, proč je to dobré i pro ne-GUI programy a proč je to naprosto nutné u embedded zařízení. Jak nám k tomu pomůže objektové programování, proč není nutné a k čemu je v některých jazycích slůvko async. Jak zařídit, aby náš program nevyžral baterku notebooku do patnácti minut. Co dělá Arduino špatně, proč nepoužívat Arduino IDE a jak zařídit, aby zařízení dokázalo běžet několik let na pár tužkových baterek.
Multithreading
K čemu je programu více vláken a jak zařídit, aby si vlákna vzájemně nešlapala po nohách. Úlohy vhodné k paralelizaci a kde to nemá smysl. Problémy s paralelním přístupem ke zdrojům a jak je řešit. Co jsou synchronizační primitiva, kritické sekce a bariéry a k čemu jsou volatile proměnné. Co je to deadlock a proč je noční můrou mnoha vývojářů. Proč nám knihovny házejí klacky pod nohy.
Umělá iteligence
Jak hacknout AI
Neuronové sítě se někdy tváří jako všemocný nástroj na (skoro) všechny problémy světa. Trpí ale jedním neduhem, stačí jim trochu pozměnit vstup a úplně je tím zmást. Poštelováním těch správných pixelů lze kočičku na fotce udělat pro neuronku neviditelnou. A co hůř, tahle změna je mnohdy pro člověka příliš malá a neviditelná. Zarytý kočičák tak může i nadále postovat fotky svého oblíbeného domácího mazlíčka na socialních sítích, kde jsou kočičky zakázány.
Herní algoritmy
Když nemáte na to, abyste vyhráli šachový turnaj.
Povídání o tom, jak programovat počítačové soupeře do šachů a her jim podobných. 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 tedy ještě pravděpodobnostní přístup Monte Carlo Tree Search.
(Ne)bezpečnost umělé inteligence
Můžu věřit svému inteligentnímu toustovači?
Žijeme ve světě, kde je umělá inteligence čím dál častější. S adaptací nových technologií ale přichází i nová rizika. Na této přednášce si ukážeme, jaké jsou limity umělé inteligence a naší schopnosti ji regulovat, a to na konkrétních případech. Pokusíme se zjistit, jestli umíme vyrobit autonomní stroje, aniž bychom omylem vyrobili Skynet.
Strojové učení
Nechme stroje se samy učit.
Co je to strojové učení? Jaké typy strojového učení existují? Začneme u jednoduché lineární regrese, přes perceptron až skončíme u kouzelného slovíčka neuronové sítě, konkrétně u feed-forward sítí. Pak si odskočíme k algoritmu, který nepotřebuje kromě surových dat nic navíc a dokáže dělat užitečné věci.
Strojový překlad
Google překladač sice umí být dobrým pomocníkem, ale českou slohovku nám do cizího jazyka moc kvalitně nepřeloží. Co je na strojovém překladu tak těžké? Povíme si, s jakými problémy se musíme při strojovém překladu vypořádat. Podíváme se, jak se texty překládaly dříve a ukážeme si, jakou roli dnes ve strojovém překladu hrají neuronové sítě.
Neuronové sítě
How to train your neural net
Co jsou to vlastně ty neuronové sítě, o kterých všichni mluví? Jaký typ problémů neuronkám chutná a kde je vhodnější tradiční programovací přístup? Jak síť rozpozná pejska od kočičky? Co to je back-propagation, feed-forward net, CNN, RNN... Podíváme se sítím na jejich axony a možná zjistíme, že vlastně zas až tak chytré nejsou.
Počítačová lingvistika
Co dobrého může vzejít z propojení informatiky a lingvistiky
Pojďme společně nahlédnout pod pokličku počítačové lingvistiky a počítačovému zpracování přirozeného jazyka. Podíváme se na vlastnosti přirozených jazyků a povíme si, jak moc jednotlivé vlastnosti komplikují počítačové zpracování. Ukážeme si také několik praktických aplikací počítačové lingvistiky - kontrolu pravopisu, strojový překlad a konverzaci s uživatelem (neboli chatboty).
Zpracování velkých dat
Julia
Python je pomalý a v Céčku si grafy kreslit nechcete
Julia je relativně mladý dynamický skriptovací jazyk zaměřený na zpracování dat, strojové učení a matematiku. I když má trochu jinou syntaxi než Python nebo Rko, je jimi inspirovaný; dokonce můžete přímo volat Pythoní a Rkové knihovny. Na rozdíl od Pythonu je ale silně typový, což umožňuje efektivní JIT (tedy kompilaci na efektivní strojový kód za běhu). Jinak má, co byste od moderního jazyka čekali: funkce, lambdy, vlastní operátory, objekty, pole a spoustu knihovnen.
Vizualizace a zpracování dat v Pythonu
Pro python existuje hromada knihoven a nástojů na snadnou práci s daty. Ukážeme si, jak jednoduše načítat CSV a jiné tabulky, jak spojovat data z několika tabulek. Jak rychle pracovat s velkými poli, případně maticemi. Jak si nakrestit několik základích druhů grafů. Z technického hlediska se budeme zabývat knihovnami Pandas, Numpy, Matplotlib, Seaborn.
Weby
Django
Weby v Pythonu na počkání, brutality do tří dnů.
Jak napsat v Pythonu web snadno a rychle, tedy pokud na to mám server. Hrátky s databází bez bolení hlavy, přihlašování a komentáře bez jediného řádku kódu, administrační rozhraní vytvořené jediným řádkem. Šablony a oddělení kódu od vzhledu (aneb principy MVC a DRY).
Webové stránky s Jekyllem
100% Javascript free, bez přidaných CSS souborů a jiných barviv.
Na této (především) praktické přednášce si postavíme webovou stránku s Jekyllem, markdownem a malou špetkou HTML. Objasníme si při tom, co to jsou generátory webových stránek, k čemu v nich slouží templatovací jazyky a že k vytvoření dobře vypadajícího a lehce spravovatelného webu vlastně zas tolik magie potřeba není.
Jazyk SQL
SELECT something FROM knowledge LIMIT 90 min
Jazyk SQL a jeho aplikace. Jak ušetřit skriptu práci a sobě čas, aneb jak se zeptat rovnou na to, co chci vědět. K čemu se hodí složený dotaz a klíčové slovo JOIN. Kam až si můžu dovolit zajít, když nevím, na kterém systému to poběží.
Webové aplikace ve Svelte
Jeden z milionu způsobů jak dělat webové aplikace. A taky funguje...
Vždycky jsem webové appky lepil ručně v čistém JavaScriptu. A vždycky to fungovalo, tak proč se učit nějaký komplikovaný framework, který bude za rok nahrazen něčím jiným? Protože si ulehčím práci a zas tak moc si ji nepřidám. Podíváme se na webový framework očima člověka, co nikdy webové appky pořádně nedělal a stále preferuje příkazovou řádku. Určeno pro ty, kteří webové aplikace dříve neprogramovali. Předpokládáme pouze základní znalost HTML a JS.
Vývoj her
Základy programování GPU
Užitečné nejen pro hraní Factoria!
Pod pojmem GPU si většina lidí představí něco, co je užitečné pouze na vykreslování grafických prostředí, ale opak je pravdou. Na řadu problémů jako těžení kryptoměn a trénování neuronových sítí je jeho architektura vhodnější, než spouštění na CPU. Na této přednášce si ukážeme základy architektury CUDA, která je nejpopulárnější volbou pro programování GPU. Předpokládá se základní znalost C/C++.
Animace s Manimem
Znáte 3b1b?
Ukážeme si, jak vytvářet elegantní animace z pohodlí Pythonu s Manimem, knihovnou vytvořenou a popularizovanou Grantem Sandersonem (3b1b). Dozvíme se, jak animovat geometrické tvary, matematické výrazy, datové struktury a cokoliv dalšího, co nás napadne. Předpokládá se základní znalost Pythonu.
Psaní her v Pythonu
Vrrrm...
Knihovna Pygame slouží pro snadnou tvorbu her v Pythonu. Umožňuje pracovat s obrázky, zvuky, myší, klávesnicí i joystickem, řeší časování i detekci kolizí objektů, podporuje hardwarovou akceleraci a umí vás i vyfotit. To vše multiplatformně – pokud svůj program napíšete rozumně, poběží na Windows, Linuxu i Mac OS X. Ukážeme si, jak se s knihovnou pracuje a na co si dát pozor, pokud nechcete, aby vaše hra běžela pomaleji než slimáci.
Trigonometrie
Matematický základ pro vesmírné střílečky.
Škola je na vás příliš pomalá. Pokud chcete programovat zajímavé hry, potřebujete matematiku, kterou se vám na základní škole bojí říct. Pouze ty nejodvážnější školy ji opatrně zmíní v 9. třídě. A přitom to není matematika nijak těžká. Napravíme to. Zopakujeme si Pythagorovu větu (pro ty, co za sebou ještě nemají 8. třídu, ji vysvětlíme) a podíváme se zblízka na úhly v trojúhelníku. Představíme si goniometrické funkce sinus, kosinus, tangens a jejich inverzní (cyklometrické) verze.
Nástroje
GNU Autotools
./configure && make
Přestože dnes vznikají lepší nástroje na kompilaci programů, autotools se v unixovém světě nevyhnete. Jakmile váš program začne interagovat s prostředím, objeví se spousta problémů. Každá distribude ukládá soubory jinam, má knihovny jinde, jinak pojmenované, jinak verzované. Některé systémy neumí dynamické knihovny vůbec. Ukážeme si, jak poznat a přeložit software používající autotools, a kdy a jak je použít pro vaše programy.
CI v GitHubu a GitLabu
Continuous Integration (CI) v zásadě znamená, že po každé změně kódu se automaticky spustí sada testů. Řekneme si, proč je to užitečné a v praxi si ukážeme, jak si vlastní CI nastavit u projektu na GitHubu a v GitLabu.
Gdb a jiné ladící nástroje
Jak se ladí kytara, jak křišťálová koule a jak program (řazeno dle obtížnosti)
Kdo píše programy, které vždy hned fungují, ať se přihlásí. A kdo ne, ať se přihlásí na tuto přednášku. Ukážeme si několik nástrojů, jak si pomoci z nejhoršího. Mezi nimi třeba gdb, řádkový debugger (odvšivovač), strace, nebo valgrind. Kdy je použít a kdy se více hodí printf. Proč assert je tak užitečná věc.
Git a jiné systémy pro správu verzí
U svatýho tučňáka, kdo sem napsal tohle? Ono to tvrdí, že JÁ?!
Jak vyvíjet program delší dobu a nezbláznit se u toho. Udržování a nahlížení do historie zdrojového kódu. Pohodlné zálohování, sdílení kódu mezi více programátory a nebo třeba publikování aplikace - to vše v jednom. Spojování změn provedených v jiném čase, jinými lidmi nebo na jiné verzi programu.
Pokročilá práce s Gitem
U svatýho tučňáka, kdo sem napsal tohle? Ono to tvrdí, že JÁ?!
Když Gitu nahlédnete pod pokličku, bude se vám s ním daleko lépe pracovat. Jak Git funguje uvnitř: stromy, commity, větve, tagy. 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.
Neobvyklá práce s Gitem
Už jste se naučili svojí práci pravidelně verzovat v gitu? Tak se pojďme naučit něco navíc. Pokročilé upravování historie, rozdělování a slučování commitů, nebo třeba rozdělení repozitáře na dva (i víc), roubování. Submoduly, proč se jim vyhnout, a jak je používat když se jim vyhnout nelze. Vhodné i jako téma na půlnoční přednášku.
Make
make love ... don't know how to make love
Hodil by se otrok, který by překládal jednotlivé soubory. Základní syntaxe takového otroka, jak napsat jednoduchý Makefile, který řeší překlad Céčkového programu, automatické řešení závislostí. Jak to udělat, aby výsledek neměl několik tisíc řádek. K čemu všemu se dá takto jednoduchý mechanismus zneužít, a proč kvůli němu budete chtít programovat i obrázky.
Balíčkování
Napsali jsme kus kódu a rádi bychom se o něj podělili s ostatními. Jak vyrobit balíček z knihovny a z programu a v čem se budou lišit. Co a pro koho je snadné zabalit a kdy je potřeba víc práce. Kdy se na všechno vykašlat a zabalit celý svůj systém. Pár slov o reprodukovatelnosti balíčků a bezpečnosti balíčkovacích nástrojů.
Regulární výrazy (regexy)
Už jste někdy zkoušeli hledat v textu něco složitějšího, třeba všechna slova začínající a končící stejným písmenem? K tomu slouží regulární výrazy. Naučíme se je psát a používat pro vyhledávání a nahrazování. Jak vyhledat a nahradit různě šílené části, přejmenovat hlavního hrdinu nebo nahradit konstrukci v kódu za jinou konstrukci.
Textový editor Vim
Víš, jaký je nejlepší textový editor? Vim.
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.
Metodika programování
Jak se nestat vepřem
/* You are not expected to understand this */
Tvrdí se, že číst kód je mnohdy těžší, než ho psát – dokonce i po sobě, stačí krátká doba. Je několik obecně uznávaných pravidel, jak kód psát a jak ne, aby byl hezký a dobře čitelný. Od základních (rozumná pojmenovací konvence, systematické odsazování), až po to, kdy opravdu použít goto a jak napsat užitečný komentář nebo dokumentaci. K čemu je a není dokumentace v kódu.
Struktura programů
Když potřebujete komentáře, tak to asi máte blbě napsané.
Je dobrý nápad si udělat pole polí, kde první prvek je index předchůdce ve stromu, druhý prvek je první potomek, atd.? K čemu mají programovací jazyky funkce? Jak je správně používat, a jak taková hezká funkce vypadá? Jak si napsat vlastní datovou strukturu, podobnou těm ze standardní knihovny? Napsat program může být jeden velký problém, co tak na něj aplikovat metodu rozděl a panuj? Jak nechat nějaký problém vyřešit jinou část programu a dál se o to nestarat?
Programování v týmu
Přiznejte se, kdo z vás ten bug neopravil!?
Když je program na jednoho člověka moc velký, začne na něm pracovat lidí více. Tato přednáška bude pojednávat o tom, jak takový tým lidí uřídit, od dobrovolnických neřízených projektů po hierarchie. Které nástroje se k tomu hodí a co dělat, když je tým rozložen do několika časových pásem. Co je to agilní a extrémní programování.
Administrace a bezpečnost
Vícefaktorová autentizace
Co vaše banka dělá špatně. A jak snadno hacknout ověřování přes SMS.
Mnoho služeb dnes vyžaduje použití tzv. druhého faktoru pro přihlášení. Proč to dělají? A co to vlastně je, ten druhý faktor? Povíme si, jaká rizika skrývá používání tradičních hesel. Kdy má smysl dvoufaktorové či třífaktorové oveření uživatele. Že dvoufaktorové ověření neřeší všechny problémy, často dokonce neřeší vůbec nic a bez spolupráce uživatelů se z něj stává jednofaktorové. Které faktory dávají smysl a jaké jsou jejich slabiny. Jak to udělat tak, aby se dosáhlo svatého grálu bezpečnosti: systém jednoduší na používání a zároveň bezpečnější. FIDO2 a další a jak je nasadit na vlastním systému.
Cloud
Oblačno, místy mlha a občas zaprší nějaká data
Ať budete pracovat kdekoliv, s cloudem se potkáte. Povíme si, co to je, k čemu je to dobré a proč to vlastně všichni chtějí. Kdy cloud pomůže a kdy od něj s křikem utéct. Jaké cloudové služby používáte, i když o tom možná nevíte. Co s tím má společného virtualizace, chyby v procesorech a jedno knihkupectví. Co jsou zkratky SaaS, PaaS a IaaS.
Exploity, DoS a záludné chyby
Zajímavosti ze světa počítačové bezpečnosti, příklady typických chyb a jak se dají zneužít. Absolutní bezpečnost neexistuje, záleží jenom na tom, za kolik vám zabezpečovaná věc stojí. Spíše sbírka příkladů a historek než ucelená přednáška.
Jak zneužít přetečení bufferu
Ha, jsem root!
Buffer overflow (tedy zápis více dat do paměti, než bylo předpokládáno) je celkem častá chyba v programech s dalekosáhlými následky. Jde asi o nejčastěji zneužívanou chybu pro získání kontroly nad počítačem. Vysvětlíme si, co přetečení bufferu je a jak snadno šlo dříve využít. Podíváme se na dnes již běžně používané ochrany proti jeho zneužití (zejména non-executable stack a předávání parametrů v registrech) a jak je obejít. Zmíníme vtipné nápady, jako je Return Oriented Programming. A nakonec si posvítíme i na pokročilejší ochranu (address space layout randomization, shadow call stack, pointer authentication, branch target identification, atd.).
Ochrana informací obecně
Máme data, a co dál? Jak je ochránit, co to znamená a proč to nemusí nutně zahrnovat šifrování. Co všechno na informace může útočit a od kdy je jednodušší se smířit se ztrátou, než se snažit bránit.
Spravujeme domácí server
Kolik uživatelů ti nadává, tolikrát jsi adminem.
Na co myslet, chceme-li si provozovat na půdě server. K čemu nám může být užitečný. Přehled software pro služby, které se hodí - webové servery, mailservery, sdílení souborů, VPN, kecálky a další, jaké mají principy konfigurace. Správa uživatelů a zabezpečení, vzdálený přístup. Firewall.
Bezpečnostní chyby v procesorech
Díra sem, díra tam, hlavně, že to sviští rychle!
Moderní procesory jsou rychlé a ještě rychlejší. Dosahují toho mimo jiné tím, že odhadují pravděpodobný běh programu a vykonávají instrukce dopředu. Návrháři ale při tom jaksi zapomněli na bezpečnost... Vysvětlíme si, jak lze tohoto spekulativního vykonávání kódu zneužít pro nekalé účely. Povíme si o bezpečnostních chybách Spectre, Meltdown a dalších. A zkusíme si zaspekulovat, co přijde dál.
Secure Shell, aneb SSH
Už zase jsem si vypnul špatný počítač!
Standardní nástroj pro vzdálenou práci s Linuxovými a jinými UNIXovými stroji. Jak se připojit na konzoli jiného počítače, jak přes toto připojení vytvořit tunel a tímto tunelem procpat GUI, vytvořit nad ním proxy server nebo dokonce posílat veškerý síťový provoz. Jak se bezpečně přihlásit bez hesla a jak sdílet účty mezi lidmi i stroji.
Matematika
Úvod do algebry
Abstrakní nemusí být jen obrazy v Louvru.
Prvně si řekneme něco o motivaci a k čemu je dobrá abstrakce. Poté si zavedeme základy teorie grup. Naučíme se grupu poznat a ukážeme si, jak souvisí s prvočísly. Rzšíříme ji na abelovskou grupu. Na závěr vybudujeme algebraická tělesa a ukážeme si jejich aplikace.
Fourierova transformace
Chytrý trik pana Fouriera patří již dávno k matematické a fyzikální klasice. Převapivě se ale hodí i při programování: rychlé násobení polynomů a dlouhých čísel (dokonce v lineárním čase), digitální zpracování zvuku a obrazu (spektrální analýza či třeba komprese).
Úvod do fraktální geometrie
Návštěva pavilonu fraktalů v matematické ZOO.
Matematika a intuice za fraktální geometrií. Začneme jejím objevením a souvislostí s nástupem počítačů. Poté si ukážeme jednotlivé druhy fraktálních objektů a jak je vyrobit. Velmi letmo se dotkneme teorie míry. Na závěr si ukážeme aplikace v počítačové grafice a geografii.
Úvod do lineární algebry
Od řešení soustavy rovnic k vyrábění prostorů na míru.
Jemný úvod do lineární algebry: zavedeme si základní terminologii a vysvětlíme, jak řešit soustavy rovnic algoritmicky, jak pracovat s vektory a jak generovat prostor. Ukážeme si i základní tranformace a jejich popis maticemi.
Úvod do matematického modelování
Algoritmus na předpověď počasí má asi 10 řádků
Spousta problémů z reálného světa se dá relativně snadno simulovat... diferenciálními rovnicemi :| Ukážeme si, co to je derivace a co diferenciální rovnice, ale tím u teorie skončíme. Řešit je na papíře je hrůza, ale řešit je numericky počítačem, je až překvapivě jednoduché. Uvidíte, jak jednoduché je realisticky simulovat orbitální mechaniku, rychlosti chemických reakcí, elektrické obvody a nebo to slibované počasí.
Pravděpodobnost
Tato přednáška je nepravděpodobná s pravděpodobností 33 %.
Lehký úvod do teorie pravděpodobnosti. Naučíme se počítat s věcmi, které se jenom můžou stát - třeba kontrola revizorem nebo kolize v hešovací tabulce. Jak pravděpodobnosti sčítat, odčítat a násobit. Co to je střední hodnota, jak se s ní počítá a kdy nám to nestačí.
Statistika
zelené lentilky způsobují akné (p < 0.05)
Statistika není jen o spočítání průměru a mediánu, ale hlavně o rozhodování, zda naše představy odpovídají datům. Například můžeme chtít prokázat, že nějaká implementace algoritmu je rychlejší než jiná. Na to nestačí porovnat, jak dlouho běží - tím naměříme víc šumu než dat. Řekneme si, co je statistický test, co je p-value, co znamená, že experiment má 4 sigma... a na co se nenachytat.
Predikátová logika
Přijde vám algebra moc konkrétní a málo abstraktní? Pojďme si tedy zavést predikátovou logiku a ukažme si, jaké nové možnosti máme oproti výrokové logice. Ukážeme si, jak v predikátové logice fungují důkazy. Podrobíme celou matematiku drsným zátěžovým testům. Snad ji nerozbijeme moc.
Teorie množin
Potřetí to možná i pochopíte.
Matematické paradoxy a teorie, kterou musíme vybudovat, abychom uvěřili triviálním tvrzením. Základy axiomatické teorie množin, co nám axiomy přinášejí, dovolují a zaručují. Jak neztratit pevnou půdu pod nohama, když pracujete s objekty většími než nekonečno.
Výroková logika pořádně
Jak vyrobit matematiku?
Zkusme se podívat, jak vypadají nejhlubší a fundametální základy matematiky. V přednášce si zavedeme spoustu nových pojmů a zkusíme pochopit, co je to teorie a co je to důkaz. Varování: velmi technické.
Zákony a právo
Cenzura Internetu
K cenzuře Internetu sahá více a více států. Jak zdánlivě nevinné filtrování může vést k omezování svobody. Proč boj proti cenzuře na Internetu spojuje i nesmiřitelné konkurenty. Které státy cenzurují Internet, jak se to technicky realizuje, kolik to stojí, proč to nefunguje a jak to obejít. Jaké problémy přinese použití AI pro cenzuru. Cenzura Internetu v Česku.
Autorský zákon
Podrobné osvětlení českého (potažmo evropského) autorského zákona. Na co máme právo, co nesmíme, co je to užití díla a jak fungují licence. Bittorent vs. uložto. Jak a proč novináři lžou a jak je to jinde ve světě.
Licence, patenty a trademarky
Licence, copyrighty, patenty, trademarky a podobný obtížný hmyz. Jak se od sebe liší, kdy škodí a kdy pomáhají. EULA a open source licence. Co vědět o softwarových patentech a kdy je lepší nevědět. Zbraně hromadného ničení v rukou velkých firem a co je patentový troll. Jak fungují trademarky a kdy se jim lze smát. Autorské svazy, poplatky, mezinárodní smlouvy a další nepříjemnosti.
Open source a free software
Cože, ono se na tom dokonce dá vydělávat?
Jak open source software (OSS) funguje a jaktože funguje. Co je to ta „komunita“, o kterou zavadíte okamžitě poté, co k OSS přičichnete. Proč free software nutně neznamená „zdarma“. FSF, LF a další organizace. Licence a právní otázky.
Soukromí, jeho význam a jak si ho chránit
Jak nás dnešní technologie odposlouchává a jak jsou takto získaná data zneužitelná. (Spoiler: není to hezké.) Jak chránit sebe a své blízké.