Cena kursu
- Cena spotkania grupowego wynosi 90 zł netto za 60 minut (110,7 zł brutto za 60 minut).
- Cena spotkania indywidualnego wynosi 140 zł netto za 60 minut (172,2 zł brutto za 60 minut).
- Płacisz zawsze za 25 kolejnych spotkań grupowych.
- Płacisz zawsze za jedno kolejne spotkanie indywidualne.
- Pierwsze spotkanie grupowe gratis.
- Istnieje możliwość wystawienia faktury VAT.
Opis kursu
- Profesjonalne przygotowanie do pracy na stanowisku programisty w wybranym języku programowania oraz powiązanymi z nim bibliotekami oraz frameworkami.
- Nauka od podstaw po zaawansowane rozwiązania komercyjne.
- Zoptymalizowany kod napisany zgodnie z dobrymi praktykami programistycznymi.
- Szkolenie według planu dopasowanego do najnowszych standardów IT.
- Nagrania ze spotkań grupowych, które możesz oglądać kiedy tylko chcesz.
- Ogromna ilość zadań teoretycznych i praktycznych o różnym poziomie trudności.
- Wsparcie mentora przy rozwiązywaniu problemów związanych z pytaniami teoretycznymi, zadaniami praktycznymi i projektami komercyjnymi.
- Elastyczny kontakt z mentorem.
- Profesjonalne przygotowanie do rozmowy kwalifikacyjnej.
- Profesjonalnie przygotowane portfolio z rozbudowanymi projektami komercyjnymi.
- Skuteczne techniki nauki programowania.
Plan kursu
- Narzędzia potrzebne do uruchomienia programu w Python
- Wersje języka Python
- Instalacja Python na dowolnym systemie operacyjnym
- Pierwsza aplikacja Python
- Praca z managerem pakietów pip
- Praca z interpreterem Python
- Zasada działania środowisk wirtualnych (virtual environments)
- Zarządzanie wirtualnym środowiskiem z wykorzystaniem virtualenv
- Zarządzanie wirtualnym środowiskiem z wykorzystaniem pipenv
- Zarządzanie wirtualnym środowiskiem z wykorzystaniem poetry
- Zarządzanie wirtualnym środowiskiem z wykorzystaniem conda
- Przegląd IDE oraz code editors do tworzenia aplikacji Python
- Analiza struktury projektu Python
- Zagadnienia uzupełniające
- Cechy języka dynamicznie typowanego
- Obiekty immutable oraz mutable
- Funkcja globalna id
- Typy liczbowe (całkowite i zmiennoprzecinkowe)
- Typy logiczne
- Liczby zespolone
- Ułamki
- Precyzyjne przechowywanie danych zmiennoprzecinkowych
- Namespaces
- Zasięg zmiennych
- Zasada LEGB
- Rzutowanie
- Pobieranie, losowanie i inne formy generowania danych
- Prezentacja danych w terminalu
- Losowanie danych
- Operatory i priorytety operatorów
- Zagadnienia uzupełniające
- Instrukcji warunkowe
- Ternary operator
- Blok match case
- Pętle
- Instrukcje break oraz continue
- Słowo kluczowe pass oraz operator ellipsis
- Debugowanie
- Analiza mechanizmu podpowiadania błędów
- Zagadnienia uzupełniające
- Organizacja kodu z wykorzystaniem funkcji
- Sposoby definiowania i wywoływania funkcji
- Parametry i argumenty funkcji
- Zwracanie wyniku działania funkcji
- Argumenty domyślne funkcji
- Positional arguments
- Keyword arguments
- Arbitrary argument list
- Zasady kolejności przekazywania argumentów do funkcji
- Podpowiadanie typów
- Higher Order Function
- Wyrażenia lambda
- Funkcje zagnieżdżone
- Closures
- Dekoratory
- Dokumentowanie funkcji
- Zagadnienia uzupełniające
- Napis jako obiekt niemutowalny
- Sposoby tworzenia i prezentacji napisów
- Napisy wielowierszowe
- Raw strings
- Formatowanie napisów
- Przegląd i praktyczne przykłady metod zarządzających napisami
- Optymalne przetwarzanie napisów
- Wyrażenia regularne
- Flagi do pracy z wyrażeniami regularnymi
- Konwersja i parsowanie napisów
- Zagadnienia uzupełniające
- Iteratory oraz struktury iterable
- Wzorzec lazy evaluation
- Sekwencje jako szczególny przypadek iterable
- List
- Tuple
- Namedtuple
- Range
- Bytes oraz bytearray
- Set
- Frozenset
- Dict
- Counter
- Deque
- Defaultdict
- OrderedDict
- ChainedMap
- Przegląd innych struktur z modułu collections
- Operacje i metody do zarządzania strukturami iterable
- Zasady porównywania elementów struktur iterable
- Zasady sortowania elementów struktur iterable
- List comprehension
- Przegląd funkcji realizujących programowanie funkcyjne
- Generatory
- Generator expressions
- Moduł itertools
- Struktury wielowymiarowe
- Tworzenie kodu o strukturze jednowierszowej
- Praktyczne przykłady wykorzystania bytów iterable
- Zagadnienia uzupełniające
- Przechowywanie daty i czasu za pomocą obiektów naive
- Przechowywanie daty i czasu za pomocą obiektów aware
- Omówienie struktury modułu datetime
- Reprezentowanie różnicy czasu za pomocą datetime.timedelta
- Reprezentowanie daty za pomocą datetime.date
- Reprezentowanie czasu za pomocą time.time oraz datetime.time
- Przechowywanie daty i czasu za pomocą obiektu datetime.datetime
- Zarządzanie strefami czasowymi za pomocą modułu pytz
- Konwersja daty i czasu pomiędzy różnymi strefami czasowymi
- Porównywanie daty i czasu
- Dobre praktyki programistyczne przetwarzania daty i czasu
- Zagadnienia uzupełniające
- Klasyfikacja błędów
- Syntax errors
- Wyjątki
- Zachowanie aplikacji podczas wystąpienia wyjątku
- Rzucanie wyjątków
- Przechwytywanie wyjątków za pomocą bloku try except
- Sekcja else w bloku try except
- Sekcja finally w bloku try except
- Przechwycenie rodzaju wyjątku w sekcji except
- Exception Groups
- Przegląd wbudowanych klas wyjątków
- Definiowanie własnych klas wyjątków
- Bezpieczna obsługa zasobów
- Zagadnienia uzupełniające
- Definicja modułu oraz paczki
- Sposoby tworzenia modułu
- Importowanie modułów
- Pozyskiwanie informacji na temat modułu
- Skrypt szczególnym przypadkiem modułu
- Zasady wyszukiwania modułów
- Kompilowanie modułów
- Moduł sys
- Przegląd innych standardowych modułów Python
- Funkcja dir
- Definiowanie paczek
- Plik __init__.py
- Różne sposoby importowania elementów paczki
- Dobre praktyki tworzenia struktury projektu
- Tworzenie przykładowego projektu z podziałem na paczki i moduły
- Umieszczenie paczek w zdalnym repozytorium PyPI
- Importowanie utworzonej paczki z repozytorium PyPI
- Zagadnienia uzupełniające
- Omówienie zasad programowania obiektowego
- Tworzenie klas i obiektów
- Klasyfikacja składników klasy
- Słowo kluczowe self
- Metoda __init__
- Inne ważne dunder methods
- Atrybuty klasy oraz atrybuty obiektu klasy
- Różne sposoby odwoływania się do składników instancji klasy
- Pozyskiwanie informacji na temat obiektu
- Przygotowanie obiektów klasy do pracy ze strukturami iterable
- Metody instancji klasy
- Dekoratory @classmethod oraz @staticmethod
- Dekorator @property
- Klasy jako obiekty callable
- Składniki prywatne w klasie
- Klasy POJO
- Dynamiczne tworzenie klas
- Podstawy metaprogramowania
- Dziedziczenie
- Polimorfizm
- Dekoratory @classmethod oraz @staticmethod w dziedziczeniu
- Rozszerzanie typów wbudowanych
- Abstrakcyjność
- Dziedziczenie wielokrotne
- Duck typing
- Implementacja własnego iteratora
- Moduł pythonlangutil
- Dekorator @dataclass
- Przegląd innych dekoratorów rozszerzających możliwości klasy
- Metoda __init_subclass__
- Dokumentowanie kodu klasy
- Zagadnienia uzupełniające
- Algorytmy badające właściwości geometryczne
- Algorytm badające właściwości matematyczne
- Konwersje pomiędzy systemami liczbowymi
- Badanie ciągów danych pod kątem wybranych właściwości
- Sortowanie ciągów danych
- Zastosowanie metody dziel i zwyciężaj
- Wybrane metody numeryczne
- Programowanie zachłanne
- Algorytmy na tekstach
- Wybrane algorytmy kryptograficzne
- Rekurencja
- Przegląd wybranych struktur danych
- Zagadnienia uzupełniające
- Klasyfikacja wzorców projektowych
- Implementacja wzorców kreacyjnych
- Implementacja wzorców strukturalnych
- Implementacja wzorców czynnościowych
- Zagadnienia uzupełniające
- Porównanie funkcji str() oraz repr()
- Implementacja różnych sposobów formatowania danych
- Operacje odczytu i zapisu do plików
- Praca z plikami w trybie tekstowym oraz binarnym
- Zarządzanie danymi w formacie JSON
- Operacje odczytu i zapisu do plików w formacie JSON
- Bezpieczny sposób zarządzania komunikacją z plikiem
- Zagadnienia uzupełniające
- Konfiguracja wybranego środowiska bazodanowego
- Omówienie zasad języka SQL
- Nawiązanie połączenia z bazą danych
- Konfiguracja connection pool
- Implementacja kursora do zarządzania połączeniem
- Implementacja operacji CRUD
- Zapytania parametryzowane
- Zarządzanie wynikami zapytań SQL
- Konfiguracja i zarządzanie relacjami
- Transakcyjność
- Pozyskiwanie informacji o właściwościach bazy danych i tabel
- Wykonywanie kopii zapasowej bazy danych
- Praktyczny przykład uogólnionego repozytorium bazodanowego
- Zagadnienia uzupełniające
- Omówienie zagadnień ORM
- Instalacja i konfiguracja aplikacji do pracy z SQLAlchemy
- Różne sposoby tworzenia modelu tabeli
- Zarządzanie modelem tabeli bazy danych z poziomu SQLAlchemy
- Pozyskiwanie informacji na temat modelu tabeli z bazy danych
- Zarządzanie migracjami z wykorzystaniem narzędzia Alembic
- Różne sposoby tworzenia i zarządzania sesją
- Transakcyjność
- Implementacja operacji CRUD
- Omówienie sposobów pozyskiwania danych z tabel
- Zarządzanie wynikami otrzymanymi w ramach zapytań
- Konfiguracja i zarządzanie relacjami bazodanowymi
- Sposoby implementowania mechanizmu eager loading
- Implementacja mechanizmów optimistic / pessimistic locking
- Implementacja cache
- Praktyczny przykład uogólnionego repozytorium bazodanowego
- Implementacja warstwy ORM z wykorzystaniem mechanizmów asynchroniczności (patrz punkt 19)
- Zagadnienia uzupełniające
- Konfiguracja wybranego środowiska bazodanowego NoSQL
- Omówienie zasad języka NoSQL
- Nawiązanie połączenia z bazą danych
- Tworzenie kolekcji oraz dokumentów
- Zarządzanie właściwościami pól dokumentów
- Implementacja relacji
- Indeksowanie oraz ustalanie porządku danych
- Dziedziczenie dokumentów
- Tworzenie i zarządzanie instancjami dokumentów
- Wstawianie, modyfikowanie i usuwanie dokumentów
- Pobieranie i zarządzanie danymi
- Sposoby optymalizacji zapytań
- Zagadnienia uzupełniające
- Zarządzanie archiwami ZIP
- Zarządzanie plikami CSV
- Zarządzanie plikami i katalogami
- Wysyłanie wiadomości email
- Lazy Streams
- Generowanie tokenów JWT
- Komunikacja ze zdalnym REST API
- Geolokalizacja
- Zagadnienia uzupełniające
- Omówienie zagadnień związanych z architekturą testowania
- Klasyfikacja testów
- TDD (Test-Driven Development)
- Wprowadzenie do biblioteki pytest
- Wprowadzenie do modułu unittest
- Analiza podstawowej struktury kodu testującego
- Uruchamianie testów
- Omówienie zasady działania asercji
- Praktyczne przykłady wykorzystania różnych rodzajów asercji
- Generowanie testów opartych na istniejących metodach
- Sposoby omijania testów
- Wykonywanie testów zagnieżdżonych i parametryzowanych
- Grupowanie testów
- Wykonywanie operacji przed testami i po testach
- Implementacja test loaderów
- Omówienie zagadnień związanych z mockowaniem
- Mechanizm patch oraz dekorator @patch
- Prezentacja różnych przykładów mockowania
- Analiza struktury i kolejności wywołania bytów mockowanych
- Rzucanie wyjątków z mockowanych obiektów
- Operacje typu side effect
- Generowanie mocków na podstawie istniejących obiektów
- Partial mocking
- Praca z fixtures
- Testy parametryzowane
- Implementacja przykładowych scenariuszy testujących różne warstwy aplikacji
- Generowanie raportu z testów
- Ocena jakości testów i badanie pokrycia testami
- Zagadnienia uzupełniające
- Wprowadzenie pojęć związanych z wielowątkowością
- Wprowadzenie pojęć związanych z asynchronicznością
- Wprowadzenie pojęć związanych z programowaniem równoległym
- Porównanie wielowątkowości, asynchroniczności i równoległości
- Moduł threading
- Tworzenie wątku za pomocą funkcji
- Tworzenie wątku za pomocą klasy
- Zarządzanie pracą wielu wątków z wykorzystaniem ThreadPoolExecutor
- Analiza problemów związanych z pracą wielu wątków
- Lock
- RLock
- Kolejki
- Implementacja wzorca producent-konsument
- Semafor
- Timer
- Barrier
- Moduł asyncio
- Słowa kluczowe async i await
- Omówienie zasady działania coroutine
- Omówienie zasady działania event loop
- Wykorzystanie funkcji asyncio.gather
- Wykorzystanie funkcji asyncio.create_task
- Chaining coroutines
- Kolejki asynchroniczne asyncio.Queue
- Iterator asynchroniczny
- Moduł aiohttp i asynchroniczna komunikacja z REST API
- Implementowanie asynchronicznego web servera
- Asynchroniczna komunikacja z plikami
- Praca z asynchronicznym context managerem
- Implementacja klasy do pracy z asynchronicznym context managerem
- Zarządzania taskami za pomocą asyncio.TaskGroup
- Przechwytywanie błędów podczas pracy z asyncio.TaskGroup
- Praktyczne przykłady mechanizmów programowania równoległego w Python
- Zagadnienia uzupełniające
- Omówienie architektury aplikacji webowej
- Omówienie standardów HTTP, REST, JSON i innych powiązanych
- Klasyfikacja pojęć związanych z frameworkiem Django
- Projekt i aplikacja
- Wzorzec projektowy Active Record
- Framework Django REST
- Przygotowanie środowiska do pracy z Django REST
- Dokeryzacja aplikacji webowej (patrz punkt 23)
- Praca ze zmiennymi środowiskowymi
- Implementacja REST API w oparciu o klasę APIView
- Implementacja REST API w oparciu o dekorator @api_view
- Routing
- Przekazywanie request params oraz query strings
- Praca z nagłówkami
- Przechwytywanie i walidacja ciała żądania
- Zarządzanie sesją oraz cookies
- Przygotowanie odpowiedzi dla żądania
- Analiza kodów HTTP
- Globalne przechwytywanie wyjątków
- Serializacja i deserializacja JSON
- Dobre praktyki serializacji danych
- Przygotowanie prawidłowego formatu zwracanych danych
- Implementacja serializerów i deserializerów
- Django ORM jako mechanizm do zarządzania warstwą bazodanową
- Migracje
- Tworzenie modelu bazy danych
- Zarządzanie zmianami w modelu bazy danych
- Implementacja relacji bazodanowych
- Zarządzanie zapytaniami do bazy danych
- Pobieranie i przetwarzanie danych z warstwy bazodanowej
- Optymalizacja komunikacji z bazą danych
- Konfiguracja panelu administratora
- Warstwa serwisowa aplikacji webowej
- Wykorzystanie modułu testowego Django do testowania aplikacji
- Testowanie modelu aplikacji
- Mockowanie obiektów i testowanie warstwy serwisowej
- Testowanie REST API z wykorzystaniem zewnętrznych klientów REST
- Konfiguracja CORS
- Pobieranie zasobów statycznych z aplikacji frontend
- Zarządzanie zasobami statycznymi z wykorzystaniem AWS S3
- Autentykacja i autoryzacja
- Omówienie standardu JWT
- JWT Debugger
- Zarządzanie danymi przesyłanymi w tokenie JWT
- Omówienie zasady działania i przygotowanie access token
- Omówienie zasady działania i przygotowanie refresh token
- Dobre praktyki szyfrowania danych w tokenach JWT
- Biblioteka Simple JWT
- Przygotowanie modułu rejestracji użytkowników
- Przygotowanie modułu aktywacji konta użytkownika
- Szyfrowanie hasła użytkownika
- Implementacja modułu autentykacji użytkownika
- Implementacja modułu autoryzacji użytkownika
- Omówienie zastosowania serwera nginx
- Przygotowanie wersji produkcyjnej aplikacji (WSGI oraz ASGI)
- Osadzenie aplikacji webowej w chmurze
- Generowanie dokumentacji aplikacji webowej
- Internacjonalizacja
- Zagadnienia uzupełniające
- Omówienie architektury aplikacji webowej
- Omówienie standardów HTTP, REST, JSON oraz innych powiązanych
- Klasyfikacja pojęć związanych z frameworkiem Flask
- Wprowadzenie do frameworka Flask-RESTful
- Przygotowanie środowiska do pracy z Flask-RESTful
- Dokeryzacja aplikacji webowej (patrz punkt 23)
- Praca ze zmiennymi środowiskowymi
- Implementacja REST API w oparciu o klasę Resource
- Implementacja REST API w oparciu o dedykowane dekoratory
- Routing
- Przekazywanie request params oraz query strings
- Praca z nagłówkami
- Przechwytywanie i walidacja ciała żądania
- Zarządzanie sesją oraz cookies
- Przygotowanie odpowiedzi dla żądania
- Analiza kodów HTTP
- Globalne przechwytywanie wyjątków
- Serializacja i deserializacja JSON
- Dobre praktyki serializacji danych
- Przygotowanie prawidłowego formatu zwracanych danych
- Flask-SQLAlchemy jako mechanizm do zarządzania warstwą bazodanową
- Migracje
- Tworzenie modelu bazy danych
- Zarządzanie zmianami w modelu bazy danych
- Implementacja relacji bazodanowych
- Zarządzanie zapytaniami do bazy danych
- Pobieranie i przetwarzanie danych z warstwy bazodanowej
- Optymalizacja komunikacji z bazą danych
- Warstwa serwisowa aplikacji webowej
- Testowanie modelu aplikacji
- Mockowanie obiektów i testowanie warstwy serwisowej
- Testowanie REST API z wykorzystaniem zewnętrznych klientów REST
- Konfiguracja CORS
- Pobieranie zasobów statycznych z aplikacji frontend
- Zarządzanie zasobami statycznymi z wykorzystaniem AWS S3
- Autentykacja i autoryzacja
- Omówienie standardu JWT
- JWT Debugger
- Zarządzanie danymi przesyłanymi w tokenie JWT
- Omówienie zasady działania i przygotowanie access token
- Omówienie zasady działania i przygotowanie refresh token
- Dobre praktyki szyfrowania danych w tokenach JWT
- Biblioteka Flask-PyJWT
- Przygotowanie modułu rejestracji użytkowników
- Przygotowanie modułu aktywacji konta użytkownika
- Szyfrowanie hasła użytkownika
- Implementacja modułu autentykacji użytkownika
- Implementacja modułu autoryzacji użytkownika
- Omówienie zastosowania serwera nginx
- Przygotowanie wersji produkcyjnej aplikacji (WSGI oraz ASGI)
- Osadzenie aplikacji webowej w chmurze (patrz punkt 24)
- Generowanie dokumentacji aplikacji webowej
- Internacjonalizacja
- Zagadnienia uzupełniające
- Omówienie architektury aplikacji webowej
- Omówienie standardów HTTP, REST, JSON oraz innych powiązanych
- Klasyfikacja pojęć związanych z frameworkiem FastAPI
- Prezentacja i wykorzystanie mechanizmu dependency injection
- Prezentacja i wykorzystanie mechanizmu middleware
- Wykorzystanie mechanizmów asynchroniczności do implementowania aplikacji webowej
- Przygotowanie środowiska do pracy z FastAPI
- Dokeryzacja aplikacji webowej (patrz punkt 23)
- Praca ze zmiennymi środowiskowymi
- Implementacja REST API
- Routing
- Przekazywanie request params oraz query strings
- Praca z nagłówkami
- Przechwytywanie i walidacja ciała żądania
- Zarządzanie sesją oraz cookies
- Przygotowanie odpowiedzi dla żądania
- Analiza kodów HTTP
- Globalne przechwytywanie wyjątków
- Serializacja i deserializacja JSON
- Dobre praktyki serializacji danych
- Przygotowanie prawidłowego formatu zwracanych danych
- SQLAlchemy jako mechanizm do zarządzania warstwą bazodanową
- Migracje
- Tworzenie modelu bazy danych
- Zarządzanie zmianami w modelu bazy danych
- Implementacja relacji bazodanowych
- Zarządzanie zapytaniami do bazy danych
- Pobieranie i przetwarzanie danych z warstwy bazodanowej
- Optymalizacja komunikacji z bazą danych
- Warstwa serwisowa aplikacji webowej
- Testowanie modelu aplikacji
- Mockowanie obiektów i testowanie warstwy serwisowej
- Testowanie REST API z wykorzystaniem zewnętrznych klientów REST
- Konfiguracja CORS
- Pobieranie zasobów statycznych z aplikacji frontend
- Zarządzanie zasobami statycznymi z wykorzystaniem AWS S3
- Autentykacja i autoryzacja
- Omówienie standardu JWT
- JWT Debugger
- Zarządzanie danymi przesyłanymi w tokenie JWT
- Omówienie zasady działania i przygotowanie access token
- Omówienie zasady działania i przygotowanie refresh token
- Dobre praktyki szyfrowania danych w tokenach JWT
- Biblioteka Jose do generowania tokenów JWT
- Przygotowanie modułu rejestracji użytkowników
- Przygotowanie modułu aktywacji konta użytkownika
- Szyfrowanie hasła użytkownika
- Implementacja modułu autentykacji użytkownika
- Implementacja modułu autoryzacji użytkownika
- Omówienie zastosowania serwera nginx
- Przygotowanie wersji produkcyjnej aplikacji
- Osadzenie aplikacji webowej w chmurze (patrz punkt 24)
- Generowanie dokumentacji aplikacji webowej
- Internacjonalizacja
- Zagadnienia uzupełniające
- Omówienie architektury platformy Docker
- Zasada działania obrazu oraz kontenera
- Różnica pomiędzy kontenerem Docker oraz maszyną wirtualną
- Instalacja platformy Docker
- Praca z Docker CLI
- Tworzenie i zarządzanie obrazami platformy Docker
- Image Layers
- Wprowadzenie do pracy z Docker Hub
- Osadzenie przygotowanego obrazu w repozytorium Docker Hub
- Tworzenie i zarządzanie kontenerami w platformie Docker
- Omówienie cyklu życia kontenera
- Kopiowanie plików z maszyny lokalnej do kontenera
- Kopiowanie plików z kontenera do maszyny lokalnej
- Klasyfikacja rodzajów danych przechowywanych w kontenerach
- Tworzenie i zarządzanie volumes w platformie Docker
- Różnica pomiędzy anonymous volumes oraz named volumes
- Tworzenie i zarządzanie bind mounts w platformie Docker
- Omówienie różnic pomiędzy volumes oraz bind mounts
- Tworzenie volumes tylko do odczytu
- Instalacja i uruchamianie przykładowych narzędzi z wykorzystaniem platformy Docker
- Omówienie struktury pliku konfiguracyjnego Dockerfile
- Praca z argumentami oraz zmiennymi środowiskowymi
- Konteneryzacja aplikacji webowej z wykorzystaniem Docker
- Komunikacja kontenera z zewnętrznym REST API
- Komunikacja kontenera z narzędziami osadzonymi w localhost
- Komunikacja container to container z użyciem networks w platformie Docker
- Przegląd sterowników do konfiguracji zachowania networks
- Omówienie zasady działania narzędzia Docker Compose
- Instalacja narzędzia Docker Compose
- Struktura pliku konfiguracyjnego narzędzia Docker Compose
- Przygotowanie kontenera bazy danych
- Konfiguracja kontenerów do pracy z wieloma bazami danych
- Konteneryzacja aplikacji webowej
- Przykład tworzenia utility containers
- Zagadnienia uzupełniające
- Omówienie architektury GIT
- Konfiguracja i personalizacja ustawień GIT
- Klasyfikacja repozytoriów
- Tworzenie repozytorium lokalnego
- Zarządzanie plikami w ramach obszarów repozytorium
- Rozgałęzianie i scalanie
- Przegląd wszystkich operacji GIT
- Aplikacje i wtyczki do pracy z GIT
- Praca ze zdalnym repozytorium
- Dobre praktyki tworzenia repozytoriów GIT
- GitHub Pages
- Zagadnienia uzupełniające