Haker czy inżynier: jakim programistą warto być? Wywiad z Peterem Norvigiem, szefem działu rozwoju w Google
Peter Norvig jest z natury człowiekiem o szerokich horyzontach i hakerem. Kiedyś napisał program do znajdowania w dziennikach wyszukiwania serwisu Google trzech kolejnych zapytań jednego użytkownika składających się na haiku (oto jedno z tych, które najbardziej utkwiły mi w pamięci: „java ECC / java elliptical curve / playboy faq").Dzięki pracy w Google, NASA i Junglee Norvig ma doświadczenie w stosowaniu „hakerskich" i „inżynieryjnych" technik budowania oprogramowania, a w wywiadzie opowiada o zaletach oraz wadach obu tych podejść. Ponieważ jest byłym wykładowcą nauk komputerowych, a obecnie pracuje w jednej z największych na świecie firm zajmujących się oprogramowaniem, ma też ciekawy punkt widzenia na relacje między akademickimi naukami komputerowymi i praktyką ze świata przemysłu. Warto przeczytać ten wywiad.
Zgarnij książkę "Sztuka kodowania. Sekrety wielkich mistrzów" Petera Seibela! Tak, możesz mieć tę fascynującą pozycję. Wystarczy, że weźmiesz udział w naszym konkursie. Co trzeba zrobić? Odpowiedz na poniższe pytania, wyślij je na adres redakcja@webhosting.pl, w tytule wpisz "Kocham programowanie" i licz na to, że Twoje odpowiedzi będą poprawne. 1. Jaki był pierwszy program napisany przez Norviga? Do dzieła! Uwaga: jako że cały czas przychodzą do nas zgłoszenia konkursowe, prosimy o cierpliwość. Konkurs trwa do poniedziałku włącznie. We wtorek ogłosimy zwycięzcę i wyślemy książkę! Wyniki konkursu Bardzo wszystkim dziękujemy za udział w naszym małym konkursie. Liczba zgłoszeń była naprawdę imponująca, dlatego przedłużyliśmy nieco czas jego trwania. W ocenie redakcji najlepszą odpowiedź na zadane pytania udzielił (werble):
Uprzejmie prosimy Pawła o kontakt z redakcją o podanie danych do wysłania książki. Dziękujemy wszystkim raz jeszcze za udział w naszej zabawie i zapraszamy na naszą stronę na Facebooku, gdzie ogłosiliśmy właśnie nowy konkurs związany z magiczną liczbą 4 tys. fanów! Pozdrawiamy wszystkich Czytelników, |
Kiedy nauczyłeś się programować?
W szkole średniej. Szkoła miała komputer PDP-8, tak mi się wydaje, i zapisałem się na kurs. Zaczęliśmy od programowania w języku BASIC i to był mój początek.
W którym to było roku?
Skończyłem średnią szkołę 1974, dlatego musiał to być rok 1972 lub 1973. Pamiętam z tych czasów parę rzeczy. Przykładowo nauczycielkę, która próbowała nauczyć nas tasowania talii kart. Jej algorytm działał tak: użyj generatora liczb losowych do wyboru dwóch miejsc, a następnie zamień karty z tych pozycji miejscami; przechowuj wektor bitowy z informacją o przeniesionych kartach i kontynuuj proces do czasu zamiany wszystkich kart. Pamiętam, że pomyślałem wtedy: „To bez sensu. Musi to być najgłupsze rozwiązanie na świecie. Algorytm może działać w nieskończoność, ponieważ może znaleźć się jedna para, której nigdy nie wybierzemy".
Czy zaraz po tym, jak nauczycielka opisała algorytm, uznałeś, że jest błędny? A może najpierw przez pewien czas eksperymentowałeś z nim, a dopiero potem stwierdziłeś: „Jejku, to strasznie dużo operacji"?
Chyba od razu zauważyłem problem. Trudno stwierdzić, co naprawdę myślałem, ale chyba od razu dostrzegłem, że algorytm może nie zakończyć pracy. Nie jestem pewien, czy równie dobrze zdawałem sobie sprawę z oczekiwanego czasu działania.
Pamiętam też, że znalazłem na strychu stare numery „Scientific American" ojca. Był w nich artykuł Christophera Stracheya na temat inżynierii oprogramowania. Strachey pisał, że zaczniemy używać języków wyższego poziomu. Wymyślił język, dla którego nigdy nie utworzono kompilatora. Był to język „papierowy". Strachey stwierdził, że napisze w tym języku program do gry w warcaby. Pamiętam, jak go czytałem. Był to pierwszy skomplikowany program, z którym się zapoznałem - w szkole uczyliśmy się tylko, jak tasować karty i robić podobne rzeczy. Niedawno ponownie przeczytałem artykuł i pierwszą rzeczą, jaką zauważyłem, było to, że znajduje się w nim błąd. To wspaniałe uczucie, ponieważ wiesz, że to Christopher Strachey i powinien wiedzieć, co robi.
Był to więc pierwszy ciekawy kod, który przeczytałeś. Jaki pierwszy interesujący program napisałeś?
Chyba był to program Game of Life. Napisałem go w ramach zadania domowego. Szybko je ukończyłem, a wtedy - oczywiście - nie mieliśmy dobrych wyświetlaczy. Nie posiadałem trzydziestocalowego monitora - miałem dalekopis z żółtym papierem. Stwierdziłem, że szkoda drukować jedno małe pole (mieliśmy chyba użyć pola dziesięć na dziesięć kratek), a potem następne i jeszcze następne. Dlatego stwierdziłem, że wydrukuję pięć pokoleń, jedno za drugim. Pamiętam, że w języku BASIC nie można było stosować tablic trójwymiarowych, a z jakiegoś powodu nie mogłem nawet użyć zestawu tablic dwuwymiarowych. Prowadziło to do wyczerpania pamięci lub czegoś w tym rodzaju. Dlatego musiałem wymyślić, jak utworzyć pięć lub sześć potrzebnych tablic dwuwymiarowych. Wtedy odkryłem pola bitowe.
Z uwagi na ograniczenia pamięci utworzyłeś własną pamięć na dużą ilość danych. Czy ktoś nauczył cię używać tablic bitów i wymyśliłeś, jak je zastosować, czy może przeglądałeś podręcznik i stwierdziłeś: „O, popatrzcie, mamy tu instrukcje PEEK i POKE" lub coś w tym rodzaju?
No cóż, zapisywałem w każdej lokalizacji zero lub jedynkę, a gdzie indziej musiałem zapisać więcej danych. Stwierdziłem: „Och, zapiszę inne liczby tutaj". W zasadzie nawet nie pamiętam, czy użyłem pamięci bitowej. Możliwe, że stosowałem cyfry i to raczej dziesiętne niż dwójkowe, ponieważ nikt nie przedstawił nam systemu dwójkowego w ciekawy sposób. Potem dodałem różne możliwości, np. sprawdzanie, czy liczby się nie powtarzają, a jeśli tak, to w jakim cyklu. Nie można było tego zrobić przy przechowywaniu tylko jednego wcześniejszego pokolenia.
W college'u studiowałeś przedmioty komputerowe, ale nauki komputerowe nie były twoim głównym kierunkiem, prawda?
Kiedy zaczynałem, kursy komputerowe były prowadzone na wydziale matematyki stosowanej. Zanim ukończyłem college, powstał wydział nauk komputerowych, ale moim głównym kierunkiem pozostała matematyka. Miałem wrażenie, że jeśli chcę ukończyć nauki komputerowe jako główny kierunek, muszę jako główny kierunek studiować IBM. Trzeba było poznać ich asembler, ich system operacyjny 360 itd. Nie uznałem tego za ciekawe. Niektóre kursy mi się podobały, dlatego się na nie zapisałem, ale nie chciałem brać udziału we wszystkich wymaganych zajęciach.
Po college'u przez dwa lata pracowałem w firmie programistycznej w Cambridge. Po tych dwóch latach stwierdziłem: „Szkoły zacząłem mieć dość po czterech latach, a pracy - po dwóch, może więc dwa razy bardziej lubię szkołę?".
Co robiłeś w tej firmie?
Jej głównym produktem był pakiet narzędzi do projektowania oprogramowania. Firma prowadziła też doradztwo z różnych obszarów oprogramowania. Założyciele pracowali w Draper Labs w Cambridge w ramach misji Apollo i nad podobnymi projektami. Mieli znajomości w lotnictwie i otrzymywali zlecenia od rządu. Posiadali swoją wizję projektowania oprogramowania. Nigdy w nią nie wierzyłem, ale była ciekawa.
Pamiętam, że jeden z projektów w tej firmie wymagał napisania narzędzia do rysowania diagramów przepływu. Pomysł polegał na tym, że narzędzie miało analizować program i generować dla niego diagram przepływu. Było to idealne rozwiązanie, ponieważ właśnie w ten sposób ludzie korzystają z takich diagramów. Należy je przygotować na początku, ale nikt tego nie robi - tworzymy je po napisaniu kodu. Narzędzie było pomysłowe, ponieważ miało specyficzną gramatykę częściową, dlatego działało dla programów niepoprawnych składniowo i ukrywało elementy, których nie potrafiło przetworzyć. Narzędzie musiało umieć przetwarzać instrukcje IF, ponieważ składały się one na różne bloki, natomiast inne elementy miało jedynie umieszczać w blokach. Uzyskaliśmy kontrakt na opracowanie tego programu. Zleceniodawca określił, że narzędzie ma działać w systemie Unix. Pożyczyliśmy więc maszynę z uczelni MIT i użyliśmy do budowania kompilatora wszystkich uniksowych narzędzi - narzędzia yacc i innych. W ostatniej chwili zleceniodawca stwierdził, że chcą zainstalować program w systemie VMS. Nagle okazało się, że nie mamy dostępu do narzędzia yacc. Uznaliśmy jednak, że nie stanowi to problemu, ponieważ go nie potrzebujemy. Narzędzie to było potrzebne tylko do wygenerowania tablic, co już zrobiliśmy.
Dopóki gramatyka się nie zmieni, wszystko będzie w porządku.
To prawda. Udostępniliśmy więc produkt, a odbiorca był zadowolony. Jednak wtedy - oczywiście - gramatyka się zmieniła, a my nie mieliśmy już dostępu do żadnych maszyn z Uniksem. Ostatecznie musiałem poprawiać gramatykę przez domyślanie się, co oznaczają tablice. Odbywało się to tak: „Tu mamy przejście do innego stanu - w porządku, wymyślę nowy stan i przejdę w zamian właśnie do niego".
Czy rzeczywiście było to odpowiednie rozwiązanie? Czy nie pomyślałeś o tym, aby po prostu napisać nowy parser?
Prawdopodobnie powinienem był tak zrobić, ale chodziło tylko o tę jedną małą poprawkę.
Czy nie wpadłeś przez to w pułapkę związaną z tym, że odbiorca co kilka tygodni zgłaszał nową zmianę w gramatyce?
Wtedy poszedłem na studia doktoranckie. Ktoś inny musiał zmierzyć się z tym problemem i nie wiem, co się stało.
Nie było to już twój problem. Uzyskałeś tytuł doktora. Czy zmieniłbyś coś w sposobie, w jaki uczyłeś się programowania?
Ostatecznie trafiłem do środowiska komercyjnego, dlatego mogłem wcześniej robić więcej rzeczy z tego obszaru. Nauczyłem się ich, jednak dużo czasu spędziłem w college'u i na studiach doktoranckich. Sprawiało mi to wiele frajdy, dlatego niczego nie żałuję.
Czego musiałeś nauczyć się o programowaniu w środowisku komercyjnym?
Musiałem przestrzegać terminów i dbać o zadowolenie członków zespołu, klientów oraz menedżerów. Na studiach doktoranckich nie trzeba tego robić. Wystarczy od czasu do czasu spotkać się z opiekunem.
Chyba największą zmianą było przejście od samodzielnej pracy do działania w zespole i poznawanie interakcji między ludźmi. Z tym zwykle nie spotykamy się na studiach. Wydaje mi się, że niektóre uczelnie zaczynają wprowadzać do programu zajęcia z tego obszaru. Kiedy byłem na studiach, pracę zespołową nazywano oszukiwaniem.
Jakie umiejętności, oprócz pisania kodu, powinny rozwijać osoby, które chcą pracować w branży informatycznej?
Przede wszystkim komunikowanie się z innymi. Ważna jest umiejętność zrozumienia oczekiwań klienta - ustalenia, co trzeba utworzyć i czy przygotowane rozwiązanie jest poprawne. Trzeba umieć komunikować się z odbiorcami oraz innymi członkami zespołu. Istotne są też interakcje z osobami zajmującymi wyższe stanowiska w firmie i z klientami. Są to różne relacje społeczne wymagające odmiennych umiejętności.
Czy obecnie programowanie stało się zadaniem bardziej społecznym niż kiedyś?
Tak uważam. Etapy programowania były kiedyś bardziej rozdzielone od siebie. W dawnych czasach stosowano przede wszystkim przetwarzanie wsadowe, dlatego interfejs był znacznie prostszy. Można było używać modelu wodospadu i stwierdzić, że danymi wejściowymi ma być np. talia kart, a danymi wyjściowymi - przykładowo raport z daną liczbą w określonej kolumnie.
Prawdopodobnie nie był to najlepszy sposób tworzenia specyfikacji. Należało od początku częściej komunikować się z klientem. Jednak wydawało się, że poszczególne etapy są bardziej niezależne od siebie. Teraz wszystko wydaje się bardziej płynne i interaktywne, dlatego sensowniejsze jest stwierdzenie: „Zamiast od początku przygotowywać kompletną specyfikację, zbierzmy klientów i rozpocznijmy burzę mózgów".
Czy pamiętasz konkretne momenty „olśnienia", w których zauważyłeś różnice między samodzielną pracą a wykonywaniem zadań w zespole?
Nie wiem, czy były to konkretne momenty. Raczej zdałem sobie sprawę, że nie mogę zrobić wszystkiego sam. Uważam, że dużą część procesu programowania można wykonać w głowie, ale nie da się w ten sposób zrobić wszystkiego - przynajmniej ja tego nie potrafię. Później trzeba polegać na innych osobach mających odpowiednie pomysły i je wykorzystać. Zacząłem myśleć: „W jaki sposób jest to prawdopodobnie zrobione?" zamiast: „Wiem, jak jest to zrobione, ponieważ sam to napisałem". Jak zrobiłbym daną rzecz, gdybym otrzymał takie zadanie? Zakładam, że tak właśnie to działa, a jeśli jest inaczej, muszę ustalić, dlaczego tak jest, a następnie odkryć, jak z tego korzystać.
Jaki sposób pracy w zespole ci odpowiadał, kiedy byłeś programistą? Czy lepiej podzielić problem, tak aby każdy otrzymał jego fragment? A może wolisz model programowania ekstremalnego, kiedy wszystko jest pisane w parach, a kod jest własnością całego zespołu?
Bardziej odpowiada mi podział pracy. Steve Yagge napisał kiedyś artykuł Good Agile, Bad Agile. Uważam, że ma rację. Przez 10% czasu naprawdę warto pracować razem, aby wszyscy rozumieli zadanie w ten sam sposób. Przez większość tego czasu programiści nie są w pełni efektywni.
Jeśli zespół składa się z dwóch dobrych programistów, lepiej, żeby pracowali osobno, a następnie debugowali nawzajem swój kod po zakończeniu zadania. Gorsze jest podejście: „Zgadzamy się na 50% spowolnienie pracy w zamian za dodatkową parę oczu".
Uważam, że współpraca jest ważna przy ustalaniu planu pracy. Chodzi tu o analizy problemu do rozwiązania i dodawanych funkcji. Przed rozpoczęciem pracy nie wiadomo, czym ma być produkt. Naprawdę warto wtedy pracować razem. Następnie grupa dochodzi do etapu, kiedy można powiedzieć: „W porządku, wiemy, co chcemy zrobić. Jak podzielimy pracę?". Także to warto zrobić razem. Kiedy już wiadomo, co trzeba robić, uważam, że lepiej pracować samodzielnie. Informacje zwrotne są przydatne, dlatego myślę, że każdy fragment kodu powinien przejrzeć ktoś oprócz autora, ale nie musi się to odbywać w czasie rzeczywistym, w trakcie pisania kodu.
Pamiętam pomysł mistrza programisty promowany przez IBM. Wydało mi się to najgłupszą rzeczą, jaką kiedykolwiek usłyszałem. Dlaczego ktoś miałby pracować na rzecz jednego prawdziwego programisty?
Dziwi mnie, że uważasz model mistrza programisty za tak zły pomysł. W eseju „Teach Yourself Programming in Ten Years" napisałeś, że programowanie to dziedzina, której prawdziwe opanowanie wymaga - podobnie jak inne umiejętności - około dziesięciu lat. W wielu dziedzinach obowiązuje hierarchia typu mistrz - czeladnik - uczeń. Możliwe, że nikt nie chce być uczniem, ale czy to takie dziwne, że osoba z dziesięcioletnim doświadczeniem ma robić coś innego niż ktoś świeżo po studiach?
Uważam, że najlepsza w byciu uczniem jest możliwość podpatrywania mistrza. Chciałbym częściej widzieć takie podejście. Dlatego uważam, że jest to następne zastosowanie programowania w parach. Dla początkującego naprawdę korzystne może być podglądanie kogoś o znacznie większym doświadczeniu. Dotyczy to zwłaszcza zadań, których szkoły nie uczą, np. debugowania. Każdy może nauczyć się algorytmów i tym podobnych zagadnień, ale szkoły naprawdę nie uczą debugowania. Przydatne jest podglądanie kogoś, kiedy można powiedzieć: „Nigdy bym o tym nie pomyślał".
Sądzę, że związki mistrz - uczeń rozwinęły się po części z powodu niedostatku materiałów. Jubiler miał do dyspozycji tylko niewielką ilość złota. Chirurg operuje tylko jedno serce, dlatego pracować powinna tylko najlepsza osoba, a pozostałe mają służyć pomocą. Przy pisaniu kodu jest inaczej. Mamy dostęp do wielu terminali i klawiatur. Nie trzeba ich racjonować.
«poprzednia 1 2 3 4 ... 5 następna »
Komentarze
Aby dodać komentarz, musisz podać swój nick, treść komentarza oraz poprawnie przepisać oba słowa z obrazka
(słowa muszą być rozdzielone spacją).
W treści komentarza można używać języka formatowania BBcode.
Popularne
Nazwa padła ofiarą szantażystów, inni polscy hosterzy też zagrożeni?
19
Premiera Diablo 3 wzbudziła dyskusję na temat gier, które zawsze chcą być online
19
Darmowy Internet od Aero2. Jak go zdobyć i jakie są prawdziwe koszta? Instrukcja krok po kroku
11
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
17
Nowy problem z Windows 8: bootuje się za szybko
10
Amerykańscy rodzice straszeni „e-narkotykami” dostępnymi w Sieci
21
Z okazji wypuszczenia akcji Facebooka przypomnijmy sobie, kim jest Zuckerberg
10
Blueseed: libertariańska sztuczna wyspa przyciągnęła już ponad sto startupów z całego świata
8
Rewolucja w Firefoksie, nowa łatka czterokrotnie ograniczyła zużycie pamięci
20
Darmowy Internet od Aero2. Jak go zdobyć i jakie są prawdziwe koszta? Instrukcja krok po kroku
11
CVDazzle: makijaż jest w stanie pokonać automatyczne systemy ulicznego monitoringu
3
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
17
Co czeka programistów po czterdziestce?
27
Ubuntu 12.04 LTS już dostępny: stabilna dystrybucja na następne pięć lat?
28
Społeczność
voluu A ja mam problem. MIanowicie, po dodaniu kodu z tego poradnika miniaturki...
Sebek Pozycjonowanie stron za pośrednictwem firm oferujących
swoje usługi nie...
asdosad jak to zrobić na xp??
lol Jak ktoś tu wcześniej zauważył - artykuł jest o niczym, a właściwie ukrytą...
grzybecki To raczej powinien być znak dla programistów Social Media, aby swoje...
facebug @rychu
Strona wchodzi, ślamazarnie ale wchodzi mam takie...
Dave Smith Jestem Pastor Dave Smith prywatny pożyczkodawca pieniądze, z czego ponad...
- Najdmen.pl: Konta www z wyłączonym licznikiem transferu od IONIC.pl (1)
- 2BE.PL: [Oferta] Promocja jak złoto w 2BE.PL (1)
- gardius: Dobra hurtownia sportowa (1)
- gardius: Tanie książki gdzie warto kupować? (1)
- Najdmen.pl: PROMOCJA, 500 DOMEN .EU ZA 1 PLN NETTO ! (1)
- VMLine: [Oferta] Serwery VPS Xen-HVM/OpenVZ z darmową administracją (2)
- Marek: Generowanie PDFa (2)
Polecane książki
Praca
Czytaj Webhosting
Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.
Zarejestruj domenę
Sprawdź dostępność swojej domeny:
| .pl: | 0 zł | .com: | 19.90 zł | |
|---|---|---|---|---|
| .com.pl: | 0 zł | .eu: | 19.90 zł |











#1 murwazy® 2011-06-07 10:14:54 0
IP: 89.79.188.[...] Opera/9.80 (Windows NT 6.1; U; pl) Presto/2.8.131 Version/11.11
#2 dAREuS® 2011-06-07 10:34:04 0
IP: 195.140.236.[...] Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.77 Safari/534.24
#3 invictus 2011-06-07 12:20:01 -2
Pokaż komentarzIP: 80.51.57.[...] Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.2.11) Gecko/20101013 Ubuntu/9.04 (jaunty) Firefox/3.6.11
#4 murwazy® 2011-06-07 12:22:58 2
IP: 89.79.188.[...] Opera/9.80 (Windows NT 6.1; U; pl) Presto/2.8.131 Version/11.11
#5 dAREuS® 2011-06-07 12:38:25 0
IP: 195.140.236.[...] Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.77 Safari/534.24
#6 invictus 2011-06-07 12:57:34 -1
Pokaż komentarzIP: 80.51.57.[...] Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.2.11) Gecko/20101013 Ubuntu/9.04 (jaunty) Firefox/3.6.11
#7 dAREuS® 2011-06-07 13:42:34 1
IP: 195.140.236.[...] Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.77 Safari/534.24
#8 czytelnik2011 2011-06-07 13:53:22 -2
Pokaż komentarzIP: 212.244.151.[...] Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0
#9 czytelnik2011 2011-06-07 14:05:36 -2
Pokaż komentarzIP: 212.244.151.[...] Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0
#10 invictus 2011-06-07 14:07:30 1
IP: 80.51.57.[...] Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.2.11) Gecko/20101013 Ubuntu/9.04 (jaunty) Firefox/3.6.11
#11 czytelnik2011 2011-06-07 14:10:35 0
IP: 212.244.151.[...] Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0
#12 dAREuS® 2011-06-07 14:16:35 0
IP: 195.140.236.[...] Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.77 Safari/534.24
#13 invictus 2011-06-07 14:39:04 -1
Pokaż komentarzIP: 80.51.57.[...] Mozilla/5.0 (X11; U; OpenBSD i386; en-US; rv:1.9.1.8) Gecko/20100319 Firefox/3.5.8
#14 jacek2v 2011-06-07 15:07:22 1
IP: 77.255.61.[...] Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.71 Safari/534.24
#15 dAREuS® 2011-06-07 16:04:13 1
IP: 188.121.11.[...] Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.77 Safari/534.24
#16 Luke__® 2011-06-08 00:58:25 1
IP: 95.48.173.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.77 Safari/534.24
#17 rizstas 2011-06-14 08:56:03 0
IP: 89.79.113.[...] Opera/9.80 (Windows NT 6.1; U; Edition Campaign 21; pl) Presto/2.8.131 Version/11.11
#18 ARMed w/ SSH 2011-06-16 11:41:38 0
IP: 95.178.66.[...] Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 Safari/534.30
#19 Morpheus 2011-07-13 14:36:30 0
IP: 95.178.66.[...] Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.55 Safari/535.1