Showing posts with label konferencja. Show all posts
Showing posts with label konferencja. Show all posts

Wednesday, December 21, 2016

ng-poland 2016 - konferencja frontendowa z perspektywy backendowca

Pierwsza polska edycja konferencji dotyczącej Angular'a odbyła się 22 listopada 2016 w rozpoznawalnym miejscu stolicy, które jest łatwo dostępne dla podróżujących każdym środkiem transportu - na Stadionie Narodowym w Warszawie.
Po dotarciu na miejsce i dokonaniu bardzo sprawnej rejestracji zająłem miejsce z dobrym widokiem (później okazało się, że nie aż tak dobrym ;)) na główny ekran i samą scenę.
W miarę szybka rundka po stoiskach sponsorów pozwoliła na zapoznanie się z ofertami pracy oraz uzyskaniem odpowiedzi na podstawowe pytania związane z codzienną atmosferą i podejściem do pracy w projektach.
Dużym plusem konferencji była forma jednej ścieżki prezentacji. Każdą z nich rozdzielała bardzo krótka przerwa poświęcona jedynie na przygotowanie sceny dla kolejnych prelegentów. Prezentacje w porannym bloku trwały 40 minut i osobiście uważam, że był to wystarczający czas na zapoznanie się z przygotowanymi tematami.

Wprowadzenie rozpoczęło się z lekkim opóźnieniem które jednak nie miało wpływu na godziny kolejnych prelekcji. W tematykę Angulara wprowadzili nas bracia Kalbarczyk - Dariusz oraz Arkadiusz.
Pierwszą prelekcję przeprowadził Wassim Chegham i dotyczyła ona biblioteki Universal służącej do server-side rendering'u. Przedstawione zostały wady Angular'a 1, a głównie brak omawianego mechanizmu SSR. Umożliwia on szybsze ładowanie się strony, uzyskanie lepszej pozycji w wynikach wyszukiwania i poprawia ogólny tzw. user experience. Następnie zademonstrowane zostały zmiany jakie zaszły w Angular 2 wprowadzające obsługę SSR.
Druga prezentacja prowadzona przez Tracy Lee rozpoczęła się spontaniczną sesją karaoke, która wprowadziła luźniejszy nastrój na sali.
Prelekcja przedstawiła możliwości Angular CLI, który łatwo rozwiązuje problemy wyboru stosowanej konwencji w projekcie - jak nazywać foldery, pliki z klasami itp. Pozwala on również na generowanie podstawowego kodu projektu, jego component'ów, service'ów przy użyciu komend linii poleceń.
W czasie 40 minutowej sesji live coding Tracy stworzyła stronę WWW dotyczącą zapowiadanej konferencji ng-cruise zawierającej dział ze spisem przygotowanych sesji, z opisami prezenterów oraz formularz dla sponsorów. Zrobiło to na mnie niemałe wrażenie jak w tak krótkim czasie można przygotować podstawowe funkcjonalności w niedużym projekcie.
Trzecia prezentacja w porannym bloku przeprowadzona przez Uri Shaked pokazała, że Angulara 2 można używać nie tylko w środowisku przeglądarki internetowej. Prelegent przed konferencją przygotował swoją wersję gry Simon w formie aplikacji web'owej, zaś w trakcie 40 minut dodał do niej fragmenty kodu umożliwiające granie na urządzeniu IoT zbudowanym w oparciu o Arduino i Raspberry Pi. W projekcie użyta została autorska biblioteka angular-iot zawierająca dyrektywy do wykorzystania obsługi przez interfejsy fizyczne.

Po pierwszej krótkiej przerwie na kawę rozpoczął się blok prezentacji sponsorów.
Pierwsza została przygotowana przez Adama Nowaczyka z firmy Acaisoft. W czasie prezentacji odpowiadaliśmy na pytania z quizu - web aplikacji wykorzystującej infrastrukturę AWS oraz technologię web socket'ów. Prosta aplikacja stworzona na szybko bardzo sprawnie obsłużyła ruch około 300 jednoczesnych użytkowników bez posiadania ani jednej linijki kodu backend'owego.
Podczas drugiej prezentacji z bloku sponsorskiego Paweł Zdziech z firmy 7N odpowiedział na pytanie czy znajomość frameworka Angular opłaca się pod względami finansowymi? Z danych przedstawionych na wykresach i diagramach wygląda, że tak. ;)
Na trzeciej, ostatniej prezentacji sponsora Phil Nash z Twilio przeprowadził nas przez historię przechowywania danych w frontend'owych aplikacjach - zaczynając od cookies, poprzez local storage, Web SQL i skończywszy na IndexedDB. Phil zaprezentował główne wady i zalety każdego z tych rozwiązań, ale głównie skupił się na ostatnim, najnowszym pomyśle czyli właśnie IndexedDB. Umożliwia ona pracę aplikacji bez dostępu do internetu, zapewnia dobrą wydajność oraz transakcyjność operacji w asynchronicznym środowisku.
Na koniec bloku sponsorskiego zostały rozdane nagrody dla grup developerów rozwijających i reklamujących Angular'a oraz najlepszych projektów go wykorzystujących.
Po tej części przyszedł czas na obiad - dla każdego uczestnika konferencji została zapewniona pizza co wg mnie jest nie lada wyczynem biorąc pod uwagę, że samych słuchaczy było około 550. :o

Popołudniowy blok prezentacji rozpoczął Nir Kaufman przedstawiając wykorzystanie Redux'a w Angular 2. Zaczęliśmy od teorii, która wg prowadzącego jest najtrudniejsza. Redux opiera się na założeniu, że w aplikacji znajduje tylko jedno miejsca przechowujące jej stan - tzw. Store, który jest "single point of truth". Aby zmienić stan aplikacji użytkownik inicjuje Akcje (Action), które są przetwarzane przez "prawdziwe funkcje" ("pure functions", Reducers). Funkcje te zmieniają stan aplikacji w przewidywalny sposób - każde wykonanej tej samej funkcji z tymi samymi danymi wejściowymi zwróci identyczny wynik.
Po wprowadzeniu do samej koncepcji Redux'a przeszliśmy przez poszczególne elementy na przykładowej aplikacji przygotowanej przez prowadzącego.
Druga prezentacja z popłudniowego bloku dotyczyła historii tworzenia aplikacji dla Spidermana przez prowadzącego - Gerarda Sansa. Największa część całej historii od strony praktycznej dotyczyła wykorzystania Router'a z Angular 2.
Omówione zostały najczęściej używane funkcje takie jak lazy-loading oraz jego przeciwieństwo – preloading czy też ograniczanie dostępu do pewnych zasobów. Każda z dostępnych funkcji została przedstawiona na przykładzie specjalnie stworzonej aplikacji.
Ostatnia prezentacja przed krótką przerwą na kawę dotyczyła wykorzystania biblioteki RxJS. Narzędzie to pozwala na zastąpienia dostępnych w języku standardowych Promise'ów.
Promise'y pozwalają na zwrócenie tylko jednej wartości jednokrotnie, ich wykonywanie nie może zostać przerwane i dzieje się od razu po zleceniu akcji.
RxJS z kolei opiera się na Observable'ach do których użytkownik się subskrybuje i dopiero wtedy wykonują zleconą akcję przez nawet nieskończony czas. Aby przerwać wykonywanie zadania wystarczy tylko usunąć subskrypcję na danym Stream'ie. Dodatkową zaletą Observable oraz RxJS są operatory pozwalające na modyfikacji wyników otrzymywanych na nasłuchiwanym strumieniu takie jak "filter", "map", "reduce" itp.

Po ostatniej przerwie z powodu nieobecności Todda Motto nastąpiła zmiana kolejności prezentacji.
Shai Reznik rozpoczął końcowy blok krótszych prezentacji trwających jedynie 20 minut.
W swojej prelekcji wyjaśnił czym są moduły w Angular. Przez cały czas prezentacji towarzyszył nam bóbr budowniczy, który chcąc stworzyć swoją aplikację przy użyciu frameworka Angular musiał poznać jego strukturę składającą się z:
- Component;
- Service;
- Pipe (filter);
- Directive.
W każdej aplikacji musi istnieć jeden moduł główny (root module), reszta funkcjonalności aplikacji powinna być rozdzielona na mniejsze moduły odpowiedzialne za pojedyncze operacje. Service'y (providers) wstrzykiwane przez Injector są pobierane ze wspólnej puli.
Kolejną prezentację dotyczącą Progressive Angular 2 apps poprowadził Ciro Nunes. Progressive App to aplikacja webowa dostępna z pulpitu. Do głównych zalet tego typu aplikacji należą:
- możliwość pracy bez dostępu do sieci;
- możliwość natychmiastowego uruchomienia aplikacji z pulpitu;
- możliwość informowania użytkownika o zdarzeniach poprzez powiadomienia systemu operacyjnego.
W czasie prelekcji, na kolejnych slajdach Ciro omawiał fragmenty kodu wcześniej przygotowanej demonstracyjnej aplikacji.
Następnie Alex Lakatos przedstawił pragmatyczne podejście do oficjalnego stylu tworzenia kodu w aplikacjach tworzonych przy użyciu Angular'a 2. Zaprezentowane zostały poszczególne zasady zalecane przez twórców Angular'a wraz z komentarzem Alexa popartym doświadczeniem z pracy własnej oraz swojego zespołu.
Jednym z niewielu polskich akcentów na ng-poland 2016 była prelekcja Tomasza Duciny dotycząca stworzenia oraz wdrożenia aplikacji bankowej w Angular 1. Całą praca zajęła ponad 1 rok i już w trakcie wdrożenia aplikacja mogła zostać uznana za przestarzałą ponieważ na rynku dostępny był Angular 2.
Tomasz opowiedział historię swojego projektu rozdzielając ją na poszczególne etapy:
- wybór technologii i bibliotek;
- projektowanie architektury;
- programowanie (rozproszony zespół, zależności między zadaniami);
- refactoring.
Kolejną prezentację Uri Goldsteina dotyczącą GraphQL niestety musiałem ominąć w większej części. Ogólnie wynika z niej, że GraphQL jest przyszłościowym sposobem komunikacji w aplikacjach klient-serwer i posiada sporo ulepszeń w stosunku do REST'a jak typowanie czy zapytania grupowe.
Na koniec konferencji Sebastian Witalec zaprezentował NativeScript - bibliotekę pozwalająca na tworzenie aplikacji natywnych. W czasie prelekcji poznaliśmy główne założenia biblioteki oraz podstawowe kontrolki UI wraz z przykładowym kodem.
Jednak oprócz aplikacji mobilnych NativeScript umożliwił Sebastianowi stworzenie bezprzewodowego kontrolera do obsługi robotów w oparciu o protokół Bluetooth. W czasie prezentacji poznaliśmy historię oraz większe perypetie jakie przydarzyły się Sebastianowi w czasie tworzenia aplikacji.

Konferencję ng-poland oceniam bardzo pozytywnie. Wszystkie elementy składowe przygotowane zostały na najwyższym poziomie, począwszy od rejestracji, cateringu i skończywszy na najważniejszym elemencie czyli prezentacjach. Każda z nich była pełna ciekawostek pod względem merytorycznym a profesjonalni prelegenci dodawali do nich pełno humoru jeszcze bardziej ulepszających ich odbiór.
Polecam wyszukanie materiałów z prezentacji w internecie i poznanie najbardziej interesujących tematów na własną rękę.
Jeśli w następnym roku będzie miała odbyć się kolejna edycja konferencji to każdemu developer'owi mającemu nawet niewielką styczność z frontendem polecam wzięcie udziału i poznanie innego środowiska od kuchni.

Monday, November 28, 2016

2016-11-22 DevOpsDays Warsaw 2016

Kilka suchych faktów na początek

Dzięki uprzejmości Łódzkiego Juga oraz odrobinie szczęścia podczas losowania, miałem możliwość uczestniczenia w świetnej konferencji DevOpsDays Warsaw 2016, która była organizowana przez firmę Proidea i tak samo jak inna duża warszawska konferencja 4Developers, miała miejsce w hotelu Gromada blisko Lotniska Chopina.

Format

Na konferencji była jedna ścieżka, co dosyć mocno ułatwiało wybór. Prezentacje trwały po 30 minut, ale jedna godzina pierwszego dnia była poświęcon na tzw. Ignite talks, na który każdy mógł się zgłosić z 5 minutową prezentacją. Ponadto, na koniec każdego dnia przewidziane były open space'y, czyli dyskusje w mniejszych gronach na interesujące tematy.

Dzień pierwszy

Oczywiście zaczęło się od rejestracji, która poszła bardzo szybko i sprawnie (dużo szybciej niż na wspomnianej wcześniej 4Developers), więc na ceremonii otwarcia mieliśmy pełną salę. Szybka ankieta wśród uczestników wykazała, że procentowy udział devów i opsów był parktycznie 50 na 50%. Zaskoczeniem była jednak bardzo duża liczba ludzi z tak zwanego enterprise'a, względem ludzi ze startupów lub małych firm.

Talk #1: From Monoliths Trough Cloud Native to Software Supply Chains

Świetna prezentacja pokazująca jak kontenery zmieniły świat. Nie nasz, programistyczny, ale ten przemysłowy. Jak kontenery, dzięki łatwości transportu, pozwoliły przenieść fabryki dalej od brzegu morskiego i przyczyniły się do utworzenia łańcucha dostawców, którzy nie musieli znajdować się w jednym miejscu. Pozwoliło to też na specjalizacje poszczególnych firm. Było to o tyle ciekawe, że powoli będziemy dochodzili do takich samych specjalizacji: każdy będzie mógł dostarczać swoje, specjalizowane kontenery i duże firmy (jak Google, Facebook, Twitter) nie będą musiały budować całego stosu usług tylko będą korzystali z usług innych dostawców.

Talk #2: A Journey Towards SRE @ Ocado

Prezentacja otwierająca oczy na bardzo ciekawy fakt - operation zajmuje więcej czasu niż development. W miarę rozwoju systemów, zespół operation powinien być powiększany. Ale czy tak sie dzieje naprawdę? Inna bardzo ważna prawda, o której zapominamy, to fakt, że najważniejszy feature każdego systemu to: It works, co odnosi się do nowych, ale przede wszystkim do istniejących już funkcji systemu.

Talk #3: The OutSystems R&D Continuous Delivery Journey

Moim zdaniem jedna z najlepszych prezentacji na tej konferencji. Opowiadała o długiej drodze jaką przeszła portugalska firma, z której przybył prelegent. Z małego zespołu z ciekawym produktem i brakiem testów, udało im się zbudować Continuous Delivery w miarę przybywania nowych funkcji, integracji i ludzi. Po maksymalnie godzinie byli gotowi do przekazania artefaktów na produkcję.

Talk #4: DevOps Transformation Tailored to Organizational Culture

Jak zmienić kulturę swojej firmy w stonę kultury Devops? Okazuje się, że w każdej firmie są obecne różne kultury: hierarchiczna, klanowa, adhokracyjna oraz zorientowana na market. Najpierw musimy zrozumieć, jaką kombinację kulturową prezentuje nasza firma oraz w którą stronę chcemy iść. Co ciekawe z wielu analiz wynika, że firmy chcą dążyć do kultury adhortacyjnej i jest to właśnie transformacja DevOpsowa.
Ciekawostka: pierwszy raz widziałem na prezentacji link do Linkedin prelegenta.

Talk #5: The Song of JBoss and Chef

Była to ciekawa prezentacja, jak za pomocą narzędzia Chef zarządzać swoim klastrem JBossów. Nie było to proste, bo wymagało korzystania tylko z CLI JBossa (a dostawcy najbardziej lubią przesyłać instrukcje w formacie screenshotów...). Dzięki determinacji zespołu możliwe było powiększenie klastra o dwa dodatkowe węzły w jedną godzinę.

Talk #6: Building a Resilient Log Aggregation Pipeline Using Elasticsearch and Kafka

Świetna prezentacja, choć tempo jej prowadzenia było bardzo duże, by w 30 minut przekazać tak wielką ilość informacji i dobrych rad. Jeśli zarządzasz klastrem Elasticsearch to ta prezentacja jest właśnie dla Ciebie. Jeśli chcesz się dowiedzieć jak podzielić swój klaster, jak skonfigurować poszczególne węzły, by były zoptymalizowane pod kątem swojej funkcji, jak przydzielić do nich zasoby, to musisz to zobaczyć. Było tutaj też trochę informacji na temat konfiguracji Kafki jako scentralizowanego buffora, konfiguracji dostawcy logów oraz systemu operacyjnego dla takiego stosu technologicznego.

Talk #7: Contive – Container Networking Done Right with Cisco ACI Fabric

Najsłabsza moim zdaniem prezentacja, prowadzona przez dwóch prelegentów. Pierwszy z nich opowiedział o narzędziu Mantl opartego na Mesosie, a drugi prelegent skupił się na zaletach narzędzia Contive od Cisco.

Ignite talks

Miało być maksymalnie 10 prelegentów - było ich 5. Dobra rada dla organizatorów: zapisujcie nie tylko tytuły prezentacji, ale i zgłaszających je, bo potem prelegenci się nie zjawiają:)

Ignite talk #1: How to manage on calls rotation effortlessly

Bardzo ciekawa prezentacja o powiązaniu DataDog, PagerDuty, aplikacji na Heroku oraz Twilio do obsługi i przekierowania połączeń. Była ona szczególnie interesująca dla mnie, bo właśnie taką aplikację potrzebujemy wdrożyć.

Ignite talk #2: Invitation to TestWarez conference

Zaproszenie na konferencje TestWarez 2017 - tak po prostu:)

Ignite talk #3: DevOps mind of security & Ignite talk 4: Testing infrastructure

Szybka prezentacja, jakie mamy zasady (ssh wystawione na innym niż 22 porcie, zasady tworzenia haseł) oraz jaki jest wpływ czynników ludzkich (szczególnie skleroza i lenistwo) na bezpieczeństwo systemów. Jak sobie z tym radzić i czego pilnować? Mamy zestaw reguł opisany w STIGs - Security Technical Implementation Guides i powinniśmy z nich korzystać, a nawet automatycznie je sprawdzać za pomocą np. Ansible (Ignite talk #4).

Ignite talk #5: Puppet vs Chef vs Ansible vs Bash

Mamy dużo dostępnych narzędzi do automatyzacji - prelegent w ekspresowym tempie wyjaśnił, jakie są zalety i wady każdego z nich. Najważniejsze:
  • bash przegrywa, bo nie ma możliwości łatwego rollbacku, ale dla obrazów dockerowych jest najlepszy
  • puppet skompiluje wszystko na masterze - ale właśnie master jest potrzebny
  • chef - możesz spodziewać się błędów w runtime
  • ansible - najlepszy do fire & forget

Open spaces

Open spaces zaczęły się od propozycji - zebranych zostało około 13, a następnie każdy za pomocą formularza Google głosował na interesujące go tematy. Wybranych zostało 8 tematów. Dla mnie najciekawsze tego dnia były Continuous delivery pipelines (najciekawsze cześć dyskusji dotyczyła zagadnienia testowania pipeline'ów) oraz F**k ups - worst experience (aż włos się jeżył na głowie).

Dzień drugi

Pierwsze dwie prezentacje przeszły mi koło nosa, ponieważ korki w Warszawie postanowiły zorganizować mi dwugodzinną podróż na miejsce prezentacji. Tak zwane: dogodne miejsce konferencji blisko lotniska nie zawsze znaczy, że będzie łatwo się na nią dostać...

Talk #1 & Talk #2

W autobusie...

Talk #3: Nobody Puts Java in a Container

Dlaczego nie uruchamiać aplikacji Javowych na dockerze? Nigdy o tym nie myślimy. Prelegent przez większość czasu opowiadał o tym jak działa docker, o co chodzi z namespaces i cgroups, a dopiero ostatnie 5 minut traktowało o samej Javie. Tylko, że bez tak długiego wstępu trudniej byłoby zrozumieć dlaczego nie uruchamiać JVMów na dockerze. Problemem jest to, że mimo iż docker pozwala na ograniczenie dostępnej pamięci lub ilości procesorów, JVM w wersji 8 nic sobie z tego nie robi i uruchamia się widząc wszystkie zasoby maszyny pod spodem. Dlatego czasem wybór wirtualizacji jest lepszy od konteneryzacji, bo daje większą izolację.

Talk #4: Learning From Configuration Management

Prezentacja opowiadająca o problemach z jakimi spotykamy się przy automatyzacji, które też paradoksalnie są często wymieniane jako plusy, np. niezmienna architektura, centralizacja, ukryte zależności systemów operacyjnych. Aktualnie narzędzia te przypominają instrumentacje (zarządzanie z boku), a my potrzebujemy choreografii, czyli dynamicznego reagowania na zainstniałe sytuacje. Rozwiązaniem tutaj ma być narzędzie Habitat od Chef.

Talk #5: Managing Server Secrets at Scale

Konkretny problem i wspaniałe rozwiązanie do niego: mamy setki albo tysiące serwerów, każdy serwer potrzebuje kilku kluczy: kluczy ssh, klucz do szyfrowania dysku, serwera zarządzania konfiguracją, tokenów do aplikacji itp. Gdzie przechowywać takie klucze? Przecież nie będziemy ręcznie ich przepisywać z płaskich plików z naszych komputerów. Przy wielkich data center to jest niewykonalne. Z pomocą przychodzi nam tu UEFI i możliwość zapisywania zmiennych w specjalnej przestrzeni w BIOSie. Jest ona łatwo dostępna, ale też bardzo mała, dlatego nie zapiszemy tam wszystkich kluczy. Jednak wystarczy zapisać jeden klucz, a z niego w deterministyczny sposób wygenerować inne podczas uruchamiania systemu. Do tego właśnie służy narzędzie gokey.

Talk #6: How We Phased out Motivational System: About Motivation in DevOps Culture

Problem motywowania ludzi nie jest nam obcy. Wszyscy odkrywają, że pieniądze to nie wszystko. Wycieranie pieniędzmi łez spowodowanych przez smutne zadania i atmosferę w pracy często nie wystarczą. Prezentacja powinna być obejrzana szczególnie przez firmy, które chcą sprawić, by ludziom pracowało się lepiej. Mam szczęście pracować w firmie, która większość z przedstawionych tu rzeczy używa w praktyce, dlatego mogę gorąco polecić ten sposób prowadzenia firmy.

Talk #7: Monitoring and Log Management for Docker Swarm and Kubernetes

Dobre porównanie możliwości zarządzania logami, gdy mamy Kubernetesa lub Docker Swarma. Poza logami ważne jest też zbieranie metryk. Istotne jest to, że są to mechanizmy wbudowane w dockera. Dla naszych aplikacji musimy sami radzić sobie z agregacją logów i metryk.

Talk #8: The Pipeline: a Shift from Classic UI-based Job Configuration Tool to a Domain-specific Language

Od historii Jenkinsa (i Hudsona) do pipeline'ów w Jenkinsie 2.0. Niestety uważam, że co do samego tematu pipeline oraz DSL, dużo szybciej można byłoby pozyskać więdzę z tutoriali dostępnych w internecie...

Talk #9: Patching 100 OpenStack Compute Nodes with Zero-day Patch within 16 Hours

Prelegent skupił się na patchowaniu libvirta używanego w OpenStacku. Jeśli chcesz się dowiedzieć jak w 16 godzin wgrać łatkę do całej masy maszyn wirtualnych i zrestartować je, ale tak by klienci tego nie odczuli, to ta prezentacja jest właśnie dla Ciebie. Hint: wyłącz Tunneling :)

Open spaces

Ponownie przeszliśmy przez proces zgłaszania i wyboru tematów do dyskusji. Tym razem dla mnie najciekawszy temat Automatic log anomaly detection. Wnioski: jeśli jesteś dużą firmą, to albo już masz narzędzie do takiej analizy, albo stać Cię na enterprise'ową wersję oprogramowania. Jeśli jesteś małą firmą, to niestety piszesz coś własnego lub bierzesz narzędzie, które ktoś już oddał jako open source. Tylko, że jeśli coś staje się w tym przypadku dostępne, tzn. to są już dużo lepsze narzędzia.

Problemy

Konferencja nie ustrzegła się błędów i problemów. Przede wszystkim trudności przysparzało podłączanie komputerów przed prezentacjami. To zawsze zajmuje dużo czasu i zawsze coś pójdzie nie tak...

Kilka słów na koniec

Konferencję mogę z czystym sumieniem polecić wszystkim zainteresowanym tematyką DevOps lub administrowania systemami informatycznymi. Sponsorzy dopisali, a prelegenci byli w większości dobrze przygotowani. Polecam też obejrzenie nagrań z konferencji, które ku mojemu zdziwieniu, zaczęły się pojawiać już w trakcie drugiego dnia konferencji.
Idąc na konferencję zastanawiałem się, co jest największym problemem w świecie DevOpsów... Myślałem, że jest to wojna Kubernetes vs. Docker Swarm. Okazuje się, że problemem tym jest wdrażanie odpowiedniej kultury w firmach oraz zarządzanie logami. To było całkiem ciekawe odkrycie.

Sunday, February 28, 2016

2016-02-18 - Lambda Days 2016

Zaczniemy od propagandy, czyli - ludzie, płaćcie składki JUGa, bo można wygrać wejściówki na konferencje :)

Wejściówkę wygrałem i pojechałem na Lambda Days do Krakowa, 18-19 lutego 2016 r. Prelekcje odbywały się równolegle w 3 salach Auditorium Maximum UJ.

Na początek...

...muszę wspomnieć o niemym bohaterze tego wydarzenia, czyli aplikacji do głosowania. Prosta, ładna - jeden ekran, trzy emotki (yay, meh, ney), które wdzięcznie pulsują pod palcami kolejnych uczestników. Po zakończeniu każdej prelekcji przed przed drzwiami czekał człowiek z obsługi z tabletem w ręku. Wyniki nie były jawne, ale widać było, że dużo osób oddaje głosy i kosztuje ich to minimum wysiłku.

Pakiet startowy, oprócz identyfikatora, obejmował płócienną torbę w logiem, stos ulotek, cukierki z masy cukrowej z małą lambdą oraz ołówek. O papierowy program trzeba było poprosić w rejestracji, naraz tylko na jeden dzień. I od razu nieaktualny, ale to uroki druku.

Przybyłem na miejsce kilka minut po otwarciu rejestracji, więc było mi dane zobaczyć jak ktoś na szybko prasuje narzutę na stoisku sponsorskim, a korytarze powoli zapełniają się uczestnikami.

Wszystkie prelekcje były nagrywane, a plotka głosi, że powinny pojawić się w ciągu miesiąca. Zobaczymy! Pierwsze zaczęły się już pokazywać na YouTube, więc polecam odwiedzić stronę konferencji, a potem wyszukać tytułami prelekcje.

Aktualizacja: filmy pojawiają się na stronie konferencji! Wystarczy wejść w profil prelegenta, by zobaczyć udostępnione materiały.

Pierwszy dzień...

...rozpoczął się krótkim wstępem, opóźnionym o 20 minut, ale i tak zdążyli przejść przez wszystkie slajdy powitalne.

Wstępniak płynnie przeszedł w pierwszy keynote - Propositions as Types. Philip Wadler, po wstępie historycznym opowiadał o paralelach między logiką a programowaniem (a dokładniej prosto typowanym rachunkiem lambda), które zostawili nam po sobie Haskell Curry i William Howard - w skrócie - program jest tezą, a jego wykonanie dowodem. Jednym z wniosków wykładu było to, że są języki programowania, które ktoś odkrył czy tez zbudował wokół odkrycia (matematycznego), a są też takie, które ktoś wyssał z palca, jak Java czy C++. Te pierwsze są lepsze. Nazwiska do zapamiętania (i prace do do przeczytania): Hilbert (Entscheidungsproblem), Gödel (Incompleteness, Recursive functions), Church (Lambda calculus), Turing (Turing Machines). Na zakończenie dowiedzieliśmy się, że najnowszym problemem, nad którym pracuje też sam Wadler, są typy sesyjne, opisane po raz pierwszy przez Kohei Hondę w 1993, a wywiedzione z logiki linowej (Jean-Yves Girard, 1987). Jest już nagranie!

A brief history of history of programming languages: sprawdźcie kto stworzył ALGOLa, a następnie przeczytajcie przynajmniej po jednej publikacji każdego z autorów. Jeszcze tego nie zrobiłem, ale najwyraźniej warto!

The mysteries of Dropbox: testowanie synchronizacji plików jest trudne - autor QuickChecka, John Hughes, zrobił to z kolegami za pomocą laptopa, kilku maszyn wirtualnych i QuickChecka dla Erlanga. Nie było to robione na zlecenie Dropboksa! Polecam przeczytać opis metodologii, bo omawia, jak przetestować złożony system za pomocą losowych danych. Tak, znaleźli kilka przypadków brzegowych i zgłosili je Dropboksowi.

Zaliczyłem dwie sesje o Data Science, które pokazały jak powinno się promować DS - za pomocą ciekawych pytań! Pierwsza z nich zaraz po lunchu: A board game night with geeks i pytanie: czy można zremisować w Quarto? Quarto to gra planszowa, w której trzeba na planszy 4x4 ułożyć w rzędzie, kolumnie lub kwadracie zestaw klocków, które mają wspólną cechę. Jeśli użyjecie SAT solvera, to dowiecie się, że owszem, można w tej grze zremisować. Kod i prezentacja są dostępne na GitHubie. Tych samych metod używa się, m. in., przy planowaniu rozkładów, testowaniu i sekwencjonowaniu DNA.

W następnej prelekcji - Teaching functional programming to n00bs in mobs - Rob Martin przekonywał, że powinniśmy uczyć wszystkich juniorów programować funkcyjnie! Dlaczego? Bo nauczyć ich funkcyjnego myślenia jest prościej niż seniorów, trudno jest zatrudnić dobrego seniora, a ci seniorzy, których już masz, będą się lepiej rozwijać, jeśli będą mogli kogoś uczyć. Do tego dwie lektury podane przez prelegenta: Why Functional Programming Matters i Why "Why Functional Programming Matters" Matters. Druga część prelekcji była pochwałą dla “mob programming”. Programowanie grupowe - 4-15 osób siedzi nad jednym problemem, tylko jedna klawiatura i myszka, jeden (duży) monitor. W takim środowisku powstaje lepszy kod (prezentacja z perspektywy roku) i sprzyja ono równomiernemu rozwijaniu kompetencji - w grupie większość stanowią juniorzy. I jeśli chcecie rozumieć funkcyjne koncepcje lepiej, to uczcie się Haskella ;)

Byłem na dwóch “małych” prelekcjach. Pierwsza, Elixir and Elm - the perfect couple, wychwalała duet Elm + Elixir, zaznaczając jednocześnie, by starać się wybierać narzędzie (język, framework itd.) do potrzeb, zamiast używać zawsze złotego młotka. Druga, Embracing change - how to introduce Clojure into your company technology stack seamlessly, traktowała o tym, jak wprowadzić Clojure, albo jak twierdził autor - dowolną nową technologię, do swojej organizacji. Krok pierwszy: zdobądź pierwszych wyznawców, krok drugi: wybierz mały, niekrytyczny projekt, krok trzeci: ???, krok czwarty: profit, nowa technologia została wprowadzona. Prelegentowi się udało, a prostym projektem był serwis do healthchecku, który odpowiadał tylko “żyję!”, jeśli serwer działał.

Na koniec pierwszego dnia odbyło się 5 lightning talków, które niestety przegapiłem, bo dołączyłem do grupy dopytującej Roba Martina, jak np. mierzyć wydajność pojedynczych pracowników w takim programistycznym tłumie. Po pierwsze: nie rób tego, używaj retrospektyw żeby dawać sobie wzajemną informację zwrotną, przy czym jeśli jesteś zwierzchnikiem, to najlepiej nic nie mów, żeby niechcący nie uciszyć jakiejś inicjatywy (prowadzącemu się to raz zdarzyło). Po drugie: jeśli masz nóż na gardle, to zrób 360 Review.

Afterparty było w The Legend Music Club.

Drugi dzień...

...otworzył moim zdaniem najsłabszy z 3 keynote’ów - Things that Matter autora Siedem języków w siedem tygodni. W skrócie: języki, których autorom przyświecała jakaś idea i którzy pozostali jej wierni są fajne (i o nich poczytacie w książce, jest Haskell!), a Java jest zmyślona.

Pierwsza zwykła prezentacja, na którą trafiłem to The Zen of Akka prowadzona przez Konrada Malawskiego z Typesafe’a (teraz Lightbend). Zen Akki składa się z 13 punktów, których jednak nie pokuszę się o szczegółowe omówienie i będziecie musieli wyciągnąć je z nagrania, kiedy się ukaże. Kilka przykładów to:
  • Używajcie niemodyfikowalnych wartości i unikajcie jak ognia modyfikowalnych zmiennych; 
  • Unikajcie javowej binarnej serializacji - użyjcie Kryo, Thrifta, ProtoBufa albo czegokolwiek innego, co nie jest domyślnym mechanizmem; 
  • Akka to nie framework - to zestaw narzędzi - można z niego wybrać swoje ulubione części i nie wkładać do projektu całości. 
Do poczytania - rozproszone strumienie dla Akki, o których prowadzący wspomniał w odpowiedzi na jedno z pytań po prezentacji: Intel Gear Pump.

Druga prezentacja tego dnia to druga sesja z Data Science: The F#orce awakens, czyli kto jest najważniejszą postacią w Star Wars i dlaczego epizody I-III mają kiepskie oceny? Trzeba dokonać analizy grafu stworzonego ze sparsowanych scenariuszy Gwiezdnych Wojen. W samej analizie pomaga nam język R. W epizodach I-VI najważniejszy jest Obi-Wan, a jeśli dołożymy VII, to jest to C3-PO! Ale to tylko wierzchołek góry lodowej, dużo więcej znajdziecie na blogu autorki: The Star Wars social network, Star Wars social networks: The Force Awakens. W prawdziwym życiu tych samych technik używa się do analizy rozmów online przez czaty, e-maile, przy pracy z siatkami zaopatrzenia czy też do analizy sieci biologicznych.

Następna prezentacja, Getting started with Frege [czyt. frige], zachęcała do zapoznania się z implementacją składni Haskella dla JVM. Za przykład posłużyła prosta aplikacja do walidacji JSONa. Język kompiluje się do Javy, nie do bytecode’u. Chciałbym coś więcej o tym powiedzieć, ale sama implementacja jeszcze nie jest w pełni kompatybilna, więc niestety nie będzie mi dane wprowadzić jutro Haskella do projektu niskim kosztem ;) Można oczywiście obserwować projekt na GitHubie.

Kolejną była prezentacja dwóch ludzi z TomToma, którą mogliście zobaczyć już na spotkaniu JUGa - Practical demystifcation of CRDT. CRDT to Conflict-free Replicated Data Type. Tło prezentacji to usługa synchronizacji dla danych z nawigacji (np. ulubionych miejsc, zapisanych tras). Magia tych typów polega na tym, że obsługują przemienną i przechodnią operację łączenia, dzięki czemu nie ma znaczenia w jakiej kolejności nakładane są zmiany - wynik będzie zawsze taki sam. Omówili typy danych, których używają, dochodząc do tego, że musieli wymyślić własny, bazujący na OR-Set (Observed/Removed Set), OUR-Set (OR-Set + Updated). Taki zbiór trzyma w sobie listy utworzony, zaktualizowanych i usuniętych obiektów. Jednym z problemów przy używaniu CRDT jest brak niezawodnego zegara, więc kompromisem jest taka priorytetyzacja dostępnych czasów: zegar GPS > czas serwera > czas lokalny+1 > czas lokalny. Prelegenci powiedzieli, że byli na prezentacji Johna Hughesa, więc dowiedzieli się też o nowych sposobach, w jaki mogą ten system przetestować. Post, który zainspirował prelegentów do zgłębienia tematu: CRDTs for fun and eventual profit.

Ostatnia zwykła prelekcja to Purely Functional Web Apps, która opowiadała historię aplikacji internetowej napisanej w Haskellu i Elmie. Potrzebowali aplikacji, która na podstawie historii pull requestów z ich GitLaba ekstrapolowała potencjalną długość trwania review w zależności od ilości kodu. Do części serwerowej użyty został zestaw narzędzi Haskell Servant. Po stronie Elma za to pomocny okazał się jego Time Traveling Debugger, który używanie wygląda jak pokaz magiczny. Padło też zdanie, że powinniśmy nauczyć się Haskella, bo dzięki temu staniemy się lepszymi programistami.

Ostatni keynote - The Truth about Types Bartosza Milewskiego - mówił o teorii kategorii. Kategoria to byt matematyczny, który składa się z obiektów, przekształceń między nimi (strzałek) i operacji łączenia ze sobą strzałek. Dowiedzieliśmy się, że tak jak istnieją paralela między logiką i rachunkiem lambda, tak można wykazać paralelę między nimi i teorią kategorii. Prezentacja była mocno abstrakcyjna. Przeszliśmy przez Kategorię Zbiorów (Set Category), intuicjonistyczną logikę, kontynuacje, a zakończyliśmy stwierdzeniem, że skoro istnieją analogie między tymi trzeba dziedzinami (logika, rachunek lambda, teoria kategorii), to może istnieje jakaś większa abstrakcja, która obejmie je wszystkie? Tym właśnie zajmują się teraz badacze. Niestety nam, zwykłym zjadaczom chleba, pozostaje czekać.

Koniec!


Wyjazd uznaję za udany, konferencja bardzo mi się podobała. Mam nadzieję, że będę mógł pojechać na nią również w przyszłym roku :)