Tumblelog by Soup.io
Newer posts are loading.
You are at the newest post.
Click here to check if anything new just came in.

December 08 2019

11:00

Przycinanie plików przy pomocy ffmpeg

Lubie sobie pograć w gry. Nie będzie to oczywiście zaskoczenie dla czytelników tego bloga. Gra jako interaktywne medium ma to do siebie że mogą wydarzyć się w niej nieoczekiwane rzeczy: od błędów czy różnego rodzaju glitchy, do strzelenia niemożliwych strzałów. Jak jeszcze – względnie – niedawno wymagało to albo specjalnego przygotowania albo sprzętu, tak teraz większość kart graficznych – czy konsol – posiada funkcje nagrywania. Teraz gdy wydarzy się nieoczekiwana akcja, należy nacisnąć dedykowany przycisk na padzie, lub odpowiednią kombinacje klawiszy i ostatnie parę minut rozgrywki będziemy mieli nagrane na dysku.

Rzadko się jednak zdarza że cały film będzie zawierał akcję którą będziemy chcieli pokazać. Dobrze by było film pociąć tak by nie było trzeba całego wrzucać na YouTube. I oszczędzimy sobie czas i transfer potrzebny na wysłanie. Taką prostą operacje można wykonać w jakimś wielkim kombajnie pokroju Adobe Premier (na którego mam nadzieje macie licencje), ale równie dobrze można skorzystać z darmowego i otwarto źródłowego ffmpeg.

Zazwyczaj będziemy chcieli wyciąć ostatnie sekundy lub minuty filmu, dlatego że to w nich najprawdopodobniej będzie się działo to co chcemy pokazać. By to zrobić należy wykonać następujące polecenie:

ffmpeg -ss CZAS_OD -i PLIK_ŹRÓDŁOWY -c copy PLIK_DOCELOWY

Należy tutaj zwrócić uwagę na dwie rzeczy:

  1. Czas od którego zaczynamy wycinanie, znajduje się przed plikiem źródłowym. Jest to dlatego że ffmpeg różnie interpretuje pozycje startową w zależności od tego czy znajduje się przed czy po pliku wejściowym. Różnica jest następująca:
    • Ustawienie przed: ffmpeg wyestymuje na podstawie metadanych gdzie mniej-więcej znajduje się czas od którego chcemy zacząć wycinanie. Takie rozwiązanie nie będzie idealnie dokładne, ale będzie szybsze. I z mojego doświadczenia jest ono wystarczająco dokładne.
    • Ustawienie po: ffmpeg przeskanuje plik i zacznie wycinanie dokładnie od wskazanego miejsca. To rozwiązanie jest idealnie dokładne, ale też wolniejsze. Przy dużych filmach nawet zdecydowanie.
  2. Tajemnicze -c copy nakazuje by ffmpeg nie kodował ponownie pliku, tylko skopiował zawartość stosownych strumieni. Bez tego ffmpeg zacznie reenkodowanie filmu na podstawie domyślnych ustawień.

Co jednak jeśli chcemy wyciąć z filmu pewnie fragment ze środka, a nie tylko końcówkę? Do tego posłuży nam jeden z dwóch parametrów: -d lub -to

ffmpeg -ss CZAS_OD -d DŁUGOŚĆ -i PLIK_ŹRÓDŁOWY -c copy PLIK_DOCELOWY

lub

ffmpeg -ss CZAS_OD -to CZAS_DO -i PLIK_ŹRÓDŁOWY -c copy PLIK_DOCELOWY

Jak można się domyślić, to opcja -d służy do podania długości klipu, gdzie opcja -to służy do wskazania czasu gdzie ffmpeg ma zakończyć działanie.

Po wykonaniu którejś z powyższych komend, możemy zauważyć że kopiowane są tylko pierwsze strumienie (i te z dźwiękiem i z obrazem). Dla przykładu NVIDIA ShadowPlay (czy jak się dowiedziałem z wikipedii: NVIDIA Share) może być tak skonfigurowana by nagrywała dźwięk z mikrofonu i z systemu jako dwa osobne strumienie. Można je razem zmiksować przy pomocy „zaawansowanych filtrów”:

ffmpeg -ss CZAS_OD -to CZAS_DO -i PLIK_ŹRÓDŁOWY -filter_complex amix -c:v copy PLIK_DOCELOWY

W tym poleceniu korzystamy z specjalnego filtra nazwanego amix. Robi to na co wskazuje jego nazwa: miksuje (miesza?) strumienie audio. Domyślnie tylko dwa pierwsze. A jako że modyfikujemy strumień audio, nie możemy go skopiować, dlatego ograniczamy kopiowanie tylko do strumienia obrazu.

Jeśli mamy więcej strumieni które chcemy zmieszać, należy dodać specjalny argument do filtru:

ffmpeg -ss CZAS_OD -to CZAS_DO -i PLIK_ŹRÓDŁOWY -filter_complex amix=length=ILOŚĆ -c:v copy PLIK_DOCELOWY

A jeśli chcemy zmieszać inne strumienie niż dwa pierwsze:

ffmpeg -ss CZAS_OD -to CZAS_DO -i PLIK_ŹRÓDŁOWY -filter_complex "[0:a:IDX] [0:a:IDX2] amix" -c:v copy PLIK_DOCELOWY

Gdzie format wyboru – znajdujący się między kwadratowymi nawiasami – to:

  1. Numer pliku (czyli który to -i)
  2. Typ strumienia: audio albo video
  3. Numer strumienia

Obie techniki można oczywiście łączyć, a napisanie przykładu zostawiam czytelnikom.

Gdy pracujemy z plikami które mają wiele strumieni, jest bardzo prawdopodobne że nie będziemy chcieli ich modyfikować poza samym wycięciem z nich fragmentu. Domyślnie jednak ffmpeg skopiuje tylko pierwsze strumienie i zignoruje resztę. By skopiował wszystkie należy dodać nowy parametr: -map 0:

ffmpeg -ss CZAS_OD -to CZAS_DO -i PLIK_ŹRÓDŁOWY -c copy -map 0 PLIK_DOCELOWY

November 24 2019

11:00

Konfiguracja karty graficznej na ubuntu

Ktoś kiedyś powiedział, że Linux jest darmowy dla ludzi których czas nie jest nic warty. I mówiąc szczerze, jest w tym dość dużo prawdy. Szczególnie jeśli chce się korzystać z tego systemu do zastosowań „domowych” – czyli i do pracy i do zabawy. A jedną z sytuacji gdzie to widać jest poprawne skonfigurowanie karty graficznej w laptopie.

Zanim jednak przejdziemy do sedna sprawy musimy mieć kontekst. W „nowoczesnych laptopach” możemy często znaleźć dwie karty graficzne – szczególnie jeśli mówimy o high-endzie czy laptopach gamingowych – „wbudowaną” w procesor, często nazywaną kartą zintegrowaną, czy kartą dedykowaną / zewnętrzną. Takie rozdzielenie ma sens jeśli chodzi o laptopy i ich pracę na baterii. Karta zintegrowana jest wolniejsza i słabsza, ale dzięki temu pobiera o wiele mniej prądu czy też nie nagrzewa aż tak jak karta zewnętrzna. A karta dedykowana jest zaś silniejsza, ale skraca czas pracy na baterii i mocniej nagrzewa laptopa.

Idealnie by było gdybyśmy mogli uruchamiać gry czy inne aplikacje multimedialne na dedykowanej karcie graficznej, zaś całą resztę na zintegrowanej. I tak działa obsługa kart na Windowsie – przy uruchamianiu aplikacji możemy wybrać z którego procesora graficznego ma korzystać. A w niektórych przypadkach system sam wybierze najlepszą opcje.

Jak można się domyślić, tak to nie działa na Linuksie. Po części pewnie dlatego że system graficzny w każdej dystrybucji (czyli X Windows) pierwsze wydanie miał w 1984 roku, czyli 35 lat temu. Innym winowajcą będzie też słaba obsługa takiego mechanizmu przez sterowniki, dlatego że producenci kart graficznych nie uważają Linuksa za platformę gamingową czy też domową.

Kończąc wstęp, posiadam laptopa Dell Inspiron (którego nie polecam) z dwoma kartami graficznymi: zintegrowaną od Intela i dedykowaną od Nvidi.

Problem

Out of the box, zamknięte sterowniki do karty graficznej pozwalają na przełączanie się między nią a zintegrowaną. Takie rozwiązanie ma jednak trzy problemy, pierwsze – by zmienić kartę należy się co najmniej wylogować, drugie – gdy mam odpaloną kartę graficzną laptop się nagrzewa nawet gdy nic się nie jest uruchomione (na przykład jest wyświetlany tylko pulpit), trzeci – czas baterii jest mocno skracany.

Sterowniki otwarto źródłowe, czyli nouveau, nie są wcale lepsze w tym względzie. Dlatego na potrzeby tego artykułu je pominę i będę stosował tylko i wyłącznie oficjalne od Nvidii.

Co chcemy więc zrobić? Chcemy by można było uruchamiać per aplikacja dedykowaną kartę graficzną bez obawy o to że laptop będzie się niepotrzebnie nagrzewał czy skracał czas baterii.

Rozwiązanie

Oczywiście jak to już w ekosystemie Linuksa bywa, ktoś pomyślał że dobrze by było gdyby można było przełączać się między kartami bez potrzeby przelogowywania się. I tak z pomocą przychodzi nam program Bumblebee. Ten sam projekt o którym zrobiło się głośno gdy jeden z programistów pomylił się w i skrypcie odinstalowującym usuwał katalog /usr.

Nie nudząc jednak dalej, przejdźmy do tego jak to skonfigurować na Ubuntu. Po pierwsze będziemy potrzebowali zainstalować sam program z jego zależnościami. Do tego skorzystamy ze standardowego apt:

sudo apt-get install bumblebee bumblebee-nvidia primus linux-headers-generic

By przetestować czy oprogramowanie działa, należy wykonać następujące polecenie:

optirun -b primus glxinfo | grep vendor

Przy czym możemy nie mieć zainstalowanego programu glxinfo (który pokaże nam informacje o aktualnej karcie graficznej), by go zainstalować należy wgrać paczkę: mesa-utils:

sudo apt install mesa-utils

Wracając jednak do glxinfo, aktualnie w/w polecenie pokazuje następującą informacje:

server glx vendor string: SGI
client glx vendor string: Mesa Project and SGI
OpenGL vendor string: Intel Open Source Technology Center

Co oznacza, że program został uruchomiony przy pomocy karty zintegrowanej. Jeśli jednak u Ciebie działa to poprawnie (pokazuje się że korzystasz z karty NVIDIA) to możesz przejść do sekcji Uruchamianie aplikacji lub zweryfikować, poprzez uruchomienie glxinfo bez przedrostka optirun -b primus, czy dedykowana karta jest włączona cały czas.

Dlaczego bumblebee nie działa?

W wersji sterownika 390, nvidia zmieniła sposób w jaki on działa i poprzenosiła pliki które były wymagane do działania naszego programu. A gdy optirun nie potrafi uruchomić procesu dzięki bumblebee, to uruchamia proces bez zmiany czegokolwiek – czyli na aktualnie wykorzystywanej karcie zintegrowanej.

Jak to naprawić?

Przed przejściem do rozwiązania, zaznaczam że będzie ono przedstawione w postaci sekcji. Przy każdej sekcji należy sprawdzić czy optirun zaczął poprawnie działać, chociaż u mnie wymagane były wszystkie kroki.

Konfiguracja Bumblebee

W pliku /etc/bumblebee/bumblebee.conf, w sekcji driver-nvidia, należy poprawić ścieżki gdzie bumblebee ma szukać bibliotek:

LibraryPath=/usr/lib/x86_64-linux-gnu/nvidia-418/xorg:/usr/lib/x86_64-linux-gnu/nvidia-418:/usr/lib/x86_64-linux-gnu:/usr/lib/i386-linux-gnu
XorgModulePath=/usr/lib/x86_64-linux-gnu/nvidia-418/xorg,/usr/lib/xorg/modules,/usr/lib/xorg/modules/input

Zwróćcie uwagę, że w nazwie katalogu mamy wersje sterownika więc po jego aktualizacji będzie trzeba powtarzać ten proces.

Nie jest to jednak cała konfiguracja. Potrzebujemy jeszcze zdefiniować dwie zmienne środowiskowe:

__GLVND_DISALLOW_PATCHING=1
PRIMUS_libGL=/usr/lib/x86_64-linux-gnu/libGL.so.1

Możemy dodać je do ~/.profile lub do /etc/environment (jeśli chcecie by każde konto mogło skorzystać z opcji uruchamiania karty dedykowanej).

Modprobe

Jedną z czynności jaką wykonuje bumblebee jest dynamiczne ładowanie modułów kernela. Domyślnie jednak wraz z załadowaniem modułu nvidia dostajemy dwa inne które mogą zepsuć nam możliwość załadowania i odłączenia go. Chodzi tutaj o moduł nvidia-drm, ale także o nvidia-modeset (blokowanie go według internetu nie jest jednak wymagane).

By to zrobić, należy zmodyfikować plik: /etc/modprobe.d/blacklist-nvidia.conf lub też go utworzyć z następującą zawartością:

# blacklist nvidia
blacklist nvidia-drm
blacklist nvidia-modeset
# alias nvidia off
alias nvidia-drm off 
alias nvidia-modeset off 

Po modyfikacji tego pliku należy zrestartować komputer.

Wyłączenie gpumanager

Kernel posiada funkcjonalność o nazwie gpumanager, z tego co rozumiem nadpisuje on domyślną konfiguracje X Window by odzwierciedlało to co potrafi wyświetlić aktualna karta graficzna. Jako że chcemy się przełączać między kartami, taka funkcjonalność może nam popsuć konfiguracje.

By ją wyłączyć należy dodać do parametrów uruchomieniowych kernela parametr nogpumanger. By to zrobić należy zmodyfikować plik /etc/default/grub:

GRUB_CMDLINE_LINUX="nogpumanager"

I zatwierdzić to przy pomocy polecenia:

update-grub

Oprócz tego należy zresetować komputer.

Uruchamianie aplikacji

Jeśli wszystko poszło dobrze, to teraz można odpalić dowolny program przy pomocy dedykowanej karty graficznej.

Dla przykładu u mnie odpalenie polecenia z początku artykułu wyświetla:

server glx vendor string: NVIDIA Corporation
client glx vendor string: primus
OpenGL vendor string: NVIDIA Corporation

Co oznacza że konfiguracja działa prawidłowo. Moglibyśmy teraz skonfigurować by Steam na Linuksa odpalał aplikacje przy pomocy optiruna, ale w najnowszej wersji klienta nie jest to obsługiwane.

Źródła

Reposted bynodifference nodifference

November 17 2019

11:00

Aplikacja na pełnym ekranie której nie da się przywrócić

Taki problem miałem na Ubuntu Mate przy aplikacji Spotify. Z jakiegoś powodu aplikacja po obudzeniu laptopa postanowiła być odpalona na pełnym ekranie.

Funkcje otwarcia na pełnym ekranie posiada samo spotify (aktywować można ją w prawym dolnym rogu), ale nie było to to. Po pierwsze, dlatego że widok okna się nie zmienił (wyglądało ono tak samo jak na zdjęciu wyżej), a po drugie nie dało się tego wyłączyć przy pomocy przycisku ESC.

Dlaczego coś takiego się działo? Błąd w systemie, środowisku graficznym czy możne nawet samym spotify (sprawdzając w sieci nie byłem odosobniony z takim błędem). Z perspektywy czasu usunięcie skrótu klawiszowego – który zmieniał tryb okna – pomogło i takie błędy się mi nie pojawiają. Nie wiem jednak dlaczego ten skrót był aktywowany. Na pewno nie naciskałem go świadomie.

Ale jak to można wyłączyć oprócz restartu komputera czy ubicia samej aplikacji? Z pomocą przychodzi terminalowy program: wmctrl. Najpierw musimy pobrać tytuł okna (jeśli go znamy to można ten krok pominąć):

wmctrl -l

U mnie wynik działania tego programu wyglądał tak:

psychob@rgb-lighthouse#192.168.0.24!13:41:40
$ ~ wmctrl -l
0x01200003 -1 rgb-lighthouse Górny panel
0x01200017 -1 rgb-lighthouse Dolny panel
0x01600006 -1 rgb-lighthouse x-caja-desktop
0x04600003  0 rgb-lighthouse Mozilla Firefox
0x0500000b  0 rgb-lighthouse Urządzenia Bluetooth
0x05400007  1 rgb-lighthouse psychob@rgb-lighthouse: ~
0x07600001  5 rgb-lighthouse P.O.D. - Roots in Stereo
0x08200059  0            N/A KeePass
0x04600191  0 rgb-lighthouse Monitoring server-side ECS application with Prometheus and Grafana (see post) : gamedev - Mozilla Firefox
0x0460030c  3 rgb-lighthouse Mozilla Firefox
0x03800007  5 rgb-lighthouse Terminal
0x04800008  4 rgb-lighthouse Skróty klawiszowe

U mnie spotify aktualnie nazywa się: P.O.D. - Roots in Stereo. By zmienić tryb wyświetlania okna należy wykonać następujące polecenie, przy czym nie musimy wpisywać całej nazwy, na przykład:

wmctrl -r "P.O.D" -b toggle,fullscreen

November 14 2019

22:45

Ogłoszenia parafialne

Pisałem o tym na stronie facebookowej, ale jako że część osób może przychodzić tutaj z dziwnych źródeł to pomyślałem że warto by o tym napisać także tutaj.

Dwa miesiące temu postanowiłem, że zrobię sobie na miesiąc przerwę od publikowania tekstów. Chciałem w ten sposób nagromadzić ich trochę bym później mógł je publikować co tydzień – to w konsekwencji sprawiłoby że nie musiałbym się martwić że się nie wyrobie na deadline. Całe to postanowienie skończyło się tak jak można się domyślić, ostatni wpis na blogu o Red Dead Redemption nie powstał w w/w miesiącu.

Brak przygotowania tekstów nie oznacza że chce zrezygnować z postanowienia o cotygodniowym publikowaniu wpisów na moim blogu. Niestety mój proces pisania zajmuje trochę czasu, jako że potrzebuje zastanowić się nad tym co chce powiedzieć i jak to przekazać.

Dlatego postanowiłem że w tych cotygodniowych wpisach będą pojawiały się też krótsze formy. Wpisy które będą pokazywały rozwiązanie pewnego specyficznego (lub nie) problemu. W zamyśle ma być to taka ściąga na problemy na które napotkałem, a których rozwiązań zawsze szukam bo zapomnę sobie je zapisać.

Taki wpis pojawi się już w tą niedziele koło południa – to będzie pora o której postaram się publikować co tydzień nowe rzeczy.

Kolejny „duży” wpis będzie pewnie dotyczył Red Dead Redemption 2 i o ile chciałbym napisać że będzie on dostępny 24 listopada (czyli za dwa tygodnie), to ta gra jest tak duża że nie wydaje mi że ją skończę do tego czasu. Oprócz tekstu mam nadzieje też nagrać go by można było – zamiast czytania – obejrzeć to na YouTube (co pewnie też zajmie trochę czasu).

Na koniec chciałbym powiedzieć że strumieniuje też rozgrywkę z gier w które gram, a można to zobaczyć na moim kanale na twitch.tv.

November 10 2019

12:44

Red Dead Redemption

Red Dead Redemption jest jedną z tych gier w którą nie da się zagrać na PC – przynajmniej bez emulatora. To był jeden z powodów dla którego nie zagrałem w tego klasyka studia Rockstar gdy wyszedł on w 2010. Gdy rok temu kupiłem sobie Playstation 3 był to jeden z tych tytułów w który musiałem zagrać, szczególnie że chciałem już wtedy zagrać w trzecią odsłonę serii Red Dead, intuicyjnie nazwaną Red Dead Redemption 2. I rok temu udało mi się tą grę przejść, ale jak to bywa mimo prób nie udało mi się podsumować gry tekstem. Ostatnio postanowiłem wrócić jednak i do gry i do tekstu.

Gra opowiada historię Johna Marstona – rewolwerowca, który w 1911 roku wraca na dziki zachód zmuszony przez swoich nowych „pracodawców”. Jego zadanie to znalezienie i złapanie (żywych lub martwych): Billa Williamsona, Javiera Escuellę i Dutcha van der Linde – którzy byli razem z nim w gangu Dutcha. Jak dowiadujemy się później z gry, John został zmuszony do tego przez nowo powstałe biuro federalne (FBI), które postanowiło złożyć mu propozycję nie do odrzucenia – albo znajdziesz swoich dawnych kompanów, albo już nigdy nie zobaczysz swojego syna i żony.

Nie wiemy jednak wszystkiego od razu, gra rozpoczyna się przerywnikiem filmowym (na silniku gry) gdzie jedyne dialogi jakie są to te zasłyszane od pobliskich NPCów, które opisują nam świat w którym będzie działa się akcja gry. Jeśli chodzi zaś o samego bohatera to wszystko czego się o nim dowiadujemy jest nam przekazane przez jego jego wygląd czy stosunek do innych postaci. Wiemy że naszym protagonistą będzie kowboj, który nie lubi panów w garniturach – w domyśle agentów rządowych.

Po skończeniu przerywnika i dotarciu do celu, którym jest małe miasteczko Armadillo, John Marston wyrusza odwiedzić swojego byłego kompana Billa Williamsona, który razem ze swoim gangiem terroryzuje lokalne hrabstwo. Jak można się domyślić wyruszenie do kryjówki lokalnego watażki i błaganie go o to by się poddał nie jest dobrym pomysłem i John kończy z kulą w piersi. To jest – jak można się domyślić – początek historii Johna.

Gra jest podzielona na cztery rozdziały, gdzie każdy dotoczy jednego członka gangu: pierwszy Billa, drugi Javiera, trzeci Dutcha, ostatni zaś podsumowuje historię samego Johna. I słowa „dotyczy” używam tutaj bardzo szczodrze, bo o ile poznajemy historię Johna, to jedyne czego dowiadujemy się o „głównych złych rozdziału” to tego że zostawili go na śmierć.

Jeśli chodzi o mechanikę, każdy z tych rozdziałów (poza czwartym) odblokowuje część mapy gdzie będzie się działa jego akcja. Z samym odblokowywaniem części mapy mam problem, dlatego że o ile mogę się zgodzić że sąsiednie państwo nie pozwala na przejście granicy i dzięki temu nie możemy się do niego dostać na początku. To nie rozumiem dlaczego hrabstwo odblokowywane w trzecim rozdziale jest zablokowane na początku gry. Przecież jest to część Stanów Zjednoczonych, co nie? Czyżby miastowi nie mogli znieść widoku ciężko pracujących farmerów? Nie czepiałbym się tego, gdyby nie to że gra tłumaczy – w gazecie którą można kupić – dlaczego nie można się dostać aktualnie do meksyku.

Nie będę się tutaj bardzo rozwodził o historii opowiedzianej w grze, dlatego że na samym końcu tego tekstu polecę tą grę przede wszystkim dla niej. Przyczepie się jednak do rozdziału dziejącego się w meksyku i jego konkluzji.

Celem drugiego rozdziału – prócz dorwania Javiera – jest obalenie dyktatora który rządzi daną krainą i zainstalowanie tam jednej z postaci pobocznych. W trakcie naszego zadania poznajemy różne postacie, które z różnym stopniem entuzjazmu reagują na tego typu plany. Rozdział kończy się zamontowaniem nowego „lepszego” dyktatora który – jak dowiadujemy się z gazety na końcu gry – nic nie zmienia.

Problem mam z tym taki, że Marston – jak i sam gracz, czy postacie niezależne – jest wykorzystywany przez tego pretendenta i nic nie można z tym zrobić. Może kłuje mnie to że pretendent się z tym nie kryje, a może to że ten cały rozdział pokazuje to co spotyka idealistów gdy stykają się z realnym cynicznym światem. Można oczywiście doszukiwać się tu paraleli do epilogu, gdzie pokazuje to że nic co zrobimy i tak na końcu nie zmieni naszego losu.

Jeszcze zwrócę uwagę na jeden szczegół z meksyku. W jednej z misji, NPC komentuje że John skacząc między płotem może się na niego nadziać. Jest to aluzja do tego że możemy – i przez możemy rozumiem że w końcu musimy – robić zadania dla aktualnego reżimu. I to może być powód dla którego ludzie nie chcą pomóc mu w znalezieniu Javiera. Problem w tym jest taki, że tą misje da się zrobić zanim zaczniemy ugadywać się z reżimem czy to rebeliantami. Jest to mały problem z ciągłością historii, ale kuło mnie to gdy przechodziłem tę misje.

Jeśli chodzi o rozgrywkę, to mamy tutaj standardową strzelankę trzecioosobową. John Marston strzela tam gdzie wskażemy a do dyspozycji ma różnego rodzaju osłony za którymi możemy się schować. Co prawda nie grałem w GTA 4 na konsoli, ale zgaduje że oba systemy walki są podobne. Red Dead Redemption ma jednak jeden dodatkową mechanikę: system celowania dead eye. Działa to tak że John może w dowolnym – zakładając że nie mamy pustego paska – momencie spowolnić czas i zaplanować gdzie mają lecieć kolejne pociski.

Z jednej strony upraszcza to rozgrywkę – szczególnie jeśli ustawimy w opcjach by system dead eye automatycznie kierował celownik na wroga – i dodaje to de facto specjalny przycisk wyjścia z każdych tarapatów. Ale z drugiej strony, sprawia to że możemy poczuć się jak rewolwerowiec, który dzięki latom praktyki – której my przecież nie mamy – potrafi posłać sześć kolejnych kul w stronę przeciwników którzy mają pecha i stoją po drugiej stronie lufy.

Oprócz walki co możemy jeszcze w tym świecie zrobić? Możemy jeździć na naszym koniu, czy też bardziej generalnie poruszać się. Jeśli chodzi o system poruszania się, to gra preferuje bardziej realistyczne podejście do tematu, dzięki czemu bieganie przypomina bardziej popychanie bohatera niewidzialną ręką rynku.

Jeśli chodzi zaś o konie, to w grze jest ich wiele rodzajów, mają swoje własne statystyki i zamysł projektantów był pewnie taki by je zdobywać (w domyśle kraść, ale można też je ujeżdżać) i zamieniać na lepsze. Tak pewnie by było, gdyby nie to że – w wersji w którą ja grałem czyli Game of the Year – od początku rozgrywki mamy do dyspozycji jednego z najlepszych koni – i to za darmo.

Przy podróży przez dziki zachód możemy spotkać na trasie szeryfa któremu uciekło dwóch więźniów, albo możemy spotkać damę której ktoś ukradł wóz z koniem i tym podobne. Mechanika losowych zdarzeń sama w sobie jest ciekawa, tylko w tej grze jest za mało typów wydarzeń. Pod koniec gry gdy jeździłem po mapie i pojawiało mi się że ktoś potrzebuje mojej pomocy to wiedziałem od razu jakiego typu jest to wydarzenie. Szeryf, pomoc kobiecie, zasadzka, próba kradzieży konia czy zmierzenie się z NPCem w strzelaniu, szukaniu kwiatów czy polowaniu.

Inną rzeczą którą możemy zrobić w świecie gry, jest zbieranie roślin i polowanie na zwierzęta. Same czynności w sobie nie prowadzą do niczego, jedyny zysk jaki z nich mamy to możliwość ich sprzedania. Nie można ich łączyć w jakimś systemie wytwarzania przedmiotów, bo takowy nie istnieje. Jedyne gdzie to zbieractwo się przydaje to do systemu wyzwań.

W grze mamy 6 głównych wyzwań które są podzielone na 10 mniejszych. I nie miałbym nic do tego, gdyby nie fakt że te pod-wyzwania trzeba robić w ustalonej przez dewelopera kolejności. Weźmy dla przykładu wyzwanie Survivalist, które polega na zbieraniu kwiatków. Każdy poziom wyzwania wymaga od nas zebrania odpowiedniej ilości jak i specyficznego typu rośliny. Kwiaty w świecie gry są zazwyczaj zgrupowane w strefy które gracz będzie zwiedzał wykonując główne misje. Co jeśli pójdziemy do nowej strefy zanim skończymy zbieranie kwiatków? To musimy się wrócić. Nie będziemy mieli też zaliczanych roślin z wyższych poziomów wyzwania jeśli uda nam się je znaleźć wcześniej.

Samo zbieranie kwiatów to jest definicja busy-work, chodzimy z punktu A do punktu B szukając kwiatów po drodze. Możemy zmniejszyć ilość błądzenia po mapie dzięki specjalnemu przedmiotowi: Survivalist Map, które przez 20 minut oznacza na naszej mapie lokacje wszystkich kwiatów.

Moim pomysłem na naprawienie tego było by odblokowanie wszystkich „pod-wyzwań” od razu i danie możliwości graczowi by mógł je naturalnie zebrać gdy będzie podróżował po mapie. Sam limit kwiatów do zebrania musiałby pewnie być lekko podwyższony, ale koniec końców – według mnie – ulepszyło by to rozgrywkę.

Inną kwestią są nagrody za zrobienie tych wyzwań. Dla przykładu wykonanie 5 wyzwań z kategorii Survivalist nagradza nas tym, że Survivalist Map działa nie 20 a 40 minut. Zaś zrobienie wszystkich wyzwań z tej kategorii daje nam specjalny przedmiot: Tonik – który odnawia pasek dead eye. Jest to o tyle bezużyteczne że po ukończeniu wszystkich wyzwań z tej grupy nie będziemy potrzebowali korzystać z mapy (bo najbliższe kwiaty i tak się pojawiają na mapie) a pasek dead eye sam się odnawia i w grze są inne przedmioty które potrafią go odnowić a można je kupić w sklepie.

By nadal być negatywny chciałbym ponarzekać jeszcze na animacje. I nie chce pisać że są słabe – bo nie są – tylko jest ich za dużo. Przy zebraniu kwiatka, odpala się animacja. Przy oskórowaniu zwierzęcia, mamy animacje. Przy zbieraniu przedmiotów z zabitych przeciwników – animacja. Nie da się ich pominąć (chyba że uda nam się odpowiednio wjechać koniem) i musimy czekać aż się skończą. A jeśli postanowimy – tak jak ja przy pierwszym przejściu – zajrzeć pod każdy kamień na który się natkniemy czy przeszukać każdego przeciwnika którego pokonamy, to skumuluje nam się dużo animacji. Na dłuższą metę: powtarzalnych i nudnych.

Sama gra bardzo dużo czerpie z innej serii Rockstara czyli z wspomnianego wyżej Grand Theft Auto. Mamy więc poboczne „marnowacze czasu” takie jak poker, blackjack, granie w kości czy rzucanie podkową. Gdzie poker potrafi trwać wiele dni (przynajmniej w świecie gry), a dla mnie mechanika rzucania ową podkową nigdy nie została poprawnie wytłumaczona.

Nagrodą za wygranie w takim pobocznym zadaniu są pieniądze. Według mnie nie opłaca się jednak bawić w coś takiego dlatego że kombo misje + zbieranie paprotek jest bardziej dochodowe – jak ja ukończyłem tą grę pierwszy raz na koncie miałem ponad 10 tysięcy dolarów. Co gorsza, nie miałem na co ich wydać, dlatego że wszystko można znaleźć przy poległych przeciwnikach.

Mamy też system szybkiej podróży który czerpał swoją inspiracje z tego dostępnego w GTA 4. Podróżować możemy albo ze swojego obozu, który możemy rozłożyć w dowolnym miejscu o ile nie jest za blisko miasta, bandytów czy drogi, co tak swoją drogą oznacza więcej animacji. Albo możemy też znaleźć w świecie gry dyliżans który zawiezie nas za opłatą do miejsca do którego chcemy jechać. Tutaj widać inspiracje GTA 4, bo gdy już opłacimy przejazd możemy obserwować jak dyliżans przemierza drogi. Możemy też – jak normalni ludzi – ominąć to i przejść od razu do miejsca docelowego.

Na sam koniec warto wspomnieć o misjach głównych i pobocznych. Misje główne są podtrzymywane przede wszystkim dzięki dialogom, fabule i postaciom. Piszę tak dlatego że schemat misji jest identyczny: idź do jakiegoś miejsca gdzie będziesz strzelał do złych. O ile gra stara się nieco urozmaicić ten schemat poprzez lokacje gdzie będziesz strzelał do innych, to zazwyczaj misja kończy się strzelaniną. Brakuje mi tutaj kreatywności która była choćby w GTA San Andreas czy w prequelu – o którym mam nadzieje w przyszłości napisze – Red Dead Redemption 2.

Misje poboczne – podobnie jak główne – opierają się na scenariuszu. Nie ma w nich aż tylu strzelanin, jednak najwięcej co mogą zaoferować to „fetch questy”, czyli zadania polegające na zdobyciu przedmiotu i zaniesieniu go zainteresowanemu.

Jeśli chodzi o warstwę techniczną, to paleta barw jest dość blada. I o ile gra posiada funkcje zmiany kontrastu/odcieni, to nie rozumiem dlaczego nie jest to ustawione poprawnie domyślnie. Na monitorze 2K gra wygląda… brzydko. Ale z późniejszych testów mogę z pewnością stwierdzić że była to wina rozciągnięcia obrazu który jest domyślnie w 720p.

Muzyka jak i oprawa dźwiękowa jest za to bardzo dobra. Soundtrack gry należy do tych które zostają z tobą nawet jak przejdzie się grę. Mi się osobiście ścieżka dźwiękowa bardzo podoba i jestem szczęśliwy że można ją znaleźć na spotify. Ale z drugiej strony ja ten soundtrack odkryłem zanim zagrałem w grę więc mogę być stronniczy.

Podsumowując, historia jest największym atutem Red Dead Redemption. Sposób w jaki został opowiedziany epilog do historii Johna Marstona i gangu którego był członkiem jest bardzo dobry i nadal ma swój czar w 2019 roku. Oprócz tego muzyka czy atmosfera która wprost wylewa się z ekranu. Rozgrywka zaś – mimo że bardzo powtarzalna – jest wystarczająco ok by nie nudzić. Te wszystkie cechy są powodem dla którego mogę bez żadnych skrupułów polecić tą grę.

August 25 2019

09:10

Prince of Persia (2008)

Prince of Persia, jest jednym z klasyków gier komputerowych. Oryginalnie wydany w 1989 roku na komputer Apple II (a później w zasadzie na wszystkie inne platformy), przeszedł długą drogę od oryginalnej trylogii, wykupienie praw do serii przez Ubisoft i stworzenie przez nich trylogii Piasków Czasu, aż do 2008 roku gdzie zostanie wydana gra o takiej samej nazwie: Prince of Persia. Co powoduje że muszę dodać do tytułu tego wpisu rok jej wydania, by ludzie wiedzieli o której grze pisze.

Głównym powodem dla którego Ubisoft Montreal – w którym powstały między innymi gry z trylogii Piasków Czasu – postawił na taki ruch był reset serii. Z perspektywy ponad dekady, możemy stwierdzić z pewnością, że reset był nieudany. W tej sub serii gier powstała tylko jedna gra – tytułowy Prince of Persia (2008) – i jedno DLC, które z tego co rozumiem zawiera zakończenie którego brak w bazowej grze. A kolejną grą z serii (ignoruje gry mobilne i Ty drogi czytelniku także powinieneś) jest The Forgotten Sands który kontynuuje historię z Piasków Czasu.

Miała być to pierwsza gra z serii wydana na konsole next gen™, którymi wtedy były Playstation 3 i Xbox 360. Jak dobrze pamiętam, jej port na PC miał nie mieć żadnego DRM, co było interesującym wyborem w tamtym czasie. Trudno mi stwierdzić czy się to opłaciło, na Wikipedii jest napisane że w miesiąc (gra była wydana w grudniu 2008 roku, a raport jest ze stycznia 2009) sprzedano ponad dwa miliony kopii na wszystkie platformy.

Zanim przejdę do krytyki gry, chciałbym wspomnieć że grałem w tą grę na PC plus/minus dekadę temu, nawet w jego pełną polską wersję której teraz nie da się kupić oficjalnie (przynajmniej w sklepie Ubisoftu). Na początku myślałem że jest to sytuacja podobna jak przy pierwszym Assassin’s Creedzie którego w Polsce wydawała Cenega i Ubisoft nie ma praw do jego tłumaczenia, ale nie na Wikipedii jest napisane że to Ubisoft Polska wydawał tutaj grę. Więc decyzja o tym, by nie można było kupić tego tytułu po polsku jest dość dziwna.

Wracając z tej dygresji, chciałem napisać że miałem z tą grą związane miłe wspomnienia – z dzisiejszej perspektywy kompletnie nie rozumiem czemu – ale pamiętałem też o tym że końcówka była rozczarowująca. Dekadę później odświeżam sobie tą grę na PS3. Mając ten wstęp za sobą możemy omówić grę:

Jak można się spodziewać gra o nazwie Książę Persji opowiada historię nieznajomej hieny cmentarnej, która wracając z grabieży zgubiła zrabowany skarb i przez swoją własną niezdarność została wplątana w wojnę dobra ze złem. Można powiedzieć że trochę przesadzam, ale protagonista nigdy nie zostaje w historii przedstawiony, a jedyne co wiemy na początku to jest to że zrabował niedawno jeden z grobowców i dlatego ucieka przez pustynie.

Pustynia okazuje się dla niego nieprzyjaznym miejscem z dwóch powodów: pierwszym będzie burza piaskowa – tak mocna że powoduje spadki FPSów, a drugim utrata skarbu który niosła jego oślica. Nieszczęścia jednak chodzą trójkami i nasz bohater spada do – jak się później dowiadujemy – kanionu, który musiał być dość dobrze ukryty skoro nasz bohater go nie zauważył, choć z drugiej strony nigdy nie łaziłem po pustyni w trakcie burzy piaskowej, więc może miał prawo go nie zauważyć.

W kanionie spotyka Elikę – księżniczkę tej krainy – która ucieka przed strażnikami nasłanymi na nią przez jej ojca. W tym momencie kończy się przerywnik filmowy i zaczyna się prawdziwa rozgrywka. Gra rozpoczyna się od przedstawienia nam mechaniki poruszania się, jak i mechaniki walki.

Po przejściu tego samouczka, dowiadujemy się że w tym miejscu znajduje się więzienie dla Arymana – Boga Ciemności. Ojciec Eliki – z jakiegoś powodu – postanowił po wielu latach Go uwolnić i to właśnie dlatego Elika musi go powstrzymać. Nieksiąże jest sceptycznie nastawiony do tego i nawet stwierdza że Aryman jest straszydłem którym straszy się niegrzeczne dzieci. Ale jako że gra postanowiła w trakcie samouczka że niepers nie może po prostu uciec z kanionu – bo jedyna droga z niego została zniszczona – to postanawia że póki nie znajdzie innej drogi to pomoże Elicę z jej zadaniem.

Po dostaniu się razem z Eliką do celi Arymana, dowiadujemy się też że sam Bóg Ciemności nie jest jeszcze uwolniony i mamy czas by „uzdrowić płodne pola” które spowodują że Aryman zostanie ponownie zamknięty. Nie będzie to jednak takie łatwe, dlatego że każdego z tych płodnych pól chroni jeden z pomagierów głównego złego.

Jeśli chodzi o historię, to nie jest to zła podstawa. Mamy zdefiniowane zło, którym jest… po prostu Bóg Ciemności i jego pomagierzy, jak i mamy zdefiniowane dobro, którym jest Elika i z braku laku nieznajomy. Jeśli chodzi zaś o rozgrywkę, to nie jest to zły początek, bo mamy ustawiony konkretny cel (uwięź Arymana, a to zrobisz dzięki uzdrowieniu płodnych pól) i drabinę do pokonania: pokonaj każdego z pomagierów.

Główną mechaniką gry jest poruszanie się – i co trzeba przyznać autorom – udało im się stworzyć system w którym fajnie się porusza. Jest to przede wszystkim zasługa modeli i animacji, dlatego że sam system poruszania się jest bardzo prosty. Do dyspozycji mamy aż trzy przyciski: skok, akcja kontekstowa i akcja kontekstowa z Eliką.

W późniejszych etapach gry odblokowujemy dodatkowe mechaniki, tylko są one przypisane do poszczególnych sekcji na mapie gry i nie można z nich skorzystać wtedy gdy ma się na to ochotę.

Ale nie jest to problem sam w sobie, takie Mario też ma ograniczony zestaw ruchów które możemy wykonać od początku gry, a jednak ludzie na niego nie narzekają. Dlaczego?

Największą różnicę w tej grze robi projekt map, albo może raczej decyzja twórców o tym że gra powinna mieć otwarty świat i to dzięki temu projekt map jest bardzo prosty, powtarzalny i nigdy nie ewoluuje.

Świat gry jest podzielony na 24 sekcje, mamy 4 pomagierów gdzie każdy dostaje 6 swoich sekcji. Z tej puli można usunąć jedną sekcje per boss, bo jest to tylko walka z bossem. Pozostała sekcje podążają tym samym schematem: wszystkie są zbudowane na obrzeżach kanionu, a jeśli nie to będą częścią jakiejś kołowatej struktury której obrzeża będziemy mogli zwiedzać. Skutkuje to tym, że będziemy mieli zawsze dwie drogi, jedną do przodu a drugą do tyłu.

Jedyne rozwidlenie jakie napotkamy będzie nas prowadziło, albo do korytarza prowadzącego do innej sekcji, albo do korytarza prowadzącego nas do środka sekcji gdzie znajduje się boss i płodne pole. Wszystkie sekcje zapychające – z pominięciem pierwszej – wymagają w tym miejscu by mieć odblokowaną jedną z mocy – o której później – która pomoże w przedostaniu się dalej.

Zazwyczaj w/w moc pomoże nam w przedostaniu się na samą arenę gdzie będziemy mogli stoczyć walkę z pomagierem. Po jego pokonaniu, możemy przystąpić do uzdrowienia pola i collectathonu, o którym także później. I każda sekcja zapychająca ma ten sam schemat.

Sekcje w której jest tylko walka z bossem, też są schematyczne. Dlatego że zawsze będą składały się z dwóch części: sekwencja platformowa która wymaga skorzystania z dwóch mocy, a nie tylko z jednej i ostatniej walki z pomagierem.

Nie byłoby w tym nic złego, gdyby nie to, że same przeszkody które pokonujemy w każdej z sekcji się mocno ze sobą pokrywają. Nie ma też wariacji samych przeszkód, a każda z nich to de facto jedno wejście i jedno wyjście.

I by była jasność, nie potrzebuje by raz na parę godzin gra zmieniała swoje mechaniki w taki sposób że byłaby to de facto inna gra. Chciałbym by cyklicznie były wprowadzane nowe mechaniki tak by poruszanie się po mapie ciągle sprawiało przyjemność. Albo by projekt map był wystarczająco interesujący.

Gdy dojdziemy do bossa danej sekcji i go pokonamy to następnie musimy uleczyć płodne pole. Powoduje to, że z całej sekcji zostaje usunięta czarna maź, która jak mniemam reprezentuje moce Ahrimana. Razem z mazią z mapy są usuwani wszyscy przeciwnicy. Co więc mamy do roboty w sekcji która została już uleczona?

Collectathon. Czyli zbieranie kul… energii? światła? plemników? Nie za bardzo wiem czego, a że piszę ten wpis długo po tym jak przeszedłem tą grę to już nie pamiętam jak je nazywała gra. Po uleczeniu płodnego pola w sekcji pojawiają się kule – przede wszystkim blisko głównej ścieżki. Nie ma kul które byłyby ukryte i w całej grze są tylko dwie które wymagają pewnej techniki by je zdobyć. A w grze ich wszystkich jest 1001.

Same kule służą do odblokowywania specjalnych mocy, o których wspominałem wcześniej. Dwie z tych mocy są wariacją na temat skoku, a dwie kolejne to latanie i bieganie po ścianie, oba ograniczone przez wcześniej wytyczony korytarz. Tych mocy nie można wykorzystać od razu po odblokowaniu, tylko należy znaleźć specjalny przycisk – który będzie się świecił na kolor wcześniej odblokowanej mocy – w świecie gry.

Warto wymienić irytującą cechę wyżej wymienionych mocy: latania i chodzenia po ścianach: bardzo łatwo źle oszacować przez jaką dziurę twórcy chcą byśmy przelecieli, szczególnie że decyzje musimy podjąć w pół-sekundy przy dziwnej perspektywie. Tak samo irytujące jest to, że gdy podczas chodzenia po ścianach wystarczy – nawet nie dotknąć, tylko – musnąć przeszkodę: byśmy spadli. Co tworzy frustrującą rozgrywkę typu: trial & error.

Ostatnią mechaniką którą chciałbym przedstawić jest walka. Nie pasuje ona do tej gry, dlatego że jest bardzo statyczna i nie wykorzystuje potencjału ruchowego nieksięcia. W czasie walki nie możemy skakać po ścianach by zdobyć jakąś przewagę nad przeciwnikiem, tylko stoimy jak ten cieć i staramy się zbliżyć do przeciwnika by można było zacząć atakować.

I odległość od przeciwnika na której możemy zacząć go atakować, jest irytująco mała. Niepers ma jeden atak „dystansowy”, którym jest rzucenie Eliki do walki. Ale by go uruchomić należy być na tej samej odległości gdzie możemy zaatakować przeciwnika innymi atakami. Jest to o tyle śmieszne, że animacja sugeruje że Elika wyskakuje zza nieksięcia by doskoczyć na zawrotną odległość pół metra.

Kolejną irytującą rzeczą jest arena na której toczą się walki. Za każdym razem jest to koło o dość niskim promieniu, które jest jeszcze bardziej ograniczane przez maź która lubi być na brzegach każdej areny. Warto tu wspomnieć, że gdy to my wejdziemy do tej mazi to „musimy walczyć o życie” w QTE. A gdy przeciwnik w nią wejdzie to jest wzmacniany. Nie byłby to problem gdyby nie sposób walki.

Walka jest na tyle prosta i niewymagająca, że można całą grę przejść nie bawiąc się zdobywanie żadnych kombosów. Jednak jeśli chcemy zadać więcej obrażeń, to musimy się ich nauczyć, bo łączenie różnych ataków pozwoli nam na pozbycie się przeciwnika szybciej. Irytującą cechą tego systemu jest to że niepers będzie się dużo przemieszczał po arenie, dzięki czemu bardzo łatwo jest trafić w maź lub na skraj areny. Mi wielokrotnie zdarzyło się, że po bardziej skomplikowanej sekwencji, przeciwnik i ja lądowaliśmy w mazi która odradzała jego życie i a ja musiałem „walczyć o życie”.

Wróćmy jednak do historii, dlatego że chcę zaspoilerować jej końcówkę która mnie irytuje. Nie martwcie się, jeśli nie przeszliście tej gry przez ostatnie 10 lat, to pewnie jej i tak jej nie przejdziecie. Ale jeśli z jakiegoś powodu nijakość was przyciąga, to możecie ominąć 6 następnych akapitów.

W trakcie gry nieznajomy i Elika poznają dlaczego jej ojciec (który przez całą grę nie został przedstawiony z imienia) ją zdradził i chciał uwolnić Arymana. Okazuje się, że przy jednym z jej skoków wpadła do jakiegoś dołu i zginęła. Jej ojciec by ją uratować zawarł pakt z diabłem, za który swoją drogą zapłacił bo nie dożył końca gry. Historia tragiczna, dlatego że gdy Ahriman został ponownie zamknięty w swojej celi i jego moce przestały działać na ten świat to Elika umarła.

I co robi w takiej sytuacji nieksiąże? Po przejściu przez 24 sekcje mapy, po pokonaniu wszystkich pomagierów, po doświadczeniu mocy Arymana i nawet po byciu zarażonym przez jego maź w jednym momencie. Po zapewnieniach Eliki że Aryman jest najgorszym co mogłoby się przytrafić tej krainie jak i samemu światu?

Postanawia pomyśleć penisem i zawrzeć pakt z diabłem by wskrzesić Elikę. What the fuck?

Nie ma to dla mnie sensu z perspektywy charakteru nieznajomego. Poznajemy go jako awanturnika, który nie dba o zdanie innych i nie przejmuje się innymi. Więc końcówka świadczy o tym, że niczego się nie nauczył. Że nadal jest samolubnym chujem.

Co więcej, zostawił świat w gorszej sytuacji niż go zastał na początku historii. Bo na samym początku Elika chciała uratować świat i może by się jej to udało bez pomocy nieksięcia (wątpliwe, ale możliwe). A teraz po jej wskrzeszeniu jest to niemożliwe, bo niepers i Elika przerwali wypuszczanie Arymana gdy chciał to zrobić jej ojciec. Nieznajomy zaś go po prostu wypuścił.

Z perspektywy rozgrywki też nie ma to sensu, dlatego że ostatnie 15 godzin które spędziłem z tą grą idą do kosza. Świat jest w jeszcze gorszej pozycji niż go zastaliśmy, bo Bóg Ciemności może swobodnie się szlajać po świecie.

Takie rzeczy jak złe zakończenie historii i kiepska mechanika która przez całą grę nie ewoluuje w znaczący sposób, powodują że nie mogę polecić tej gry. Nawet dla fanów serii będzie to za mało formuły która powodowała że w Piaski Czasu się fajnie grało.

Nie warto w tą grę grać.

August 18 2019

13:30

Konfiguracja Linuksa

Największym plusem Linuksa jest to że można go mocno spersonalizować i dostosować do swoich potrzeb. W tym wpisie opiszę konfiguracje z której ja korzystam i która – mam nadzieje – ułatwi Wam w jakiś sposób korzystanie z Linuksa.

GRUB

Jedną z pierwszych rzeczy którą pamiętam przy korzystaniu z Linuksa było to że przy uruchamianiu go zawsze wyświetlał się log zamiast tak zwanego splash screenu. Aktualnie nie jest to jednak domyślna konfiguracja. By to zmienić należy zmodyfikować plik: /etc/default/grub i zmienić linie:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

na:

GRUB_CMDLINE_LINUX_DEFAULT=""

Po modyfikacji należy wykonać następujące polecenie:

sudo update-grub2

Snap

Snap jest jednym z wielu menedżerów paczek który jest dostępny na Linuksa – głównie na Ubuntu i ich różnego rodzaju dystrybucje. Jego plusem jest to że dystrybuuje aplikacje razem z zależnościami i umieszcza je w stosownym sandboxie.

Nie miałem z nim problemów, do czasu aż nie zauważyłem że wrzuca wszystkie zainstalowane aplikacje do /var/snap: który u mnie jest na mniejszym – szybszym dysku. Jako że przez snapa zainstalowałem między innymi dockera, nie podobała mi się perspektywa by cały dockerowy cache, volumeny i tego typu pliki przetrzymywać na dysku systemowym. Ale jako że nie jest to windows, można ten katalog przenieść w inne miejsce.

By przenieść snapa, nie można po prostu przenieść katalogu i zrobić symlinka, jako że snap korzysta z AppArmour które tego typu zachowań nie lubi. By go przenieść, musimy więc zamountować odpowiedni katalog.

Na samym początku należy wyłączyć samego demona snapa:

services snapd stop

Gdy już to zrobimy należy – jako root – skopiować zawartość katalogów: /var/lib/snapd i /var/snap do nowych lokalizacji – tam gdzie ich miejsce, przy okazji z oryginałów robiąc backup:

cp -r /var/lib/snapd ~/.offload_drive/snapd
cp -r /var/snap ~/.offload_drive/snap

mv /var/lib/snapd /var/lib/snapd.bak
mv -r /var/snap /var/snap.bak

Później należy utworzyć te katalogi na nowo, jako że gdy chcemy coś zamountować, to musimy mieć do tego katalog.

mkdir /var/lib/snapd
mkdir /var/snap

Na sam koniec należy dodać do pliku /etc/fstab następujące linie:

/home/psychob/.offload_drive/lib_snapd    /var/lib/snapd  none  bind     0    0
/home/psychob/.offload_drive/var_snap     /var/snap       none  bind     0    0

I zatwierdzić to poleceniem:

mount -a

Źródło: 1

Bash

Bash jest domyślnym shellem w Ubuntu i wyłącznie z tego powodu jest tym z którego korzystam. A skoro już z niego korzystam, to miło jest go sobie spersonalizować. Tutaj jedyne co opiszę to jak zmodyfikować $PS1, czyli tak zwany prompt.

Najprostszą rzeczą przy modyfikacji promptu, jest skorzystanie z gotowych generatorów, na przykład z bashrcgenerator.com. Na tej stronie wystarczy wyklikać sobie wymarzonego prompta, i gdy skończymy to wystarczy wygenerowany kod dodać na końcu pliku: ~/.bashrc.

Ale skoro już upiększyliśmy sobie prompta, to fajnie byłoby gdyby wyświetlał nam brancha jeśli jesteśmy w jakimś repozytorium. By to zrobić, należy do $PS1 dodać następujące wyrażenie:

$PS1 +="\$(__git_ps1 '(%s) ')"

Ale nie zadziała to tak od razu, bo potrzebujemy mieć jeszcze definicje funkcji __git_ps1, można ją znaleźć na stronach githuba. By wszystko zadziałało, należy dodać przed skorzystaniem z w/w funkcji kod który dołączy ten plik do naszego ~/.bashrc.

source ścieżka-do-pliku

Źródło: 1,2,3,4

Docker

Docker jest jednym z tych narzędzi które na stałe weszły do zestawu narzędzi każdego dewelopera (czy tego chce czy nie), więc dobrze jest go sobie poprawnie skonfigurować.

By nie było potrzeby przełączanie się na roota za każdym razem gdy chcemy coś zrobić z naszymi kontenerami, warto dodać naszego użytkownika jako zaufanego. By to zrobić należy dodać siebie do grupy docker.

sudo usermod -a -G docker psychob

Przy czym może zdarzyć się to, że po zainstalowaniu dockera, nie będziemy mieli takiej grupy. W takim wypadku należy ją stworzyć:

sudo groupadd docker

Docker domyślnie korzysta z sieci 172.12/16, może być to dość niefortunne gdy w naszym domu lub pracy korzystamy z takiego zakresu, na szczęście łatwo jest to zmienić w konfiguracji. W pliku /etc/docker/daemon.json (lub jeśli zainstalowaliście dockera przez snapa to: /var/snap/docker/current/config/daemon.json), należy dodać następującego json’a:

{
  "bip": "172.26.0.1/16"
}

Po tym należy zrestartować dockera

Źródło: 1,2

SSH

SSH jest wygodnym sposobem na uwierzytelnienie siebie w komunikacji z innymi serwerami. W szczególności jeśli korzystamy z szyfrowania asymetrycznego i kluczy RSA.

Zawsze gdy konfiguruje na nowo system, to nigdy nie pamiętam jakie uprawnienia mają mieć pliki id_rsa i id_rsa.pub:

chmod 0600 id_rsa      # RW only for owner
chmod 0644 id_rsa.pub  # RW for owner, Read for anyone else

Innym problem zaczyna się wtedy, gdy musimy korzystać z większej ilości kluczy, jak wtedy zarządzać nimi by ssh samo wiedziało który klucz służy do jakiego połączenia? Służy do tego plik ~/.ssh/config.

Należy w nim wymienić zapisać hosty z którymi się chcemy łączyć, jak i kluczy z których powinien korzystać.

Host work.git.com
    HostName work.git.com
    User git
    IdentityFile ~/.ssh/id_rsa_work


Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa


Źródło: 1, 2

Firefox

Bardzo dużo czasu spędziłem na Windowsie i przyzwyczaiłem się do konfiguracji firefoxa która jest domyślnie na tym systemie. Co prawda nie rozumiem dlaczego różni się ona między systemami, ale pewnie jest to jedna z tych rzeczy które dawno temu zostały ustalone i nikt nie chce ich teraz zmienić.

By zmienić niżej wymienione rzeczy należy wejść na stronę about:config i zmienić następujące rzeczy:

Co jest zmieniane Klucz Wartość Klawisz backspace odpowiada za cofnięcie się do poprzedniej strony browser.backspace_action 2 Firefox nie wyłącza się gdy zamkniemy ostatnią kartę browser.tabs.closeWindowWithLastTab false

Źródło: 1, 2

VIM

VIM jest jednym z tych narzędzi na którego ludzie lubią psioczyć, nie bez powodu. Jest to trudne w obsłudze narzędzie które ma tą zaletę że jest w zasadzie zainstalowane wszędzie. Można je nawet ulepszyć stosując odpowiednią konfiguracje, a taka znajduje się na wiki vima. Dla mnie jest wygodniej jak wyłączy się obsługę myszy:

" Enable use of the mouse for all modes
" set mouse=a

Źródło: 1

PHPStorm/Jetbrains IDE

Projekty przy których pracujemy mogą być bardzo duże, dlatego środowiska programistyczne od jetbrains sugerują by dostosować konfiguracje systemu. Dzięki zmianie konfiguracji PHPStorm czy jakiekolwiek inne środowisko od nich będzie potrafiło szybciej indeksować zmiany w naszym projekcie.

By zwiększyć maksymalną ilość obserwowanych plików należy utworzyć nowy plik: /etc/sysctl.d/60-jetbrains.conf, z zawartością:

# Set inotify watch limit high enough for IntelliJ IDEA (PhpStorm, PyCharm, RubyMine, WebStorm).
# Create this file as /etc/sysctl.d/60-jetbrains.conf (Debian, Ubuntu), and
# run `sudo service procps start` or reboot.
# Source: https://confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit
# 
# More information resources:
# -$ man inotify  # manpage
# -$ man sysctl.conf  # manpage
# -$ cat /proc/sys/fs/inotify/max_user_watches  # print current value in use

fs.inotify.max_user_watches = 524288

Zmiana zostanie zaaplikowana po restarcie.

Źródło: 1, 2

Spotify

Z jakiegoś powodu, gdy zainstalowałem spotify przez snapa, środowisko graficzne – u mnie jest to mate – nie potrafiło wyświetlić go przy widgecie który odpowiadał za głośność systemu.

Poprawienie tego było proste, należało zmienić nazwę jednego pliku:

sudo mv /var/lib/snapd/desktop/applications/spotify_spotify.desktop /var/lib/snapd/desktop/applications/spotify.desktop

Źródło: 1

August 11 2019

09:18

Obsługa błędów w PHP

Co się powinno dziać gdy w programie zostanie napotkany błąd? W najlepszym przypadku: poinformuje nas o tym kompilator lub interpreter, co – przynajmniej w teorii – zmusi nas do jego naprawienia. Innym dobrym rozwiązaniem jest przerwanie wykonywania programu tak by nieprawidłowa operacja nie wyrządziła żadnych szkód. Opcjonalnie dobrze by było by aplikacja mogła przechwycić tego typu błąd, by później go wyświetlić w zjadliwej formie. W najgorszym wypadku, aplikacja zignoruje ten błąd i będzie kontynuowała wykonywanie.

Problem

PHP posiada dwa mechanizmy raportowania błędów, które wpisują się w całe spektrum przedstawione wyżej. Ma ono wyjątki (Exception) jak i błędy (trigger_error, ale nie możemy mylić tego ze specjalną wersją wyjątku Error, czy też inną specjalną wersją wyjątku ErrorException). Miło by było, gdyby w następnej wersji jedna z tych funkcjonalności została porzucona (i by to były błędy) na korzyść drugiej (czyli wyjątków).

Wyjątków tutaj nie chce jakoś mocno omawiać, bo są one zaimplementowane podobnie jak w każdym normalnym języku programowania, a jeśli macie doświadczenie z Javą to się szybko z nimi odnajdziecie.

Błędy są specyficznym mechanizmem który składa się z dwóch kroków: pierwszy to wyświetlenie na ekranie błędu który właśnie wystąpił, a drugi to – w zależności od tego czy interpreter potrafi poradzić sobie z błędem – przerwanie skryptu albo wykonanie go zakładając że to czego nie ma to NULL.

Tego typu błędy są wyzwalane (z ang. trigger) w zasadzie w każdej sytuacji gdy PHP nie potrafi poradzić sobie z błędem, dla przykładu:

<?php
    $array = [
        // this array doesn't have any key
    ];

    // this line will emit warning
    var_dump($array['missing-key']);

    // this line will also emit warning
    var_dump($non_existing_var);


Jeśli wykonamy taki kawałek kodu, to dostaniemy taką informacje z interpretera:

PHP Notice:  Undefined index: missing-key in /home/psychob/Projekty/Blog/php-error-handling-weirdness/01-php-emitting-errors.php on line 9
PHP Stack trace:
PHP   1. {main}() /home/psychob/Projekty/Blog/php-error-handling-weirdness/01-php-emitting-errors.php:0
/home/psychob/Projekty/Blog/php-error-handling-weirdness/01-php-emitting-errors.php:9:
NULL
PHP Notice:  Undefined variable: non_existing_var in /home/psychob/Projekty/Blog/php-error-handling-weirdness/01-php-emitting-errors.php on line 12
PHP Stack trace:
PHP   1. {main}() /home/psychob/Projekty/Blog/php-error-handling-weirdness/01-php-emitting-errors.php:0
/home/psychob/Projekty/Blog/php-error-handling-weirdness/01-php-emitting-errors.php:12:
NULL


Jak można zauważyć, PHP założył że w zmiennych których nie ma znajduje się wartość NULL.

Innym miejscem gdzie interpreter nas poinformuje błędem, jest jeśli podamy do funkcji niepoprawną ilość argumentów, na przykład:

<?php
    var_dump(strlen('string', 'bad-argument'));
    var_dump(strlen());


Taki skrypt na wyjściu da nam:

PHP Warning:  strlen() expects exactly 1 parameter, 2 given in /home/psychob/Projekty/Blog/php-error-handling-weirdness/02-incorrect-argument-count-to-system-function.php on line 5
PHP Stack trace:
PHP   1. {main}() /home/psychob/Projekty/Blog/php-error-handling-weirdness/02-incorrect-argument-count-to-system-function.php:0
PHP   2. strlen() /home/psychob/Projekty/Blog/php-error-handling-weirdness/02-incorrect-argument-count-to-system-function.php:5
/home/psychob/Projekty/Blog/php-error-handling-weirdness/02-incorrect-argument-count-to-system-function.php:5:
NULL
PHP Warning:  strlen() expects exactly 1 parameter, 0 given in /home/psychob/Projekty/Blog/php-error-handling-weirdness/02-incorrect-argument-count-to-system-function.php on line 6
PHP Stack trace:
PHP   1. {main}() /home/psychob/Projekty/Blog/php-error-handling-weirdness/02-incorrect-argument-count-to-system-function.php:0
PHP   2. strlen() /home/psychob/Projekty/Blog/php-error-handling-weirdness/02-incorrect-argument-count-to-system-function.php:6
/home/psychob/Projekty/Blog/php-error-handling-weirdness/02-incorrect-argument-count-to-system-function.php:6:
NULL

Ten konkretny przypadek może być jednak zmieniony w wyjątek automatycznie jeśli skorzystamy z „nowej” funkcjonalności PHP czyli declare(strict_types=1), na przykład:

<?php
    declare(strict_types=1);

    var_dump(strlen('string', 'bad-argument'));
    var_dump(strlen());

Ale nie zadziała to przy wywoływaniu funkcji które my zdefiniowaliśmy, na przykład:

<?php
    declare(strict_types=1);

    function my_func($abc, $def)
    {
    }

    my_func(1, 2, 3, 4);


Jak widać, PHP wyzwoliło dwa rodzaje błędów: Notatkę (Notice) i Ostrzeżenie (Warning). Oba typy błędów charakteryzują się podobnym zachowaniem: Poinformuj użytkownika, i kontynuuj wykonywanie zakładając że to czego nie ma jest równe NULL.

Ale PHP posiada jeszcze inne typy błędów, o – bardzo intuicyjnej nazwie – Błąd (Error). W tej puli znajdują się błędy które nie pozwalają na poprawne wykonanie skryptu, na przykład nie poprawna składnia, nie istniejąca klasa, nie istniejąca funkcja, itp.:

<?php
    return unknown_function('?');


Zwróci nam:

PHP Fatal error:  Uncaught Error: Call to undefined function unknown_function() in /home/psychob/Projekty/Blog/php-error-handling-weirdness/05-fatal-error-unknown-function.php:2
Stack trace:
#0 {main}
  thrown in /home/psychob/Projekty/Blog/php-error-handling-weirdness/05-fatal-error-unknown-function.php on line 2

<?php

    interface /* Empty */  {

    }


Zwróci nam:

PHP Parse error:  syntax error, unexpected '{', expecting identifier (T_STRING) in /home/psychob/Projekty/Blog/php-error-handling-weirdness/06-fatal-error-bad-grammar.php on line 3


Co możemy zrobić?

Pierwszą rzeczą która przychodzi na myśl, to po prostu wyłączenie raportowania błędów

error_reporting(0)

error_reporting pozwala na wyłączenie wyświetlania błędów przez PHP. Jest to na pewno przydatna funkcjonalność którą wypada skonfigurować na środowisku produkcyjnym, a jej działanie wygląda tak:

<?php
    /** @noinspection PhpUndefinedVariableInspection */

    error_reporting(0);

    $array = [
        // this array doesn't have any key
    ];

    // this line will emit warning
    var_dump($array['missing-key']);

    // this line will also emit warning
    var_dump($non_existing_var);


Na wyjściu powinniśmy dostać:

/home/psychob/Projekty/Blog/php-error-handling-weirdness/07-error-reporting.php:11:
NULL
/home/psychob/Projekty/Blog/php-error-handling-weirdness/07-error-reporting.php:14:
NULL


Tylko nie jest to idealne rozwiązanie, dlatego że błąd w kodzie nadal jest, my tylko spowodowaliśmy że nie można go zobaczyć. Dlatego idealnym rozwiązaniem byłoby gdybyśmy mogli taki błąd zmienić w wyjątek. I da się to zrobić przy pomocy paru narzędzi które twórcy nam przygotowali, a mówiąc konkretnie set_error_handler i ErrorException.

set_error_handler

set_error_handler jest funkcją która pozwala nam na zastąpienie domyślnego error handlera naszym własnym. Funkcja ta przyjmuje dwa argumenty: funkcje która ma być wywołana w przypadku błędu jak i dla których typów błędu ma być wykonana.

Przykładowa funkcja która zacznie rzucać wyjątki w przypadku wystąpienia błędu wygląda tak:

set_error_handler(function (int $level, string $message, string $file, int $line) {

 if (error_reporting() === 0) {

 return;

 }

 

 throw new \ErrorException($message, 0, $level, $file, $line);

});


Taka implementacja zapewni nam że wszystkie błędy które można przechwycić, rzucą wyjątek. Warto tutaj też zwrócić uwagę na warunek który zwróci nam wartość null z funkcji, jest to obsługa specjalnego operatora który istnieje w PHP: ‘@’ tak zwany operator STFU. O ile nie jest zalecane korzystanie z niego, to nigdy nie wiemy która z naszych zależności będzie z niego korzystać. Co do zwracanej wartości, to jeśli nasz handler zwróci wartość false, to kontrole przejmie domyślny handler (ten co wyświetla błąd na standardowym wyjściu).

Ale co z błędami których przechwycić się nie da? Bo jak to przystało na PHP, istnieją błędy których się nie da przechwycić przy pomocy set_error_handler, dla przykładu:

<?php
    set_error_handler(function (int $level, string $message, string $file, int $line) {
        if (error_reporting() === 0) {
            return;
        }

        throw new ErrorException($message, 0, $level, $file, $line);
    });

    interface foo
    {
        public function bar();
    }

    class baz implements foo
    {
    }


Co można w takim wypadku zrobić?

register_shutdown_function

Należy zaznaczyć tutaj, że tego typu błędów nie da się przechwycić w taki sposób by można było kontynuować normalną egzekucje programu, dlatego że w większości przypadków jest to brak zaimplementowanej metody która jest w interfejsie, abstrakcyjna metoda itp. Nie zmienia to faktu, że możemy zareagować na tego typu błąd i możemy wyświetlić swoją informacje o błędzie.

By to zrobić, należy podpiąć się pod „shutdown function”, czyli funkcje która będzie wykonywana po zakończeniu skryptu, służy do tego funkcja register_shutdown_function. I nie ma tu rozróżnienia czy wykonywanie zakończy się sukcesem czy porażką. W naszym przypadku taka funkcja mogłaby wyglądać tak:

    register_shutdown_function(function () {
        $lastError = error_get_last();
        if ($lastError !== NULL) {
            throw new ErrorException($lastError['message'], 0, $lastError['type'], $lastError['file'],
                $lastError['line']);
        }
    });


Jak można zauważyć z implementacji, sprawdzamy jaki był ostatni błąd i jeśli nie został obsłużony to rzucamy wyjątek. Tutaj pojawia się pytanie: Skoro ten kawałek kodu wykona się już po zakończeniu skryptu, to jak taki wyjątek złapać?

Nie da się, nawet przy pomocy set_exception_handler. By przejąć tego typu wyjątek należy go samemu przekazać do naszego exception handlera, albo obsłużyć go w tej funkcji.

set_exception_handler

set_exception_handler działa tak samo jak set_error_handler, z tym wyjątkiem że ta funkcja jest wykonywana gdy zostanie rzucony wyjątek i nie zostanie on złapany przy pomocy bloku try...catch. Po wykonaniu naszego exception handlera, wykonywanie skryptu się zakończy.

Przykład takiej funkcji:

<?php
    set_error_handler(function (int $level, string $message, string $file, int $line) {
        if (error_reporting() === 0) {
            return;
        }

        throw new ErrorException($message, 0, $level, $file, $line);
    });

    set_exception_handler(function (Throwable $e) {
        var_dump($e-&gt;getMessage());
        var_dump($e-&gt;getTraceAsString());
    });

    var_dump($array); // not existing variable


set_error/exception_handler a register_shutdown_function

Warto wspomnieć o różnym zachowaniu między tymi funkcjami. set_error/exception_handler przy wywołaniu podmienią aktualnego handlera, a starego wrzucą na stos którego można przywrócić przy pomocy funkcji restore_error/exception_handler. Takie zachowanie może się przydać, jeśli chcemy błędy obsługiwać „blokowo”, czyli w części aplikacji będziemy chcieli zamieniać błędy na wyjątki (bo ta część je obsługuje), a w innej chcemy na przykład je ignorować, bo jest to część legacy naszej aplikacji.

register_shutdown_function, rejestruje kolejną funkcje która zostanie uruchomiona po zakończeniu wykonywania skryptu. Czyli jeśli odpalimy ją dwa razy, to nasza funkcja zostanie wykonana dwa razy.

Podsumowanie

PHP posiada dwa konkurujące ze sobą mechanizmy raportowania błędów. Na szczęście jeden jest w odwrocie i – miejmy nadzieje – zostanie wkrótce zastąpiony w całości przez wyjątki.

June 23 2019

08:53

Electronic Entertainment Expo 2019

Electronic Entertainment Expo – czyli w skrócie , jest to impreza branży gier komputerowych, gdzie co roku najwięksi gracze – jak i ci którzy chcieliby urosnąć do takiej rangi – pokazują co mają do zaoferowania entuzjastom. Jakie to gry, oprogramowanie czy sprzęt powstaje by umilić nam nadchodzący czas. Czyli w skrócie jest to grupowa masturbacja branży nad graczami, w nadziei że uda się sprzedać więcej kopii swoich nieoryginalnych gier.

Inaczej było w tym roku, gdzie Sony postanowiło się nie stawić na targach pierwszy raz od ich rozpoczęcia w 1995 roku. Oprócz tego Electronic Arts, zapowiedziało że nie będzie robiło prezentacji na wielkiej scenie, tylko skupi się na swoim przedsięwzięciu o nazwie: EA Play. Jako, że to wydarzenie odbywało się chwilę przed samymi targami, na potrzeby tego tekstu dołączę także jego ocenę.

Kto więc organizował swoje konferencje? Microsoft, Ubisoft, Bethesda, Devolver Digital, Square Enix i Nintendo. Z takim line-upem – według mnie – Microsoft miał bezwartościowe trofeum oznajmiające o wygranej tegorocznego w kieszeni. A pisząc ten tekst po obejrzeniu wszystkich prezentacji, mogę stwierdzić że wygrał je bezkonkurencyjnie.

Zanim jednak przejdę do opisania co mi się podobało a co nie w każdej z wyżej wymienionych konferencji, powiem że głównym motywem przewodnim – znów: dla mnie – było: „Jeszcze nie przeszedłem poprzedniej części tej serii” albo „Muszę zagrać w poprzednią grę tego studia”.

E3 2019 - EA Play

Zacznijmy w kolejności chronologicznej, czyli na pierwszy ogień idzie EA razem z nową grą z uniwersum Gwiezdych Wojen: Star Wars: Fallen Order. Nowa gra od twórców Titanfall 2 (w którą wypadało by zagrać) która, w przeciwieństwie do poprzednich gier ze świata Gwiezdnych Wojen, ma nie mieć mikrotransakcji . Nie wiem dlaczego jest to zaliczane na plus dla tej gry, wiedza że EA nie jest aż tak chciwe jak być potrafi.

Respawn Entertainment pokazało przy Titanfall 2 że potrafi tworzyć interesujące gry dla pojedynczego gracza, dlatego smuci mnie to że ich nowa gra wygląda tak… nudo. Nie było tam niczego nowego, czy innowacyjnego. Sama gra wyglądała tak jakby cała branża chciała wytworzyć wzór na najbardziej schematyczną rozgrywkę, by później umieścić ją jako wzorzec w Sèvres.

Ale smutniejsze było chyba tylko to, że sama prezentacja nie miała do pokazania niczego ciekawego. Apex Legend, FIFA, Madden, Simsy, to są gry które mnie nie interesują, dzięki czemu wyłączyłem tą prezentacje gdy skończono pokazywać Gwiezdne Wojny. Nawet skrót wydarzenia wydał mi się nudny i niewarty mojego czasu.

E3 2019 - Microsoft - Head of Xbox

Następna konferencja była od Microsoftu. To na tej firmie spoczywał obowiązek pokazania jak powinny takie prezentacje wyglądać, jako na jedynym poważnym przedstawicielu producentów konsol. I nie zawiodłem się. Przez cały czas trwania prezentacji pokazywane były gry – modulo pokazania usługi subskrypcyjnej i „zapowiedzi” nowej konsoli.

Zanim jednak przejdę do sedna, muszę wspomnieć, że MS kupił w ostatnim roku dość dużą ilość developerów. Piszę o tym teraz, dlatego że na konferencji okazało się że kupiony został Double Fine – twórcy Psychonauts, którą to grę powinienem przejść. A skoro o tym mowa, to pokazane zostało tam Psychonauts 2.

Konferencje otwarła gra z Obsidian Entertainment (który został kupiony przez MS): Outer Worlds. Zapowiedziana w tamtym roku „odpowiedź na Fallout 76”, przykuła moją uwagę już wtedy, ale nie za sprawą interesującej rozgrywki, czy ciekawie zapowiadającej się fabuły. Interesuje się nią dlatego że Obsidian zrobił najlepszego fallouta w 3D, czyli Fallout: New Vegas. I w sumie jest to mój najlepszy trop, dlatego że na konferencji nie było zajawki z rozgrywką.

Chociaż z trzeciej strony, przy wyszukiwaniu Outer Worlds Gameplay, znajduje filmiki na YouTube, więc to chyba ja powinienem uzupełnić wiedzę.

Z ciekawszych tytułów, czy może z takich które mnie zaintrygowały, to zapowiedziana została gra: 12 Minutes. Z punktu widzenia rozgrywki, to trudno mi ocenić co to będzie. Jeśli miałbym strzelać, to pewnie celowałbym w point & click czy podobne przygodówki. Nie mniej sam zwiastun mnie zaintrygował.

CD-Project RED pokazał że w ich nowej grze będzie grał Keanu Reeves. I w zasadzie tyle mogę stwierdzić. Sam zwiastun Cyberpunka 2077 przypomniał mi że powinienem wreszcie przejść serię Wiedźmin, ale to może w przyszłości.

Z kronikarskiego obowiązku odnotuje nową grę od From Software (twórców takich gier które powinienem przejść jak: Dark Souls 1,2 i 3; Bloodborne): Gdzie są dwie ostatnie księgi pieśni ognia i lodu? Którą ma współtworzyć George R. R. Martin.

Nie mogło zabraknąć szlagierów ze stajni Microsoftu: Gears of War (który teraz ma mieć tryb kooperacyjny dla 3 osób), nowe Halo (gdzie nie wiem co się dzieje, bo nigdy nie interesowałem się tą serią, ale pewnie jak wyjdzie Master Chief Collection na PC to pewnie przejdę) i DLC do Forzy. Najciekawsze z nich wszystkich było owe DLC, dlatego że twórcy postanowili dodać w nim klocki LEGO. Widać że twórcy po dodaniu resoraków z serii Hot-Wheels nie próżnują i skoro nie da się ulepszyć już samej formuły rozgrywki to będą mogli przynajmniej pobawić klockami.

Nie powinienem też zapominać o Projekcie Scarlett, który ma być następcą Xboxa One. Trudno jednak stwierdzić coś konkretnego, dlatego że materiał wyemitowany był raczej zajawką jaka ta konsola nie będzie fajna: 8K, brak ekranów ładowania, 4 razy mocniejsze niż aktualna konsola*.

* – ale my tylko o tym rozmawiamy, więc nie oczekuj niczego.

E3 2019 - Bethesda

Nie wiem dlaczego, Bethesda pojawiła się ze swoimi grami na . Nie miała ona tak dużo materiału by wypełnić prawie półtora godziny i materiały pokazujące jak to oni nie kochają swojej społeczności pokazywały to bardzo dobrze.

O społeczności, czy może bardziej o ludziach którzy byli obecni na tej konferencji, chciałbym napisać dużo. Szczególnie w rozdziale że fanatyczne oddanie studiu deweloperskiemu które ma nas w dupie, nie jest zdrowe. Na prawdę, co jest z tymi ludźmi? Cieszą się że Fallout 76 zacznie choć trochę przypominać funkcjonalną grę?

Ja rozumiem, że widownie na tego typu wydarzeniach są specjalnie dobierane, by nie wydarzyły się rzeczy które mogą skompromitować gospodarza. Ale to co oni tam odprawiali było naprawdę zastanawiające, szczególnie w kontekście tego co Bethesda wysrała w poprzednim roku.

Ale by być fair w stosunku do studia z Bethesdy, pokazali dwie interesujące produkcje – czy może raczej pomysły. Oba od studiów zależnych: Ghostwire: Tokio – robione przez studio które robiło The Evil Within (Kolejna gra którą powinienem przejść) i Deathloop – robione przez Arkane Studio (Dishonored 1 i 2, Prey 2017 [Kolejne gry które…])

Na samej konferencji zabrakło nowego zaś Elder Scrolls i Starfield, więc prócz DOOM Ethernal Bethesda nie miała czego pokazywać.

E3 2019 - Devolver Digital

Devolver Digital, wypuścił w tym roku film który miał… Nie wiem co. Jest dziwny i wydaje mi się że zapowiedzieli tam parę gier. Jeśli ktoś lubi gry od Devlovera (Hotline Miami, Enter the Gungeon, itp.) to całkiem możliwe że coś upoluje tam dla siebie. Każdemu innemu i tak polecam zapoznanie się z tą „konferencją” choćby w jaki dziwny sposób jest prowadzona.

E3 2019 - Ubisoft

Dla mnie Ubisoft na targach zawsze pokazywał przynajmniej jedną interesującą grę, zazwyczaj na końcu prezentacji. W tym roku było nieco inaczej i jedyną interesującą grę pokazali na początku i choć trudno mi przechodzi przez klawiaturę to że Watch Dogs: Legion jest tą interesującą pozycją.

Oprócz tego, że powinienem przejść poprzednie części tej serii, pokazali dłuższą rozgrywkę z samej gry. Obiecali system permadeath (czyli jeśli postać zginie podczas rozgrywki, to zostaje martwa) i możliwość zrekrutowania każdego NPC który znajduje się na mapie.

I tutaj pojawia się mój problem z tym projektem – jego zakres go zabije. Szczególnie że obiecują by każdy z NPCów miał swoja misje (dzięki której go zrekrutujemy) jak i miał nagraną pełną ścieżkę dialogową. Da się coś takiego osiągnąć (proceduralne generowana zawartość nie jest niczym nowym w grach), ale jeśli nie zrobi się tego bardzo dobrze to wyjdzie nam gówno.

Oprócz tego, Ubisoft nie miał dla mnie niczego ciekawego. Dodatki do Rainbow 6, The Divison czy For Honor mnie kompletnie nie interesują.

E3 2019 - Square Enix

Square Enix, jako przedstawiciel japońskich wydawców postanowił zanudzić mnie różnego rodzaju grami Final Fantasy. Remaki, spin offy i innego rodzaju jRPGi powodowały że bardzo szybko ominąłem znaczną część prezentacji.

Dopiero pod koniec zaprezentowali Dying Light 2, którego pierwszą część wypadało by przejść, Outriders – grę polskiego studia People Can Fly (tutaj wypadało by przejść Bulletstorma, czy ichnie Gearsy) którego pre-renderowany zwiastun razem z filmem jak pracuje zespół, spowodował moje braki w koncentracji.

I na koniec Avengers. Po obejrzeniu zwiastuna trudno mi stwierdzić jakiego typu ma być to gra – i pewnie nie pomogło ominięcie tłumaczenie twórców – ale mogę stwierdzić z pewnością że nie wykupili licencji na twarze z MCU. Wydaje się ciekawe, ale bardziej dlatego że w MCU skończyła się pewna epoka razem z Infinity War i Endgame i mam pewien niedosyt.

E3 2019 - Nintendo

Na koniec zostawiłem Nintendo, ale po zobaczeniu połowy konferencji i stwierdzeniu że „to nie jest coś co jest adresowane dla mnie” postanowiłem sobie odpuścić.

Podsumowując, tegoroczna konferencja była słaba. Częściowo dlatego że drugi producent konsol był nieobecny: Sony. Ale reszta firm która wystawiała się na targach też nic ciekawego w większości nie pokazała. Może to dlatego że nie oglądałem tegorocznego na żywo, tylko odtwarzałem wszystko z YouTube i dzięki temu miałem magicznego pomocnika nazwanego: możliwość ominięcia nudnych wstawek. A może dlatego że standardy co do gier mi się powiększyły i byle co mnie już nie usatysfakcjonuje.

Nie wiem, może to tylko mój wrodzony pesymizm zaczernia mi sytuacje i gry które były pokazywane na tym będą warte by w nie zagrać.

 

May 22 2019

psychob
11:53
0246 6a62 500
Reposted fromoll oll
psychob
11:53
0247 e558 500
Reposted fromoll oll
psychob
11:44
0781 6ca1 500
Reposted fromtotal1ty total1ty viaoll oll
psychob
11:33
6913 0ce2
Reposted fromEmilieBronte EmilieBronte viaoll oll
psychob
11:24
1571 0653 500
Reposted fromczajnikq czajnikq vialukan lukan
psychob
11:23
9993 7d05
Reposted fromteijakool teijakool viatomash tomash
psychob
11:22
0203 2bdd 500
Reposted fromzelbekon zelbekon viatomash tomash
psychob
11:22
0229 9a7f 500
Reposted fromfungi fungi viatomash tomash
psychob
11:22
8529 7d90 500
Reposted fromhekate hekate viatomash tomash

February 03 2019

15:26

Taśmy Kaczyńskiego

Otto von Bismark miał powiedzieć ponad sto lat temu, że: „Im ludzie wiedzą mniej o powstawaniu kiełbas i praw tym lepiej w nocy śpią” i coś musi być z tym na rzeczy, jako że przy każdej okazji gdy wyborcy mogą zobaczyć jak ta fabryka działa od środka to mamy skandal, albo jakiś potencjał na niego.

Dzisiaj chciałbym się przyjrzeć najnowszej aferze, czyli tak zwanych: „Taśmach Kaczyńskiego”. Ten tekst będzie moją próbą zrozumienia, o co w niej chodzi – czy są to faktycznie haki na miarę „ośmiorniczek”, czy może Gazeta Wyborcza przy pomocy „Instytutu Danych z Dupy” próbuje podłożyć PiSowi machlojkę zrobioną z niczego.

Na samym początku należy zwrócić uwagę na to co działo się przed opublikowaniem przez Gazetę Wyborczą (jak i portal gazeta.pl) omawianych artykułów, otóż nieprzychylny rządowi dziennikarz Tomasz Lis pisał na twitterze: 29 stycznia 2019 – to będzie jeden z najważniejszych dni w osiemnastoletniej historii PIS. A z całą pewnością najprawdziwszy.. A wtórował jemu Roman Giertych odpowiadający na pytanie: „W skali od 1 do 10, jak grubo będzie?” – napisał – 11.

Oczekiwania napompował też sam PiS, który odwołał swoich ludzi z porannych programów, w oczekiwaniu na to co przyniesie publikacja wyborczej. Czas mijał. Poranny nakład Gazety Wyborczej został dostarczony do sklepów i jak afery nie było, tak jej nie ma. Ale dlaczego?

Zanim odpowiemy sobie na to pytanie, warto zobaczyć co faktycznie jest w tych taśmach i media zwracają uwagę na cztery rzeczy (w kolejności od najmniej ważnej):

  1. #ja cię nie mogę, czyli co Jarosław Kaczyński miał powiedzieć do tłumaczki.

  2. Dlaczego biurowce które ma zbudować spółka Srebrna nie powstaną dopóki rządzi w Warszawie Platforma Obywatelska.

  3. To że Jarosław Kaczyński ugaduje deal na 1,3 miliarda złotych w sprawie zbudowania w/w wieżowców.

  4. To że Jarosław Kaczyński próbuje wyciągnąć ze spółki Srebrna pieniądze by zapłacić swojemu kontrahentowi.

Pierwszym punktem nie będę się zajmował, bo celem internetu jest wyciąganie śmiesznych lub ośmieszających fraz z tego typu publikacji, tylko nie rozumiem dlaczego tym zajmują się media…

Kolejne punkty wymagają pewnego wyjaśnienia, które znajduje się na funpage’u Sławomira Mentzena4 – tłumaczy On tam w jaki sposób Jarosław Kaczyński i spółka Srebrna uwłaszczyli się na majątku państwowym.

Wiemy teraz że Naczelnik chce by w Warszawie powstały dwa wieżowce – o wielkości 190 metrów – którymi by zarządzała spółka Srebrna – miały by się nazywać „bliźniacy” lub K-Tower. Mają one powstać na terenach którymi zarządza spółka Srebrna – tylko zanim powstaną to warszawski ratusz musi wydać pozwolenie na ich budowę.

Tutaj wpadamy do sedna problemu Prezesa: Póki w warszawie rządzi Platforma Obywatelska to te wieżowce nie powstaną. Kaczyński nawet stwierdza że ratusz nielegalnie blokuje budowę tych budynków, tylko nie ma na to dowodów i nie potrafi wymusić prawnie by ratusz wydał taką zgodę. To jest główny powód dla którego wstrzymano ten projekt.

Drugi punkt jest tym, który telewizja rządowa i media przychylne PiSowi mogą przekuć w atak na Platformę. Jeśli w okolicy znajdują się już budynki o podobnej wielkości – jak to zauważyła organizacja Miasto Jest Nasze na swoim facebooku – a ratusz nie chce wydać zgody, to mamy chyba do czynienia z państwem układów – a nie prawa? Co nie?

Prezydent Warszawy – Rafał Trzaskowski, powiedział: Nie wydałbym zgody na budynek mający 190 metrów. Nikt nie mówi, że tam nie może stanąć budynek. Chodziło o to, żeby wybudować taki, żeby zarabiać na nim grube pieniądze. O ile nie da się tej argumentacji obronić, bo wszystkie budynki które są w okolicach Srebrnej raczej są tam by zarabiać – a nie pełnić funkcje drapaczy chmur, to Pan Trzaskowski zwraca uwagę na pewien problem który miałaby opozycja.

Na czym ten problem polega? Otóż załóżmy że Srebrna zbudowała by K-Towers, oznaczało by to zyski na poziomie ~100 milionów złotych rocznie. Załóżmy że połowa z tej kwoty trafiła by do PiSu, dla porównania subwencja partyjna to około 20 milionów złotych rocznie.

Taki strumień gotówki na pewno by umocnił pozycje PiSu – pieniądze znaczą bardzo dużo w polityce. A przy dochodach porównywalnych z tymi z subwencji, mogli by nawet ją zlikwidować – co oznaczało by zmniejszenie możliwości opozycji, jak i każdej partii która by chciała się wybić.

Ale skoro to jest #Wina Tuska, to dlaczego wszyscy dookoła mówią że ta afera może zmieść PiS? Cóż by zbudować duży budynek, potrzebujemy pieniędzy. Potrzebujemy zapłacić architektom, budowlańcom, wykończeniowcom, potrzebujemy w końcu zapłacić za same materiały. Całościowo coś takiego może kosztować nawet miliard trzysta milionów złotych. Skąd tylko wziąć te pieniądze?

Można wziąć kredyt. Tylko nie wydaje mi się że banki ot tak by udzieliły kredytu zwykłemu śmiertelnikowi na miliard trzysta milionów złotych. Nie wydaje mi się by udzieliły go nawet naszemu Naczelnikowi. Potrzebne jest więc zabezpieczenie – i albo tym zabezpieczeniem jest szef banku Pekao: Michał Krupiński (który jest związany ze środowiskiem PiS), albo innym zabezpieczeniem może być intratny kontrakt z państwowym przedsiębiorstwem na następne 10-15 lat.

Oczywiście to tylko domysły, bo istnieje legalniejsze źródło zabezpieczenia – same grunty na których miały by one powstać. Według Gazety Prawnej wartość gruntów nad którymi pieczę sprawia spółka Srebrna wynosi 7,8 miliona złotych. Jeśli wrzucimy to w kalkulator (7,8 miliona / 1300 milionów) * 100 = 0.6 % = 6 ‰. Coś mi się nie wydaje że jakikolwiek bank chciałby żyrować inwestycję mając zabezpieczenie które nie pokrywa nawet jednego procenta kwoty pożyczki. Znów jednak, to tylko moje domysły.

Gdzie jest więc problem? Mamy sytuacje, gdzie zwykły poseł – nie pełniący żadnej funkcji rządowej – potrafi załatwić – w publicznym banku – kredyt dla spółki której (jak wiemy z jego oświadczenia majątkowego) nie reprezentuje.

Szemrane interesy… Ale czy nielegalne? Nie wiem. Wydaje mi się tylko że niektóre organy państwowe powinny się temu przyjrzeć.

Ostatnim klockiem tej układanki jest austriacki biznesmen Gerald Birgfellner, mąż córki kuzyna Kaczyńskiego. Był on odpowiedzialny za przygotowanie inwestycji z wieżami K-Tower. Cały proceder opisuje Galopujący Major.

Koniec końców, okazało się że pan Gerald wykonywał pracę na tak zwaną gębę – czyli bez umowy. Bez umowy z Naczelnikiem. Bez umowy ze spółką Srebrna. I gdy okazało się że inwestycja jest zawieszona, to Austriak nie dostał wynagrodzenia za swoją pracę. Clou tych taśm jest rozmowa między nim a Jarosławem Kaczyńskim o tym jak wyciągnąć ze spółki Srebrna pieniądze – bo ze spółki nie da się tak łatwo wyciągnąć pieniędzy.

W tych taśmach mamy przypadki szemranych interesów, do którym organy państwowe powinny się przyjrzeć, dlaczego więc za tą aferą nie idzie żadne większe oburzenie społeczne?

Jednym z argumentów może być to co powiedział Rafał Otoka-Frąckiewicz w debacie, że był to „materiał który nagle spadł im [wyborczej] na głowę. Czyli fanatyzm Gazety Wyborczej zwyciężył nad dziennikarskim warsztatem który by sugerował zapoznanie się z wszystkimi materiałami by zobaczyć czy coś w nich jest.

Według mnie, najważniejszym kryterium był brak przekazu dla „zwykłego Polaka” – osoby która nie jest zainteresowana polityką, a jedyne co może powiedzieć to że wszyscy politycy kradną.

Spójrzmy na Taśmy Prawdy, które były jedna składową klęski Platformy: Ich przekaz można było podzielić na dwie części:

  1. „Ośmiorniczki” – czyli te skurwysyny wydają tysiące złotych na obiady

  2. Pozwolenie NBP na dodrukowywanie pieniędzy, gdzie konstytucja zabrania dodrukowywania sobie ot tak pieniędzy.

Drugą rzeczą była sama skala kwot – tysiąc złotych łatwiej jest człowiekowi sobie wyobrazić niż miliard trzysta milionów. Więc łatwiej jest człowiekowi być zdenerwowanym gdy politycy są przypisani do mniejszych kwot, niż większych.

I to jest powód dla którego Ja uważam, że cała ta afera ominie PiS, a nawet – przy pomyślnym propagandowym materiale TVP – może nawet ją wzmocnić.

November 04 2018

psychob
16:54
9821 b69b 500
Reposted byvideogameshardkorweySoulPLliveattherainbowkalesorpwgmassivejackbloodrainbow
Older posts are this way If this message doesn't go away, click anywhere on the page to continue loading posts.
Could not load more posts
Maybe Soup is currently being updated? I'll try again automatically in a few seconds...
Just a second, loading more posts...
You've reached the end.

Don't be the product, buy the product!

Schweinderl