Blog

Dioda Intela, czyli konkurs Dobrychprogramów

  
Konkurs Dobrychprogramów i Intela nabiera rozpędu. Dzisiaj nastąpiła korekta w pytaniu z dnia wczorajszego, przez co kilkaset osób "uratowało swoją skórę". Lecz nie o tym chciałbym teraz pisać. Otóż udało mi się nieco rozgryźć diodę oznajmiającą, że pojawiło się nowe pytanie. Ale po kolei.

Konkurs polega na tym, że każdego dnia października pojawia się pytanie związane z tematyką Intela. Problem w tym, że nie wiemy, o której godzinie pojawi się owe pytanie. Stwarza to konieczność przesiadywania przed stroną cały dzień i śledzenie specjalnej diody, która (gdy jest dostępne pytanie) - miga się na przemian: na niebiesko i na żółto. Poza tym, w tym konkursie liczy się również szybkość odpowiedzi na pytania. Możemy przyjąć zasadę, że codziennie wieczorem będziemy sprawdzać, czy jest nowe pytanie, ale wtedy tracimy 250 punktów możliwych do zdobycia za szybką odpowiedź no i pozycję w rankingu. Postanowiłem zatem przeanalizować sposób działania tego konkursu od strony technicznej. Udało mi się to zrobić, skrypt działa, ale ujawnię wyłącznie schemat mojego myślenia. ;)

Są dwie drogi do sprawdzenia czy jest dostępne już nowe pytanie: jedna jest trudna, druga jest trochę łatwiejsza. Pierwsza droga to taka, żeby skrypt wchodził na stronę http://konkurs.dobreprogramy.pl/Autoryzacja.html, przeszedł pomyślnie captchę (!) i sprawdził, że jest nowe pytanie. To jest droga trudna. Ja poszedłem drogą łatwiejszą, czyli przez obserwację diody informującej.

Kiedy już przeanalizowałem kod strony konkursowej doszedłem do wniosku, że za kolor diody odpowiada następujący plik: http://konkurs.dobreprogramy.pl/QuestionssIsActive.ashx, który następnie przyjmuje swój typ na obrazek PNG. I tutaj praktycznie doszliśmy do sedna całego skryptu! :) Sęk w tym, że obrazek jest generowany dynamicznie wraz z wartością losową. I tutaj wielkie brawa za pomysłowość dla twórców tego skryptu! Na szczęście można tą barierę łatwo pokonać. Wartość losowa jest mniej więcej w połowie obrazka. Dlatego łatwo możemy za pomocą odpowiednich funkcji (i na przykład biblioteki GD) obrazek przyciąć w połowie. Kiedy wszystkie te kroki wykonamy poprawnie, wystarczy zakodować otrzymany obrazek za pomocą dowolnej funkcji kodującej (chyba najlepiej za pomocą base64) i porównać ją z zakodowanym obrazkiem, np. diodą żółtą. Tutaj wystarczy prosty warunek (zapiszę w pseudokodzie): jeżeli base64_z_obciętego_obrazka jest identyczne jak base64_z_obrazka_dioda_żółta to... ...i tutaj możemy na przykład wysłać maila do siebie. Niektórzy dostawcy obsługują jeszcze powiadomienia SMS o nowej poczcie, więc jesteśmy w domu. :)

Problem teraz polega na tym, że aby uruchomić ten skrypt, musimy wpisać jego adres www do przeglądarki i go własnoręcznie wykonać, a nie o to przecież chodzi. Tak więc z pomocą przychodzi nam teraz CRON, za pomocą którego możemy ustawić wykonywanie skryptu co 5 minut, o minutach będących wielokrotnością liczby 5, np. 00, 05, 10, 15 itp. Z doświadczenia wynika, że pytania pojawiają się o takich właśnie minutach. Jeżeli ktoś chce, może ustawić sobie CRONa co minutę, tak dla pewności. :]

Teraz przed nami stoi kolejny błąd. Musimy tak poprawić nasz kod, żeby w momencie, kiedy mail zostanie wysłany, skrypt gdziekolwiek zapisał (baza, pliki txt), że w tym dniu informacja została już wysłana. W przeciwnym wypadku zaczniemy otrzymywać co 5 minut (lub co minutę ;) informację o nowym pytaniu, przez cały czas, kiedy dioda będzie żółta.

I to jest cała tajemnica tego skryptu. Chciałbym jednocześnie zaznaczyć, że nie biorę co do tej metody żadnej odpowiedzialności - w każdej chwili deweloperzy DP mogą zmienić sposób informowania o nowym pytaniu lub co gorsza wykluczać z konkursu wszystkich używających takowego skryptu. Notka w celach edukacyjnych i informacyjnych. :)

Osobiście uważam, że używanie takiego skryptu jest trochę nie fair wobec innych, którzy wręcz "ślęczą" nad monitorem i wyczekują pytania. Ale z drugiej strony skrypt informuje wyłącznie o nowym pytaniu, a nie odpowiada na nie. ;) Tak więc trzeba przejść jeszcze jedną barierę - umysłową. :D

Podobał się artykuł? Myślę, że tak. :) Czekam na Twój komentarz poniżej. Bądź ze mną na bieżąco na Facebooku i obserwuj mnie na Twitterze.
3410
WYŚWIETLEŃKOMENTARZY


BĄDŹ ZE MNĄ NA BIEŻĄCO
NA FACEBOOKU I TWITTERZE  

3410
WYŚWIETLEŃKOMENTARZY





WYŚLIJ
E-MAILEM

WERSJA
DO DRUKU

SUBSKRYBUJ
KANAŁ RSS


BĄDŹ ZE MNĄ NA BIEŻĄCO
NA FACEBOOKU I TWITTERZE


PODAJ E-MAIL I ZAPISZ SIĘ
DO NEWSLETTERA


Komentarze 

OD NAJSTARSZYCH  •  OD NAJNOWSZYCH
  
AKCEPTUJĘ ZASADY
Pasja. Każdy ma swoją
Twitter
Newsletter
Podaj swój e-mail i zawsze bądź na bieżąco!
Wiadomości rozsyłam następnego dnia rano po publikacji nowego artykułu.
Tak samo jak Ty nie lubię spamu.