Cała aktywność
Ten kanał aktualizuje się automatycznie
- Wczoraj
-
MrMakowy dołączył do społeczności
-
======================================================================== DOKUMENTACJA TECHNICZNO-BIZNESOWA: HYBRYDOWY MODEL MONETYZACJI ADTECH PROJEKT: SYSTEM KONTROLI ESTETYKI REKLAMOWEJ (TIERED SUBSCRIPTION) AUTORZY: Mateusz Kozik DATA WYDANIA: 22 LIPCA 2026 ROKU STATUS: TAJEMNICA PRZEDSIĘBIORSTWA (PROJEKT CHRONIONY NDA) ======================================================================== 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.
- Ostatni tydzień
-
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:
- Wcześniej
-
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)); } }
-
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 😀.
-
- magisterka
- studia
- (3 więcej)
-
Najlepiej tiktok
-
Zainteresowanie usługami za oceanem
topic odpowiedział Bartosz Wójcik TierNet_Patryk w Hardware i software
Serwer w US dla klientów z Europy = lagi.- 1 odpowiedź
-
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
-
- rust
- dowód rejestracyjny
-
(2 więcej)
Tagi:
-
Nazywam zmienił swoje zdjęcie profilowe
-
Usługa monitorowania dostępności stron internetowych
topic odpowiedział bbprojectnet bbprojectnet w Moje projekty
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.- 7 odpowiedzi
-
Usługa monitorowania dostępności stron internetowych
topic odpowiedział Bartosz Wójcik bbprojectnet w Moje projekty
Jak dla mnie największa bolączka to że nie masz tego po angielsku.- 7 odpowiedzi
-
Usługa monitorowania dostępności stron internetowych
topic odpowiedział Bartosz Wójcik bbprojectnet w Moje projekty
Masz w ogóle jakichś klientów?- 7 odpowiedzi
-
Usługa monitorowania dostępności stron internetowych
topic odpowiedział bbprojectnet bbprojectnet w Moje projekty
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- 7 odpowiedzi
-
Ja bym wybrał subdomenę, druga instalacja wordpress w katalogu może powodować problemy
-
Jak aktualne to zapraszam do kontaktu
-
Witam. Szukam konkretnego programisty pasjonata potrafiącego analizować kod gotowego programu i rozumieć jego funkcjonowanie.
-
# 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
-
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!
- 1 odpowiedź
-
EnigmaX zmienił swoje zdjęcie profilowe
-
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.
-
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ą.
-
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ą
