Kramdown - kontrola atrybutów html
Precyzyjna kontrola stylów css z poziomu kodu Kramdown
Precyzyjna kontrola stylów css z poziomu kodu Kramdown
Opisuję metody pozbycia się bloatware’u z telefonu z Androidem bez odblokowywania roota: wykorzystanie ADB, dezaktywację pakietów i bezpieczne „odinstalowanie” dla użytkownika, wraz z uwagami, czego lepiej nie ruszać, żeby nie uceglić systemu.
Przegląd trzech lekkich narzędzi, które warto mieć pod ręką: NetworkMiner do analizy ruchu sieciowego, VirusTotal Uploader do szybkiego sprawdzania plików i URL‑i oraz RegShot do śledzenia zmian w rejestrze Windows – z przykładami typowych zastosowań w pracy admina i programisty.
Analiza nieudokumentowanych anomalii w zachowaniu funkcji NtQueryInformationProcess w systemie Windows. Dowiedz się, jak dwie różne struktury PEB mogą być dostępne w procesie i jak to wpływa na wyniki odczytu informacji o procesie.
Analiza nieudokumentowanych anomalii w funkcji CreateToolhelp32Snapshot. Dowiedz się, dlaczego architektura (x86 vs x64) aplikacji diagnostycznej wpływa na wyniki odczytu sterty (heap) w systemie Windows i jak różnice między dokumentacją a rzeczywistym działaniem WinApi mogą zmylić programistę narzędzi systemowych.
Wprowadzam algorytm Knuth–Morris–Pratt do wyszukiwania wzorca w tekście: intuicja stojąca za funkcją prefix/suffix, konstrukcja tablicy „lps” oraz analiza złożoności. Omawiam też, kiedy KMP ma przewagę nad naiwnym porównywaniem znak po znaku.
Na prostym przykładzie pokazuję klasyczny, naiwny algorytm wyszukiwania podciągu w tekście oraz szczegółowo omawiam jego ograniczenia: złożoność czasową, powtarzane porównania i sytuacje, w których to podejście zaczyna być problematyczne.
Praktyczne wprowadzenie do ekosystemu kart zbliżeniowych MIFARE, szczegółowo omawiając różnice techniczne między popularnymi modelami Classic oraz Ultralight. Wyjaśnienie standardu ISO/IEC 14443, mapy pamięci układów oraz kluczowe aspekty bezpieczeństwa i ograniczenia obu technologii. Całość uzupełnia instruktaż programistycznej obsługi kart w języku Python, obejmujący konfigurację czytnika ACR122 oraz komunikację za pomocą ramek APDU.
Nauka przez praktykę, co ma wspólnego garncarstwo i programowanie.
MD5 implementacja w C++ - prosta implementacja algorytmu MD5 w języku C++.
Jak bardzo formatowanie logów przy pomocy sprinf spowalnia wykonanie aplikacji?
Kontenery STL a pamięć - porównanie zapotrzebowania pamięciowego dla kontenerów std::set i std::unordered_set.
Wprowadzam pojęcie programowania dynamicznego i pokazuję, jak zastosować go do rozwiązania problemu Longest Common Subsequence. Przedstawiam koncepcję rozdzielania problemu na mniejsze części i wykorzystywania wyników tych części do uzyskania rozwiązania głównego. Na przykładzie ilustruję, jak wykorzystać wiedzę o najdłuższych wspólnych podciągach do obliczenia najdłuższego wspólnego podciągu dla dwoch ciągów znaków.
Wprowadzam pojęcie programowania dynamicznego i pokazuję, jak zastosować go do rozwiązania problemu Longest Increasing Sequence. Przedstawiam koncepcję rozdzielania problemu na mniejsze części i wykorzystywania wyników tych części do uzyskania rozwiązania głównego. Na przykładzie ilustruję, jak wykorzystać wiedzę o najdłuższych podciągach do obliczenia najdłuższego podciągu po dodaniu nowego elementu do ciągu.
Analizuję różne sposoby znalezienia najmniejszej liczby uint32_t, która nie występuje w zadanym zbiorze: od sortowania, przez zliczanie i struktury std::set/std::unordered_set, aż po podejścia oparte na podziale zakresu. Porównuję użycie pamięci, złożoność czasową i praktyczne ograniczenia przy bardzo dużych zbiorach.
W zadaniu rekrutacyjnym #3 zaimplementowano funkcję, która liczy elementy w liście jednokierunkowej, korzystając z referencji do obiektu. Przedstawiono dwa rozwiązania: jedno z wykorzystaniem odległości do początku i końca listy, a drugie z wykorzystaniem garbage collector'a do znalezienia referencji do obiektu. Opisano również ograniczenia i zastosowania takiego podejścia w praktyce.
Na klasycznym zadaniu z cyklem w liście jednokierunkowej porównuję kilka podejść: z dodatkowymi strukturami danych, z modyfikacją listy oraz algorytm „żółwia i zająca” Floyd’a. Omawiam złożoność, zużycie pamięci i praktyczne zalety każdego rozwiązania.
Analizuję różne sposoby liczenia ustawionych bitów w liczbie całkowitej: od prostego przesuwania i maskowania, aż po wykorzystanie tablic pomocniczych. Porównuję czytelność, wydajność i zastosowania w praktyce.
c++ Komentarze i inne pułapki - pułapki w języku C++ związane z komentarzami i operatorami.
Wzbogacanie kontrolek WPF - sposób na rozszerzenie możliwości kontrolki ListBox w WPF + MVVM.
Pokazuję, jak zbudować AsyncCommand w C#, który wspiera opóźnione wykonanie (np. debouncing akcji użytkownika). Omawiam anulowanie poprzednich wywołań oraz typowe zastosowania w interfejsach reagujących na szybkie zmiany danych.