W ostatnim czasie działo się u mnie bardzo dużo. Co prawda w mojej aktywności online nie znalazło to zupełnie odzwierciedlenia, stąd prawie trzytygodniowy zastój na blogu. Ale pora wrócić do regularnego pisania. Pomysłów na nowe treści nie brakuje. Dzisiaj zapraszam na małe sprawozdanie z kilku ostatnich tygodni. Będzie więc o długim wyjeździe, zmianie projektu, pierwszym przeprowadzonym szkoleniu zewnętrznym i o rowerze.

Trzy tygodnie poza domem

Ostatni czas wiązał się dla mnie z dużymi zmianami w pracy. W ostatnim tygodniu kwietnia trafiłem do nowego projektu. Będę rozwijać urządzenie dla branży medycznej – pompę insulinową. Będzie to dla mnie kolejny projekt safety critical po systemie kolejowym nad którym pracowałem do zeszłego roku. Praca nad tego typu systemami wiąże się oczywiście z dużą odpowiedzialnością, ale jednocześnie jest bardzo interesująca. Najbardziej podoba mi się potrzeba zapewnienia jak największej niezawodności. Chociaż przez różne obostrzenia i normy praca bywa czasem upierdliwa 😀

Na początek nowego projektu zostałem wysłany na dwa tygodnie na delegację do Poznania. Te dwa tygodnie zostały jeszcze przedzielone majówką, którą również spędziłem na wyjeździe dając łącznie trzy tygodnie poza domem. Sama możliwość wyjazdu do Poznania była fajna. Można się było spotkać ze znajomymi i poznać trochę miasta. Jednak trzy tygodnie w rozjazdach to już trochę długo. Mieszkanie tyle czasu w hotelu, stołowanie się w knajpach i posiadanie tylko tylu swoich rzeczy, ile zmieściło się do torby, a szczególnie brak roweru pod koniec już mocno przeszkadzały. Poza tym w hotelu kompletnie nie miałem weny, żeby napisać coś nowego na bloga, albo porobić jakieś swoje projekty.

Stary projekt

Zmiana to dobra okazja, aby podzielić się kilkoma uwagami dotyczącymi zarówno mojego dotychczasowego, jak i nowego projektu. Tym bardziej, że zwykle staram się nie pisać zbyt wiele o pracy.

Przez ostatnie pół roku w pracy zajmowałem się driverami do dysków twardych na Windowsa. Projekt był realizowany od wielu lat i posiadał ogromną bazę kodu. Pracowałem w nim na tyle krótko, że nie czułem się jeszcze kompetentny aby wprowadzać w nim jakiekolwiek poważne zmiany. Poza tym nawet gdybym się czuł, nie byłoby to takie proste. Wszelkie decyzje przechodziły przez całą hierarchię dowodzenia. Dlatego nie można było sobie tak po prostu wprowadzać zmian. Mogłoby się to skończyć tak:

Zajmowałem się głównie toolami wspomagającymi development, wprowadzaniem unit testów do dużej bazy istniejącego kodu i analizą crashdumpów.  Było tam bardzo mało pisania nowego kodu. Dlatego martwiłem się, że stracę wprawę. Trochę sobie to rekompensowałem po godzinach robiąc Micromouse’a.

Dosyć niespodziewanie z perspektywy czasu okazało się, że projekt ten dał mi ważne umiejętności, których trochę nie doceniałem. Po pierwsze było to obycie z C++. Wcześniej pracowałem praktycznie wyłącznie w czystym C, dlatego musiałem nadgonić dużo teorii. Myślałem, że głównie patrząc na kodm dopisując testy i szukając przyczyn błędów nie nauczę się nowego języka. Okazało się jednak inaczej. Już wkrótce moje umiejętności C++ miały zostać zweryfikowane i jestem zadowolony z tego jak wypadły.

Druga ważna umiejętność była związana z unit testami. Miałem okazję poznać realia pracy z legacy kodem i dopisywaniem testów do dużej bazy kodu niepokrytego testami. Miałem okazję sprawdzić w zupełnie nowym środowisku dotychczasową wiedzę o unit testach i zaproponować usprawnienia w podejściu do testowania. Poza tym poznałem nowe frameworki takie jak googlemock i ogólnie testowanie w C++. Ta wiedza również szybko miała znaleźć zastosowanie.

Nowy projekt

Jak już wspomniałem, moim nowym projektem jest pompa insulinowa. Pasuje mi on pod wieloma względami. Jest to system embedded na STM32, zawiera również trochę automatyki. Jest więc sterowanie silnikiem, sensory, pętla sterowania, regulatory. Czyli po prostu rzeczy na których się znam. Poza tym jest realizowany w Scrumie i przy użyciu Test Driven Development.

Kod jest napisany bardzo starannie z wykorzystaniem dobrych praktyk i wzorców projektowych. W systemach embedded jest to prawdziwa rzadkość. Zwykle czystość kodu jest tylko pustym hasłem mającym zachęcić do projektu, natomiast w rzeczywistości mamy do czynienia z większym lub mniejszym bagnem. Przyczyny takiego stanu rzeczy to ciekawy problem do analizy i nie będę teraz drążyć tego tematu.

Co więcej piszemy w C++. Na STM32 to chyba jeszcze większa rzadkość. Moje pierwsze wrażenia są takie, że jak mogłem tyle czasu męczyć się w C. C++ udostępnia dodatkowe mechanizmy upraszczające kod, a nawet zwiększające bezpieczeństwo. Jest lepsza kontrola typów, dzięki RAII można bezpieczniej korzystać z zasobów, można korzystać z templatów, klas, interfejsów. Jeszcze mam tu duże pole do poprawy, ale C++ może niesamowicie poprawić efektywność. I właśnie tutaj przydały się doświadczenia z poprzedniego projektu. Byłem wręcz zaskoczony, że tak łatwo przyzwyczaiłem się do C++.

Kolejnym aspektem, który zasługuje na szersze omówienie jest Scrum. W branży krąży opinia, że nie nadaje się on do systemów safety, bo jest za mało restrykcyjny i nie zapewnia wystarczającej dokumentacji. Dlatego preferowane są bardziej ustrukturyzowane techniki waterfallowe produkujące przy okazji tony dokumentów. One z kolei nie radzą sobie dobrze z niepewnością i zmieniającymi się wymaganiami. Moje odczucie jest takie, że codzienny development najefektywniej robić w scrumie, natomiast należy go wpasować w jakiś większy proces realizujący wymagania narzucone przez normy bezpieczeństwa. I właśnie z czymś takim mam tutaj do czynienia. Jestem bardzo ciekawy jak to się będzie sprawdzać na dłuższą metę.

Oczywiście jest też druga strona medalu i kilka rzeczy mnie irytuje. Na przykład czasy kompilacji są bardzo długie – rebuild od zera trwa na przykład 15 minut. Poza tym nie da się pracować w jednym IDE, tylko jest oddzielne do developmentu i kompilacji i oddzielne do debugu na sprzęcie. Jednak nie ma paraliżu decyzyjnego i jest chęć poprawy, a zgłaszane uwagi nie przepadają bez echa. Tak więc jest szansa, że uda się pokonać te problemy.

Szkolenie zewnętrzne

Od razu po powrocie z delegacji miałem zaplanowane trzydniowe szkolenie z Test Driven Development na systemach Embedded. Było ono dla mnie szczególne, ponieważ pierwszy raz szkoliłem zewnętrzną firmę. Wcześniej miałem okazję jedynie prowadzić kilka razy to szkolenie wewnętrznie w swoim miejscu pracy. Co ciekawe, nigdzie się nie reklamowałem, że prowadzę takie szkolenie. Po prostu znaleźli mnie w internecie. Faktycznie w google dla frazy „szkolenie tdd embedded” wyskakuje mój post o pierwszym szkoleniu.

Wiedza przekazywana na szkoleniu w dużej mierze pokrywa się z materiałami, które umieściłem tutaj na blogu w sekcji Unit testy. W porównaniu do zeszłego roku trochę rozszerzyłem zakres materiału. Ale największą wartością dodaną było to, czego nauczyłem się przez ostatni rok. Doświadczenie z narzędziami do testowania w C++ pozwoliło wynieść prowadzone przeze mnie szkolenia na nowy poziom. Zyskałem zupełnie nową perspektywę i mogę dzielić się spostrzeżeniami ze swojej pracy nad dużym projektem. Poza tym mogę porównywać różne techniki w C i C++.

Szkolenie zostało przyjęte pozytywnie. W trakcie wywiązało się kilka ciekawych dyskusji. Wiedzę teoretyczną mogłem uzupełnić różnymi historiami z pola walki. Przy okazji mogliśmy wspólnie zastanowić się nad rozwiązaniem konkretnych problemów z wdrożeniem TDD, na które trafił ten zespół. Prowadzenie tego szkolenia dało mi dodatkową motywację. Miałem już wcześniej wizję na drugą część szkolenia pokazującą zaawansowane techniki używane w konkretnych sytuacjach na systemach embedded, z którymi trudno sobie poradzić jak na przykład testowanie rejestrów sprzętowych, wstawki asemblerowe, czy funkcje statyczne. Myślałem również o części warsztatowej. Teraz muszę wziąć się za realizację. Mam nadzieję, że po wakacjach nowy materiał już będzie gotowy.

Sport i pogawędka

Tytuł tego akapitu nawiązuje do czasów licealnych i nauczyciela WF, który lubił sobie pogadać podczas zbiórki. Przy okazji było to rozwinięcie liter jego nazwiska. Istniała również druga, bardziej ordynarna wersja rozwinięcia tego skrótu 😀

W tym roku postanowiłem bardziej dbać o zdrowie. Jednak wiele lat olewania tematu zrobiło swoje i nie poprawię tego z dnia na dzień. Tym bardziej, że jeżeli nie wezmę się do roboty może się to źle skończyć. Przez większość życia prowadziłem bardzo niezdrowy tryb życia. W ogóle nie na nim nie zależało, miałem wrażenie, że zdrowie po prostu zawsze będzie. Teraz to się zmieniło, mam wiele pomysłów i ciekawych rzeczy do zrobienia, a problemem jest brak czasu, żeby to wszystko zrealizować. Dlatego zdrowie jest fundamentem, dzięki któremu mam na to energię. To niesamowite jak proste rzeczy takie jak sen, dieta i wysiłek fizyczny poprawiają samopoczucie i zapobiegają takiemu długotrwałemu zmęczeniu przez które nic nie chce się robić. Dlatego podczas delegacji, kiedy miałem dłuższą przerwę od roweru i żywiłem się w knajpach, od razu spadła moja aktywność.

 

No właśnie, roweru. W tym aspekcie od początku roku śrubuję różne rekordy. Tak wyglądają moje statystyki z 2018:

Od początku roku przejechałem już 800 kilometrów. To tyle co przez cały zeszły rok. Rekordowym miesiącem był kwiecień:

Zrobiłem wtedy 400 km łącznie, do tego 100 km w jeden dzień i 9 dni pod rząd na rowerze. Wynik byłby jeszcze lepszy, gdyby nie wyjazd w ostatnim tygodniu.

Co ciekawe, na początku roku zapisałem sobie cele na 2018. Nie chwaliłem się nimi publicznie, ale jestem zaskoczony, jak szybko idzie ich realizacja. Jeżeli chodzi o rower miałem trzy cele – 100 km w jeden dzien, 7 dni pod rząd na rowerze i 2000 km przez cały rok. Miałem również cele dotyczące schudnięcia – 3 kg do końca marca – udało się nawet szybciej. 10 kg do końca roku – już jest 7. Jednym z celów na 2018 było również poprowadzenie szkolenia zewnętrznego.

Co dalej?

Jak widać ostatnio działo się u mnie naprawdę sporo. W tym wszystkim trochę zaniedbałem bloga. Mam już całą listę pomysłów na nowe wpisy. Przy okazji może lepiej będzie robić trochę więcej krótkich wpisów opisujących jedną konkretną rzecz zamiast takich ścian tekstu. Tym bardziej, że w długich wpisach przewija się wiele wątków i potem na przykład ciężej jest wyszukiwać informacje.

W ostatnim czasie powstało trochę kodu Micromouse, czego również nie opisywałem od dłuższego czasu na blogu. Na pewno pojawi się kilka updatów, a także ruszę z dalszą implementacją. Ostatnio mam na tapecie profilowanie prędkości i realizację zadanej trasy.

Mam zamiar również rozwijać się jako prelegent. Jak już wspomniałem, w najbliższej przyszłości chcę przygotować kolejne szkolenia o TDD Embedded. Mam też pomysły na inne tematy szkoleń. Przy okazji muszę pomyśleć o rozbudowaniu strony o jakąś ofertę szkoleniową. Poza tym chciałbym wystąpić również na jakiejś konferencji. Zgłaszałem się już na Call For Papers do 4Developers, ale niestety nie zostałem wybrany. Może będę miał więcej szczęścia w jesiennych konferencjach.