Programista 10/2017 (65)
Programista 10/2017 (65)
Analiza leksykalna oraz gramatyczna, jaką przeprowadziliśmy w pierwszej części artykułu poświęconemu narzędziom Lemon oraz re2c (Programista 9/2017), pozwala na względnie łatwą budowę interpretera, a nawet kompilatora naszej wersji języka Basic. W tej części postaramy się zbudować kompilator dla prostego modelu CPU oraz interpreter instrukcji dla tegoż CPU. Pozwoli nam to na pełne wykonywanie naszych programów w Basicu.
Zaprojektowanie nawet prostej aplikacji z użyciem języka Java jest zazwyczaj bardzo czasochłonne. Konieczne jest utworzenie wielu plików konfiguracyjnych, których zawartość jest tożsama dla każdego innego projektu (ang. boilerplate code). Spring Boot, projekt firmy Pivotal (spring.io), to szkielet tworzenia aplikacji opierający się o Spring Framework, który upraszcza proces projektowania oprogramowania. Tworzenie aplikacji z wykorzystaniem Spring Boot można graficznie opisać następującym schematem:
Część 3: Własny stos sieciowy
W pierwszej części tej serii (Programista 8/2016) omówiliśmy szczegółowo zasadę działania prostego i intuicyjnego algorytmu Dyskretnej Transformaty Fouriera. W tej części pokażemy, jak ten sam algorytm przetestować na prawdziwych próbkach audio przy użyciu Web Audio API omówionego w części drugiej (Programista 1/2017). Oprócz tego przeanalizujemy metody modulacji cyfrowej oraz stworzymy krok po kroku prostą implementację stosu sieciowego bazującego na modelu OSI oraz TCP/IP. Umożliwi nam on zrealizowanie aplikacji przesyłającej wiadomości tekstowe między dwoma urządzeniami tylko za pomocą dźwięku.
W poprzednim numerze omawialiśmy zagadnienia związane z grafiką komputerową oraz wokselami. Tamta wiedza była wystarczająca do stworzenia silnika graficznego, jednak by stworzyć silnik gry, potrzeba czegoś więcej – w szczególności dużo mniej teorii i dużo więcej narzędzi. Jak reprezentować obiekty w grze, jak wprowadzić interakcję między obiektami oraz jak to wszystko złożyć w całość w optymalny sposób? Po odpowiedzi na te oraz więcej pytań zapraszam do lektury artykułu.
Aby ocenić efektywność i jakość algorytmu, należy wyznaczyć za pomocą pewnych miar ilość zasobów komputerowych, jakie są potrzebne do wykonania tych algorytmów. W literaturze oraz w Internecie można znaleźć materiały dotyczące złożoności obliczeniowej, jednak nie zawsze jest to przedstawione w prosty i zrozumiały sposób, a takie postawienie i rozwiązanie problemu jest głównym celem artykułu.
Fuzzing jest obecnie jednym z najskuteczniejszych sposobów na detekcję błędów bezpieczeństwa w oprogramowaniu. Jest to prosta technika testowania, polegająca na przekazywaniu programowi nieprawidłowych danych i sprawdzaniu poprawności reakcji na nie. Od 2014 roku, kiedy po raz pierwszy został zaprezentowany fuzzer opierający się na badaniu pokrycia kodu, czyli American Fuzzy Lop, na rynku pojawiło się wiele rozwiązań tego typu. W tym artykule postaram się omówić bibliotekę pozwalającą na integrację fuzzera z własnym projektem oraz techniki pozwalające zmaksymalizować efektywność wyszukiwania błędów.
…i dlaczego testerzy potrzebują programistów
Będąc młodym pracownikiem i szukając swojej drogi w IT, w sieci napotkałem opis, kim dla pewnego programisty jest tester: „Dobry tester to i błąd znajdzie, i go zdebuguje, a ten najlepszy to sobie go nawet sam naprawi”. Długo zastanawiałem się, czy to realny obraz, czy jedynie jakiś miks sarkazmu z ignorancją. Po pewnym czasie dowiedziałem się, że postrzeganie testerów przez programistów ma pełną skalę barw. Działa to też w drugą stronę.
Kwalifikacje na HITCON, główną imprezę odbywającą się na Tajwanie, były jednym z trudniejszych CTFów w tym roku. Zadania były zróżnicowane, chociaż ich wspólnym elementem było to, że ich autorzy bardzo starali się zadbać o to, by były frustrujące. Ostatecznie, mimo zaciętej rywalizacji, naszej drużynie udało się zająć pierwszą pozycję, zdobywając zwycięską flagę w ciągu ostatnich pięciu minut zawodów.
Przedstawiam dziesiątą, ostatnią już, lekcję minikursu angielskiego dla programistów. Tym razem tematem przewodnim są zintegrowane środowiska programistyczne. Zachęcam do wielokrotnego wykonywania ćwiczeń, aby dobrze utrwalić sobie przyswojony materiał.