PB173 Tematicky zaměřený vývoj aplikací

Fakulta informatiky
podzim 2025
Rozsah
1/1/0. 2 kr. (plus ukončení). Ukončení: k.
Vyučováno kontaktně
Vyučující
doc. RNDr. Petr Švenda, Ph.D. (přednášející)
Miroslav Jaroš (cvičící)
Ing. Pavel Tišnovský, Ph.D. (cvičící)
Bc. Stanislav Zeman (cvičící)
RNDr. Martin Ukrop, Ph.D. (přednášející), doc. RNDr. Petr Švenda, Ph.D. (zástupce)
Radomír Vrbovský (cvičící)
Bc. Vratislav Bendel (cvičící)
Izabela Bakollari (cvičící)
Carlos Eduardo Maiolino (cvičící)
Garance
doc. RNDr. Petr Švenda, Ph.D.
Katedra počítačových systémů a komunikací – Fakulta informatiky
Kontaktní osoba: RNDr. Martin Ukrop, Ph.D.
Dodavatelské pracoviště: Katedra počítačových systémů a komunikací – Fakulta informatiky
Předpoklady
( PB111 Principy nízkoúr. prog. || PB071 Principy nízkoúr. prog. ) && SOUHLAS
Předpokládá se znalost programovacího jazyka a operačního systému dle požadavků konkrétní skupiny. Povinnou prerekvizitou je výjimka udělená přednášejícím na základě odpovědí na motivační otázky specifické pro danou skupinu (detaily a postup naleznete v Archívu sdělení předmětu).
• PB173/Go (Coding in Go): student by měl ovládat základy programování, umět pracovat s jazykem SQL, a mít základní povědomí o sítích a virtualizaci (postačí na úrovni z předmětů IB111, PB154, PB156 a PB152)
• PB173/KDLP (Kernel Learning Development Pipeline): the class will be delivered in English, knowledge of the C language, basic knowledge about operating systems in general, practical skills in Linux operating system (e.g. Fedora, Debian, Slackware), basics of git
• PB173/SCR (Source Code Review): the class will be delivered in English, knowledge of the C/C++, python, and another language (e.g., Java), basic knowledge about embedded and operating systems in general, basics of git, basic knowledge of security concepts.
Omezení zápisu do předmětu
Předmět je nabízen i studentům mimo mateřské obory.
Předmět si smí zapsat nejvýše 110 stud.
Momentální stav registrace a zápisu: zapsáno: 0/110, pouze zareg.: 110/110, pouze zareg. s předností (mateřské obory): 95/110
Mateřské obory/plány
předmět má 36 mateřských oborů, zobrazit
Cíle předmětu
Rozvinout schopnost programovat v daném programovacím jazyce na základě vybrané konkrétní aplikační domény.
1. PB173/Go (Coding in Go)
• Studenti pochopí základní elementy jazyka Go a jejicj běžné použití v praxi.
• Studenti získají znalosti potřebné pro vstupní pozice vývojáře v jazyce Go a dokážou psát idiomatický kód v Go.
• Studenti budou schopni aplikovat získané znalosti do skutečných projektů v jazyce Go.
2. PB173/KDLP (Kernel Development Learning Pipeline)
• Introduce students to the Linux Kernel development workflow, show them how to create and send kernel modifications to mailing lists.
• Excite students about the wonderful world of Linux kernel community.
• Expose students to major kernel subsystems.
3. PB173/SCR (Source Code Review)
• Provide an introduction to the principles and practices of source code review, with a focus on improving software quality, maintainability, and security.
• Attendees will learn about common types of vulnerabilities, how to systematically analyze source code for vulnerabilities, design flaws, and inefficiencies.
• Real-world hands-on group exercises, concentrated on embedded devices source code review, will help participants develop the skills necessary to identify issues early in the development lifecycle.
Výstupy z učení
Obecným cílem předmětu je prohloubení znalostí programování v konkrétní oblasti dle vybrané seminární skupiny. Každá skupina si definuje své vlastní specifické cíle.
1. PB173/Go (Coding in Go)
• Umět psát idiomatický kód v jazyku Go.
• Chápat model souběžnosti použitý v jazyce Go.
• Profilovat a optimalizovat Go aplikace.
• Být schopen vyvíjet REST API služby v Go.
• Umět Kontejnerizovat a nasadit svou aplikace.
• Umět implementovat perzistenci pomocí SQL databáz.
• Být schopen instrumentovat aplikace různými typy telemetrie.
2. PB173/KDLP (Kernel Development Learning Pipeline)
• By the end of the course, students should have an understanding of how Linux kernel is architectured.
• Understand the role of each of the major subsystems and how those interact with each other.
• Students will also be able to have a basic understanding on how to write code for the Linux kernel, for its core and for modules, and how to use Linux’s provided generic interfaces (memory allocation, synchronization, generic data structures, etc) in their own kernel code.
• Students will understand how to send patches to specific subsystems and how to review patches.
3. PB173/SCR (Source Code Review)
• By the end of the course, students should learn the core concepts of source code review and vulnerability identification, including being able to recognize common software vulnerabilities.
• Students will be able to identify and document software vulnerabilities in a clear, accurate, and responsible manner.
• Learn about common logical attacks as well as about hardware risks, like side-channel and fault-injection vulnerabilities.
• Students will also learn learn about use of tools in code review, especially with respect to collaboration, and about code quality and maintainability.
• Student will learn about reviewing open-source code based on real-world examples (i.e., hands-on practice).
• Students will also learn about platform-specific code review with respect to embedded systems.
Osnova
  • Konkrétní obsah kurzu je závislý na tematických skupinách, které jsou uvedeny v sekci informace učitele.
  • 1. PB173/Go (Coding in Go)
    • Úvod: úvod do jazyka Go, IDEs a editory, instalace Go, spouštění Go
    • Základy #1: balíky & viditelnost, proměnné, datové typy, řídící struktury, funkce, ukazatele, uživatelské datové typy
    • Základy #2: rozhraní, chyby, pole, slice, asociativní mapy, rozsahy
    • Souběh & paralelizmus: gorutiny, runtime, kanály, select, souvizející balíky
    • Pokročilé koncepty #1: generiká, balíky, testování
    • Pokročilé koncepty #2: benchmark, optimalizace, CGo, unsafe & reflect
    • REST API: JSON, HTTP, REST API, balík HTTP, směrovače & web framework, OpenAPI, šablonování
    • Kontejnery: kontejnerizace, Docker, Kubernetes
    • Databázy: SQL, RDBMSs, migrace, SQL, sqlx, sqlc, GORM
    • Infrastruktura: CI/CD, infrastruktura, Google Cloud Platform
    • Observability: zdraví systému, logy, metriky, traces, OpenTelemetry
  • 2. PB173/KDLP (Kernel Development Learning Pipeline)
    • Introduction and development environment setup
    • General overview of core kernel concepts
    • PC and x86 architecture
    • Process management
    • Synchronization primitives
    • Memory management
    • Storage and filesystems
    • Networking stack
    • Device drivers
    • Kernel Debugging methods
    • GPG signing party
  • 3. PB173/SCR (Source Code Review)
    • Introduction to source code review (language level vulnerabilities: buffer overflow, type overflow, strings)
    • Design review
    • Tooling: static and dynamic analysis, reporting
    • Platform-specific aspects: Trusted Execution Environment
    • Reviewing key functionalities #1: Authentication and Authorization, Input Validation, Error Handling, Data Handling,
    • Reviewing key functionalities #2: Memory Management (for languages like C/C++), Code Quality and Maintainability and Concurrency and Thread Safety.
    • Project work: reviewing various open-source implementations (see Teacher Information for examples)
Literatura
  • Literatura dle tematické skupiny
Výukové metody
Výuka probíhá formou praktických dvouhodinových cvičení, doplněných samostatnými domácími programátorskými úlohami procvičujícími aktuálně probíranou látku. Cvičení obsahují nutný teoretický úvod do problematiky, který však typicky nepřesáhne 30 % času cvičení – zbylá část je věnována programování a používání souvisejících vývojových nástrojů u praktických úloh.
1. PB173/Go (Coding in Go)
Prezenční přednášky s úkoly přímo na hodine, hodnocené domácí úkoly, projekt.
2. PB173/KDLP (Kernel Development Learning Pipeline)
In-person lectures and homework assignments
3. PB173/SCR (Source Code Review)
In-person lectures and group project assignment.
Metody hodnocení
Student během celého semestru vypracovává domácí úkoly a/nebo se podílí na projektu. Konkrétní rozsah domácích úkolů a pravidla hodnocení si stanoví každá tematická skupina samostatně.
1. PB173/Go (Coding in Go)
Několik hodnocených domácích úkolů (50 bodů) a závěrečný projekt (50 bodů), obhajoba závěrečného projektu. Na úspěšné absolvování kurzu je potřeba získat alespoň 70 ze 100 bodů.
2. PB173/KDLP (Kernel Development Learning Pipeline)
Each assignment is assigned a specific number of points based on its difficulty or importance. These points add up to a maximum of 100. To pass the course, students need to accumulate at least 65 points across all assignments.
3. PB173/SCR (Source Code Review)
The grading will be performed based on the points received from project assignment, presentation, and the activity during the seminar. Total of 60% will be necessary to pass the course.
Informace učitele

Konkrétní skupiny/témata pro daný semestr budou rozeslány hromadným mailem před začátkem zápisu seminárních skupin a budou doplněny i na tuto stránku.


Aktuálně víme pro podzim 2024 o následujících skupinách:
  • 1. PB173/Go Coding in Go (Red Hat – Pavel Tišnovský, Stanislav Zeman; česky)
    Cílem kurzu je seznámit studenty s jazykem Go i jeho moderním použitím (API, virtualizace, knihovny, ...). Oproti minulému roku je kurz rozšířen na celý semestr.
    Více informací na github.com/course-go/course
  • 2. PB173/KDLP Kernel Development Learning Pipeline (Red Hat – Radomír Vrbovský, Carlos Maiolino, Izabela Bakollari, Vratislav Bendel; in English)
    The course aims to show students the specifics of developing the Linux kernel. For more information, see fall2024-muni.kdlp.underground.software/.
  • PB173/SCR (Source Code Review) (Łukasz Chmielewski (teaching in English).
  • The seminar will mostly graded based on a project. After four introductory seminars, the participants will create groups and they will review various open-source implementations belonging to a specific class of software, including:
    • Smart Home Devices, Printers, Routers, Open-Source Crypto-libraries, Trust Execution Environments code bases, bootloaders or JavaCard applets.
    The above is just an example list and it can be adjusted based on the interests of the participants.

Další komentáře
Předmět je vyučován každý semestr.
Výuka probíhá každý týden.
Předmět je zařazen také v obdobích podzim 2010, podzim 2011, podzim 2012, podzim 2013, podzim 2014, podzim 2015, jaro 2016, podzim 2016, jaro 2017, podzim 2017, jaro 2018, podzim 2018, jaro 2019, podzim 2019, jaro 2020, podzim 2020, jaro 2021, podzim 2021, jaro 2022, podzim 2022, jaro 2023, podzim 2023, jaro 2024, podzim 2024, jaro 2025, jaro 2026.
  • Statistika zápisu (nejnovější)
  • Permalink: https://is.muni.cz/predmet/fi/podzim2025/PB173