Programista 9/2018 (76)
Programista 9/2018 (76)
Rozpoznawanie i śledzenie obiektów jest jednym z podstawowych problemów w wizji komputerowej. Śledzenie obiektów umożliwia bowiem estymację prędkości ruchu obserwowanych obiektów, co znajduje zastosowanie w wielu systemach, takich jak instrumenty pomiarowe, diagnostyczne urządzenia medyczne, drony czy samochody autonomiczne. W tym artykule pokażę, w jaki sposób zaimplementować śledzenie obiektów z wykorzystaniem dopasowywania szablonów w celu śledzenia wybranego fragmentu obrazu w sekwencji wideo z kamery internetowej. Wykorzystam przy tym bibliotekę OpenCV oraz język Python.
W świecie projektowania produktu cyfrowego metody User Flow oraz User Journey Map są wymiennie stosowane w trakcie jego tworzenia. Obydwa narzędzia pozwalają na stworzenie usług skoncentrowanych na potrzebach odbiorców, którzy mają różne oczekiwania, doświadczenia oraz sposoby korzystania z usług cyfrowych. Należy pamiętać jednak, że User Flow i User Journey Map różnią się od siebie na wiele sposobów.
Szablon funkcji std::make_unique jest sztandarową metodą tworzenia obiektów typu std::unique_ptr. Niektórzy posuwają się nawet do kategorycznego stwierdzenia: „jeśli tworzysz std::unique_ptr za pomocą innego sposobu niż std::make_unique, to robisz coś źle”. Autor tego artykułu nie zgadza się z tak rygorystycznym podejściem i postara się przedstawić przypadki, w których uzasadnione jest zastosowanie innych metod tworzenia obiektów std::unique_ptr.
Sensory czynników środowiskowych, kiedyś drogie i używane tylko w urządzeniach dedykowanych do specjalistycznych zastosowań, obecnie stają się integralną częścią elektronicznych urządzeń konsumenckich. Niska cena, zaskakująco dobre parametry oraz niewielkie rozmiary to główne czynniki decydujące o ich popularności. Nie powinno zatem nikogo dziwić, że Linuks w krótkim czasie zaczyna oferować dla nich wsparcie w postaci dedykowanego podsystemu IIO (ang. Industrial Input/Output).
W przepastnych zasobach sieci Internet odnajdziemy wiele różnych projektów. Od dużych po małe. I właśnie jednym z tych drugich chcemy się dziś zająć. Jest nim projekt TinyRenderer, którego autorem jest Dmitry V. Sokolov. A jest to przykładowa implementacja algorytmu tworzącego grafikę 3D, podobnego do stosowanego we współczesnych kartach graficznych. Można oczekiwać, iż implementacja algorytmu tworzącego grafikę 3D wymagać będzie wielu linii kodu, ale, co może zaskoczyć, wspomniany projekt to łącznie tylko około 500 linii kodu w C++. My jednak zrobimy, wzorując się na TinyRenderer, nowy port do języka C i choć potrzebna będzie nam większa liczbą linii, to i tak główna pętla tworząca grafikę będzie zawierać znacznie mniej niż wspomniane 500.
Czas procesora i pamięć w przeciągu ostatnich lat stały się zasobami tak tanimi, że często bardziej opłacalne jest skorzystanie z rozwiązania nieoptymalnego, ale łatwego w użyciu, niż poświęcenie czasu na projektowanie wydajnych algorytmów i staranne dobieranie struktur danych. Kod taki oczywiście działa wolniej, ale faktyczne straty czasowe są przeważnie tak małe, że często praktycznie pomijalne. Weźmy choćby narzędzia ORM: radykalnie upraszczają wykonywanie zapytań do bazy danych, ale za cenę produkowania nieczytelnych i często bardzo nieoptymalnych zapytań. W nadchodzącej serii artykułów chciałbym wrócić trochę do korzeni i przypomnieć czytelnikom wady i zalety stosowania różnych struktur danych oraz ogólnie znane, operujące na nich algorytmy. Artykuły z założenia przeznaczone są dla programistów u początku swojej kariery, ale być może i bardziej zaawansowani też znajdą tu coś dla siebie.
W dynamicznym środowisku pracy w branży IT zespoły tworzące oprogramowanie muszą często mierzyć się z wyzwaniem, jakim jest wdrażanie nowych osób do codziennej pracy tak, aby jak najszybciej stanowiły wartość dodaną dla zespołu. Prawidłowo przebiegający proces wdrażania jest ważny dla samopoczucia nowo przyjętej osoby oraz jej planów związania się z firmą na dłużej. Problem zagubienia w nowym środowisku dotyczy zarówno studentów podejmujących pierwszą pracę, jak i doświadczonych osób zmieniających firmę lub stanowisko. Proces wdrażania musi być dobrze zaplanowany i przeprowadzony, aby nowego pracownika nie pozostawić na dłuższy czas bez obowiązków ani też nimi nie przytłoczyć. Celem zatrudniania pracownika powinno być zwiększenie produktywności i jakości pracy zespołu w możliwie jak najkrótszym czasie. Realizacja tego celu możliwa jest dzięki dobrze przeprowadzonemu procesowi onboardingu. Opowiem o tym procesie na przykładzie firmy Ericsson, w której między innymi od roku zajmuję się wdrażaniem nowych osób do pracy w jednym z krakowskich zespołów.
Podczas testów użyteczności warto wziąć pod uwagę eye tracker. Jest to rozwiązanie dla tych badaczy, którzy chcą pogłębić wiedzę o zachowaniach użytkowników w kontekście użycia danego produktu.
Hackover CTF został zorganizowany przez lokalny oddział Chaos Computer Club i odbywał się w trakcie konferencji Hackover w Hamburgu. Zadania nie są już niestety dostępne, jednak kopie plików można pobrać z bloga autora pod adresem https://d0vine.github.io/.
Rozpoczęcie dzisiaj przygody z programowaniem nie jest wcale prostą sprawą. Kiedyś, u początku rozwoju komputerów osobistych, do wyboru była tylko garstka języków programowania, z których większość stanowiła czwórka: Basic, Fortran, C i Forth, a początkujący zaczynali zazwyczaj od pierwszego z nich. Decydowała zwykle jego wyjątkowa prostota, a także powszechna dostępność: bodaj każdy ówczesny komputer osobisty udostępniał interpreter Basica. Jednak z czasem, gdy pojawiły się, a potem spopularyzowały pecety, liczba języków zaczęła gwałtownie rosnąć, a popularność zyskiwały często nawet takie, które powstawały jako domowe, hobbystyczne projekty. Który z nich nadaje się najlepiej do tego, by rozpocząć programistyczną przygodę?