Category Archives: Speaking

Novinky v C# 12, 13 a 14 (.NET 8, 9 a 10) – záznam [TechEd Praha 2025]

Přehled novinek C# 12 (.NET 8), C# 13 (.NET 9) a preview C# 14 (.NET 10) – praktické ukázky ve Visual Studiu.

  • C# 12: primary constructors – DI pattern, capture, naming konvence
  • C# 12: collection expressions, inline arrays, spread operátor
  • C# 12: type aliases, default lambda parametry, [Experimental] atribut, interceptory
  • C# 13: nová třída Lock – modernizované zamykání vláken s using
  • C# 13: params collections (Span, IEnumerable) a výkonové výhody
  • C# 13: partial properties, indexery a ref struct vylepšení
  • C# 14: extension members – extension bloky, properties, statické metody
  • C# 14: klíčové slovo field, null conditional assignment (?=), dictionary expressions

Přednáška zazněla na konferenci TechEd Praha 2025.

FluentValidations vs Today [Robert Haken, Vzdělávací okénko, 5.6.2025]

Po půlnoci hlásil validátor: datum vystavení faktury nesmí být v budoucnosti – ale porovnával se včerejším datem. Proč?

  • Záhadný bug v Blazor WebAssembly: fakturační validátor po půlnoci odmítá dnešní datum
  • FluentValidation validátory jsou scoped-service – v Blazor WASM to prakticky znamená singleton
  • Pravidla jako LessThanOrEqualTo(datum) se vyhodnotí jednou v konstruktoru a hodnotu zmrazí
  • Řešení: Must(x => x <= timeProvider.GetLocalNow()) – lambda se vyhodnocuje při každé validaci
  • Přidej custom error message – Must generuje pouze generické hlášení

Vzdělávací okénko prezentoval Robert Haken.

OpenAPI + Scalar UI [Alexandr Hájek, Vzdělávací okénko, 22.5.2025]

Swagger UI v .NET 9 na odchodu? Scalar UI – moderní alternativa s dark mode, vyhledáváním a výměnou za jeden řádek kódu.

  • Proč Microsoft v .NET 9 opouští Swagger generátor a co ho nahrazuje
  • Scalar UI: dark/light mode, integrované vyhledávání a classic layout jako Swagger
  • Jak přidat Scalar UI do projektu – výměna jednoho řádku kódu
  • Konfigurace OIDC autentizace s Microsoft OpenAPI generátorem (access token, scopes)
  • Kompatibilita Scalar UI se staršími verzemi .NET a jinými OpenAPI generátory
  • MIT licence – open source s aktivní komunitou a rychlými opravami

Vzdělávací okénko prezentoval Alexandr Hájek.

Web Accessibility a EAA [Michal Melena, Vzdělávací okénko, 15.5.2025]

Záznam Vzdělávacího okénka HAVIT z 15. května 2025, kdy nám Michal Melena povídal o Accessibility a aktuálních povinnostech webových aplikací v této oblasti.

Seedy, UoW a Created v HAVIT stacku [Robert Haken, Vzdělávací okénko, 15.5.2025]

Technická změna v seedech, kde se nyní používá Unit of Work. Není potřeba explicitně nastavovat Created atribut, protože se o to postará systém. Taktéž je vhodné použít ExcludeUpdate, aby se Created hodnota nepřepisovala.

Tipy a triky pro mobilní vývoj na webu [Dominik Crha, Vzdělávací okénko, 10.4.2025]

Znáte v CSS funkci clamp()? To a další triky z vývoje webů pro mobilní zařízení nám ukázal Dominik.

  • CSS funkce clamp() pro fluid typography a spacing bez media queries
  • Accessibility a clamp(): proč záleží na 200% zoomu (WCAG SC 1.4.4) a jak ji neporusit
  • Touch targets: detekce dotikových zařízení pomocí pointer: coarse místo hardcoded breakpointů
  • Responzivní tabulky: negantivní margin + flexbox trik pro full-width scroll na mobilu
  • CSS funkce attr() – čtení HTML atributů přímo v CSS (užitelné v Blazoru)
  • CSS funkce light-dark() – automatická podpora dark/light mode bez Bootstrap boilerplate

Vzdělávací okénko prezentoval Dominik Crha.

Blazor – past cyklu for s RenderFragment [Vzdělávací okénko, 24.4.2025]

Představení problému s cyklem for v Blazoru, kde se při použití s RenderFragment může objevit poslední hodnota řídící proměnné. Je potřeba řídící proměnnou vykopírovat do lokální proměnné nebo se jí vyhnout cyklem foreach.

Exception types – kdy který použít [Vzdělávací okénko, 10.4.2025]

  • NotImplementedException – výhradně během vývoje jako TODO
  • NullReferenceException – nikdy nevyhrazujeme explicitně, výhradně vyhazováno runtimem
  • NotSupportedException – explicitně indikujeme, že o use-case víme, ale není řešen
  • InvalidOperationException – „nemělo by v produkci nastat“, chyba vývoje (nesprávné volání , switch nad nečekanou hodnotou enum, …)
  • ArgumentNullException, ArgumentOutOfRangeException – výhradně přímé argumenty (ne arg1.Property != null)
  • ArgumentException – obecný problém s argumentem/-y (bližší specifikace v Message)
  • ContractFailedException – default pro Contract.Requires(cond), Contract.Assert(cond), …
  • Exception – nedoporučuje se vyhazovat, mělo být spíše abstract, použijte potomky
  • OperationFailedException – indikace chyby do UI (specficiké pro Havit.Blazor stack)
  • ApplicationException – deprecated

Záznam ze Vzdělávacího okénka HAVIT z 10. dubna 2025.

Blazor – Proč nepoužívat parametry v OnInitialized [Vzdělávací okénko, 3.4.2025]

V tomto videu se podíváme na důležitý technický detail v Blazoru, který představil – proč by se v metodě OnInitialized popř. OnInitializedAsync neměly používat parametry. Ukážeme si na příkladu konkrétního problému, který může nastat, když komponenta nezmění instanci při změně routy a parametr zůstane se starou hodnotou. Dozvíš se:

  • Jak funguje lifecycle metoda OnInitialized v Blazoru
  • Proč je nevhodné používat [Parameter] hodnoty v této fázi
  • Jaké chyby to může způsobit v praxi
  • Kdy (a jestli vůbec) je použití parametrů v OnInitialized v pořádku

Záznam ze Vzdělávacího okénka HAVIT z 3. dubna 2025.

YAML Pipelines – Azure DevOps [Jiří Kanda, Vzdělávací okénko, 27.3.2025]

V tomto videu se dozvíte vše o našich nových YAML pipelines v Azure DevOps, které prezentuje Jiří Kanda. Jirka vysvětluje, proč jsme se rozhodli přejít na YAML pipelines a jaké výhody nám to přináší.

  • Specifika našich buildů a důvody pro změnu na YAML pipelines.
  • Výhody YAML pipelines, jako jsou lepší parametrizace a paralelizace.
  • Základní syntaxe YAML a struktura YAML pipelines.
  • Paralelní běh jobů a použití více agentů.
  • Volitelné parametry buildů a task scheduler.
  • Podpora pro integrační testy a automatické pull requesty.
  • Použití deduplication a reprodukovatelnost buildů.
  • Validace zranitelností nuget balíčků a definice pipeline v projektech.
  • Problémy s manuálním spuštěním buildů.

Záznam ze Vzdělávacího okénka HAVIT z 27. března 2025.