Menu

Android - usuwanie aplikacji bez root

Android

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.

Podręczne narzędzia #5

Hack Tools

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.

Dwie struktury PEB w procesie

Cpp WinApi

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.

CreateToolhelp32Snapshot

Cpp WinApi

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.

Algorytm Knuth Morris Pratt

Algorytmy Python

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.

Wyszukiwanie tekstu w tekście

Algorytmy Python

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.

Dwa słowa o kartach Mifare

MIFARE Python

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.

Programowanie dynamiczne #2

Algorytmy Cpp Python Zadanie

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.

Programowanie dynamiczne #1

Algorytmy Cpp Python Zadanie

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.

Zadanie rekrutacyjne #4

Cpp Rekrutacja

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.

Zadanie rekrutacyjne #3

Python Rekrutacja Trick

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.

Zadanie rekrutacyjne #2

Cpp Rekrutacja Zadanie

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.

Async command #2

.NET Async

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.

Podręczne narzędzia #3

Tools

Przegląd przydatnych pluginów do Notepad++: porównywanie plików z Compare, podgląd w trybie hex, wielokrotne schowki, wbudowany eksplorator plików oraz narzędzia do pracy z JSON i XML. Pokazuję, jak te dodatki potrafią zamienić Notepad++ w lekkie, ale całkiem potężne IDE.