Robert Husák

Student Ph.D. na KSI MFF UK

Kontakt

Oblasti zájmu

  • Nástroje pro vývojáře
  • Analýza kódu
  • Kompilátory
  • Cloudové aplikace a web
  • Lego (nevěřili byste, jak rozsáhlý ekosystém různých softwarových nástrojů pro něj existuje...)

Témata studentských projektů

Nabízím vedení ročníkových projektu, bakalářských prací, diplomových prací či (individuálních) softwarových projektů. Pro inspiraci naleznete níže náměty na projekty, ale je velmi vítané, když přijdete s vlastním (ideálně v některé z mých oblastí zájmu, abych vám k tomu byl něco platný :-) ). Volba programovacího jazyka je na vás, ale s těmito mohu pomoci nejvíce: C#, F#, C++, PHP, JavaScript

Vlastní rozšíření pro IDE

Ideální je, když sami přijdete s nějakým problémem, který vás při programování štve a chtěli byste jej řešit. Mám zkušenosti s různými technikami pro analýzu kódu i implementací rozšíření pro VS a VS Code (ale zvládneme to i do jiného IDE), můžeme tedy spolu zkusit nezávazně vymyslet, zda by pro to nešlo nějaký rozumně složitý nástroj vytvořit. Mnohdy už mohou být podobné problémy řešené někým jiným, takže nemusí být vždy nutné to celé vytvářet od píky.

Rozšíření nástroje AskTheCode pro zjišťování příčin chyb v kódu

Zjišťování chyb typu "jak se do této proměnné mohla sakra dostat -1" bývá často velmi náročné a ubíjející. AskTheCode je rozšíření do IDE, které si klade za cíl s tímto problémem programátorům pomoci. Za tímto účelem používá techniku zvanou "zpětná symbolická exekuce", více info o fungování nástroje naleznete např. v tomto článku. Možná témata pro vývoj:

  • Implementace nových technik do nástroje pro jeho zefektivnění (např. použitých v nástroji Snugglebug) - možné v C# či F#
  • Přidání podpory pro složitější jazykové konstrukty v C#
  • Reimplementace či rozšíření pro jiný programovací jazyk (momentálně analyzuje C# pomocí Roslynu)
  • Reimplementace pro jiné IDE (třeba VS Code)

Pořádná nullability analýza pro C#

Obecně se soudí, že možnost přiřadit Null do referencí je "chyba za miliardu dolarů" kvůli nepřehlednosti a potenciálním chybám, co způsobila. Aby se její dopad o něco zmírnil, v C# verze 8 byla přidána možnost reference explicitně označovat jako nullable a "ne-nullable". Tato nullability analýza má ale své hranice a ne vždy funguje dobře (např. při psaní kódu pro .NET Standard 2.0). Cílem tohoto projektu je proto tuto analýzu zpřesnit, aby pokrývala více situací a pro různé typy projektů. Vzhledem k vyšší náročnosti analýzy oproti té zabudované může být zajímavé rovněž "offloadování" výpočtu na jiný počítač či možnost "předpočítat" si určité části analýzy předem.

Analýza běžících aplikací v .NETu

Analýza běžícího programu nám může dát užitečné informace o jeho sémantice a případných chybách. Nápady na témata v této oblasti:

  • Open source reimplementace IntelliTestu či jeho části (například Extended Reflection)
  • Automatická kontrola zachování sémantiky kódu po jeho refactoringu
  • Chytřejší příkaz Go To Implementation, který zohledňuje i aktuální typy objektů

Doménově specifické jazyky (DSL)

Narozdíl od obecných programovacích jazyků, jako je C# či C++, je každý doménově specifický jazyk určený pouze pro určitou podúlohu, typicky v nějakém větším systému. DSL jsou ideální pro zájemce o kompilátory, neboť mohou s rozumně vynaloženým úsilím přinášet vysokou přidanou hodnotu díky potenciálnímu zjednodušení a zefektivnění kódu. Nápady na témata v této oblasti:

  • DSL pro analýzu datového toku v Roslynu (kompilátor Microsoftu pro C# a VB)
  • "Továrna" na DSL - rozšíření do IDE umožňující uživatelům jednoduše vyvíjet vlastní DSL, automaticky poskytující např. tooltipy, IntelliSense, debugování apod. (implementace možná v různých jazycích, ideální by to ale bylo asi v .NETu, případně JavaScriptu)

Pomocník pro výhodné nakupování kostek Lego (pracovní název "Kostkočmuch")

Kdo někdy kupoval Lego, ví, že jednotlivé sety bývají zatraceně drahé. To ale mnohdy není nic proti cenám jednotlivých kostek, které shánějí stavitelé při vytváření vlastních modelů. Existuje několik různých zdrojů, na nichž se mohou kostky výrazně lišit cenou i dostupností: Bricklink, Pick a Brick, Bricks & Pieces, eBay,... Nejvýhodnější cestou, jak určitou množinu kostek získat, může být nákup jejich kombinace z několika různých zdrojů. Momentálně však neexistuje žádný nástroj, který by toto umožňoval, proto čas volá "Kostkočmucha". Možné featury (podle jejich výběru lze téma naškálovat od ročníkového projektu až po skupinový softwarový projekt):

  • Parsování dat z různých zdrojů
  • Rozpoznávání konkrétních kostek ve fotkách a videích (např. u inzerátů či při procházení kostek doma)
  • Přehled o vývoji ceny každé z kostek
  • Optimalizační algoritmus pro výběr kombinace různých zdrojů

Téma je vhodné pro procvičení vývoje cloudových aplikací s architekturou mikroslužeb, ale stejně tak dobře jej lze naimplementovat jako desktopovou aplikaci.

GitHub pro Lego modely

Ačkoliv komunita stavitelů Lego modelů je značná, momentálně si většina z nich tak nějak "hraje na vlastním písečku", tj. tvoří si vlastní modely a sem tam je upravuje na základě zpětné vazby z okolí. U veřejně dostupných Lego modelů chybí možnosti, které známe ze světa programování a open source: trasování změn pomocí verzovacího systému a jejich vizualizace, možnost "forknout" si model, upravit ho a změny zpětně začlenit pomocí pull requestu, kontinuální integrace (např. vyrenderování aktuální verze modelu) apod. Možné featury (jako téma si lze vybrat i jen jednu z nich):

  • Vizuální "Diff and Merge Tool" pro Lego modely - zobrazování lze vyřešit např. touto knihovnou, ale je potřeba zejména navrhnout samotné porovnání rozdílů
  • Webový front-end nad verzovacím systémem (nejlépe Gitem)
  • Vytvoření workflow pro "kontinuální integraci" - např. renderování obrázků a videí z modelů, skládání více modelů dohromady, generování částí modelů
  • Online editor/prohlížeč modelů (inspirace)

Implementace vysoce výkonných knihoven v .NETu

Ačkoliv je C# i platforma .NET poměrně populární, existuje poměrně zažité přesvědčení "pokud potřebuješ něco udělat opravdu efektivně, naprogramuj to v C++". Při programování v C# či F# se pak setkáváme s tím, že některé knihovny je nutné volat pomocí P/Invoke či v separátním procesu, což přináší režii navíc a znesnadňuje to i distribuci výsledných nástrojů. Posledních pár let se Microsoft v C# a .NET Core významně zaměřuje na optimalizaci výkonu (více info např. konference Dotnetos), což otevírá možnost programovat výkonné knihovny přímo v C# (do jisté míry i v F#). Konkrétní téma je možné si vybrat vlastní, zde jsou nápady z oblasti analýzy kódu:

  • SMT řešič, t.j. nástroj schopný ověřit platnost výrazu v určité podmnožině predikátové logiky, např. ∃ x: x > 10 ∧ x < 15
  • Datalog - zjednodušený Prolog, vhodný pro statickou analýzu kódu (zajímavý je např. projekt Soufflé)

Asistent pro Sid Meier's Colonization

Pomocný nástroj pro správu uložených her a jejich vizualizace, případně provádění statistik. Základní nástřel v F# naleznete zde. V rámci projektu je možné buď tento nástroj rozvinout o další featury, nebo jej celý naimplementovat znovu (v libovolném jazyce). Zajímavý projekt je rovněž Viceroy, který obsahuje např. strukturu souboru uložené hry.