Cała aktywność
Ten kanał aktualizuje się automatycznie
- Ostatni tydzień
-
Wrzuć na pouet.net
- 3 odpowiedzi
- Wcześniej
-
Dziękuję za miły komentarz. Pozdrawiam. 🥲
- 3 odpowiedzi
-
Jakaś bazowa strona zawsze się przyda, zależy co robisz.
-
No i pięknie :), zielono ale pięknie
-
Fajne, pachnie trochę demosceną.
- 3 odpowiedzi
-
Witam, najpierw utworz obiekt Adres. var adres = Adres("Kod", "Miejscowosc", "NazwaUlicy", 123, 456); var osoba = new Osoba(789, "Nazwisko", "Imie", adres); Zapraszam na moj kanal poruszam tematy dla zaawansowanych, ale rowniez dla poczatkujacych. Mam nadzieje, ze w przyszlosci, pomoze ci spojrzec moj kanal na problemy z innej perspektywy i takie cacka, jakt to, bedziesz unikac Pozdrawiam. public Osoba(ref Osoba osoba) { numerEwidencyjny = osoba.numerEwidencyjny; nazwisko = osoba.nazwisko; imie = osoba.imie; adres = osoba.adres; }
- 1 odpowiedź
-
- 1
-
-
Uzyj Linq To Objecs. dodaj namespace using System.Linq; nastepnie dla wyszukiwania var mojSamochod = samochody.FirstOrDefault(s => s.marka == szukanaMarka); jesli nie znajdzie, to mojSamochod bedzie null, warto sprawdzic. Jesli oczekujesz wiecej wynikow niz 1 to zamiast FirstOrDefault uzyj Where(...).ToList(); Otrzymasz liste samochodow, ktore odpowiadaja szukanej marce. jesli iterujesz po calej kolekcji mozesz tez uzyc samochody.ForEach(s => Console.WriteLine($"{s.marka}\t\t\t{s.model}\t\t{s.rokProdukcji}\t\t\t{s.czyDostepny}")); Jesli chcialbys sie dowiedziec, jak twoj kod zaprojektowac, tak, a zeby, byl latwy do rozwijania, to zapraszam na moj kanal. Pozdrawiam.
-
Kod Bez Dogmatów zmienił swoje zdjęcie profilowe
-
Masz rację, cały kod oczywiście jest na GH
-
20+ lat programowania, kilkanaście lat za granicą, doświadczenie jako Senior Developer, Lead Developer i Software Architect i zamiast kolejnego kanału z 5 zasadami dobrego kodu postanowiłem zrobić eksperyment.Zaczynamy niewinnie i tworzymy potwora. Od dłuższego czasu chodziła mi po głowie pewna rzecz. W programowaniu bardzo często słyszymy, jak coś robić: używaj tego wzorca, stosuj tę zasadę, tego nie rób, to jest clean, to jest bad practice... Tylko że w prawdziwych projektach odpowiedź rzadko jest aż tak prosta. Po ponad 20 latach programowania, pracy jako Senior Developer, Lead Developer i Software Architect, również w dużych projektach i za granicą, coraz bardziej interesuje mnie nie samo rozwiązanie, ale dlaczego zostało wybrane i jakie będą jego konsekwencje. Dlatego postanowiłem zrobić mały eksperyment i stworzyć kanał Kod bez dogmatów. Nie chcę zaczynać od: „Dzisiaj nauczymy się wzorca X i pokażę Wam, jak go poprawnie zastosować.” Chcę zrobić odwrotnie. Najpierw pojawia się problem. Potem szukamy rozwiązania. A na końcu sprawdzamy jego konsekwencje. W pierwszej serii budujemy od zera prosty projekt pizzerii. Zaczynamy od kilku pizz, a następnie dokładamy kolejne wymagania i obserwujemy, jak nasze wcześniejsze decyzje wpływają na dalszy rozwój programu. Poziom trudności będzie rósł razem z projektem. Początek jest celowo prosty i powinien być przystępny również dla osób, które dopiero zaczynają swoją przygodę z programowaniem. Z każdym kolejnym wymaganiem kod będzie jednak coraz bardziej złożony, więc z czasem pojawią się tematy, które będą interesujące również dla bardziej doświadczonych programistów i architektów. Jeżeli chcecie, możecie budować ten projekt razem ze mną. Kod jest dostępny na GitHubie, a każdy odcinek ma przypisaną konkretną wersję projektu. Dzięki temu możecie pobrać dokładnie ten stan kodu, który widzicie w danym odcinku, i samodzielnie wykonywać kolejne kroki razem ze mną. Nie chcę jednak od początku budować „idealnego” rozwiązania. Wcielamy się w programistę, który jest już całkiem dobry, ale jeszcze nie ma doświadczenia, które pozwala mu przewidzieć wszystkie konsekwencje swoich decyzji. Chcę zobaczyć, czy uda się w ten sposób pokazać coś, czego często brakuje w typowych materiałach programistycznych — proces myślenia stojący za decyzjami. A kiedy z prostego projektu zrobimy potwora, spróbujemy zobaczyć, czy i jak można go z niego wyciągnąć. Kod bez dogmatów: YouTube — https://www.youtube.com/@kodbezdogmatów Pierwszy odcinek: Kod źródłowy w opisie filmu. Nie tylko jak. Przede wszystkim dlaczego.
-
- c sharp
- programowanie
- (5 więcej)
-
ConBeats zaczął śledzić ConBeats - Lost In Space
-
Zapraszam do odsłuchania mojego elektronicznego utworu "Lost In Space". Mam nadzieję, że Wam się spodoba. Dajcie znać w komentarzach. Pozdrawiam. https://music.youtube.com/watch?v=LvNvfzO0-FM&si=FjUQ4Oa8ba3ZKFWY
- 3 odpowiedzi
-
Zastanawiam się, ile tak naprawdę klient robi "researchu" zanim w ogóle do mnie zadzwoni albo złoży zamówienie - czy to jeszcze ma sens inwestować w treści na stronie, czy klienci i tak dzwonią z pytaniami?
-
https://github.com/AdamGraszk/Rustazer
-
Może jakiś interfejs dorób?
-
Najlepiej samemu udostępniać paczki instalacyjne, zaczniej inaczej śpiewać jak Ci kiedyś usuną z byle powodu i to będzie jedyne źródło instalacji. Teraz jesteś na smyczy MS.
-
Udało się ❤️ ale satysfakcjonujące https://apps.microsoft.com/detail/xp9mcw35d1w4pw?hl=pl-PL&gl=PL
-
Dodałem apkę do Microsoft Store przeszła wszystkie auto testy pomimo posiadania paczek xss "demo". Jeszcze pozostały testy "ludzkie"
-
Spokojnie, to demo data można je włączyć i wyłączyć w dowolnym momencie, niema wpływu na wyniki i nie miesza się w własnymi wynikami skanowania. W najnowszej wersji postawiłem na użyteczność i niema już tej funkcji. Okroiłem z niepotrzebnych rzeczy po prostu.
-
======================================================================== DOKUMENTACJA TECHNICZNO-BIZNESOWA: HYBRYDOWY MODEL MONETYZACJI ADTECH PROJEKT: SYSTEM KONTROLI ESTETYKI REKLAMOWEJ (TIERED SUBSCRIPTION) AUTORZY: Mateusz Kozik DATA WYDANIA: 22 LIPCA 2026 ROKU STATUS: NIEISTOTNY ======================================================================== 1. ISTOTA MODELU BIZNESOWEGO (PRODUKTU) ------------------------------------------------------------------------ * Przedmiotem innowacji jest hybrydowy model subskrypcyjny typu "Premium Lite" dedykowany dla istniejących już aplikacji mobilnych i desktopowych (w szczególności: streaming audio, podcasty, gry casual, agregatory newsów). * Model redefiniuje dychotomię "wersja darmowa z reklamami vs. droga subskrypcja bez reklam", wprowadzając trzeci poziom monetyzacji (Tier). * Użytkownik końcowy uiszcza obniżoną opłatę abonamentową (np. 30% ceny Premium), w zamian za co otrzymuje unikalne narzędzie kontroli UX: autorski katalog oraz pętlę emisyjną reklam. * System generuje zamkniętą pulę zasobów reklamowych (np. 100 pozycji), z której użytkownik samodzielnie selekcjonuje dokładnie 10 marek lub formatów odpowiadających jego preferencjom estetycznym. * Wybrane 10 reklam wyświetla się sekwencyjnie lub rotacyjnie przez określony interwał czasowy (np. 14 dni), gwarantując użytkownikowi wpływ na klimat i harmonię środowiska aplikacji. * Przykład aplikacyjny: W streamingu audio użytkownik eliminuje agresywne, głośne spoty lektorskie, wybierając z katalogu wyłącznie reklamy o charakterze muzycznym (jazz, ambient), komplementarne z jego playlistą. 2. PERSPEKTYWA RYNKOWA I POZYCJONOWANIE B2B ------------------------------------------------------------------------ * Segment docelowy (Target Market): Wydawcy oprogramowania i aplikacji mobilnych klasy "Mid-Market" (wolumen pobrań w przedziale 100k - 5M) posiadający infrastrukturę reklamową oraz mikropłatności. * Strategia monetyzacji dla autorów: Licencjonowanie modelu technologicznego oraz struktur UX w oparciu o umowę podziału wykreowanych przychodów dodatkowych (Revenue Share) na poziomie 10-20%. * Ścieżka wyjścia (Exit Strategy): Komercjalizacja i wdrożenie systemu u niezależnych wydawców w celu wygenerowania twardych danych finansowych, a następnie sprzedaż całej technologii (Acquisition) globalnym sieciom AdTech lub korporacjom streamingowym. 3. ESTYMACJA FINANSOWA I ARPU LIFT (PROJEKCJA MATEMATYCZNA) ------------------------------------------------------------------------ Symulacja biznesowa przeprowadzona dla średniej wielkości aplikacji: * Wolumen bazy użytkowników niepłacących (Free-Tier): 500 000 MAU. * Współczynnik konwersji do pakietu hybrydowego (Conversion Rate): 2%. * Aktywna baza płatników pakietu pośredniego: 10 000 użytkowników. * Koszt subskrypcji "Lite": 5,00 PLN / miesiąc (niski próg oporu). * Przychód brutto aplikacji z samej subskrypcji: 50 000 PLN / miesiąc. * Prowizja autorska z tytułu wdrożenia modelu (Revenue Share 10%): 5 000 PLN / miesiąc pasywnego przychodu z pojedynczej integracji. * Dodatkowy zysk dla aplikacji: Wzrost wskaźnika eCPM (koszt tysiąca wyświetleń) z uwagi na gwarantowane skupienie uwagi użytkownika, który sam wybrał dany spot reklamowy. 4. ANALIZA ZALEŻNOŚCI I KONTROLA RYZYKA TECHNICZNEGO ------------------------------------------------------------------------ * Wdrożenie systemu odbywa się za pomocą dedykowanej biblioteki (SDK/Plugin), która współpracuje z istniejącymi kontenerami reklamowymi (np. Google AdMob, AppLovin) i systemami mediacji reklamowej. * Ryzyko 1 (Wygasanie kampanii): Kampanie reklamowe w sieciach mogą skończyć się przed upływem 14 dni. Rozwiązanie: Filtrowanie puli wejściowej pod kątem parametru "Flighting" (stabilność budżetu i czasu trwania). * Ryzyko 2 (Limity częstotliwości - Frequency Capping): Reklamodawcy unikają częstego wyświetlania spotu temu samemu użytkownikowi. Rozwiązanie: Wprowadzenie formatu jako "Premium Sponsorship", gdzie marka świadomie płaci za powtarzalną obecność i budowanie lojalności w wybranej grupie. 5. SPECYFIKACJA SYSTEMU UX (KROK 1 & 2: INICJACJA I FETCH API) ------------------------------------------------------------------------ * 5.1. Punkt konwersji (Onboarding Touchpoint): System identyfikuje użytkownika `free_user` i poprzez dedykowany interfejs prezentuje zalety warstwy hybrydowej. Po autoryzacji płatności status w bazie danych zmienia się na `hybrid_premium_user`. * 5.2. Blokada inicjacyjna: Przy pierwszym logowaniu w nowym statusie, aplikacja czasowo blokuje strumień główny i uruchamia konfigurator pętli. * 5.3. Żądanie hurtowe (Bulk Ad Request): Biblioteka SDK wysyła zapytanie do serwera reklamowego o pobranie paczki danych z parametrem hurtowym (np. `bulk_request=100`). * 5.4. Filtrowanie serwerowe: Serwer odrzuca kreacje niespełniające norm demograficznych, technicznych oraz stabilności budżetowej na najbliższe 14 dni. * 5.5. Pamięć podręczna (Local Cache): Przefiltrowane 100 zasobów (ID, logotypy, próbki sensoryczne) trafia do pamięci podręcznej urządzenia. 6. SPECYFIKACJA SYSTEMU UX (KROK 3: INTERFEJS KATALOGU SELEKCJI) ------------------------------------------------------------------------ * 6.1. Wyświetlanie zasobów (Ad Feed): System ładuje z pamięci lokalnej pule 100 reklam w formie czytelnej, kafelkowej siatki (Grid View). * 6.2. Metadane kreacji: Każdy kafel w katalogu zawiera wyłącznie logotyp, nazwę marki, tag kategorii sensorycznej (np. "Audio: Ambient") oraz znacznik ważności kampanii. * 6.3. Mechanizm wyboru (Selection Mechanism): Użytkownik wybiera reklamy poprzez kliknięcie kaflowego przycisku dodania do pętli lub za pomocą uproszczonych gestów swipowania (lewo/prawo). * 6.4. Licznik kontrolny (Slots Counter): Górny pasek interfejsu wyświetla wskaźnik zajętości slotów reklamowych (np. "Wybrano: 4/10"). * 6.5. Blokada wyjścia: System uniemożliwia zatwierdzenie konfiguracji i powrót do głównej zawartości aplikacji, dopóki użytkownik nie zapełni dokładnie wszystkich 10 wolnych slotów w swojej osobistej pętli. 7. ARCHITEKTURA LOGICZNA (KROK 4: ZARZĄDZANIE PĘTLĄ ODTWARZANIA) ------------------------------------------------------------------------ * 7.1. Budowanie kolejki lokalnej (Local Queue): Po wybraniu 10 reklam, system tworzy lokalną tablicę danych zawierającą unikalne ID kampanii. * 7.2. Przeplatanie treści (Ad Interstitial Logic): Podczas normalnego użytkowania aplikacji (np. koniec utworu muzycznego), system blokuje wywołanie losowej aukcji reklamowej (RTB). Zamiast tego pobiera pierwsze wolne ID z lokalnej kolejki. * 7.3. Algorytm odtwarzania (Loop Algorithm): Reklamy są odtwarzane sekwencyjnie (od 1 do 10) lub w trybie losowym bez powtórzeń (Shuffle No-Repeat), aby uniknąć wyświetlenia tej samej marki dwa razy z rzędu. * 7.4. Monitorowanie statusu kampanii: Przy każdym starcie aplikacji system sprawdza aktywność wybranych kampanii. W przypadku wygaszenia któregoś ID, użytkownik otrzymuje monit o wybór 1 reklamy zastępczej. * 7.5. Licznik wygasania (TTL - Time to Live): System uruchamia licznik wsteczny ustawiony na 336 godzin (14 dni). Po tym czasie lokalna kolejka jest czyszczona, a użytkownik zostaje przekierowany do sekcji katalogu. 8. HARMONOGRAM WDROŻENIA I ROZWOJU PROJEKTU (ROADMAP) ------------------------------------------------------------------------ * 8.1. Faza I: Konsolidacja i Certyfikacja Własności (Dni 1–3) - Zabezpieczenie kompletnego pakietu dokumentów kwalifikowanym cyfrowym znacznikiem czasu w celu potwierdzenia pierwszeństwa praw. - Opracowanie klikalnych makiet o wysokiej wierności (Hi-Fi) w Figmie. * 8.2. Faza II: Selekcja i Profilowanie Targetu B2B (Dni 4–7) - Filtrowanie rynku aplikacji w sklepach Google Play/App Store (rozmiar 100k - 5M pobrań) i mapowanie decydentów na platformie LinkedIn. * 8.3. Faza III: Kampania Kontaktowa i Negocjacje NDA (Dni 8–21) - Inicjacja kontaktu B2B (Cold Outreach). Wdrożenie procedury podpisywania Mutual NDA przed ujawnieniem unikalnych struktur pętli UX. * 8.4. Faza IV: Architektura Inżynieryjna MVP (Miesiące 2–4) - Przełożenie specyfikacji logicznej na kod źródłowy uniwersalnego pluginu SDK. Testy laboratoryjne stabilności Local Cache. * 8.5. Faza V: Integracja Pilotażowa i Walidacja Rynkowa (Miesiące 5–6) - Wdrożenie produkcyjne u pierwszego partnera w formule Testów A/B na ograniczonej próbie (5% bazy użytkowników). Analiza ARPU Lift. * 8.6. Faza VI: Skalowanie i Komercjalizacja Masowa (Miesiąc 7+) - Ekspansja rynkowa w modelu SaaS / Revenue Share na bazie twardych wyników finansowych z fazy pilotażowej.
-
PowerShell Pro Obfuscator zabezpiecza skrypty .ps1 dzięki zmianie nazw zmiennych, metod, polimorficznemu szyfrowaniu łańcuchów i liczb, spłaszczeniu przepływu sterowania, automatom stanów (FSA), silnikowi VM, samoobronie integralności, protection linkerowi oraz detekcji debuggowania. wersja online obfuskatora - https://www.pelock.com/powershell-pro-obfuscator/ wersja dla Windows i Linux (UI / CLI) - https://www.pelock.com/products/powershell-pro-obfuscator/download API i pakiety dla Python, C#, Rust, PHP, JS - https://www.pelock.com/products/powershell-pro-obfuscator/api
-
- obfuskacja
- obfuskator
-
(1 więcej)
Tagi:
-
Jak ma się to z legalnego punktu widzenia?
-
Dobrą literaturę znajdziesz na stronie https://lexliber.pl/prawo-gospodarcze-i-handlowe
-
Witam, chciałem zaprezentować jeden ze swoich "zvibecodowanych" projektów OSINT NET Auditor Projekt jest po ogromnych przejściach, ostatecznie zdecydowałem się na aplikację Rust. UI można podejrzeć na www.ipscanner.pl Pracuję obecnie nad GUI, powłoką a dodatki jak skaner, sniffer będzie można sobie zainstalować (WASM). Można to porównać do VS Code
-
1. Wszystko w formie pisemnej, bez pyskówek przez relefon. 2. Jak się pultają wymagaj udokumentowania - rzeczy wykonane niezgodnie z umową/sztuką. 3. Komunikuj, że uwzględnisz udokumentowane zastrzeżenia ale wymagaj faktów. Dokumentacja zdjęciowa, wyniki pomiarów, ekspertyzy dowodzące niezgodności z umową. Nie opinie teścia, słowne elaboraty czy niezadowolenie żony. 4. Żądaj podania podstawy prawnej i konkretnego roszczenia.
-
Cześć, Reklamacje - ktoś mógłby doradzić jak wychodzić z twarzą? Usługa zrealizowana - montaż produktu. Powód reklamacji jest totalnie nie zasadny i bez sensu, wszystko jest wykonane i działa prawidłowo. Oddajecie w takiej sytuacji pieniądze żeby zadbać o dobre imię? Czy idziecie na całego żeby nie zapłacić nic?
-
Adam G zaczął śledzić rust Razer na linuxa
-
Powoli zaczynam rozumieć, jak działa Rust. Chcę napisać swoją pierwszą aplikację do obsługi myszy Razer Trinity w systemie Linux. Aplikacja musi umożliwiać: wykrywanie zmian panelu bocznego myszy, tworzenie profili dla konkretnych paneli, przypisywanie profili do programów oraz aktywację profilu podczas pracy z przypisanym do niego programem. Próbowałem zrobić to w Pythonie, ale utknąłem w martwym punkcie. Teraz postanowiłem spróbować sił w języku Rust. Muszę zaznaczyć, że jestem w tym języku zupełnie początkujący, ale postawiłem sobie to wyzwanie, by się go nauczyć. Na razie dysponuję kodem zamieszczonym poniżej; nie komunikuje się on jeszcze z właściwym sterownikiem myszy (rolę „sterownika” pełni na razie zwykły plik tekstowy), ale pętla działa poprawnie. Jeśli chodzi o OpenRazer, to niestety nie wykrywa on zmian panelu bocznego w tym modelu myszy, więc zamierzam spróbować obsłużyć to bezpośrednio, odczytując dane z `hidraw`. Korzystam z pomocy sztucznej inteligencji przy tworzeniu aplikacji, ale nie zlecam jej napisania całego kodu; używam jej raczej do zrozumienia struktury języka i uzyskiwania sugestii dotyczących rozwiązań. Oto dotychczasowe efekty – to mój pierwszy dzień programowania, choć spędziłem już około 10 godzin na analizie materiałów o języku Rust dostępnych w sieci. Dajcie znać, co o tym sądzicie i czy macie jakieś pomysły. Z góry dziękuję za pomoc. // Importujemy potrzebne narzędzia z biblioteki standardowej Rusta (std) use std::fs; // fs - do pracy z plikami (zapis/odczyt) use std::thread::sleep; // sleep - do wstrzymywania działania programu use std::time::Duration; // Duration - do określania czasu (np. sekundy) /// 1. DEFINICJE TYPÓW DANYCH (Poza funkcją main) // Enum (typ wyliczeniowy) reprezentuje zamkniętą listę możliwości. // Makro #[derive(...)] automatycznie generuje dodatkowe funkcjonalności: // - Debug: pozwala na wypisywanie enuma w konsoli za pomocą {:?} // - PartialEq: pozwala na porównywanie wartości za pomocą "==" // - Clone: umożliwia tworzenie kopii tego obiektu w pamięci #[derive(Debug, PartialEq, Clone)] enum TypPanelu { DwaPrzyciski, SiedemPrzyciskow, DwanasciePrzyciskow, } // Struktura to kontener łączący różne powiązane ze sobą dane. #[derive(Debug, Clone)] struct Profil { nazwa: String, // Ludzka nazwa profilu program: String, // Nazwa procesu/programu (np. "csgo") typ_panelu: TypPanelu, // Jaki panel jest wymagany dla tego profilu (używamy enuma powyżej) } /// 2. GŁÓWNA FUNKCJA PROGRAMU fn main() { // Tworzymy przykładowy profil. // String::from() jest potrzebne, bo tekst w cudzysłowie to tzw. &str (niezmienny wycinek), // a nasza struktura wymaga pełnoprawnego, modyfikowalnego obiektu typu String. let profil_do_gier = Profil { nazwa: String::from("Profil do CS-a"), program: String::from("csgo"), typ_panelu: TypPanelu::SiedemPrzyciskow, }; // Wypisujemy informacje startowe w konsoli println!("Wczytano profil: {} (Wymaga panelu: {:?})", profil_do_gier.nazwa, profil_do_gier.typ_panelu); println!("--- Uruchamiam monitorowanie myszki ---"); // Zmienna mutowalna (mut), która służy jako "pamięć" programu. // Przechowuje stan panelu z poprzedniej sekundy, dzięki czemu program // nie wyświetla komunikatów cały czas, a reaguje TYLKO na zmiany. let mut poprzedni_panel = String::new(); // Uruchamiamy nieskończoną pętlę (tzw. demon lub usługa w tle) loop { // Próba odczytania pliku tekstowego symulującego sterownik. // fs::read_to_string zwraca typ Result (sukces lub błąd), dlatego musimy użyć 'match'. let wynik_czytania = fs::read_to_string("C:\\Users\\Adam Graszk\\zgadywanka\\razer_panel.txt"); match wynik_czytania { // PRZYPADEK 1: Plik udało się odczytać, a jego zawartość trafia do zmiennej `zawartosc` Ok(zawartosc) => { // .trim() usuwa białe znaki z początku i końca (np. spacja lub znak nowej linii \n) let oczyszczony_tekst = zawartosc.trim(); // Sprawdzamy, czy obecna zawartość pliku różni się od tego, co zapamiętaliśmy sekundę temu if oczyszczony_tekst != poprzedni_panel { // Drugi match: sprawdzamy co dokładnie znajduje się w pliku match oczyszczony_tekst { "2" => println!("Wykryto panel z 2 przyciskami!"), "7" => println!("Wykryto panel z 7 przyciskami!"), "12" => println!("Wykryto panel z 12 przyciskami!"), // Gwiazdka/podkreślenie (_) to tzw. catch-all. Obsługuje każdy inny tekst _ => println!("Nieznany panel lub brak panelu!"), } // Aktualizujemy naszą "pamięć" o nowy stan panelu, konwertując &str na String poprzedni_panel = oczyszczony_tekst.to_string(); } } // PRZYPADEK 2: Nie udało się odczytać pliku (np. został usunięty lub brak uprawnień) // Podkreślenie przed '_blad' mówi kompilatorowi, że wiemy o istnieniu błędu, ale go ignorujemy. Err(_blad) => { println!("Ostrzeżenie: Nie można odczytać sterownika. Próba za sekundę..."); // Resetujemy pamięć, aby po naprawieniu błędu program na nowo wykrył panel poprzedni_panel = String::new(); } } // Wstrzymujemy działanie pętli na 1 sekundę, aby program nie zużywał 100% mocy procesora sleep(Duration::from_secs(1)); } }
