W ostatnim tygodniu września byłem jeszcze na jednej konferencji przed opisywanym ostatnio Programistokiem – na 4Developers Gdańsk, która odbyła się we wtorek 25 września. Był to dla mnie debiut w roli prelegenta. Moja prezentacja o systemach safety-critical odbyła się o 14.00 na ścieżce C++. Przez cały dzień uczyłem również w konferencji jako słuchacz. Głównie właśnie na ścieżce C++.

Andrzej Dyjak – Compile-time Memory Corruption Mitigations

Na pierwszą prezentację niestety nie zdążyłem. Miałem trochę problemów z zaparkowaniem i byłem z 20 minut po starcie. Jednak z tego co udało mi się dowiedzieć, mam czego żałować. Przedstawiono w niej wpływ różnych flag w poszczególnych kompilatorach na możliwe problemy z pamięcią. Na start mieliśmy więc dobrą merytorycznie techniczną prezentację.

Adrian Ostrowski – C++: A fast tour of a fast language

Ta prezentacja była prowadzona w języku angielskim. Omawiała nowości z ostatnich standardów C++ od C++11. Bardzo ciekawie się jej słuchało mimo, że poruszane tematy w większości już znałem. Tak naprawdę każdy, kto siedzi trochę w C++ już o nich słyszał, bo są ważne i wszędzie wałkowane. Można więc było posłuchać jak te nowe możliwości języka przekładają się na jasność wyrażania intencji w kodzie bez potrzeby dodawania komentarzy. Było między innymi o smart pointerach, constexpr, move semantics, czy lambdach. Było również trochę o nowościach, które czekają nas w C++20 albo jeszcze później. Dla mnie najciekawszą nowością będzie design by contract, które może zmienić sposób pisania kodu w systemach safety-critical. Było też kilka słów o toolach wspomagających pracę programisty. Mi najbardziej zapadł w pamięć metashell – tool do debugowania templatów w przeglądarce. Prezentacja jest już dostępna na youtube:

Niestety prelekcje nie były nagrywane oficjalnie – ta została nagrana przez autora prywatnym sprzętem.

Mateusz Nowak – Error: memory is not aligned

Prezentacja składała się z dwóch części. Ja byłem tylko na pierwszej. Można się było dowiedzieć o co w ogóle chodzi z wyrównywaniem pamięci i jakie typowe błędy są z nim związane. Pokazane zostały też sposoby wymuszenia odpowiedniego wyrównania całych obiektów i poszczególnych pól struktur, czy jak stosować składnię specyficzną dla poszczególnych kompilatorów. W skład prezentacji wchodził też livecoding, gdzie mogliśmy zobaczyć efekt zmiany poszczególnych paramterów. Szkoda tylko, że wynikowe adresy wyświetlane były jako liczby dziesiętne, a nie szesnastkowe, bo łatwiej by było dostrzec alignment.

Prezentacja była bardzo skupiona na zastosowaniach w windowsie i driverach. Jest to zrozumiałe skoro autor pracuje w Intelu. Mi mocno brakowało ogólniejszych zastosowań takich jak protokoły komunikacyjne, przechowywanie danych w pamięci nieulotnej albo systemy embedded. Szczególnie, że z każdą z tych trzech grup miałem dużo do czynienia i chętnie bym posłuchał o dobrych praktykach i błędach na jakie należy uważać.

Krzysztof Owsiany – IL – między piekłem a niebem

Jedyna prezentacja na jakiej byłem spoza ścieżki C++. Wygłaszał ją Krzysiek, którego znałem z DSP2017. Było o Intermediate Language, czyli takim .NETowym asemblerze. Nie jest to jednak prawdziwy asembler, skoro ma obiektowość i różne dodatkowe opcje. Jednak mimo wszystko mnemoniki wyglądały znajomo. Pod koniec prezentacji padło pytanie po co w ogóle programista ma wnikać w takie niskopoziomowe rzeczy. Na sali C++owców takie pytanie na pewno by nie padło 🙂 Potem okazało się, że z premedytacją zadał je opiekun ścieżki .NET, który dobrze wiedział po co taka wiedza jest potrzebna. Chciał po prostu, aby wszyscy na sali zdawali sobie sprawę z celu poznawania niskopoziomowych szczegółów, czyli choćby wyszukiwania nieoptymalnego kodu albo możliwych luk bezpieczeństwa.

Moja prezentacja – Kiedy od softu zależy ludzkie życie

Było to moje debiutanckie wystąpienie na konferencji programistycznej. Temat chyba się spodobał, chociaż w trakcie prezentowania bardzo trudno to ocenić. Jednak średnia ocen okazała się bardzo dobra – 4.83/5. Na końcu wywiązała się dyskusja, w której powiedziałem trochę  rzeczy bardziej związanych z konkretnym projektem. Treść minimalnie się różniła od tej z opisanego ostatnio Programistoku. Tutaj bardziej rozwinąłem temat Rusta i dlaczego jeszcze nie jest używany w systemach safety-critical. Planuję też oddzielny artykuł, a może nawet kilka, o językach programowania w safety-critical.

Zbigniew Skowron – Jak używać wyjątków w C++

Prezentacja składała się z dwóch części, ja byłem tylko na drugiej. Musiałem trochę ochłonąć po swojej prezentacji. To była kolejna dobra, techniczna prelekcja. Podobnie jak w przypadku drugiej prezentacji, informacje tu zawarte były mi w większości znane. Szczególnie, że chwilę wcześniej skończyłem czytać Scotta Meyersa. Jednak wiedza była dobrze ustrukturyzowana i poparta przykładami. Można się było więc dowiedzieć, jak exceptiony współgrają z RAII, jak używać noexcept, throw, dlaczego są lepsze od kodów błędów, jaki mają wpływ na wydajność i jakie są dobre praktyki korzystania z wyjątków. Nowością dla mnie było omówienie implementacji obsługi wyjątków przez kompilatory i jakie ma to konsekwencje. Slajdy z prezentacji można znaleźć na stronie warszawskiej grupy cpp – link.

Michał Adamczyk – How modern C++ affects design

Podczas tej prezentacji omawiany był proces tworzenia biblioteki do sieci neuronowych. Biblioteka składała się z pojedynczego headera, mocno wykorzystywała template metaprogramming  i dobrodziejstwa nowych standardów C++ takie jak constexpr, std::array, type_traits itp. Głównym zadaniem tej biblioteki były obliczenia macierzowe – dodawanie i mnożenie przez skalar. Stworzenie takiej biblioteki jest fajnym ćwiczeniem nowych funkcji C++ a także pretekstem do odkurzenia wiedzy o macierzach. Chętnie wykorzystałbym taką bibliotekę do swoich projektów np. do implementacji EKF. Trzeba by było ją rozbudować tylko o mnożenie macierzy, transpozycję, czy odwracanie. Możnaby w ogóle pokusić się o stworzenie libki ze składnią matlabową. Pozwalałaby ona na przykład tworzyć macierz z kombinacji mniejszych macierzy i wektorów. To wszystko jest do zrobienia przy pomocy magii z templatami. Konkluzją z tej prezentacji był oczywiście skompilowany kod – wszystkie obliczenia wykonują się w czasie kompilacji i docelowo otrzymujemy pojedynczą instrukcję zwracającą ostateczny wynik.

Podsumowanie

W internecie jeszcze przed konferencją pojawiły się narzekania na jej jakość merytoryczną. W przypadku ścieżki C++ były one zupełnie nieuzasadnione. Każda prezentacja trzymała poziom. Cieszę się, że brałem udział w 4Developers Gdańsk zarówno jako prelegent jak i słuchacz. Można mieć natomiast uwagi do pozostałych ścieżek. Szczególnie w przypadku Soft Skills patrząc na agendę w oczy kuła ilość Chillout & Networking. Połowa slotów była nieobsadzona. W przypadku Javy i .NET są pojedyncze puste sloty. Pewnie znaczenie ma tutaj ilość konferencji w poszczególnych technologiach. Scena C++ jest jednak wyraźnie mniejsza niż Javy i .NETa, dlatego dla wielu prelegentów przyjechanie do Gdańska na lokalną konferencję nie było aż tak atrakcyjne.