W tym artykule omówię liczby zmiennoprzecinkowe zgodne ze standardem IEEE 754, które są dostępne w większości języków programowania, a także opiszę ich budowę, możliwości i ograniczenia. Odniosę się również do powszechnie panujących przekonań, że liczby te są niedokładne lub że są niedeterministyczne. Pokażę ponadto wiele nieoczywistych pułapek, które czyhają na używających ich programistów...
Grudzień tuż, tuż, więc moje serce bije mocniej na myśl o zbliżających się radosnych chwilach. Mikołaj, prezenty, Nowy rok... Ja osobiście od kilku lat mam jeszcze jeden powód, aby z utęsknieniem wyglądać pierwszego dnia grudnia. Jest to Advent of Code, czyli połączenie kalendarza adwentowego z zagadkami programistycznymi...
W kolejnym artykule z serii „Jak działa Internet” przyjrzymy się systemowi DNS. Dowiemy się, jak on funkcjonuje oraz jakie są jego poszczególne elementy, a także poznamy narzędzia, które pomogą nam w rozwiązywaniu problemów związanych z tym systemem...
Chciałbym wprowadzić czytelnika w podstawy działania „Internetu”. Zaczynając od omówienia modelu OSI, opisując pobieżnie warstwę fizyczną połączeń w sieciach, adresów MAC oraz IP (w obecnym artykule), dojdziemy kolejno do bardziej szczegółowego opisu protokołu TCP, systemu DNS, kończąc na witrynach internetowych oraz API korzystających z HTTP. W międzyczasie poznamy program Wireshark do analizy ruchu sieciowego...
Formularze są kluczowym elementem wielu aplikacji webowych, a Angular oferuje potężne narzędzia do ich tworzenia. Integracja niestandardowych komponentów web z formularzami może jednak okazać się wyzwaniem. W tym artykule przedstawimy Control Value Accessor (CVA), mechanizm Angulara, który ułatwia integrację komponentów web z formularzami...
W tym artykule poznamy narzędzie Buildroot oraz krok po kroku stworzymy funkcjonalny obraz systemu na platformę Raspberry Pi 4. Następnie dodamy dodatkowe programy i sprawimy, by WiFi łączyło się automatycznie po starcie systemu...
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)...
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...
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...
Robienie dobrych code review to umiejętność, którą warto opanować. W artykule omówimy, jakie są zalety i wady tego procesu i w jakich projektach warto go stosować. Zastanowimy się, jakie podejście warto przyjąć, robiąc review kodu, w jaki sposób najlepiej to robić, na jakich aspektach kodu możemy się skupić...
Czy pisząc program w języku C++ miałeś/aś kiedyś dylemat, jakiej biblioteki użyć do formatowania tekstu? Czy spoglądałeś/aś zazdrośnie na inne języki programowania oferujące bardziej nowoczesne narzędzia służące do realizacji tego zadania? W niniejszym artykule znajdziesz opis mechanizmu std::format, który stanowi bardzo ciekawą alternatywę dla nieco przestarzałych, standardowych rozwiązań służących do formatowania tekstu w C++: biblioteki IOStreams oraz funkcji printf()...
Tytuł artykułu może budzić zrozumiałe wątpliwości czytelnika. Po co emulować malware? Czy nie wystarczy, że uruchamia się on na naszych komputerach? W dodatku po co to właściwie robić? I co można w ten sposób uzyskać? W tym artykule skoncentrujemy się na odpowiedziach na te pytania, a także zarysujemy szkic systemu, który będzie w stanie automatyzować te działania w większej skali...
Mam wrażenie, że wokół sieci neuronowych narosło wiele mitów. Nawet niektórzy starsi członkowie mojej rodziny na hasło „sztuczna inteligencja” robią posępną minę, niezależnie od tego, czy mowa jest o generowaniu obrazów czy – na przykład – o rozpoznawaniu odręcznego pisma czy też tłumaczeniu tekstu z jednego języka na drugi. Tymczasem sieć neuronowa, czy bardziej precyzyjnie wielowarstwowy perceptron, jest stosunkowo prostym matematycznym konstruktem, do zrozumienia którego powinna wystarczyć wiedza na poziomie szkoły średniej...
W dynamicznie rozwijającym się świecie LLMów jedną z kluczowych decyzji, przed którą stają organizacje i indywidualni programiści, jest wybór pomiędzy rozwiązaniami lokalnymi i chmurowymi. W tym artykule zaprezentujemy, w jaki prosty sposób można korzystać z modeli lokalnych, wykorzystując do tego język Python...
Korciło mnie, żeby we wprowadzeniu użyć parafrazy znanego z „Nowych Aten” (autorstwa ks. Benedykta Chmielowskiego) wyrażenia „Kolor, jaki jest, każdy widzi”. Tymczasem okazuje się, że kwestia postrzegania koloru – a już tym bardziej jego rzetelnego generowania przez różne urządzenia – wcale nie jest taka oczywista. Weźmy więc kolory pod lupę i zobaczmy, czego możemy się o nich nauczyć...
Ostatnio mam wrażenie, że programiści dzielą się na tych, co już korzystają z LLMów, i na tych, co jeszcze z nich nie korzystają. Szczególnie że dostęp do ChatGPT 3.5 jest bezpłatny, jego API jest bardzo tanie, a ChatGPT 4 – mimo iż darmowy nie jest – nie ma również zaporowej ceny. Sam korzystam z ChatGPT codziennie, w tym również jeśli potrzebuję jakiś krótki skrypcik albo jakąś oczywistą funkcję, której nie chce mi się po raz dziesiąty implementować. Przydatności więc im trudno odmówić. Ale przydatność nie oznacza jeszcze poprawności. Postanowiłem więc poświęcić trochę czasu i sprawdzić, jak to w zasadzie jest z tą poprawnością i bezpieczeństwem kodu generowanego przez ChatGPT. W tym artykule podzielę się moimi wnioskami, przemyśleniami, ale przede wszystkim przejrzę trochę wygenerowanego przez ChatGPT kodu...
Jeśli często korzystamy z klasy HttpClient w .NET, musimy wiedzieć, jak robić to w sposób wydajny i bezpieczny. Wiedza na temat działania HttpClient w przypadku wielowątkowego procesowania zapytań HTTP jest kluczowa. Jakie istnieją sposoby na tworzenie i utrzymywanie instancji klasy HttpClient? Czym jest IHttpClientFactory oraz Typed HTTP client i jak wygląda ich użycie w kontekście Dependency Injection?
W jaki sposób przygotować animację do filmu na YouTube? Najprościej jest chyba skorzystać z Adobe Animate albo AfterEffects. Darmową alternatywą jest też całkiem niezły Synfig. No, chyba że jest się maniakiem robiącym wszystko po swojemu. Wtedy…
GDB, czyli GNU Debugger, to potężne narzędzie do debugowania aplikacji. Pozwala ono na dynamiczną analizę kodu źródłowego i natywnego; procesów użytkownika, jak i jądra systemów. GDB jest jednak nieco „toporny”: niektóre z jego komend są niewygodne w użyciu, a tekstowy interfejs (TUI) mógłby wyświetlać więcej informacji. Sytuację tę poprawia tytułowe Pwndbg – plugin do GDB, z którym zapoznamy się w tym artykule...
W chwili pisania tego artykułu jest niemal pewne, że C++23 będzie czwartym wydaniem C++ z rzędu, które zostanie opublikowane bez opóźnień. Wedle przewidywań będzie to grudzień tego roku...
W tym artykule staram się przedstawić, jak (lub czy) asystenci AI poradzą sobie z kilkoma zadaniami programistycznymi. Czy uda się wygenerować działający i na tyle „prawidłowy” kod, by finalnie uznać to narzędzie za przydatne w codziennej pracy...
Ruby to wysokopoziomowy język programowania, który znany jest przede wszystkim z tego, że pozwala na tworzenie eleganckiego i zwięzłego kodu. Jednak nie jest on powszechnie uznawany za język o wysokiej wydajności. Czasem może zaistnieć potrzeba przeniesienia części obliczeń do kodu natywnego, aby zwiększyć szybkość działania programu. W tym artykule opisuję kilka sposobów, które umożliwią osiągnięcie tego celu...
Czas porozmawiać o genialnym w swojej prostocie matematycznym konstrukcie, obecnym bodaj w każdym obszarze informatyki związanym w jakikolwiek sposób z grafiką komputerową...
Od pewnego czasu na salony wkraczają narzędzia z rodziny AutoML, które umożliwiają stosowanie uczenia maszynowego w sposób automatyczny, także dla osób niezwiązanych z rozwojem sztucznej inteligencji. W tym artykule bierzemy pod lupę dostępne rozwiązania AutoML i przyjrzymy się, jak z nich sprawnie korzystać...
Poznamy dziś algorytm, który pomaga generować losowe obrazy, zachowujące jednak pewien zbiór ograniczeń...
Algorytmy kryptograficzne znajdują szerokie zastosowanie w oparciu o wiele systemów oraz urządzeń. Ponieważ ich uruchomienie na bazie oprogramowania często jest niewydolne ze względu na długi czas przetwarzania danych czy też obciążenie systemu, stosuje się dedykowane układy, takie jak akceleratory kryptograficzne. Urządzenia te są wykorzystywane podczas wymiany informacji w celu zwiększenia efektywności oraz bezpieczeństwa algorytmów kryptograficznych. Jak wzrost wydajności oraz bezpieczeństwa wpływa na zużycie energii?
W tym artykule, skierowanym zarówno do obecnych, jak i potencjalnych programistów języka Go, przyglądamy się tematowi testów jednostkowych...
Czym są? Czy warto zaprzątać sobie nimi głowę po zakończeniu procesu rekrutacyjnego (bo często są wymagane w ofertach pracy)? Czy nadają się tylko do akademickiej dysputy, czy też może da się zastosować je w prawdziwych scenariuszach? Spróbujmy zmierzyć się z tym ciekawym tematem...
W artykule poznacie możliwości darmowego narzędzia Bot Framework Composer v2 i niektóre z jego najpopularniejszych funkcjonalności. Przybliżymy Wam też, jak użycie Bot Framework Emulator, okna Web Chat i okna Watch może zostać użyte w celu debugowania naszego czatbota...
Twórcy popularnego „pehapa” nie próżnują i w grudniu 2022 roku wypuścili kolejną wersję tego języka programowania, w której zrobiono kilka małych kroków do przodu i wykonano jeden całkiem spory skok...
HTTP Request Smuggling to podatność polegająca na różnej interpretacji długości żądań między serwerami pośredniczącymi a serwerem aplikacji (backendem). Różnica ta powoduje, że atakujący jest w stanie ukryć żądanie przed mechanizmami bezpieczeństwa w zewnętrznych warstwach sieci, co bezpośrednio oddziałuje na infrastrukturę sieciową...
W programistycznej karierze przychodzi w końcu taki moment, w którym musimy zmierzyć się z wyjątkowo trudnym do zdiagnozowania błędem. Moją piętą achillesową okazał się bug, z którym walczyłem półtora tygodnia i poległem; dopiero moi koledzy, którzy zaczęli mozolnie komentować duże partie kodu, dotarli do źródła problemu. W niniejszym artykule przedstawię zbiór mniej lub bardziej zaawansowanych i niekonwencjonalnych technik debugowania...
Czy C++ może stać się 10 razy prostszy i bezpieczniejszy…? Czy zaproponowana idea oraz powiązany z nią eksperymentalny kompilator cppfront mogą stanowić rewolucyjny zwrot w historii języka C++? Niniejszy artykuł stanowi próbę znalezienia odpowiedzi na to pytanie...
Na rynku istnieją gotowe rozwiązania, przy pomocy których możemy metryki wygenerować, ale zdarza się, że wygodniej jest zrobić to samodzielnie – do dyspozycji mamy świetne biblioteki z rodziny Microsoft.CodeAnalysis, znane niegdyś jako projekt Roslyn...
Tworzymy grę planszową dla systemów Windows i Android. We wcześniejszych artykułach oswajałem nową technologię .NET MAUI, która umożliwia tworzenie aplikacji wieloplatformowych z graficznym interfejsem użytkownika. Do tej pory testowaliśmy MAUI na przykładzie bardzo prostej aplikacji. Dziś sprawdzimy, czy możliwe jest stworzenie czegoś bardziej złożonego...
Kiedy ktoś nas zapyta, jakie oprogramowanie uważamy za bezpieczne, jednym tchem wymieniamy takie programy jak OpenSSH, OpenVPN i sudo. Gdy w jednym z nich pojawia się poważny problem, świat administratorów trzęsie się w posadach. Dziś przyjrzymy się błędowi, który istniał w sudo...
JustCTF 2022 to kolejna, trzecia już edycja turnieju Capture The Flag typu „jeopardy” [0], organizowanego przez polski zespół justCatTheFish, którego członkami są autorzy tego artykułu...
Implementujemy wirtualnego kierowcę przy pomocy sieci neuronowych i algorytmu ewolucyjnego...
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...
W tym artykule poznacie najciekawsze i najistotniejsze zmiany w języku C++, których możemy spodziewać się w przyszłym roku...
W artykule przyjrzymy się mechanizmom języka Rust, temu, jak one działają, a także czy i w jaki sposób możemy wykorzystać je w języku C++...
Dziś chciałbym pójść o krok dalej i sprawdzić, czy .NET MAUI jest już na tyle dojrzałe, aby możliwe było użycie w projektach aplikacji wzorca architektonicznego Model-View-ViewModel (MVVM)...
Dowiemy się, jak Smart Model działa, jak z niego skorzystać, jakie dodatkowe zalety niesie jego używanie, jakie ma ograniczenia i wreszcie jaką cenę trzeba zapłacić za jego używanie...
Historia .NET MAUI formalnie zaczyna się w 2020 roku, jednak rozwój tej technologii można też traktować jako kontynuację rozwoju Xamarin.Forms i przeniesienie jej z Mono do .NET 6...
Prawdą jest, że jeszcze pięć lat temu stworzenie prostej strony internetowej czy aplikacji nie wymagało takiego nakładu sił i środków, jak obecnie, ale czy aplikacje te były semantyczne i bezpieczne? Jak budować nasze aplikacje w oparciu o CI/CD i jak taki pipeline powinien wyglądać?
Programista powinien zadbać o jakość własnego kodu, aktualizację wykorzystywanych bibliotek czy właściwe zarządzaniu sekretami. Jeżeli korzystamy z repozytorium kodu GitHub, a nasz kod jest publicznie dostępny, wiele z tych czynności możemy zautomatyzować bezkosztowo. Pomogą nam w tym mechanizmy z modułu GitHub Advanced Security (GHAS), takie jak Dependency Review, Secret Scanning czy Code Scanning...
Pierwszym krokiem w klasycznej ścieżce edukacji przyszłych programistów jest stworzenie programu wypisującego – najczęściej w konsoli – tekst „Hello, World!”. Sam program jest z definicji banalny, ale to, co dzieje po jego uruchomieniu – już nie do końca. W tym artykule prześledzimy ścieżkę wykonania mini-programu „Hello World” napisanego w Pythonie, zaczynając od pojedynczego wywołania wysokopoziomowej funkcji print...
O ile zrobienie zdjęcia nie należy do zbyt dużych programistycznych wyzwań, to odzyskanie z takiego zdjęcia numeru tablicy rejestracyjnej w postaci czystego tekstu jest już nietrywialnym zadaniem. Spróbujmy więc się z nim zmierzyć...
Współczesne jądro systemu Linux ma kilka mechanizmów debugowania i profilowania, takich jak DTrace, ftrace, ktap, LTTng, perf, sysdig, SystemTap czy ostatnio popularny eBPF. Większość z nich wykorzystuje m.in. kprobe do wstawiania próbek w jądrze systemu. Jednak żaden z nich nie daje takich możliwości jak kprobe w przypadku, gdy potrzebujemy wpłynąć na przebieg wykonywania kodu...
Czy odkrywanie koła na nowo jest czymś, na co warto poświęcać czas? Prawdopodobnie nie. To samo tyczy się implementacji często używanych struktur danych i algorytmów do obliczeń numerycznych. Na szczęście możemy skorzystać z rozwiązania, które łączy w sobie najlepsze cechy wielu popularnych bibliotek i dodaje do nich szereg optymalizacji. Zapoznajmy się z Armadillo – biblioteką do realizacji obliczeń numerycznych w C++...
Zaczniemy od analizy próbki ransomware z rodziny Mapo. Będzie to idealny start – jej kod nie jest zbyt skomplikowany, ale przeczytanie go wymaga znajomości odpowiednich narzędzi. W artykule przeanalizujemy proces generowania klucza, szyfrowanie, a nawet spróbujemy napisać dekryptor...
W tym artykule przyjrzymy się wybranym pułapkom języka Go, na które można natrafić podczas pisania czy przeglądania kodu. Niektóre z nich mogą prowadzić do poważnych błędów bezpieczeństwa czy też umożliwiać ich eksploitację...
Zaawansowane metody optymalizacji mogą przyczynić się do generowania trudnych do wykrycia błędów, jeśli kod wejściowy nie jest napisany zgodnie ze standardem. Część błędów można wyeliminować, korzystając z rozbudowanej diagnostyki, jaką oferują kompilatory...
Jednoplikowe biblioteki STB stanowią ciekawą alternatywę dla klasycznych (wieloplikowych i prekompilowanych) bibliotek dla języków C i C++. Stosowane tam eleganckie i pragmatyczne rozwiązanie można też łatwo zaadaptować do własnych projektów. Niniejszy artykuł ma na celu zapoznać czytelnika z koncepcją bibliotek jednoplikowych i zachęcić do korzystania z nich...
W tym artykule za pomocą narzędzia Spring Boot oraz języka Kotlin utworzymy prostą usługę REST. Mam nadzieję, że zaprezentowana tu treść będzie przydatna zarówno dla początkujących programistów, jak również i tych pracujących na co dzień z językiem Java czy Groovy...
Prześledzimy, jak program napisany w języku C staje się procesem. Rozpoczniemy od jego kompilacji, następnie przeanalizujemy format, w jakim jest przechowywany na dysku, a zakończymy, przyglądając się jego ładowaniu przez system operacyjny i uruchomieniu...
Komputer jest narzędziem, które – przy zastosowaniu odpowiednich algorytmów – pomaga przy rozwiązywaniu ogromnej liczby różnych problemów. Wśród nich istnieje jednak szczególna grupa takich, których nie da się rozwiązać w bezpośredni sposób w akceptowalnym czasie. W ich przypadku konieczne jest zastosowanie bardziej nieszablonowego podejścia...
Debugowanie kodu operującego na skomplikowanych strukturach danych jest często kłopotliwym zadaniem. Narzędzia obecne w środowiskach programistycznych pozwalają wprawdzie podglądać zawartość klas, z których są one zbudowane, ale zazwyczaj jest to zbyt mało, by móc wyrobić sobie pełne wyobrażenie o panujących wewnątrz nich zależnościach. Wystarczy jednak skorzystać z pewnego prostego narzędzia, by szybko uzyskać pełen obraz tego, co ukryte jest w pamięci naszej aplikacji...
Lektura tego artykułu pozwoli czytelnikowi ugruntować wiedzę z zakresu tworzenia interfejsów w języku C++, a także zrozumieć, dlaczego biblioteka standardowa oraz boost w tak dużym stopniu korzystają z szablonów i tzw. metaprogramowania...
Zastanawialiście się kiedyś, czy nowy projekt zaimplementować w języku C++, Java, C#, Python, Swift, JavaScript czy C? A gdyby tak zaimplementować go we wszystkich wymienionych językach jednocześnie? Brzmi jak dużo pracy? Poznajcie język programowania Ć...
Niejeden z nas grał, a na pewno zna łamigłówki Sudoku czy Polyomino. To drugie od czasu wprowadzenia przez Solomona Golomba wzbudziło zainteresowanie matematyków zajmujących się nauką i rekreacją. Liczne gry – jak np. Tetris czy Ubongo – łamigłówki i nierozwiązane problemy oparte są na tych zachwycających elementach, które powstają przez połączenie wzdłuż krawędzi wielu nie nachodzących na siebie kwadratów jednostkowych...
Biblioteka Dear ImGui to rewelacyjne i sprawdzone w boju narzędzie, bardzo wysoko oceniane przez twórców, obok którego nie da się przejść obojętnie, gdy ktoś ma do czynienia z programowaniem graficznych interfejsów użytkownika...
BPF to technologia, która pozwala na uruchamianie niewielkich programów w odpowiedzi na zdarzenia, na przykład szeroko pojęte operacje wejścia/wyjścia (I/O), nieustannie zachodzące podczas pracy systemu operacyjnego. To coś przypominającego JavaScript, znany osobom zajmującym się programowaniem aplikacji webowych, aczkolwiek to daleko idące uproszczenie...
Sztuczna inteligencja jest obszerną dziedziną, w której sieci neuronowe odgrywają niezwykle istotną rolę. Poznanie podstaw sieci neuronowych pozwoli na inne spojrzenie na rozwiązanie dotychczas nierozwiązywalnych problemów. W tym artykule przedstawione zostaną również wybrane struktury głębokiego uczenia, które zrewolucjonizowało obszar sieci neuronowych...
Celem tego artykułu jest zaprezentowanie na przykładzie projektu LLVM [5] i kompilatora Clang dodatkowych optymalizacji, które pozwolą wygenerować wydajniejszy kod bez potrzeby modyfikacji źródeł...
Prawie wszystkie platformy oferujące możliwość projektowania aplikacji z graficznym interfejsem użytkownika rozpieściły nas, programistów, do granic możliwości. Niezależnie od tego, czy piszemy aplikację desktopową, webową czy mobilną, możemy przebierać w różnych frameworkach, które dostarczają bogate zestawy gotowych kontrolek i w wielu przypadkach dają nam prawie nieograniczone możliwości w zakresie ich stylowania. Istnieją jednak środowiska, w których sytuacja nie wygląda wcale tak różowo...
Skoro tak często używamy gestów, to dlaczego by nie wykorzystać ich do komunikacji z maszyną, jak zostało to zrobione z mową? Spróbujmy więc w domowym zaciszu nauczyć maszynę lepiej komunikować się z człowiekiem za pomocą ruchów dłoni...
W tym artykule przedstawiony jest krok po kroku proces nawiązania szyfrowanego połączenia, który posłuży do wymiany szyfrowanych danych w HTTPS...
Czy nie chcielibyśmy łatwo przenosić naszych aplikacji mikroserwisowych między środowiskiem lokalnym a różnymi chmurami? Czy nie chcielibyśmy pisać mniej kodu, skupiając się jedynie na funkcjonalnościach biznesowych zamiast na różnych elementach infrastruktury, jak np. Kafka czy Redis? Czy nie życzylibyśmy sobie automatycznego tworzenia definicji obrazów Dockera i manifestów Kubernetes, ich wdrażania oraz prostego konfigurowania różnych narzędzi, jak np. Zipkin? Część z tych problemów rozwiązuje otwarta i niezależna od języka platforma DAPR. Tye to z kolei będące w fazie rozwoju narzędzie dla samego .NET. Zobaczmy, co może nam dać połączenie Tye z DAPR...
Pulpit Windows – jeżeli się chwilę nad tym zastanowić – jest chyba najmniej użytecznym miejscem w całym systemie. Możemy tu ustawić tło, przechować skróty i pliki w postaci ikon i w zasadzie to wszystko. Odkryjmy w sobie wewnętrznego geeka i zobaczmy, jak możemy ten stan rzeczy zmienić, wykorzystując nasze umiejętności programistyczne...
W artykule tym przyglądamy się podejściu do projektowania oprogramowania, które pomaga eliminować całe klasy błędów, bez potrzeby zatrudniania setek inżynierów bezpieczeństwa, którzy będą zajmować się stałym audytem kodu...
Na łamach tego artykułu projektujemy i tworzymy własny graficzny menedżer aplikacji, który będzie wykorzystywał narzędzie Winget, a także przyjrzymy się bliżej sposobom na asynchroniczne wywoływanie zadań i funkcji w PowerShellu...
Artykuł jest hołdem dla zmarłego matematyka i zaprasza Was w podróż po meandrach implementacji „Gry w Życie" – tam gdzie matematyka, filozofia i informatyka łączą się w intrygujący sposób...
Sieć Ethernet stanowi obecnie jeden z najbardziej popularnych sposobów przesyłania danych. W tym artykule przyjrzymy się połączeniu pomiędzy warstwą fizyczną a warstwą łącza danych, wykorzystując do eksperymentów układ FPGA...
Ostatnio zainteresowałem sięmkolejnym algorytmem, który dziś weźmiemy na warsztat, a jest nim poszukiwanie najdłuższego wspólnego podciągu albo, mówiąc prościej, wyznaczaniem różnic edycyjnych pomiędzy dwoma ciągami...
Testy binarne są istotnym obszarem analizy danych. Istnieje wiele sposobów opisu jakości takich testów. Celem tego artykułu jest przedstawienie najważniejszych z nich...
W artykule przybliżymy algorytm stojący za formatem archiwów GZIP. Zaprezentujemy również sposób dekompresji fragmentów archiwów bez przetwarzania ich w całości. Dodatkowo przedstawimy przykład wykorzystania zdobytej wiedzy w praktycznym rozwiązaniu oszczędzającym czas procesora i przestrzeń dyskową...
Microsoft stał się wieloplatformowy, a świat programowania rozszerzył się o wiele urządzeń, na które możemy tworzyć oprogramowanie. Wymagało to radykalnych zmian, czego efektem jest nowy .NET Core 3 i powolne wygaszanie .NET Frameworka...
Artykuł przybliży świat systemów budowania, utrzymywania własnych zmian w zależnościach w systemach z rodziny BSD/Linux z perspektywy osób, które na różne sposoby zmagają się z problemami zarządzania budowaniem, modyfikacją i instalacją zależności...
Nawet czytając same nagłówki sekcji tego artykułu, można zauważyć, że C++20 będzie wszystkim tym, czym miał być C++17 – i więcej! W opinii autora nadchodząca iteracja standardu wprowadza większą rewolucję niż osławiony C++11. Nie obejdzie się jednak bez łyżki dziegciu...
RSA. Bodaj najpopularniejszy algorytm szyfrowania. Obecny w popkulturze, łamany w wielu filmach i serialach przez genialnych hakerów w mgnieniu oka, a jednak w rzeczywistości wciąż z powodzeniem użytkowany. Rozpracujmy tajemnicę kryjącą się pod tymi trzema magicznymi literami...
W artykule przyglądamy się, jak obecnie można wykorzystać Rust w systemach wbudowanych. Nie jest intencją tego artykułu wprowadzenie w sam język, ale też do jego zrozumienia nie będzie konieczna znajomość Rust. Przykłady omawiamy tak, żeby były jasne dla każdego programisty z doświadczeniem w pracy bliżej sprzętu...
Windows Presentation Foundation (WPF) jest jednym z dwóch .NETowych frameworków ułatwiających budowanie interfejsu użytkownika aplikacji desktopowych – swój monopol WPF dzieli tylko z Windows Forms, będącymi w zasadzie opakowaniem niskopoziomowych mechanizmów WinAPI. Przyszedł czas na to, by sięgnąć głębiej i bardziej wnikliwie przyjrzeć się mechanizmom, które rządzą WPFem...
Jak sprawić, aby twój skrypt Pythona potrafił rozpoznawać różne obiekty w obrazach? Skorzystaj z uczenia maszynowego! W tym artykule pokażę, jak to zrobić przy użyciu biblioteki TensorFlow, wytrenujemy także model, który rozpoznaje ręcznie napisane cyfry...
W tym artykule nie chcę omawiać tego, jak zbudowany jest blockchain i jak samemu zaimplementować uproszczone wersje jego mechanizmów w 300 liniach kodu. Nie będzie też prostej instrukcji odpowiadającej na pytanie z tytułu, bo taka nie istnieje. Zamiast tego opowiem o tym, jak zbudować w pełni działające rozwiązanie. Tak jak się to robi na poważnie...
Odkrycie dokonane przez dociekliwych inżynierów po 2010 roku, że komputerowy odbiornik telewizji naziemnej DVB-T świetnie nadaje się jako tani stopień wejściowy (ang. front-end, odpowiedzialny za konwersję fal radiowych na zera i jedynki, które rozumie komputer) dla SDR, umożliwiło, że dziś w domowym zaciszu można rozpocząć przygodę z tą jakże ciekawą technologią...
Przedmiotem tego artykułu jest wykorzystanie Qt w taki „nietypowy” sposób i implementacja prostego bota sieci IRC (Internet Relay Chat) egzemplifikującego dostępne w Qt ciekawe funkcjonalności. Bot ten będzie miał dwie funkcjonalności: podawanie obecnej godziny oraz witanie nowych użytkowników...
Apache Kafka jest wieloserwerową platformą do propagacji zdarzeń w rozproszonych systemach informatycznym. Projekt powstał w firmie LinkedIn, a w 2011 roku upubliczniono go jako rozwiązanie o otwartym kodzie źródłowym (głównie Scala i Java). Dziś Kafka jest zarządzana przez fundację Apache i jest wspierana między innymi przez firmę Confluent. Platforma ta znana jest ze swojej znakomitej skalowalności horyzontalnej, pozwalającej na budowę klastrów będących w stanie rozpropagować tryliardy zdarzeń dziennie...
Pojęcie „Persistent Memory” opisuje technologię, która pozwala programom na bezpośredni dostęp do danych (ang. byte-addressable) oraz których treść pozostaje zapisana nawet w przypadku odłączenia zasilania. Ma ona zatem pewne cechy pamięci i dysku, lecz zazwyczaj nie zastępuje całkowicie żadnego z nich. Zamiast tego powinna być traktowana jako osobny, trzeci rodzaj pamięci...
Dobre narzędzie pozwala szybko zweryfikować nawet najbardziej zagmatwaną teorię! Postaram się zaprezentować podstawowe wykorzystanie jednego z takich, moim zdaniem, "dobrych narzędzi" - aplikacji Mininet. Wspomnę również o linuksowych przestrzeniach nazw. "Motywem przewodnim" będzie natomiast poszukiwanie wyjaśnienia pewnej anomalii w protokole ARP...
Gdy zaczynamy programować, swoje pierwsze kroki stawiamy, pisząc aplikację w stylu hello world, a idąc dalej, przez ify, pętle, klasy, dochodzimy w końcu do pytania, jak to jest zrobione, że można napisać jakiś tekst, w ustalonej składni i jednym poleceniem sprawić, iż on faktycznie działa. Takie rozważania prowadzą wielu do pomysłu: "fajnie by było stworzyć własny język programowania!". I to wcale nie jest tak trudne, jak mogłoby się wydawać...
W artykule przedstawiono kroki potrzebne do zbudowania modelu prognostycznego dla zmiennej meteorologicznej nazywanej Land Surface Temperature (temperatura powierzchni obiektów na Ziemi) przy użyciu Pythona i jego bibliotek. Wiedza zawarta w tekście pozwoli na wyprowadzenie własnych modeli dla serii czasowych charakteryzujących się sezonowością...
Ci bardziej dociekliwi niejednokrotnie zastanawiali się, jak działają wykorzystywane przez nich zabezpieczenia oraz czy mechanizmy, z których korzystają, faktycznie podnoszą ich bezpieczeństwo. Czy ktokolwiek jednak zastanawiał się nad stworzeniem własnego modułu uwierzytelniającego?
Obecnie każdy nowoczesny język programowania cieszący się faktyczną popularnością wspiera, w jakiejś formie, koncepcję modułów. Wielkimi nieobecnymi w tym gronie były do tej pory języki C oraz C++. W najbliższym czasie zmieni się to jednak dla tego drugiego wraz z nadejściem standardu, który jest obecnie przedmiotem prac Komitetu...
Najszybszym i najprostszym sposobem rozpoczęcia przygody z Raspberry Pi jest uruchomienie gotowego obrazu karty SD, który można pobrać ze strony producenta. Jednak nie dla wszystkich komputerów wbudowanych jest dostępna taka opcja. Dlatego warto zobaczyć, w jaki sposób można utworzyć swoją dystrybucję...
Każdy język programowania ma określony, rekomendowany sposób na obsługę błędów. W Javie są to wyjątki, w języku Rust pomocnicze typy np. Error czy Option. W C najpopularniejszym sposobem obsługi błędów jest tzw. „kod błędu". A co z językiem C++? Na to pytanie odpowiemy sobie właśnie w tym artykule...
Podejrzewam, że niewiele osób czytających ten artykuł ma możliwość uczestniczyć w tak dużych projektach jak Mars Climate Orbiter, ale i w bardziej prozaicznych z nich zdarza się czasem potrzeba operowania kilkoma różnymi rodzajami jednostek i warto wówczas zadbać o prawidłowość ich stosowania, bo powstałe błędy są trudne do wyłowienia i mogą powodować poważne konsekwencje (np. zafałszowywać wyniki obliczeń)...
W artykule postaram się udowodnić na podstawie przykładowego kodu, że PowerShell to bardzo praktyczne i potężne narzędzie. Napiszemy nowocześnie wyglądającą aplikację graficzną, której zadaniem będzie połączenie się z bazą danych Oracle. Dodatkowo zaimplementujemy możliwość odblokowania lub zmiany hasła dla użytkownika tej bazy...
Programowanie reaktywne w ostatnich latach staje się coraz bardziej popularne. Czym jest? Jakie problemy rozwiązuje, a jakie tworzy? Czy to koniec programowania w oparciu o wzorzec MVC? Odpowiedzi znajdziecie w artykule...
Powtarzalne budowanie (ang. reproducible builds) jest własnością oprogramowania, które polega na tym, aby każdorazowo z danego kodu źródłowego utworzyć ten sam artefakt. Wynik budowania powinien być bit do bita taki sam. Powtarzalne budowanie jest wykorzystywane przy weryfikacji poprawności systemów dystrybucji oprogramowania...
W artykule skupimy się wokół systemów operacyjnych Linux i FreeBSD i spojrzymy na debugger z ich perspektywy. Ponadto sporo czasu poświęcimy na przyjrzenie się sprzętowi. W końcu wsparcie od sprzętu wydaje się niezbędne do debugowania bardziej zawiłych problemów...
W artykule przedstawiono wybrane aspekty niskopoziomowej implementacji bootloadera NFC oraz aplikacji na Androida działającej jako programator...
Celem artykułu nie jest dogłębne przedstawienie koncepcji blockchain. Chciałbym raczej przybliżyć szczegóły pracy w tej technologii, zachęcić i dać czytelnikowi niezbędną na start wiedzę do zgłębiania tematu we własnym zakresie...
„Nie można załadować modułu XYZ.DLL lub jego zależności” – to błąd, który może doprowadzić człowieka do szału. Wszystko wydaje się być na swoim miejscu, nieszczęsny XYZ.DLL ewidentnie znajduje się w katalogu aplikacji, a jednak system protestuje. Za chwilę dowiemy się, z czego wynika ten błąd, w jakich sytuacjach może się pojawić, jak diagnozować jego przyczyny i jak projektować kod, aby go uniknąć...
Pamięć typu NAND flash jest szeroko stosowana w sprzęcie elektronicznym. Można ją znaleźć w przenośnych kartach pamięci MMC, pamięci USB, dyskach SSD, w telefonach komórkowych, laptopach i komputerach PC. Jak jest zbudowana i jakie mechanizmy są stosowane, aby zapewnić jej efektywne i niezawodne działanie? Odpowiedź na to pytanie można znaleźć w tym artykule...
Do robiącej już wrażenie listy nowości takich jak koncepty, kontrakty czy zakresy dodano kolejne: od dawna wyczekiwane moduły oraz korutyny. Już samo to wystarczy, aby uznać C++20 za rewolucję na miarę C++11, a to tylko niektóre ze zmian, które wprowadza...
Kwestie związane z wyrównaniem pamięci (ang. memory alignment) potrafią mieć niebagatelny wpływ na wydajność kodu, a czasami także na jego stabilność. Jeszcze do niedawna standard języka C++ dość wstrzemięźliwie określał narzędzia, za pomocą których programista mógł specyfikować wyrównanie struktur danych...
BTree jest uporządkowaną strukturą danych podobną do zrównoważonego binarnego drzewa przeszukiwań. Podstawowa różnica polega na tym, że węzły w BTree mogą posiadać więcej niż dwoje dzieci. Drzewiasta forma sprawia, że podstawowe operacje, takie jak wstawianie, usuwanie i wyszukiwanie elementu, zajmują czas proporcjonalny do wysokości drzewa, czyli O(log(liczba elementów w strukturze))...
Event Storming jest metodą odkrywania i konkretyzowania informacji o domenie biznesowej, w ramach której wytwarzane jest oprogramowanie. Handel, Telekomunikacja, Finanse, Edukacja, Prawo, Medycyna – domen biznesowych, z którymi w codziennej pracy spotykają się programiści i eksperci techniczni, można wymieniać jeszcze wiele...
Czym jest taki pakiet? Jest to odpowiednio sformatowana jednostka informacji. Co to znaczy? Otóż musi mieć w ściśle określony sposób wyszczególniony adres, dokąd ma trafić, a także mieć w odpowiednim miejscu zapisaną zawartość wiadomości. Aby został zrozumiany przez maszynę, musimy go przetłumaczyć z języka ludzkiego na liczby, a z kolei liczby te na ciągi bitów. To jednak nie wszystko: teraz należy pakiet wysłać, a z drugiej strony go odebrać. Za to odpowiada karta sieciowa, działająca pomiędzy procesorem a fizycznym medium transferującym informacje ‒ to oczywistość, jednak jak to się programuje? Gdzie i jaki software pomoże nam odebrać, odczytać lub wysłać takie pakiety? Odpowiedź brzmi: sterownik sieciowy...
Czy Twoje oprogramowanie jest bezpieczne? Być może. A czy Twój procesor również jest bezpieczny? Tak? Na pewno?
Jako programista i inżynier bezpieczeństwa koncentrujący się raczej na praktycznej stronie ataków i obrony przed nimi, model ataku kojarzy mi się często z różnymi abstrakcyjnymi prezentacjami w PowerPoincie, które – zamiast informować – głównie ładnie wyglądają albo próbują sprzedać jakiś produkt...
EtherCAT jest sprytną modyfikacją protokołu Ethernet, dostosowującą go do potrzeb sieci przemysłowych. Chciałbym przedstawić kilka eksperymentów, które pozwolą czytelnikom zapoznać się z podstawowymi zasadami jego działania...
Asynchroniczne programowanie w ostatnich latach jest coraz bardziej popularne. Zmiany w języku, które były sukcesywnie wprowadzane, spowodowały, że pisanie kodu asynchronicznego jest teraz prostsze niż kiedykolwiek wcześniej. W tym artykule postaram się wyjaśnić, czym jest asynchroniczność, kiedy warto z niej korzystać oraz jak jej użyć w języku Python...
10 listopada 2018 roku w San Diego zakończyło się największe posiedzenie komisji standaryzacyjnej C++ w jej 29-letniej historii. Uczestniczyło w nim 180 osób z 12 krajów. Poza rekordową frekwencją, znaczącym osiągnięciem było zakończone sukcesem głosowanie w sprawie dodania do standardu biblioteki zakresów – ranges (a konkretniej: Ranges TS [0])...
Tym razem temat zostanie rozwinięty o zagadnienia, z którymi zawsze mamy do czynienia przy przetwarzaniu danych satelitarnych: problem techniczny: przestrzenny układ odniesienia i jego przekształcenia, oraz problem natury danych: chmury, które przysłaniają większą część zdjęcia...
Tworząc aplikacje pracujące w systemach współbieżnych, jak i rozproszonych, każdy programista wcześniej czy później stanie przed problemem synchronizacji dostępu wątków/procesów do obszaru zasobów współdzielonych, zwłaszcza pamięci, czy to w celu komunikacji między procesami, czy w celu odczytu/modyfikacji współdzielonych danych...
W tym artykule przyglądamy się zaawansowanej analizie złożoności obliczeniowej bardzo popularnego algorytmu sortującego o nazwie QuickSort. Zbadamy nie tylko złożoność pesymistyczną, ale również złożoność optymistyczną i oczekiwaną...
Sensory czynników środowiskowych, kiedyś drogie i używane tylko w urządzeniach dedykowanych do specjalistycznych zastosowań, obecnie stają się integralną częścią elektronicznych urządzeń konsumenckich...
W artykule jest o tym w jaki sposób zaimplementować śledzenie obiektów z wykorzystaniem dopasowywania szablonów w celu śledzenia wybranego fragmentu obrazu w sekwencji wideo z kamery internetowej. Wykorzystamy przy tym bibliotekę OpenCV oraz język Python...
W artykule wrócimy trochę do korzeni i przypomnimy czytelnikom wady i zalety stosowania różnych struktur danych oraz ogólnie znane, operujące na nich algorytmy...
W artykule skoncentrujemy się na tym, jak indeksy pomagają efektywnie szukać informacji w dużych zbiorach danych. Zademonstrujemy, dlaczego w ogóle są potrzebne, oraz pokażemy coraz bardziej skomplikowane konstrukcje, które dają coraz lepsze efekty...
Kiedy przeglądałem ostatnio Internet, natknąłem się na postawione przez kogoś pytanie: czy algorytmika jest częścią matematyki? Odpowiedzi były bardzo skrajne – od twierdzących do kategorycznie zaprzeczających. Tymczasem przecież cała informatyka jest jedną z dziedzin matematyki; trudno więc, by algorytmika – będąc jednym z najbardziej kluczowych działów informatyki – nie wzbudziła również zainteresowania matematyków...
Tym razem chciałbym wraz z czytelnikami zabawić się w „full-stack developera”. Zaczniemy od znalezienia odpowiednich części, a następnie zaprojektujemy i wykonamy własne urządzenie podłączane do portu USB...
W artykule podjęto próbę użycia języka Rust przez kompletnego nowicjusza, którego jedynym – w tym momencie – atutem jest całkiem niezła znajomość języka C++...
Prawdopodobnie najważniejszym rozwiązaniem w Javie, ułatwiającym rozwój oprogramowania jest zwolnienie developerów z konieczności ręcznego zarządzania pamięcią dzięki zastosowaniu automatycznego odśmiecania pamięci...
Narzędzia takie jak Unity mogą pochwalić się przenośnością na praktycznie wszystkie platformy, a poradników i videotutoriali jest w sieci tyle, że życia by nie starczyło na zapoznanie się z każdym. Ale… Jak zrobić grę na Nintendo DS?
Powinniśmy wziąć pod uwagę fakt, iż od dłuższego czasu rozwijają się nowe podejścia do obliczeń, a takim nowym modelem obliczeniowym, jaki warto wymienić, są obliczenia kwantowe...
Czy zastanawialiście się kiedyś, w jaki sposób wysokopoziomowy kod jest wykonywany później przez procesor?
D to mało popularny i – w opinii autora – niedoceniany język programowania. Celem artykułu jest przedstawienie wybranych funkcjonalności oferowanych przez ten język...
O modułach w C++ – jako o rozwiązaniu problemu braku kompartmentalizacji w plikach nagłówkowych – mówi się równie długo, co o konceptach w kontekście nieczytelnych błędów kompilacji w przypadku podania niepoprawnych argumentów do szablonów...
W artykule staram się przedstawić sposób uruchomienia demonstracyjnej aplikacji test-pmd i generatora pakietów pktgen-dpdk oraz tworzenie własnego programu realizującego dekapsulację tunelu IP...
W artykule tym zapoznamy się z kolejnym pojęciem, a mianowicie time travel debugging...
Autor artykułu zwraca uwagę na to, jak łatwo ukryć dane w trudny do wykrycia i usunięcia sposób. Może się to przydać zarówno osobom, które próbują zabezpieczyć swoje informacje, jak i tym, którzy mają dobry powód, żeby je nagłaśniać...
Gdy ostatnio prowadziłem warsztat z podstaw programowania gier w Unity i wspomniałem, że w tym procesie praktycznie nie da się obejść bez pewnej podstawowej wiedzy z zakresu arytmetyki wektorów, usłyszałem od części uczestników jęk zawodu. Zdecydowałem się, więc napisać artykuł poświęcony pewnym aspektom geometrii dwu- i trójwymiarowej, swoiste kompendium, do którego będzie można zajrzeć w przypadku matematycznych problemów...
Od momentu pierwszego publicznego wydania w lutym 2014 roku popularność Vue.js stale rośnie. Do jego najważniejszych zalet można zaliczyć dobrą dokumentację, szybkość działania, wysoką elastyczność i niski próg wejścia...
Wśród zbiorów dostępnych dla początkujących analityków danych, wyróżniają się dane z sieci społecznościowych, z akcji użytkowników na stronach internetowych albo z systemów Internetu rzeczy, czyli sieci sensorów. Istnieją jednak jeszcze inne źródła informacji, które są godne uwagi. Są ogólnodostępne, darmowe, mają wysoką jakość i na ich podstawie startupy rosną jak grzyby po deszczu. Mowa tutaj o danych z satelitów obserwacji Ziemi...
W tym artykule czytelnik przeczyta o tym jakie problemy stały przed systemem JPMS i jak je rozwiązano, oddając w nasze ręce kompletny system modularnego środowiska Javy...
Tak naprawdę co to znaczy przeprowadzić testy bezpieczeństwa? Czy jest to tym samym co testy oprogramowania albo testy penetracyjne? Jeśli nie, czym zatem się te czynności różnią? W końcu kto powinien takie testy przeprowadzać?
Artykuł z wiedzą na temat plików wykonywalnych, która jest niezbędna do zrozumienia, jak działają techniki używane przez twórców malware, i autorów oprogramowania, którzy chcą ukryć swój kod przed inżynierią wsteczną...
Większa część kodu naszych aplikacji składać się będzie z zależności i obcych bibliotek dołączanych do aplikacji. Jak bardzo ufamy tym bibliotekom? Czy rzeczywiście chcemy im oddać do dyspozycji wszystkie zasoby naszych komputerów i serwerów?
Boost to zestaw luźno powiązanych ze sobą bibliotek dla języka C++, zapewniających całe spektrum funkcjonalności – od obsługi dat zaczynając, kontynuując przez nowoczesne metaprogramowanie, a kończąc na implementacji obliczeń na kwaternionach...
Artykuł udowadnia, że budowa systemu Android nie jest rzeczą trudną i tak naprawdę każdy może się tego podjąć w celach edukacyjnych i biznesowych...
C18 – tak najprawdopodobniej będzie brzmiała nazwa nowego standardu języka C. Aby tak się stało, komisja standaryzacyjna musi zakończyć nad nim prace na tyle prędko, aby organizacja ISO mogła go przyjąć jeszcze w tym roku...
Coraz więcej organizacji, czy to bankowych czy przemysłowych, zaczyna rozumieć i doceniać korzyści, jakie niesie ze sobą wykorzystanie Spring Boot w procesie wytwarzania oprogramowania. Jednocześnie chcąc iść z duchem czasu, nie mogą sobie pozwolić na utratę tak ważnych funkcjonalności, jakie do tej pory oferowały serwery aplikacyjne...
W artykule omawiamy najpopularniejsze oraz najnowsze mechanizmy służące do ukrywania kodu pośród nieszkodliwych procesów wraz z przykładowymi implementacjami...
Aby programiści, którzy chcą pozostać przy Javie, nie czuli się zostawieni samym sobie, wprowadzono również częściowe wsparcie dla mechanizmów językowych obecnych w Javie 8...
W artykule przybliżamy zarówno mechanizmy generyczne, jak i zależne od architektury – skupiamy się głównie na SoCach ARM/ARM64 oraz kontrolerach przerwań typu GIC...
Trochę ponad rok temu, w nr 10/2016 magazynu, zapowiedziany został nadchodzący standard języka. Od tego czasu komitet standaryzacyjny zdążył się jeszcze spotkać i dokonać pewnych zmian...
W czasach kiedy jednym z wąskich gardeł oprogramowania jest dostęp procesora do RAM, prawdopodobnie nikt nie wątpi w przydatność pamięci podręcznej (cache). Wielokrotnie szybszy dostęp do pamięci niesie jednak ze sobą konsekwencje, z którymi nie zawsze jest się łatwo uporać. Artykuł pozwala „rzucić okiem” w ciemniejsze strony połączenia procesorów i pamięci operacyjnej oraz opisuje wynikające z tego problemy...
Prędkość zmian, którą można zaobserwować w świecie IT jest fascynująca i niepokojąca zarazem. Niemal każdy aspekt ulega ciągłym zmianom. Testowanie oraz rodzaje środowisk, w których uruchamiane są aplikacje również. Tematy testowania i aplikacji rozproszonych z osobna są ostatnio popularne, jednak w połączeniu tworzą swoistą niszę...
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ń zapraszamy do lektury artykułu...
Fuzzing jest obecnie jednym z najskuteczniejszych sposobów na detekcję błędów bezpieczeństwa w oprogramowaniu. W artykule staramy się omówić bibliotekę pozwalającą na integrację fuzzera z własnym projektem oraz techniki pozwalające zmaksymalizować efektywność wyszukiwania błędów...
Pokażemy, jak ten sam algorytm przetestować na prawdziwych próbkach audio przy użyciu Web Audio API. Przeanalizujemy metody modulacji cyfrowej i 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...
Czy zastanawialiście się kiedyś, jak bardzo kruche są podstawy, na których budujemy oprogramowanie, i jak niewiele trzeba, aby zachęcić system operacyjny do nieplanowanego zamknięcia procesu? W tym artykule przedstawione są okrągłe 64 wybrane metody na uzyskanie takiego rezultatu...
Napisaliśmy kod. Dobrze, gdyby pod ręką znajdował się automat pozwalający na przekrojowe analizy, również w dziedzinie czasu. To nasz nowy kolega – SonarQube. Robi te i kilka innych czynności, a jak się postaramy to dla każdego pull-request'u. Artykuł pozwala nam go poznać, a zwłaszcza jak pracuje nad kodem .NET samego Jon'a Skeet'a...
Jednym z przypadków, kiedy warto spróbować napisać własny silnik gry, może być gra opierająca się na wokselach. A na pewno będzie to świetny pretekst, by spróbować napisać własny silnik dla celów edukacyjnych...
Staramy się przekonać czytelników, że nawet korzystając z silnych, nowoczesnych algorytmów można popełnić błąd, który kompletnie rujnuje bezpieczeństwo całej aplikacji...
Kompilator Clang udostępnia swój front-end w formie bibliotek. Możemy tworzyć własne narzędzia do refaktoryzacji. Wymagany nakład pracy wcale nie jest duży, zwłaszcza jeśli może nas uchronić przed ręcznym poprawianiem ogromnej ilości kodu. Przyjrzymy się też pułapkom, jakie na nas czekają i problemom przy współpracy z GCC...
Firma ARM ze swoją technologią TrustZone, daje stosunkowo dużą swobodę projektantom chipów oraz inżynierom bezpiecznego oprogramowania. Przyjrzyjmy się bliżej koncepcji dwóch światów i temu co o sprzęcie musi wiedzieć programista aby w pełni wykorzystać jego możliwości chronienia wrażliwych zasobów. Za architekturę referencyjną posłuży nam ARMv8...
W tym artykule przedstawione zostaną najpopularniejsze i najciekawsze serwisy przeglądarkowe, których celem jest ułatwianie życia programistom. Istotne będzie przede wszystkim ułatwianie dzielenia się wiedzą, jak i dostęp do łatwej w użyciu i bezpiecznej piaskownicy dla danej technologii...
Artykuł o tym, jak podłączyć do Arduino czujniki oraz jak nawiązać z nimi komunikację, by móc odczytywać z nich wyniki pomiarów...
Do tej pory XSS-y były utożsamiane ze światem przeglądarek, jednak ze względu na fakt, że HTML i JavaScript ostatnio coraz mocniej przenikają do świata aplikacji desktopowych i mobilnych, skutki XSS-ów mogą być poważniejsze niż kiedykolwiek wcześniej. W tym artykule zobaczymy na przykładzie aplikacji na systemy macOS - BetterZip – jak XSS może posłużyć do wykonania dowolnego kodu na komputerze...
Artykuł o przetwarzaniu obrazów cyfrowych za pomocą matematycznego frameworku do implementacji efektów 2D ze znanych z programów graficznych...
Celem tego artykułu jest zaprezentowanie nowej generacji bezpiecznych "ciasteczek" (i nie tylko) w przeglądarce z wykorzystaniem kryptografii asymetrycznej. Omówienie co w tym zakresie wnosi Web Crypto API do klienckiego JavaScriptu...
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!
W ramach tego artykułu postaram się znaleźć odpowiedź na pytanie, co kryje się za fenomenem PICO-8, licząc jednocześnie, że uda mi się zarazić Cię, drogi Czytelniku, fascynacją tym ciekawym narzędziem...
Dzisiaj przyjrzymy się temu, jak Python skaluje się i co ma do zaoferowania w przetwarzaniu dużej ilości danych. Korzystając z darmowych instancji Amazon EC2 i biblioteki dask.distributed, stworzymy chmurę obliczeniową składającą się z dziewięciu węzłów. Przeanalizujemy wszystkie zdarzenia, jakie miały miejsce na GitHubie w ciągu jednego tygodnia...
Rule of Zero jest stosunkowo młodą regułą w C++ i chociaż jej powstanie to częściowo skutek zmian w języku wraz z wprowadzeniem C++11, to można ją stosować także w starszych wersjach języka. Pozwala ona na tworzenie czytelnego i zwięzłego kodu, w niektórych przypadkach wręcz deklaratywnego...
W artykule staramy się przedstawić dobre praktyki tworzenia makr, a także pokazujemy nietypowe i czasem zaskakujące ich zastosowanie...
Wprowadzenie do uczenia maszynowego. W artykule zapoznamy się z podstawowymi pojęciami i „odczarujemy” Machine Learning. Przekonamy się, że chociaż ML to sztuczna inteligencja, to zrozumienie go nie wymaga doktoratu z matematyki...
W artykule przedstawiamy na jakich podstawowych zasadach opiera się blockchain jako struktura danych oraz jak utworzyć własny prywatny łańcuch korzystając z projektu Ethereum...
Czytelność kodu jest jedną z jego najważniejszych charakterystyk, obok wydajności i poprawności. Kod napisany z naciskiem na zrozumienie przez czytelnika, np. podczas przeglądu kodu (ang. code review), pozwala znacznie uprościć wnioskowanie na temat pozostałych dwóch...
O mało znanych zachowaniach procesora i ich wpływie na poprawność i wydajność kodu...
Skandal! To jest nie do pomyślenia, by inżynier stał z łychą i ręcznie mieszał zawartość garnka, jednocześnie pilnując temperatury. Logicznym jest, że lepiej spędzić zimowe miesiące, dłubiąc w garażu, by potem wszystko się działo SAMO i pozwoliło zaoszczędzić kilka cennych minut. A jak to zrobić najprościej? Wykorzystać gotowe rozwiązania Open Source! I piwo robi się samo...
Transmisja danych dźwiękiem w JavaScript od podstaw: Web Audio API | Microsoft Bot Framework. Tworzenie inteligentnych kanałów komunikacyjnych | CMS as a Service, czyli Umbraco w chmurze! | Jak rozproszyć swoją web aplikację?
Celem tego artykułu jest pokazanie, jak w prosty sposób zaimplementować skuteczne mechanizmy sztucznej inteligencji...
Znajdowanie problemów z wydajnością programów wydaje się bardziej sztuką, niż nauką, ale to nie jest prawda. W tym artykule postaram się przybliżyć ilościowe, empiryczne podejście do tego skomplikowanego zagadnienia...
Tworzenie gier na platformy mobilne często wiąże się z trudnymi decyzjami. Jedną z nich jest wybór technologii. Skorzystanie z C++ na systemie tak mocno kojarzącym się z technologami zarządzanymi może wydać się bolesną decyzją. Zyski, jakie można jednak osiągnąć z tego tytułu, mogą przesłonić kilka niedogodności...
W artykule staram się przybliżyć możliwości, jakie daje jeden z najbardziej popularnych serwerów, który jako pierwszy przekroczył barierę 10 tysięcy zapytań na sekundę...
Szablony umożliwiają szybkie generowanie zamkniętych kawałków projektu – oszczędzając w ten sposób trochę czasu programisty. Spróbujmy napisać taki szablon samodzielnie...
Jeśli ciekawią Was trochę wnętrza CLR (ang. Common Language Runtime), zapraszamy do lektury. Uchylimy rąbka tajemnicy, jak .NET zarządza pamięcią.
Często staramy się używać już istniejących rozwiązań. Programowanie obiektowe wspiera to podejście w naturalny sposób przez dziedziczenie implementacji, co jednak nie zawsze jest nam na rękę, gdyż czasami chcielibyśmy tylko wykorzystać istniejące metody, bez całego balastu dziedziczenia...
W 2017 roku spodziewane jest uchwalenie kolejnej iteracji języka (C++17) zawierającej jeszcze więcej małych, acz przydatnych zmian...
Czy trend wzrostu ilości rdzeni w procesorach jest odpowiednio wykorzystany przez programistów? Czy zastosowany algorytm współdzielenia danych może w znaczący sposób ograniczać skalowalność?
Prawdopodobnie to dopuszczenie do głosu społeczności programistów zaowocowało wprowadzeniem niezliczonej liczby zmian w języku – jego modernizacją, usunięciem pewnych naleciałości z C czy Objective-C, a także ustandaryzowaniem składni i wytycznych projektowych...
Po roku od wydania pierwszej wersji systemu Windows 10 Microsoft udostępnił zaktualizowaną wersję tego systemu określaną mianem Anniversary Edition lub Anniversary Update. Wprowadza ona szereg dodatkowych funkcji użytkowych oraz możliwości programistycznych...
Następnym standardem języka C++ będzie C++17. Czy będzie on – zgodnie z oczekiwaniami – równie wielkim trzęsieniem ziemi jak C++11? Zgodnie z prawem nagłówków Betteridge’a odpowiedź na to pytanie jest przecząca. Ale i tak jest z czego się cieszyć...
Pokazałem koledze programującemu na Android, jak łatwo jest wyświetlić ostylowaną listę w aplikacji WPF. Binding, DataTemplate, trochę XAMLa, kilka linijek kodu w C# – zestawienie przykładu zajęło mniej niż pięć minut. „Rany” – powiedział kolega po chwili – „ale mało kodu!”. Zacząłem się wtedy zastanawiać, czy pod Androidem nie dałoby się tego osiągnąć: spiąć logikę biznesową z wizualizacją i zrobić to kosztem możliwie najmniejszej ilości kodu-kleju (glue code)...
Potrzeba integracji różnych systemów informatycznych to już standard. Jeden z problemów, to kwestia udzielania dostępu do zasobów oraz skalowalności tego rozwiązania. Podobne kwestie podnoszone są, gdy zachodzi potrzeba udzielenia dostępu do systemu tylko w określonym zakresie. Jednym z rozwiązań jest implementacja standardu OAuth 2.0...
Python – obfuskacja i inżynieria wsteczna; W pogoni za flagą – eksploitacja na systemach Windows i Linux; Łamanie zaawansowanych technik przekierowania API...
Najciekawsze, ułatwiające pracę funkcjonalności i procesy instalacji oraz konfiguracji. W artykule też o IPython Notebooku, czyli projekcie Jupyter, oraz o alternatywach dla IPythona, również w innych językach...
Artykuł przybliża tematykę systemów heterogenicznych i podzielony jest na części. Pierwsza opisuje przypadek zastosowania zarówno architektury ARMv7 i Cortex-M3. Kolejna przybliża linuksowy koncept sterowników typu MISC, który może być użyty do zarządzania rdzeniem Cortex-M3 z poziomu rdzenia ARMv7. Ostatnia jest o wskazówkach dotyczących komunikacji międzyprocesorowej...
Możemy obsługiwać sprzęt, taki jak mikrofon czy głośniki poprzez Web Audio API. Lista wszystkich interfejsów oferowanych przez przeglądarki z biegiem lat staje się coraz dłuższa. JS staje się coraz bardziej popularny, a w przypadku urządzeń mobilnych aplikacje często konkurują z rozwiązaniami natywnymi.
Framework pkgsrc jest środowiskiem do budowy oprogramowania w szerokim spektrum systemów Unixopodobnych, w szczególności na systemach z rodziny BSD, Darwin, Linux i Solaris...
Artykuł prezentuje podstawowe konwencje budowania i testowania projektów przy użyciu Angular 2, czyli połączenie REST-owego API z RxJs oraz testowania jednostkowego w Jasminum i end-to-end w Selenium...
Na okładce 50. wydania znalazł się robot. Robot w wersji elektronicznej okładki jest programowalny. W związku z tym ogłaszamy jubileuszowy konkurs, gdzie to właśnie Wy – Czytelnicy – możecie zaprogramować ruchy robota w taki sposób, by ułożył on znajdującą się przed nim Wieżę Hanoi...
Technika ta przeżywa obecnie drugą młodość jako niezwykle skuteczny sposób na odkrywanie błędów bezpieczeństwa, a my w tym artykule postaramy się omówić, co leży u jej podstaw...
W artykule chcielibyśmy zaprezentować metody obfuskacji, które sprawią, że analiza naszego kodu nie sprowadzi się do prostego użycia deasemblera/dekompilatora, ale pochłonie znacznie więcej czasu, pieniędzy, krwi i potu atakującego...
Jak się driver spieszy, to się człowiek cieszy! Urządzenia z Linuksem umożliwiające dostęp do sieci coraz bardziej zyskują na popularności, począwszy od zwykłych komputerów osobistych, przez routery, dyski sieciowe, aż po najnowsze technologie serwerów opartych o układy ARMv8...
W artykule: specyfika oraz podstawowe mechanizmy frameworka MvvmCross, które sprzyjają tworzeniu luźno powiązanych, utrzymywalnych oraz testowalnych rozwiązań mobilnych...
Apache Cordova samo w sobie nie dostarcza gotowych rozwiązań, wzorców ani szablonów, które umożliwiałyby szybkie tworzenie interfejsu użytkownika hybrydowych aplikacji mobilnych. Tę lukę wypełnia Ionic, który bazując na AngularJS, umożliwia szybkie programowanie aplikacji mobilnych...
Czyli jak się upewnić, czy 2+2 nadal wynosi 4. Zakładając, że nasz program nie jest z gatunku Open Source, możemy „nauczyć” go kilku technik obrony. Jedną z nich jest tytułowa kontrola integralności, pozwalająca na wykrycie popularnych sposobów analizy i modyfikacji oprogramowania...
Artykuł jest wstępem do tematu emulacji, który sam jeszcze zgłębiam, ale mam nadzieję, iż przy jego pomocy uda mi się udzielić odpowiedzi na pytania, jak działa emulacja, do których ja sam musiałem dochodzić, czego efektem jest emulator Octopus oraz właśnie ten tekst..
RubyMotion pozwala tworzyć wieloplatformowe natywne aplikacje mobilne dla najpopularniejszych platform (iOS, Android) i dla tvOS, OS X, watchOS z wykorzystaniem języka Ruby, co w połączeniu ze środowiskiem RubyMotion umożliwia szybkie i wygodne tworzenie aplikacji mobilnych. Zaprezentuję to na przykładzie aplikacji dla iOS 9.3...
O możliwościach języka C++ w środowiskach Embarcadero RAD Studio oraz Qt Creator...
Programista często staje przed koniecznością zapamiętania wartości rejestrów procesora, wykonania sekwencji operacji, a następnie odtworzenia poprzednich wartości w rejestrach procesora...
Jeśli chcemy szybko odpowiedzieć na pytanie, czym jest Julia, to warto przytoczyć pierwsze zdania ze strony domowej projektu. A jest tam mowa o tym, iż Julia to pakiet darmowy oraz o otwartym kodzie, którego przeznaczeniem są obliczenia inżynierskie. To jednak nie wszystko, bowiem Julia oferuje bardzo dużą wydajność porównywalną z kodem produkowanym przez kompilatory języków C czy C++...
Obecny trend technologiczny w produkcji procesorów nieodzownie stawia na wielordzeniowość i, choć nie jest to zjawisko nowe, powszechne wyobrażenia na temat funkcjonowania tych maszyn znacznie odbiegają od rzeczywistości...
Disruptor to biblioteka napisana przez firmę LMAX na potrzeby projektu związanego z mikrotransakcjami bankowymi. Głównym celem takiej aplikacji jest przetworzenie jak największej liczby zapytań w jednostce czasu...
Pony to język programowania wyróżniający się natywną obsługą tzw. modelu aktorów. Choć model ten jest dostępny dla wielu innych języków programowania zazwyczaj jako dodatkowe biblioteki, to w języku Pony mamy bezpośrednią obsługę aktorów...
W artykule przedstawiamy, czym naprawdę jest Command Query Responsibility Segregation i jak to „ugryźć”. Przykłady kodu napisane są w C#, jednak powinny być zrozumiałe dla programistów każdego języka...
RabbitMQ jest czymś w rodzaju firmy pocztowej, która jest organizacją złożoną nie tylko z placówek pocztowych, ale i całej infrastruktury służącej do przekazywania wiadomości z jednego miejsca na drugie, od nadawcy do odbiorcy...
Artykuł skupia się na elementach, które najtrudniej wyeliminować oraz przyswoić inżynierom korzystającym z nowoczesnego C z klasami...
Algorytm gossip rozwiązuje problem propagacji informacji, wzorując się na naturze. Uruchomiony jest na każdym węźle w systemie, działa bez przerwy i składa się z kilku prostych operacji...
C oraz C++ to nadal jedne z najczęściej stosowanych języków programowania. Ich popularność jest tak duża, iż mimo rozwoju nowych technologii nadal są one powszechnie wykorzystywane do tworzenia programów dla nowych rozwiązań sprzętowo-programowych...
Capstone: fundament do deasemblacji. Środowisko narzędzi składających się na radare2 (w skrócie zwane r2) może służyć niemal do wszystkiego: od przeglądu plików i katalogów do służenia za kalkulator...
Poznaj możliwości systemu oraz Uniwersalnej Platformy Windows w zakresie programowania urządzeń wbudowanych.
Obsługa parametrów przekazywanych z wiersza poleceń to jedno z tych zadań programistycznych, które chciałoby się wykonać szybko, łatwo i pewnie. Przy bardziej skomplikowanych przypadkach nie obejdzie się bez wsparcia ze strony wyspecjalizowanej biblioteki. W artykule przedstawiona jest biblioteka Boost.ProgramOptions, oferująca prostą i wygodną obsługę parametrów wiersza poleceń w programach pisanych w języku C++.
Padding Oracle to atak, który pozwala na wyłuskanie tekstu jawnego z zaszyfrowanych danych bez znajomości klucza szyfrującego, i bez potrzeby znalezienia jakichkolwiek błędów w samym algorytmie szyfrującym...
Zadajecie sobie czasami pytanie „jak to działa?” Na przykład system operacyjny czasu rzeczywistego…? Okazuje się, że po rozłożeniu go na części pierwsze to żadna magia. Czemu więc nie spróbować zbudować własnego?
Popularność tematyki tworzenia gier wśród programistów powoduje, że pojawia się wiele różnych silników, również całkowicie darmowych. Jednym z nich jest Godot Engine. Warto poznać jego możliwości...
Nowa wersja Swift dostarcza nam całkiem sporo interesujących funkcjonalności. Są to zarówno zmiany i udoskonalenia w jego składni, aktualizacja w zakresie poszerzenia pokrycia systemów, jak i zmiany w otwartości jego licencji. Dodano nowe elementy języka, dzięki którym tworzony kod będzie bardziej efektywny...
Zobaczmy jak długo wyczekiwany Perl 6 faktycznie wygląda i czy warto było czekać...
“This is the first time that our RTOS Kernel has left the earth’s gravity and been trusted with such an important mission”. Takimi słowami twórcy pewnego systemu powitali informację o udanym lądowaniu łazika Curiosity na Marsie. Nadszedł czas, że tak kosmiczna technologia zaczyna trafiać pod strzechy, prosto do rąk ambitnych hobbystów...
Jak zmniejszyć rozmiar pliku binarnego? Na przykład poprzez eliminację nieużywanych symboli na etapie linkowania. Będzie to wymagało zastosowania kompilacji z odpowiednim podziałem na sekcje. Wiązać się też będzie z pewnymi komplikacjami....
Czy język C++ wymiera? Nic bardziej mylnego! Po rewolucyjnych zmianach, które wprowadziła wersja C++11, oraz ulepszeniach z C++14 nadszedł czas na C++17 – nadchodzący standard, który w dużym stopniu odmieni język i spowoduje, że stanie się jeszcze bardziej atrakcyjny.
Developerzy otrzymali narzędzie, które będzie w przyszłości podstawą każdej aplikacji webowej, a biorąc pod uwagę nadchodzący Internet Rzeczy, ECMAScript 6 i jego następne wersje będą dosłownie otaczać każdego z nas.
Ten tekst opisuje zdarzenie w najnowszej historii języka C++, które – być może – jest właśnie takim punktem zwrotnym. A najciekawsze jest to, że na to, czy tak się stanie, możesz wpłynąć właśnie Ty – osobiście! Zaintrygowany? Jeśli tak, to zapraszamy do lektury.
W numerze tym prezentujemy przedpremierowo obszerne, wyczerpujące fragmenty książki pt. „Zrozumieć programowanie”. Opublikowane u nas zagadnienia: Synchronizacja, Muteksy i sekcje krytyczne, Typy stałoprzecinkowe, Przekierowania...
Abstrakcyjna maszyna C „materializuje się” w postaci efektów ubocznych programu, przypominając tym samym słynny paradoks kota Schrödingera, który tym bardziej jest w pudełku, im bardziej tam zaglądamy...
Format danych XML jest uniwersalnym językiem znaczników, z którym mamy styczność codziennie. Jest podstawą takich formatów jak .docx, .odt, opierają się na nim SOAP, XMLRPC. Omówimy kilka najpopularniejszych problemów bezpieczeństwa, które wiążą się z przetwarzaniem plików XML...
Jacy programiści mogą pisać aplikacje? Czy wiedza z Windows, Windows/Phone 8.x będzie przydatna? Co udoskonalono? Odpowiem tutaj na pytania i wskażę ciekawe perspektywy związane z nowym systemem...
Mikroserwisy robią karierę w świecie programowanie biznesowego. . Co w nim jest tak atrakcyjnego? Czy faktycznie jest to innowacja warta uwagi, czy jedynie nowa moda? A także wiele innych ciekawych informacji można znaleźć w tym artykule...
Projekt interfejsu i zbadanie modelu użytkownika to jeden z kluczowych procesów od samego początku powstawania aplikacji; wymaga on również szerokiej wiedzy z zakresu UX...
Metoda pull requests ułatwia współpracę programistom pracującym w serwisach internetowych pozwalających na przechowywanie projektów, wykorzystujących Git jako system kontroli wersji jak Bitbucket czy GitHub...
Upload plików zalicza się do najczęściej występujących funkcjonalności w webaplikacjach. Jest zarazem miejscem, na które bardzo chętnie patrzą pentesterzy ze względu na liczne błędy bezpieczeństwa w implementacjach...
Każdy utwór muzyczny jest – z perspektywy programisty – dźwiękiem. Aby móc go przetwarzać, musimy go wczytać i przechować w postaci dla nas zrozumiałej...
Go jest kompilowanym, współbieżnym, statycznie typowanym językiem programowania z automatycznym odśmiecaniem pamięci. Powstał pod szyldem firmy Google...
Celem artykułu jest wskazanie problemów związanych ze stosowaniem w rzeczywistych systemach informatycznych rozwiązań określanych jako prosty polimorfizm, podobnych do klasycznego przykładu „edytora figur geometrycznych”...
W tym artykule prezentuję możliwości bibliotek WatchKit z Xamarin. iOS w kontekście tworzenia aplikacji dla Apple Watch...
Głównym zadaniem Gulp.js jest wspomaganie wytwarzania oprogramowania poprzez zautomatyzowanie wielu czynności, takich jak wgrywanie plików na serwer...
Pisząc programy w języku C, zapominamy czasem, iż zarówno sam język, jak i kompilatory mogą zachować się nieprzewidywalnie...
Co bardzo istotne, ZeroMQ to niewielki pakiet (podstawowe API liczy niewiele ponad pięćdziesiąt funkcji), który łatwo zaimportować do własnego projektu...
W tym artykule przyjrzymy się możliwościom, jakie daje nam Java do pracy z typami pieniężnymi, oraz pułapkom, jakie na nas czekają...
Hasło przewodnie Xamarin: „wiedzieliśmy, że musi być lepszy sposób na tworzenie aplikacji mobilnych”, odzwierciedla ideę tej technologii...
Odwrotna kolejność (nazywana również przedwczesną optymalizacją) może doprowadzić zarówno do wydajnych, jak i niewydajnych programów, niekoniecznie zachowujących się poprawnie...
Nowe wersje; Nowy instalator; Odkryj na nowo Alt+Enter; Fix in scope; Filtrowanie IntelliSense; Exposing API; Wsparcie dla wyrażeń regularnych; Type Dependency Diagram; Keyboard Ninja!; ReSharper 9.1.
Definitywnie dwoma największymi bolączkami webdeveloperów w kwestiach związanych z bezpieczeństwem są podatności SQL Injection i Cross-Site Scripting...
Czyli co każdy programista powinien wiedzieć o dokładnym całkowaniu równań różniczkowych zwyczajnych.
Pamięć nie jest płaska. Wręcz przeciwnie – dostęp do pamięci operacyjnej jest nierównomierny, a tworzenie wydajnego oprogramowania polega na umiejętnym wykorzystaniu podsystemu pamięci wraz z całą jego wielopoziomową hierarchią.
Przede wszystkim postaramy się odpowiedzieć na następujące pytania: Co w ZFS jest takiego wyjątkowego? Po co nam kolejny system plików? Jak go używać? I najważniejsze – czy możemy jakoś wykorzystać jego funkcjonalności do własnych celów?
Promises to wzorzec projektowy wykorzystywany w wielu językach programowania i bibliotekach, ułatwiający programowanie asynchroniczne
Aktualnie wśród frameworków MVC prym wiedzie AngularJS. W artykule przedstawione są sposoby testowania aplikacji bazujących na tym narzędziu.
Box2D jest silnikiem do symulacji fizyki dwuwymiarowej. Jest lekki, prosty w wykorzystaniu, efektywny, łatwo przenośny i darmowy, także do zastosowań komercyjnych
Artykuł przedstawia technikę zwirtualizowanego dostępu do pamięci, stosowaną w większości współczesnych komputerów i systemów operacyjnych, oraz sposób optymalizacji tego mechanizmu na przykładzie Superpages dla FreeBSD/ARM.
Co ma programowanie do smolistego grzęzawiska? Odpowiada twórca języka C++
Skomplikowany charakter oprogramowania do reverse engineeringu i sam proces jego tworzenia wiąże się często z tym, że oprogramowanie takie jest również drogie, lecz starałem się także pokazać alternatywne i darmowe odpowiedniki do zaprezentowanych przykładów...
Oprócz podstawowej funkcjonalności, polegającej na prezentacji czasu, smartwatches umożliwiają wykonywanie zadań charakterystycznych dla smartfonów. Dzięki temu artykułowi będziesz projektował niezależne aplikacje dla urządzeń ubieralnych.
Standard C++14, mimo iż nie przynosi rewolucyjnych zmian, zdecydowanie wart jest uwagi. Artykuł ten podpowiada, na które nowe dodane elementy warto zwrócić szczególną uwagę.
Język C# domyślnie nie umożliwia deklarowania i wykorzystania zmiennych wskaźnikowych. Operacje na wskaźnikach są jednak możliwe z wykorzystaniem kontekstu nienadzorowanego, który opiszę w tym artykule
Budując aplikacje serwerowe, musimy pamiętać o zasobach maszyny, na której uruchomiona jest nasza aplikacja. W celu poprawy wydajności naszej aplikacji, w przypadku operacji na dużych ilościach danych, możemy wykorzystać olbrzymi atut, jaki daje nam Node.js - strumienie.
Nowoczesne urządzenia z systemem Android wyposażone są w szereg czujników, które można wykorzystać w celu pozyskania informacji o położeniu oraz otoczeniu smartfona lub tabletu...
W niniejszym artykule przedstawiona zostanie architektura Clean Architecture autorstwa Roberta C. Martina, która może być pomocna w ustrukturyzowaniu projektu tak, aby był bardziej przejrzysty, łatwiej testowalny i mniej uzależniony od platformy.
W tym artykule przedstawię interfejs Mirror API, umożliwiający tworzenie aplikacji dla tych okularów
SHA-1 – funkcja skrótu uważana od 2005 roku za niebezpieczną, w 2014 roku jest wykorzystywana w 90% do podpisów certyfikatów SSL.
Wyjątki w C++ od strony programisty wyglądają stosunkowo prosto – ot, zamykamy fragment kodu w bloku try, definiujemy jeden lub kilka bloków catch przechwytujących wyjątki danego typu i na tym nasza robota skończona; od teraz jeśli podczas wykonywania naszego kodu zostanie użyte throw, wykonanie programu zostanie „magicznie” przeniesione do odpowiedniego bloku catch (jeśli taki istnieje). Patrząc od środka, cały proces jest dużo bardziej złożony i warto na niego rzucić okiem, choćby z ciekawości.
Kompilator Clang z dnia na dzień zdobywa coraz większą popularność wśród programistów języka C++ ze względu na swoją nowoczesną budowę, zestaw dodatkowych narzędzi oraz co najważniejsze – produkowanie kodu wynikowego wydajnościowo przybliżonego lub lepszego od konkurencji.
Usługi GSM mogą mieć wszechstronne zastosowanie, takie jak masowe wysyłki SMS, przypomnienie o opłaceniu faktury czy powiadomienie o nagłym skoku na giełdzie...
Programowanie aplikacji kompatybilnych z wieloma platformami nie jest trywialnym zadaniem. Obliguje developerów do przystosowania tworzonego przez nich oprogramowania do parametrów specyficznych dla danego systemu i udostępnianych przez niego interfejsów programistycznych...
Specyfika platformy Android wymusza na twórcach aplikacji, aby były one dostosowane do szerokiej gamy rozdzielczości i wielkości ekranów. Mając na celu ułatwienie zadania, Google wprowadził do swojego systemu fragmenty...
Nawet najbardziej wymyślne trójwymiarowe modele bez oświetlenia są po prostu płaskie. W dużym stopniu, wspólnie z teksturowaniem, to oświetlenie odpowiedzialne jest za realizm wygenerowanej sceny...
Na tegorocznym WWDC Apple zafundowało wszystkim swoim developerom sporą niespodziankę w postaci... nowego języka programowania! Swift...
Na popularność środowiska Unity 3D składa się kilka elementów, ale z pewnością jednym z nich jest dość przystępne API, które upraszcza typowe zadania, jakie napotyka się, tworząc aplikacje oparte o grafikę 3D. To nie wszystko...
Przeglądy kodu źródłowego są popularną techniką umożliwiającą zapewnienie wysokiej jakości kodu źródłowego. Czy warto ją stosować? Co dają nam przeglądy kodu i jak je wykonywać, by były one efektywne?
Nowoczesny OpenGL uruchamiany w profilu rdzennym zmusza programistę do rzeczy, o których mógł wcześniej nie myśleć: pisania shaderów, tworzenia buforów werteksów i definiowania macierzy. Oczywiście, że nadal można korzystać z bibliotek czy gotowych rozwiązań pobranych z Internetu...
Dziś na warsztat weźmiemy jedno z fundamentalnych zagadnień w dziedzinie programowania gier, jakim jest zarządzanie zasobami (ang. resource management).
Czy twój program zjada pamięć i CPU? Czy jest to wina języka, czy może kodu? Co można zrobić zanim sięgniemy po język C, jeśli nasza aplikacja w Pythonie wykazuje objawy „otyłości”?
Platforma .NET Framework jest szeroko wykorzystywana do programowania aplikacji desktopowych, internetowych oraz mobilnych. Ponadto najmniejsza wersja tej biblioteki, czyli .NET Micro Framework, umożliwia programowanie systemów i urządzeń wbudowanych
Spring Data JPA to niewielka biblioteka upraszczająca pracę z JPA poprzez automatyczne tworzenie kodu repozytoriów (DAO) oraz wygodną obsługę stronicowania i sortowania.
Metoda symulowania globalnego oświetlenia przy pomocy techniki postprocessing
Zamiast ręcznego zarządzania wątkami oraz wymiany informacji poprzez współdzieloną pamięć i synchronizację, Akka proponuje model obliczeń oparty o aktorów.
Spotkałem się już kilkukrotnie z koniecznością integracji oprogramowania tworzonego w oparciu o język Python z bibliotekami .NET i vice versa. Przydatnym narzędziem okazał się być wówczas IronPython, który umożliwia dwukierunkową integrację Pythona z platformą .NET
W niniejszym artykule przedstawiamy bardziej zaawansowane aspekty budowy debuggera, skupiając się na operowaniu na pamięci wirtualnej, obsłudze punktów wstrzymania, odczytywaniu i zapisywaniu kontekstu procesora, obsłudze wyjątków.
Java 8 wprowadza najwięcej nowości od czasu piątej edycji wydanej blisko 10 lat temu. W tym artykule przyjrzymy się najciekawszym i najbardziej rewolucyjnym zmianom.
Jedną z rzadziej używanych funkcjonalności będącej częścią WinAPI jest tzw. Debug API, a więc zestaw wszystkich narzędzi niezbędnych do zbudowania własnego, w pełni sprawnego debuggera.
Artykuł opisuje narzędzia, dzięki którym możliwa jest ocena jakości kodu napisanego w języku C++, aczkolwiek inne języki programowania powinny posiadać zbiór odpowiadających im narzędzi, które adresują podobne problemy
Przygotowanie struktury aplikacji, obsługa protokołu, dostęp do danych oraz interakcja pomiędzy systemami – jak to zebrać w całość? Z pomocą biblioteki Twisted oraz języka Python utworzymy usługę sieciową.
Tworzenie aplikacji korzystających z baz danych jest codziennością programistów. Nieocenioną pomocą są przy tym wszelkie narzędzia ułatwiające pracę, pośród których główną rolę grają narzędzia ORM. W samej platformie .NET „z pudełka” mamy trzy, w tym m.in doskonały Entity Framework.
Jak rozpocząć pracę z darmową wersją profesjonalnego narzędzia do analizy danych – RapidMiner – oraz jak z jego pomocą pobrać zawartość określonych stron z Internetu oraz później przeprowadzić analizę tak uzyskanych danych.
W pierwszej części przyjrzeliśmy się Vaadin od strony API. Omówiłem dostępne komponenty oraz ogólne zasady działania frameworku. W tej części zademonstruję, jak wykorzystać te elementy do tworzenia aplikacji.
Node.js ostatnimi czasy zyskuje coraz bardziej na popularności, częściowo dzięki powszechności JS oraz możliwościom, jakie daje. Postaram się w prosty sposób wyjaśnić, czym jest oraz jak działa Node.js czytelnikom, którzy jeszcze nie mieli z nim styczności.
.Współczesne aplikacje, aby zapewnić użytkownikom wymagane funkcjonalności, stają się coraz bardziej złożone. Odbija się to często na stopniu skomplikowania całego środowiska, w którym dana aplikacja działa.
Witamy w drugiej części serii traktującej o tym, jak współczesne komputery funkcjonują od środka.
Vaadin 7 jest frameworkiem pozwalającym na bardzo szybkie tworzenie aplikacji webowych w Javie. W przeciwieństwie do innych podobnych rozwiązań całość aplikacji można przygotować tylko w Javie bez konieczności pisania nawet najprostszego kodu HTML.
Intensywne prace nad rzeczywistością rozszerzoną trwają już od co najmniej kilkunastu lat. Być może już niedługo doczekamy się momentu, w którym rozwiązania wzbogacające rzeczywistość o elementy wirtualne staną się rzeczywiście popularne i powszechnie przyjęte.
Zaprezentowane zostaną takie składniki jak wybrane komponenty, elementy JavaScript'u, w tym ich zastosowanie oraz finalnie responsive design. Dodatkowo opiszemy, co nowego pojawiło się w v3.
Dowiemy się, czym są shadery i tekstury, a także co można osiągnąć za ich pomocą. Zapoznamy się również z matematycznymi podstawami wyświetlania obrazu na ekranie.
Celem tego artykułu jest omówienie i implementacja certyfikatów użytkownika na przykładzie aplikacji hostowanej w kontenerze Tomcat.
W tym artykule przedstawimy, jak za pomocą xAPI stworzyć własną platformę tradingową w Javie.
Twitter Bootstrap to framework HTML5/CSS/JS do prostego tworzenia estetycznych i funkcjonalnych interface'ów użytkownika.
W grach i niektórych innych programach zachodzi potrzeba mierzenia upływu czasu, a ten podlega ograniczeniom (np. zakresu, precyzji) zależnie od metody, jaką go mierzymy, i formatu, w jakim go zapisujemy.
W tym artykule poznamy podstawy tworzenia gier w HTML5 dla platform mobilnych, ze szczególnym uwzględnieniem dość młodego systemu Firefox OS...
W ostatnim czasie dynamiczny rozwój urządzeń mobilnych powoduje, że widoki aplikacji internetowych powinny być przystosowane do ich wyświetlaczy. Jednakże, szeroki wachlarz dostępnych na rynku urządzeń i kontrolujących je systemów operacyjnych sprawia, że zachowanie kompatybilności witryny internetowej ze wszystkimi z nich staje się być nie lada wyzwaniem.
Niniejszy artykuł prezentuje sztuczki i idiomy z języka C++. Przedstawia on zarówno te mniej, jak i bardziej popularne, zatem średnio zaawansowani programiści, jak i ich bardziej doświadczeni koledzy powinni znaleźć w nim coś dla siebie.
Dzisiaj powiemy sobie o jednym z rodzajów testów oraz o wykorzystaniu ich do pracy nad aplikacją w technologii ASP.NET MVC4.
Język C++ nie posiada wprawdzie garbage collectora, który automatycznie zwalniałby pamięć, ale to nie znaczy, że nie dostarcza niczego, co mogłoby w zarządzaniu pamięcią pomóc.
Przygotowanie oprogramowania działającego na większości urządzeń przenośnych wymaga opracowania co najmniej dwóch aplikacji. Problem można rozwiązać, korzystając z frameworka PhoneGap tworząc wieloplatformowy program na wszystkie systemy mobilne jednocześnie.
Doświadczenia ostatnich lat pokazują, że utrzymanie webaplikacji to ciężki orzech do zgryzienia. Przedstawiamy najczęściej spotykane wpadki developerów aplikacji internetowych oraz metody ich unikania.
W niniejszej, otwierającej części przedstawiamy uproszczoną zasadę działania procesora w trybie rzeczywistym i typowy proces uruchamiania komputerów domowych oraz pokazujemy, w jaki sposób stworzyć własny program uruchamiany w środowisku typowym dla boot loadera.
Unity3D to połączenie edytora 3D wraz z rozbudowanym systemem do tworzenia skryptów w językach JavaScript, Boo, a także C#. Jest to też dobry wybór gdy tworzymy nasz pierwszy projekt tego typu.
Free Pascal (FP), zgodny z językiem Pascal i jego dialektem oferowanym przez Delphi
Spróbujemy zmodyfikować program skompilowany w Linux bez używania debuggera i bez mozolnego grzebania w kodzie maszynowym
Usprawnienie procesu wytwarzania oprogramowania
Programy kompresujące dane mają swoje początki w czasach, gdy zarówno przestrzeń dyskowa, jak i transfer danych były stosunkowo drogie.
Jest takie wspaniałe opowiadanie Henrego Kuttnera „Tubylerczykom spełły fajle”..
Choć języki wysokiego poziomu – skryptowe, interpretowane czy wykonywane w wirtualnej maszynie – mają wiele zalet i są najlepszym wyborem w licznych zastosowaniach, to niekiedy potrzebujemy napisać kod jak najbardziej wydajny.
Zdarza, że chcemy przechwycić wywołanie jakiejś funkcji w bibliotece dynamicznej DLL
Od najprostszych przykładów, przez metody optymalizacyjne, do skomplikowanego przykładu
Będziemy mogli się przekonać o sile tego języka i możliwościach, jakie oferuje biblioteka graficzna Qt
Wiedza na temat niskopoziomowej obsługi okien i kontrolek okazuje się być bardzo przydatna
Funkcjonowanie i szczegóły implementacyjne Passbook'a
Tworzenie programów w CUDA nie zawsze wymaga stosowania C/C++, można też pisać w C#
AMF (Action Message Format) jest protokołem, który pozwala przesyłać zserializowane obiekty w formacie binarnym (na przykład obiekty utworzone w Actionscript)
Funkcja programowego wykrywania i rozpoznawania obiektów znajdujących się na obrazach oraz klatkach sekwencji wideo znajduje zastosowanie w wielu aplikacjach
Sygnały i sloty to ciekawy wariant mechanizmu wywołań zwrotnych stanowiący elegancką alternatywę dla wzorca Obserwator?
Jak poprawnie projektować hosting plików graficznych od strony bezpieczeństwa serwisu i jego użytkowników
Czy funkcjonalność logowania powinna być zaimplementowana statycznie, instancyjnie czy poprzez interfejs
W artykule przedstawiam podsumowanie mojej praktycznej wiedzy związanej z tematem zarządzania stanem przy programowaniu gier
Pomysł opracowania Raspberry Pi, podobnie jak projekt Arduino, to znakomitaokazja, aby propagować elektronikę oraz informatykę.
Na platformie zwanej Androidem programiści zmagają się z problemem wycieków pamięci. W tym artykule postaram się przybliżyć, jakie błędy programistyczne są najczęstszą przyczyną wycieków, jak je wykryć oraz jak sobie z nimi radzić.
MVC to framework Microsoftu przeznaczony do rozwiązań webowych. Co jednak sprawiło, że w ciągu ostatnich paru lat stał się tak popularny? Przecież mieliśmy cały czas do dyspozycji rozwiązania Web Formsowe?
OSGi (Dynamic Module System for Java), czyli standard implementujący model komponentów w języku Java. Wielokrotnie implementuje się metody, które wykonują dla nas czynności zgodne z wymaganiami klienta, jednak nie nadają się one do ponownego użycia. Wygląda znajomo?
Zagadnienie testowalności kodu jest kluczowe z punktu widzenia poprawności działania systemu, ale także satysfakcji klienta końcowego. Odpowiednia struktura aplikacji znacznie ułatwia automatyczne testowanie, zmniejszając ilość błędów i pozwalając na szybszą reakcję na zmianę wymagań.
Internetowe startupy pojawiają się jak grzyby po deszczu. Każdego dnia na świecie powstaje kilka tysięcy pomysłów na serwis internetowy, wiele z nich nigdy nie zostanie wykonanych min ze względu na długi czas realizacji. Można wiele problemów rozwiązać używając Ruby On Rails.
Grafika 2D nadal odgrywa dużą rolę w grach komputerowych, uruchamiając dowolną grę 3D zawsze znajdziemy kilka elementów wykorzystujących dwa wymiary do rysowania choćby logo producenta, GUI , HUD lub menu. Diablo III® jest tego dobrym przykładem.
W ciągu ośmiu lat od powstania pierwszej specyfikacji, JavaServer Faces stał się jednym z najpopularniejszych szkieletów programistycznych dla tworzenia aplikacji WWW, wyznaczając nowe kierunki rozwoju dla komponentowych rozwiązań opartych na technologii serwletów.
Kiedy spojrzy się z pewnej perspektywy na branżę IT, a w szczególności na ten jej wycinek, którym jest programowanie, wydaje się, że w tej dziedzinie nadal panuje chaos.
Jesień roku 2012 dla programistów systemu Windows będzie niezwykle bogata:nowy Windows 8, nowe Visual Studio 2012, a także nowa odsłona .NET o numerze 4.5. W artykule postaramy się przedstawić kilka wybranych nowości dostępnychw najnowszej wersji tej platformy.
Długo oczekiwana funkcjonalność, która rozwiązuje problem blokowania i zawieszania się interfejsu użytkownika. Od teraz obsługa kontynuacji operacji asynchronicznych została wbudowane w sam język, co znacząco uprościło obsługę tego typu sytuacji.
Platforma GG BotAPI pozwala na bardzo łatwe stworzenie własnego bota, np.takiego jak Infobot dostępny pod numerem GG:100. W artykule opiszemy, jak stworzyć bota czatowego, mogącego służyć do komunikacji wśród grupy pracowników.
Systemy kontroli wersji (ang. version control systems, VCS) znane są w informatyce od dawna. Pierwszym z nich był system SCCS. Fakt, iż programy będące ideowymi następcami tego systemu są nadal szeroko stosowane, świadczy o dużym znaczeniu praktycznym tego rozwiązania.
Programując w językach C lub C++, bardzo łatwo jest popełnić błąd. Powodów można wymienić Niniejszy artykuł ma na celu przedstawienie czytelnikowi kilku przykładów, w których pomimo iluzorycznej trywialności kodu, znajdują się subtelne błędy lub niejasności.
Niektóre domeny podlegają ciągłym zmianom. Poprzez nadanie odpowiedniej struktury naszemu rozwiązaniu jesteśmy w stanie stosunkowo szybko zmienić reguły rządzące modelem. Niestety problem pojawia się w momencie, gdy te zmiany są zbyt częste.
.NET Framework i Visual Studio Platforma .NET została opracowana w końcówce XX wieku i zaprezentowana w lipcu 2000 roku. Była to odpowiedź firmy Microsoft na rozwój konkurencyjnych rozwiązań takich jak technologia Javy
C.A.M.E.L czyli implementacja wzorców integracyjnych stosowanych w EAI
Jakie błędy najczęściej popełnia się stosując metody zwinne
Obecnie język Objective-C bardzo szybko zyskuje na popularności. Rośnie jego wykorzystanieza sprawą dużej popularności aplikacji na iPhone'a. Warto więc znać kilkaprzydatnych mechanizmów, które usprawnią nasze rozwiązania implementacyjnew wykonywanych projektach.
Popularność języków C/C++ oraz Java jak na razie jest niezagrożona, jednakże warto wiedzieć, że istnieją też inne równie dobre języki programowania. Jednym z nich jest Erlang, naturalnie daleko mniej popularny niż np: Java.
iOS to platforma, która rozbudza wyobraźnię wielu programistów. Któż z nas nie marzy o karierze niezależnego twórcy gier i setkach tysięcy dolarów zarobionych dzięki sprzedaży aplikacji na AppStore? Przedstawiamy bibliotekę, która może być kluczem do spełnienia tych marzeń.
Sygnały i sloty to ciekawy wariant mechanizmu wywołań zwrotnych stanowiący eleganckąalternatywę dla wzorca Obserwator.
Arduino to bardzo popularna platforma oparta o mikrokontroler z rodziny AVR.
Część I: Podstawowe Building Blocks DDD
Obecnie język Objective-C bardzo szybko zyskuje na popularności.