Sztuczna inteligencja (AI) w Unreal Engine 4

Wstęp

Podstawowe Pojęcia

Tradycyjny Behaviour Tree, a Behaviour Tree w UE4

Behaviour Tree w UE4

Blackboard

Rodzaje nodów

Observer Aborts

Notify observer

AI w Blueprintach

AI w C++

Inne

Zakończenie

WSTĘP

Sztuczna inteligencja (AI) symulująca zachowania człowieka (możliwość podejmowania decyzji w zależności od zmieniającej się sytuacji) jest wielkim wyzwaniem stojącym przed programistami. I chociaż jeszcze wiele brakuje do ideału, to jednak uczyniono spore postępy w odtworzeniu procesu myślowego człowieka. Obecne silniki gier są w stanie symulować wiele zachowań ludzkich, a grający w grę ma wrażenie, że jego przeciwnicy “myślą”, bowiem obserwuje różne zachowania AI botów (NPC) zależnie od panującej sytuacji na scenie gry. Duże postępy w tej dziedzinie możemy obserwować w Unreal Engine 4, gdzie mamy rozbudowany zestaw narzędzi dla implementacji algorytmów symulacji zachowań ludzkich. Przede wszystkim należy zwrócić uwagę, że UE4 zawiera mechanizmy odzwierciedlające “części ciała” człowieka w celu lepszego pogrupowania logiki:

Character – ciało, gdzie implementujemy poruszanie się postaci

AI Controller – głowa, gdzie jest logika kontrolującą ciało

Behaviour Tree – mózg, gdzie następuje proces podejmowania decyzji (myślenia)

Blackboard – pamięć, gdzie przechowywane są pewne informacje

PODSTAWOWE POJĘCIA

UE4 dostarcza następujące narzędzia dla implementacji AI:

Behavior Tree – Podstawowy element AI w UE4. Umożliwia tworzenie różnych stanów i logiki dla AI. Na podstawie tam określonych warunków są podejmowane przez postać złożone decyzje.

Navigation Component – Obsługa poruszania się dla AI bota.

Blackboard – Przechowywanie lokalnych zmiennych dla AI.

Enumeration – Tworzenie listy stanów AI bota, między którymi możemy przełączać.

Target Point – Punkty docelowe, między którymi porusza się AI bot. Klasa Waypoints pochodzi z klasy Target Point, którą tworzy podstawową formę Path node.

AI Controller dla Character – Kontroler obsługuje komunikację między światem a kontrolowanym Pawnem (w tym wypadku postacią) dla AI bota.

Navigation Volumes – Tworzenie Navigation Mesh w środowisku dla działania Path Finding dla AI bota.

NavMesh Bounds volume – Określa obszar dla NavMesh.

Nav Modifier volume – Dostarczony z klasą Nav Area. Ma wpływ na nawigacyjne atrybuty NavMesh Bounds volume, gdzie te dwa przecinają się.

Navigation Mesh (NavMesh) – Wyznaczenie obszarów, gdzie AI bot może poruszać się. Poligonalna reprezentacja poziomu, gdzie każdy poligon działa jak pojedynczy nod połączony z innymi najbliższymi nodami. Generowana jest automatycznie przez silnik i jest możliwie zoptymizowana.

Path Finding – Znajdowanie najkrótszej drogi między dwoma punktami.

Path Following (Path nodes) – Podobnie jak NavMesh, Path Nodes wyznaczają obszar, gdzie AI może się poruszać.

Steering behaviors – Unikanie przeszkód, czyli wpływanie na ruch postaci, w zależności od sytuacji.

Sensory systems – Krytyczne dane jak najbliższe postacie, dźwięki, kryjówki i inne informacje, które mogą wpływać na ruch AI bota. Tworzenie realistycznego ruchu i zachowania w świecie. Zwykle składa się z kilku modułów takich jak wzrok, słuch i pamięć, aby zbierać informacje o środowisku.

Randomness and probability – podejmowanie racjonalnych decyzji przez AI bota.

Finite State Machines (FSM) – model zdefiniowania reguł przechodzenia między stanami. Behaviour Tree w UE4 ma zimplementowany hierarchiczny FSM.

Observer Aborts Sprawdzanie warunków w dekoratorach, które obserwują swoje wartości i przerywają, jeśli trzeba, kiedy nastąpi zmiana stanu.

Machine learning – Zdolność AI bota uczenia się z sytuacji.

Tracing – Wykrywanie obiektów przez ray tracing przez AI bota. Pojedynczy promień kolidujący z aktorem zwraca nam informacje o tym akotrze.

A* Algorithm – W Path Finding oblicza najkrótszą sterowną ścieżkę między dwoma punktami położonymi w NavMesh. Zawiera listę punktów do przejścia i obliczany jest koszt przejścia z jednego punktu do drugiego na podstawie heurystycznych wartości. Przejście następuje przy jak najmniejszym koszcie.

TRADYCYJNY BHEAVIOUR TREE A BEHAVIOUR TREE W UE4

W dzisiejszych czasach BT zastępują Finite State Machine (FSM), które były oparte na statycznym procesie, gdyż stany i zasady zmiany między stanami były ustalone statycznie. Nie uwzględniało to jednak dynamiki zachodzącej w świecie. BT w porównaniu z FSM dostarcza wiekszej elastyczności i możliwości przejścia między stanami, dlatego jest powszechną techniką w tworzeniu AI w grach. Każdy silnik gry ma własną implementację BT, gdyż nie istnieje jeden obowiązujący model. Zwykle BT jest strukturą hierarchiczną, którą możemy przedstawić jako:

Root —>Nody Złożone (kompozytowe) —>Nody Złożone/Zadania

Tradycyjnie BT jest wykonywane od korzenia w dół do tzw. Nodów-liści, czyli węzłów końcowych (konkretnych zadań do wykonania). Dzieje się to za każdym razem, kiedy drzewo jest wykonywane, czyli teoretycznie co ramkę, a w praktyce prawdopodobnie rzadziej. Natomiast BT w UE4 jest sterowany zdarzeniami, dzięki czemu unikamy ciągłej i ciężkiej pracy w każdej ramce. Zamiast nieustannego sprawdzania, czy nastąpiła jakakolwiek zmiana, BT w UE4 pasywnie nasłuchuje zdarzeń, które mogą wywołać zmiany w drzewie. Ważne to jest dla wydajności i debugowania, gdyż lepiej kontrolujemy przepływ wykonania i dzięki temu wiemy, gdzie powstają błędy lub nieprawidłowe zachowania. Możemy przerwać wykonanie drzewa w jakimkolwiek momencie, cofnąć się czy pójść do przodu, sprawdzić wartość w tablicy (Blackboard).

W zwykłych BTs warunki są po prostu samymi zadaniami (tasks), czyli nodami liści, które albo dają sukces albo porażkę. W UE4 warunki są w dekoratorach, co daje nam pewne korzyści jak lepszą przejrzystość drzewa (dekoratory są w początkach gałęzi, a same liście zadaniami). Dekoratory są także obserwatorami (observers) w krytycznych nodach drzewa. Obserwują, czyli czekają na zdarzenia.

Normalne drzewa często używają nodów współbieżnych złożonych (parallel composite) dla obsługi jednoczesnych zachowań. Wykonują jednocześnie na wszystkich swoich nodach potomnych. Specjalne zasady ustalają, jak mają działać, jeśli jedno lub więcej tych nodów potomnych zakończy swoje zadanie (zależnie od żądanego zachowania).

Nody współbieżne niekoniecznie są wielowątkowe (czyli rzeczywiste wykonywanie zadań w tym samym czasie). W praktyce często zadania są wykonywane w jednym wątku. Nody współbieżne utrudniają optymizację wydajności, zwłaszcza w tworzeniu drzew sterowanych zdarzeniami, dlatego używamy ich jeśli naprawdę tego potrzebujemy. UE4 używa tutaj nodów prostych współbieżnych i specjalnego typu nodów zwanych serwisami. Nie są to więc zwykłe nody, znane z tradycyjnych drzew. Nody proste współbieżne pozwalają tylko na podłączenie dwóch nodów potomnych: jeden to pojedyncze zadanie (z opcjonalnymi dekoratorami), a drugi to może być cała gałąź. Nod prosty współbieżny możemy interpretować jako “kiedy robimy A, zrób także B”. Realnym przykładem użycia może być sytuacja, kiedy idąc w kierunku wroga, równocześnie jego atakujemy. Zwykle A jest podstawowym zadaniem, a B jest zadaniem dodatkowym, np. czekającym na wykonanie zadania A.

BEHAVIOUR TREE W UE4

BT w UE4 rozwiązuje pewne problemy w AI rozdzielając nasz kod na dane (zawarte w tablicy BB) i logikę zawartą w BT. Wykonanie logiki jest więc sterowane danymi. Bez tego rozdziału, mielibyśmy spory nieporządek przy większych projektach.

Tradycyjne drzewo zawsze wykonuje od korzenia, co jest zbyt kosztowne, dlatego w UE4, są pewne różnice. Po pierwsze wykonanie zatrzymuje się w jednym z nodzie złożonym (na daną chwilę aktywnym, bedącym “odpowiednim” w danym czasie) i jego nodach potomnych do czasu, kiedy cała sekwencja nodów dojdzie do końca wykonania lub nod złożony otrzyma informację o wcześniejszym zakończeniu wykonania. Jednak w takim rozwiązaniu musimy mieć inne nody do kontroli przerwania wykonania, czyli dekoratory i serwisy. Tutaj serwis w selektorze decyduje którą gałąź (sekwencję) ruchomić na podstawie posiadanych danych.

W skrócie system AI w UE4 to BT w świecie gry, uczące się z tego świata i używające pozyskanych informacji dla modyfikacji zachowań. Warto przy okazji zauważyć, że serwisy otrzymują informacje z BB i je zmieniają zapisując je tam ponownie, gdy dekorator tylko otrzymuje gotowe informacje z BB, na podstawie czego określana jest wartość w warunku. Kiedy wykonanie w drzewie zostanie zrealizowane, wykonanie kończy się wypełnieniem zadania w świecie. Dzięki temu AI bot wchodzi w interakcje ze światem i trwa to do czasu, kiedy AI bot jest usunięty ze świata. Dekoratory i serwisy są ze sobą połączone w jeden system.

BT w UE4 zawiera (na podstawie tablicy) trzy podstawowe elementy symulujące funkcje ludzkie:

Serwisy (services) – Zmysły, czyli odbieranie bodźców zewnętrznych

Dekoratory (decorators) – Podejmowanie decyzji w obliczu zmieniającej się sytuacji

Zadania (tasks) – Konkretne działania

Dekorator prosi BB o informacje, aby wiedzieć, czy wartość jest true czy false, jak to ma miejsce w instrukcji if w programowaniu. Dlatego zwany jest także warunkiem. Serwis zaś obserwuje świat i zmienia wartości w BB zależnie od tego, co zachodzi w świecie. Dlatego zwany jest także pętlą. Przykładowo serwis sprawdza, czy AI bot ma stan cooldown podczas strzelania z broni i zapisuje wynik w BB. Następnie dekorator odpytuje BB, czy AI bot jest w stanie cooldown. I postępuje dalej zależnie od zwróconej wartości, kończąc na wykonaniu któregoś z zadań.

BT w UE4 zawiera cztery główne typy nodów:

Nody złożone zwane też kompozytowymi (composites, czyli selectors, sequences and simple parallels) – początki gałęzi, czyli części drzewa, które mogą funkcjonować niezależnie.

Zadania (tasks) – konkretne zadania do wykonania.

Dekoratory (decorators) – w composite nodes sprawdzają, czy nody potomne mogą być wykonywane lub czy nie przerwać wykonanie całej gałęzi.

Serwisy (services) – funkcje, które są uruchamiane co jakiś czas w composite nodes, sprawdzające cały czas stan i uaktualniające dane.

Wszystkie typy nodów zwracają wartość: sukces, porażka lub działanie. Mają także swoją kolejność wykonania czyli priorytet, gdzie nod położony po lewej ma wyższy priorytet od noda położonego po prawej. Kolejność (priorytet) jest widoczny na podstawie małych numerków po prawej strony nodów poczynając od 0.

BLACKBOARD

Tablica (Blackboard, odpowiada pamięci w programowaniu) – dane są tu zapisywane i odczytywane zależnie od potrzeby podobnie jak ma to miejsce ze zmiennymi w programowaniu. Służy więc do centralizowania danych i przechowywania obliczeń. Jest to dzielona przestrzeń pamięci. Dane mogą być zapisywane dla pojedynczej postaci AI jak i dzielone między wieloma postaciami AI. Tablica może dziedziczyć z innej tablicy jak ze zwykłej klasy. TB ma dostęp do danych trzymanych BB w czasie wykonania. BB może przechowywać specyficzne dane dla każdej postaci. Kiedy zmienne w BB są instanced i synced, mamy zmienne globalne dla danego AI bota. Inaczej mówiąc, każda instancja postaci ma swoje własne (indywidualne) wartości w tablicy. Można ustawić wartość tablicy dla synchronizacji między wszystkimi instancjami tej postaci przez zaznaczenie instance synced w panelu Details. Jeśli mamy kilka postaci AI dzielących wartości zmiennej w tablicy, decydujemy, czy wartości dla każdej z nich będą oddzielne np. jeden ma zdrowie 50 drugi 100, czy wartości te ma być jednakowe dla wszystkich postaci, czyli np. wszystkie postacie AI mają zdrowie 75. Jeśli więc nie zaznaczymy tej opcji, postacie będą zachowywały swoje własne zdrowie, a jak zaznaczymy – będą miały takie samo. Funkcja ta więc replikuje zmienną do każdej instancji klasy BB na świecie.

RODZAJE NODÓW

Są dwa główne typy nodów: nody złożone (kompozytowe) i nody końcowe (liście). Zasadniczą różnicą między nimi jest to, że nody kompozytowe mają nody potomne, a nody końcowe nie. Trzecim typem nodów są nody sterujące dla warunków sterujących wykonaniem w drzewie. Wszystkie te nody zwracają wartość do swoich nodów nadrzędnych, jeśli wykonają zadanie lub nie. Możemy zatem wyróżnić trzy stany nodów:

– sukces (Success)

– porażka (Failure)

– działanie (Running)

Pierwsze dwa informują noda rodzicielskiego, że operacja zakończyła się sukcesem lub porażką. Trzeci stan nie jest jeszcze zdefiniowany, ponieważ operacja ciągle trwa.

Nody złożone (Composite Nodes) – root gałęzi w drzewie i podstawowy blok budujący drzewo, mogący działać niezależnie. Nody złożone nadają porządek wykonania nodów, decydują jaką gałąź wykonać w danym momencie, czyli mają wplyw na przepływ kontroli w drzewie. Mogą mieć dekoratory i/lub serwisy. Nodami potomnymi mogą być zadania lub inne nody złożone, czyli podrooty dla podgałęzi. W ten sposób możemy zbudować wielopoziomowe drzewo.

Selektor (Selector, logiczny OR) – Ma tylko jeden input i tylko jeden output. Wykonuje od lewej do prawej tylko jeden ze swoich nodów potomnych (nawet jeśli pozostałe nody również zadziałałyby) na podstawie posiadanych warunków (dekoratora i/lub działającej usługi). Jeśli któryś z tych nodów zadziała, selektor kończy działanie całej gałęzi z sukcesem i nie wykonuje innych swoich nodów potomnych. Jeśli pierwszy od lewej nod potomny nie zadziała, wykonanie idzie do drugiego z kolei, jeśli ten nie zadziała, idzie do trzeciego z kolei itd. Jeśli wszystkie nody potomne nie zadziałają, cała gałąź selektora także nie zadziała i zwróci porażkę. Wtedy wykonanie idzie do noda wyżej, który także może być selektorem i przekaże wykonanie do innej swojej gałęzi (także może być selektor i jego nody potomne). Innymi słowy, selektor wybiera (select) właściwe w danym momencie zadanie w nodzie potomnym z kilku zadań do wykonania na podstawie posiadnych warunków, a jeśli wszystko zawiedzie, wykonanie opuszcza gałąź drzewa i idzie do innej (jeśli takowa jest) za pośrednictwem noda nadrzędnego. Selektor jest odpowiedni dla stanu, którego celem nie jest sprawdzenie, czy nody są wykonane z sukcesem.

Sukces – przynajmniej jeden nod potomny zwraca Sukces

Porażka – wszystkie nody potomne zwracają Porażkę, ani jeden nie zwraca Sukces

Sekwencja (Sequence, logiczny AND) – Ma tylko jeden input i tylko jeden output. Wykonuje od lewej do prawej nody potomne jeden za drugim w kolejności w oparciu o warunek dekoratora i/lub działającą usługę i jeśli nod potomny zadziała, zamiast kończenia działania całej gałęzi, idzie do następnego, jeśli drugi zadziała, idzie do trzeciego itd. Kończy działanie całej gałęzi z sukcesem, jeśli wszystkie nody zostaną wykonane z sukcesem. Jeśli zaś napotka nod, który nie zadziała, sekwencja zwraca porażkę i przerywa wykonanie pozostałych nodów. Innymi słowy, sekwencja wykonuje sekwencyjnie zadania w swoich nodach potomnych do momentu napotkania zadania, którego nie może wykonać. Aby sekwencja zwróciła sukces, wszystkie jej nody potomne muszą zwrócić sukces, dzięki czemu sekwencja może być wykonana pomyślnie.

Sukces – wszystkie nody potomne zwracają Sukces

Porażka – przynajmniej jeden nod potomny zwraca Porażkę

Prosty równobieżny (Simple parallel) – Wykonuje więcej niż jeden nod potomny w jednym wykonaniu (jednocześnie, równobieżnie). W UE4 prosty równobieżny może mieć tylko dwa nody potomne: nod pojedynczy np. odtwarzanie dźwięku (zadanie) i grupę nodów selektora, zawierającą z kolei dwa nody (zadania): MoveTo i Wait. Zarówno dźwięk jak i selektor (zawierający MoveTo i Wait) będą wykonywane jednocześnie. Ma zatem jeden input i dwa outputs (jeden tylko dla zdań, a drugi taki jak outputs w innych composite nodes: nie tylko dla zadań). Jako jedyny nod złożony ma parametry dla trybu zakończenia wykonania całej gałęzi (Finish Mode: immediate, delayed). Domyślnie jest immediate. Prosty równobieżny służy zatem do tworzenia stanu, wymagającego innego zadania, które zawsze będzie wywoływane z pierwszym stanem aż ten pierwszy stan zwróci sukces. Np. Poruszamy się i równocześnie pozostałe zadanie może podejmować decyzję na szczycie tego pierwszego, np. strzelanie z broni, przeładowanie, zmiana broni itd. Drugie zadanie jest jak gdyby zadaniem uzupełniającym dla pierwszego.

Tryb zakończenia (Finish Mode) w nodzie prostym równobieżnym:

Immediate – Działanie natychmiastowe. Kiedy główne zadanie w pierwszym outpucie kończy, natychmiast następuje przerwanie innych nodów w drugim outpucie (zwanych background tree). Dzięki temu mamy wymuszenie restartu noda prostego współbieżnego za każdym razem po pomyślnym wykonaniu pierwszego noda potomnego. Przykładowo pierwszy nod to zadanie Wait nastawione na 2 sekundy, a drugi to Selektor z jednym zadaniem MoveTo. Po dwóch sekundach Wait kończy z sukcesem i od razu wraca wyżej do drzewa (do noda nadrzędnego), kończąc wszystko, co jest po prawej stronie (w tym wypadku jest to Selektor z zadaniem MoveTo). Wszystko odbywa się tylko w oparciu o warunek zadania Wait. I potem znowu może być wykonany Wait i po dwóch sekundach wszystko kończy itd. Innymi słowy, po wykonaniu pierwszego zadania, mamy powrót do noda nadrzędnego z przerwaniem wykonania innych nodów, nawet jeśli ich zadania mogły jeszcze trwać.

Delayed – Działanie z opóźnieniem. Kiedy główne zadanie w pierwszym outpucie po zakończeniu działania czeka na zakończenie innych nodów w drugim outpucie (zwanych background tree). Nie występuje wymuszenie restartu. Kiedy kończy Wait po dwóch sekundach, zadanie to nie wraca do noda nadrzędnego, ale czeka aż nody po prawej zostaną wykonane i dopiero wtedy cała gałąź jest uznawana za zakończoną z sukcesem i następuje powrót do wyższych nodów.

Nody sterujące – nody, których celem jest nie tyle budowa struktury drzewa, co wykonanie określonych funkcji w drzewie. Sterują wykonaniem w drzewie.

Dekoratory (Decorators, odpowiadają Conditions w programowaniu) – Warunki true/false (odpowiedniki boolean/bool w programowaniu), które konstruuje się w oddzielnych blueprintach dla podjęcia decyzji. Dekorator to warunek wykonania nodów, czyli sprawdzenie czy powinniśmy lub nie powinniśmy coś zrobić w danym momencie. Przykładowo selektor z zawartym w sobie dekoratorem ma sprawdzenie warunku true lub false. Jeśli wartość dekoratora będzie true, to wykonane zostaną nody potomne naszego selektora, w innym wypadku (false) nie będą wykonane, co jest logiczne. Może być kilka dekoratorów na jednym nodzie i ich wykonanie idzie wtedy z góry na dół. Jeśli któryś dekorator zawiedzie i zwróci porażkę, inne dekoratory poniżej nie będą już sprawdzane dla warunku. Wartym uwagi jest to, że dekorator jest tylko uruchamiany, kiedy otrzymuje wykonanie i nie działa z każdym tickiem. Aby zadziałał, musi być tzw. dekoratorem odpowiednim w danym momencie. Kiedy przepływ wykonania naszego drzewa przechodzi przez dany dekorator, ten dekorator staje się odpowiednim. To znaczy, że ten dekorator jest obliczany od czasu do czasu. Jeśli wynik dekoratora zmieni się w tym czasie, przerywa to, co w danej chwili dzieje się w swojej gałęzi i wykonanie wraca do tego noda, gdzie jest ten dekorator. Jednak kiedy ustawimy dla dekoratora observer aborts, wtedy dekorator będzie sprawdzany z każdym tickiem. Czystą klasą bazową dla dekoratora jest BlueprintBase. Wszystko inne jest dekoratorami, które utworzyliśmy i możemy ich także użyć jako klasę rodzicielską dla naszych dekoratorów. Najpopularniejszym typem dekoratora jest Dekorator Tablicy (Blackboard decorator), czyli dekorator działający w oparciu o dane z tablicy. Jest wbudowanym dekoratorem, dostępnym domyślnie, który ma warunek value != null dla szybkiego sprawdzenia czy lub nie poszczególny klucz w BB dla AI jest ustawiony (true = set) czy nie (false = not set). Przykładem działania dekoratora w drzewie może być następująca sytuacja. Uciekinier X znalazł dobrą kryjówkę, więc jego dekorator w drzewie, który sprawdza czy znaleziono kryjówkę otrzymuje wartość true i przepływ drzewa idzie niżej po gałęzi do zadania Biegnij do kryjówki. Zadanie jest wykonywane i jest w trakcie trwania (zwraca stan: Działanie), jak uciekinier biegnie do kryjówki. Kiedy uciekinier jest ciągle poza kryjówką (a minie określony czas), dekorator sprawdzający czy znaleziono kryjówkę nie jest już true, gdyż ma wartość false, więc przerywa zadanie Biegnij do kryjówki i wykonania wraca do noda, który ma ten dekorator. Innymi słowy, tutaj dekorator postaci w drzewie decyduje o tym, czy zadanie Biegnij ma być wykonane czy nie na postawie wartości true/false.

Serwisy (Services, odpowiadają Loops w programowaniu) – Zbierają lub uaktualniają informacje dla wprowadzenia natychmiastowych zmian w grze. Działają na zasadzie usługi, a więc ciągle. Serwisy modyfikują stan AI, gdyż są zawsze wywoływane i dlatego stan jest ciągle utrzymywany. Są specjalnymi nodami związanymi z jakimkolwiek nodem złożonym (Selektor, Sekwencja lub Prosty Współbieżny), które mogą rejestrować dla wywołań zwrotnych każde X sekund i wykonywać uaktualnienia, które powinny zachodzić co jakiś czas. Serwisy nie działają cały czas, a są tylko aktywne tak długo jak wykonanie pozostaje w gałęzi z danym nodem złożonym jako root i z serwisem. Wtedy serwis działa z każdym tickiem. Serwis także jest sprawdzany z każdym tickiem podczas wykonania zadania położonego niżej w drzewie w każdym okresie czasu w oparciu o wartość interwału ustawionego w panelu Details. Jeśli ustawimy interwał (Interval) na 5, serwis będzie uruchamiany co 5 sekund, nawet jeśli podrzędny nod MoveTo jest ciągle wykonywany pod spodem.Tick Interval zaś pozwala nam kontrolować jak często serwis jest wykonywany w tle.

Nody końcowe – stanowią liście drzewa, a więc nie mają swoich nodów potomnych i wykonanie w drzewie na nich się kończy. Stanowią konkretne zdanaie do wykonania w drzewie.

Zadania – Wykonują operacje wpływające bezpośrednio na AI i jak nody złożone zwracają sukces lub porażkę, jeśli trzeba. W blueprincie zadania istnieją dwa nody: Event Receive Execute otrzymuje sygnał do wykonania przyłączonych skyptów i Finish Execute – wysyła sygnał z powrotem i zwraca true lub false w przypadku sukcesu lub porażki. Nody liście nie mają nodów potomnych, ale są dwa ich typy:

Warunek (Condition) – Warunki służą do testowania stanu zmiennych (dowiadujemy się stanu zmiennej)

Działanie (Action) – Działania do wykonywania akcji.

OBSERVER ABORTS

Obserwatorzy przerwania (Observer Aborts) – dotyczą zmiany warunku dekoratora, przerywającej wykonanie zadania. Możemy na przykład przerwać zadanie Move To, jeśli stan AI nagle zmieni się. Obserwatorzy przerwania none/self/both/lower priority ustalają, co stanie się, kiedy drzewo wykryje zmianę w testowanym warunku. Jest to sterowanie przepływem wykonania. Observer aborts są dla stałego sprawdzania stanu dekoratora i jeśli się zdarzy coś, co zmienia stan, zostaje zauważony przez naszego observera i następuje:

none – Nie przerywaj niczego. Nic się nie zdarzy, kiedy warunek noda zwróci porażkę, nic nie zostanie przerwane.

self – Przerwanie siebie i podległych podnodów. Kiedy warunek noda zwróci porażkę, dany nod i wszystko pod nim będzie przerwane.

lower priority – Przerwanie jakichkolwiek nodów na prawo od tego nodu. Kiedy warunek noda zwróci porażkę, wszystko po prawej (czyli z lower priority) będzie przerwane.

both – Przerwanie siebie i podległych podnodów oraz jakichkolwiek nodów na prawo od tego nodu. Kiedy warunek noda zwróci porażkę, dany nod, wszystko pod nim i wszystko po prawej z lower priority będzie przerwane.

Zależnie od tego, co wybierzemy w Observer Aborts, będzie miało wpływ na to, co się zdarzy, kiedy np. śledzimy naszą postać i nasza postać nagle umrze. Śmierć naszej postaci jest ważnym zdarzeniem, które zmienia wiele w drzewie. Od nas zależy, co ma się stać, kiedy to nastąpi (jak drzewo ma zareagować na śmierć naszej postaci). W tym wypadku mamu do wyboru:

Czy powinniśmy ciągle robić to, co robiliśmy przed tym, jak nasz gracz zginął, jakby nic się nie stało (None).

Czy powinniśmy przestać robić to, co robiliśmy przedtem, jak nasz gracz zginął, ale jednocześnie próbować robić coś innego, co robiliśmy przedtem także (Self).

Czy powinniśmy przestać robić te inne rzeczy, jak nasz gracz zginął, ale próbować dalej śledzić naszego gracza, jakby była szansa, że ożyje (Lower Priority).

Czy powinniśmy przestać próbować śledzić naszego gracza wiedząc, że nie ożyje i przestać robić inne rzeczy, które robiliśmy jak nasz gracz zginął i zacząć wszystko od początku (Both).

NOTIFY OBSERVERS

Mamy klucz w Blackboard, który przechowuje instancję typu Actor. Obserwujący Dekorator Blackboard reaguje (przerywa bieżące zadanie), kiedy warunek się zmienia (w tym wypadku “is or is not NULL”) lub reaguje kiedy obserwowane wartości się zmienią, np. instancja Actor była ustawiona na ActorA i teraz przechowuje ActorB. Pierwszy przypadek to “On result change” a drugi to “On value change”. Pozwala zatem drzewu reagować na zmiany w testowanych warunkach lub testowanych wartościach (np. bHasFullAmmo lub targetEnemyIsSet) natychmiast, co jest skrajnie różne od synchronicznego przepływu kontroli z noda do noda przez drzewo, gdzie każdy warunek będzie obliczany tylko jeśli przepływ przechodzi z korzenia do podnoda i dalej.

Notify Observer

On Result Change Ponowna ewaluacja tylko jeśli warunek się zmienił

On Value Change Ponowna ewaluacja tylko jeśli obserwowany klucz w Blackboard się zmienił.

AI W BLUEPRINTACH

W AI Controler Blueprint używanego przez naszą postać AI ustawiamy nasz BT. Dzięki temu wiemy, jaki BT będzie sterował naszą postacią. W typowym ustawieniu AI w naszym blueprincie postaci NPC (sterowanej przez AI) z Self (czyli samego Blueprinta postaci) dostajemy nasz BB (czyli pamięć postaci), gdzie mamy zmienne typu BB zwane kluczami (keys). Tutaj wiążemy zmienną utworzoną w Blueprincie postaci z odpowiednim kluczem w Blackboard. I tak postępujemy z innymi zmiennymi. Dzięki temu zmienne obecne w tablicy będą powiazane z jej kluczami. I te klucze użyjemy w naszym BT. Inny Blueprint zawierający serwis monitoruje dane na bieżąco i w razie czego uruchamia daną gałąź. Użycie zdarzenia Tick i koniecznie nodu isValid. Utworzony Blueprint Service dodajemy do noda Selektor, gdzie sprawdzany jest cały czas warunek, czy odległość wynosi tyle, ile ustaliliśmy w naszym serwisie, aby uruchomić odpowiednie zadanie (task).

Pamiętamy, że do zadania, serwisu itd. musimy dodać za początkowym nodem z eventem casting na nasz AI Controler, gdyż stąd bierzemy Get Controlled Pawn. A potem jest dalszy kod, czyli nasza logika. Przykładowo do sekwencji dajemy instrukcje decyzyjne (warunki) przełączania między nodami potomnymi.

AI W C++

Warto przyjrzeć się podstawowym elementom budującym kod C++ działający z AI, aby wiedzieć, jak gdzie umieszcza się te elementy i w jaki sposób są powiązane między sobą. Zaprezentowany kod jest tylko pokazaniem poszczególnych elementów w C++, które mają wpływ na AI, nie jest kodem działającym poprawnie.

Na początek warto wiedzieć, aby pamiętać o podlinkowaniu naszego projektu do modułu AIModule w pliku NaszaNazwaProjektu.Build.cs:

 PublicDependencyModuleNames.AddRange(new string[]{ 
"Core",              
"CoreUObject",              
"Engine",              
"InputCore",             
"AIModule",          
});

Teraz możemy rpzejść do kodu naszego projektu. Najpierw w klasie naszej postaci AI otwieramy plik nagłówkowy i piszemy:

UPROPERTY(EditAnywhere,Category=”AI”)

class UBehaviorTree* BehaviorTree;

W Details pod kategorią AI ustawiamy nasz BT a pod kategorią Pawn nasz AI Contoller. AI Controller komunikujue sie z BB i z BT, a także kontroluje AI bot/boty, które są z nim powiązane. W pliku nagłówkowym AI Controller dodajemy:

/* Zmienna referencyjna do BT */

UBehaviorTreeComponent* OurBehaviorTree

/* Zmienna referencyjna do BB */

UBlackboardComponent* OurBlackboard;

// Definicje kluczy w tablicy

UPROPERTY(EditDefaultsOnly, Category = “AI”)

FName location;

UPROPERTY(EditDefaultsOnly, Category = “AI”)

bool isWeaponReady;

/* Nasza postać musi być spawnowana, zanim będziemy mogli ją posiadać i wykonać inne czynności */

virtual void Possess(APawn* Pawn) override;

W pliku źródłowym AI Controller inkludujemy:


#include “BehaviorTree/BlackboardComponent.h”
#include “BehaviorTree/BehaviorTreeComponent.h”
#include “BehaviorTree/BehaviorTree.h”

W konstruktorze:

AmyAIController::AmyAIController(){

//Inicjalizowanie zmiewnnej referencyjnej OurBehaviourTree, OurBlackboard i odpowiednich kluczy

OurBehaviorTree = CreateDefaultSubobject<UBehaviorTreeComponent>(TEXT(“BehaviorTree”));

OurBlackboard = CreateDefaultSubobject<UBlackboardComponent>(TEXT(“Blackboard”));

location = “PlaceToHide”;

isWeaponReady = false;

}

void AMyAIController::Possess(APawn* Pawn){

Super::Possess(Pawn);

//Dostanie posiadanej postaci i sprawdzenie, czy ta postać jest moją postacią AI Character

AAICharacter* AICharacter = Cast<AAICharacter>(Pawn);

if (AICharacter){

//Jeśli BB jest ważna, inicjalizujemy tablicę dla odpowiedniego BT

if (AIChar->BehaviorTree->BlackboardAsset){

OurBlackboard->InitializeBlackboard(*(AICharacter->BehaviorTree->BlackboardAsset));

}

//Startujemy BT odpowiadające naszej postaci

OurBehavior->StartTree(*AICharacter->BehaviorTree);

}

}

Mamy więc podstawową logikę w AI Controller. Teraz musimy dodać nasze klucze zdefiniowane w kodzie do BB. Otwieramy nasz BB i dodajemy nowe klucze typu Object i nazywamy go location oraz typu bool i nazywamy go isWeaponReady. Teraz możemy tworzyć zadania, czyli swoje klasy dziedziczące z BTTaskNode.

W pliku nagłówkowym utworzonej klasy naszego zadania nadpisujemy funkcję:

virtual OurTask::Type ExecuteTask(OurOwner) override;

Funkcja ta zawiera logikę dla naszego zadania. Za każdym razem, kiedy zadanie jest wykonywane, implementacja tej funkcji jest uruchamiana.

W pliku źródłowym inkludujemy naszą klasę postaci oraz:

#include “BehaviorTree/BlackboardComponent.h”

Kod przykładowego zadania powinien zawierać:

ExecuteTask(OurOwner){

//Dostajemy kontroler

AMyAIController* AIControler = Cast<AMyAIController>(OurOwner.GetAIOwner());

//Jeśli kontroler jest ważny…

if (AIControler){

//dostajemy BB z kontrolera

UBlackboardComponent* OurBlackboard = AIControler->GetBlackboardComp();

//Nasz kod, np.

//Uaktualnianie wartości w BB

OurBlackboard->SetValueAsObject(“PlaceToHide”, NextPlaceToHide);

//Tutaj zadanie musi być wykonane z sukcesem i zwrócić ten stan

return OurTask::Succeeded;

}

//W innym wypadku zadanie zwraca porażkę

return OurTask::Failed;

}

Aby utworzyć BTTask dziedziczymy z UBTTaskNode, jeśli chcemy utworzyć zwykłe zadanie lub z UBTTask_ BlackboardBase, jeśli chcemy mieć w naszym zadaniu funkcjonalności związane z BB. Następnie tworzymy zatem odpowiednie warunki i akcje do wykonania. Dzięki rozszerzaniu powyższych klas dane będą dostępne w Behavior Tree Editor po skompilowaniu. Teraz możemy utworzyć aset BT dla naszego kodu w projekcie i wstawić tam odpowiednie nody.

INNE ELEMENTY

Przedstawione poniżej rzeczy również bywają przydatne w budowaniu systemu AI w UE4. Opisuję je tu w skrócie, a dalszych informacj proszę szukać w internecie.

Enumeration – definiowanie opcji lub stanów w postaci struktury, do których potem możemy się odwołać w kodzie. Trzy stany dla AI bota:

Patrol

Search

Attack

Są to czytelniejsze inty, czyli Patrol ma 0, Search 1, a Attack 2. Możemy odwoływać się do pozycji na tej liście wyliczeniowej przez numery int. Stany (inty) możemy przełączać za pomocą noda Switch on.

Data Assets mają określony cel. Obecnie BlackBoard Data Assets są używane dla przechowywania informacji w celu użycia przez BTs. Umożliwia przechowywanie danych tablicy, do których dostęp mają też funkcje. Tam są klucze naszej tablicy. Tworzymy klucze, podajemy ich nazwę i podajemy ich tablicowy typ. To jakby zastępuje samą BB, bowiem nasz BT będzie miało w miejsce gdzie idzie BB tą Data Assets.

Potem w naszej tablicy, jak stworzyliśmy Data Assets dla naszej BB, wybieramy ją w oknie dialogowym. Jeśli mamy wiele enums w naszej BB, filtrujemy je tak:

movementType.AddNativeEnumFilter(this, TEXT("EMovementInfoType"));

movementContext.AddNativeEnumFilter(this,  TEXT("EMovementContext"));

Oba użyją ostatniego filtra, jakiego ustawimy.

ObjectLibrary jest obiektem zawierającym listę albo załadowanych obiektów albo FAssetData dla rozładowanych obiektów, które dziedziczą z dzielonej klasy bazowej. Mogą służyć dla zbierania assets w oparciu o ścieżkę.

ZAKOŃCZENIE

Sztuczna inteligencja w UE4 jest nieco zawiłym aspektem nawet dla zaawansowanych użytkowników. Dokumentacji jest jak na lekarstwo i wiele kwestii jest niejasnych. Często jedynie metoda prób i błędów daje nam jednoznaczne odpowiedzi na nasze pytania i wątpliwości. Wiele tutoriali traktuje ten temat fragmentarycznie i często wiedza tam zawarta jest już nieaktualna. Początkujący uzytkownik UE4 chcący użyć AI w swoim projekcie zderza się z tą niezbyt zachęcającą rzeczywistością. Mam nadzieję, że mój artykuł pomoże takim osobom zrozumieć tajniki AI w UE4. W razie zauważania jakichkolwiek błędów lub nieścisłości proszę o powiadomienie mnie, abym mógł to skorygować.

Komunizm korporacji, czyli dlaczego Microsoft i Windows 10 to zły wybór

W końcu nadszedł ten dzień… I co? I nic! Micro$oft dostał kopa w cztery litery, co nawet sam przyznaje. Plan nie został wykonany i Windows 10 nie zapanował nad światem, jak to wcześniej szumnie zapowiadano. I oto chodzi. Nie możemy ulec korporacjom, gdyż reprezentują nie nasz interes. Co jest dobre korporacji, niekoniecznie jest też dobre dla konsumenta. Ludzie chyba nie zapomnieli tego, co wyczyniał Gates, a potem Ballmer. Łysa glaca tego ostatniego wyszła wielu bokiem przez to jego pajacowanie przed kamerami. Pycha została ukarana i już gadki w rodzaju jaki to “rak” ten Linux gdzieś zniknęły, a w ich miejsce pojawiły się wyrazy uznania z Redmond. Sytuacja zmieniła się diametralnie, gdyż oto Linux stał się częścią nowego Windowsa. To coś, co trudno było nawet wyobrazić jeszcze kilka lat temu. “If Microsoft ever does applications for Linux, it means I’ve won“, powiedział kiedyś Linus Torvalds. Widać, że ojciec Linuksa bardzo wątpił w swój sukces u zarania swego dzieła. A tutaj masz: nie tylko infrastruktura M$ stoi na linuksowych serwerach, ale coraz więcej softu Microsoft działa na Linuksie i pojawiają się nieśmiałe próby opensourcowania niektórych elementów, które wcześniej były zamknięte, a nawet groziły srogie kary śmiałkom, którzy tylko marzyli o kompatybilności produktów M$ z resztą świata.

Normalnie cuda. Czyżby M$ się zmienił? Nie, to rynek się zmienił. M$ zrozumiał, że zaczął mu się usuwać grunt pod nogami. Skończył się jednostronny dyktat i niezachwiany monopol. Wyjście giganta z Redmond w kierunku Linuksa/OpenSource jest na to najlepszym dowodem. Niektórzy powiedzą, że te obecne oficjalne 2.5 % rynku desktopów dla Linuksa to nic w porównaniu z prawie 90% Windowsa. Być może, ale istotna jest sama tendencja, a ta zmierza do redukcji maszyn z Windowsem na rzecz Linuksa jak i OS X. Otóż nastąpił przełom, a raczej póki co rysa w monolicie, która jednak ciągle się powiększa. To jest jak lawina, która na początku jest niewielka, ale potem nabiera rozmachu, aby zmieść wszystko, co będzie na jej drodze. Przeanalizujmy jak wygląda początek tego linuksowego żywiołu.

Na spotkania OpenSource już nie zabiera się systemu Apple’a a dystrybucję Linuksa, nawet jeśli to tylko Ubuntu. Wcześniej z racji niestabilności sterowników Linuksa, preferowanym systemem operacyjnym był właśnie OS X, dzielący z Linuksem podobne narzędzia. I tak rozmawiano o Linuksie a używano OS X. Obecnie na OpenSource bryluje Linux, a więc wszystko doszło do normalności. Bowiem używanie hipsterskiego systemu Apple’a przy OpenSource to już nie snobizm, a obciach raczej. W rzeczy samej, system ten kojarzy mi się w najlepszym wypadku z zabawką dla bogatych małolatów, pokazywaną dla szpanu raczej niż dla rzeczywistej funkcjonalności, bowiem Windows jest tu zdecydowanie lepszy. O najgorszym przypadku pisał nie będę. Ma ta firma trochę podobny stosunek do użytkownika co M$, zwłaszcza teraz gdy ten ostatni wyszedł do ludzi z tym Windowsem 10. Użytkowniku nasz kochany, jesteś durniem, ale nic się nie martw – my wiemy, co jest dla ciebie najlepsze. Wszystko zrobimy za ciebie, a ty tylko płać i patrz na monitor, na nasze prześliczne GUI. I przy okazji podaj nam trochę swoich danych. Oczywiście wszystko dla Twojego dobra.

Nie owijając w bawełnę toż to czysty komunizm, gdzie coś (niekoniecznie państwo) wie lepiej ode mnie, czego potrzebuję i wszystko mi zapewnia w zamian zabierając mi wolność i prawo decydowania o sobie. Nie, ja nie jestem bezmózgim zombiem z podstawowym tylko instynktem klikania w kolorowe ikonki na monitorze. Ja chcę mieć całkowitą kontrolę nad tym, co robię. Nawet jeśli robię źle, to i tak komputer jest mój i tylko mój. W końcu za niego zapłaciłem. Nie życzę sobie, aby ważniacy (komuchy?) z Apple’a czy Microsoftu decydowali o mojej maszynie stojącej na moim biurku. Ja jestem panem sytuacji, nawet bogiem i mogę rozwalić mój komputer gazrurką, jeśli tylko przyjdzie mi ochota.

To jest właśnie wolność decydowania. Pomijając już drastyczne przykłady i niekoniecznie w pełni trafne (w końcu rozwalić komputer z Windows czy OS X również można), zwracam uwagę na to, jak ważna jest wolność człowieka, nawet jeśli dotyczy ona tylko i wyłącznie naszego komputera. W końcu tam już toczy się większa część naszego życia, a więc żarty się skończyły. Ktoś powie, że nie używa Linuksa a mimo to czuje się wolny. No tak, kajdan na nogach nie mamy, lecz jeśli chcemy mieć kontrolę nad aktualizacjami systemu czy też sami decydować o innych jego aspektach, odczuwamy wirtualne kajdany. I teraz te cholerne dziwne procesy w tle kiedy włączasz komputer z Oknami na pokładzie niekoniecznie z Windows 10. Telemetry is everywhere! Moja maszyna stała się znacznie mniej responsywna. Od wielu lat Microsoft utrudnia życie użytkownikom i deweloperom, promując jedynie słuszne rozwiązania, czytaj: własne rozwiązania, niekoniecznie najlepsze dla konsumenta. Skąd my to znamy? Znamy to z poprzedniego systemu, nie operacyjnego, a politycznego, jak i chyba z dzisiejszego systemu, także politycznego. Cały czas ten sam wspólny mianownik: my jesteśmy mądrzejsi od ciebie, prosty człowieczku. Nie damy Ci broni, bo sobie jeszcze krzywdę zrobisz. Inaczej: nie damy ci kontroli nad systemem operacyjnym, bo jeszcze go zepsujesz.

Komunizm wrócił! W nieco innej formie, ale wrócił i jest jeszcze gorszy od tego, co już był. Pcha się Drzwiami z napisem B(ill) + S(teve) + S(atya) i dziesięcioma Oknami. A amerykańskiej bezpiece swędzą paluszki, aby dla naszego (oczywiście) bezpieczeństwa poszperać na naszych dyskach w poszukiwaniu ukrytych terrorystów z pasami szahida. To może przez nich czasami wybuchają baterie w laptopach, więc chyba coś jest na rzeczy. Także kochany nasz światowy żandarm zadba o nas, aby jednak nic nam nie wybuchło. Oczywiście nie za darmo, bowiem bezpieczeństwo kosztuje. Każdy to wie.

A może by tak nie bać się opuścić tej klatki i zasmakować trochę wolności. Zobaczyć jak to jest podjąć pochopną decyzję, wymazać przypadkiem dysk, stracić dane, spieprzyć coś w systemie i instalować go na nowo, samemu, nie tylko z gotowcem ze sklepu. To naprawdę niezła frajda, gdy instalujesz Linuksa obok już zainstalowanego Windowsa i nagle okazuje się, że Windows już nie istnieje na dysku, bowiem partycja została nadpisana. Przez pomyłkę oczywiście. Bowiem oto dotarły do mnie informacje jakoby Windows 10 usuwał partycje z Linuksem, inaczej mówiąc niewindowsowe partycje. I to bez pytania, powodują słuszne oburzenie użytkowników. Tu już chyba raczej nie możemy mówić o pomyłce, a o celowym działaniu, gdyż dual-boot w dzisiejszych czasach stał się popularnym środkiem radzenia sobie w trudnej sytuacji, jaką nam zgotowali cwaniaki z Redmond. Do gier, niestety jeszcze Windows, a do normalnego użytkowania systemu – Linux.

Może tak źle nie będzie i nic się nie stanie. Nie chcę tu straszyć początkujących, którzy drżą o swego kochanego Windowsa. W końcu życie bez Windowsa dla wielu nie istnieje. W domu od małego Windows, w szkole Windows i ciągle ten Windows. Nie dziwota, że brak Windowsa równa się tragedia. Drodzy początkujący linuksiarze wychowani na Windowsie, głowa do góry – bez Windows da się naprawdę egzystować. Ponad 90% z was wykona to samo na Linuksie, co na Windowsie, a nawet więcej. W końcu gonicie Pokemony na Androidzie czy iOS, którym bliżej do Linuksa niż Windowsa. Oczywiście jest trochę specjalistycznego softu, który może sprawić problem na Linuksie, lecz prawda jest taka, że to nie jest wina Linuksa i w żaden sposób linuksowi deweloperzy za to nie odpowiadają. Linux chciałby dla Was, Kochani Użytkownicy, uruchomić wszystko, czego tylko potrzebujecie, ale problemem jest, że autorzy programów nie zawsze chcą, aby ich dzieła działały na czymś innym niż Windows, czy tam jeszcze OS X. Zawsze słyszę to samo: nie opłaca się trudzić, gdyż użytkowników Linuksa jest za mało. A skąd ktokolwiek wie, ile tak naprawdę jest użytkowników Linuksa? Nikt tego nie wie i wszyscy posiłkują się oficjalnymi statystykami, które są na pewno zaniżone.

No i oczywiście gry. Jak mógłbym zapomnieć o grach? Większość z Was gra i życie bez grania traci sens. Kiedyś to był rzeczywiście problem, aby na Linuksie w coś pograć ambitniejszego niż systemowe gierki, czyli jakieś tam labirynty, gry karciane, miny i tym podobne. Oryginalne sterowniki niestabilne, opensourcowe z innej epoki, zero wsparcia ze strony deweloperów, na Wine albo pójdzie albo nie pójdzie, a jak pójdzie, to szkoda gadać. Katastrofa? Otóż nie. Taka sytuacja to już historia. Na szczęście! Dzisiaj Linux stał się solidną platformą dla świata 3D (tudzież 2D). Wielu ludzi jeszcze ciągle nie wierzy, że Linux i gry to możliwa kombinacja. Jak najbardziej możliwa. Sytuacja zmienia się szybko na korzyść Linuksa. Obecnie mamy Vulkan API. Ciągle jeszcze musimy czekać na pełną implementację tego wynalazku, ale już dziś ta technologia pokazuje na co ją stać. DirectX nie odda za łatwo prymatu w grach, ale to kwestia czasu, kiedy deweloperzy przestawią się na Vulkana. Niektórzy w to wątpią, ale ja nie mam żadnych wątpliwości. kto będzie królem. A król może być tylko jeden. Powodów jest kilka.

Oczywiście pierwszym jest wieloplatformowość Vulkana w przeciwieństwie do DirectX, gdzie np. DirectX12 odpalicie tylko na Windows 10, a nie na starszych systemach windowsowych, nie mówiąc już o innych platformach. Vulkan wspiera też ogromny rynek mobilny. Po co zatem ograniczać się tylko do jednego Windows 10 i tam jeszcze windowsowej konsoli? Z Vulkanem możemy napisać grę, która wystartuje na każdej platformie, nawet na Windows 10. Oczywiście M$ będzie kombinował, przekupywał deweloperów, przyciągał na różne sposoby. Jednak rynek szybko to zweryfikuje. Vulkan jest po prostu lepszy pod każdym względem. To nie jest nowa wersja OpenGL, jak niektórzy sądzą. To zupełnie inne API o innej architekturze i spojrzeniu na tworzenie grafiki. Wbrew windowsowym trollom, OpenGL sprawdził się, wyprzedzając nawet DirectX w wielu dziedzinach. I będzie jeszcze długo używany. Pewne jednak wady uniemożliwiały skuteczne konkurowanie z technologią M$, dlatego stworzono Vulkan API. Vulkan to zdaje się twór idealny, pozbawiony wad OpenGL i DirectX. Tylko czekać, jak stanie się powszechnym strandardem w świecie 3D.

Niektórzy powiedzą, że obecność Vulkana w grach niekoniecznie oznacza więcej gier na Linuksa. Oznacza, gdyż nawet jeśli gra nie będzie przeportowana bezpośrednio na Linuksa, to taka gra z Vulkanem będzie działać bezproblemowo na Wine. Tłumaczenie z DirectX API to zawsze był problem po DirectX9. Z grą działającą na Windows z Vulkanem problem przestaje istnieć. Odpalamy windowsową gierkę na Wine i wszystko powinno działać jak należy. W końcu autorzy Wine zaimplementowali już w swoje dzieło Vulkana, który jest otwarty i każdy wie, co tam dokładnie siedzi.

Pewnie są tacy, co zapytają, po co mam bawić się z Wine, jak mogę grać bezpośrednio w Windowsie? Pytanie logiczne. Jednak tacy ludzie zapominają, że kernel Linuksa to majstersztyk, przy którym kernel Windowsa NT to niedorobiony karzeł. Ma swoje wady, ale za to zalet bez liku. Możliwości wewnętrzne Linuksa są niesamowite, niczym nie ograniczone. Oczywiście laicy tego nie dostrzegają, ale to jest fakt, co nawet przyznał jeden z pracowników M$. Pełna moc hardware jest dostępna dla deweloperów bez jakichkolwiek sztuczek autorów zamkniętego oprogramowania. Żadnego dławienia, czy sztucznego zaniżania parametrów, kombinowania jak tu wyciągnąć kasę od ogłupionych użytkowników. Dlatego właśnie warto grać na Linuksie z Vulkanem na pokładzie! Przy dobrze zaimplementowanym API testy prawdę powiedzą i mimo wieloletniego przyzwyczajenia i przekupywania deweloperów, wygra lepszy. Zapewne niektórzy pozostaną wierni DirectX z różnych względów, ale to wyłącznie ich problem. Żeby czasem nie skończyli jak ci, co tworzą na Silverlight. M$ jest na tyle zadufany w swej wielkości, że potrafi nawet wystawić do wiatru swoich fanów. Strzeżcie się więc, ślepi wyznawcy M$, gdyż któregoś dnia możecie obudzić się z ręką w nocniku. Zaufanie do twórców zamkniętego oprogramowania musi być ograniczone, tak jak na drodze. Tylko OpenSource gwarantuje, że technologia nie zdechnie z dnia na dzień i zawsze może powrócić w innej postaci, a wasze wysiłki w jej opanowaniu nie pójdą na marne.

M$ cenię za C#, gdyż to rzeczywiście udany produkt, co by nie mówić o tej firmie. Nie bez kozery preferuje się go zamiast Javy. I na pewno wielu brakowało całego .NET na Linuksie. Na szczęście, wszystko zmierza do otwarcia tej technologii i już nie będzie potrzeby trzymania Windowsa dla używania .NET, czyli na przykład tego nieszczęsnego dual-boot. Już niedługo gigant z Redmond będzie prosił o użytkowanie tego środowiska na innych systemach niż Windows. Mając zastępy opensourcowych deweloperów .NET nie będzie stać w miejscu, a nabierze rozmachu. Innymi słowy, nawet zatwardziali wrogowie OpenSource zrozumieli, że ruch wolnego oprogramowania to licząca się siła, która kształtuje komputerową rzeczywistość. To kwestia czasu, kiedy dotąd zamknięte oprogramowanie będzie powoli otwierane. I to nie z powodu nagłego przypływu miłości ze strony komercyjnych twórców, ale po prostu taka jest rzeczywistość. Tacy jak M$ potrafią liczyć jak mało kto. I wyszło, że dalsze silne patentowanie niektórych technologii nie służy firmie. Chociaż jak pokazuje życie, nigdy nie wiadomo, co strzeli do głowy takim molochom jak M$. Znamy przykład Oracle’a, gdzie niby przyjazna OpenSource firma potrafi wywinąć niezły numer. Na szczęście OpenSource jest odporne na takie zagrywki i robi się po prostu forka. Fork jest dobry na wszystko! Dlatego technologia OpenSource może się przekształcać, ale nigdy zaniknąć. Zawsze znajdzie się ktoś, kto ją może podjąć na nowo i tchnąć w nią nowe życie. I jak tu nie kochać OpenSource? Jak to jest różne od komunistycznej ideologii M$ i Apple’a, chcącej nam założyć smycze i w ten sposób nas kontrolować.

Dlatego dziwi mnie wielce, że polski rząd albo raczej nie-rząd nie dba o swoich obywateli i brnie w bagno zwane Windows. Ja wiem, że polscy urzędnicy są zapracowani, ale strony erotyczne bezpieczniej ogląda się w Linuksie niż w Windowsie. Taka prawda. Sprawdzone przez wielu. Ja rozumiem, że przestawienie wszystkich urzędów i państwowych instytucji na Linuksa to wielkie wyzwanie dla informatyków zatrudnianych po znajomości, ale do licha to jest proces i należy czynić to stopniowo, aby było bezboleśnie. Da się to zrobić delikatnie bez rozpieprzania całych systemów informatycznych, jak to wcześniej bywało, gdy przetargi wygrywał ten, co powinien, a raczej nie powinien. Potrzebna tylko doba wola. No a tej niestety wyraźnie brakuje naszym rządzącym. W końcu wizyty oficjeli M$ miały swój cel a korporacja ta ma wyjątkowy dar przekonywania, skoro wpłynęli nawet na Rosjan i Chińczyków. I Płatnik ciągle tylko na Windows i MS Office musi być przy każdym stanowisku, jakby nie istniały dobre alternatywy. Ktoś powie, że Calc nie dorównuje Excelowi. Może i nie dorównuje, ale nie każdy/każda (żeby się feministki nie przyczepiły) używa Excela w pełni. Nawet Calc to dla większości za dużo. I tak dalej szastamy publicznymi pieniędzmi, w końcu to nie nasze pieniądze, a tych durniów, co nas wybrali. Komunizm pełną parą.

Januszu Korwinie Mikke przybywaj i zrób porządek z tym burdelem, przynajmniej w sferze systemów operacyjnych.

Paweł Pollak pogromcą grafomanów

Doskonale, że Pan, Panie Pawle, dostarcza mi rozrywki tymi wpisami. Jednak nie będę tworzył więcej postów na temat Pana i Pana twórczości, bowiem to nie jest blog o Pawle Pollaku. Będę rozwijał ten post wedle potrzeb. A czytelnicy będą mieli wszystko w jednym miejscu.

Widzę, że polemika nabiera tempa. I bardzo dobrze – niektórzy może się rozwiną intelektualnie. Szansa zawsze jest, nawet na stare lata. Ach, taki wielki umysł, a pojąć prostych prawd nie może. No cóż, kilka rzeczy trzeba sprostować i na pewne pytania odpowiedzieć. Zatem do dzieła!

Po pierwsze proszę się uspokoić, bo zbyt wiele emocji niczemu nie służy, a na pewno merytorycznej dyskusji. Emocje górują nad zdrowym rozsądkiem, Panie Pawle, co widać w Pana najnowszym wpisie. Niektóre Pana wypowiedzi wydają się być na poziomie przedszkola, nie obrażając przedszkolaków. Panie Pollak, bądźmy poważni. Ja wiem, że poczuł się Pan dotknięty przez mój tekst (chociaż to nie był mój cel), bo do tej pory to Pan atakował innych ludzi. Jak to się mówi, nosił wilk razy kilka ponieśli i wilka. No cóż, tak wyszło, trzeba ponosić konsekwencje bezmyślnego ujadania w internecie.

Pierwszy Pana wpis jeszcze był pozbawiony zbędnych emocji, ale z tym drugim to chyba Pan przesadził. Puszczają Panu nerwy, Panie “łowco grafomanów”, a to niezbyt dobrze Panu wróży na przyszłość. Poświeciłem swój cenny czas i chciałem Panu wytłumaczyć pewne rzeczy w tym drugim wpisie na moim blogu, aby Pan wreszcie zrozumiał fakt, że nic nigdy nie płaciłem żadnemu wydawnictwu zarówno w Polsce jak i za granicą, ale ciągle to do Pana jak widać nie dociera. Ile razy mam to powtarzać? Po szwedzku mam to napisać czy jak? Gdyby umowa z wydawcą zawierała jakiekolwiek płatności z mojej strony, nie zostałaby przez mnie podpisana. Tyle w temacie. Stworzył Pan hipotezę, którą Pan stara się wszelkimi sposobami udowodnić, wrzucając wszystkich do jednego worka. Zagubił się Pan w tym wszystkim, tracąc kontakt z rzeczywistością. Ja się pytam, jaki ma Pan dowód, na to, że wydaję swoje dzieła za pieniądze. Jeśli Pan oskarża kogoś, powinien Pan mieć ku temu podstawy. Jeśli Pan nie ma, to siłą rzeczy nie powinien Pan się nawet odzywać, gdyż się Pan zwyczajnie kompromituje. No chyba, że Pan nie ma o czym pisać.

Tak zajadle Pan atakuje tych “grafomanów”, że stało się to już Pana obsesją. Niektórzy widzą białe myszki tudzież szczury (rażone prądem, ale nie koniecznie tylko te), inni zaś… “grafomanów”. Gdzie Pan nie spojrzy, “grafoman” siedzi. W szafie schował się jeden a w lodówce drugi. A kysz! Śnią się Panu po nocach? Prześladują Pana? Już jest tak źle? Wyjdą w nocy spod łóżka i Pana zjedzą. Jeszcze trochę i sam Pan zostanie “grafomanem”, gdyż chyba za bardzo się Pan w to angażuje. Zakazi się Pan tym “grafomaństwem”, co byłoby wielką szkodą dla polskiej literatury. Taki talent uległby unicestwieniu.

No dobra, będę już poważny. Na początek proste chyba pytanie: gdzie jest ta granica grafomaństwa? I kto ją ma wyznaczać? Pan? Według Pana Pan i tzw. “wielcy literaci” wydawani przez “wielkie wydawnictwa” w Polsce to nie “grafomani”, to “kwintesencja polskiej literatury”. Bo umieją lepiej składać literki jak sądzę. Oczywiście, że tak, bowiem wielka literatura powstaje z pijackich fantazji i wychodzi spod delirycznej ręki, tworzona często przez wykolejonych samotników nie potrafiących nawet zawiązać rodziny, a najlepiej jak się jest “tęczowym” i nosi czapkę stylizowaną na wojskową z symbolem SS. Ale “wielkiemu literatowi” wolno więcej. To nic, “wielki talent” zawsze znajdzie ujście i zostanie doceniony przez “wielkie wydawnictwo”, prowadzone przez kolegę lub koleżankę “wielkiego literata”. A narody padać będą na kolana i sławić będą imię “wielkiego literata”, bo toż to “wielki literat”. I takiż to wielki literat brzydzi się “grafomaństwem” a zwłaszcza Wydawnictwem “Psychoskok”, złem wcielonym wykorzystującym naiwnych i niewinnych autorów. Dlatego “wielki literat” zwalcza “grafomaństwo” całą swoją mocą, aby uchronić nieświadomych czytelników przed tą straszną zarazą.

Czytałem sporo tej tzw. literatury z górnej półki, między innymi tych autorów z wydawnictw, które zostały przez Pana wymienione w tekście. Zapewniam, że do ich grona nie pretenduję, gdyż jest nam razem chyba nie po drodze. Ja Panu powiem tak, ta Pańska wielka współczesna polska literatura to rynsztok i żul spod budki ma więcej do powiedzenia niż “literat” taki jak Pan. Nie od dziś wiadomo, że życie pisze najlepsze scenariusze. Problem jest jednak taki, że owy żul nie należy do towarzystwa wzajemnej adoracji i raczej jego historia nie ujrzy światła dziennego. A szkoda. I tu ma Pan odpowiedź, kto Panu “pozwolił” być literatem. Tajemnica została rozwiązana. Nie kosmici, tylko znajomości jak wszędzie w Polsce. Dawno temu w jakimś telewizyjnym programie Jerzy Pilch powiedział, że żeby nie znajomi z wydawnictwa (mam nadzieję, że nie “Psychoskok”, ale pewności nigdy nie ma), prawdopodobnie nigdy by nie został pisarzem. Powiedział też – uwaga Panie Nieomylny – aby najpierw próbować self-publishingu w przypadku odmowy wydania przez tradycyjne wydawnictwa i jeśli książka jest coś warta, to znajdzie nabywców. To nie są dokładne słowa, jakie wypowiedział, ale sens ten sam. Czyli Jerzy Pilch popiera “grafomaństwo”, a może sam też jest “grafomanem”. No i się tu Pan “zaorał”, Panie Pollak. R.I.P. Tak jeszcze dodam dla Pań wątpiących, że kiedyś w USA przeprowadzano eksperyment, gdzie poproszono znanego amerykańskiego pisarza o napisanie utworu pod innym nazwiskiem i wysłanie tego do wielu wydawnictw. Chciano wiedzieć, ile wydawnictw odpowie pozytywnie. Ku zaskoczeniu ekipy przeprowadzającej eksperyment, żadne wydawnictwo nie chciało wydać tekstu podpisanego przez nieznane im nazwisko. Po jakim czasie ten sam tekst został wysłany ponownie, tym razem pod prawdziwym nazwiskiem. Od razu pojawiły się konkretne propozycje wydania książki. Podobny eksperyment przeprowadziła ostatnio J.K Rowling z takim samym skutkiem. To dowodzi jak idiotyczny jest przemysł wydawniczy.

Większość początkujących pisarzy popełnia ogromny błąd licząc, że takie osoby jak Pan Pollak dadzą in namaszczenie dla zaistnienia w oficjalnym świecie literackim. To zamknięte grono z gęstym sitem, gdzie talent to stanowczo za mało. Gdyby nie sypanie im nagród (za co?) z publicznej, czyli nas wszystkich, kasy, cienko by przędli. Początkujący literaci żebrzą o recenzje i pieją z zachwytu, kiedy taki recenzent jak Pan Pollak ich zbluzga jak burą sukę. A tymczasem tacy ludzie charakteryzują się narcystyczną osobowością i silną skłonnością do zawiści. I jak taki recenzent, przekonany o swojej wielkości, zobaczy całkiem dobry utwór u młodego człowieka, rozpala się w nim nienawiść. Zrobi wszystko, aby zamienić życie początkującego pisarza w piekło. I niestety ma sporo do powiedzenia. Jednak władza takiego recenzenta kończy się, kiedy pojawia się niezależne wydawnictwo, gdzie jednym z podstawowych kryteriów są pieniądze (jak to jest na Zachodzie). Wtedy to wszelkie związki towarzyskie przestają mieć jakiekolwiek znaczenie. Takim wydawnictwem jest właśnie „Psychoskok”. To jest naprawdę wydawnictwo niezależne, a nie jakieś tam wydumane zło, co psuje rynek wydawniczy. Jeśli coś psuje, to „rynek” Pana Pollaka. Bowiem tam władza Pana Pollaka nie sięga i stąd ta nienawiść do tego wydawnictwa i do osób, które tam publikują. Faktem jest, że pewne utwory tam publikowane są słabsze, ale jest tam też dużo ciekawych rzeczy, które nigdy by nie ukazały się w tzw. oficjalnym wydawnictwie. Fakt, że ktoś napisał w swoim życiu słabszy utwór nie oznacza z automatu, że jest „grafomanem”. Nawet najwybitniejsi pisarze mieli słabe utwory. To się zdarza każdemu, oprócz rzecz jasna Pana Pollaka, który jest doskonały pod każdym względem. Na tym to polega w skrócie słynne „grafomaństwo” Pana Pollaka. Dlatego początkującym twórcom radzę kolokwialnie rzecz ujmując olać takie toksyczne jednostki i szukać innych dróg na zaistnienie. Dobrym wyborem może okazać się właśnie Wydawnictwo „Psychoskok” lub próba wydania na własną rękę. Możliwości jest wiele, choć przyznać trzeba, że jest ciężko i trzeba się przygotować na serię porażek.

“Grafomani”, jak Pan ich nazywa, przynajmniej są ciekawi, pochodzą z różnych środowisk i mają różne punkty widzenia, a Pan po prostu jest już nudny z tą swoją obsesją. I niech się Pan nie boi, “grafomani” nie chcą Panu zabrać nagród ani zaszczytów, nie pretendują do roli “wielkiego literata”. Oni po prostu piszą i nikomu nie wadzą, korzystając z wolnego rynku i prawa popytu-podaży. Pieklenie się po internecie tego nie zmieni. Jeśli Pan sobie nie radzi w zawodzie, proszę go zmienić i nie zatruwać życia innym ludziom. Nie ma Pan nic lepszego do roboty? Proponuję zacząć od podstaw, czyli od wywalania obornika u rolnika, gdyż to naprawdę może być bardzo inspirujące doświadczenie dla takiego “wielkiego pisarza”. Może Pan nawet potem napisze bestseller. Któż to wie, niezbadane są wyroki boskie. Może Pan Pollak dostąpi łaski twórczej.

Jeżdżę trochę po świecie, jak Pan był łaskaw zauważyć, a więc spotykam się z ludźmi. Czasami opowiadają mi swoje historie, które na pewno są bardziej interesujące niż te “literackie wypociny” wyssane z palca, za które dostajecie nagrody od swoich znajomków. Kto to w ogóle czyta? Zakompleksione panny z kilkoma magistrami, przekonane o swojej wyjątkowości, nie mogące sobie znaleźć chłopa? Czy też inni pseudointelektualiści chcący się dowartościować przez pochłanianie tej Pana “literatury”? Któż to doznaje owej “ekstazy” przy czytaniu Pana tekstów? Niech Pan mnie oświeci z łaski swojej.

Oprócz tego, że rzekomo płacę za wydanie moich książek, Pan Pollak zarzuca mi też “wazeliniarstwo” w stosunku do mojego Wydawcy. Czyli jak rozumiem Pan Paweł na dzień dobry wali w pysk swego wydawcę i jeszcze pewnie mu z nogi poprawia plus oczywiście wiązka wyzwisk. Pan ma stosunek wrogi do swoich wydawców, nienawidzi ich i życzy im źle, bo przecież nie jest Pan “wazeliniarzem”. Czy mam rację? Drogi Panie, nie wie Pan nawet, o czym Pan pisze, a taki podobno Pan jest inteligentny. Otóż dla Pana wiadomości powiem, że w Wydawnictwie “Psychoskok” spotkałem się z uprzejmością i zrozumieniem, a także – uwaga! – profesionalizmem. I tu Pana zaskoczę jeszcze bardziej, bowiem mało brakowało, a nie wydałbym niczego w tym Wydawnictwie, gdyż warunki stawiane przez Wydawcę i moje nie były zbieżne, a wręcz się wykluczały. Na szczęście Wydawca ustąpił po negocjacjach i ustaliliśmy wspólny plan działania, który odpowiadał obu stronom. I tak się to zaczęło. Dodam jeszcze tylko, że zanim trafiłem do “Psychoskoku”, wydałem dwie książki z Wydawnictwem “Nowy Świat”, a więc już coś miałem swojego wydanego. Tylko nie jestem pewien, czy w ocenie Pana Pollaka to jest “graformańskie” wydawnictwo, czy “niegrafomańskie”.

Pan Prezes Wydawnictwa “Psychoskok” to przede wszystkich dobry biznesmen, który dba o swój interes. Prowadzenie z sukcesem firmy w polskiej rzeczywistości wymaga nie lada odwagi, talentu i sprytu. I jeśli on uznał, że dla dobra Wydawnictwa korzystne jest napisanie czegoś od wydawanych autorów, to widocznie miał rację. Ja mam do tego stosunek obojętny, opisałem jedynie swoje odczucia jak i pewnie inni autorzy, których teksty się ukazały. Nie jest Pan w stanie pojąć, że ktoś po prostu może być wdzięczny i szczęśliwy. Posądza Pan o “wazeliniarstwo”, a sam Pan jest w doskonałych kontaktach ze swoimi wydawcami, z którymi Pan zapewne wiedzie przyjacielskie rozmowy i spotyka się pewnie przy lampce wina. Przecież wszyscy się dobrze znacie, tworzycie zamknięty krąg, do którego nie wskoczy się ot tak z ulicy, choćby nie wiem jaki to byłby talent. Musi być zawsze namaszczenie. No ale ten beton już murszeje, mości “literacie”. Kapitalizm wymusza konkurencję nie tylko między firmami, ale też i między pisarzami. A Panu się pewnie korytko kurczy i nie ma znaczenia, że Pan tłumaczy Hjalmara Söderberga. A do wiadomości tej Pani, co o tym wspomniała dodam, że Roy C. Booth, dla którego miałem przyjemność tłumaczyć teksty, to znana osobistość w USA z ogromnym dorobkiem, którego utwory tłumaczone są na wiele języków. Dokonałem przekładu na język polski nie dla “Psychoskoku”, ale dla Pana Bootha i z jego polecenia.  I teraz będziemy siedzieć w piaskownicy i przekrzykiwać się, która zabawka jest lepsza. I jeszcze jedno, Szanowna Pani, jak Pani cytuje moje słowa, to niech się Pani zastanowi głębiej nad ich sensem, zanim Pani je zinterpretuje na swoją korzyść. Pisząc, że nie tylko Pan Pollak jest “wielkim tłumaczem i literatem”, miałem na myśli nie tyle siebie, co ogół ludzi, którzy tym się zajmują. Tysiące na świecie para się mniej lub bardziej literaturą, czy nawet jej tłumaczeniem na inne języki (w tym oczywiście ja, jak Pani to nie omieszkała mi wypomnieć), ale tylko Pan Paweł Pollak jest “wielki”. Bo tłumaczy Hjalmara Söderberga? Czy może jest to dobry Pani znajomy? Jak nie jest Pani dobrym znajomym, o czym mnie Pani łaskawie poinformowała, to dlatego,  że tłumaczy Hjalmara Söderberga. Na tym się jego wielkość opiera, jak gdyby nie było innych ludzi w Polsce znających doskonale język szwedzki.

Jeśli chodzi o mnie, to zareagowałem na wymienienie przez Pana mego nazwiska na Pańskim blogu i napisanie nieprawdy na mój temat. Niech Pan nie udaje idioty. Dodam też, że Pana teksty jak i pseudointelektualne komentarze utwierdzają mnie w przekonaniu, że mam rację. Powoływanie się na moją frustrację świadczy o braku konkretnych argumentów w sprawie. Poza tym, różnica między kimś, co wygrał kiedyś konkurs literacki a kimś, co też wygrał jest taka, że ten pierwszy został z niczym, a ten drugi całkiem nieźle sobie radzi i z tego żyje. To zdanie-skrót myślowy okazało się jednak zbyt trudne, więc aby nie było niejasności tłumaczę obrazowo. Otóż wygrana w konkursie literackim rzeczywiście może nie znaczyć nic, tak jak to, że każdy z nas będąc dzieckiem kiedyś rysował/malował. Nie zostaliśmy plastykami, malarzami tudzież innymi artystami. Nie zostaliśmy pisarzami, a także policjantami czy strażakami. Wyrośliśmy, a nasze dziecięce marzenia zostały zamienione na świat realny, w którym nam przyszło żyć. Jednak są tacy pośród nas, którzy rzeczywiście spełnili swoje dziecięce marzenia, bowiem mamy pośród nas policjantów, strażaków, plastyków, czy pisarzy. Udaje się to tylko nielicznym. Poza tym jest wielka różnica między małą formą literacką przeznaczoną na konkurs literacki, a “pełnometrażową” powieścią. Są osoby, które ładnie piszą i wygrywają konkurs za konkursem, ale nie są w stanie urodzić powieści, gdyż to ich przerasta. Analogiczna sytuacja jest wśród deweloperów w IT, gdzie jest wielu o sporej wiedzy i talencie, ale w żaden sposób nie potrafią stworzyć aplikacji od początku do końca. Mają wiele zaczętych projektów i żaden nie jest skończony, dlatego ich powołaniem staje się robienie tutoriali, które są cenne miedzy innymi dla mnie, czyli osoby, która potrafi nie tylko zacząć, ale i skończyć każde dzieło, czy to aplikacja czy to powieść.

Wracając do meritum, to Pan obraża ludzi, których Pan nawet nie zna, nie ja. A wtóruje Panu towarzystwo wzajemnej adoracji. W przeciwieństwie do Pana odnoszę sukcesy i to nie tylko z Wydawnictwem “Psychoskok”. Bowiem zdaje się, że Pan się uczepił tego “Psychoskoku”, jak gdyby od tego zależało Pana życie i na tym Pan osadza swoje oskarżenia o “grafomaństwo”. Wydając po angielsku za granicą we współpracy z tamtejszym wydawcą zarabiam wystarczająco dobrze i bez Wydawnictwa “Psychoskok”, tak więc może Pan sobie odpuścić ataki na mnie. Bo wie Pan, Panie Pollak, książki to trzeba umieć pisać i trzeba je też umieć sprzedać. I to się liczy. A co Pan i Pana towarzystwo wzajemnej adoracji piszecie o mnie, to mam tam, gdzie słońce nie dochodzi. To ostatnie wyrażenie, które tak rozemocjonowało Pana Pollaka, może brzmi nieco prowokacyjnie. Nie wiem, co nasz “wielki literat” ma konkretnie na myśli, ale to nic innego jak miejsce zacienione w moim pokoju, jedyne, gdzie “słońce nie dochodzi” i bez przeszkód mogę korzystać ze swego laptopa.

Aha, dziękuję za wytłumaczenie mi jak działają firmy w dobie kapitalizmu, gdyż nie miałem o tym bladego pojęcia. Jestem Panu dozgonnie wdzięczny. To dzięki Panu stałem się współwłaścicielem firmy informatycznej.

A teraz coś w sprawie „grafomaństwa” moich dzieł w oczach Pana Pollaka. Mała dziewczynka mówi: „Jaś jest głupi!”. Podchodzi do niej nauczycielka i pyta: „Dlaczego uważasz, że Jaś jest głupi?”. A mała dziewczyna na to: „Bo jest głupi!”. A jak to się ma do mnie. Ano tak: Mały Pawełek mówi: „Tomuś jest grafomanem!”. A ktoś zapyta: „A dlaczego uważasz, że jest grafomanem?” Mały Pawełek na to: „Bo jest grafomanem!”. Chylę czoło przed Pana mądrością.

Jaka jest między nami różnica? Pan mnie bez przerwy atakuje, a ja Panu tłumaczę i objaśniam jak małemu dziecku, licząc że może Pan w końcu zrozumie. Nie pretenduję także do roli “wielkiego literata” i nie jestem też zawodowym tłumaczem. Literatura nie jest całym moim życiem, to raczej hobby, odskocznia od mojej inżynierskiej roboty. Jednak gdybym miał okazję zająć się tym na poważnie, to śmiem twierdzić, że nie byłbym gorszy od Pana. A dlaczego tak twierdzę? Wiem, ale nie powiem? Nie, nie powiem, nie zawiodę żeńskiej ciekawości. Otóż sprawa jest prosta: przetłumaczyłem tysiące stron dokumentacji technicznej, na której opierają się systemy na świecie i jak dotąd nic się nie zawaliło. Odpukać w niemalowane.

Na koniec życzę Panu wytrwałości w heroicznej walce z inwazją “grafomanów”. Mam nadzieję, że Pan ją przetrwa, bowiem czekam z niecierpliwością na następny Pana wpis.

Wyciąg z umowy podpisanej 7 sierpnia 2012 roku między właścicielem Wydawnictwa “Psychoskok” Panem Ryszardem Krupińskim a mną na wydanie mojej książki “Linusia, mój rajski ptak”:

§4

2. Autor i Wydawnictwo decydują się na wariant pełnego przez Wydawnictwo sfinansowania obróbki i składu książki oraz przygotowania jej do dystrybucji w postaci książki elektronicznej.

3. Całkowity koszt przygotowania książki do dystrybucji elektronicznej, w postaci ebook wynosi 500 zł brutto, przy czym Autor nie ponosi żadnych kosztów, jako że wybrany został wariant pełnego finansowania przez Wydawnictwo.

Mam nadzieję, że to wystarczy i nie muszę cytować dalej. Wszystkie umowy z Wydawnictwem “Psychoskok” zawierają ten tekst i jestem gotów pokazać umowy publicznie z pieczątkami i naszymi podpisami.

Szpiegowanie Windowsa 10 czy wolność Linuksa – wybór należy do ciebie

Na początek pytanie: Czy dalibyście klucz od swojego mieszkania lub samochodu nieznajomemu, nawet jeśli wydaje się godny zaufania? Głupie pytanie, nieprawdaż? Wiadomo, nawet z członkami rodziny trzeba uważać, a cóż dopiero z nieznanym sobie człowiekiem. Każdy z Was odpowie, że oczywiście NIE. Nie wyobrażam sobie, że może być inaczej. Nikt o zdrowych zmysłach chyba nie chce, aby ktoś nieznajomy pałętał się po jego chałupie czy używał jego bryki bez pytania o zgodę.

Dlaczego zatem wielu z nas godzi się z taką łatwością na to, co proponuje nam umowa licencyjna korporacji Microsoft? Zaznaczając “Zgadzam się” dajemy taki “klucz” osobom, których nie znamy. Oczywiście nie jest to klucz fizyczny do naszego mieszkania i samochodu, ale wirtualny do tego, co mamy na swoich komputerach. A dzisiaj życie w znacznym stopniu toczy się “w wirtualu”, a więc nie tylko w sejfie są cenne dla nas rzeczy. Często trzymamy na dyskach dane, które może nie są od razu tajne czy poufne, ale na pewno prywatne i nie życzylibyśmy sobie aby ktoś obcy miał do tego dostęp. Ja wiem, zaraz padną pytania o Facebook, Google czy telefon z Androidem. Zadadzą je ci, co nie pojmują istoty problemu lub windowsowe trolle, szukając na siłę kontrargumentów. A ja im odpowiem, że nie ważne, co robimy w internecie, co zamieszczamy i czym się dzielimy ze światem, gdyż to wyłącznie sprawa tych, co to robią. Generalnie będąc online trudno jest dzisiaj ukryć się przed wszędobylskim szpiegowaniem w internecie. I to jest fakt, z którym trudno dyskutować. Można to akceptować lub nie.

Jednak nie usprawiedliwia to działania Microsoftu, który bezczelnie rości sobie prawa nie tylko do kopii swego produktu (za którą zapłaciliśmy, kupując licencje Windows 7 i Windows 8/8.1), ale też do innego zainstalowanego na naszym komputerze softwaru, który jest nasz i tylko nasz. Podobno jesteśmy tylko użytkownikami systemu Windows, a nie właścicielami kopii i to niby daje monopoliście prawo do pełnej nad nim kontroli. Oczywiście każdy z nas akceptuje potulnie umowę (nawet jej nie czytając) bowiem jak najszybciej chce używać nowy system. I w sumie nikt tym się nie przejmował do czasu wydania Windows 10. Były jakieś tam niejasne mechanizmy szpiegowskie już chyba od Windows XP, ale wszyscy poprzestawali na fakcie, że “Microsoft szpieguje” i nikt z tym niczego nie robił. Te pojedyncze głosy cichły szybko w tłumie zafascynowanych ficzerami nowego systemu. Szpiegowskie instrumenty rozwijano w kolejnych wersjach zgodnie z zasadą “daj palec, to wezmą całą rękę”. Microsoft uznał, że mu wolno i idąc za ciosem stworzył malware o nazwie “Windows 10”, które tylko przypomina system operacyjny, aby tresowani od lat użytkownicy na to się nabrali. Miliony dolarów poszło na kampanie reklamowe, aby nawet niedowiarki zobaczyli, jaki ten nowy system operacyjny jest “cool”. I działalność ta przyniosła oczekiwane efekty.

Podejrzane plany Microsoftu (i innych korporacji) są dyskutowane w internecie i wydaje się, że wszystko już zostało powiedziane, a jednak wielu użytkowników zdaje się w to nie wierzyć. To brzmi tak niesamowicie, że aż niemożliwie. Zwykle mówią, a co mi tam, co u mnie można podejrzeć, co wykraść, nie przejmując się zupełnie tymi działaniami amerykańskiej korporacji, które należy nazwać bez ogródek kryminalnymi. Bo chyba wchodzenie komuś do komputera bez wiedzy właściciela i dokonywanie tam zmian nosi co najmniej znamiona czynu zabronionego. Co jakiś czas zamyka się hackerów (a może bardziej crackerów), którzy się tym parają i ich czyny są powszechnie potępiane. Tym większe jest oburzenie, że ich malware często udaje coś legalnego i nieszkodliwego. I tutaj mamy wielkie podobieństwo z działaniami Microsoftu. Nieświadomi użytkownicy instalują sobie pięknie opakowany malware, nie spodziewając się najgorszego. No bo przecież Windows 10 startuje poniżej pół minuty, ma nowoczesny interfejs graficzny (rzecz dyskusyjna) i te wszystkie kolorowe zabawki. Aż chce się go używać. To najnowszy system Windows, na którym gry pójdą jak burza. Ma wspaniały DirectX12, bez którego nie będę grał w najnowsze gry. Mało tego, jest w ogóle niezbędny do życia.

To tylko wabik działający na odmóżdżone społeczeństwo, otwarte na nowe szalone pomysły giganta z Redmond, bezkrytycznie przyjmujące wszystko, co kojarzy się ze znaną od lat marką. Prawdziwa rola malware Windows 10 jest inna, a więc zbieranie informacji o użytkownikach, totalna inwigilacja, gdzie zapisywane jest wszystko, co się da na nasz temat (hasła, głos, wideo, pliki itd.). Po co? Po co to komuś? Po cholerę te wszystkie dane od przeciętnego Wacka żyjącego spokojnie w jakimś zapyziałym prowincjonalnym miasteczku? Nie wiem, jasnowidzem nie jestem, ale można się domyślać, że skoro podjęto wysiłek w celu implementacji tych zaawansowanych mechanizmów szpiegowskich, musi być w tym jakiś cel. Korporacja nie wyrzuca pieniędzy w błoto zatrudniając rzesze zdolnych inżynierów, którzy nie zadowolą się polską płacą minimalną. Jak można przypuszczać, część na pewno trafi do agencji wywiadowczych dla analizy, a część do zaprzyjaźnionych z Microsoftem komercyjnych firm i korporacji. Oczywiście, chyba mogę założyć, że nie jesteśmy terrorystami i chyba nic nie planujemy wysadzać, więc traktowanie nas z automatu jako podejrzanych jest naruszeniem naszych podstawowych praw, o które tak niby zabiega Unia Europejska. A nawet jeśli nie zasłużyliśmy na zainteresowanie NSA i CIA, to nasze twarde dyski to kopalnie wiedzy o nas, naszych preferencjach i naszym życiu, a wobec tego nie można przejść tak obojętnie. Mieć możliwość, a nie skorzystać to przecież grzech. Miliony dolarów czekają, aby je wziąć. Zawsze znajdzie się jakiś smaczny kąsek na naszym dysku, a my użytkownicy nie jesteśmy nawet w stanie przewidzieć, co to może być i jak zostanie wykorzystane. Być może nawet przeciwko nam, nie możemy tego teraz wiedzieć.

Dlatego jako dla świadomego użytkownika nowych technologii takie “cukierki” od “wujka Billa” nie robią na mnie wielkiego wrażenia. Nie trafiają do mnie nawet nawoływania internetowych trolli opłacanych przez Microsoft, zachwalających Windows 10. Może i działa znakomicie na niektórych komputerach (pomijając liczne żale na forach internetowych), może to rzeczywiście rewolucja w systemach operacyjnych, jednak nie kosztem użytkownika. Chcę pracować w środowisku, które w pełni kontroluję, gdzie ja decyduję, co udostępniam, a co pozostawiam jako prywatne do mojego i tylko mojego wglądu. Korporacjom nic do tego. Nie chcę, aby system operacyjny (lub inny “mądry” software) sam decydował o aktualizacjach (z wyłączeniem mojej ingerencji), o tym co mam zainstalowane, a co powinno być odinstalowane, co jest legalne, a co nie. To ja użytkownik o tym decyduję i ponoszę za to osobistą odpowiedzialność. Nikt nie będzie mi podsuwał natrętnych reklam w systemie (czego przedsmak mamy już w Skypie) i uruchamiał podejrzane procesy w tle bez mojej wiedzy i zgody. Nie zgadzam się też na system-usługę, gdyż to daje spore pole do nadużyć. Tolerowałem Microsoft i jego draństwa dosyć długo, ale teraz miarka się przebrała i nie będę instalował malware Windows 10. Mam Windows 7 i Windows 8.1, a więc oba systemy przeznaczone dla “darmowego” upgrade’a. Jednak moje komputery nie zobaczą następnych dobrodziejstw z Redmond.

Mam jeszcze starego laptopa marki Dell, na którym od kilku lat działa OpenSUSE 13.1 i to bez jakichkolwiek problemów, co chciałbym szczególnie podkreślić. Zainstalowałem go po końcu wsparcia dla Windows XP i prawie wszystko zadziałało “out of the box”. Jedynie karta Wi-Fi wymagała mojej ręcznej interwencji, ale to nie było nic wielkiego, nic od czego świat mógłby się zawalić. Wszystko działa do tej pory i działać będzie pewnie jeszcze długo. Do tego przystosowałem KDE, aby wyglądało jak Windows XP (żądanie mojego brata). Sam byłem zdumiony, że tak wszystko poszło gładko, gdyż pamiętałem Linuksy z graficznym interfejsem, który nie nadawał się do niczego. Następny laptop też będzie z OpenSUSE (Leap 42.1 albo z Tumbleweed). Będzie to mocny sprzęt (64-bitowy, przynajmniej 16 GB RAM i Intel Core i5) dla grafiki 3D, którą się obecnie zajmuję. Pokładam też wielką nadzieję w Vulkan API, który powinien sprawić, ze DirectX zostanie wreszcie zdetronizowany i gracze przestaną narzekać na brak porządnych gier na Linuksa.

Innymi słowy, dla mnie obecnie nie ma innej alternatywy – tylko Linux. Myślę, że dla wielu rozsądnych ludzi także, gdyż Mac w gruncie rzeczy to ta sama bajka co Windows. Ja rozumiem, że są użytkownicy, którzy po prostu nie mogą przejść na rozwiązania FLOSS. Jest wiele specjalistycznego softu, który raczej nie będzie działał na Linuksie lub będzie działał źle (z Wine). Jednak wszystkim krytykom Linuksa chciałbym przypomnieć, że nie jest to wina samego systemu, a firm tudzież korporacji, które nie chcą przenieść swoich programów na tę platformę. Uzasadnia się to zwykle małym udziałem Linuksa w rynku desktopów lub innymi dziwnymi argumentami. Rozumiem, że użytkownika to nic nie obchodzi. Użytkownik chce odpalić swój program w systemie operacyjnym i ma po prostu działać. Jednak jeśli chcecie kierować gdzieś o to pretensje, kierujcie je we właściwą stronę, aby je usłyszano.

Na szczęście coraz więcej jest softu na Linuksa, który nie zawsze jest gorszy od odpowiedników dostępnych tylko na Windowsa i ewentualnie na Maca. Ja jak i pewnie z 90% ludzi używających komputera w domu obyłoby się bez produktów działających tylko na Windowsie bez uszczerbku dla naszego wirtualnego życia. Czy każdy z nas potrzebuje Photoshopa czy innego “cuda” na komputerze, pomijając fakt, że większość tego da się odpalić na Linuksie, jak ktoś się uprze? Oczywiście, że nie. Gros użytkowników używa swego komputera do przeglądania internetu, słuchania muzyki, oglądania filmów, obróbki zdjęć, komunikacji i tworzenia dokumentów. Czy komukolwiek czegoś brakuje z tej listy pod Linuksem? Śmiem wątpić. Celowo pominąłem tu granie, bowiem sprawa jest tu bardziej skomplikowana.

Chcemy tego czy nie, gracze stanowią chyba największą część użytkowników desktopowych komputerów. Bez tego wielu nie może się obejść i system, który uniemożliwiałby granie, nie byłby dla nich systemem wartym uwagi. Doskonale to rozumiem (chociaż graczem nie jestem i nigdy nim nie byłem), że rozrywka na komputerze jest najistotniejszym elementem jego użytkowania, dlatego tak walczyłem i walczę o możliwość wygodnego użytkowania silników gier na Linuksie. Napisaliśmy skrypt dla uruchomienia Unity 3D pod Linuksem, który do tej pory jest użytkowany mimo wydania natywnej wersji dla Linuksa. To mnie jednak nieco martwi, bo to pokazuje, że natywna wersja nie jest jeszcze doskonała, ale może będzie. Unity Technologies ugięło się pod naszą presją i jest szansa, że z tego nie zrezygnują. Mnie jednak teraz bardziej interesuje UE4, gdyż obecnie pracuję nad dużą aplikacją 3D (nie grą!). Ciągle nie mamy tu wersji binarnej i launchera. Nie jest to chyba priorytet dla Epic Team, ale może to się zmieni w najbliższej przyszłości. Chciałbym mieć stabilne i wygodne narzędzie do programowania pod Linuksem. I jak zwykle nie zależy to od deweloperów Linuksa. Moje prośby zatem kieruję do Epic Team.

Prawda jest jednak taka, że jeśli nie będziemy używać Linuksa, nie zmusimy firm produkujących software do dobrego wsparcia tego systemu. Jeśli chcecie, aby oprogramowanie uruchamiane tylko w Windowsie pojawiło się natywnie na Linuksie, to nic prostszego jak tylko zacząć używać tego Linuksa, aby pokazać, że istniejemy i nie wymarliśmy, a wręcz przeciwnie – mimo licznych przeszkód rozwijamy się w piorunującym tempie. Samo narzekanie nie wystarczy. Piszę ten artykuł po polsku, bowiem wierzę w mądrość naszego społeczeństwa, które nie lubi zniewolenia i solidarnie zbojkotuje Windows 10. Nie liczę na polityków, bo na tych liczyć nigdy nie można, ale na zwykłych ludzi. Apeluję, abyście, jeśli możecie, nie używali tego malware. Dla waszego dobra, bo to naprawdę kawał szkodliwego softu, a ludzie stojący za nim mają złe intencje. I tu może nie tyle chodzi o teorie spiskowe, co o zwykły biznes. Oto użytkownik stał się dochodowym interesem, towarem samym w sobie.

Jeśli chcecie, zostawcie sobie Windows 7 lub/i Windows 8/8.1 do gier czy do innych celów (jak ja), a tak używajcie Linuksa jako swego głównego systemu operacyjnego. Generujcie ruch sieciowy z Linuksów, bo tylko tak was można jakoś policzyć. Wszystkim proponuję OpenSUSE, które jest niesamowitą dystrybucją, ale każdy rodzaj Linuksa może stać się waszą ulubioną dystrybucją. Linux dzisiaj to nie to przerażające “czarne okienko” do wpisywania zaklęć przez wtajemniczonych. To w pełni funkcjonalny nowoczesny system operacyjny, który możecie modyfikować i zmieniać do własnych potrzeb. Nikt was za to nie ukarze, nie naśle policji i prokuratury za złamanie warunków licencji. Każdy bit tego softu jest wasz. Większość złych rzeczy opowiadanych o Linuksie to mity lub fakty, które są już tylko tchnieniem przeszłości. Dzięki wielu ludziom na całym świecie, Linux ewoluuje jak szalony. Moim zdaniem, mimo pewnych perturbacji w dobrą stronę. Coś wam nie pasuje w Linuksie? Piszcie do deweloperów, naciskajcie na nich i zmuszajcie do jeszcze lepszej pracy. Coraz więcej z nich zaczyna rozumieć, że aby osiągnąć sukces na rynku desktopów, należy wyrwać się z zamkniętego kręgu geeków ku zwykłemu użytkownikowi. Najlepszą dla nich nagrodą (gdyż zwykle za swoją pracę zapłaty nie pobierają) będzie to, że ich rozwiązania będą używane. Program nie mający użytkowników jest martwy. Zainstalujcie już więc teraz Linuksa, najpierw może na Wirtualnej Maszynie, potem jako Live, aby sprawdzić jak zachowuje się na waszym hardware i że nie taki diabeł straszny jak go malują. Tutoriali w internecie pełno, a chcieć to móc. A potem to już mam nadzieję tylko przyjemność użytkowania i uczenia się czegoś nowego. To nie gryzie. Nie zrażajcie się jednym distro, wypróbujcie drugie, trzecie aż będziecie zadowoleni. W przeciwieństwie do tego, czym was karmi Microsoft, z Open Source macie wybór, nikt was do niczego nie zmusza, nikt niczego wam nie narzuca. To wy o wszystkim decydujecie, a nie korporacja, bowiem kopia systemu, którą macie zainstalowaną na komputerze jest wasza i tylko wasza, tak jak i wasze są dane na dysku.

Cała Polska używa Linuksa!

Paweł Pollak wielkim pisarzem jest i basta! – cdn.

Muszę się odnieść do tego, co o mnie napisał Pan Paweł Pollak na swoim blogu, gdyż jego rozumowanie mija się z prawdą i trzeba parę spraw sprostować.

Otóż wyżej wymieniony Pan prowadzi nudnego bloga przeważnie na tematy literackie, ale też czasem dotyka innych spraw jak na przykład polityka. Do tego ma grupkę swoich fanów, którzy to osiągają niemal ekstazę przy każdym pojawiającym się wpisie. Nazwałem ich klakierami, bowiem lepszego terminu nie znalazłem. To jak towarzystwo wzajemnej adoracji. I kij mu w oko, to jego blog I jego sprawa. Jednak Pan ten (i jego zwolennicy) prowadzi dziwną krucjatę przeciw ludziom wydającym swoje dzieła, a zwłaszcza upodobał sobie tych, co korzystali z usług Wydawnictwa „Psychoskok”. Wymienił też moje nazwisko, dlatego poczułem się w obowiązku wyprowadzić Pana Pollaka z błędu, w którym tkwi już od dłuższego czasu. A że błądzić jest rzeczą ludzką, potraktowałem z początku pisaninę Pana Pollaka jako żart, ot taki tekścik sfrustrowanego pisarza, któremu zwyczajnie nie idzie w swoim rzemiośle. Ale Pan Pollak ma naprawdę jakąś manię, która mu każe atakować nie tyle moją osobę czy innych autorów, którzy tam ośmielili się wydać swoje książki, ale właśnie „Psychoskok”.

Oczywiście, że chciałbym, aby moimi tekstami Wydawnictwo zajęło się jak najlepiej, ale muszę brać pod uwagę fakt, że Wydawnictwo to firma, a firma powinna przynosić zyski w czasach kapitalizmu. Nie ma zysków, nie ma firmy. Mało tego, Wydawnictwa przynoszą straty i wiele z nich po prostu upada. Utrzymanie więc się na rynku jest nie lada wyzwaniem. Dlatego rozumiem postępowanie Wydawnictwa „Psychoskok” czy też innych tego typu oficyn. Czasy państwowego garnuszka dawno się skończyły i trzeba wyżyć w niekorzystnych warunkach. Dlatego zrozumiałym dla mnie jest fakt, iż „Psychoskok” proponuje niektórym autorom finansowanie czy współfinansowanie swoich książek. To jest w końcu ryzyko, zwłaszcza gdy sobie uświadomimy, że w obecnych czasach pisarzy coraz więcej, a czytelników coraz mniej.

I tego właśnie zdaje się Pan Paweł Pollak nie rozumie lub nie chce zrozumieć. Zarzuca mi także (nie tylko mi zresztą), iż pochlebnie wyraziłem się o moim Wydawcy. Sorry Winnetou, ale dlaczego mam się wyrażać negatywnie? Po wielu próbach wreszcie moje książki zostały wydane w Polsce. I chociaż przy negocjacjach z Wydawnictwem nie było tak słodko i nie obyło się bez nerwów po obu stronach, to jednak spotkałem się ze zrozumieniem i szacunkiem do mojej osoby, czego niestety nie mogę powiedzieć o innych polskich Wydawcach. Dlatego myślę, że takie tam przynajmniej „dziękuję” chyba Wydawcy się należy. Od dobrego słowa chyba krzywda się nie stanie. I wbrew temu, co Pan Pollak twierdzi, NIE ZAPŁACIŁEM ANI ZŁOTÓWKI Z WŁASNEJ KIESZENI ZA WYDANIE MOICH KSIĄŻEK – WSZYSTKIE KOSZTY POKRYTE ZOSTAŁY PRZEZ WYDAWNICTWO. Ja wiem, że pisanie wielkimi literami oznacza w internecie krzyk i należy używać tego z rozwagą, ale może dzięki temu ten fakt wreszcie dotrze do Pana Pollaka. I może Pan Pollak przestanie w końcu uogólniać i naciągać fakty pod swoją ideologię, gdzie każdy twórca nie zatwierdzony przez niego jako pisarz (szczególnie wydający w Wydawnictwie „Psychoskok”) jest grafomanem.

Jeśli Pan nazywa „Psychoskok” burdelem, to trzeba być konsekwentnym I burdelem nazwać każde Wydawnictwo, któremu udało się przetrwać na niekorzystnym polskim rynku. Dlaczego? Dlatego, że autorzy często muszą finansować swoje dzieła w każdej oficynie wydawniczej. W końcu nie każdy Polak jest Pollakiem i ma takie możliwości jak Pan. Nie każdy należy do tzw. mainstreamu. Już Panu chyba pisałem w komentarzu na Pańskim blogu, że to jest podobnie jak z disco polo. Muzyczny mainstream zazdrości, denerwuje się, tupie nóżką, a disco polo dalej gra, przychodzą na koncerty tłumy i kasa leci. Innymi słowy psy szczekają a karawana jedzie dalej. Podobna sytuacja w literaturze. Są tacy jak Pan, którym pozwolono (z różnych względów) być pisarzem w naszym kraju i których obdarowuje się nagrodami i zaszczytami, choćby nie wiem jakie grafomaństwo uprawiali. I są tacy, co wcale nie są gorsi niż mainstream, a odmawia się im prawa dołączenia do zaszczytnego grona twórców literackich, bowiem stanowicie zamknięty krąg. Dlatego wydają gdzie się da i jak się da. Kto ma prawo zabronić im tego? I na mocy czego? Bo się komuś to nie podoba? Podobnie jest też w innych zawodach, zwłaszcza tych prestiżowych. Ale wbrew temu naszemu polskiemu betonowi, ambitni ludzie wyjeżdżają z tego kraju i odnoszą sukcesy, o jakich literacki mainstream może sobie pomarzyć. I to jest źródło frustracji takich jak Pan, Panie Pawle. Ale głowa do góry, wpisanie w Google frazy „paweł pollak” daje 12 500 wyników, a frazy „tomasz zackiewicz” ledwie 3 440 wyników. Jestem więc rzeczywiście tylko „świeżakiem”. A może dlatego tak tego niewiele, że nie płaczę po internecie jak to zgraja barbarzyńców-grafomanów gwałci jedyną słuszną literaturę produkowaną przez polski literacki mainstream.

Dodam jeszcze, że współfinansowanie książek przez autorów to nie jest problem wyłącznie Polski. Mojej znajomej mąż jest pisarzem i wydaje w Wielkiej Brytanii oraz Australii. Jest znany i jego książki sprzedają się na pewno lepiej niż polskie i ciągle musi finansować swoje dzieła, a jego żona projektować okładki, a przecież wszystko to to przecież powinna być robota Wydawnictwa. Czasy się zmieniły, Panie Pawle. Może w końcu Pan to zauważy.

Co do mnie I mojej twórczości, to mogę dodać, iż przeszedłem do ścisłego finału (chociaż rzecz jasna nie wygrałem) konkursu literackiego dla Polonii  z fragmentem mojej powieści. Recenzentami i jurorami były znane nazwiska z tytułami naukowymi. Moje grafomaństwo zostało więc w jakimś tam sposób docenione. Przetłumaczyłem też między innymi sztukę angloamerykańską na polski dla Roya C. Bootha, z którym ściśle współpracowałem przez pewien czas w USA. Tak więc nie tylko Pan jest wielkim literatem i tłumaczem. Dalej nie będę wymieniać, bowiem nie chcę, aby Pan się poczuł źle. W końcu mimo wszystko życzę Panu dobrze i liczę na opamiętanie.

Mam nadzieję, że wyjaśniłem Panu kilka istotnych faktów. I bardzo proszę o nie wyrywanie moich zdań z kontekstu na swoim blogu i nie interpretowanie ich w sposób pokrętny, gdyż to niczemu nie służy.

Paweł Pollak wielkim pisarzem jest i basta!

Od jakiegos czasu nie zajmuję się już pisarstwem, gdyż moja praca pochłania mój cały czas. Jednak mam cichą nadzieję na powrót do tej szlachetnej aczkolwiek niewdzięcznej roboty. Tylko problem jest, czy niejaki Paweł Pollak mi na to pozwoli, gdyż zostałem przezeń zaliczony do grona “grafomanów”, bowiem moje powieści wydano w Wydawnictwie “Psychoskok”.

Można się spierać o to, jaką politykę prowadzi “Psychoskok”, jednak prawdą jest, że nikt nikogo do niczego nie zmusza. Jeśli jest co wydać i kto wydać, nie widzę problemu. Może to być coś naprawdę grafomańskiego i trudnego do przełknięcia dla “prawdziwego pisarza”. Jednak nie mnie to oceniać. Oceny dokonają czytelnicy.

Jednak Paweł Pollak mieni się sędzią jedynym i nieomylmnym w kwestii literatury i pewną twórczość nazywa “grafomańską”. Pojawiają się też inne epitety mniej godne człowieka mieniącego się polskim intelektualistą. W tej “recenzji” wspiera go grupa klakierów przyklaskujących mu przy każdym wpisie na jego mizernym blogu. No cóż, pisarz to z natury próżna istota i jak nie ma szerokiej rzeszy czytelników, wianuszek przyjaciół zawsze może podbudować nadszarpnięte pisarskie ego.

Panie Pawle, przywołał Pan między innymi moje nazwisko na swoim blogu w niezbyt korzystym świetle, ale ja nie bedę Pana straszył sądami, bo podstaw ku temu nie ma. Dla mnie to, co Pan wypisuje na pańskim blogu, jest śmieszne, a nawet żałosne. Generalnie rzecz ujmując nie żywię do Pana żadnych negatywnych uczuć, bowiem Pana zdanie na temat moich książek obchodzi mnie tyle, co zeszłoroczny śnieg. Martwię się zwyczajnie o Pana, bowiem z Pana jest “rasowy pisarz” i kiedy brak czytelników, grozi Panu pisarska śmierć, czego Panu oczywiście nie życzę. Nie znam Pana książek, więc nie będę się wypowiadał na temat Pana grafomaństwa. W zamian, jeśli Pan nie przeczytał nic mojego, proszę także nie krytykować mojej prozy. A tak poza tym, wolny rynek, Panie Pawle, czasy “komuny” oraz wszędobylskich i wszechwładnych cenzorów już się chyba dawno skończyły. Musi Pan to w końcu zaakceptować i stawanie przysłowiowym okoniem nic nie da.

Panie Pawle, głowa do góry! Będzie dobrze!

How to Fix a Corrupted Unreal Engine Project

Maybe it is easier than it is done under Unity 3D.

1/ Found the corrupted Unreal project

2/ Go into the project folder

3/ Delete Microsoft Visual Studio Solution

4/ Delete Visual Studio Solution User Options

5/ Go to the Binaries folder

6/ Delete the whole subfolder (I have the Win64 folder because I use the 64-bit system)

7/ Get out from the Binaries folder

8/ Right click on the Unreal Engine Project File and choose Switch Unreal Engine version (if the corrupted project was made with an older version)

8/ Right click on the Unreal Engine Project File and choose Generate Visual Studio project files

9/ VS project files are generated again (Microsoft Visual Studio Solution and Visual Studio Solution User Options)

10/ Go to Epic Game Launcher and launch the corrupted project

11/ You will see Missing Project modules info window and just click Yes to rebuild

12/ The corrupted project will be opened and I hope it has been fixed and ready to use