Jestem graczem. Gdy miałem niecałe dwa lata, w 1986 roku, w moim domu pojawił się IBM PC AT na którym, już wtedy, były preinstalowane gry. Pamiętam do tej pory uczucia które wzbudzało we mnie granie. Uczucie rywalizacji przy graniu w PC-POOL czy Spacewar!, chęć bycia coraz lepszym w wyścigach, czy wyzwanie i chęć odkrycia historii przy Space Quest. Potem było już tylko lepiej. Pojawiła się Amiga, Pegasus, gry takie jak Contra, Mario, Settlers, Settlers 2, pierwsze Playstation, Intel Pentium 75MHz, coraz lepsza grafika, ciekawe historie i coraz bardziej złożone mechaniki. Potem granie online: Quake, Half-Life, Counter Strike, Unreal Tournament, Day of Defeat, Battlefield 1942, Ultima Online, MUDy. Gry “singlowe” których wszystkich na pewno nie pamiętam, ale wspomnieć muszę o serii Fallout ( łącznie z ostatnim New Vegas ), Baldur’s Gate, Planescape Torment, serii Vampire, grach FPP od Wolfensteina po Half-Life 2, Bioshock, System Shock.. sporo ich było. Nie wiem ile czasu spędziłem na graniu “w młodości”, ale z pewnością znaczącą ilość czasu. Co ciekawe, w dzisiejszych czasach, w USA, od piątej klasy podstawówki ( coś jak koniec podstawówki u nas ) do ukończenia liceum, uczeń siedzi przed ekranem komputera, grając w gry, średnio 10000 godzin. Przy stu procentowej obecności na zajęciach, czas nauki w szkole w USA we wspomnianym czasie to 10080 godzin. Oznacza to, że uczeń poświęca mniej więcej tyle samo czasu na naukę grania w gry komputerowe co na naukę wszystkiego innego. Jest to przerażające, ale jednocześnie można o tym pomyśleć jako o niesamowitym zasobie osobogodzin do wykorzystania do czegoś dobrego, kreatywnego, budującego. I właśnie o tym będzie ta seria wpisów.
Ja sam nie mam teraz czasu grać. Za gracza uważa się osobę, która średnio gra godzinę dziennie codziennie, ja na pewno nie spędzam tyle czasu przemierzając wirtualne światy. Możliwe, że w pierwszym zdaniu powinienem napisać “byłem graczem”, ale mentalnie dalej się za gracza uważam.
Ale jestem też znudzony. Oprócz braku czasu, coraz rzadziej zdarza mi się napotkać grę która wzbudza we mnie jakieś emocje, czy jest wyzwaniem. W którą tak po prostu chciałbym pograć. Która stymuluje mnie na tyle intensywne żeby przyciągnąć mnie do siebie na długie godziny. Tak jak książka czy film przyciągają nas interesującą fabułą.
Znalazłem trzy prezentacje, trwające łącznie około godziny. Zazębiają się one w wielu kwestiach. Trzy prezentacje z których każda pokazuje, że z graniem się nie wygra ;-) ale też, że można przekuć je na coś dobrego.
Pierwsza z nich jest najstarsza (luty 2006) i pokazuje spojrzenie na przyszłość.. czyli na to co teraz i to co będzie za kilka lat. Jest też trochę smutnym, przerażającym i melancholijnym spojrzeniem wstępem do całego tematu.
W prezentacji zawarte są dwa ciekawe filmy. Jeden pokazuje ewolucje gier od zarania dziejów po rok 2006 (6:29). Drugi to swoisty manifest studenta uzależnionego od gier, zrealizowany w bardzo fajny, profesjonalny sposób (9:30). Dodatkowym smaczkiem niech będzie to, że prelegentem jest David Perry, człowiek odpowiedzialny za Earthworm Jim, MDK, Messiah, czy adaptacje takich filmów jak Alladin, Matrix czy Terminator na coś w co możemy pograć. Dostępne są polskie napisy.
Według mnie najciekawszą częścią tej prelekcji jest film studenta zaczynający się w 9min30s. Padają w nim mocne stwierdzenia, których słuszność potwierdzą prelekcje które pokaże w kolejnych wpisach.
Zresztą, myślę, że sporą ich część mogą potwierdzić wasze własne doświadczenia.
Granie wiąże się z silnymi emocjami. Gry są tak zaprojektowane, po to byśmy chcieli w nie grać. Bo co uzależnia mocniej od emocji właśnie? Każdy gracz czuł wzruszenie, podniecenie, dumę czy strach. Niezliczoną ilość razy przebiegały nam ciarki po plecach. W końcu czujemy, że to nasze działania i decyzje mają wpływ na świat w którym się poruszamy. Czujemy odpowiedzialność za naszych żołnierzy nawet mimo tego, że 95 procent ich działań jest zaprogramowanie. Przez to intensywność naszych emocji jest stosunkowo duża. Czujemy to przy wszystkich tych “whoa” momentach – gdy zbieramy szczękę z ziemi, gdy udało się nam dokonać coś, czego teoretycznie dokonać nie mogliśmy – coś epickiego. Wynik 80:4 k:d w CSa, trwająca minutę i wygrana walka na karabiny snajperskie, pokonanie kolejnego bossa, odkrycie dalszej telenowelowej historii w Metal Gear Solid – wszystko to, chcąc nie chcąc, budzi w nas – graczach – emocje.
Pisałem wcześniej, że jestem znudzony i po tej prelekcji myślę, że wynika to ze zbyt dużych oczekiwań. Oczekiwań które zostały rozbudzone przez granie w przeszłości. Zostałem przyzwyczajony do zupełnie innego poziomu oddziaływania niż jest oferowany dziś. Bo mnie nie rusza specjalnie nowa świetna grafika, tylko fabuła – która teraz ma tendencje do bycia coraz płytszą, albo coraz bardziej zbliżoną do Mody na sukces w kosmosie albo w świecie fantasy. Kręci mnie też interakcja i skomplikowanie, które są często zarzucane na rzecz liniowości i cutscenek. Wystarczy porównać budowę poziomów z Quake 2 z tymi z Crisis.
W grach nasze wysiłki są od razu nagradzane, gra od razu powiadamia nas o naszych postępach. Co poziom dowiadujemy się jak nam poszło, co chwilę odblokowujemy jakiś “achievement” czy zdobywamy trofeum. Cała gra składa się z wielu wielu małych i dużych celów, a dzięki ich zdobywaniu wciąż czujemy, że posuwamy się do przodu.
Jesteśmy przyzwyczajani przez gry do tego, że mamy szybki i bezpośredni wpływ na życie. To co robimy zmienia świat, mamy też natychmiastowy feedback. Nie musimy czekać miesiąca żeby dowiedzieć się, czy nasza akcja się powiodła. W realnym świecie nie mamy takiego poziomu interakcji, a przez to czujemy, że nie mamy wpływu na własne życie.
Przez to niektóre uniwersytety zrezygnowały z wystawiania ocen, a w ich miejsce stworzyły “paski postępu” – zupełnie takie same jak przy zdobywaniu doświadczenia w grach. Dzięki temu każda ocena coraz bardziej posuwa nas do przodu – i widać to dokładnie. Taki pasek pokazuje drogę która pokonaliśmy, łatwiej też jest porównać go do czyjegoś paska i utworzyć ranking, a przez to stworzyć zdrowe współzawodnictwo.
Patrzymy na świat i rozumiemy świat poprzez pryzmat naszych doświadczeń, tego co przeżyliśmy i co widzieliśmy wcześniej. Od mojego pokolenia, a pewnie i w tym trochę wcześniejszym też, dużo z życiowych doświadczeń stworzyły telewizja i gry. Gdy jesteśmy nastolatkami nasz mózg nie do końca kapuje, że to co oglądamy nie jest rzeczywiste, szczególnie gdy stanowi to tak dużą część świadomego życia. Najzupełniej w świecie nie ma porównania do rzeczywistości. To co widzimy w TV czy ekranie staje się naszą rzeczywistością.
Czy po pięciu godzinach grania w Gran Turismo czy Need for Speed nie macie poczucia, że staliście się mistrzami kierownicy?
Albo po graniu w Tony Hawka nie macie ochoty wskoczyć na deskę i “kręcić” tricki, mimo, że wasza jedyna dotychczasowa styczność z deską była krótka i szybko po niej nastąpiła styczność z asfaltem? Ja wiem, że tak mam.
A ile razy ktoś z czytających chciał “zasejwować” życie, tak na wszelki wypadek?
Przez to, że nasze życie i świat nie dają nam takiej interakcji i poczucia, że można coś zmienić w łatwy sposób, problemy takie jak ubóstwo, wojna, choroby czy ludobójstwo tracą swoją powagę, stają się płytkie, nie dotyczące nas. W końcu w grach głównym pomysłem na fabułę jest “od zera do bohatera”. Ile razy ratowaliście już świat? Bo ja z kilkadziesiąt. W życiu, teoretycznie, nie mamy szans stać się takimi bohaterami. A skoro nie mamy jak rozwiązać tych problemów, to nie przejmujemy się nimi.
Spędzamy tonę czasu grając, w grach czujemy się bohaterami, dokonujemy epickich czynów, przeżywamy intensywne emocje, dostajemy szybki feedback – czujemy się panami swojego losu. Z tego wynika ten zły wpływ gier i możliwość uzależnienia się od nich. Z jednej strony jest to przerażające, ale z drugiej – nic tego nie zmieni. Rynek gier komputerowych stale rośnie, gry będą powstawać dalej. Będą coraz bardziej realistyczne i będą nas coraz bardziej wciągać i odcinać od rzeczywistości. Niedawno był boom na HD, teraz zaczyna się boom na 3D. Fizyka w grach jest coraz lepsza. Nie ma przed tym ucieczki.
Jedna z istniejących teorii sukcesu, sformułowana przez Malcolma Gladwella, mówi, że spędzając nad czymś 10000 godzin zanim osiągniemy wiek 21 lat, stajemy się wirtuozami tego czegoś. Oznacza to, że cała masa nastolatków jest wirtuozami grania w gry komputerowe. Ale co to oznacza i jak można przekuć to w coś dobrego?
Na końcu filmu Michaela, studenta z opublikowanej tu prelekcji, padają słowa, że “Może to pranie mózgu [ przez gry komputerowe ] nie jest takie złe. Wyobraźcie sobie gry uczące nas wzajemnego poszanowania, czy pomagające nam zrozumieć problemy otaczającego nas świata. Gry mają potencjał do robienia dobrych rzeczy. ”
I właśnie o takim podejściu do sprawy będzie część druga.
Niedawno odbyłem ciekawe dyskusje o grach. O kilku typach gier, ale ich wspólnym mianownikiem był fakt, że są to gry Role Playing Games.
Tak, rozwinąłem ten skrót. Głównie dlatego, żeby pokazać co on znaczy – gry w których odgrywamy rolę, postać.
Czyli nie, naszym celem nie powinno, według nazwy, być “levelowanie” postaci, tylko jej odgrywanie. Czy ktokolwiek jeszcze zastanawia się czemu postać którą tworzy jest elfem lub krasnoludem? Czemu wojownikiem a nie magiem?
Postać powinniśmy tworzyć tak, żeby dobrze się nam nią grało, a nie dlatego, że jej “statsy” dają najwięcej szans na wygraną. I świat gry powinien na to pozwalać – czyli wyjść poza schemat, że liczba obrażeń którą nasza postać może zadać decyduje o jej powodzeniu w świecie. Ja, na ten przykład, dobrze odgrywam silnych wojowników którym nie brakuje pod czaszką – moja klasa to wojownik/paladyn. Często jako rasę wybieram krasnoluda lub jego odpowiednik. Co nie zmienia faktu, że często staje się handlarzem, bo widzę co można kupić stosunkowo tanio i sprzedać drogo. Wiem jak wykorzystać umiejętności moich znajomych, aby przetworzyć tanio kupione materiały na warte wiele więcej przedmioty i sprzedać je z zyskiem.
Ale czy w ogóle da się grać postacią?
To, że idziemy bić smoki, zbierać ciasta czy ubijać orków nie sprawia, że (ode)gramy naszą postać. W dzisiejszych grach nie ma mechaniki pozwalającej na bycie sobą. Jasne, można tańczyć, można wyrzucać z siebie emotki czy robić inne rzeczy, ale nie jest to odgrywanie postaci które by cokolwiek nam dawało ( jeżeli w ogóle można mówić o odgrywaniu postaci dzięki tym mechanizmom). W klasycznych grach RPG osoba mistrza gry ocenia nasze granie postaci i na podstawie tego przydziela nam punkty doświadczenia. Oczywistym jest to, że nie da się tego ( jeszcze ) zalgorytmizować i na podstawie tego wyznaczać wartości punktów doświadczenia dla graczy, ale może można wyznaczyć inne trendy, w oderwaniu od czystego “levelowania”.
Aktualnie granie oznacza odkrywanie nowych lokacji, zabijanie coraz to większych potworów, zdobywanie coraz to lepszych przedmiotów. Naszego avatara w grze definiuje to co ma na sobie, jego poziom doświadczenia, jakiego rumaka dosiada itp. a nie to jaki jest – jaką ma osobowość ( swoją drogą.. czy widzicie tu jakieś podobieństwa do realnego świata? ). Trudno by było ubrać w tabelkę rankingu to jak odgrywamy naszą postać. Jest to idealnie takie same jak tworzenie wskaźników działania naszego biznesu – nie da się zmierzyć wartości których nie da się ubrać w matematykę, a często są to o wiele ważniejsze wartości niż to co daje się prosto zmierzyć.
Ale! Jeżeli mamy gadkę pozwalająca nam na sukcesywny handel, to już same ceny kupna i sprzedaży da się zapisać i wykorzystać.
W dawnych czasach grałem w Ultima OnLine, na serwerze Clairs Lair. Nieoficjalnym ( ;-) ) polskim shardzie ( serwerze ). Nie pamiętam już z jakiej okazji się dołączyłem do tej gry, ale faktem jest, że zajęła sporą część mojego młodzieńczego grania online. Wspominam o tym dlatego, że była to gra w której odgrywanie postaci mogło dać wiele więcej niż proste statystyki postaci. Każda umiejętność wyrażona była w procentach, 100% znajomości danej umiejętności oznaczało bycie Grand Masterem. Łącznie można było mieć 700% ( a później 800% ) znajomości umiejętności. Aby “wbić” GMa w jakiejś umiejętności trzeba się było naprawdę napracować. Jeżeli chodzi o walkę to było to wiele tygodni, jeżeli nie miesięcy, bicia stworów. Jeżeli chodzi o tworzenie przedmiotów ( crafting ) było to wiele miesięcy ich tworzenia. Walka zużywała nam oręż. A gdy zginęliśmy trzeba było owy odzyskać zabijając stwory które często go “zjadały”. Oznaczało to zebranie drużyny która była w stanie zabić stwora który zabił nas. Tworzenie przedmiotów zużywało nasze składniki. Trzeba było mieć drewno, skóry zwierząt, sztaby metali i wiele wiele innych. Sklepikarze w miastach mieli jedynie podstawowe przedmioty, większość z bardziej wartościowych składników znajdowała się w niebezpiecznych miejscach.
Oznaczało to, że połączenie między ludźmi walczącymi a ludźmi tworzącymi przedmioty ( gospodarką ) było olbrzymie.
Dany gracz mógł nigdy nie walczyć z nikim, a i tak był poważany za to, że tworzył wyjątkowej jakości zbroje. Do wielu osób były wielotygodniowe kolejki, zamówienia składało się o wiele wcześniej, bo renoma danego rzemieślnika była znacząca. Aby kupić materiały trzeba było mieć dobre stosunki z ludźmi. Tak naprawdę trudno było zbadać postęp naszej postaci i miejsce w rankingu względem innych, ale nikt się tym nie przejmował, dlatego, że ważne było to kim jesteśmy i co reprezentujemy w grze.
Gra nie była idealna, miała bugi, które łatwo było odkryć. Kiedyś odkryłem ze znajomym fakt, ze golibroda, stojący w stolicy świata gry, ale jednocześnie w budynku wyglądającym na magazyn, kupuje za krocie magiczne przedmioty, które, poza jego kramem, nie miały żadnej rzeczywistej wartości. Zaczęliśmy skupować te przedmioty, tworząc znaczący popyt i sprzedawać golibrodzie z zyskiem. Ceny magicznych przedmiotów, które i sami pozyskiwaliśmy z zakopanych skrzyń, których lokalizacje znaliśmy dzięki wyłowionym mapom skarbów, zupełnie się zmieniły.. w końcu o wiele bardziej opłacało się nam sprzedawać je na aukcjach niż golibrodzie. Czyli zaczęliśmy wykorzystywać popyt stworzony przez nas samych do zarabiania na przedmiotach które tak naprawdę nie miały żadnej wartości, oprócz tego, że ich nazwy były fajne.
Jak widać gracze mieli znaczący wpływ na ekonomię i gospodarkę całego świata. To był akurat w dużej mierze “problem” skali – gdyż na serwerze przebywało w danym momencie kilkuset graczy, czyli łatwo jednostce było wpłynąć na gospodarkę całego świata. Ale gdyby świat był większy, to wpływ na gospodarkę byłby raczej lokalny niż globalny. Oczywiście nie trzeba było też wykorzystywać do tego bugów w grze. Wystarczyło zobaczyć odpowiednią możliwość, zmianę w modzie i wykorzystać dla siebie. I znów.. czy ktoś widzi tu podobieństwo do rzeczywistego świata?
Co więcej czegoś takiego jak “quest” praktycznie nie było. Gra sama w sobie nie posiadała żadnych misji. Jedyne wyjątki to misje tworzone przez administratorów serwerów. Przypominały one zakrojone na dużą skalę sesje RPG.
Granie w taka grę dawało o wiele więcej satysfakcji niż, stosunkowo proste, nabijanie leveli ubijając stwory w kolejnej nowo odkrytej lokacji. Dzisiejsze współdziałanie z innymi graczami sprowadza się do tworzenia drużyn aby zabić jakiegoś “bossa” i zdobyć przedmioty. Jedynym wyznacznikiem bycia lepszym jest posiadanie lepszych statów – czy to poprzez nabijanie poziomów czy przez posiadane przedmioty. Cała struktura gier została mocno spłaszczona.
A można by stworzyć o wiele bogatszy system
Moim marzeniem jest gra, w której gracze mają rzeczywisty wpływ na świat. Lokalnie, nie globalnie. Gdzie questy są wynikiem rzeczywistej gospodarki i ekonomii a nie pre-definiowanego świata. Jeżeli kowal nie ma z czego kuć przedmiotów które mu najlepiej “schodzą” i wykaże się odpowiednią inteligencją, to zamówi u gracza dostawę sztab odpowiedniego stopu. Może to być kowal-gracz, może to być kowal-non-player-character. Myślę, że przy dzisiejszym poziomie techniki, spokojnie da się zaimplementować logikę rozmytą na tyle mocno, aby dany kowal wiedział czy jego praca w danym mieście mu się opłaca i jakich materiałów potrzebuje. To samo tyczy się karczmarza czy innego rzemieślnika.
Gra musiała by dać możliwość pogrania w ciągu “10 minut” – bo nie każdy ma czas grać po osiem godzin dziennie, codziennie – i coś uzyskać. Jednocześnie nie zabijając rozrywki ludziom którzy czas na granie mają.
Sam świat może być właściwie dowolny – czy to fantasy czy rzeczywisty czy post apokaliptyczny – ważne żeby mógł się zmieniać pod wpływem działań graczy ( nie gracza – graczy ).
Nie każdy przedmiot musiałby mieć sens – byłby rynek na mody. Cała masa przedmiotów była by prawie bezużyteczna, ale mogła by być eksponowana.
Postacie uczyły by się przez doświadczenie, a nie zdobywanie doświadczenia. Aby lepiej władać mieczem trzeba by nim władać.
Materiały dla rzemieślników dostarczane by były przez wojowników – aby obie główne frakcje nawzajem się nakręcały.
Według mnie taka gra dawała by o wiele większą satysfakcję niż to, że ktoś ma najwięcej dmg na serwerze, czy że ma najwięcej nabitego doświadczenia postaci.
Respekt wyrażony wśród społeczności werbalnie, a nie poprzez czyste cyferki, byłby o wiele więcej warty niż czyste statystyki.
Możliwość walki bardziej angażującej niż 7 8 3 5 2 2 4 5 9 7 1 6 3 2 8.
No i oczywiście, żeby dało się na grze zarobić i nie upadła jak APB, współzawodnictwo między graczami na podstawie wszechobecnych rankingów. W końcu FarmVille pokazuje wszystkim, że właśnie na tej, sztucznie stworzonej rywalizacji, robi się kasę.
Zostawienie paru niedopracowań, aby gracze mieli gdzie wykazać się kreatywnością – jak Dragon Kill points, czy My Two Pecs tym samym umacniając społeczność.
Próbując uruchomić Diasporę doznałem kilku olśnień. Głównym z nich było odkrycie MongoDB. Istnieje cała masa baz danych które powstały dzięki rozwojowi aplikacji WWW jak choćby “key->value store” używane przez Facebooka, a teraz prowadzone przez Apache pod nazwa Apache Cassandra Project. Mówiąc z perspektywy programisty WWW – bazy relacyjne nie wpasowują się w potrzeby moich aplikacji. Klientom dostarczam dokumenty, liczy się szybkość ich generowania. Rządzi XML. W końcu XHTML to jest XML. Dane są hierarchiczne i często ich struktury naturalnie są dynamiczne. Fajnie by więc było gdyby mogły w łatwy sposób być tak przechowywane. Tworzenie kilku tabel dla pięciu rekordów w bazie danych, gdy klient podał trzy numery telefonów zamiast jednego, jest olbrzymim (stosunkowo) narzutem pracy, logiki i skomplikowania. Ile razy widzieliście pola VARCHAR/TEXT w których dane były przechowywane po przecinku? No właśnie. Za dużo.
Dlatego wiele lat temu zakochałem się w PureXML serwowanym przez IBM DB2 od wersji 9.0 . A teraz porzucam moją starą miłość dla zupełnie nowej. Nie oszukujmy się, zmuszenie DB2 do działania według tego jak się chce, a nie jak baza chce, to jest katorga dla osoby która nie spędziła przynajmniej kilku miesięcy na kursach. Narzędzia do obsługi bazy są toporne i bolesne w użyciu. A narzut wiedzy który był mi potrzebny do wykonywania na niej operacji liczył około trzech tysięcy stron A4 (od instalacji, przez używanie do administracji). Nie chce nawet szacować ile czasu zajęło mi instalowanie tej bazy na serwerach i maszynie developerskiej za pierwszym razem.. drugim i kolejnymi trzema. Uczenie się DB2 przyniosło mi sporo wiedzy ogólnej, która przydaje mi się teraz od czasu do czasu, ale to nie jest godna rekompensata zużytego czasu.
Ale dość wstępu. W tym wpisie chcę się skupić na MongoDB, jako, że po kilku ładnych tygodniach testów różnych baz doszedłem do wniosku, że właśnie ten produkt najlepiej spełnia oczekiwania które mamy w Zeno.pl i te które można mieć przy pisaniu mocno obciążonych aplikacji. Z pewnością zbiorę się do napisania wniosków ogólnych dotyczących innych moich odkryć wyniesionych z Diaspory along the way. Ale póki co Mongo i jego NoSQL, Schema-free podejście do życia.
MongoDB
Baza oparta jest o JavaScript i JSON/BSON. Do wykonywania zapytań używa się składni JS i JSON, dane przechowywane są przy użyciu JSONa i BSONa (do danych binarnych). Próg wejścia jest więc znikomy dla każdego kto pisał jakąkolwiek interaktywna aplikację WWW. Jest to ogromny plus. Od instalacji do pierwszych zapytań minęło u mnie kilkanaście minut. Na stronie jest ciekawie zrobiony interaktywny tutorial, dokumentacja jest tworzona na bieżąco i można o niej powiedzieć, że jest kompletna.
Sama instalacja bazy jest prościutka – wystarczy swoim managerem paczek zassać i zainstalować bazę i klienta. Standardowa konfiguracja wystarcza do zabawy i testów. Sterowniki do PHP dostępne są z poziomu PECLa
Ma to swoje plusy i minusy. Bazy danych i kolekcje (odpowiedniki tabel) tworzone są dynamicznie – oznacza to, że baza nie krzyczy na nas za literówki. Jeżeli raz napiszemy
db.users.insert({"name": "Zenobius" });
(komenda wstawiająca dokument – odpowiednik rekordu – do kolekcji user z polem – kolumną - name która ma wartość “Zenobius”) to Mongo sprawdzi czy w używanej przez nas bazie jest już kolekcja users, jeżeli nie to ją utworzy. Gdy za drugim razem wpiszemy
db.usrs.find();
(komenda listująca wszystkie dokumenty z kolekcji usrs ) to Mongo nie nakrzyczy na nas, tylko wyświetli pusty zbiór wyników. Gdy wpiszemy
db.usrs.insert( {"name": "Zenobius" } );
to Mongo stworzy kolekcję usrs, wstawi do niej dokument z polem name o wartości Zenobius i będzie się cieszyć z dobrze wykonanego zadania.
Co ciekawe każdy dokument przy insercie dostaje generowany przez bazę identyfikator. Dotyczy to też sterowników do PHP – po wywołaniu inserta obiekt który dodawaliśmy dostaje automatycznie pole _id .
Kolekcje tworzone są dynamicznie.Jestem w stanie wyobrazić sobie godziny spędzone na szukaniu buga polegającego na zjedzeniu literki. Z drugiej strony nazwy kolekcji i baz danych powinny być trzymane w modelu lub pliku konfiguracyjnym i nie zmieniane – więc da się z tym żyć.
Aby stworzyć bazę danych wystarczy użyć polecenia
use <nazwa bazy>
i baza jest gotowa do użycia. Domyślnie przy użyciu wiersza poleceń ( mongo ) używana jest baza test .
Baza jest skalowalna horyzontalnie. Jest to niesamowicie proste do skonfigurowania – wystarczy kilka poleceń na poziomie roota i admina bazy.
Replikacja danych, podobnie jak skalowanie, jest bardzo łatwa do skonfigurowania. Bazę można z łatwością dostosować do swoich potrzeb. Można wymusić zapis na kilku serwerach. Z łatwością w trybie produkcyjnym można przełączać status master i slave, aby zrobić np. backup danych.
Używa UTF8 – tak jak powinien to robić każdy z nas.
Support i interakcja twórców ze społecznością i developerami jest świetna. Przykładem może być współpraca twórców MongoDB po wpadce foursquare opisana na łamach high scalability. Oczywiście twórcy bazy nie mogli sobie pozwolić na zły PR, ale poziom szczegółowości, otwartość i szybkość reakcji sprawiają, że jestem pod wrażeniem.
MongoDB Admin UI
Do MySQLa mamy phpMyAdmina, do Postgresa mamy pgAdmina, do DB2 jest DB2 Developer Workbench. Dla Mongo też jest kilka interfejsów. Ich opis, po angielsku, dostępny jest na blogu Tima, oraz na stronie MongoDB.
Osobiście używałem póki co tylko ob PHPowych, z których o wiele lepszy jest Opricot. Ale jeżeli ktoś z was ma ochotę pobawić się Pythonem lub Ruby i dać znać czy warto – to czekam na komentarze.
Aplikacje Webowe muszą być dynamiczne. Musimy mieć też możliwość szybkiego wprowadzania w nich zmian aby wyprzedzać konkurencję. Próg wejścia dla Mongo jest niski – wystarczy kilka dni nauki i poruszamy się w jego środowisku swobodnie. Natomiast zyski z użycia Mongo wydają się być spore, jeżeli nie ogromne. Łatwość użycia, szybkość działania, łatwość konfiguracji replikacji i skalowania, prosta składnia – to wszystko rozwiązuje wiele problemów czy pytań które pojawiają się gdy używamy MySQLa czy Postgresa. Dynamiczna struktura dokumentów pozwala z łatwością zapisać w tej bazie wszystko. Fakt, że opiera się na JSON pozwala na bardzo łatwą manipulację danymi z poziomu PHP. Minusem jest mała dostępność bazy na hostingach i potrzeba migracji danych ze starej bazy i przepisanie całego modelu aplikacji. Natomiast jeżeli zaczynamy pisać coś zupełnie nowego to radzę poważnie zastanowić się nad MongoDB.
Wczoraj pojawiła się pierwsza odsłona Diaspory. Nie jest to wersja dla użytkowników końcowych, lecz dla developerów. Aby zainstalować ją na swoim komputerze trzeba się trochę namęczyć. Ale może najpierw odpowiedź na pytanie
Co to jest Diaspora?
Projekt powstał na uniwersytecie w Nowym Yorku. Idea jest właściwie identyczna do tej z Appleseed. Lepszy jest marketing. Łatwiejsza ma być instalacja.
Diaspora, w zamyśle twórców, jest rozproszoną siecią społeczną, pozwalającą na kompletną kontrolę nad danymi w niej udostępnianymi. Dostarczana na zasadach Open Source ( aczkolwiek widać, że autorzy chcą mieć kasę z innych źródeł – czemu się nie dziwię, bo jednak cos ze swojej pracy mieć muszą ), rozbudowywalna przez API i napisana w Ruby. Rozproszona – oznacza działająca na zasadach peer-to-peer. Chroniona jest przez protokół SSL oraz enkrypcje PGP – żadna wiadomość nie może przemieszczać się między instancjami “otwartym tekstem”.
Każdy użytkownik Diaspory ma mieć swoją kopię/instancję aplikacji uruchomioną na swoim serwerze (komputerze) i wystawioną na świat.
Dla nie posiadających własnego miejsca hostingowego twórcy oferować mają konta na zasadach podobnych do WordPress.com – gdzie dany węzeł ( w terminologii Diaspory “seed” – yep, p2p ) będzie dostępny pod daną subdomeną ( i przechowywany na serwerach twórców projektu – co, tak z deczka tyci tyci, kłóci się z kontrolą użytkownika nad danymi, nie? ).
No, ale generalnie każdy użytkownik musi mieć jak wystawić na świat swoją instancję Diaspory – a do tego potrzebny jest hosting z Ruby 1.8.7 na pokładzie. Co jest oczywiste, żeby seed był widoczny dla innych, i aby mógł odbierać dane od znajomych, musi być stale włączony. Dla większości ludzi domowy PC odpada. A już szczególnie biorąc pod uwagę, że łącza w domach mogą do tego nie wystarczyć.
Jak wymieniać się danymi?
Gdy już mamy naszą Diasporę – czyli taki nasz profil, wypełniony danymi i wystawiony w sieć na “naszym” serwerze – musimy mieć możliwość udostępniania tego w internecie ( oczywiście decydując czy zdjęcia ze srogiej imprezy na której dużo się działo a nawet więcej się lało mają widzieć wszyscy, czy może tylko osoby które w niej uczestniczyły? ).
Dane oczywiście mogą być publiczne, ale mogą być też dostępne tylko dla jednej konkretnej osoby. Czyli gdy wiemy, że Łysy i Młody z którymi się na imprezie bawiliśmy mają swoje seedy w necie pod adresami http://mlody.joindiaspora.com i http://lysy.joindiaspora.com to możemy wpisać te adresy w “dodaj znajomego”, wysłać zaproszenie, i zdecydować co który ma widzieć. Gdy już węzły Młodego i Łysego zapoznały się z naszym węzłem, to gdy tylko napiszemy jakiś nowy status, to i oni go zobaczą. A gdy któryś z nich postanowi go skomentować, to ten komentarz wysłany zostanie do wszystkich trzech osób ( tak, to jest Facebook ).
Idea jest piękna, prosta i.. powiedzmy, że zrealizowana ( choć dalej nie udało mi się odpalić Diaspory na moim komputerze – trzy godziny męczenia się starczą póki co – to widziałem kilkoro uradowanych ludzików wysyłających sobie nawzajem wiadomości o tym jak to fajnie mieć coś, czego prawie nikt oprócz nich nie ma ;-) ).
Tak, bo póki co to ta aplikacja nie ma w ogóle dokumentacji. Tutoriale “jak zainstalować” powstają na blogach różnych niezrzeszonych w projekcie ludzi. Diaspora oparta jest o Ruby, z którego ja nie miałem okazji dużo korzystać, więc trudno mi samemu debugować błędy. Natomiast jeszcze żaden poradnik nie przeprowadził mnie przez proces instalacji aplikacji tak, żeby wszystko działało ( na mojej developerskiej Fedorze, bo nie chce zaśmiecać sobie Windowsa). No i niestety nie wszędzie dostępne są paczki z odpowiednią wersją Ruby. Udało mi się natomiast dowiedzieć, niejako przy okazji, o ciekawej bazie danych MongoDB – zorientowanej w okół zapisu dokumentu, a nie w modelu relacyjnym czy hierarchicznym. Ale to temat na osobny wpis.
Ja, mimo wszystko, wróżę projektowi ciekawą przyszłość. Ale mogącą się zdarzyć tylko przy spełnieniu kilku warunków. Musi powstać dokumentacja – zarówno dla developerów jak i prostych szaraczków – która wyjaśni dokładnie proces instalacji i jak to wszystko działa. Muszą powstać miejsca hostingowe dla Diaspory na których ludzie będą mogli odpalać swoje seedy ( i powierzać tym firmom swoje dane ;-) ). Twórcy aplikacji nie mogą być łasi na kasę – a niestety takie zapędy można u nich zaobserwować ( a może się mylę? ). Jedyny powód dla którego to może się przyjąć to skala – czyli odpowiednia liczba ludzi korzystająca z tego rozwiązania, aby i inni chcieli z niego korzystać. No i.. musi być to lepsze niż Facebook do którego wszyscy zdołali już przywyknąć ;-)
Po wpisie o tym jak zostałem programistą kilka osób zapytało się mnie o więcej konkretów – jako, że konkretami są książki to poniżej krótka lista tych które stanowią zupełne podstawy PHP, SQL, Linuxa i Apache’a ( tzw. LAMP ). Po ich przeczytaniu powinniście znać słownictwo i programowanie w PHP na tyle, żeby móc umieć: napisać aplikacje rozwiązujące konkretne problemy, umieć przeczytać czyjś kod ( ze zrozumieniem! ), móc użyć gotowych frameworków i zrozumieć jak działają, no i mieć podstawy pozwalające na dalsze dokształcanie się w internecie.
Ja sam przerabiałem różne książki, z różnych serii wydawniczych i pisane przez wiele różnych osób. Do samego PHP4 miałem około trzech książek podstawowych i dwie lub trzy dotyczące bardziej zaawansowanych zagadnień. Potem nadszedł PHP5, ale wtedy już wiedziałem które książki kupować.
Najfajniej mi się czytało książki z serii Wrox, wydawane w Polsce przez Heliona.
Co programista powinien wiedzieć?
Według mnie samo PHP nie wystarczy. I mimo, że PHP uważane jest przez wielu za prosty i prostacki język ( głównie dlatego, ze “próg wejścia” jest niski – czyli wystarczy trochę wiedzy, by mój pisać skrypty PHP, które są wątpliwej jakości ), to jednak pozwala on na wiele konstrukcji używanych w językach bardziej zaawansowanych, takich jak C++, Java czy C# . Ale wojny językowe to osobny temat. Skupmy się na tym co programista wiedzieć powinien, aby umieć pisać kod dojrzały i profesjonalny. Tak, co by “zaawansowani programiści” mieli mniej powodów do naśmiewania się z developerów PHP ;-) Oto lista zagadnień:
Podstawy programowania ogólnie ( czyli znajomość mechanizmów, które każdy język programowania musi mieć, aby móc się nazywać językiem programowania ). Z definicji językiem programowania nazywa się taki, w którym można zapisać każdy algorytm. Matematycznie rzecz ujmując musi on być kompletny w sensie Turinga – czyli zgodny z modelem maszyny Turinga. Ale znów, ja nie o tym tu miałem.
W bardzo dużym uproszczeniu znaczy to, że trzeba znać instrukcje warunkowe, rekurencyjność i zapis/zmianę danych w pamięci. HTML, XML, CSS to nie są języki programowania, gdyż nie mają takich mechanizmów. Podstawy programowania opisują książki takie jak PHP5, Apache i MySQL. Od podstaw ( to specyficznie dla PHP – ale bardzo dobrze napisane ) oraz Programowanie. Od podstaw – trochę bardziej ogólna i oderwana od PHP, ale daje sporo jeżeli chodzi o wejście w “całe to programowanie”. Zajmuje się środowiskiem pracy, tym jakie problemy można napotkać po drodze i czemu jest to normalne ;-)
Często dużym problemem jest instalacja Apache’a i PHP tak, żeby wszystko działało jak należy – książki o podstawach PHP zawierają taką wiedzę. Aczkolwiek planuję na łamach tego bloga napisać poradnik o instalacji PHP i Apache’a pod Windowsem, jak również używając Linuxa lub jakiejś maszyny wirtualnej.
Algorytmy i struktury danych. Każdy program to algorytm – czyli zestaw działań które trzeba wykonać, aby stało się coś konkretnego i zdefiniowanego – czyli żeby otrzymać określony wynik. Tu również miałem kilka książek, ale i w tym przypadku Wrox wygrał Algorytmy. Od podstaw .
Podstawy PHP. Ten temat obejmuje książka o której wspomniałem wyżej – PHP5, Apache i MySQL. Od podstaw . W tym temacie znajduje się opis składni PHP, łączenia go z HTMLem, wywoływania przez Apache’a ( lub inny serwer WWW ). Poznanie podstawowych funkcji, pętli (for, foreach, while ) i instrukcji kontrolnych ( if, switch ). Komunikacji z użytkownikiem, pobierania od niego danych, itp. itd.
Programowanie obiektowe. Aby znać obiektowość w pełni radzę wziąć w ręce książkę o zaawansowanym programowaniu w Java lub C++, natomiast aby opanować podstawy zawarte w PHP5, polecam PHP5. Zaawansowane programowanie . Aktualnie pisanie kodu strukturalnie, to strzelanie sobie w stopę. I chociaż każdy od tego zaczyna, to lepiej, po opanowaniu podstaw, przejść do programowania obiektowego. Tutaj dowiedzieć się można co to są klasy, interfejsy, klasy abstrakcyjne, metody, hermetyzacja, dziedziczenie, implementacja i cała masa innych ciekawych słów, których definicję i sposób użycia znać trzeba.
xHTML i CSS. W idealnej sytuacji programista zajmuje się programowaniem, grafik tworzeniem grafiki, a webmaster/webdeveloper czy jak to się teraz nazywa, zajmuje się przygotowaniem grafiki dla programisty – czyli “pocięciem” jej i stworzeniem szablonu HTML, kawałków grafiki i plików CSS, a czasem nawet dołączeniem do tego AJAXa. Natomiast na początku, i aby własna twórczość nas nie odrzucała, przydaje się znać HTML i CSS ( zresztą podstawy CSS i HTMLa nikomu nie zaszkodzą ). Aby się tego nauczyć polecam tutoriale na w3schools lub CSS. Projektowanie profesjonalnych stron WWW .
Head First to też ciekawa seria, chociaż dość specyficzna – nie wiem czy do wszystkich głów trafi jej forma przekazu. Co nie zmienia faktu, że są kompletne i, przynajmniej mi, dobrze się je czyta.
Oczywiście nie trzeba kupować wszystkich tych książek na raz. Dobrą zasadą jest wypróbować nowo nabytą wiedzę w trakcie czytania, a potem popisać trochę kodu używając nowo nabytych technik.
Miłego czytania, mam nadzieję, że ta lista pomoże komuś w zostaniu programistą aplikacji internetowych.
Powyższe linki mają w sobie mój kod z programu partnerskiego Heliona. Gdy kupicie książkę na ich stronie, to na moje konto zostanie zaliczona prowizja. Jeżeli komuś to nie odpowiada, niech przed zakupem skasuje ciasteczka w przeglądarce.
Nie znam się na neurologii. O mózgu czasem sobie myślę, bo lubię wiedzieć jak działamy i my i świat w okół. W głowie rodzą mi się teorie, napędzane tym, że dużo o tym temacie myślę tak sam z siebie lub przez jakąś obserwację. I przez to łatwiej mi o tym myśleć. Błędne koło, ale z tych fajnych a nie złych.
Wczoraj mnie olśniło, że gdy dni są jednakowe – np. jak codziennie rano się budzimy, idziemy do pracy, wracamy – ot, rutyna, to te dni mają tendencję do łączenia się w jedność. Żadne odkrycie, prawda? Wiele wiele osób mówi, że “zupełnie tracę poczucie czasu”, “nie pamiętam co wczoraj jadłem na obiad”. Dla mnie wczoraj był śnieg i zimno i plucha. Wszystko od stycznia do teraz praktycznie zlane jest w mojej pamięci w całość. A wszystko dlatego, że tymi dniami, w większości, rządzi rutyna. Czy jestem w stanie teraz przypomnieć sobie co robiłem dokładnie 14 lipca? Nie. Mogę sobie przypomnieć, że w czasie tych ostatnich ośmiu miesięcy zdarzyło się to i tamto, może uda mi się to uszczegółowić co do miesiąca, a raczej okresu – np. “kiedy widziałem tą śliczną dziewczynę w metrze? no jak było ciepło, bo miała na sobie sukienkę”.
Mózg oszczędza w ten sposób miejsce. I mimo, że tak naprawdę każdy z tych dni był zupełnie inny. Mimo, że robiłem różne rzeczy, jadłem różne jedzenie, godziny były inne, ludzie na ulicy inni – to jednak mózg odrzuca drobne szczegóły różniące te dni i zapamiętuje ogólniki. Że wstałem, poszedłem do pracy,wróciłem z pracy i poszedłem spać.
Żeby zapamiętać cokolwiek musimy myśleć o szczegółach. Musimy łączyć to co chcemy zapamiętać z innymi rzeczami – jeżeli jakaś, nazwijmy to, komórka, pamięta gdzie położyliśmy klucze, to żeby zapamiętać gdzie je położyliśmy – żeby móc szybko przypomnieć sobie to miejsce, ta komórka musi łączyć się z innymi komórkami przez skojarzenia. Jak wiele łatwiej jest nam pamiętać gdzie są klucze, gdy kładziemy i znajdujemy je w tym samym miejscu po raz setny? A co, gdy ten sto pierwszy raz położymy je w innym miejscu? Nie ma ich nigdzie. A zauważyliście ile razy instynktownie wracamy do miejsca gdzie były “zawsze”? A zauważacie jak trudno potem to miejsce zmienić?
Na kursach szkolących pamięć jest technika układania tego co chcemy zapamiętać w jakąś historyjkę – stworzenie z ciągu danych historii ułatwia tworzenie połączeń z innymi rzeczami które są tej historii częścią. Więcej połączeń oznacza więcej dróg pozwalających wejść nam na ścieżkę zawierającą to co chcieliśmy zapamiętać.
Dlatego też sprawdzają się takie techniki jak “mapa myśli” – bo gdy zdamy sobie sprawę z tego z czym powiązane jest to co chcemy zapamiętać, to łatwiej znów wywołać w sobie te same skojarzenia. Wtedy myśli same płyną, tym samym torem, naturalnym dla nas – bo wykształconym. Bo droga owym utwardzana była już wiele razy – właśnie dlatego, że myśleliśmy o tym wiele razy, umacniając połączenia między komórkami.
Co ciekawe nasz mózg pamięta nie tylko co należy do zbioru skojarzeń z inna rzeczą, ale pamięta też często kolejność występowania tych rzeczy. Nasza pamięć jest chronologiczna. Dzięki temu możemy przywołać z pamięci zdarzenia po kolei i opowiedzieć historię. W końcu żyjemy w czasie, więc musimy go pamiętać. Choćby ogólnikowo.
Natomiast ta właściwość, że mózg odrzuca szczegóły, żeby móc uogólniać wspomnienia, dzięki czemu oszczędza miejsce, rodzi też inny problem/właściwość. Często zapominamy o małych rzeczach, pamiętamy ogół, ale nie pamiętamy szczegółu. Pamiętamy fajną randkę, ale nie pamiętamy czy niebo było zachmurzone, chyba, że to, że było lub nie odróżnia tą randkę od innych, i że było to silne przeżycie. Na tyle silne, by od razu móc utrwalić połączenie między komórkami tworzącymi w naszej głowie obraz danego spotkania. Jasne, nasz mózg zdaje sobie sprawę z tego, że na jakiejś randce, niebo było zachmurzone lub nie. Ale to czy potrafimy sobie przypomnieć która to randka była, to już kwestia tego, jak ważne to zachmurzenie na niej było – jaką rolę odgrywało.
Wspomnienie konkretnej randki, jako komórka o nazwie “randka z Ewą w grudniu 2007″ łączy się z komórkami które zawierają czynności/słowa “randka”, “kobieta”, “Ewa”, “wieczór”, “zimno”, itp. itd. Taka komórka nie musi mieć treści sama w sobie, ona jest zbiorem połączonych ze sobą innych treści, które ją tworzą. Gdy ktoś powie “pamiętasz tą Twoją randkę w zimie?” wpadną Ci na myśl wszystkie randki podczas których było zimno i będziesz chciał to doszczególnić pytając “masz na myśli tą z Ewą?”. Gdy ktoś odpowie “tak”, to od razu przypomną Ci się wszystkie rzeczy powiązane z tą randką, tym zbiorem ‘komórek’ definiującym to konkretne spotkanie.
Gdy pozwolimy myślom płynąć czy myślimy tylko o jednej rzeczy? Nie. Biegamy po skojarzeniach. Wszystko wydaje się chaotyczne, ale tak naprawdę kolejność rzeczy o których myślimy jest taka a nie inna właśnie dlatego, że w ten sposób układają się nasze skojarzenia. Czerwona podwiązka naszej dziewczyny ze studniówki kojarzy się z czerwonym samochodem który widzieliśmy kilka dni temu, który kojarzy się z wakacjami z rodziną, które kojarzą się z morzem, które kojarzy się z naszym pierwszym rejsem statkiem, który kojarzy się z burzą, która kojarzy się z kubkiem gorącej herbaty gdy wróciliśmy zmoczeni deszczem po spacerze z naszą trzecią dziewczyną, która to kojarzy się z zapachem poziomek, które kojarzą się ze spacerami w lesie, który kojarzy się z dziadkiem, który był leśnikiem.. itd. itp. Wszystko się ze sobą kojarzy, choć może nie w tak oczywisty sposób jak powyżej, to jednak gdy uświadomimy sobie ten fakt, o wiele łatwiej będzie nam znaleźć powiązania w tym jak płyną nasze myśli.
Zauważ, że między podwiązką a samochodem jest tylko jedna część wspólna – czerwień. Między wakacjami a samochodem częścią wspólną jest samochód. Wakacje, mimo, że odbywały się i w górach i nad morzem, to właśnie morze/woda jest aktualnie silniejsze/a i prowadzi do rejsu. Czemu akurat wybieramy jedno wspomnienie a nie drugie? Wg mnie właśnie dlatego, że przez ostatni czas używane było częściej. Gdyby to góry były aktualnie “silniejsze” to może przypomniały by o nartach, śniegu i ostatniej wigilii. Czyli liczy się i częstość i natężenie i rozłożenie w czasie tego o czym i jak myślimy.
Nasz mózg to taki system tagów łączących się z tagami, które łączą się z tagami, a one z kolejnymi itd. A każdy z tych tagów, oprócz tego, że jest słowem, ma też swoje znaczenie. Zapewne przez to, że łączy się z innymi tagami, które mu to znaczenie nadają. W naszej głowie jest worek słów, które łączone są innymi słowami. Gdy o czymś myślimy, to łączą się jeszcze mocniej. I im więcej myślimy, tym mocniej. Jeżeli nie używamy, to z czasem, zanikają i sprawiają, że o wiele trudniej przywołać pamięć. W końcu, gdy coś straci wszystkie inne połączenia, zanika. Odrywa się od systemu pamięci i.. czeka na nadpisanie czymś innym. Nie wiem tylko, czy po takich połączeniach zostaje jakiś ślad i czy można je odtworzyć. Czy może gdy wiedza wypadnie poza obieg i jedyne co ją czeka to nadpisanie inną?
Nasza pamięć nie jest idealna. Godzimy się z tym, choć nie łatwo jest z tym żyć. Ciekawe jest to, że wymagamy pamięci idealnej od komputerów. Pewnie dlatego, że są one szansą na stworzenie protezy naszej własnej pamięci.
Teraz, coraz łatwiej i więcej informacji możemy gromadzić. A przez jej natłok coraz trudniej jest nam w niej szukać. Zresztą takie szukanie nie jest idealne, bo nie jest naturalne. Czemu więc nie stworzyć, przy pomocy technologii, kopii tego, jak działa nasza pamięć? W końcu nie może to być aż tak trudne, skoro mamy to w głowach. A używanie powinno być wręcz naturalne.
Widać po nas, że mózg przekłada moc obliczeniową ponad przestrzeń dyskową. Wiele rzeczy sobie dopowiadamy. Skąd wiem, że było ciepło gdy widziałem tamtą śliczną dziewczynę w metrze? Ano nie dlatego, że pamiętam, tylko dlatego, że miała na sobie sukienkę – więc musiało być ciepło, inaczej odmroziła by sobie to i owo. Z tego też wychodzi wiele problemów – bo często dopowiadamy sobie źle. Czyli tworzymy kłamstwa w które mocno wierzymy – bo przecież “pamiętamy”.
A czy Ty pamiętasz, że parę akapitów wyżej pisałem o ślicznej dziewczynie którą widziałem w metrze?
Z tą TEDową prezentacją spotkałem się już ponad miesiąc temu, ale czekałem aż temat się rozwinie i pojawią się jakieś opinie. Wszystko brzmi dość prosto – możliwość sterowania różnymi technicznymi rzeczami za pomocą fal mózgowych lub wspomagając się falami mózgowymi.
Ale zanim zacznę się nad tym rozwodzić – najpierw film. Trwa 10min 37s, ale mnie wbił w fotel, jednym słowem – warto.
Spotkałem się z opiniami, że ten film to fake - ktoś zza kulis odpala odpowiednie skrypty ku uciesze gawiedzi – co tylko świadczy o tym, że technologia jest innowacyjna i zaskakująca.
Po pierwsze nie sądzę żeby TED pozwolił sobie na takie mistyfikacje. Po drugie czytając forum Emotiv i oglądając filmiki ludzi którzy to urządzenie kupili i się nim bawili nie mam wątpliwości, że jest jak najbardziej prawdziwe i sprawne. Z pewnością daleko mu do perfekcji ( jest trochę uwag o tym, że niektórzy nie są w stanie go uruchomić – bo styki są wadliwe lub za mało przylegają – ale generalnie są to jakiegoś rodzaju pojemniczki/gąbki napełniane wodą która przewodzi impulsy – więc trzeba zadbać o odpowiednie umiejscowienie, przyleganie i wilgotność ). Ale Emotiv EPOC Headset działa na pewno.
Napisałem wcześniej “bawić” – patrząc na aplikacje aktualnie dostępne na stronie producenta widać, że skupiają się głównie na rozrywce – gry, aplikacje do przeglądania zdjęć, itp. Nie dziwię się.
Wcześniejsze tego typu urządzenia zostały stworzone przez firmy robiące na co dzień sprzęt dla graczy. Rynek gier komputerowych i kontrolerów do gier jest olbrzymi ( 10,3 mld $ w 2004 roku z samych gier ). Sprzedaż właśnie do tej branży to łatwy sposób na zdobycie środków do rozwijania technologii i, gdy osiągnie się stabilność finansową, stosowania jej w poważniejszych projektach ( co oczywiście nie zmienia faktu, że z chęcią bym pograł w BFBC2 mogąc strzelać do przeciwnika poprzez samo myślenie o oddaniu strzału – o wiele szybciej niż wcisnąć przycisk myszy ). Gdy prowadzono wojny to armia inwestowała w technologię aby uzyskać przewagę. Teraz też się kilka wojen toczy, ale chyba gry są bezpieczniejszą lokacją kapitału ;-)
Inne urządzenia mające działać na podobnej zasadzie, stworzone przez producentów sprzętu komputerowego trudno nazwać konkurencją. Miały tylko kilka sensorów lub korzystały bardziej z napięcia mięśni twarzy niż odczytu fal mózgowych ( kto ogląda “Lie to me” wie o co chodzi ). Można więc powiedzieć, że jest to pierwsze, dostępne na rynku konsumenckim, urządzenie, które zasadę swojego działania opiera na czytaniu tego co dzieje się w naszych głowach.
Kilkukrotnie stykałem się z ludźmi zajmującymi się problemami dzieci cierpiących na autyzm. Sam miałem okazję pomagać jednemu chłopakowi w wyborze odpowiedniego joysticka który on potrafiłby obsługiwać, oraz dać mu możliwość sterowania kursorem za jego pomocą – bo nie był w stanie używać myszki. Podobny problem z komunikacja z komputerem próbowałem rozwiązać rozwijając możliwości odpowiednio przystosowanej klawiatury – wyposażonej w duże klawisze, odpowiednio rozłożone, itp. itd.
Po obejrzeniu prezentacji zacząłem myśleć czy i jeśli tak, to jakie możliwości dała by tego typu technologia. Niestety nie mogę znaleźć teraz rzetelnych informacji na temat biofeedbacku i jego pomocy w leczeniu autyzmu. Natomiast sama terapia tego typu pozwala na lepsze panowanie nad sobą, poznanie siebie i naukę kontroli swojego organizmu. Stymuluje różne obszary mózgu poprawiając ich działanie.
Ale tu nie mamy do czynienia z biofeedbackiem, tylko interfejsem pozwalającym kontrolować technologię za pomocą myśli. Gdy ciało nie chce się słuchać, gdy nie można kierować urządzeniami przy pomocy odmawiających posłuszeństwa kończyn może to jest właśnie “next best thing” lub wręcz “the best thing”?
I aby mózg wytrenować i aby mieć możliwość bogatszej interakcji ze światem? Wszystko jedno czy jest się zdrowym czy chorym..
Ja nie mogę się doczekać, aż cena tego bajeru będzie przystępniejsza i będę mógł wypróbować oprogramowanie go dla różnych potrzeb.
Parę dni siedzenia w domu i chorowania plus miałem sporo pracy z WordPress’em w ostatnim czasie i stwierdziłem, że i o mojego bloga przydało by się zadbać.
Kto czyta jakoś dłużej ( a właściwie czytuje jak się coś pojawiało ;-) ), zauważy z pewnością, że zaszło tu trochę zmian. Ale tylko część z nich widać.
Po pierwsze stwierdziłem, że przydało by się zrobić upgrade do najnowszej wersji. Trochę się bałem zmiany z 2.7.x na 3.0.1 ale.. poszło automagicznie bez żadnego stękania.
Rozochocony tym faktem zacząłem instalować pluginy do wordpressa które, po części miałem okazję testować dość niedawno.
Po pierwsze, jakieś pół roku temu zaktywowałem się na facebooku. Co za tym idzie, chciałem mieć wszędobylskiego “Like’a” oraz najchętniej komentarze z FaceBook’a automatycznie dodające się do komentarzy pod moimi postami na blogu. Niestety ostatniego punktu nie udało mi się spełnić – albo nie ma takiego plugina albo nie potrafię go znaleźć, albo ktoś go właśnie pisze, albo jest to niemożliwe do wykonania. Ostatniego punktu do świadomości nie przyjmę – bo jestem w stanie wymyślić ze trzy sposoby na zrobienie takiego ściągania ( może kiedyś sam napiszę taki “bajer” ).
Jeżeli ktoś wie lepiej ode mnie – tzn.wie jak sprawić, żeby komentarze zamieszczone pod opublikowanym przez nas na faceeboku linkiem do wpisu na blogu pojawiały się też na blogu to niech da znać w komentarzach pod tym wpisem plz!
A propos komentarzy, jak widać zmieniły się nie do poznania – za sprawą Disqus‘a. Poznałem ten system gdy zapoznawałem się z możliwościami Tumblr‘a i bardzo mi się spodobał. Jego konkurentem był Intense Debate. Wygrał Disqus. Czemu?
Obie te usługi przenoszą obsługę komentarzy na serwer usługodawcy. Ma to swoje plusy w postaci odciążenia mojego serwera, lepszej obsłudze nadchodzącego spamu.. ale największy ich plus to integracja z Facebookiem, Twitterem, Yahoo, możliwość logowania się komentujących za pomocą Facebook Connect, OpenID, Yahoo i Twittera no i wiązanie komentarzy z różnych portali/usług z komentarzami na blogu.
Wygrał Disqus przez większą liczbę tego typu połączeń, ciekawszy design i lepszą obsługę techniczną – widać, że coś się tam dzieje, a to rodzi nadzieje na przyszłość – a oto plugin.
A propos cache’a – dodałem sobie plugin p.t. WP-SuperCache. Nie wymaga nic więcej niż systemu plików, a wyniki ma całkiem znośne. Mój blog, przy oglądalności rzędu 1000 odsłon i 500 odwiedzin miesięcznie i tak dużo nie wymaga. Ale jak można niskim nakładem pracy odciążyć serwer, to czemu by tego nie zrobić?
MicroKid’s Related Posts – do wiązania różnych postów ze sobą. W niektórych notkach dodałem już takie relacje, bardzo przydatna sprawa – w Google Analytics już widzę, że ma to wpływ na oglądalność starych notek. Znów bardzo niski nakład pracy, a zysk spory – bo leci recykling starych wpisów no i obraz tworzony przed czytającym jest pełniejszy. No i nie ma takiego “ok, przeczytałem, to co zrobić teraz? a pójdę sobie..”.
WordPress 3
To zasługuje na zupełnie osobny akapit.
Po pierwsze upgrade z 2.x.x do 3.x.x był bezbolesny. Klik i po sprawie. Na nic nie przydały się backupy.
Jest wreszcie na czasie z obecnymi trendami – można stworzyć Custom Post Types – czyli nowe typy wpisów, które wyświetlają się w określony sposób, mają dodatkowe funkcje, pola itp. itd. Czyli wreszcie można sprawić, żeby była osobny sposób wpisywania cytatów, osobny wrzucania obrazków, inny kodu a inny tutoriali. Jeszcze nie dodawałem nowych typów u siebie, ale całkiem możliwe, że i na to przyjdzie czas.
Zmienił się sposób zarządzania menu. Można w nie wrzucać wiele rzeczy na raz – różne typy postów ( strona to też post ), używać na zasadzie widgetów.
Rzecz której nie będę używał póki co, ale z pewnością się przyda wielu firmom i ludziom tworzącym blogi specjalistyczne – jedna instalacja WordPress’a może teraz obsługiwać wiele instancji bloga. Więc zarządza się core’owym kodem w jednym miejscu i na nim stoi wiele wiele różnych blogów.
Do tego dochodzi garść zmian w wyglądzie panelu admina i zmiana głównego theme’a na twentyten.
Wszystko to ładnie się komponuje i zasługuje na 3.0 w numerze wersji.
Od czego zacząć gdy chce się zostać programistą? Od książek.. Wiedza i praktyka to podstawa, a im wcześniej zaczniesz się uczyć tym szybciej zaczniesz robić rzeczy które są Ci pomocne lub które mogą pomóc ludziom w robieniu ich monotonnych rzeczy – czyli zarabiać na swoich programach, swojej pasji. W końcu podstawowa cecha każdego programisty to lenistwo ;-)
Od dawna zbierałem się do napisania notki o moich początkach, pewnie będzie ona długa, ale myślę, że teraz jest dobry moment na napisanie tego tekstu.
Takim ostatnim kamykiem w bucie, który spowodował, że zabrałem się za pisanie jest film na blogu Jakuba Dąbkowskiego, który był moim Project Managerem gdy pracowałem w Implixie.
Co ciekawe, za niecałe trzy tygodnie ten blog będzie obchodził trzecie urodziny (three is the magic number). I choć te trzy lata to ułamek mojego zajmowania się programowaniem, to jest to główny okres mojego bycia zawodowym programistą, czyli zarabiania na tym co lubię robić. Zbiega się to też z początkami mojej pracy w Implixie.
Chłopaki skupili się na tym co trzeba, żeby zostać “programistą aplikacji internetowych”.
Ja bym zaczął trochę wcześniej. Według mnie, żeby zacząć w ogóle programować – wszystko jedno czy strony WWW, duże aplikacje webowe, aplikacje desktopowe, serwery, bazy danych, sterowniki do drukarek czy anten kierunkowych w satelitach NASA trzeba mieć pojęcie o komputerach generalnie – czyli jak to się wszystko kręci. Myślę, że ogólna wiedza, lub wiedza skąd daną wiedzę szybko zdobyć, przyda się każdemu.
Dopiero gdy posiądziemy podstawową wiedzę można się zastanowić “co tak naprawdę chce programować?” i iść w tym konkretnym kierunku, bo opcji jest multum – choć nie trudno się potem cofnąć. Gdy ja stanąłem na tym rozdrożu wybrałem aplikacje internetowe – ale o tym czemu, to będzie dalej.
Tekst jest długi – jeżeli nie chce Ci się czytać wszystkiego – to przedostatni paragraf jest podsumowaniem.
Trochę mnie w liczbach żebyście wiedzieli czy warto dalej czytać..
Od ośmiu miesięcy pracuję w MTV Networks Polska. Od pięciu lat prowadzę swoją firmę – Zeno.pl . Zlecenia dla klientów realizuje od ośmiu lat. W tym czasie pracowałem z/dla/w ponad 20 różnych firmach przy różnych projektach. Przez większość tego czasu byłem freelancerem. Często byłem zatrudniany na kilka miesięcy aby rozwiązać jakiś problem, zrealizować jakieś konkretne zadanie lub uporządkować pracę innych programistów. Teraz jestem “zaczepiony” w jednej konkretnej firmie – po raz pierwszy w korporacji i jest to kolejne ciekawe wyzwanie i masa doświadczeń.
Firmy dla których pracowałem były zupełnie różne – od molochów będących kontynuacją firm rodem z PRLu, przez małe, kilkuosobowe firmy zarabiające bezpośrednio na ruchu na ich stronach, firmy które tworzą oprogramowanie które jest wykorzystywane przez ich użytkowników – z czego czerpią profity po firmy które tworzą “content” i na nim zarabiają. W modelach B2B, abonamentowych i całej masie innych. Z każdego takiego kontraktu czy współpracy starałem się wynieść maksymalnie dużo wiedzy o danym biznesie i sposobie zarządzania firmą, prowadzenia projektów, marketingu i wszystkim innym co w danej firmie się toczyło.
A tak generalnie, to programuję od 18 lat, czyli przełomu zerówki i pierwszej klasy podstawówki – o ile można nazwać programowaniem grzebanie się w GW BASICu i QBasicu.
Początki
Moi rodzice zrobili błąd kupując komputer gdy miałem dwa lata. Napromieniowywałem się monitorem siedząc na ich kolanach i pewnie dlatego tak weszło to w moją krew. Gdy tylko byłem w stanie grałem na tym starożytnym już PCcie w Spacewars, PC-POOLa, Prince of Persia, Space Quest oraz jakiś fikuśny program do nauki angielskiego. Był tam też GW BASIC, do którego to moi rodzice nabyli mi książkę gdy miałem jakieś sześć lat. Niesamowicie pochłonęło mnie rysowanie w ASCII “wyścigówek” i przesuwanie ich po ekranie.
Potem przyszedł update systemu i Sim City – które to trzeba było umieć odpalić w trybie CGA, do tej pory pamiętam, że był to przełącznik /m . Ale oprócz tego dostał mi się też QBasic z grą (z kodem źródłowym!) w której dwie małpy rzucały w siebie bananami po ustawieniu odpowiedniego kątu i siły rzutu (taki pierwowzór Scorcha). Grzebałem się w tym kodzie i zmieniałem parametry gry ile mogłem. W międzyczasie pojawił się MKS Vir z bazą wirusów – przez którą zainteresowałem się tematyką infekcji komputerów i jak to się właściwie dzieje, że komputer choruje.
Brat znajomego miał Amigę 600 – na której to cięło się w gry.. i patrzyło jak ów brat robi animacje. I choć realizm efektów powalał na kolana ;-), to nigdy do grafiki mnie nie ciągnęło.
W pierwszej podstawówce do której chodziłem głównie zajmowaliśmy się graniem w Prince of Persia 2 i The Lost Vikings. Ale też chodziliśmy do położonego nieopodal Pałacyku dla Młodzieży gdzie mieliśmy zaszczyt przepisywać kod z wydruków do Commodore 64 i obserwować jak komputer generuje przepiękną grafikę, w tym fraktale. Lub.. gdy mieliśmy szczęście i przed nami była jakaś grupa, która wczytywała gry z kaset – mogliśmy w nie pograć. Ale to była rzadkość, bo zazwyczaj trzeba było zaczynać proces ładowania od nowa – w końcu podłogi były krzywe i gdy się po nich chodziło, to magnetofony drgały i program się nie wczytywał (ale ból z głowicami chyba każdy zna ;-) ).
Nie pamiętam już kiedy, ale nastąpił wielki skok – od pierwszego PCa – IBM PC AT, 12MHz z Turbo, 648KB RAMu i 20Mb dysku, z dwoma stacjami dyskietek 5,35″ przeszliśmy do Intel Pentium 75MHz, 32Mb RAMu i, zdaje się, że 1,2Gb dysku oraz S3 Trio64V+. Na ekranie własnego komputera pojawił mi się kolor! Który do tej pory widziałem w Pegasusach, Amigach i komputerach w szkołach do których chodziłem.
Ze starym ATkiem w domu rozwiązywałem tonę problemów, ale nigdy nie wyszedłem poza DOSa i Norton Commandera. I mimo, że wiedziałem co to jest autoexec.bat i config.sys oraz umiałem zainstalować znajomym sterowniki do czytnika CD to sam takowego nie miałem. Przy pierwszej styczności z CD-ROMem nie wiedziałem nawet, że jest to po prostu “stacja dyskow” i wchodzi się na niego tak samo jak na dyskietki ( pisząc, zazwyczaj, d: <enter>). A teraz była nowa jakość – Windows 95 który sam kumał takie rzeczy.
Trochę żałuję, że ominąłem posiadanie własnego 386/486, i mocne obcowanie z Win 3.1/3.11 – ale cóż ;-)
Za to razem z owym Pentiumem przyszli Settlers II i Fatal Racing.
Potem nadszedł Gambler, a razem z nim cheaty do gier (Tips&Tricks). A to otworzyło zupełnie nowe możliwości – bo nie dość, że miało się programy które potrafiły wyszukiwać w pamięci konkretne liczby, to jeszcze trzeba było czasem edytować pliki w Hexach. Z tego przyszła wiedza o adresowaniu pamięci, typach danych w niej przechowywanych, o przeliczaniu liczb z systemu dziesiętnego do szesnastkowego i bitowego – w końcu, jak chciało się mieć 1000 sztuk złota, to trzeba było wiedzieć co tam w pliku “save” wpisać i gdzie.
W szkole mówili na mnie “piter-cziter” bo właściwie nie było gry w której nie grzebałem. Moim największym osiągnięciem w tej dziedzinie było sprawienie, aby demo pierwszej części GTA nie wyłączało się po jakimś-tam czasie ( 5 minut? ).
Potem stałem się naczelnym naprawiaczem komputerów – zarówno hardware jak i software nie miały przede mną tajemnic. Formatowałem dyski, instalowałem systemy, wymieniałem karty graficzne – w końcu był boom na akcelerację 3D. Nawet kręciłem sprzęt – zaczęło się od przetaktowania mojego Pentium 75 na Pentium 90 – żeby Diablo II lepiej działało. Potem wyciągało się to kilka klatek więcej w Quake II.
Pod koniec podstawówki – 6, 7, 8 klasa - uczyłem się AC LOGO i rysowałem tym nieszczęsnym żółwiem przeróżne rzeczy. Potem liceum i Turbo Pascal.
Ale zanim nastąpiło liceum pojawił się Internet, a moja zacna rodzicielka była instruktorem w Altkom Akademia. Raz na jakiś czas w weekend, cała zgraja dzieciaków z podstawówki, pakowała się do sali wykładowej i w zamian za zainstalowanie na tym sprzęcie systemu operacyjnego i rzeczy potrzebnych do prowadzenia wykładów od poniedziałku, mogła grać ze sobą przez sieć, surfować po necie, gadać na IRCu i sprawdzać e-mail’e. Co za tym szło trzeba było rozwiązywać problemy z siecią – TCP/IP nie miało przed nami tajemnic. W końcu co powstrzyma ośmioro dzieciaków przed sprawdzeniem kto jest lepszy w Quake’a?
Co więcej system “instalowało” się używając Norton Ghost, również przez sieć.
W Altkom Akademii, gdy jeszcze była w domu handlowym Arka (tam, gdzie teraz jest Traffic) spędziłem pierwszą wakacyjną pracę. W ciągu ponad miesiąca nauczyłem się robić kable sieciowe i poruszać się jakoś w Linuxie. Ba, uczestniczyłem w stawianiu rozwiązania terminalowego – gdzie wszystkie pliki miały być dostarczane na komputery klienckie (terminale) z centralnego serwera, nawet nie wiedziałem, że to tzw. cienki klient. Nagrałem też pierwszą płytę CD (trwało to strasznie długo – ale co poradzić, nagrywarka 2x ).
Na koniec podstawówki stworzyliśmy w klasie naszą kronikę na CD. Nauczyłem się HTMLa, CSSów (no, powiedzmy ;-) ) i w wyniku tych prac każdy uczeń dostał płytkę z danymi kontaktowymi swoich kolegów, zdjęciem, jakimś krótkim “o sobie” i całą masą różnych innych rzeczy. Np. zeskanowanymi kronikami klasowymi. A wszystko ostylowane pięknymi tabelkami w tabelkach tabelek.
Razem z Internetem i Turbo Pascalem przyszła ochota i możliwości na naukę czegoś więcej. Zaczęła się moja era C i C++. Programowanie strukturalne, obiektowe, pierwsze klasy, dziedziczenie, hermetyczność, algorytmy i struktury danych. Ogrom wiedzy który trzeba było przyswoić przytłaczał, ale też kusił możliwościami.
Potem różne burzliwe dzieje sprawiły, że zamieszkałem u znajomego, świeżo upieczonego studenta PJWSTK na kierunku “programowanie gier komputerowych”. Jednocześnie pojawiło się PHP (a właściwie zaczęło być o nim głośniej) a to jak rozwijał się Internet sprawiało, że potencjał w nim siedzący był niesamowicie kuszący.
Ja stanąłem przed wyborem – zająć się aplikacjami – czyli pisaniem w C++ lub Javie, czy pójść w kierunku aplikacji internetowych – JSP, ASP, PHP. Wybrałem aplikacje internetowe i PHP – głównie dlatego, że stroną WWW łatwiej dotrzeć do wielu osób. A odkąd zacząłem programować chciałem, żeby z moich rozwiązań korzystało jak najwięcej osób.
Oczywiście nie zmieniało to faktu, że bawiłem się DirectX’em, czytałem zawzięcie o efektach graficznych, o tym jak karty graficzne generują obraz na ekranie itp. itd. Ale to była zabawa, poważna nauka, praca i czas szły w PHP.
Najważniejsze było to, że wiedziałem, że to jest moja przyszłość i że właśnie to chce w życiu robić.
W międzyczasie zacząłem chorować, przez trzy lata tułałem się bez diagnozy i byłem przykuty do mieszkania. I mimo, że spałem długimi godzinami i byłem mocno wycieńczony – to gdy mogłem czytałem. Póki co żaden tutorial w internecie nie nauczył mnie podstaw danego zagadnienia tak dobrze, jak książka. Może to dlatego, że książkę wygodniej się czyta niż tekst na ekranie. A może raczej jest to spowodowane tym, że jednak aby wydać książkę trzeba o wiele więcej wysiłku – więc i jakość przekazywania wiedzy jest lepsza. Cokolwiek by to nie było – polecam na początku uczyć się z książek. Z internetu można uzyskać całkiem trafny pogląd na to co dany język czy baza danych mogą. Internet jest genialny do poszerzania wiedzy, wyszukiwania rozwiązań dla konkretnych problemów i idealny żeby znaleźć książkę na dany temat ;-), ale nie sprawdza się do początkowej nauki. Polecam też dobrze nauczyć się angielskiego – prosta sprawa – najwięcej zasobów w necie jest właśnie po angielsku.
Choroba dała mi łącznie pięć lat, przez które głównie, ale nie tylko, siedziałem w mieszkaniu i czytałem wszystko co mi w ręce wpadło. Moi znajomi w tym czasie szli na studia, ja zaczynałem wykonywać zlecenia dla pierwszych klientów. Od prostego pocięcia grafiki do statycznej strony WWW, przez jakieś prościutkie skrypty wyświetlające aktualną datę na stronie. Dynamicznie generowaną galerię skanów – po wgraniu pliku txt i jpg o tych samych nazwach pojawiały się na liście i opis był brany z pliku. I tak powoli szedłem do przodu.
Gdy myślałem o możliwościach które daje nam Internet miałem niesamowite wizje przyszłości i tego jak to może na nas wpłynąć. Porywałem się na projekty olbrzymie, których nie byłem w stanie wtedy zrealizować.
Zawsze moją przewodnią myślą było to, żeby robić narzędzia które ułatwią ludziom życie. Lub wzbogacą je jakoś. Ułatwią robienie rutynowych rzeczy, żeby mieli więcej czasu na rzeczy kreatywne, których nie da się tak łatwo ubrać w język komputera.
Miałem po drodze sporo porażek. Niektóre wynikały z mojego charakteru, inne z braku wystarczającej wiedzy. Ale z każdej z nich brałem ile mogłem i starałem się nie popełniać drugi raz tych samych błędów.
Pierwszym takim projektem była strona internetowa dla mojego liceum, która miała być jednocześnie forum wymiany myśli, miejscem do prezentacji i ewentualnej sprzedaży swoich wyrobów przez uczniów (bo mieliśmy tam witrażownie i parę innych kreatywnych zajęć) i całą masą innych funkcjonalności. Nie było wtedy AJAXa, jQuery, zdaje się, że nawet XHTML raczkował. A ja “robiłem strony” od niecałego roku. W efekcie czego powstała strona, z autorskim forum z “bazą danych” w XMLu – marny pomysł ;-) . I na tym się skończyło.
Potem przyszedł projekt gry przeglądarkowej, zdaje się, że wtedy nie było jeszcze OGame’ów i innych bajerów. Chociaż pewnie pierwszy pomysł na grę przez przeglądarkę to to nie był.
Ale każde to niepowodzenie sprawiało, że uczyłem się dalej i chciałem móc dojść do takiego etapu w którym mógłbym zrealizować to wszystko efektywnie i efektownie.
Miałem też sukcesy. Jedna z pierwszych stron, zrobionych już po zarejestrowaniu Zeno.pl, dalej działa – mistrzowieimprez.pl . A na końcu źródła strony można wciąż zobaczyć <!-- Powered by ZenoFUEL 1.0.23 check it at: http://fuel.zeno.pl -->
Zupełnie nowatorski projekt, jak na tamte czasy, dwu-klikowego uploadu zdjęć do neta, z generowaniem linków na fora, do maili, itp. itd. – winogrono.net - miał ponad 150k odsłon miesięcznie po dwóch miesiącach działania. A linki z wykorzystaniem winogrono.net dostawałem np. od ludzi grających w EVE Online lub znajomych na GG, którzy nie wiedzieli, że to moja strona. Było to też ciekawe użycie marketingu wirusowego – bo ludzie sami zarażali innych – dając im linka do strony sprawiali, że ludzie sami zaczynali używać tego narzędzia.
Niesamowite jest to, że grając przez sieć w różne gry: Ultima OnLine, Counter Strike, Day of Defeat, Battlefield 1942 poznałem całą masę ludzi którzy albo robili to co ja i mogliśmy się wymieniać doświadczeniami, albo chcieli robić to co ja i mogłem ich uczyć.
Tak spotkałem Kamila z którym współpracuję do tej pory i który ogromem swojej wiedzy w niektórych dziedzinach przewyższa mnie oraz melera który aktualnie rozrywany jest przez klientów chcących by zrobił im grafikę. Przez moją “szkółkę” przewinęło się w ciągu ostatnich pięciu lat kilka osób, które teraz pracują w różnych firmach jako programiści WWW i odnoszą w nich sukcesy.
Pierwszy staż w firmie miałem w 2004 roku, była to znów Altkom Akademia, gdzie robiłem zupełnie nowe dla mnie rzeczy w PHP. Między innymi program do rejestracji sal oraz rejestracji gości w biurze. Opiekowałem się też po części outsource’owanym do Altkomu systemem księgowym dla HP. No i robiłem aplikację do zamawiania sprzętu łącznie z wysyłaniem maili do różnych ludzi gdy spełnione zostały określone warunki – np. koszt przewyższał 5000zł.
Po stażu, w 2005 roku, założyłem Zeno.pl, bo liczba zleceń była już znacząca a projekty coraz ciekawsze i trudniejsze. W sierpniu 2007 wpadłem na szalony pomysł wyprowadzenia się do Gdyni, gdzie we wrześniu dostałem pracę w Implixie – rozmawiając przez Skype’a a potem na żywo w biurze. Zajmowałem się wtedy dużymi aplikacjami – m.in. talkstream.com czy getresponse.com – nauczyłem się sporo o wysyłce maili, łączenia PHP z Flashem i całej masy innych rzeczy.
Po czterech miesiącach dostałem ofertę nie do odrzucenia znów w Warszawie, gdzie nauczyłem się kodowania plików flv do formatów webowych. Powstała, i niedługo potem upadła, jedna z pierwszych telewizji przez internet w Polsce ;-)
Potem była praca w różnych firmach ( goldenline, profeo, linkedin ). Przychodziłem, robiłem coś dużego i szedłem dalej. Czasem nadzorowałem projekt, czasem oceniałem jego koszty czasowe lub pieniężne. Uczestniczyłem w negocjacjach. W końcu zaczęły się zlecenia gdzie prowadziłem projekty. Ale głównie programowałem. Rzadko uczyłem się nowych rzeczy, po drodze “liznąłem” PERLa i Pythona. Nadszedł okres lekkiej stagnacji.
Potem wybuchł AJAX i biblioteki JavaScript’owe. I znowu było się czego uczyć. Ale od momentu w którym zacząłem być freelancerem uczę się na bieżąco tego co jest mi potrzebne i trzymam rękę na pulsie, żeby wiedzieć co może niedługo przyjść.
Teraz znów uczę się nowych rzeczy – bo skala projektów w MTV jest o wiele większa niż projektów z którymi miałem do czynienia do tej pory, a co za tym idzie, rozwiązania problemów są zupełnie inne. Nowe wyzwania potrzebują nowego spojrzenia.
Czego można się z tego nauczyć?
Moja droga nie jest zbyt standardowa. Chociaż prawdą jest, że IT to taka fajna dziedzina, którą może zająć się każdy kiedy chce. Jasne, nie każdy nauczy się programować – ale jeżeli chce, to może kupić książkę i spróbować. Ja wiązałem moje życie zawodowe z komputerami od podstawówki. Spadła na mnie choroba, która mimo całej swej uciążliwości, sprawiła, że miałem dużo czasu na naukę tego czego chciałem się uczyć. Tak czy siak, można z tego wyciągnąć trochę uniwersalnych rad, a może ktoś wyciągnie coś jeszcze?
Jeżeli pasjonują Cie komputery – poznawaj je. Nie musisz decydować się od razu na jakąś dziedzinę, sprawdź co sprawi Ci największą frajdę. Cała masa ludzi robi teraz niesamowite rzeczy – czytniki fal mózgowych, operowanie komputerem za pomocą ruchów dłoni, urządzenia szóstego zmysłu, robotyka – wszędzie jest programowanie. I nawet jeżeli za jakiś czas stwierdzisz, że nie chcesz już programować anten satelitarnych dla NASA i wolisz robić strony firmowe w jakimś języku webowym – to część Twojej wiedzy będzie dalej przydatna (chociaż kto wie w czym pisze się w NASA :O ).
Na początku ucz się z książek – to najbardziej kompletne ( choć często nie wolne od błędów ) źródło wiedzy.
Czegokolwiek nie będziesz programować naucz się podstaw i aktualnych trendów – znajomość słownictwa, ogólnych zagadnień, stosowanych skrótów, nazw różnych algorytmów, nomenklatura programowania obiektowego czy wzorców projektowych ułatwi Ci zrozumienie tego co do Ciebie mówią.
Naucz się uczyć i szukać wiedzy – nie jesteś w stanie zapamiętać wszystkiego, ale powinieneś pamiętać co wpisać w Google, żeby znaleźć odpowiedź na Twoje pytanie.
Bierz udział w dyskusjach na forach, dołącz do społeczności, dopytuj się czemu tak a nie inaczej i staraj się zrozumieć rozwiązania. W takich miejscach znajdziesz wiele inspiracji.
Staraj się poznawać zagadnienia poboczne do tego nad czym aktualnie pracujesz – poznanie większego obrazu pozwoli Ci lepiej umiejscowić to co robisz. Możesz też wpaść na zupełnie nowe rozwiązania Twoich problemów.
Nie bój się nowych wyzwań – nawet jeżeli Ci się nie uda, będziesz bogatszy o doświadczenia i wiedzę. Z porażek wyciągaj maksimum informacji na przyszłość.
Sprawdzaj się, wiedz ile czasu zajęło Ci dane zadanie, z czym były problemy co poszło gładko – śledzenie postępów motywuje.
Nie daj się zaskoczyć i nie popadaj w stagnację. Jeżeli czujesz, że stoisz w miejscu – znajdź nową dziedzinę w której możesz się rozwijać.
Podsumowując
Ja sam, na początku, nie wiedziałem, że uczę się programować. Zdałem sobie z tego sprawę dopiero pod koniec podstawówki, gdy brałem udział w Olimpiadzie Informatycznej.. w AC LOGO ;-) Najpierw była to dla mnie zabawa (a co by było, gdyby małpa rzucała dwoma bananami, albo losową ich liczbą!), lub sposób na osiągnięcie celu w grze (nie chce mi się tłuc tych trolli w kółko, wrzucę sobie 29837192gp i od razu kupię tą mega zbroję). Uczyłem się tego co było mi potrzebne żeby te cele osiągnąć – ułatwić sobie życie, skrócić ilość czasu potrzebną mi na przejście gry, nie rezygnując z fabuły – bo fabuła fajna, 4h zbierania gp – nudne. To była taka nieświadoma nauka.
Potem zacząłem się uczyć świadomie – miałem szczątkową wiedzę, głównie z obserwacji. Zacząłem ją systematyzować przez uczenie się kontekstu i innych możliwości – wiedziałem co to integer, ale float? Wiedziałem, że można sortować wyniki, ale jak zrobić to najszybciej na danym zbiorze danych?
Gdy już miałem kompletniejszą wiedzę podstawową zacząłem szukać mojej niszy, mojej specjalizacji – tego w czym chce być naprawdę dobry. W końcu znalazłem – aplikacje internetowe. Zacząłem szukać rozwiązań najbardziej pasujących do mojego wyobrażenia siebie i tego co chciałem w danym momencie osiągnąć i zasobów które miałem aby zrealizować te cele – wybrałem PHP.
Kupiłem podręcznik do PHP i okazało się, że potrzebuję jeszcze nauczyć się bazy danych i konfiguracji Apache’a i najlepiej skubnąć coś więcej Linuxa. Potem zacząłem realizować moje pomysły, uczyłem się znów na bieżąco, ale tym razem świadomie, tego co było mi potrzebne. Wykorzystywałem wiedzę z C++ o programowaniu obiektowym by projektować drzewa klas. Łączyłem różne dziedziny ze sobą na coraz to nowe sposoby.
Potem przyszły dodatkowe technologie dające więcej możliwości w mojej dziedzinie – JavaScript, AJAX, XML, XSLT.. itd. itp. I znów nauka, rozwiązywanie problemów, nowe możliwości, nowe problemy i znów nauka..
PS
Tak, robiłem wtedy i robię dalej w życiu inne rzeczy niż siedzenie przed komputerem.
Nie, nie mam kolekcji flanelowych koszul w szafie ;-)
Tak, lubię komputery – jako narzędzia i dostarczycieli pewnej części rozrywki i spędzam przed nimi sporo czasu. Ale spędzam też sporo czasu na spacerach, w kinie, na imprezach, koncertach, czytając książki czy robiąc inne nie potrzebujące komputera rzeczy ;-)
Wszelkie pytania piszcie w komentarzach – postaram się odpowiedzieć.
Kto nie zna TED.com – niech pozna. To niesamowita kopalnia wiedzy i miejsce w którym skupia się wielu współczesnych geniuszy z każdej właściwie dziedziny. A nawet dziedzin które nie mają jeszcze nazwy ;-)
Niedawno nadrobiłem trochę oglądanie TEDowskich prelekcji i stwierdziłem, że kilkoma podzielę się z bliższym mi internetem ;-)
Na pierwszy ogień idzie “Co prowadzi do sukcesu?” – czyli krótka ( trzy i pół minuty ) prezentacja stworzona przez Richarda St. Johna, średniaka – jak sam o sobie mówi, którego zastanowiło czemu akurat on odniósł sukces w swoim życiu. Poszukiwanie odpowiedzi trwało ponad 7 lat, podczas których rozmawiał z pięciuset ludźmi – od celebrytów, przez specjalistów, po ludzi który po prostu odnosili sukcesy, choć mało kto o nich słyszał.
Osiem sekretów do odniesienia sukcesu, wg Richarda, to: pasja – robienie czegoś co się uwielbia, kocha. Pieniądze pojawiają się przy okazji. Jeżeli mamy robić coś całe życie i odnieść w tym sukces – trzeba to lubić. Ciężka praca, bo nic nie przychodzi łatwo. Kunszt – bycie naprawdę dobrym w swojej dziedzinie, wyspecjalizowanie się. Czyli zdobywanie wiedzy i doświadczenia przez praktykę. Skupienie – nie rozdrabnianie się na wielu polach czy wielu projektach – wybranie jednego i inwestowanie w niego całej siły. Mobilizacja i motywacja – trzeba potrafić przezwyciężyć nieśmiałość i samo-zwątpienie, być odważnym i wierzyć w siebie i swoje pomysły. Służba – robienie czegoś dla innych. Dostarczanie im wartości ( wszystko jedno czy namacalnych czy nie) – bo tylko dzięki nim można nabrać środków i siły by iść dalej. Pomysł – trzeba mieć dobry pomysł na to co chce się zrobić (nie takie proste? patrz dalej). Upór, wytrwałość – trzeba móc przetrwać porażki oraz CRAP ( z ang. “bzdury” ) – czyli Criticism, Rejection, Assholes, Pressure – krytykę ( nowatorskie pomysły często są odrzucane jako “to nie może się udać” ), odrzucenie, dupków i stres.
Sposób na pomysły – aby być kreatywnym wystarczy: słuchać, obserwować, być ciekawym (świata i ludzi), pytać, rozwiązywać problemy i budować kontakty.
I pod tym ostatnim stwierdzeniem mogę się podpisać.
Czy ta lista jest kompletna? Póki co nie czuję potrzeby uzupełnienia jej o coś jeszcze.
Można jeszcze zapytać co znaczy “odnieść sukces” dla danej osoby, ale myślę, że jeżeli ktoś kocha to co robi, jego praca służy innym – wzbogaca ich życie o nowe przydatne przedmioty czy rozwiązania. Gdy to co robi motywuje go do dalszej pracy i gdy może realizować nowe pomysły to jest osobą odnoszącą sukces.
Miłego TEDowania, i nie oglądajcie wszystkiego za jednym razem ;-)