Sieciowe aplikacje w Elixir i Phoenix
LICZBA DNI: 5 (40h)
KOD KURSU: ELIXIR/APPS
O szkoleniu
DLA KOGO?
Programiści chcący poszerzyć swoje kompetencje o:
zrozumienie funkcyjnego programowania (które dalej można wdrożyć w wielu innych językach backendowych, które wspierają paradygmat funkcyjny)
zapoznanie się z dynamicznie funkcyjnym językiem, który korzysta z wielu lat doświadczenia Erlanga, ale jest równie przyjazny programiście, co Ruby
umiejętność budowy aplikacji sieciowych w języku Elixir, które używają typowych, podstawowych scenariuszy backendowych
WYMAGANIA
Umiejętność programowania w jakimkolwiek języku. Podstawowe koncepty t.j. pętle, if-else, funkcje, zmienne, itp. nie powinny być Ci obce :)
ZALETY
Warsztatowy charakter zajęć
Teoretyczna i praktyczna wiedza dotycząca funkcyjnego programowania, którą dalej można aplikować do języków funkcyjnych (np. Erlang, Haskell), jak i języków z wbudowanymi elementami paradygmatu funkcyjnego (np. JavaScript, Python, Java)
Budowa kilku projektów/aplikacji
Ćwiczenia pomagające utrwalić omawiane koncepty
Cele szkolenia
Poznanie języka Elixir wraz z frameworkiem Phoenix, w kontekście zarówno teoretycznym, jak i praktycznym (budowa prostych i nisko-zaawansowanych aplikacji sieciowych)
Poznanie podstaw współbieżności w Elixir (OTP, GenServers)
Program
Wprowadzenie do Elixir
- Dlaczego Elixir?
- Elixir LiveView, a JavaScript
- Konfiguracja narzędzi
- mix
- elixir-formatter
- PostgreSQL
Wprowadzenie do funkcyjnego programowania
- Czyste funkcje
- Niezmienność danych
- Funkcje wyższego rzędu oraz funkcje jako first class citizens
Podstawy języka Elixir
- Podstawowe typy danych
- Moduły
- Różne sposoby importowania oraz macros
- Atrybuty
- Funkcje
- Anonimowe/Nazwane
- Prywatne/Publiczne
- Guards
- Arity (ilość parametrów)
- Mapy i kolekcje
- Praca z mapami (tworzenie, czytanie, update)
- Praca z kolekcjami (listy, krotki, listy słów kluczowych)
- Operacje na kolekcjach z użyciem typowych funkcji: head, tail, map, filter, etc
- Operator pipe
- Kompozycja funkcji
- Pattern matching
- case, cond, if-else
Ćwiczenia
- Stosowanie podstawowych konceptów FP w Elixir
- Pisanie prostego kodu w Elixir używając funkcji i modułów
Bardziej zaawansowane koncepty funkcyjnego programowania
- Currying
- Partial application
- (Tail) Recursion
Średnio-zaawansowany Elixir
- Procesy, Taski, Stan, trzymanie danych w pamięci
- Structy, Protokoły
- List comprehensions
- Sigils
- Try, catch, oraz rescue
Ćwiczenia
- Proste aplikacje w Elixir, np
- Wybieranie i ustalanie danych trzymanych w pamięci z użyciem procesów
Współbieżność
- Czym jest Erlang'owy OTP (Open Telecom Platform)?
- GenServer
- Supervisor
- ETS (Erlang Term Storage)
Ćwiczenia
- Proste aplikacje w Elixir z użyciem konceptów współbieżności, np
- Cache z użyciem ETS
Framework Phoenix
- Foldery i pliki nowej aplikacji
- Flow requests, czyli app lifecycle
- Router
- Scopes
- HTML, JSON
- Struktura MVC (Model-View-Controller)
- Renderowanie templates, a API
- Korelacje pomiędzy kontrolerami, szablonami, oraz widokami
- Co z Websocketami, czyli trochę o channels
- LiveView, jako backendowa alternatywa do JavaScript (interakcje użytkownika bez frontendu!)
- Ecto (Phoenixowy ORM)
- Podstawy schemas
- Migracje
- Seedowanie db
Ćwiczenia
- Trzy proste aplikacje Phoenix
- Tradycyjne renderowanie HTML
- Pliki .eex
- Renderowanie szablonów w szablonach
- Szablonowe layouty
- Używanie funkcji i zmiennych wewnątrz szablonów
- Formy i phoenix_html API
- Phoenix jako czysty API serwer
- JSON
- Delegowanie (wzór)
- Phoenix bez frontendowych frameworków, czyli użycie LiveView
- Kontrolery
- Szablony
- Flow
- phoenix_live_view API
Co dalej?
- Aplikacje mieszane (np. renderowanie html plus channels)
- Refactoring
- Testowanie jednostkowe
- Funkcje
- Szablony
- JSON
- LiveView
- Dlaczego warto pisać czyste funkcje?
- Elixir/Phoenix do sieci i do internetu rzeczy (IoT)
