ByteBay 2018
Na ByteBay tylko dwie sesje będą takie same dla wszystkich: otwarcie i zamknięcie. Wszystko co pomiędzy, można ułożyć dowolnie, zależnie od zainteresowań. A że jest z czego wybierać postanowiliśmy zaproponować kilka wybranych ścieżek:
ŚCIEŻKA I
Jeżeli entuzjastycznie podchodzisz do języków programowania i chcesz zobaczyć jak poszczególne paradygmaty przekładają się na realizację zadań programistycznych w różnych językach to możesz zacząć od sesji Introduction to Kotlin (czwartek 10:30-13:00). Grzegorz Dyrda prowa zaprasza na piękną przygodę poznawania języka, który czerpie pełnymi garściami z doświadczeń swoich wielkich poprzedników - Java, C#, Groovy, JavaScript, Scala, Swift - biorąc z nich to, co najlepsze, a odrzucając to, co słabe.
Po lunchu czas na Scalę - Wprowadzenie do Scali (czwartek 14:00-16:30). Wprowadzać będzie Paweł Włodarski, które pokaże, że Scala jest tak naprawde bardziej obiektowa niż Java a także i wprowadza wiele ciekawych mechanizmów, które sprawdziły się na tyle, że również pojawiają się w Kotlinie. Nie trzeba znać Scali, trzeba trochę znać Javę.
W piątek możemy kontynuować pracę z czysto funkcyjnymi językami lub zobaczyć jak funkcyjne konstrukcje mogą być implementowane w popularnych językach jak np. JavaScript. Do wyboru będzie Clojure Koans & REST assured (piątek 09:00 - 11:30) podczas którego Paweł Kapała będzie przedstawiał Clojure. Przy użyciu prostych przykładów, rozwiązując praktyczne zadania polegające na naprawieniu testów jednostkowych nauczy języka krok po kroku. Alternatywnie Functional concepts in JavaScript, gdzie Bartosz Witczak nie będzie omawiać monad, funktorow i innych ciekawych matematycznych terminów, ale pokaże w jaki sposób programowanie funkcyjne pomoże nam udoskonalić nasz kod, uczyni go bardziej czytelnym. Będzie eksperymentował z kilkoma funkcyjnymi operacjami i typami danych, prześledzi konstrukcje, które wykorzystuje na co dzień i przeniesie je do świata programowania funkcyjnego.
Na koniec wracamy do Scali: Efektywne programowanie funkcyjne w Scali (piątek 12:30 - 15:00), gdy Andrzej Janczak postara się rozwiać wiele mitów które narosły odnośnie Scali: "Programowanie funkcyjne jest trudne i to sama matma", "Scala jest nieproduktywna, niezrozumiała i ogólnie ciężka". Andrzej pokażę, że programowanie funkcyjne w Scali jest logiczne, zrozumiałe i proste.
ŚCIEŻKA II
Jeżeli interesuje Cię nowoczesna infrastruktura, chmura, kontenery to warto zacząć od sesji nt Dockera, prowadzonej przez Macieja Krajewskiego (czwartek 14:00-16:30). Maciej pokaże dlaczego dzięki zastosowaniu dockera można w prosty sposób zapewnić izolację serwisów, zwiększając tym samym bezpieczeństwo i stabilność aplikacji. Jak podejście kontenerowe umożliwia sprawne i pełne odtworzenie środowisk produkcyjnych w każdym miejscu (nawet na laptopie).
W piątek możemy kontynuować pracę infrastrukturę to w piątek rano warto zaglądnąć na sesję Kubernetes od podstaw (piątek 09:00-11:30), gdzie Daniel Pokusa chciałby pokazać podejście które jest wygodne zarówno od strony OPSów jak i programistów, podejście, które potrafi bardzo przyspieszyć i ułatwić development, podejście, które pozwoli programistom i administratorom wejść w świat kultury devops i naprawdę lepiej rozumieć siebie nawzajem.
Na koniec, Bartosz Nowakowski i Michał Gryko pokażą przykład z życia wzięty: Wykorzystanie dockera w celu poprawy efektywności CI/CD (piątek 12:30-15:00). Na warsztacie wspólnie przygotują build plan w narzędziu Continious Integration z pojedynczym agentem, a następnie pokażą jak w prosty sposób skalować to rozwiązanie gdy rośnie obciążenie - gdy wzrasta liczba użytkowników, build planów oraz samych buildów.
ŚCIEŻKA III
Jeżeli Twoją pasją jest nowoczesna architektura aplikacji, szczególnie popularnych ostatnio aplikacji rozproszonych (mikroserwisów) i ciekawi jak radzić sobie z wieloma typowymi problemami tak zbudowanych aplikacji. Jeżeli kwestią jest skąd serwisy mają wzajemnie o sobie wiedzieć - to sesja Service Discovery & Failure Detection with Consul prowadzona przez Tomaszów Mazura i Wnorowskiego udzieli wielu odpowiedzi. Jeśli kwestią są jednak testy to warsztat Consumer-Driven Contracts w praktyce prowadzony przez Jędrzeja Andrykowskiego odpowie jak można konfigurować i pisać "żywe" kontrakty pomiędzy serwisami RESTowymi tak, aby nie dopuszczać do wprowadzania niekompatybilnych zmian pomiędzy klientem a producentem.
Mikrousługi to także kwestie bezpieczeństwa. Warsztat Krzysztofa Mejki nt Implementacji OAuth 2.0 pomoże zrozumieć na czym polega bardzo popularny framework OAuth 2.0 oraz jak wygląda jego implementacja w Spring Boot, jak zabezpieczyć za jego pomocą system zbudowany w oparciu o mikroserwisy.
Systemy rozproszone to nie tylko narzędzia techniczne. Jeżeli wyzwaniem jest podział systemu na części to Łukasz Szydło odpowie Jak podzielić system na moduły? Nie ważne w jakim stylu architektonicznym tworzona jest aplikacja (monolit, mikroserwisy, serverless) warunkiem koniecznym niewystarczającym, do uzyskania takich właściwości jak: łatwość utrzymania, testowalność, reużywalność czy skalowalność, jest odpowiedni podział na moduły.
15 MARCA / CZWARTEK
- 09:00 - 10:00 Keynote - otwarcie konferencji
- 10:00 - 10:30 Przerwa kawowa
- 10:30 - 13:00 SESJE WARSZTATOWE I
Zawładnij (hiper)tekstem, czyli jak zbudować wyszukiwarkę?
Poziom zaawansowania: Wprowadzenie
Przeszukiwanie tekstu zagościło na dobre we współczesnych aplikacjach internetowych. Czy zastanawiałeś się, jak to właściwie działa? Może chciałbyś stworzyć własną wyszukiwarkę, obsługującą różnorodne formy danych wejściowych? Poznaj Lucene - silnik wyszukiwania leżący u podstaw popularnych rozwiązań, takich jak Elasticsearch, Opengrok, czy Apache Solr. Dowiedz się, jak zbudowany jest indeks wyszukiwarki i jak sprawić, aby użytkownik szybko znalazł interesujące go dane. W ramach warsztatu zobaczysz, jak sprowadzić tekst do postaci, którą można efektywnie przeszukiwać. Nauczysz się także stosować Lucene w praktyce, krok po kroku budując własną, coraz bardziej wyrafinowaną wyszukiwarkę.
Java Mission Control + Flight Recorder — diagnozowanie problemów wydajnościowych na produkcji
Poziom zaawansowania: Coś już tam trzeba wiedzieć
Narzędzia JDK pozwalają na szczegółową analizę wydajności. Możemy liczyć że będą dostępne na (pre-)produkcji. Co daje nam duże możliwości diagnozowania problemów. Nawet jeśli podchodzimy do problemu ad hoc — nie planowaliśmy takiej możliwości przy wdrożeniu i instalacji. Na warsztacie zobaczymy jak za pomocą narzędzi JDK wykryć przykładowe problemy: wyciek pamięci, nadmierna alokacja obiektów, źle skonfigurowany GC. Porównamy informacje dostępne w maszynie wirtualnej, z tym co oferuje system operacyjny. Przyjrzymy się możliwościom wizualizacji i automatyzacji.
Docker – wstępniaczek
Poziom zaawansowania: Wprowadzenie
Dzięki zastosowaniu dockera możemy w prosty sposób zapewnić izolację serwisów, zwiększając tym samym bezpieczeństwo i stabilność aplikacji. Podejście kontenerowe umożliwia nam sprawne i pełne odtworzenie środowisk produkcyjnych w każdym miejscu (nawet na swoim laptopie). Poznasz technologię, która rozwiąże większość problemów, jakie masz dzisiaj ze środowiskami dev/test i prod. W prosty i łatwy sposób będziesz w stanie dostarczać kolejne "paczki" z softem do klienta oraz co najważniejsze, będziesz miał pewność, że jak "działa lokalnie to zadziała też na produkcji" :) Trener ma ponad 3 letnie doświadczenie z dockerem, był odpowiedzialny za zdockeryzowanie aplikacji czasu rzeczywistego opartej na javie składającej się z kilkudziesięciu różnych kontenerów. Nie ma pytania z docker’a na które nie zna odpowiedzi. Podczas warsztatu poruszymy następujące kwestie:
- Czym jest Docker
- Tworzenie kontenerów
- Zarządzanie kontenerami
- Dokeryzowanie aplikacji
- Zarządzanie obrazami Dockera
- Budowanie skalowalnej aplikacji
Oczekiwany poziom: Podstawowa wiedza z zakresu linuxa - poruszanie się po konsoli, instalowanie paczek itd. Doświadczenie z dockerem mile widziane, gwarantuje że poznasz go lepiej.
Sesja Event Storming-u
Poziom zaawansowania: Coś już tam trzeba wiedzieć
Na sesji zapoznam was z notacją Event Storming-u, rolą warsztatów ES w procesie zwinnego wytwarzania oprogramowania oraz możliwymi zastosowaniami w waszej codziennej pracy. Zastosujemy Event Storming Big Picture, Design Level oraz przyjrzymy się relacji modelu ES z kodem źródłowym.
Introduction to Kotlin
Poziom zaawansowania: Coś już tam trzeba wiedzieć
Jeśli coraz częściej słyszysz o Kotlinie, ale dotąd nie miałeś(-aś) czasu bliżej się z nim zapoznać, to te warsztaty są właśnie dla Ciebie :) Zapraszam na piękną przygodę poznawania języka, który czerpie pełnymi garściami z doświadczeń swoich wielkich poprzedników - Java, C#, Groovy, JavaScript, Scala, Swift - biorąc z nich to, co najlepsze, a odrzucając to, co słabe. Najpierw omówimy założenia języka i motywy jakie przyświecały jego twórcom (JetBrains). A potem włączymy IntelliJ i zaczniemy się bawić :) Serio - niektóre rozwiązania są tak genialne, że wywołują niekontrolowany uśmiech na twarzy :) Przećwiczymy najważniejsze elementy składni języka i jego najciekawsze funkcjonalności, rozwiązując przy tym sporo praktycznych zadań.
Spring Boot - szybki start
Poziom zaawansowania: Wprowadzenie
Spring Boot - szybki start to warsztat dla osób chcących szybko zbudować aplikacje internetową napisaną w języku Java. Minimum konfiguracji, sprawny development.
- 13:00 - 14:00 Przerwa lunchowa
- 14:00 - 16:30 SESJE WARSZTATOWE II
React – co i jak?
Poziom zaawansowania: Wprowadzenie
Chcesz nauczyć się najpopularniejszej technologii do tworzenia aplikacji internetowych? Poprawić swoje umiejętności programowania w JavaScript? Skupiając się na prostocie przekazu ten kurs pokaże Ci: - Jak zbudować dynamiczną aplikację internetową w krótkim czasie - Jak wykorzystać create-react- app w swojej pracy - Jak skorzystać z nowych funkcji ES6 W czasie warsztatu zbudujemy razem aplikację opartą o najnowocześniejsze technologie frontendowe, których używa m. in. Netflix, Facebook czy AirBnB.
Kubernetes od podstaw
Poziom zaawansowania: Wprowadzenie
W świecie systemów rozproszonych, mikrousług, zdarzeń programiście nie wystarczy już tylko wiedzieć jak napisać i zbudować kod źródłowy. W świecie, w którym system podzielony jest na kilka, kilkanaście, kilkadziesiąt lub kilkaset modułów przychodzi taki moment w którym potrzebujemy skomunikować się z innymi komponentami. W tym samym świecie systemy produkcyjnie uruchamiamy w chmurze. I wszystko ładnie, pięknie, ale jak tutaj prowadzić development? Czy każdy programista powinien mieć swoją chmurę na którą będzie w stanie wrzucić swoje "dziecko w trakcie aktu tworzenia"? Czy musimy uruchamiać wszystko? Co z kosztem? W takim razie może powinienem uruchamiać swoją lokalną instancję poza chmurą? Ale czy wtedy nie istnieje ryzyko, że inny sposób wdrożenia podczas developmentu spowoduje problemy na środowiskach produkcyjnych? A może by tak dało się prościej? Może da się tworzyć w oparciu o takie same podejście do wdrożeń na lokalnej maszynie programisty z możliwością wybrania, które elementy faktycznie powinny zostać uruchomione? Może development mógłby działać podobnie do produkcji i gwarantować taki sam sposób wdrożenia? Chciałbym Wam pokazać jedną z alternatyw- podejście które jest wygodne zarówno od strony OPSów jak i programistów, podejście, które potrafi bardzo przyspieszyć i ułatwić development. Podejście, które pozwoli nam (programistom) i administratorom wejść w świat kultury devops i naprawdę lepiej rozumieć siebie nawzajem.
W ramach warsztatów:
- Skonfigurujesz poprawnie lokalne środowisko pracy z kubernetesem
- Na podstawie przygotowanych i udostępnionych obrazów dockera przykładowych aplikacji wdrożysz własne moduły na kilka różnych sposobów wraz z wyróżnieniem wad i zalet każdego z podejść
- Opracujesz automatyczny restart aplikacji na wypadek problemów i zobaczysz jak działa to w praktyce
- Skonfigurujesz na potrzeby developmentu bazy danych i inne usługi serwisowe
- Zdefiniujesz automatyczne skalowanie aplikacji
- Przeprowadzisz rolling-release przykładowej aplikacji gwarantując tzw. "zero-downtime"
- Dowiesz się jak rekonfigurować aplikację za pomocą config map
- Zabezpieczysz hasła i klucze do baz danych
Wszystko to pozwoli Ci swobodnie pracować i przygotowywać konfiguracje aplikacji za które administratorzy Cię pokochają :)
Wprowadzenie do Scali
Poziom zaawansowania: Wprowadzenie
Java 10 tuż tuż i już nikogo nie będzie dziwić zapis var s=”hello”. Alternatywne języki JVM wpływają na to jak rozwija się sama Java i chciałbym was zachęcić do poznania mechanizmów w tychże językach zanim wszystko trafi do mainstreamu. Ponieważ Java przyzwyczaiła nas do podejścia obiektowego to i od tego zaczniemy nasza naukę. Zobaczymy, że Scala jest tak naprawde bardziej obiektowa niż Java a także i wprowadza wiele ciekawych mechanizmów, które sprawdziły się na tyle, że również pojawiają się w Kotlinie. W dalszej części - w zależności od tego co będzie chciała robić publiczność - możemy pójść dalej w system typów lub skupić się na funkcjach. Nie trzeba znać Scali, trzeba trochę znać Javę. Kto chętny może zapoznać się z teorią: https://pawelwlodarski.gitbooks.io/workshops/content/
Consumer-Driven Contracts w praktyce
Poziom zaawansowania: Wprowadzenie
Jeśli robisz mikroserwisy, udostępniasz publiczną usługę albo po prostu korzystasz z jakiegoś API to na pewno masz do czynienia z kontraktami. Kontrakt pomiędzy klientem a serwerem ma niestety to do siebie, że bardzo łatwo go złamać (co zapewne każdy z nas nie raz doświadczył). Mała poprawka na API, szybkie wdrożenie i ... BOOM! Dlaczego? Bo okazało się, że "jeszcze któryś klient korzysta z tego co zmieniliśmy?" Co wtedy robić? Oczywiście próbować nie dopuszczać do takiej sytuacji, jednak jak? Tą bolączkę rozwiązuje Consumer-Driven Contracts. W ramach warsztatu omówimy idee wzorca oraz co najważniejsze - narzędzie Spring Cloud Contract. Nauczymy się je konfigurować w środowisku Java + SpringBoot oraz pisać "żywe" kontrakty pomiędzy serwisami RESTowymi tak, aby nie dopuszczać do wprowadzania niekompatybilnych zmian pomiędzy klientem a producentem.
Clojure Koans & REST assured
Poziom zaawansowania: Wprowadzenie
Clojure Koans Nie znasz Clojure? Nie ma problemu! Przy użyciu prostych przykładów, rozwiązując praktyczne zadania polegające na naprawieniu testów jednostkowych nauczysz się języka krok po kroku. Zapraszam wszystkich, którzy chcą spróbować sił w programowaniu funkcyjnym i zobaczyć o co na prawdę chodzi z tymi "nawiasami". REST assured Zbudujmy coś praktycznego! Krok po kroku, małymi zmianami zbudujemy razem prostą aplikację, która będzie odpowiadać na http. Taki typowy przypadek użycia. Pozwoli to przećwiczyć wiedzę nabytą w pierwszej części warsztatu.
Testowanie wydajności kodu Javy za pomocą narzędzia JMH.
Poziom zaawansowania: Coś już tam trzeba wiedzieć
Testowanie wydajności kodu. A co w tym trudnego? Wystarczy System.currentTimeMillis() przed i po wywołaniu metody i po kłopocie. Przecież sam Bruce Eckel tak robił. Okazuje że można przy okazji popełnić wiele typowych błędów, które mogą spowodować, że nasze szacowania będą bezużyteczne. W ramach sesji warsztatowej wykorzystamy narzędzie JMH do testowania naszych kawałków kodu i zobaczymy jak pomoże nam ono tych błędów uniknąć. Przy okazji poznamy też triki JIT-compilera, którymi sprawia, że java potrafi działać naprawdę szybko ale przy okazji czyni pisanie microbenchmarków zadaniem nie tak trywialnym jakby się mogło na pierwszy rzut oka wydawać. Uczestnicy powinni umieć programować w Javie.
- 14:00 - 16:30 DEEP DIVE
JVM: przez dziurkę od klucza
Poziom zaawansowania: Rozpracowujemy niuanse
JVM to złożona maszyna, która napędza nasze systemy. Codziennie w pocie czoła przerzuca terabajty obiektów pomiędzy kolejnymi generacjami w GC, generuje strumienie optymalnego kodu skompilowanego przez jeden z kompilatorów JIT, w międzyczasie próbując dogadać się z systemem operacyjnym. Jednak nie zawsze w naszej maszynowni wszystko przebiega zgodnie z planem. Gdzie szukać informacji? Jak odczytywać i interpretować wartości metryk? Kiedy winny jest JVM, nasza aplikacja, a w jakim przypadku system operacyjny? Podczas tej sesji postaram się pokazać dostępne narzędzia, magiczne przełączniki i dostępne rozwiązania potrzebne w pracy każdego "kryminologa" JVM. Sesja będzie przeznaczona dla osób, które zaczynają przygodę z optymalizacją JVM. Porozmawiamy o zapisywaniu zdarzeń z JVM, narzędziach ukrytych w JDK,w tym także Java Mission Control i Flight Recorder i zobaczymy jak Java płonie :). Nie zapomnimy też o narzędziach dostępnych w systemie operacyjnym Linux.
ElasticSearch: wydajnościowe pułapki?
Poziom zaawansowania: Rozpracowujemy niuanse
Z ElasticSearchem łatwo zacząć - ściągasz JARa, uruchamiasz, budujesz swój pierwszy indeks i bawisz się RESTowym API. Kilka sprintów dalej wdrażasz rozwiązanie na produkcję, puszczasz na nie produkcyjny ruch... i jesteś nieco zmartwiony wydajnością. Domyślna konfiguracja indeksów ElasticSearcha nie pasuje do wszystkich przypadków użycia i w produkcyjnych warunkach prawie zawsze musimy coś zmienić. A żeby nie uciekać się do, niekiedy kosztownych, metod typu “kręcę gałami i patrzę co się dzieje” potrzebna jest odrobina wiedzy o tym, co się kryje pod maską. W trakcie sesji postaramy się tę wiedzę dostarczyć. Na początek powiemy kilka słów o samym sercu ElasticSearcha, którym jest indeks Lucene, a następnie zrobimy przegląd parametrów konfiguracyjnych, które wpływają na wydajność, za każdym razem demonstrując co się dzieje z indeksem kiedy je zmieniamy i jak to wpływa na czas indeksowania, czas odpowiedzi na zapytanie, wielkość indeksu, czy pamięć zużytą do obsługi zapytania. Zilustrujemy te przykłady opowieściami z życia wziętymi. Sesja jest przeznaczona dla tych, którzy zaczynają przygodę z optymalizacją ElasticSearcha i zamiast polegać na metodzie na chybił-trafił, woleliby zanurkować głębiej, zrozumieć mechanikę działania i na tej podstawie wykonać kilka bardziej precyzyjnych ruchów.
- 16:30 - 19:00 Meet & Greet
To ten moment gdy rozmawiasz z uczestnikami, trenerami.
16 MARCA / PIĄTEK
- 9:00 - 11:30 SESJE WARSZTATOWE I
Uczenie maszynowe i jak budować systemy analizy sentymentu?
Poziom zaawansowania: Coś już tam trzeba wiedzieć
W trakcie warsztatu pokażę dlaczego analiza sentymentu jest istotna nie tylko w biznesie, ale również wykorzystywana m.in. przez służby bezpieczeństwa. Zaprezentuję jak przygotować architekturę pod własny system i wykorzystamy algorytmy uczenia maszynowego.
- 9:00 - 11:30 DEEP DIVE I
Speed-up code evaluation by JIT compilation
Poziom zaawansowania: Expert - krew, pot i łzy
Podczas prezentacji chciałbym odpowiedzieć na pytanie, dlaczego generowanie kodu ma sens, gdzie można je zastosować i w jaki sposób zwiększa wydajność. Postaram się także omówić obecne trendy w tej dziedzinie. Zmierzając do celu przedstawię budowę kompilatorów oraz opisze kolejne fazy kompilacji skupiając się na generowaniu kodu, poczynając od frontentu, kończąc na generowaniu kodu maszynowego.
Service Discovery & Failure Detection with Consul (101)
Poziom zaawansowania: Wprowadzenie
Do you want to know how you can ensure that your microservices are resilient to network problems? Or perhaps you need to know how to keep system running even after crash of the half of the servers? Join our workshop to learn more. The workshop provides intensive introduction into service discovery tool from Hashicorp - Consul. Our exercises ran for the two-and-half hour and at the end, you should have basic knowledge on how to do service discovery and failure detection in highly resilient environments. We will also cover some best practices for using Consul at scale.
Wykorzystanie dockera w celu poprawy efektywności CI/CD
Poziom zaawansowania: Wprowadzenie
Dzięki zastosowaniu dockera możemy zwiększyć efektywność naszego CI/CD. I nie mamy tu na myśli konteneryzacji aplikacji, a wykorzystanie dockera jako składnik środowiska budującego (development toolchain). Na warsztacie wspólnie przygotujemy build plan w narzędziu CI z pojedynczym agentem, a następnie jak w prosty sposób skalować to rozwiązanie gdy przybywa nam obciążenia - zarówno w postaci wzrostu ilości: użytkowników, build planów oraz samych buildów. Każdy z uczestników będzie rozwijał swoje środowisko CI z wykorzystaniem platformy chmurowej. W wielu firmach dużym problemem jest utrzymywanie wydajnej infrastruktury CI/CD i chcemy zaprezentować jeden ze sposobów na rozwiązanie tego wyzwania. Podczas warsztatu poruszymy następujące kwestie: - Tworzenie kontenera budującego przykładową aplikację - Uruchomienie kontenera budującego w lokalnym środowisku - Symulacja wzrostu ilości równoległych buildów - Skalowanie kontenerów budujących z wykorzystaniem chmury
NginX + Lua = OpenResty
Poziom zaawansowania: Wprowadzenie
Czy wiesz co potrafi zrobić twój serwer reverse-proxy? Wydaje Ci się, że żeby zrobić sprytny routing / uwierzytelnianie / autoryzację (niepotrzebne skreślić) między serwisami musisz go napisać w Javie lub jako moduł w C? A co jeżeli odpalanie JVM tylko po to, żeby do każdego żądania http dokleić jeden nagłówek to armata na wróbla? Zwłaszcza, że prawie na pewno gdzieś tam po drodze mijasz nginx... Zapraszam Cię do świata idealnej symbiozy nginx i Lua. Założenia co do uczestników: Mogliby znać Dockera, bo wszystko będziemy na kontenerach odpalać. Przy czym widziałem, że są też warsztaty z niego, więc składa się idealnie... Ani Lua ani NginX nie trzeba znać - będziemy robić warsztaty od "zera do bohatera" :)
O optymalizacji MongoDB przykładów kilka
Poziom zaawansowania: Rozpracowujemy niuanse
MongoDB to w ostatnich latach jedna z najpopularniejszych NoSQL'owych baz danych. Jak każda baza obiecuje być szybka, niezawodna i skalowalna. Jednak jak pokazuje Problem Wyciekającej Abstrakcji (https://en.wikipedia.org/wiki/Leaky_abstraction) nie da się tego osiągnąć bez znajomości niuansów i wewnętrznej implementacji (a przynajmniej wiedzy o tym, jak działa dane narzędzie poniżej publicznego api). Na warsztacie przyjrzymy się temu jak poszukiwać wąskie gardła, jak czytać explain() i na co zwracać uwagę. Dokładnie przyjrzymy się indeksom. Dowiemy się jak najlepiej wykorzystywać indeksy do sortowania, dlaczego tak ważna jest kolejność pól w indeksie oraz jakie są zasady, którymi powinniśmy się kierować tworząc indeksy. Aby dodać łyżkę dziegciu do beczki miodu rzucimy okiem na ciemniejszą stronę indeksów - zasobożerność i to jak wpływają na wydajność zapisów. Oprócz tego zobaczymy kilka trików z klastrami (replica set) oraz na co zwrócić uwagę przy używaniu shardingu.
Functional concepts in JavaScript
Poziom zaawansowania: Coś już tam trzeba wiedzieć
Niektóre elementy programowania funkcyjne przydadzą się każdemu. Nie będziemy omawiać monad, funktorow i innych ciekawych matematycznych terminów. Zobaczymy w jaki sposób programowanie funkcyjne pomoże nam udoskonalić nasz kod, uczyni go bardziej czytelnym. Będziemy eksperymentowali z kilkoma funkcyjnymi operacjami i typami danych. Prześledzimy konstrukcje, które wykorzystujemy na co dzień i przeniesiemy je do świata programowania funkcyjnego.
- 11:30 - 12:30 Przerwa lunchowa
- 12:30 - 15:00 SESJE WARSZTATOWE II
Wprowadzenie do Domain-Drived Design na przykładach
Poziom zaawansowania: Coś już tam trzeba wiedzieć
Przejdziemy przez przykład aplikacji DDD na podstawie, której wytłumaczę najważniejsze koncepty Domain-Drived Design oraz popularne techniki towarzyszące jak:
- CQRS
- CRUD segregation
- Hexagonal Architecture
- Knowledge Crunching
- Event Storming
- Domain Story
- Ubiquitous language
- Domain Model
- Invariant
- Aggregate
- Domain Event
- Value Object
- Bounded Context
- Context Map
Datalog: Biting the Silver Bullet
Poziom zaawansowania: Wprowadzenie
"Databases, databases everywhere! Which one do I need?" -- You need all of them; you need none of them; you're asking all the wrong questions! This workshop is dedicated to solving the data vs code impedance mismatch with a 1970's technology (chevron mustache is optional). This workshop assumes no previous knowledge of Datalog and applies to both client and server applications. If you are interested in data pipelines, GraphQL, event-sourcing, or building maintainable data systems, you will leave a better person* (some restrictions apply, promises are not legally binding).
- 12:30 - 15:00 DEEP DIVE I
Wydajność bazy danych z perspektywy programisty
Poziom zaawansowania: Rozpracowujemy niuanse
Na warsztacie pokażemy, co dzieje się "na zapleczu" relacyjnej bazy danych, kiedy wykonujemy codzienne czynności i odpowiemy na odwieczne pytanie "dlaczego tak wolno?". Zaczynając od wnioskowania o samych danych, przejdziemy stopniowo do architektury bazy i typowych nieporozumień między bazą a programistą (n+1 query problem, normalizacja-denormalizacja, zarządzanie połączeniami). Po skończonym laboratorium każdy z uczestników powinien czuć się pewnie diagnozując własne problemy z bazą. W czasie warsztatu będziemy korzystać z przygotowanego przez nas Microsoft SQL Servera, natomiast poruszane tematy są niezależne od silnika bazy danych. wymagania przed warsztatem: laptop min 8 GB RAM (najlepiej 16GB), dowolny OS, zainstalowany VirtualBox, Java JDK8 albo Java JDK9
MX w praktyce
Poziom zaawansowania: Coś już tam trzeba wiedzieć
Implementacja OAuth 2.0 za pomocą Spring Boot
Poziom zaawansowania: Coś już tam trzeba wiedzieć
W ramach warsztatu opiszę na czym polega bardzo popularny framework OAuth 2.0 oraz pokażę jak wygląda jego implementacja w Spring Boot oraz jak zabezpieczyć za jego pomocą system zbudowany w oparciu o mikro-serwisy. Uczestnicy powinni umieć programować w Javie.
Efektywne programowanie funkcyjne w Scali
Poziom zaawansowania: Wprowadzenie
Odnośnie programowanie funkcyjnego oraz Scali narosło wiele mitów takich jak: "Programowanie funkcyjne jest trudne i to sama matma", "Scala jest nieproduktywna, niezrozumiała i ogólnie ciężka". Podczas moich warsztatów, dowiesz się że to wszystko nieprawda. Pokażę Ci, że programowanie funkcyjne w Scali jest logiczne, zrozumiałe i proste. Lecz uważaj, smakując raz potęgi ciemnej (tak na prawdę jasnej) strony mocy, być może już nigdy nie będziesz chciał wrócić do starych praktyk. Uczymy się poprzez praktykę, więc jak najwięcej kodu będziecie pisać samodzielnie. Nie będziemy się rozwodzić nad słowami zaczynającymi się na M, F oraz A. Będą natomiast zadania w przygotowanej domenie, z problemami, z którymi spotykacie się na codzień. Znajomość Scali nie jest konieczna, ale nie będę opisywał i zagłębiał się w podstawy samego języka. Skupimy się na zaletach i bezpieczeństwie jakie daje podejście funkcyjne. Założenia i metodologia: Stosujemy metodę fake it till you make it , czyli udajemy, że doskonale znamy teorię programowania funkcyjnego i pomijamy jej wewnętrzne skomplikowanie. Nie rozkładamy samochodu na części pierwsze. Tak jak w życiu, najpierw tylko jeździmy samochodem i ewentualnie sami wymieniamy olej, abstrahując od wewnętrznego skomplikowania mechanizmów. Warsztaty będą bardzo praktyczne. Najpierw przedstawię wam zasadę działania elementu poprzez przykłady lub live-coding, a następnie będziecie sami implementować konkretne zadanie na przygotowanej domenie i templacie.
- 15:00 - 15:30 Przerwa kawowa
- 15:30 - 16:30 Keynote - zakończenie konferencji
ByteBay to nowe spojrzenie na spotkania branżowe, skierowane do dojrzałych członków społeczności IT oraz Partnerów Konferencji. Jest to miejsce, w którym w centrum uwagi jest technologia, to miejsce wymiany wiedzy i doświadczeń możliwe dzięki warsztatowej formie wydarzenia.
Tworząc ByteBay wzięliśmy pod uwagę dwa aspekty rozwoju programistek i programistów - i do takich osób kierujemy nasz przekaz:
- Poszukiwacze rozwiązań (ponad 3 lata doświadczenia w IT): osoby z kilkuletnim doświadczeniem, mające solidne podstawy, ale nie mające dostępu do osób ze znacząco większym doświadczeniem. Przychodzą po odpowiedzi na konkretne pytania.
- Poszukiwacze inspiracji (ponad 5 lat doświadczenia w IT): osoby z wiedzą i doświadczeniem, samodzielnie potrafiące znaleźć odpowiedź na problemy projektowe. Poszukujące inspiracji wykraczających poza codzienne wyzwania, obniżające próg wejścia w tematy którymi dopiero zaczynają się interesować.
Podczas 8 -10 równoległych ścieżek, w ciągu 2 dni, w trakcie 2,5 godzinnych bloków, przeprowadzimy blisko 40 warsztatów typu bring-your-own-laptop (ograniczone do 20 osób - bardzo interaktywne) lub sesje deep-dive (mniejsza interakcja, więcej demonstrowania - bez ograniczeń co do ilości osób).
Proponujemy warsztaty, które dotykają zarówno języków programowania (Java, Kotlin), narzędzi (Kubernetes, cloud, noSQL), frameworków (Spring, react.js), metodyk (Domain Driven Design) czy kwestii miękkich (np. ścieżka train the trainer) - nie ograniczamy się do pojedynczego języka, pojedynczej technologii.
“W ByteBay wierzymy że ścieżka rozwoju w branży IT nie jest liniowa, nie odbywa się w identyczny sposób dla wszystkich, nie musi być bezpośrednio powiązana z liczbą przepracowanych lat. Tu, w trakcie warsztatów, nasi Partnerzy mogą podzielić się wiedzą z potencjalnie przyszłymi pracownikami. Pokazać otwartość i możliwości technologiczne, czekające na nich w nowej firmie. Zarazić pasją do rozwijanego produktu i znaleźć ludzi, którzy będą idealnie pasowali do organizacji. Warsztat to także forma rekrutacji.” - mówi główny pomysłodawca Konferencji - Jakub Marchwicki
Konferencja ByteBay 2018 obejmie spektrum zagadnień:
1. Keynote
Programowanie to nie tylko rozmowy o kodzie. Rozpocznijmy inaczej, inspirująco - spójrzmy na to co robimy z zupełnie innej perspektywy!
2. Warsztaty
100% praktycznej wiedzy przekazanej w warsztatowej formie. Bez zbędnej treści - tylko kod, rozwiązania i doświadczenie.
3. Deep dive
Przez niektórych nazywane także University Talks. Ponad dwie godziny szczegółowego wykładu. Praktyka dla tych, którzy wolą słuchać niż robić.
Konferencja odbędzie się 15 - 16 marca na Stadionie Energa w Gdańsku.
Stadion, pieszczotliwie nazywany “Bursztynem”, daje niemal nieograniczoną liczbę możliwych warsztatów i sesji deep-dive w niesamowitej scenerii lóż biznesowych, sektorów VIP. Stadion Energa jest turystyczną i architektoniczną wizytówką miasta, odbywają się na nim mecze oraz kluczowe kulturalno - rozrywkowe wydarzenia.