REKLAMA

Programista 3/2024 (113) – lipiec/sierpień 2024 – Python Fuzzing 101 – SPIS TREŚCI

Zapraszamy do zamówienia magazynu w >>prenumeracie<<. Miesięcznik jest dostępny w formie papierowej, PDF, EPUB i MOBI oraz AZW3. Do prenumeraty papierowej zawsze dołączamy wydania elektroniczne.

JĘZYKI PROGRAMOWANIA

C, PHP, rozszerzenia i parametry nullable

Znany cytat przypisywany Albertowi Einsteinowi mówi, że „Wszystko powinno być tak proste jak tylko możliwe, ale nie prostsze”. Proces pisania rozszerzeń do PHP jest jednocześnie i łatwy, i trudny. Łatwy w tym sensie, że jest to najbardziej efektywny sposób przyłączenia do PHP kawałków kodu, których w języku skryptowym nie da się napisać. Sterowniki do bazy danych, komunikacja ze sprzętem, skomplikowane obliczenia wymagające GPU… To wszystko w postaci rozszerzenia jest sposobem najprostszym z możliwych, ale wymagającym zanurzenia się w skomplikowany świat Zend Engine. W tym artykule dotkniemy jedynie brzegów tego świata.

Magdalena Nowakowska

PROGRAMOWANIE SYSTEMÓW OSADZONYCH

Wieloprocesorowość symetryczna we FreeRTOS

Idea SMP (ang. symmetric multiprocessing, wieloprocesorowość symetryczna) polega na wykorzystaniu wielu (co najmniej dwóch) identycznych jednostek przetwarzających do jednoczesnego wykonywania programu. Koncepcja ta jest już bardzo stara – pierwsze tego typu maszyny były produkowane już w latach 60. ubiegłego wieku. Jej szczególnym przypadkiem są wielordzeniowe procesory, które do systemów wbudowanych trafiły w latach 80. Choć pomysł jest nienowy, to do FreeRTOS implementacja SMP trafiła dopiero w grudniu 2023 r. Niniejszy artykułu przybliża, w jaki sposób zrealizowano wsparcie SMP w najpopularniejszym systemie operacyjny dla urządzeń wbudowanych.

Maciej Norberciak

PRZETWARZANIE RÓWNOLEGŁE I ROZPROSZONE

O idempotencji, deduplikacji i ponawianiu żądań

Jednym z zalecanych, podstawowych sposobów zapewnienia niezawodnej komunikacji w sieci komputerowej jest użycie mechanizmu ponawiania żądań. Jego nieumiejętne zastosowanie może jednak doprowadzić do niepożądanego stanu systemu. W artykule opiszę, z jakiego powodu może do tego dojść i jak możemy się przed tym zabezpieczyć.

Tomasz Kowalski

INŻYNIERIA OPROGRAMOWANIA

Jak wynaleźć koło na nowo, czyli o przepisaniu wyszukiwarki artykułów „Programisty” (>>więcej o tym artykule<<)

Może spotkaliście się z sytuacją, gdzie powstało już jakieś oprogramowanie, ale nie spełnia ono waszych oczekiwań? W takim przypadku są co najmniej cztery opcje do wyboru. Pierwsza to używać tego system mimo jego wad. Druga – poszukać zamienników. Trzecia – nie używać, a czwarta… spróbować napisać to oprogramowanie na nowo. I właśnie o tej ostatniej możliwości będzie ten artykuł. Jak może wyglądać przykładowy proces analizy systemu w poszukiwaniu jego wad i zalet? Jak ocenić własne umiejętności, aby ułatwić sobie podjęcie decyzji, która może nas kosztować dużo czasu? Jak może wyglądać implementacja nowego projektu? I wreszcie – czy było warto?

Sylwester ‘Lorthiz’ Wróblewski

Emulacja, wirtualizacja i konteneryzacja – różnice i zastosowania

Prawdopodobnie w swojej karierze w świecie programowania nie raz wszyscy natrafiliśmy na zjawisko emulacji, wirtualizacji lub konteneryzacji. Próba zainstalowania Arch Linuxa na VirtualBoxie, pogrywanie w swoje ulubione retro gry na DosBoxie lub napisanie Dockerfile do projektu – to niektóre z częstych przypadków, w których użyliśmy tych mechanizmów. Dlaczego w ogóle powstały, jakie są różnice, wady, zalety i gdzie są wykorzystywane? Zaraz to sobie wszystko wyjaśnimy!

Mateusz Solnica

BEZPIECZEŃSTWO

Python Fuzzing 101 (>>więcej o tym artykule<<)

Python 3 to obecnie jeden z najpopularniejszych języków programowania. Stosunkowo prosta składnia oraz łatwość ekspresji powoduje, że jest on bardzo częstym wyborem. Popularność niesie za sobą masę bibliotek, które powstają nie tylko w Pythonie, ale także w innych językach (np. C) w celu poprawienia wydajności. Duża ilość kodu oraz ograniczone zasoby osobowe powodują, że oprócz wykonywanych regularnie procesów code-review dobrze jest rozejrzeć się za zautomatyzowanym sposobem poszukiwania błędów i włączyć go do procesu rozwoju oprogramowania w taki sposób, aby otrzymywać informacje o znalezionych błędach zaraz po kolejnym commicie. Taką możliwość daje fuzzing (lub property testing).

foxtrot_charlie

Z ARCHIWUM CVE

Wstrzykiwanie komend w Windows

Wykonywanie jednego programu z innego jest częstą praktyką. Wiele języków programowania do tego celu dostarcza nam dedykowane funkcje. Argumenty tych funkcji są poddawane weryfikacji, po to by złośliwy użytkownik nie mógł zmusić systemu do uruchomienia więcej niż jednego programu, co mogłoby doprowadzić do wstrzyknięcia komendy (ang. command injection). Dziś przyjrzymy się podatności, gdzie okazało się to niewystarczające i dotyczy co najmniej 9 języków programowania.

Mariusz Zaborski

KLUB LIDERA IT

10 grzechów młodych liderów IT

Czy wiesz, że aż jedna trzecia specjalistów IT marzy o zarządzaniu zespołem? Niestety, większość z nich nie jest przygotowana do roli lidera. Mimo najlepszych intencji nowi liderzy często działają po omacku, narażając siebie, swoich współpracowników i organizację na konsekwencje błędów. Przyjrzyjmy się najczęstszym pułapkom, w jakie wpadają młodzi liderzy, oraz temu, jak można ich uniknąć. Odkryjemy też, jakie obszary niekompetencji liderów mają największy wpływ na zespół.

Anita Przybył

PLANETA IT

Gamedev: Sytuacja na rynku i możliwości rozwoju

Branża gamedev to dynamiczny i stale rozwijający się sektor, obejmujący produkcję, dystrybucję i sprzedaż gier wideo. Od czasu pierwszych konsol do dziś branża ta przeżyła niezwykły rozwój, stając się jednym z najbardziej dochodowych segmentów przemysłu rozrywkowego na świecie. Wraz z postępem technologicznym, w tym wzrostem mocy obliczeniowej i udoskonaleniem grafiki, gry wideo stały się o wiele bardziej zaawansowane i złożone niż kiedykolwiek wcześniej. Jednakże, pomimo dominacji dużych wydawców, popularności znanych marek i swoistego kryzysu zatrudnienia, rynek gier nadal oferuje liczne możliwości dla nowych firm i początkujących twórców.

Tomasz Błaszczyk

Ile kosztuje „darmowe” oprogramowanie? (>>więcej o tym artykule<<)

Oprogramowanie „darmowe” nie znaczy „open source” – sugeruje również, że nie musimy za nie płacić. Chociaż w większości przypadków rzadko w grę wchodzą realne pieniądze, używanie „wolnego oprogramowania” w rzeczywistości wiąże się z wieloma ukrytymi kosztami i zobowiązaniami. Wciąż ma ono jakąś licencję, która jest dla nas prawnie wiążąca. Musimy je zintegrować z naszą aplikacją. Nadal musimy przeprowadzać testy i utrzymanie oraz współpracować (lub walczyć) ze Społecznością. Musimy zarządzać ego naszych programistów i ryzykiem ujawnienia naszej własności intelektualnej. W tym artykule chciałbym zagłębić się w te wszystkie kwestie i spróbować odpowiedzieć na pytanie, dlaczego „darmowe” oprogramowanie stało się tak popularne i rozpowszechnione.

Maciej Norberciak