Często na warsztatowym kanale IRC nie dzieje się nic ciekawego, ale czasem można usłyszeć tam coś interesująco. I czasem nawet kontrowersyjnego – jak choćby ta oto opinia:
[19:19:21]
przy gamedevie brakuje poczucia misji
[19:19:29]to tak jakbym sprzedwal narkotyki dzieciom
Może jest ona nieco skrajna, ale to nie znaczy, że nie warto z nią polemizować. Jaka jest więc misja przemysłu wytwarzającego gry komputerowe?… W odpowiedzi na podobne wątpliwości lubimy zwykle sięgać do przykładu kinematografii – z tego porównania korzysta się na przykład wtedy, kiedy ktoś (po raz nie wiadomo który) podnosi kwestię nadmiernej brutalności gier.
Nie da się ukryć, że obecnie główną misją obu dziedzin twórczości jest dbanie o odpowiednio przyzwoity stan kont osób, które się nimi parają. W przemyśle filmowym jest domena hollywoodzkich superprodukcji, słynących z wtórności, powtarzalności, słabej strony fabularnej i przeładowaniem efektami specjalnymi. To nie przypadek, że dokładnie te same epitety możemy dopasować do wielu komercyjnych gier.
Jednocześnie mamy też tzw. kino niezależne, które celuje w nieco bardziej wyrafinowane gusta. Być może jego odpowiednikiem w przemyśle gier komputerowych są produkcje realizowane przez małe, czasem nawet nieprofesjonalne zespoły. Ich dzieła zwykle nie są nastawione na stronę techniczną – grafikę zapierającą krew żyłach i mrożącą dech w piersiach (;]) i superrealistyczne efekty dźwiękowe. Zamiast tego posiadają to, co bardzo rzadko przejawia się w komercyjnych grach – oryginalność.
Można jej zasmakować przeglądając chociażby zwycięskie produkcje z dorocznego Independent Games Festival. Mówienie o nich jako o “zwykłych casualach” byłoby według mnie grubym nietaktem ;P
Naszła mnie dzisiaj nieodparta ochota, aby opublikować nową wersję jednej z bardziej udanych swoich produkcji – czyli Taphoo. Oczywiście nie oznacza, że potrafię pstryknąć palcami i w ten sposób wyczarować nową edycję gry. Po prostu planowałem to od jakiegoś czasu, lecz chciałem jeszcze dodać trochę więcej etapów i jakieś nowe funkcje.
Ostatecznie skończyło się na 10 nowych poziomach – zatem łącznie jest ich teraz 60. I na pewno nie są już one takie proste jak poprzednie ;] Wystarczy rzucić okiem choćby na ten:
Jeżeli jakimś cudem nie jest on dla ciebie odstraszający, to zapraszam do ściągnięcia nowej wersji :) Można ją zainstalować bezpośrednio na starej, w tym samym katalogu.
Taphoo (1.8 MiB, 6,461 downloads)
Ostatnio zająłem się nieco stronką pod względem technicznym, czego efektem są trzy proste zmiany. Prawdopodobnie są to zmiany na lepsze :)
Pierwszą jest fakt, że w końcu działają tutaj tzw. permalinki. Wcześniej miałem z nimi pewne problemy, bo chociaż w WordPress mogą być one ustawione automatycznie, kłopotliwy okazał się jeden z pluginów. Ostatecznie skończyło się na tym, że musiałem nauczyć się obsługi apaczowego mod_rewrite i zrobić wszystko samodzielnie ;P
A cóż to takiego są te permalinki? Jest to sprytny mechanizm, która sprawia, że adresy poszczególnych elementów strony wyglądają o wiele ładniej. Przykładowo, niniejsza notka jest dostępna zarówno pod adresem
http://xion.org.pl/?p=107
, jak i http://xion.org.pl/2007/08/17/pewne-usprawnienia
. Ten drugi adres jest naturalnie o wiele bardziej opisowy, a poza tym wyszukiwarki bardziej go lubią :)
Druga sprawa dotyczy kanału RSS, który został ‘usprawniony’ przy pomocy serwisu FeedBurner. Prawdę mówiąc nie mam bladego pojęcia, jaka wynika z tego korzyść praktyczna, ale widziałem tak potraktowane RSSy na wielu blogach, zatem pewnie coś w tym jest :) Na oko działa on jednak tak samo jak wcześniej.
Trzecia zmiana jest widoczna na pasku po prawej stronie. Ponieważ notek jest już sporo i przeglądanie starszych tylko poprzez archiwum miesięczne może być mało wygodne, dodałem jeszcze listę kategorii. Ten swego rodzaju spis treści pozwala przeglądać notki o wybranej tematyce.
Kilka miesięcy temu odkryłem bardzo ciekawą i pomysłową usługę internetową. Można ją uznać za pewną formę wyszukiwarki ale w gruncie rzeczy potrafi ona znacznie więcej. Teoretycznie – niemal wszystko. Chodzi tu serwis o nazwie YubNub – internetowy wiersz poleceń
Z wyglądu strona przypomina wyszukiwarkę. W zajmującym centralne miejsce polu tekstowym nie wpisujemy jednak zapytania, tylko polecenie z ewentualnymi parametrami. Dostępnych komend jest mnóstwo i co ważniejsze, każdy może dodawać swoje własne. Ich wspólną cechą jest to, że opierają się na przekształceniu swoich parametrów na odpowiedni URL. I tak polecenie
g test
spowoduje przejście pod adres http://www.google.com/search?q=test
– czyli wyszuka podaną frazę za pomocą Google. Mechanizm jest więc podobny do prefiksów wyszukiwania dostępnych w Internet Explorerze od wersji 5.
Cały ten kram byłby pewnie mało przydatny, gdyby za każdym razem należało ręcznie wchodzić na stronę YubNuba. Na szczęście powstało całe mnóstwo różnych wtyczek i osobnych programów, które można pobrać ze strony Installing YubNub. Osobiście używam wtyczki do domyślnej wyszukiwarki w Firefoksie i małego programiku YubNub Trip.
Poniżej zamieszczam listę kilkunastu wybranych komend. Część z nich sam wykorzystuję, a pozostałe są po prostu ciekawe :) Większe spisy są oczywiście dostępnie na stronie YubNuba.
g zapytanie
– Googley zapytanie
– Yahoobrain pytanie
– BrainBoost: wyszukiwarka odpowiadająca na pytanie w języku naturalnym (przynajmniej w teorii ;))lyric artysta lub tytuł
– wyszukiwarka słów piosenekthott zapytanie
– Thottbotdf słowo
– definicje Googledict słowo
– słownik angielski dict.orgud słowo
– Urban Dictionary, czyli słownik internetowego (i nie tylko) slangumsdn zapytanie
– przeszukuje MSDN Libraryrfc numer
– wyświetla dokument RFC o podanym numerzephp funkcja
– dokumentacja funkcji PHPjd klasa
– dokumentacja klas Javyrand (-min min -max max -num n)
lub rand max
– losuje n (domyślnie 1) liczb z zakresu [min; max)split url, url, ...
– wyświetla kilka stron w jednym oknie podzielonym na ramkilynx url
– pobiera ze strony sam HTML i wyświetla go w przeglądarceascii tekst
– tworzy kilkanaście ASCII-artów z podanego tekstuman polecenie
– wyświetla opis polecenia YubNubals (fraza)
– wyświetla listę komendcreate (nazwa)
– tworzy nowe polecenieurl polecenie
– podaje URL powstały w wyniku wykonania poleceniagui polecenie
– tworzy prostą stronę z GUI do wpisania parametrów poleceniaKiedy programista grafiki i/lub gier nad czymś pracuje, pierwszym widocznym rezultatem powinny być oczywiście screeny. Sam najwyraźniej jestem wyjątkiem potwierdzającym tę regułę (;D), ale to nie znaczy, że nie potrafię docenić małego i zgrabnego programiku wspomagającego robienie zrzutów ekranu.
Takim programem jest ScreenUp autorstwa spaxa. Siedzi on sobie w zasobniku systemowym i przechwytuje wciśnięcia klawiszy PrintScreen i Alt+PrintScreen, buforując wykonane screeny. Można je potem obejrzeć w postaci miniaturek lub otworzyć w pełnej wersji.
Najciekawszą opcją jest aczkolwiek możliwość załadowania screena na zdalny serwer i otrzymania w zamian linku do niego w Schowku. Niestety, jedynym dostępnym sposobem jest wysyłka przez HTTP POST – brak obsługi FTP. Docelowy host musi mieć więc wsparcie dla jakiegoś systemu skryptów w rodzaju PHP czy ASP, który przetworzy takie żądanie na rzeczywisty plik na serwerze. Na szczęście domyślnie można w tym celu używać serwera autora programu, jeżeli oczywiście komuś nie przeszkadza fakt, że jego zrzuty hostuje ktoś inny ;P
Generalnie programik uważam za całkiem przydatny i to wcale nie dlatego, że jestem w nim wymieniony jako jeden z testerów ;]
Graficzny interfejs może (i powinien) ładnie wyglądać, ale jego najważniejszą cechą jest oczywiście interaktywność. GUI musi przede wszystkim umożliwiać reakcję na poczynania użytkownika, a to jest możliwe przez odpowiednią obsługę zdarzeń.
Informację o tym, że kliknięto gdzieś myszką lub wciśnięto klawisz, pozyskać jest oczywiście bardzo łatwo. W Windows wystarczy w tym celu obsługiwać komunikaty systemowe przychodzące do okna. O wiele większym wyzwaniem jest przetłumaczenie informacji “kliknięto w punkt (458,89) obszaru klienta” na “kliknięto w obrębie kontrolki TextBox o nazwie Text1
“. Komunikat należy bowiem przekazać do odpowiedniej kontrolki (-ek) – tej, której on dotyczy.
Jest pewnie wiele sposób na zrealizowanie takiego przekazywania, jednak najbardziej sensowne wydają mi się dwa. Pierwszym z nich jest propagacja zdarzenia na kolejne poziomy drzewa systemu GUI. Kliknięcie jest więc przekazywane do okna i od tej pory cała odpowiedzialność za jego obsłużenie spada na to właśnie okno. Ono sprawdza, czy myszka trafiła w którąś z kontrolek potomnych; jeśli tak, to znów zdarzenie jest przekazywane właśnie do tej kontrolki i okno się już nim nie zajmuje. Proces ten przebiega aż dojdziemy do najniższego możliwego poziomu, czyli kontrolki nie zawierającej już żadnych innych. Tam następuje właściwa obsługa zdarzenia.
Drugi sposób zakłada, że zdarzenie nie będzie “rozłazić” się po całym drzewie, tylko od razu trafiać do tej właściwej, docelowej kontrolki. Naturalnie nie zawsze da się tak zrobić. W przypadku wciśnięć klawiszy możemy pamiętać, która kontrolka ma tzw. fokus i do niej kierować komunikaty. Natomiast obsługa myszki wymaga wysłania swego rodzaju sondy wgłąb drzewa kontrolek w celu znalezienie tej najmniejszej, w którą trafił kursor (operacja ta jest znana jako hit test).
Generalnie zdarzenia z punktu widzenia ich obsługi można podzielić na dwie grupy: na zdarzenia myszki i na… wszystkie inne :) To właśnie te pierwsze przysparzają najwięcej kłopotów. Nie tylko wymagają rekurencyjnego przeszukiwania drzewa kontrolek, ale też mogą mieć globalne konsekwencje, jak np. zmiana fokusu. Zajmowanie się tymi konsekwencjami jest łatwiejsze, gdy wszystko odbywa się “na górze” – na poziomie głównych klas systemu GUI, a nie pojedynczych kontrolek. Jest to jeden z powodów przemawiających za wyborem drugiego sposobu przekazywania informacji o zdarzeniach.
Dawno, dawno temu, kiedy łącza były wolne a przeglądarki prymitywne, reklamy na stronach WWW miały postać statycznych lub co najwyżej animowanych banerów. Mało kto używał technologii w rodzaju Flash czy ActiveX, wymagających niestandardowych pluginów instalowanych po stronie użytkownika. A jeżeli już się na to decydował, to reklamy wykorzystujące te rozwiązania różniły się od zwykłych głównie stroną estetyczną: jakością i płynnością animacji.
Chciałoby się powiedzieć: stare dobre czasy, bo dawno odeszły już one do przeszłości. Teraz ze świecą można szukać nieflashowych banerów, a na stronach często można spotkać normalne telewizyjne, streamowane spoty reklamowe. Nie byłoby w tym nic niestosownego – w końcu reklamy są nieodłączną częścią każdego medium, a wykorzystanie najnowszych technologii z pewnością zwiększa ich atrakcyjność, a przez to skuteczność.
I wszystko byłoby w porządku, gdyby ich twórcy znali pojęcie umiaru i taktu. Problemem jest bowiem nie to, że dzisiejsze reklamy sieciowe to już nie tylko animacje, ale i filmy z dźwiękiem i muzyką, a nawet interaktywne gry. Sęk w tym, że one bardzo często przeszkadzają, a wręcz uniemożliwiają zapoznanie się z właściwą treścią strony, na której się znajdują.
Dzisiaj na przykład natrafiłem na baner jednego z operatorów komórkowych, wokół którego latały różnokolorowe motylki. Z pewnością wyglądały one efektownie, lecz czy oznacza to, że ich chmara powinna przesuwać się nad czytany przeze mnie tekst? A tak właśnie było, co oczywiście uniemożliwiało przeczytanie czegokolwiek. Rój uspokoił się dopiero wtedy, gdy przewinąłem się z powrotem na początek strony, gdzie widniał baner.
Zazwyczaj jestem przeciwny wszelkim zakazom – zwłaszcza w delikatnym obszarze Internetu – ale tym razem uważam, że ktoś powinien się zająć tą sprawą. Ktoś – czyli na przykład Komisja Europejska, która ostatnio całkiem dobrze spisała się w zakresie obrony praw użytkowników komórek i klientów linii lotniczych. Pół miliarda obywateli UE, z którego większość korzysta z Internetu, na pewno nie miałoby jej za złe wprowadzenie regulacji ograniczających ekspansję uciążliwych reklam.
Nie uważam przy tym, by musiałyby być one szczególnie restrykcyjne. Zasadniczo wystarczyłyby tylko dwa punkty:
Oczywiście można mieć wątpliwości, czy takie prawo nie byłoby trudne do egzekwowania, a przez to martwe. Dotyczyłoby ono jednak głównie dużych portali, czyli zarejestrowanych i powszechnie przedsiębiorstw, na które bez problemu można w razie czego nałożyć kary finansowe.
A co z mniejszymi serwisami? Naturalnie należałoby uniknąć absurdów w rodzaju wlepiania wirtualnych mandatów autorom stron domowych. W ich przypadku karą byłby po prostu spadek liczby odwiedzających i pogorszenie reputacji – czyli mechanizm, który w Internecie działa od zawsze.