Hej,
chciałbym przedstawić i poddać Waszej ocenie nowy projekt: Screenr. Wszelka krytyka (lub też dobre słowo) mile widziane!
Jest to niewielkie narzędzie online do tworzenia zrzutów stron oraz miniatur stron internetowych udostępniające proste API oraz umożliwiające zagnieżdżanie zarzutów, bądź miniatur, bezpośrednio na stronach internetowych.
Aplikacja znajduje się obecnie w fazie publicznej bety - aczkolwiek wszystko powinno działać jak należy.
Całość składa się z kilku komponentów: interfejsu webowego oraz workerów. Głównym elementem serwisu jest aplikacja webowa stojąca na Symfony 2. Rodziela ona zadania pomiędzy poszczególnymi workerami. Same workery odpowiadają za generowanie zrzutów oraz miniatur. Oba te elementy są od siebie odseparowane: znajdują się na innych fizycznych maszynach, a także są od siebie zupełnie niezależne.
Aktualnie postawione są dwa workery: jeden napisany w PHP, drugi napisany w Pythonie. Oba wykorzystują silnik Webkit do pobierania zrzutu strony, ale oba robią to w inny sposób i z wykorzystaniem innych narzędzi. Najlepsze jest jednak to, że workery mogą robić praktycznie rzecz biorąc wszystko: jeśli zajdzie potrzeba udostępnienia przeglądarek? Nie ma problemu - lekka zmiana API po stronie frontendu aplikacji oraz napisanie odpowiedniego workera (akurat taka funkcjonalność znajduje się na mapie drogowej).
Co w tym fajnego?
- odpowiednie nagłówki w zależności od statusu żądania
- odpowiednie wymiary zwracanych grafik - brak problemów przy umieszczaniu zrzutu w tagu <img>
Jak to działa?
Po wysłaniu żądania, jest ono umieszczone w kolejce oraz natychmiast wysłane do wolnego (bądź z najmniejszą kolejką) workera. Worker obsługuje żądanie i uaktualnia status w bazie danych. W zależności od statusu żądania jest zwracany odpowiedni nagłówek oraz placeholder. Po skończeniu pracy przez worker, zrzut lub miniatura są przesyłane do wewnętrznego storage'u i zwracane. Grafiki są cacheowane przez 24 godziny (wartość ustawiona na sztywno, niedługo będzie konfigurowalna poprzez API podobnie jak i format, etc.).
Wykorzystane technologie:
- PHP (Symfony 2)
- MySQL
- Node.js
- Redis
- Python (worker).
Znane problemy:
- obsługa Flasha.
Dokumentacja oraz formularz demo są dostępne pod adresem http://screenr.co.
Przykładowa miniatura forum.php.pl o wymiarach 500x500 pikseli: kliknij tutaj.
Za wszelkie opinie, serdeczne dzięki.