Blog

Dioda Intela, czyli konkurs Dobrychprogramów, cz. 2

  
Konkurs Dobrychprogramów trwa w najlepsze. 12 października nieco się zmienił sposób wyświetlania diody, przez co trzeba było skrypt pisać od nowa, gdyż poprzedni już nie działą. Zajęło mi to dosłownie chwilkę - 2-3 godziny. Myślę, że mógłbym to nawet zrobić szybciej, ale dopiero "raczkuję" w bibliotece GD, więc trochę mi to zeszło. Tak jak w poprzednim artykule na ten temat, tak i teraz nakreślę sposób działania mojego skryptu informującego nas natychmiast o pojawieniu się diody. Chciałbym tylko zaznaczyć, że do zrozumienia tego artykułu, potrzebna jest znajomość poprzedniego. :) A więc do dzieła.

Na samym początku należy przeanalizować, skąd tak naprawdę bierze się żółta dioda. Wkopujemy się więc jak zawsze do źródła strony. Interesuje nas wyłącznie linijka 71, z której dowiadujemy się praktycznie wszystkiego, więc ją przeanalizujmy:

Dowiadujemy się tutaj, że wczytywany obrazek to jest tak naprawdę http://konkurs.dobreprogramy.pl/ContestHandler.ashx. Następnie możemy odczytać, że z tego obrazka jest wycinany fragment o rozmiarach 36x36 pikseli. Nieco dalej jest zdefiniowany styl #diode, który wybiera wycinany obrazek o współrzędnych macierzystego -36px oraz -72px. W CSS tak właśnie jest, że punkt 00 jest w lewym, górnym rogu, dlatego są liczby ujemne. Myślę, że dotychczas jest wszystko jasne, bo teraz dopiero zacznie się kombinowanie. ;)

Cały problem polega na tym, że współrzędne zmieniają się co tyle samo sekund czy minut, co obrazek. Wyklucza nam to wycinanie zdefiniowanych raz już współrzędnych z obrazka. Czyli: za każdym razem, kiedy wykonujemy skrypt, musimy pobierać 2 pliki: kod strony i obrazek.

Na samym początku kodu naszego skryptu, najlepiej wczytać stronę główną konkursu (default.aspx) do tablicy (funkcja file), a obrazek zapisać na serwerze. Następnie musimy wyodrębnić współrzędne przesunięcia. Ja wpadłem na pomysł, żeby funkcją explode podzielić ciąg na dwie części, jak separatora użyłem "#diode{background-position:". Później usuwamy funkcją str_replace pozostałości, czyli najpierw ";}</style></a>" (a na końcu pamiętajcie jeszcze o znaku powrotu karetki i nowej linii), a następnie usuwamy "px". I tym oto sposobem powinniśmy otrzymać (z powyższego przykładu) ciąg: "-36 -72". I tutaj tak znowu używamy explode, tyle że jako separatora używamy spację i każdą wartość przypisujemy już do konkretnych zmiennych. Pamiętajmy teraz, żeby przekonwertować nasze "stringi" (nie, to nie majtki, czy coś na ich kształt, tylko to jest tekstowy typ danych ;) do "integerów" (liczby całkowite). Teraz pozostaje nam wyliczyć wartość bezwzględną tych zmiennych (funkcja abs), gdyż w bibliotece GD, współrzędne liczone są tak samo jak w CSS, ale na liczbach dodatnich. Chodzi tutaj o uporządkowanie wartości w argumentach.

Kiedy mamy już obrazek na serwerze i przygotowane współrzędne, obcinamy obrazek (funkcja imagecopyresampled) i nadpisujemy go.

Teraz to tylko sprawdzenie zakodowanego ciągu obrazków, porównanie ich, wysłanie maila, zapisanie informacji o wysłaniu w bazie. A wszystko to zrobi za nas co minutę CRON. :) Ci, którzy czytali poprzednią część artykułu, wiedzą o czym mówię. ;]

Tak więc nie jest to sprawa niewykonalna. Można by rzecz, że nawet prosta. Ciekaw tylko jestem, czy deweloperzy Dobrychprogramów ponownie zastosują jakąś nową metodę wyświetlania diody w przyszłości.

Wiem i zdaję sobie sprawę z tego, że może i w moim toku myślenia jest dużo kombinowania, ale mój skrypt jest całkiem przyjazny każdemu, kto się choć trochę w niego wgłębi. O jego prostocie na pewno świadczą jedyne 52 linijki kodu. :)

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 X.
2
KOMENTARZE

BĄDŹ ZE MNĄ NA BIEŻĄCO
NA FACEBOOKU ORAZ X  

2
KOMENTARZE



WYŚLIJ
E-MAILEM

WERSJA
DO DRUKU

SUBSKRYBUJ
KANAŁ RSS


BĄDŹ ZE MNĄ NA BIEŻĄCO
NA FACEBOOKU ORAZ X

Komentarze 

OD NAJSTARSZYCH  •  OD NAJNOWSZYCH
21.10.2010, 14:22 #2
No tak, mój błąd :) Zaraz poprawię
ODPOWIEDZ    NAPISZ NOWY
Majaque
21.10.2010, 12:54 #1
12 października raczej ;)
ODPOWIEDZ    NAPISZ NOWY
Pasja. Każdy ma swoją