Programista 6/2017 (61)
Programista 6/2017 (61)
Coraz więcej rozwiązań informatycznych wymaga integracji wielu usług. Z drugiej strony systemy te pracują w architekturze rozproszonej, w której wiele aplikacji końcowych komunikuje się z centralnym modułem, który przechowuje lub przetwarza dane. Ten centralny moduł wymaga własnych lub zdalnych zasobów sprzętowych, które w bardzo wielu przypadkach są nadmiarowe do zrealizowania konkretnego celu. Tu z pomocą przychodzi architektura bezserwerowa, która pozwala integrować usługi i wykonywać operacje na danych, minimalizując koszty zasobów sprzętowych. W tym artykule pokażę, w jaki sposób utworzyć funkcję przetwarzającą zdarzenia (Azure Function) i zintegrować ją z innymi usługami za pomocą Azure Logic App.
W poprzednim numerze „Programisty” przedstawiłem wirtualną konsolkę PICO-8 i opisałem jej możliwości. Dziś, zgodnie z obietnicą, masz przed sobą drugą część artykułu na temat PICO-8, gdzie opisuję, jak za pomocą tego intrygującego narzędzia stworzyć prostą, aczkolwiek kompletną i – mam nadzieję – niebanalną grę logiczną. Zapraszam do wspólnej zabawy!
„Wie Pan, jest jeszcze jeden mały detal, który nie daje mi spokoju” – te słowa z pewnością są dobrze znane miłośnikom serialu o przygodach porucznika Columbo. Amerykański policjant dzięki umiejętności kojarzenia faktów oraz na podstawie drobnych śladów potrafił odkryć prawdę i wskazać sprawcę zbrodni. W rzeczywistym świecie, który jak wiemy jest w większości biegunowo odmienny od tego, co jest prezentowane w serialach czy filmach, detale stanowią istotny element naszego życia. Nierzadko bowiem zróżnicowane procesy (jak chociażby identyfikacja człowieka na podstawie jego cech biometrycznych czy detekcja zróżnicowanych obiektów na obrazach) mogłyby zwrócić błędny wynik, gdyby autor implementacji czy algorytmu nie zwrócił uwagi na pewne szczegóły.
Tworzenie aplikacji wymaga połączenia twardej wiedzy analitycznej, programistycznej z umiejętnością tworzenia zaawansowanych, lecz jednocześnie prostych w obsłudze rozwiązań, gdzie końcowy użytkownik powie: „wow – ten produkt rozwiązuje moje problemy”.
Jednym z celów rozwoju wirtualnej rzeczywistości opartej o usługi w Internecie jest stworzenie świata bez ograniczeń. Działanie takich usług jest zasobożerne i ze względu na ograniczenia sprzętowe wymaga zastosowania systemów rozproszonych. Jednym z największych wyzwań systemów rozproszonych jest ich nieprzerwane działanie nawet w obliczu awarii części infrastruktury lub węzłów je tworzących. To niepozorne wymaganie uniemożliwia osiągnięcie innych pożądanych cech aplikacji rozproszonych, a zatem zmusza ich twórców do podejmowania kompromisów.
Obecnie najbardziej rozpowszechnionym schematem autoryzacji i autentykacji w Internecie jest wymaganie podania prawidłowej nazwy użytkownika i hasła. Niekiedy wprowadza się dwuskładnikowe uwierzytelnianie za pomocą fizycznego tokenu albo aplikacji w smartfonie. Celem tego artykułu jest zaprezentowanie implementacji znanych metod uwierzytelniania opartych o kryptografię asymetryczną, które do tej pory występowały wyłącznie poza aplikacjami internetowymi, a obecnie możliwa jest ich implementacja przy użyciu Web Crypto API [1].
Dane testowe to wartości, które wprowadza się do testowanego systemu jako dane wejściowe dla pewnej funkcji (najczęściej funkcji wielu zmiennych) w celu weryfikacji lub walidacji jej poprawności.
Od kiedy zarządzanie projektami za pomocą podejścia zwinnego (np. Scrum) zyskało na popularności, zaczęto zastanawiać się, jak powinien wyglądać zespół, który sprosta nowym wymaganiom. Według Scrum Guide’aTM powinien on posiadać wszelkie kompetencje potrzebne do wytworzenia przyrostu produktu, a jeśli ich nie ma, powinien je nabyć. Produkt, który dostarcza, ma być kompletny, czyli taki, który zawiera wszystko, czego wymaga od niego klient. Dojrzały cross-kompetencyjny zespół analizuje wymagania klienta i wyjaśnia nieścisłości. Implementuje wymaganą funkcjonalność, sporządza dokumentację oraz przeprowadza testy produktu. Dzięki temu czas od zgłoszenia potrzeby przez klienta do dostarczenia wartościowego produktu znacząco się skraca. Zmniejsza to koszty jego wytworzenia oraz ułatwia adaptację do zmian proponowanych przez odbiorcę produktu.
W ostatni miesiąc wiosny odbyły się dwa z najtrudniejszych CTF-ów tego sezonu. Jeden z nich był kwalifikacją na najbardziej prestiżowe zawody o nazwie DEF CON, które odbywają się co roku w Las Vegas. Niestety, tym razem żadnej z polskich drużyn nie udało się zakwalifikować do finałów. Drugim bardzo ciekawym CTF-em było wydarzenie zorganizowane przez polską drużynę Dragon Sector. Turniej ten odbywał się w Krakowie. Chcielibyśmy przedstawić czytelnikom rozwiązanie całej kategorii crackme z DEF CON-u oraz zadania Shoot The Flag dla bardzo archaicznej platformy NES.
Drogi Programisto, kim Ty właściwie jesteś? Artystą, rzemieślnikiem, inżynierem, a może architektem... Nie ma jednoznacznej odpowiedzi, ale przyglądając się konstrukcjom wybudowanym przez programistów, da się odróżnić dobry kod od kiepskiego. I chyba jego najwyraźniejszą cechą jest dbałość o detale, a co za tym idzie – o jakość i piękno tworzonych aplikacji.
Programiści ciągle muszą udoskonalać swój warsztat i rozszerzać wiedzę. Technologie, biblioteki czy frameworki szybko się dezaktualizują. Trendy się zmieniają. Pozostaje więc pytanie, skąd czerpać wiedzę na bieżąco, by nie wypaść z obiegu, pozostać atrakcyjnym na rynku pracy i cały czas robić to, co się lubi.
Przedstawiam szóstą lekcję minikursu angielskiego dla programistów. Tym razem tematem przewodnim jest język JavaScript. Zachęcam do wielokrotnego wykonywania ćwiczeń, aby dobrze utrwalić sobie przyswojony materiał. Rozwiązania do ćwiczeń zamieszczono na stronie internetowej, której adres podano na końcu artykułu.