Matfyz Summer of Code (MSoC) je program určený studentům vyšších ročníků středních škol, který nabízí možnost podílet se na vývoji zajímavého software v rámci projektů běžících na informatické sekci Matfyzu (Matematicko-fyzikální fakulty Univerzity Karlovy).

Vybraní studenti se během letních měsíců (červen - srpen) aktivně zapojí do vývoje software formou "vzdálené brigády" pod vedením zaměstnance fakulty, získají nějaké zkušenosti s prací na rozsáhlejším software a novými technologiemi, a navíc poznají Matfyz zevnitř.

Úspěšní řešitelé na konci projektu také získají odměnu ve formě stipendia (v maximální výši 30 tisíc korun). Tato finanční odměna má za hlavní cíl umožnit studentům, aby mohli věnovat dostatek času práci na řešení projektu (ve smyslu motta "flip bits not burgers"). Stipendia jsou poskytována ze soukromých prostředků podporovatelů, mezi něž patří Nadace RSJ, která rozjezd celého programu podpořila a nadále je jeho významným partnerem.

Všechny dotazy na program MSoC, pravidla a vypsané projekty, zasílejte prosím na emailovou adresu msoc@d3s.mff.cuni.cz. Aktuální seznam nabízených projektů je k dispozici zde ve spodní části této webové stránky.

Organizace - základní pravidla a časový přehled

V létě roku 2024 se uskuteční čtvrtý ročník programu MSoC.

Zájemci se mohou přihlásit zasláním všech potřebných informací a dokumentů na emailovou adresu msoc@d3s.mff.cuni.cz nejpozději do 30. dubna.

Přihláška musí obsahovat zejména následující:

  • zvolené téma projektu z nabídky uvedené zde na této webové stránce
  • jméno a příjmení studenta
  • název a adresa střední školy
  • potvrzení o studiu v elektronické formě (podepsané zástupcem školy, naskenovaný výtisk nebo fotka)
  • popis dosavadních programátorských zkušeností
  • vyjádření učitele na příslušné střední škole například ve formě doporučujícího dopisu (podepsané, naskenovaný výtisk nebo fotka) adresovaného organizačnímu týmu MSoC

Doporučujeme zájemcům také přiložit zdrojáky několika reprezentativních programů, které doposud vytvořili.

Odesláním přihlášky udělujete souhlas se zpracováním poskytnutých informací a osobních údajů výhradně pro účely organizace programu MSoC.

Součástí procesu hodnocení jednotlivých přihlášek může být také vstupní "test" pro ověření technických znalostí a programátorských schopností uchazeče.

Výsledné rozhodnutí o přijetí do aktuálního kola programu MSoC bude každému zájemci oznámeno nejpozději do 17. května.

Průběh řešení každého projektu bude zahrnovat pravidelné konzultace s vedoucím projektu. Nabízíme také možnost osobní návštěvy Matfyzu, kde především v úvodní fázi řešení projektu to může být vhodná příležitost ke určení jednotlivých dílčích úloh a vytvoření hrubého plánu činnosti na celé léto. Další návštěva může proběhnout na konci projektu za účelem předvedení výsledku.

Očekávaný celkový průběh každého projektu je ten, že v červnu daného roku se řešitel důkladně seznámí se technologiemi nezbytnými pro úspěšné řešení, zatímco jádro programátorských prací bude rozvrženo na letní prázdniny (červenec, srpen).

Seznam projektů

Mapa připojených zařízení v emulátoru MSIM

MSIM je simulátor jednoduchých počítačů s procesory MIPS a RISC-V. Cílem MSIMu není být rychlým simulátorem, ale především být předvídatelným prostředím pro výuku operačních systémů. I z tohoto důvodu je simulace procesoru velmi věrná, ale periferní zařízení jsou emulována v co nejjednodušší podobě.

Cílem projektu je naprogramovat emulaci nového pseudo-zařízení, které bude popisovat ostatní připojená zařízení v právě běžícím (simulovaném) stroji. Inspirací pro podobné zařízení je například PCI configuration space nebo (Open firmware) Device tree. Cílem není emulovat žádný z podobně komplexních standardů, ale nabídnout jednoduchý způsob jak detekovat připojená zařízení, který bude koncepčně odpovídat běžným praktikám současného hardwaru.

Požadované znalosti řešitele: C, Git, chápání konceptu paměťově mapovaných registrů (zařízení). Znalost MIPS nebo RISC-V architektury výhodou.

Odkazy: MSIMOpen firmware Device tree

Automatizace správy studentských projektů na GitLabu

GitLab je platforma pro správu projektů používajících verzovací nástroj Git. V současnosti je také hojně používán na Matfyzu pro odevzdávání projektů či domácích úloh v desítkách předmětů. Automatizaci práce s GitLabem pro učitele (např. vytvoření projektů pro všechny zapsané studenty, kterých mohou být i stovky) pak zajišťuje projekt Teachers GitLab, který replikuje GitLabové akce napříč velkým množství různých projektů.

Cílem tohoto projektu je přidat jednak automatizované testy, které zjednoduší další vývoj tohoto nástroje, ale také jej rozšířit o další funkce, které mu zatím chybí, ale ukazují se jako užitečné. Jde například o detailnější konfiguraci projektu či práci s integrovanou Wiki.

Požadované znalosti řešitele: Python, Git, GitLab, chápání konceptu (webových) REST API. Znalost Dockeru výhodou.

Odkazy: Teachers GitLabPythoní knihovna pro práci s GitLabem

Infrastruktura pro vizualizaci běhu programů a interaktivní prohledávání logů

Vývoj rozsáhlých aplikací v této době není prakticky možný bez podpory ve formě různých nástrojů. To platí také pro činnosti jako ladění (debugging), hledání chyb ve zdrojácích, nebo testování, a obecně při snaze dobře pochopit strukturu a chování programu který vytvořil někdo jiný. Například pokud dojde ke selhání aplikace za běhu, tak je nutné objevit chybu ve zdrojácích, která způsobila to selhání.

Důležité je tak mít k dispozici nástroje pro vizualizaci běhu programů a zobrazování konkrétních informací o jejich stavu (hodnoty proměnných).

Cílem tohoto projektu je vytvořit nějakou část infrastruktury, která mimo jiné umožní:

  • Vizualizaci podrobných kompletních záznamů o běhu daného programu (takzvaných "execution traces") s podporou interaktivní navigace oběma směry a zobrazování podrobnějších informací třeba o konkrétní proměnné, řádce zdrojáků nebo funkci.
  • Interaktivní vyhledávání přes zdrojáky, výsledky testů, a zaznamenané informace o běhu programu (execution traces)
Konkrétní zaměření a požadavky na implementaci se upřesní po dohodě s řešitelem projektu.

Uživatelské rozhraní bude především ve formě webové aplikace, kterou ale částečně doplní ovládání a spouštění určitých akcí z příkazové řádky. Ovládání musí podporovat některé z těchto akcí: rozbalit nebo schovat informace, označit konkrétní proceduru o které chceme získat nová data (jako třeba výsledek testu pro jiné hodnoty parametrů), a zobrazit informace o každém volání jedné konkrétní procedury v rámci běhu programu. Webové rozhraní by mělo prezentovat informace (zdrojáky, výsledky testů, apod) zároveň ve několika oknech.

Kompletní potřebná data o běhu programu vždy poskytne jiný systém. Formát těchto dat bude také možné dohodnout a upravit na základě potřeb řešitele tohoto projektu. Vstupní data budou obsahovat výsledky testů pro jednotlivé části aplikace (třídy, procedury) a hodnoty argumentů, především záznamy o běhu testů pro všechny možné volání dotčené procedury (funkce) s různými kombinacemi hodnot parametrů.