W dniach 14-15 listopada byłem na konferencji code::dive we Wrocławiu. Jest ona głównie poświęcona C++, ale dodatkowymi tematami miały być Rust, Go, Embedded, IoT, Security, czy Python. Wstęp jest darmowy, ale liczba miejsc jest ograniczona. Swoje zgłoszenie wysłałem dosyć późno i byłem pewny, że się nie załapie. Jednak w ostatniej chwili zwolniły się jakieś miejsca i dostałem swoją wejściówkę. Mogłem więc wybrać ciekawsze pozycje w agendzie i wyruszyć w drogę.

Konferencja trwała 2 dni, każdego dnia miały miejsce dwie sesje po 90 minut i trzy po 60. W trakcie każdej sesji odbywały się jednocześnie cztery prezentacje. Nie było wyznaczonych ścieżek przypisanych do konkretnych sal. Poniżej opisuję prezentacje, na których byłem.

Paweł Łabuz, Piotr Marek – Augmented reality dev journey

Prezentacja możliwości HoloLens. Można było zobaczyć na żywo działanie kilku przykładowych aplikacji. Technologia znajduje się w fazie prototypu, a sprzęt jest drogi. Developmentem zajmują się nią innowatorzy według podziału na kategorie użytkowników. To jest na pewno technologia przyszłości i znajdzie zastosowanie w wielu dziedzinach życia. Autorzy po prezentacji mieli rozstawione stanowisko na korytarzu i pozwalali wypróbować HoloLensa. Udało mi się załapać i jestem pod wrażeniem. Generowane obrazy bardzo dobrze się integrują z realnymi obiektami, dopasowują się do powierzchni takich jak ściany, czy stoły, a nawet nieregularne obiekty.

Alex Crichton – Concurrency in Rust

Nie miałem nigdy okazji pisać w języku Rust, natrafiłem jednak na dobre opinie na jego temat i konferencja była okazja, żeby się o nim czegoś więcej dowiedzieć. Filozofia języka to zapewnienie większego bezpieczeństwa wykonywanych operacji bez utraty wydajności. W Rust zmienne możemy definiować jako mutable, albo immutable, a każda zmienna ma swojego właściciela. Z tego co znalazłem w necie, w Rust można pisać już nawet na mikrokontrolerach STM32. Autor pracuje w Mozilli nad rozwojem języka. Polecam jego prezentację, jest już dostępna na YouTube.

William Kennedy – Go: Concurrency Design

Kolejna prezentacja i znowu o języku, z którym nie miałem jeszcze do czynienia. Zrobiłem kiedyś tylko kilka przykładów online na oficjalnej stronie języka. Prezentacja była świetnie poprowadzona, bardzo interaktywnie. Autor nie tylko stosował live coding, ale nawet live painting. Tworzył na bieżąco diagramy, które omawiał.

Nie przeszkadzały mu nawet problemy z projektorem, które zdarzały się kilkukrotnie i trwały całkiem długo. Jak to zwykle bywa na takich prezentacjach – wszystko wyglądało bardzo prosto i przyjemnie. Go podobnie jak Rust może być fajną alternatywą dla C/C++. Ta prezentacja jeszcze nie jest dostępna online, można za to obejrzeć drugą prelekcję tego samego autora, również o Go.

Kamil Witecki – Architecture is (not) everything

Na tej prezentacji się zawiodłem. Myślałem, że będzie bardziej technicznie na temat szczegółów tworzenia architektury systemów. Wypełniona po brzegi sala chyba miała podobne odczucia. Skończyło się na ogólnikach i banałach o tym, że powinniśmy mieć na uwadze końcowych użytkowników. Chociaż nie wątpię, że zdarzają się projekty, gdzie ignoruje się te zasady.

Rafał Legiedź – A thorough look into spatial mapping with HoloLens

Po raz kolejny o HoloLens, tym razem bez demo, ale dalej ciekawie. Tytuł trochę mnie zmylił, bo miałem nadzieję na dokładny opis algorytmów do mapowania terenu na podstawie obrazu. Było jedynie bardzo ogólnie o tym, że HoloLens tworzy model 3D terenu składający się z trójkątów i dane te przechodzą przez kilka warstw odpowiedzialnych między innymi za wygładzanie. Bez żadnych szczegółów. Było za to omówienie hardware kryjącego się w HL, czyli kamer, mikrofonów i procesora. Było również o potencjalnych i już istniejących zastosowaniach tej technologii.

John Lakos – Local („arena”) memory allocator

Dopiero na początku drugiego dnia trafiłem na pierwszą prelekcję o C++. Było bardzo technicznie. Autor omówił kilka rodzajów własnych alokatorów pamięci i przypadki, kiedy powinny się lepiej sprawdzić niż domyślny. Poparł to wieloma danymi pomiarowymi. To nie do końca temat dla mnie i raczej nie wykorzystam tych informacji w praktyce.

Mateusz Pusz – Striving for ultimate low latency

Druga prezentacja o C++ podpasowała mi dużo bardziej. Miało być o kodzie, który szybko się wykonuje i za bardzo nie używa dynamicznej alokacji pamięci, exceptionów, czy biblioteki standardowej. Jest to środowisko, w którym w ostatnim czasie poruszam się w pracy – drivery pod Windows. Podczas prezentacji było pokazanych wiele tricków optymalizacyjnych. Oczywiście ogólna zasada pozostaje bez zmian – optymalizować tylko wtedy, kiedy dane pomiarowe wykazują problem. Tricki dotyczyły np. wykorzystania cache, czy optymalizacji w kompilatorze. Szczególnie spodobał mi się jeden – rzadko używany branch powinniśmy zwinąć w funkcję, aby kod nie zaśmiecał cache. Jest to dobry argument przeciwko unikaniu funkcji, bo dodatkowe skoki zmniejszają performance.

Mark Isaacson – Developing C++ @ Facebook scale

Moja ulubiona prezentacja z całej konferencji mówiąca o narzędziach w Facebooku zwiększającą efektywność pracy z kodem. W przypadku Facebooka, gdzie pracuje wielu programistów oszczędności są ogromne. Najważniejsze informacje dostarczane przez narzędzia analizujące kod to komunikaty o błędach. W Facebooku więc są one odpowiednio formatowane tak, aby zawierały jak najwięcej istotnych informacji i jak najmniej szumu. Przydatne narzędzia to Valgrid i Address Sanitizer (ASAN). Dodatkowo ważne jest, aby Continuous Integration dawał precyzyjną informację, czy nowe zmiany zepsuły kod, czy już wcześniej było coś nie tak. Poza tym w Facebooku utrzymują bazę błędów CI i ich rozwiązań uzupełnianą na bieżąco, kiedy CI zgłosi jakiś ciekawy błąd. Nagrania z code::dive jeszcze nie ma, ale na YT można znaleźć to samo wystąpienie z innych konferencji.

Michał Sajdak – A story of 3 CCTV cameras

Autor prowadzi portal sekurak.pl i prezentował na żywo luki bezpieczeństwa w kamerach przemysłowych. To przerażające jak łatwo był w stanie przejąć kontrolę nad taką kamerą. Z resztą pokazał również, że wcale nie trzeba uprawnień admina, żeby uzyskać dostęp do obrazu z kamery, ludzie je po prostu nieświadomie udostępniają w internecie. To samo na pewno tyczy się innych urządzeń IoT. Konkluzja była taka, że typy podatności zwykle się powtarzają. Ciśnienie terminów i kosztów powoduje, że rozwiązania nie są wystarczająco dobrze przetestowane.

Podsumowanie

Jestem bardzo zadowolony, że uczestniczyłem w tej konferencji. Była to dla mnie okazja zapoznania się z różnorodnymi tematami takimi jak Rust, Go, Security, czy Augmented Reality. Na co dzień nie ma czasu na śledzenie wszystkich nowinek i ciekawostek. Raczej nie nauczyłem się rzeczy, które będę mógł wykorzystać na co dzień, ale nie taki był cel.

Miejsce konferencji, czyli Kino Nowe Horyzonty również oceniam na plus. Świetna lokalizacja w samym centrum Wrocławia, dużo sal i miejsce na korytarzu. Był tylko jeden problem. Słuchając prezentacji w sali kinowej na wygodnym fotelu nieraz musiałem stoczyć heroiczną walkę, aby nie uciąć sobie drzemki. Jak patrzyłem po publice, nie był to tylko mój problem.

Jedną z atrakcji był Escape Room dla programistów. Niestety nie miałem okazji skorzystać, bo przed konferencją trzeba było rozwiązać test online, czego nie zdążyłem zrobić.

Jedno czego żałuję, to brak tematyki Embedded mimo, że miał to być jeden z tematów konferencji. Miała być prezentacja o LoRaWAN i IoT, ale została odwołana. Jedyna prelekcja, którą można podciągnąć pod ten temat, była o FPGA, ale na niej nie byłem.