Programista 3/2024 (113)
Programista 3/2024 (113)
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.
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 operacyjnym dla urządzeń wbudowanych.
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ć.
Może spotkaliście się z sytuacją, gdzie powstało już jakieś oprogramowanie, ale nie spełnia ono waszych oczekiwań? W takim przyypadku 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?
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!
W skrzynce z narzędziami każdego programisty istnieje bardzo potężne akcesorium – testy jednostkowe. I jak każde narzędzie, może ono służyć do pomagania osobie z niego korzystającej, ale też może przyczynić się do wyrządzenia szkody. Szkodą w przypadku testów jednostkowych może być „zabetonowanie” implementacji, a dokładnie jej szczegółów. W takim przypadku prawie każda zmiana w kodzie produkcyjnym sprawia, że musimy dostosowywać do niej masę testów.
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).
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.
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ół.
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.
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.