Category Archives: Speaking

Passkeys v praxi [Dan Hrubý, Vzdělávací okénko, 5.2.2026]

Záznam ze Vzdělávacího okénka HAVIT z 5. února 2026.

Minesweeping [Jiří Kanda, Vzdělávací okénko, 8.1.2026]

Proč selhávají .NET aplikace, i když děláte vše správně? Skutečné miny v knihovnách a frameworcích.

  • Co jsou „miny“ ve vývoji softwaru – neočekávané problémy pramenící z dobrých úmyslů
  • Jak knihovny a frameworky způsobují neočekávané chování, výkonnostní problémy a pomalé buildy
  • Skutečné případy min z praxe .NET projektů
  • Jak miny odhalit, diagnostikovat a jak se jim vyhnout

Vzdělávací okénko prezentoval Jiří Kanda.

Integrační testy konečně správně (Testcontainers) [Ondřej Václavek, Vzdělávací okénko, 11.12.2025]

Jak psát integrační testy v .NET správně? Testcontainers spustí reálný SQL Server z Dockeru přímo z C# testovacího kódu.

  • Rozdíl mezi integračními a unit testy – kde mockování nestačí
  • Proč jsou integrační testy v CI/CD pipeline problematické a jak to řeší Docker
  • Testcontainers – NuGet balíček pro spouštění Docker kontejnerů z C#
  • Integrace s ASP.NET Core přes WebApplicationFactory
  • Izolovaná databáze per test + fast restore (řádově 100 ms)
  • Paralelní spouštění testů bez vzájemného ovlivňování
  • Podpora více kontejnerů a Docker Compose
  • Reálná ukázka nasazení z projektu Edenred

Vzdělávací okénko prezentoval Ondřej Václavek.

O signaturách metod a DTO a jak je psát [Lukáš Michl, Vzdělávací okénko, 4.12.2025]

Záznam ze Vzdělávacího okénka HAVIT, kde Lukáš Michl povídal o tom, jak psát signatury metod a DTO tak, aby byl kód srozumitelný bez nutnosti číst implementaci. Přednáška pokrývá antipattern primitive type obsession, strong type values, knihovnu Vogen a best practices pro DTO.

Proč záleží na čitelných signaturách

Dobrá signatura metody prozradí, co metoda dělá, aniž by bylo nutné číst její tělo. To je klíčové pro udržovatelnost – kód se k němu vrací za dny, týdny i roky, a čím méně překvapení signatura skrývá, tím méně chyb při refaktorování vzniká. Lukáš ukazuje sérii příkladů z reálných projektů, kde nejasné signatury vedly k neočekávanému chování.

Primitive type obsession antipattern

Používání primitivních typů (string, int) všude, kde by měl být byznysový typ, vede k nejasnostem: co přesně parametr string name očekává? Je to jméno ve formátu AD, nebo zobrazované jméno? Může být null? Může být prázdný? Tyto otázky se násobí pro každé volání metody. Podobný problém nastává u ID entit – pokud jsou UserID, LoginID i EntityID reprezentovány jako int, záměna při refaktorování neprojde kompilátorem a může tiše způsobit datovou chybu.

Nullable reference types

Zapnutí nullable reference types (#nullable enable) je prvním krokem ke čitelnějším signaturám – kompilátor okamžitě sdělí, zda parametr nebo návratová hodnota může být null. Samo o sobě to ale nestačí, pokud jsou parametry stále primitivní typy bez byznysového kontextu.

Strong type values a value objects

Řešením primitive type obsession jsou strong type values – vlastní typy obalující primitivní hodnotu a nesoucí byznysový kontext i validaci. Implementují se jako C# record struct, čímž se předchází dvojité alokaci na heapu. Validace v konstruktoru zajistí, že nevalidní hodnota vůbec nevznikne – testy kontraktu pak stačí napsat jednou u definice typu, ne u každého volání metody.

Knihovna Vogen

Vogen je source-generátorová knihovna, která automaticky generuje plnohodnotné strong-typed hodnoty – včetně serializace JSON, podpory Entity Framework a možnosti přidávat validace. Bez ní by bylo ruční psaní pro stovky byznysových typů v projektu neúnosné; s Vogen stačí jedna řádka atributu nad definicí.

Strong Typed ID

Specifickým případem jsou ID entit. Knihovna StronglyTypedId řeší záměnu identifikátorů různých entit na úrovni typového systému – kompilátor odmítne předat UserId tam, kde se očekává OrderId.

DTO best practices

Suffix DTO v názvu třídy je kontrakt: objekt by měl být immutable a sloužit výhradně k přenosu dat. Lukáš doporučuje vlastnosti deklarovat s required init – přidání nové vlastnosti pak okamžitě způsobí chybu kompilace u všech míst, kde se DTO inicializuje, a zabrání tiché inicializaci výchozími hodnotami. Kombinace s konstruktorovým zápisem navíc zajistí, že kolega přistupující ke kódu poprvé okamžitě vidí, co všechno DTO nese.

Novinky v .NET 10 a výhled na .NET 11 [WUG Dev Day Praha, 26.1.2026]

Záznam z přednášky pro konferenci WUG Dev Day Praha z 26. ledna 2026.

Co se dozvíte

  • .NET 10/11 timeline – STS prodlouženo na 2 roky, LTS na 3 roky
  • C# 14 – extension members: nová syntaxe s klíčovým slovem extension
  • C# 14 – klíčové slovo field v getter/setter, null conditional assignment (?=)
  • C# 14 – partial constructors/events, user-defined compound assignment operátory
  • .NET 10 Runtime – JIT devirtualizace, deabstrakce a výkonové optimalizace
  • BCL – string comparer s numeric ordering, LINQ left/right join, WebSocket stream
  • System.Text.Json – cyclic references v source generators, strict preset
  • SDK – dotnet tool exec, file-based apps (jednořádkové C# scripty), package pruning
  • ASP.NET Core – OpenAPI 3.1, validace na Minimal API, ochrana před open redirect
  • Blazor – přehled nejvýraznějších novinek v .NET 10
  • Výhled na .NET 11 a C# 15

Slides

Blazor – EditForm a submit tlačítko mimo něj [Vzdělávací okénko, 20.11.2025]

Záznam z (mini) Vzdělávacího okénka HAVIT, kde jsem ukazoval, jak se vypořádat s umístěním submit HxSubmit tlačítka mimo formulář (EditForm).

EF Core 10 [Jiří Kanda, Vzdělávací okénko, 6.11.2025]

Záznam ze Vzdělávacího okénka HAVIT z 6. listopadu 2025. Jirka nám ukazoval, co je nového v Entity Framework Core 10, co se hodí pro naše projekty a jak nyní funguje IN operátor (Contains()) a jeho bucketizace parametrů.

PDF v .NET pomocí PDFSharp/MigraDoc [T. Wagner, Z. Hlinka, Vzdělávací okénko, 2.10.2025]

Záznam ze Vzdělávacího okénka z 2. října 2025. Tomáš a Zdeněk ukazovali bezplatné knihovny pro tvorbu PDF z .NET – PDFSharp a jeho nadstavbu MigraDoc.

AI generování obrázků (gpt-image-1) [Gabriela Turcajová, Vzdělávací okénko, 9.10.2025]

Záznam ze Vzdělávacího okénka HAVIT z 9. října 2025, kde nám Gabriela Turcajová ukazovala použití gpt-image-1 – AI modelu od OpenAI určeného pro generování obrázků. Praktická ukázka se zaměřila na zajímavý use case: generování pravděpodobné podoby dítěte na základě fotografií rodičů.

Model gpt-image-1 představuje novou generaci AI nástrojů pro práci s obrázky. Na rozdíl od starších modelů (jako DALL·E) nabízí výrazně realističtější výstupy a lepší porozumění vstupním instrukcím. Gabriela ukázala, jak model dokáže analyzovat vstupní fotografie a na jejich základě vytvořit nový obrázek kombinující rysy obou osob.

Během přednášky jsme se dozvěděli, jak s modelem pracovat, jaké jsou jeho možnosti i limity, a na co si dát pozor při formulování promptů pro generování obrázků.

Vytěžování dokumentů – Azure AI Content Understanding [Robert Haken, Vzdělávací okénko 25.9.2025]

Záznam ze Vzdělávacího okénka HAVIT z 25. září 2025, kde jsem ukazoval třetí způsob AI-vytěžování dokumentů – prostřednictvím all-in-one cloudové služby Azure AI Content Understanding.

V předchozích dílech série jsme si ukázali dva přístupy k vytěžování dokumentů pomocí AI: konverzi do Markdown přes Azure Document Intelligence s následným zpracováním přes LLM a přímé zpracování bitmapových obrázků přes GPT-4o Vision. Tentokrát jsme se podívali na třetí cestu – Azure AI Content Understanding, která celý pipeline (OCR, analýza struktury, extrakce dat) zapouzdřuje do jedné cloudové služby.

Co se dozvíte

  • Co je Azure AI Content Understanding a čím se liší od Azure Document Intelligence
  • Jak službu nastavit a nakonfigurovat v Azure portálu
  • Praktická ukázka volání REST API z C#
  • Porovnání všech tří přístupů k AI-vytěžování dokumentů