Frank Sinatra - piosenkarz

Dziś naszym gościem jest Piotr Szmielew – student Informatyki i Filozofii (tak zdarzają się jeszcze tacy ludzie :)), współorganizator Avangardy V, udzielającym się na forum RoR jako Esse. Jest twórcą niszowego, ale wśród programistów popularnego serwisu Roflcopter.pl.

Aleksander Dąbrowski: Skąd pomysł na serwis, czy dużo było inspiracji z 4chana?

Piotr Szmielew: Pomysł wziął się w sumie znikąd. Czułem, że w “polskim necie” brakuje takiego typowo nerdowskiego serwisu, po wejściu na który, normalny user natychmiast wyłączy przeglądarkę i nigdy więcej nie wróci, a nerd będzie zachwycony i wsiąknie. ;) Realizacja pomysłu rozpoczęła się na pewnym niezbyt ciekawym wykładzie, a została zakończona dwa dni później. ;)

AD: Jakich technologii użyłeś (wersja railsów, jakie gemy, pluginy)?

PS: Aż sprawdziłem. ;) Railsy 2.3.2, base-auth, haml (przepisałem na niego później z erb), newrelic_rpm (polecam narzędzie do analizy), restful-authentication, ultrasphinx i will_paginate.

AD: Jak dużo czasu zajęło Ci stworzenie serwisu?

PS: Stworzenie serwisu to raptem parę godzin. Podpięcie gotowego layoutu html kolejne. Całość zamknęła się myślę w około 15-20 godzinach. Jak rapid development, to rapid development.

AD: Co sądzisz o Heroku jako miejscu na start i radzenie sobie z błyskawicznie rosnącym ruchem? Przez chwilę Roflcopter był hostowany na Heroku.

PS: Heroku to rewelacyjne miejsce na początek. Łatwość robienia kolejnych deployów, wymuszenie stosowania systemu kontroli wersji, a dodatkowo darmowa wersja na początek powodują, że jest to naprawdę dobry wybór. Problem zaczyna się – tak jak mówisz – gdy serwis przeżywa rozkwit. W tym wypadku nastąpił wykop effect. Heroku radziło sobie z nim świetnie, dopóki (takie mam ciche podejrzenia) ktoś nie “przykręcił kurka z wydajnością” w heroku i nagle darmowa wersja przestała wystarczać. Nie było wyjścia – trzeba było się przenieść.

AD: Na czym obecnie stoi roflcopter (maszyna, serwer aplikacji) i jakie ma obciążenie?

PS: Obecnie roflcopter stoi na RPSie ovh. Maszyna ma dwurdzeniowego atoma, 1 gb ramu etc. Całość obsługuje nginx, za którym stoi 10 mongreli – jakoś nigdy nie byłem fanem passengera, z uwagi na jego długie wstawanie. Trudno ocenić mi obciążenie serwera – roflcopter nie jest tam jedyną aplikacją. W każdym razie ta maszyna wystarcza z zapasem i jeszcze zostaje miejsce na mniejszą aplikację, bota xmpp (bardzo mocno polecam screencast peepcode) i zabawę jakimiś screenami etc. ;)

AD: Czy pisałeś testy?

PS: Wstyd się przyznać ale nie.

AD: Dlaczego?

PS: Serwis powstawał w czymś rodzaju twórczego szału, więc zamiast poświęcić czas na pisanie testów implementowałem funkcjonalności. ;) Jednakże coraz bardziej przymierzam się do porządnego otestowania serwisu. Zwłaszcza, że teraz przez ich brak, jestem w pewien sposób ograniczony – dużo trudniej jest mi rozwijać serwis, ryzyko pomyłki zwiększa się znacząco.

AD: Na jednym z Wrugów, mówiłeś, że spróbujesz wykorzystać MongoDB na Roflcopterze. Udało Ci się?

PS: W pewnym sensie się udało. W momencie w którym przenosiłem aplikację, dokumentacja MongoMappera praktycznie nie istniała, więc była to w dużej mierze metoda prób i błędów + przeglądanie kodu mongomappera. Ostatecznie okazało się, że serwis ruszył, ale bez autoryzacji (restful-auth nie był niestety zgodny), i z drobnymi problemami z głosowaniem. Niestety wskutek nadchodzącej sesji byłem zmuszony zamknąć eksperyment. Mimo to benchmarki (oczywiście robione na szybko i bez jakiś większych przygotowań) pokazywały ogromny wzrost wydajności, zwłaszcza gdy zastępuje się relację has_many, czyli tabelę z kluczem obcym, poprzez embeddowany dokument mongomappera.

AD: Z czym miałeś największe problemy?

PS: Chyba pisanie bota xmpp – dokumentacja xmpp4r wtedy (nie wiem jak jest teraz) była słaba i napisanie czegokolwiek bez wsparcia screencasta byłoby bardzo czasochłonne.

AD: Czy serwis jest rentowny?

PS: Zależy od miesiąca ;) Zdarza się, że reklamy adtaily pokryją koszt serwera, nie jest to niestety regułą.

AD: Czemu jest tak mało nowych żartów?

PS: Stosuję zasadę, że podczas moderacji lepiej usunąć marny tekst, niż go dodać i pewnie dlatego ;) Chociaż to pytanie należy bardziej zadać użytkownikom, którzy dodają tak mało nowych – dobrych żartów.

AD: Dzięki za wywiad

PS: Dzięki :)