{
  "provider": {
    "name": "Sulmar",
    "description": "Szkolenia dla programistów z zakresu .NET, C#, SQL, Redis i Crystal Reports. Warsztaty prowadzone przez praktyka z ponad 30-letnim doświadczeniem.",
    "email": "biuro@sulmar.pl",
    "telephone": "+48 609 851 649",
    "address": "ul. Erazma Ciołka 10 lok. 328, 01-402 Warszawa",
    "url": "https://www.sulmar.pl"
  },
  "generatedAt": "2026-11-06T23:42:11.463Z",
  "courses": [
    {
      "id": "design-patterns",
      "title": "Wzorce Projektowe w C#",
      "tagline": "Poznaj przepisy na dobry kod. Wzor(c)owo.",
      "description": "Wzorce projektowe to sprawdzone sposoby na to, aby twój kod był prosty i czytelny, otwarty na zmiany i gotowy na testy. Kurs poprowadzi Cię krok po kroku przez poszczególne wzorce. Rozpoczniemy od legacy code i poddamy go refaktoryzacji. Zapomnij jednak o przykładach z hamburgerem i pizzą. Zamiast tego, poznasz praktyczne zastosowania wzorców projektowych w realnych przypadkach. Zacznij stosować wzorce projektowe we własnych projektach, aby cieszyć się czystym kodem, gotowym na nowe wyzwania.",
      "durationDays": 3,
      "difficulty": {
        "level": 2,
        "label": "Średnio-zaawansowany"
      },
      "category": "dotnet",
      "tags": [
        "dotnet",
        "design-patterns"
      ],
      "outcomes": [
        "Zrozumiesz różnorodne wzorce projektowe",
        "Stosować wzorce do rozwiązywania problemów",
        "Ułatwisz testowanie kodu",
        "Zachować czytelność i elastyczność kodu",
        "Redukować nadmiernie powielany kod",
        "Stosować dobre praktyki programistyczne"
      ],
      "program": "* Wzorce kreacyjne\n\t* Singleton\n\t* Fabryka abstrakcyjna (Abstract Factory)\n\t* Metoda wytwórcza (Factory Method)\n\t* Budowniczy (Builder)\n\t* Prototyp (Prototype)\n* Wzorce strukturalne\n\t* Adapter\n\t* Most (Bridge)\n\t* Kompozyt (Composite)\n\t* Dekorator (Decorator)\n\t* Fasada (Facade)\n\t* Pyłek (Flyweight)\n\t* Pełnomocnik (Proxy)\n* Wzorce czynnościowe\n\t* Szablon metody (Template method)\n\t* Strategia (Strategy)\n\t* Komenda (Command)\n\t* Stan (State)\n\t* Mediator\n\t* Łańcuch odpowiedzialności (Chain of responsibility)\n\t* Interpreter\n\t* Iterator\n\t* Migawka (Memento)\n\t* Pusty obiekt (Null Object)\n\t* Obserwator (Observer)\n\t* Wizytator (Visitor)",
      "url": "https://www.sulmar.pl/szkolenia/design-patterns.html"
    },
    {
      "id": "blazor",
      "title": "Tworzenie aplikacji Blazor",
      "tagline": "Poznaj nową technologię webową. Szybko i skutecznie.",
      "description": "Blazor to innowacyjny framework rozwijany przez Microsoft, umożliwiający pisanie aplikacji webowych w języku C# bezpośrednio w przeglądarce internetowej. Dzięki Blazorowi, programiści mogą korzystać z pełnej siły języka C# do tworzenia interaktywnych interfejsów użytkownika, bez konieczności posługiwania się JavaScriptem. W trakcie tego kursu zdobędziesz umiejętności niezbędne do projektowania i wdrażania aplikacji webowych, wykorzystując potencjał Blazora i .NET.",
      "durationDays": 3,
      "difficulty": {
        "level": 2,
        "label": "Średnio-zaawansowany"
      },
      "category": "blazor",
      "tags": [
        "dotnet",
        "blazor",
        "webassembly"
      ],
      "outcomes": [
        "Tworzyć aplikacje webowe w języku C#",
        "Budować strony z komponentów",
        "Zarządzać stanem aplikacji",
        "Obsługiwać zdarzenia",
        "Implementować routing",
        "Integrować Blazor z JavaScript i CSS"
      ],
      "program": "- Wprowadzenie do Blazor\n  - Porównanie Blazor Server Side i Blazor WebAssembly\n  - Utworzenie aplikacji\n  - Struktura projektu\n- Strony (Pages)\n  - Utworzenie strony\n  - Osadzanie kodu w C#\n  - Podział prezentacji i kodu C# (partial class)\n- Układy (Layouts)\n  - Utworzenie własnego układu\n  - Nadpisywanie układu\n  - Zagnieżdżanie układów\n  - Dziedziczenie układów\n- Komponenty\n  - Utworzenie własnego komponentu\n  - Przekazywanie parametrów\n  - Zastosowanie parametrów kaskadowych\n  - Generowanie fragmentów\n  - Wiązanie danych (Binding)\n  - Zdarzenia (EventCallback)\n- Routing i nawigacja\n  - Definiowanie tras\n  - Przekazywanie parametrów tras\n  - Ograniczenia tras\n  - Przekazywanie parametrów zapytań\n  - Nawigacja pomiędzy stronami\n- Formularze\n  - Tworzenie formularzy\n  - Sprawdzanie poprawności danych\n  - Wysyłanie danych\n  - Wysyłanie plików\n- Wstrzykiwanie zależności\n  - Wstrzykiwanie na stronie\n  - Wstrzykiwanie w klasach częściowych\n- Komunikacja z REST API\n  - Utworzenie usługi Minimal Api\n  - Utworzenie nazwanego klienta HTTP\n  - Wysyłanie żądań i pobieranie danych\n- Konfiguracja aplikacji\n  - Pobieranie konfiguracji z pliku\n  - Konfiguracja zależna od środowiska\n- Dostosowanie wyglądu aplikacji\n  - Zastosowanie styli kaskadowych CSS\n  - Izolacja arkuszy styli kaskadowych CSS\n- Integracja z JavaScript\n  - Wywołanie funkcji JavaScript z Blazor\n  - Wywołanie funkcji Blazor z JavaScript\n  - Izolacja skryptów JavaScript\n- Zarządzanie stanem aplikacji\n  - Zachowanie danych w Local Storage\n  - Zachowanie danych w Session Storage\n- Aplikacje czasu rzeczywistego\n  - Utworzenie Huba Signal-R\n  - Wysyłanie wiadomości\n  - Odbieranie wiadomości w Blazor\n- Optymalizacja aplikacji\n  - Wirtualizacja komponentów\n  - Opóźnione ładowanie modułów\n- Bezpieczeństwo\n  - Uwierzytelnianie\n  - Tokeny JWT\n  - Autoryzacja oparta o role\n  - Autoryzacja oparta o poświadczenia\n  - Ukrywanie stron na podstawie autoryzacji\n  - Ukrywanie fragmentów widoków na podstawie autoryzacji",
      "url": "https://www.sulmar.pl/szkolenia/blazor.html"
    },
    {
      "id": "multithreading-async",
      "title": "Programowanie wielowątkowe i asynchroniczne w C#",
      "tagline": "Szybko i niezawodnie",
      "description": "Współczesne aplikacje wymagają wydajnego przetwarzania danych, optymalnego zarządzania zasobami i responsywności. To szkolenie pokaże Ci, jak opanować wielowątkowość i asynchroniczność w C# w praktyczny i przystępny sposób",
      "durationDays": 3,
      "difficulty": {
        "level": 3,
        "label": "Zaawansowany"
      },
      "category": "dotnet",
      "tags": [
        "dotnet"
      ],
      "outcomes": [
        "Zrozumiesz podstawy i zaawansowane techniki wielowątkowości",
        "Nauczysz się korzystać z najnowszych mechanizmów",
        "Poprawisz wydajność swoich aplikacji i zapewnisz im lepszą responsywność"
      ],
      "program": "* Podstawowe mechanizmy wielowątkowości\n\t* Wątek (Thread)\n\t* Pula wątków (ThreadPool)\n* Programowanie asynchroniczne\n \t* Zadanie (Task)\n \t* Anulowanie zadań (CancellationToken)\n \t* Wyświetlanie postępu (Progress)\n \t* Synchronizacja zadań\n \t* Optymalizacja (ConfigureAwait)\n\t* Lżejsza alternatywa (ValueTask)\n\t* Asynchroniczne iterowanie po kolekcjach (IAsyncEnumerable)\n\t* Wzorzec AsyncLazy\n* Kolekcje wielowątkowe\n\t* Bezpieczny słownik (ConcurrentDictionary)\n\t* Bezpieczna kolejka (ConcurrentQueue)\n\t* Bezpieczny stos (ConcurrentStack)\n\t* Kolekcja (ConcurrentBag)\n\t* Buforująca kolekcja dla wielowątkowości (BlockingCollection)\n* Synchronizacja wątków\n\t* Blokowanie dostępu do zmiennych (Interlocked)\n\t* Blokowanie dostępu do sekcji kodu (lock)\n\t* Zaawansowane zarządzanie blokadami (Monitor)\n\t* Ograniczanie liczby współbieżnych operacji (Semaphore i SemaphoreSlim)\n\t* Powiadamianie wątków o stanie (AutoResetEvent i ManualResetEvent)\n\t* Czekanie na zakończenie określonej liczby operacji (CountdownEvent)\n\t* Synchronizacja etapów wykonywania wątków (Barrier)\n\t* Synchronizacja międzyprocesowa (Mutex)\n* Kanały i przepływ danych\n\t* Przesyłanie danych między wątkami z użyciem kanału (Channel)\n\t* Kanał bez limitu pojemności (Unbounded Channel)\n\t* Kanał z ograniczoną pojemnościa (Bounded Channel)\t\n\t* Zamykanie kanału i obsługa końca strumienia\n\t* Tryby pracy kanału\n\t* Porównanie z BlockingCollection i kolejkami (ConcurrentQueue)\n\t* Przykłady zastosowań\n* Przetwarzanie równoległe (Parallel Programming)\n\t* Równoległe wykonywanie pętli (Parallel.For)\n\t* Równoległa iteracja (Parallel.ForEach)\n\t* Równoczesne uruchamianie metod (Parallel.Invoke)\n\t* Równoległe wykonywanie pętli operacji asynchronicznych (Parallel.ForAsync)\n\t* Równoległe iteracje operacji asynchronicznych (Parallel.ForEachAsync)\n\t* Równoległe zapytania LINQ (Parallel LINQ)\n* Wielowątkowość w ASP.NET\n\t* Tworzenie usług działających w tle (BackgroundService)\t\n\t* Asynchroniczne zwalnianie zasobów (IAsyncDisposable)\n* Bezpieczeństwo wątkowe\n\t* Zasady projektowania thread-safe kodu\n\t* Obiekty niezmienne (Immutable objects)\n* Testowanie kodu wielowątkowego\n\t* Testowanie metod asynchronicznych\n\t* Symulowanie problemów współbieżności\n* Praktyczne przykłady\n\t* Kolejka zadań w tle\n\t* Przetwarzanie dużych zbiorów danych\n\t* Przetwarzanie strumieni IoT\n\t* Reagowanie na zdarzenia UI",
      "url": "https://www.sulmar.pl/szkolenia/multithreading-async.html"
    },
    {
      "id": "redis",
      "title": "Redis dla programistów .NET",
      "tagline": "Turbodoładowanie dla twojej aplikacji.",
      "description": "Redis to magazyn danych o strukturze klucza i wartości typu open source, przechowywany w pamięci, należący do kategorii baz danych NoSQL. Redis może być używany jako wysokowydajna pamięć podręczna w pamięci, broker komunikatów i silnik przesyłania strumieniowego. Dzięki temu kursowi przyspieszysz swoje aplikacje i konkurencję zostawisz daleko w tyle.",
      "durationDays": 3,
      "difficulty": {
        "level": 2,
        "label": "Średnio-zaawansowany"
      },
      "category": "redis",
      "tags": [
        "redis",
        "dotnet",
        "nosql"
      ],
      "outcomes": [
        "Konfigurować i zarządzać instancjami Redis",
        "Pracować z różnymi strukturami danych w Redis",
        "Implementować strategie cache'owania danych",
        "Wykorzystywać mechanizm publikowania i subskrybowania wiadomości",
        "Obsługiwać transakcje i operacje atomowe",
        "Zabezpieczać, optymalizować i skalować Redis"
      ],
      "program": "* Wprowadzenie do Redis\n\t* Zastosowania\n\t* Instalacja\n* Narzędzia\n\t* CLI\n\t* RedisInsight\n* Klucze\n\t* Podstawowe operacje\n\t* Klucze ograniczone czasowo\n* Typy danych\n\t* Ciąg (String)\n\t* Lista (List)\n\t* Zbiór nieuporządkowany (Set)\n\t* Zbiór uporządkowany (Sorted Set)\n\t* Tablice asocjacyjne (Hash)\n\t* Zbiór przestrzenny (Geospatial)\n\t* Zbiór probabilistyczny (HyperLogLog)\n\t* Mapa bitowa (Bitmap)\n\t* Strumień (Stream)\n* Mechanizmy\n\t* Wysyłanie i odczytywanie wiadomości (Pub/Sub)\n\t* Obsługa transakcji\n\t* Śledzenie kluczy\n* Programowanie\n\t* Skrypty w języku Lua\n\t* Tworzenie funkcji\n* Skalowanie \n\t* Utworzenie klastra\n\t* Rozwiązanie problemu CROSSSLOT\n* Zarządzanie\n\t* Kopia bezpieczeństwa\n\t* Uwierzytelnianie\n\t* Użytkownicy i uprawnienia (ACL)\n* Rozszerzenia (Redis Stack)\n\t* Wyszukiwanie pełnotekstowe (RediSearch)\n\t* Obsługa dokumentów JSON (RedisJSON)\n\t* Przetwarzanie szeregów czasowych (RedisTimeSeries)\n* Integracja z .NET\n\t* StackExchange.Redis\n\t* Redis.OM",
      "url": "https://www.sulmar.pl/szkolenia/redis.html"
    },
    {
      "id": "crystal-reports-dla-poczatkujacych",
      "title": "Crystal Reports dla początkujących",
      "tagline": "Efektywne i efektowne raporty. Zaskocz szefa.",
      "description": "Crystal Reports to popularne narzędzie do tworzenia raportów, często zintegrowane z aplikacjami biznesowymi. Dlatego warto zdobyć umiejętności w jego obsłudze, aby zoptymalizować proces analizy danych w twojej firmie. Warszaty poprowadzi doświadczony instruktor, dzięki któremu poznasz krok po kroku zasady i techniki projektowania raportów. Przekonaj się sam, jak proste i przyjemne może być tworzenie raportów.",
      "durationDays": 2,
      "difficulty": {
        "level": 1,
        "label": "Początkujący"
      },
      "category": "reporting",
      "tags": [
        "crystal-reports"
      ],
      "outcomes": [
        "Projektować raporty w Crystal Reports",
        "Zarządzać sekcjami raportu",
        "Używać opcji i narzędzi do zwiększenia produktywności",
        "Optymalnie przetwarzać dane z bazy danych",
        "Dbać o estetyczną szatę graficzną",
        "Pisać proste i czytelne formuły jak profesjonalista",
        "Wdrażać i optymalizować raporty"
      ],
      "program": "- Podstawy\n  - Zasada działania\n  - Tryb podglądu i projektu\n  - Konfiguracja środowiska\n- Zasady projektowania raportów\n  - Zbieranie wymagań\n  - Tworzenie szkicu\n  - Dobre praktyki\n- Tworzenie raportu\n  - Wybór źródła danych\n  - Wybór tabeli\n  - Umieszczanie pól z bazy danych\n  - Umieszczanie pól tekstowych\n- Formatowanie\n  - Formatowanie tekstu\n  - Formatowanie liczb\n  - Formatowanie dat\n- Sortowanie\n  - Sortowanie rekordów\n- Filtrowanie danych\n  - Filtrowanie rekordów\n  - Wyrażenia warunkowe\n- Przekazywanie parametrów\n  - Typy parametrów\n  - Filtrowanie danych na podstawie parametru\n- Grupowanie danych\n  - Sortowanie grup\n  - Filtrowanie danych\n- Sumowanie danych\n  - Sumowanie wybranej kolumny\n  - Funkcje agregujące\n- Sekcje\n  - Przeznaczenie poszczególnych sekcji\n  - Formatowanie sekcji\n  - Ukrywanie sekcji\n  - Tworzenie własnej sekcji\n- Formuły\n  - Typy danych\n  - Operacje arytmetyczne\n  - Funkcje tekstowe\n  - Funkcje daty i czasu\n  - Konwersja typów\n- Tabele krzyżowe (cross-tab)\n  - Zastosowanie tabeli krzyżowej\n  - Formatowanie tabeli krzyżowej",
      "url": "https://www.sulmar.pl/szkolenia/crystal-reports-dla-poczatkujacych.html"
    },
    {
      "id": "entity-framework-core",
      "title": "Entity Framework Core",
      "tagline": "Ujarzmij dostęp do bazy danych. Wygodnie i wydajnie.",
      "description": "Entity Framework Core to zaawansowany framework ORM (Object-Relational Mapping), który umożliwia tworzenie aplikacji bazodanowych w języku C#. W trakcie tego szkolenia poznasz jak działa pod spodem i zdobędziesz umiejętności potrzebne do projektowania i wdrażania wydajnych aplikacji bazodanowych z wykorzystaniem .NET Core. Przekonaj się, że EF Core potrafi być szybki i wydajny.",
      "durationDays": 3,
      "difficulty": {
        "level": 2,
        "label": "Średnio-zaawansowany"
      },
      "category": "dotnet",
      "tags": [
        "dotnet",
        "entity-framework-core",
        "orm",
        "sql"
      ],
      "outcomes": [
        "Projektować złożony model danych",
        "Mapować model danych na bazę danych SQL",
        "Zarządzać śledzeniem obiektów",
        "Optymalizować zapytania z wykorzystaniem LINQ",
        "Aktualizować strukturę bazy danych z poziomu kodu",
        "Identyfikować i usuwać problemy wydajnościowe"
      ],
      "program": "* Wprowadzenie\n\t* ORM\n\t* DbContext\n* Code First\n\t* Utworzenie kontekstu\n\t* Wbudowane konwencje\n\t* Konfiguracja modelu za pomocą atrybutów\n\t* Konfiguracja modelu za pomocą FluentApi\n\t* Mapowanie relacji\n\t* Konfiguracja dziedziczenia\n\t* Wbudowane konwertery\n \t* Tworzenie własnego konwertera\n \t* Mapowanie kolumn typu JSON\n* Database First\n  * Generowanie modelu na podstawie bazy danych\n  * Szablony niestandardowe\n  * Dostosowanie szablonu (T4)\n* Aktualizacja bazy danych (Migracje)\n\t* Migracje automatyczne\n\t* Migracje ręczne\n \t* Modyfikacja skryptów migracyjnych\n \t* Wykluczanie tabel z migracji\n\t* Tworzenie paczki migracji\n* Operacje na danych\n\t* Dodawanie nowego rekordu\n\t* Aktualizacja rekordu\n\t* Usuwanie rekordu\n* Pobieranie encji\n\t* Zachłanne pobieranie encji (Eadger Loading)\n\t* Dzielenie na kilka zapytań (Split queries)\n\t* Jawne pobieranie encji (Explicit Loading)\n\t* Leniwe pobieranie encji (Lazy Loading)\n\t* Automatyczne pobieranie encji (AutoInclude)\n\t* Filtrowanie powiązanych encji\t\n\t* Filtrowanie globalne\n\t* Tagi zapytań\n* Zaawansowanie mapowanie tabel\n\t* Dzielenie tabeli (Table Splitting)\n\t* Dzielenie encji (Entity Splitting)\n* Śledzenie zmian\n\t* Stany encji\n\t* Ręczne modyfikowanie stanu encji\n\t* Automatyczne modyfikacji stanu encji (TrackGraph)\n\t* Diagnostyka\n* Zapisywanie zmian\n\t* Podstawowe\n\t* Zapisywanie powiązanych danych\n\t* Usuwanie kaskadowe\n\t* Odłączone encje\n\t* Obsługa transakcji\n\t* Rozstrzyganie konfliktów współbieżności\n\t* Zbiorcze modyfikowanie i usuwanie danych\n* Surowy SQL\n\t* Bezpośrednie wykonywanie zapytań SQL\n\t* Mapowanie widoków SQL\n\t* Obsługa procedur składowanych (T-SQL)\n\t* Mapowanie funkcji SQL\n* Diagnostyka\n\t* Logowanie zachowań Entity Framework Core",
      "url": "https://www.sulmar.pl/szkolenia/entity-framework-core.html"
    },
    {
      "id": "winforms",
      "title": "Tworzenie aplikacji Windows Forms",
      "tagline": "Buduj aplikacje okienkowe. Szybko i skutecznie.",
      "description": "Windows Forms (WinForms) to popularny framework do tworzenia aplikacji desktopowych na platformę Windows. Charakteryzuje się prostotą i intuicyjnym podejściem do tworzenia interfejsów użytkownika oraz obsługi zdarzeń. WinForms umożliwia szybkie tworzenie funkcjonalnych aplikacji desktopowych, co czyni go atrakcyjnym wyborem dla wielu projektów.",
      "durationDays": 3,
      "difficulty": {
        "level": 2,
        "label": "Średnio-zaawansowany"
      },
      "category": "dotnet",
      "tags": [
        "dotnet",
        "winforms"
      ],
      "outcomes": [
        "Tworzyć aplikacje WinForms",
        "Projektować formularze i panele",
        "Obsługiwać zdarzenia użytkownika",
        "Wyświetlać i edytować dane z bazy danych",
        "Korzystać z mechanizmu wiązania danych",
        "Diagnozować i testować aplikację"
      ],
      "program": "- Wprowadzenie\n  - WinForms  \n- Widoki\n  - Form\n- Układy\n  - Panel\n  - SplitterPanel\n  - FlowLayoutPanel\n  - TableLayoutPanel  \n- Komponenty\n  - Wbudowane komponenty\n  - Tworzenie własnego komponentu\n  - Zastosowanie UserControl\n  - Przekazywanie parametrów\n  - Wiązanie danych (Binding)\n  - Zastosowanie konwerterów\n  - Obsługa zdarzeń\n- Formularze\n  - Wprowadzanie danych\n  - Walidacja danych\n- Dostosowanie wyglądu aplikacji\n  - Ustawianie właściwości\n  - Korzystanie z zasobów\n- Tworzenie własnych komponentów",
      "url": "https://www.sulmar.pl/szkolenia/winforms.html"
    },
    {
      "id": "wpf-mvvm",
      "title": "Tworzenie aplikacji WPF MVVM",
      "tagline": "Buduj piękne aplikacje. Bez Code-Behind.",
      "description": "WPF (Windows Presentation Foundation) to popularny framework do tworzenia aplikacji desktopowych o nieograniczonych możliwościach. Szkolenie jest przeznaczone dla programistów, którzy chcą zgłębić techniki tworzenia aplikacji desktopowych przy użyciu platformy WPF oraz wzorca architektonicznego Model-View-ViewModel (MVVM). W trakcie kursu zbudujemy od podstaw kompletną aplikację z użyciem biblioteki MVVM Toolkit. Dzięki temu tworzenie nawet złożonej aplikacji w WPF będzie łatwe i przyjemne.",
      "durationDays": 3,
      "difficulty": {
        "level": 2,
        "label": "Średnio-zaawansowany"
      },
      "category": "dotnet",
      "tags": [
        "dotnet",
        "wpf",
        "mvvm"
      ],
      "outcomes": [
        "Tworzyć aplikacje WPF zgodnie ze wzorcem MVVM",
        "Projektować układy okien za pomocą paneli",
        "Dostosować wygląd przy pomocą styli i szablonów",
        "Wyświetlać i edytować dane z bazy danych",
        "Stosować komendy, konwertery i zachowania",
        "Diagnozować i testować aplikację"
      ],
      "program": "- Wprowadzenie do WPF\n  - WPF\n  - XAML\n  - Markup Extensions\n- Widoki\n  - Window\n  - Page\n  - Frame\n- Układy\n  - Grid\n  - UniformGrid\n  - StackPanel\n  - DockPanel\n  - WrapPanel\n  - Canvas\n- Komponenty\n  - Wbudowane komponenty\n  - Tworzenie własnego komponentu\n  - Zastosowanie UserControl\n  - Przekazywanie parametrów\n  - Wiązanie danych (Binding)\n  - Zastosowanie konwerterów\n  - Obsługa zdarzeń\n- Dostosowanie wyglądu aplikacji\n  - Tworzenie styli\n  - Zastosowanie wyzwalaczy (Trigger)\n  - Tworzenie szablonów danych (DataTemplate)\n  - Tworzenie szablonów komponentów (ControlTemplate)\n  - Korzystanie z zasobów\n- Wzorzec MVVM\n  - Podział na warstwy\n  - Zastosowanie komend (Command)\n  - Przekazywanie komunikatów\n  - Zachowania (Behavior)\n- MVVM Toolkit\n  - ObservableObject\n  - Wstrzykiwanie zależności\n  - RelayCommand\n  - Komunikaty\n- Diagnostyka\n  - XAML Binding Failures\n- Automatyzacja testów\n  - Testowanie View-Models",
      "url": "https://www.sulmar.pl/szkolenia/wpf-mvvm.html"
    },
    {
      "id": "sql",
      "title": "Podstawy języka SQL",
      "tagline": "Pisz dobre zapytania. Otrzymuj trafne odpowiedzi.",
      "description": "Język SQL jest podstawowym narzędziem pracy z bazami danych. Zrozumienie jego podstaw jest kluczowe dla osób zajmujących się analizą danych, programowaniem i zarządzaniem bazami danych. Dzięki temu szkoleniu poznasz język SQL na praktycznych przykładach i dzięki temu odkryjesz ukryte informacje w twoich danych.",
      "durationDays": 3,
      "difficulty": {
        "level": 1,
        "label": "Początkujący"
      },
      "category": "sql",
      "tags": [
        "tsql"
      ],
      "outcomes": [
        "Podstawowych operacji wyboru danych",
        "Operacji łączenia tabel",
        "Tworzenie i modyfikowania danych w tabelach",
        "Uzywania warunków i funkcji agregujących",
        "Definiować złozone podzapytania",
        "Stosować funkcje analityczne"
      ],
      "program": "- Wprowadzenie\n  - Budowa bazy danych\n  - Tabele i relacje\n  - Indeksy\n- Narzędzia\n  - Management Studio\n  - Azure Data Studio\n- Pobieranie danych\n  - Pobieranie danych z tabeli\n  - Aliasy tabel\n  - Aliasy pól\n- Filtrowanie\n  - Filtrowanie danych\n  - Wyrażenia logiczne\n  - Wartość NUL\n- Sortowanie\n  - Porządek sortowania\n- Funkcje agregujące\n  - Suma\n  - Średnia\n  - Liczność\n- Grupowanie\n  - Grupowanie danych\n  - Filtrowanie grup\n- Złączenia\n  - Złączenia wewnętrzne\n  - Złączenia zewnętrzne\n- Aktualizacja danych\n  - Wstawianie danych\n  - Modyfikacja danych\n  - Usuwanie danych\n- Operacje na zbiorach\n  - Suma zbiorów\n  - Róznica zbiorów\n  - Część wspólna\n- Podzapytania\n  - Zastosowania podzapytań\n  - Podzapytania nieskorelowane\n  - Podzapytania skorelowane\n- Wyrażenia CTE\n  - Tworzenie wyrażeń CTE\n- Funkcje analityczne\n  - Partycjonowanie danych\n  - Tworzenie rankingów",
      "url": "https://www.sulmar.pl/szkolenia/sql.html"
    },
    {
      "id": "unit-testing",
      "title": "Testy jednostkowe w C#",
      "tagline": "Testuj szybko, prosto i bezbłędnie.",
      "description": "Testy jednostkowe to kluczowy aspekt zapewniający stabilność aplikacji przy ciągłych zmianach wymagań. Podczas szkolenia poznasz zasady pisania dobrych testów łatwych w utrzymaniu. Odkryj praktyczne techniki testowania jednostkowego i szybko zacznij je stosować w codziennej pracy.",
      "durationDays": 3,
      "difficulty": {
        "level": 2,
        "label": "Średnio-zaawansowany"
      },
      "category": "dotnet",
      "tags": [
        "dotnet",
        "tdd",
        "design-patterns",
        "unit-tests"
      ],
      "outcomes": [
        "Zasad pisania testów jednostkowych łatwych w utrzymaniu",
        "Korzystać z popularnych bibliotek do automatyzacji testów",
        "Rozwijać kod równolegle z testami zgodnie z TDD",
        "Refaktoryzować kod z użyciem wzorców projektowych",
        "Symulować zewnętrzne zależności takie jak baza danych"
      ],
      "program": "- Wprowadzenie\n  - TDD\n  - F.I.R.S.T\n  - Co testować a czego nie?\n- Podstawy\n  - Nazewnictwo testów jako klucz do sukcesu\n  - Podział na kroki (Arrange, Act, Assert)\n  - Cykl Red-Green-Refactor\n- Biblioteki\n  - Wybór biblioteki MSTest, xUnit, nUnit\n  - Parametryzacja testów\n  - Weryfikacja poprawności za pomocą FluentAssertions\n- Tworzenie atrap (Moq, NSubstitution,FakeItEasy)\n  - Cel tworzenia atrap\n  - Utworzenie atrapy\n- Refaktoryzacja\n  - Złe praktyki\n  - Identyfikacja trudno testowalnego kodu\n  - Tworzenie kodu testowalnym\n  - Zastosowanie wzorców projektowych\n  - Praca z odziedziczonym kodem (legacy code)\n- Testy integracyjne\n  - Testowanie usług sieciowych REST API\n  - Zastosowanie konteneryzacji",
      "url": "https://www.sulmar.pl/szkolenia/unit-testing.html"
    }
  ]
}
