Skocz do zawartości

Cała aktywność

Ten kanał aktualizuje się automatycznie

  1. Wczoraj
  2. 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
  3. Ostatni tydzień
  4. 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.
  5. 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?
  6. Wcześniej
  7. 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)); } }
  8. Cześć, Piszę pracę magisterską na temat wpływu długotrwałej pracy przy komputerze na dolegliwości bólowe kręgosłupa i byłbym bardzo wdzięczny za wypełnienie krótkiej anonimowej ankiety. Temat ankiety: „Wpływ długotrwałej pracy przy komputerze na dolegliwości bólowe kręgosłupa” Wypełnienie zajmuje tylko kilka minut: https://docs.google.com/forms/d/e/1FAIpQLSeDVbzlWgJnN_6kElBPmaCDQcx2Zb8BhiiFPK70dTEIm-ksqA/viewform W ramach podziękowania chętnie odpowiem na pytania do przyszłego fizjoterapeuty (o ile jakieś macie :P). Z góry dziękuję każdemu za pomoc 😀.
  9. Najlepiej tiktok
  10. Serwer w US dla klientów z Europy = lagi.
  11. Jeśli szukasz jak odkodować dane z dowodu rejestracyjnego samochodu, jak odkodować kod aztec 2d w dowodzie rejestracyjnym (rozpoznawanie obrazu) i chcesz to zrobić w rust to powstała do tego dedykowana biblioteka https://crates.io/crates/aztec-decoder Najpierw należy dodać moduł do swojego projektu komendą: cargo add aztec-decoder Użycie jest banalnie proste use aztec_decoder::AZTecDecoder; #[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { let decoder = AZTecDecoder::new("ABCD-ABCD-ABCD-ABCD"); let result = decoder.decode_image_from_file("zdjecie-dowodu.jpg").await?; if result["Status"] == true { println!("{}", serde_json::to_string_pretty(&result)?); } Ok(()) } Wersja dla Rust jest tylko częścią ogromnego projektu z obsługą wielu innych języków programowania https://www.pelock.com/pl/produkty/dekoder-aztec
  12. Myślę że moje pokłady cierpliwości i zaangażowania na tym etapie by się już wyczerpały gdyby nie udało mi się pozyskać klientów - tak, mam Ale bolączką dla siebie, czy w rozumieniu że ogranicza mi to ekspansję? Zasadniczo głównym hamulcem wersji innej niż polska, jest kwestia rozliczeń i transakcji zagranicznych - księgowość/podatki, etc. Aczkolwiek zmierzam ku temu.
  13. Jak dla mnie największa bolączka to że nie masz tego po angielsku.
  14. Cześć! Minął jakiś czas, więc wrzucam krótki update w stylu „co nowego”. Przede wszystkim przebudowałem od podstaw wykres linii czasu monitora. Zakres danych został rozszerzony nawet do trzech lat wstecz, a oprócz samej dostępności doszły dodatkowe metryki, takie jak czas połączenia, czas do pierwszego bajtu czy rozmiar odpowiedzi. Na wykresach i w statystykach pojawiły się też wartości typu p50, p75 oraz średnia, co daje trochę lepszy obraz stabilności usług w czasie. Doszły również nowe kanały powiadomień - uMonitor integruje się teraz z usługą Pushover, dzięki czemu alerty mogą trafiać bezpośrednio na telefon. Pojawiła się też możliwość samodzielnego definiowania, które statusy HTTP są uznawane za poprawne, co ułatwia monitorowanie mniej standardowych endpointów. Nowością jest osobna podstrona awarii, zawierająca szczegółowe dane dotyczące incydentu oraz automatyczną analizę AI próbującą wskazać potencjalną przyczynę problemu. Dodatkowo doszły powiadomienia o zbliżającym się wygaśnięciu certyfikatu SSL. Eksperymentalnie uruchomiłem także nowe, uproszczone narzędzie do monitorowania dostępności i awarii popularnych serwisów: https://umonitor.eu/uptime-monitor/ Poza tym, jak zwykle, po drodze było sporo mniejszych usprawnień i poprawek. Jeśli ktoś ma ochotę rzucić okiem albo podzielić się feedbackiem, chętnie posłucham
  15. Ja bym wybrał subdomenę, druga instalacja wordpress w katalogu może powodować problemy
  16. Jak aktualne to zapraszam do kontaktu
  17. Witam. Szukam konkretnego programisty pasjonata potrafiącego analizować kod gotowego programu i rozumieć jego funkcjonowanie.
  18. # author : Radek Z. and troszke Kuba S. (akustyczny kolega) import pygame import random pygame.init() class GenDungeon() : def __init__(self , max_plate) : self.max_plate = max_plate self.map = [] self.room_type = { 0 : "empty_room" , 1 : "start_room" , 2 : "end_room" , 3 : "enemy_room" , 4 : "boss_room" , 5 : "chest_room" } def gen_map(self ) : self.gen_clear_map() self.map[self.max_plate // 2][self.max_plate // 2] = 1 enemy_room = random.randint(4, 6) chest_room = random.randint(2, 5) boss_room = random.random() if boss_room < 0.2: boss_room = 1 else: boss_room = 0 for _ in range(enemy_room): self.gen_room(3) print("enemy room") for _ in range(chest_room): self.gen_room(5) print("chest room") for _ in range(boss_room): self.gen_room(4) print("boss room") self.gen_room(2) def gen_clear_map(self) : self.map = [] for x in range(self.max_plate) : column = [] for y in range(self.max_plate) : column.append(0) self.map.append(column) def gen_room(self, room_type): while True: x = random.randint(0 , self.max_plate-1) y = random.randint(0 , self.max_plate-1) somsiad = 0 start_room = False cord = ( (x + 1 , y), (x - 1 , y), (x , y + 1), (x , y - 1) ) for h in cord: try: cx , cy = h if self.map[cx][cy] in (1 ,2 , 3 , 4 , 5): somsiad += 1 if self.map[cx][cy] == 1: start_room = True except: pass if (room_type == 2) or (room_type == 4) or (room_type == 5): if (somsiad > 0 and somsiad < 4 and not start_room) and self.map[x][y] == 0: self.map[x][y] = room_type break else: if (somsiad > 0 and somsiad < 4) and self.map[x][y] == 0: self.map[x][y] = room_type break self.gen_door() self.update_door() def gen_door(self): self.door = [] for x in range(self.max_plate): column = [] for y in range(self.max_plate): column.append([False , False , False , False]) self.door.append(column) for x in range(self.max_plate): for y in range(self.max_plate): if self.map[x][y] == 1: self.door[x][y] cord = ( (x + 1 , y), (x , y + 1), (x , y - 1), (x - 1 , y) ) for c in cord: sx , sy = c if self.map[sx][sy] != 0: if sy == y-1: self.door[x][y][0] = True elif sy == y+1: self.door[x][y][1] = True elif sx == x+1: self.door[x][y][2] = True elif sx == x-1: self.door[x][y][3] = True self.update_door() for _ in range(6): for x in range(self.max_plate): for y in range(self.max_plate): if (self.door[x][y] == [False , False , False , False]) and (self.map[x][y] > 0): try: if True in self.door[x][y-1]: self.door[x][y][0] = True except: pass try: if True in self.door[x][y+1]: self.door[x][y][1] = True except: pass try: if True in self.door[x-1][y]: self.door[x][y][3] = True except: pass try: if True in self.door[x+1][y]: self.door[x][y][2] = True except: pass self.update_door() def update_door(self): for x in range(self.max_plate): for y in range(self.max_plate): try: if self.door[x][y-1][1] == True: self.door[x][y][0] = True except: pass try: if self.door[x][y+1][0] == True: self.door[x][y][1] = True except: pass try: if self.door[x+1][y][3] == True: self.door[x][y][2] = True except: pass try: if self.door[x-1][y][2] == True: self.door[x][y][3] = True except: pass """ - zamienić potem try except na lepsze sprawdzanie wyjścia poza mapę """ class Display(): def print_room(self , room , cord): x , y = cord cords = ( x * 50 , y * 50 , 50 , 50 ) match room: case 0 : color = "grey" case 1 : color = (255 , 175 , 10) case 2 : color = (0 ,200 , 0) case 3 : color = (255 , 0 , 0) case 4 : color = (255 , 255 , 0) case 5 : color = (0 , 0 , 255) case None : color = "black" pygame.draw.rect(screen , color , cords) def print_door(self , cord): x , y , pos = cord if pos[0]: cords = ( x * 50 + 20 , y * 50 , 10 , 10 ) pygame.draw.rect(screen , "green" , cords) if pos[1]: cords = ( x * 50 + 20 , y * 50 + 40 , 10 , 10 ) pygame.draw.rect(screen , "green" , cords) if pos[2]: cords = ( x * 50 + 40 , y * 50 + 20, 10 , 10 ) pygame.draw.rect(screen , "green" , cords) if pos[3]: cords = ( x * 50 , y * 50 + 20 , 10 , 10 ) pygame.draw.rect(screen , "green" , cords) def print_map(self , g) : plate = g.map for x in range(g.max_plate ) : for y in range(g.max_plate) : self.print_room(plate[x][y] , (x , y) ) for x in range(g.max_plate): for y in range(g.max_plate): self.print_door((x , y , g.door[x][y])) def main() : global screen sze = 50 * 11 screen = pygame.display.set_mode((sze , sze)) pygame.display.set_caption("dungeony") g = GenDungeon(11) d = Display() g.gen_map() while True : for event in pygame.event.get() : if event.type == pygame.QUIT : quit() screen.fill("black") d.print_map(g) pygame.display.update() if __name__ == "__main__" : main() #jakby co to python wersja 3.13.9
  19. Cześć wszystkim, ostatnio coraz częściej słyszę o firmach z Polski, które rozważają lub już przenoszą swoje serwery do USA (często w ramach chmury lub własnej infrastruktury). Zastanawiam się, jak to wygląda z Waszej perspektywy i czy rzeczywiście widać trend „przemieszczania” infrastruktury poza Europę. Główne pytanie, które mi się nasuwa: Czy w Polsce rośnie zainteresowanie lokalizacją serwerów w Ameryce, czy to raczej pojedyncze przypadki? Chętnie poznam Wasze opinie — zarówno z perspektywy osób pracujących w IT, jak i z punktu widzenia firm, które podejmowały takie decyzje. Dzięki za odpowiedzi!
  20. Najlepsza strategia: jeden dobry długi film główny + pokrojenie go na krótsze klipy pod różne kanały. Wtedy maksymalizujesz zwrot z inwestycji.
  21. Mam wątpliwości - film reklamowy vs seria krótkich video. Co lepiej działa w internecie? Słyszałem że ludzie mają krótką uwagę i długie materiały nie działają.
  22. No my mamy w firmie (25 osób) wszystkie stanowiska z regulacją od 2 lat. Pracownicy rzeczywiście korzystają - około 70% zespołu regularnie zmienia pozycję, pozostali używają okazjonalnie. Ogólnie trudno ejst ocenić jak podniosła się produktywność ale ludzie te biurka lubią
  23. Dzień dobry, wyposażamy nowe biuro dla 10-osobowego zespołu IT. Rozważamy biurka elektryczne z regulacją dla wszystkich. Czy to faktycznie dobra inwestycja? Jak to wpływa na zespół? Pracownicy faktycznie z tego korzystają czy to tylko gadżet który szybko się znudzi?
  24. Cześć, zastanawialiście się dlaczego tak szybko usuwane są bankomaty / wpłatomaty z naszych osiedli?? Tu jest odpowiedź: https://www.youtube.com/watch?v=YGjX0WQJQwA Polecam!
  25. Kto by to spamiętał w ogóle
  26. AutoIt ma więcej wbudowanych funkcji w tym celu i można od razu natywne exe tworzyć.
  1. Załaduj więcej aktywności
×
×
  • Utwórz nowe...