Efektywne zarządzanie komendami w aplikacjach desktopowych
Architektura każdej aplikacji desktopowej powiązana jest ściśle z koncepcją komend, czyli poleceń, które może jej wydawać użytkownik. Ich implementacja może być nieskomplikowana albo bardzo wyszukana, ale każdy wybór pociąga za sobą istotne konsekwencje. Przyjrzyjmy się, które z podejść przyniesie nam najwięcej korzyści.
Kontrola dostępu i ewidencja działań użytkowników
W poprzednim artykule dotyczącym XAF (Programista 1/2022) przedstawiliśmy, jak za pomocą frameworka XAF zbudować prostą aplikację biznesową. Dzisiaj chcemy pokazać, w jaki sposób można ją uzupełnić o kontrolę dostępu i rejestrowanie historii zmian danych przez użytkownika. Artykuł polecamy też programistom C#, którzy nie są zainteresowani samym XAF – opisywany moduł Security Module można bowiem wykorzystać w dowolnym projekcie tworzonym w C# [11], [13].
Wszystko wskazuje na to, że nowy standard C++ zostanie opublikowany zgodnie z planem w roku 2023. Bez wielkiej niespodzianki będzie on nosił miano C++23. W tym artykule opiszę najciekawsze i najistotniejsze ze zmian, których możemy spodziewać się w przyszłym roku.
Czy pisząc program w języku C++, natknęliście się kiedyś na wywołanie typu foo(true, false, true)? Nie mogliście sobie poradzić ze stworzeniem API, potrzebującego wielu parametrów o domyślnych wartościach, które będzie wygodne w użyciu? W tym artykule przedstawimy jedno z możliwych rozwiązań tego problemu zaimplementowanego w bibliotece indicators autorstwa p-ranav (repozytorium p-ranav/indicators na platformie GitHub).
W dobie rosnących możliwości przesyłu danych oraz energii, przy jednoczesnej standaryzacji i ujednolicaniu wszelakich połączeń, niezbędny jest mechanizm, który to wszystko zbiera w całość. Z pomocą przychodzi protokół USB Power Delivery (PD) korzystający z portu USB typu C. W artykule postaram się przybliżyć, co takiego dzieje się w tej małej wtyczce, że daje nam możliwości, o których mało kto słyszał.
SIMD (ang. Single Instruction, Multiple Data) jest typem architektury komputerowej, w której w danej chwili jedna instrukcja wykonywana jest jednocześnie na wielu strumieniach danych. Architektura ta jest charakterystyczna dla procesorów wektorowych i spotykana jest powszechnie w GPU kart graficznych. Nie jest jednak do nich ograniczona – dobrodziejstwa SIMD dostępne są również w procesorach z rodziny x86, ARM i innych, kryjąc się pod takimi nazwami marketingowymi, jak SSE, AVX czy NEON.
Istnieje wiele sposobów synchronizacji czasu pomiędzy urządzeniami. Jednym z nich jest wykorzystanie Precision Time Protocol. W poniższym artykule zapoznamy się z tym protokołem, poznamy podstawowe pojęcia oraz prześledzimy przykładowy przebieg synchronizacji.
Implementujemy wirtualnego kierowcę przy pomocy sieci neuronowych i algorytmu ewolucyjnego
Czy wam również zdarzyło się użyć jakiegoś sformułowania, które umieszczone w odpowiednim kontekście było całkowicie sensowne, ale wyrwane z tegoż kontekstu brzmiało całkowicie absurdalnie? Moim dotychczasowym faworytem jest komentarz w kodzie: „Metoda niszczy wszystkie światy” (chodziło o usunięcie scen – światów – w autorskim silniku renderującym 3D). Wczoraj do kolekcji dołączył kolejny wpis; zapytany przez żonę, dlaczego siedzę do późna przy komputerze, odpowiedziałem: „Nie mogę zmusić moich zmutowanych kierowców do przejechania całej trasy”. Zdanie to, choć brzmi niedorzecznie, jest jednocześnie całkiem niezłym wprowadzeniem do tematyki, którą chcę poruszyć w niniejszym artykule.
Jak dbałość o architekturę może stać się naturalną składową rozwoju oprogramowania? Czy przykładamy taką samą wagę do utrzymania architektury jak do jakości naszego kodu? Warto zadać sobie pytanie, w jaki sposób automatyzacja tego procesu może wspierać nas w codziennym developmencie. W tym artykule odpowiemy na postawione pytania oraz przedstawimy narzędzia dostępne dla środowiska Node.js.
Większość nowoczesnych systemów operacyjnych implementuje szereg mechanizmów, których zadaniem jest utrudnienie przeprowadzenia niepożądanych działań przez zwykłego użytkownika. Droga od ustalonego przyczółka, którego samo zdobycie może nie być trywialne, po pełną kompromitację systemu nie powinna być usłana różami. Wręcz przeciwnie, wykonywanie jakichkolwiek działań mogących zakłócić pracę systemu zwykle wymaga pokonania kilku znaczących barier.