Programista 3/2019 (82)
Programista 3/2019 (82)
Protocol Buffers jest narzędziem stworzonym przez firmę Google w celu ustandaryzowania serializacji ustrukturyzowanych danych do binarnego formatu. Rozwiązanie to ma bardzo szerokie zastosowanie między innymi w komunikacji sieciowej, przechowywaniu danych oraz wymianie informacji między różnymi technologiami. Kodowanie używane przez Protocol Buffers umożliwia zmianę formatu serializowanych danych z zachowaniem wstecznej kompatybilności pozwalającej na odczytanie starej wersji formatu przez kod używający nowej wersji oraz nowej wersji formatu przez aplikacje skompilowaną dla starej wersji.
Od swojego początku Python jednoznacznie kojarzony był z duck typingiem i dynamicznym typowaniem. Świat został wywrócony do góry nogami wraz z PEPem 484 i premierą Pythona 3.5. Wtedy to zaczęto wykorzystywać nienowe już adnotacje funkcji (PEP 3107) do opisywania typów (ang. type hints). Celem tego artykułu jest wprowadzenie czytelnika w świat adnotacji, a także pokazanie zalet oraz ograniczeń tego stosunkowo młodego narzędzia w świecie Pythona.
Jakiś czas temu podjąłem się zlecenia polegającego na przeprogramowaniu gotowego urządzenia opartego na mikrokontrolerze ATmega. Zakres zleconych prac obejmował napisanie nowego firmware od zera, po czym wdrożenie miało w pierwszym etapie objąć kilkadziesiąt urządzeń. Ponieważ napisanie bezbłędnego kodu w pierwszym podejściu raczej nie było zbyt realistyczne, przez następne kilka dni kwestia spodziewanych problemów w tej materii spędzała mi sen z powiek. Aż w końcu...
Pisanie kodu nieodzownie jest powiązane z błędami – czy to syntaktycznymi, czy też, nieco trudniejszymi do wykrycia, błędami logicznymi. O ile ten pierwszy przypadek jest dość łatwy do znalezienia i naprawy, ponieważ pomaga nam w tym kompilator, tak już ten drugi może przyprawić o ból głowy. By nam nieco tego bólu oszczędzić, powstało wiele narzędzi oraz metodyk odpluskwiania kodu. Czy jednak kiedykolwiek zastanawialiśmy się, co tak naprawdę kryje się pod maską debuggera? Czemu on w ogóle działa – i jak działa – oraz co zrobić, gdy pracujemy w bardziej wymagających środowiskach i nie mamy dostępu do całego zaplecza narzędzi debugujących? W poniższym artykule postaram się rzucić nieco światła na powyższe zagadnienia, zaczynając od sprzętu, przechodząc przez kernel, a na przestrzeni użytkownika kończąc.
Kiedy i dlaczego nasz design zaczyna popadać w ruinę? Co ma to wspólnego z powiązaniem (ang. coupling) i spójnością (ang. cohesion) klas? Często wydaje nam się, że doskonale wiemy, jak zdefiniować oba pojęcia. Okazuje się jednak, że nasz kolega lub koleżanka mogą mieć całkowicie odmienne na ten temat wyobrażenie. Istnieje bowiem wiele ich typów, o których najczęściej albo się nie wspomina, albo po prostu nie zauważa. Zobaczmy, dlaczego niejednokrotnie mamy problem z ich zrozumieniem i dlaczego każdy z nas może mieć ich inną wizję.
Pokrycie kodu (ang. Code Coverage) jest jedną z wielu statystyk, które możemy zbierać w odniesieniu do kodu. I jak każda statystyka, z definicji nie jest zła. Niestety programiści często zaczynają traktować ją jako cel sam w sobie, a nie narzędzie pozwalające na zweryfikowanie jakości testów i kodu aplikacji.
Codziennie przyjmujesz dawkę kofeiny, którą masz zamiar przetworzyć na działający kod. Wracasz do pracy i czujesz, jak cię osaczają: na monitorze, na touchscreenie twojego telefonu. Są wszędzie. Powiadomienia! Jak zombies, atakują zbędnymi informacjami i wysysają energię zdobytą z utylizacji ziarenek kawy. Za chwilę dowiesz się, jak skutecznie przeprowadzić kontratak w miejscu, w którym się nie spodziewasz.
Na temat tego, jak ważną rolę w dzisiejszym świecie odgrywa blockchain, toczą się dyskusje. Jego rola w przyszłości wydaje się być jednak ugruntowana, a wątpliwości nie ulega, że zastąpi on utarte rozwiązania w wielu dziedzinach. Tam, gdzie kluczowe jest bezpieczeństwo i transparentność, sprawdza się świetnie już dzisiaj. Blockchain znajduje zastosowanie m.in w kryptowalutach, systemach finansowych, IOT, a wszędzie tam, gdzie jest użyty, całkowicie zmienia standardy. Blockchain udowadnia, że możliwe jest pogodzenie bezpieczeństwa, przejrzystości i decentralizacji. A przecież całkiem niedawno jedyną implementacją tej idei był Bitcoin. Wpływ, jaki blockchain może mieć na naszą przyszłość, może budzić pewne obawy. Na pewno jednak zachęca do bycia częścią tej globalnej rewolucji.
Jak wyglądał proces tworzenia nowej aplikacji mobilnej dla kierowców iTaxi? Z jakimi wyzwaniami zmierzył się zespół, który pracował nad oprogramowaniem? Które momenty były zaskakujące, a które zabawne? O tym w naszym case study!