Prace rozpoczęte - ustrzel.pl 2.0 w drodze…

Jak wynika z tytułu wpisu pracę nad nową wersją serwisu zostały rozpoczęte. Ogólnie zarysowany “plan bojowy” przewiduje na początek odpowiednie przygotowanie środowiska w którym obracał się będzie serwis. Przygotowania owe obejmują m.in. właściwą konfigurację Zend Frameworka, podłączenie do niego phptala. Skonfigurowanie wstępne aplikacji wg. przyjętych założeń. A owe założenia wyglądają następująco:

  • nowy snajper ma realizować min. 100% funkcjonalności swojego pierwowzoru (możliwe drobne rozszerzenia w zakresie użyteczności)
  • z powodów czysto marketingowo-promocyjnych system ma zachować zgodność wsteczną dot. strategii budowania adresów url (która w późniejszym etapie zostanie przeorganizowana)
  • nowa wersja systemu powinna być gotowa do zaimportowania z poprzedniej wersji wszystkich ustawień użytkowników, tak by przejście w momencie wdrożenia przebiec mogło bez niepotrzebnych niespodzianek

Realizując powyższe założenia udało się w chwili obecnej skonfigurować i uruchomić (lokalnie) wersję 1.0.1 której ze względu na zbyt wczesny charakter nie udostępniam jeszcze do publicznego wglądu. Pierwszy release aplikacji zostanie wykonany w wersji 1.0.2 i obejmować będzie minimum:

  • rejestrację użytkownika
  • zalogowanie do systemu

Oznacza to mniej więcej tyle, że planuję zakończenie prac konfiguracyjnych. Zbudowanie modelu użytkownika. Modułu logowania do serwisu (proste), oraz rejestracji (tutaj wymagać to będzie stworzenie submodułu wysyłania wiadomości e-mail). Termin udostępnienia przewiduję na czwartek 9 kwietnia. Gdyby jednak pracę przebiegły sprawniej, to nie jest wykluczone, iż już na tym etapie prac zobaczycie coś, czego nie ma żaden serwis snajperski. Więc czekajcie… a będzie wam dane.



Plany plany plany. Snajper musi mieć plan.

Rozpoczynamy moi drodzy od pewnych planów. Jakich? A no takich:

  • Plan taktyczny reaktywacji projektu snajpera jest prosty, i możliwy do określenia przez odpowiedzi na pewne pytania… (o czym za chwilę)
  • Na podstawie planu taktycznego opracowany zostanie plan bojowy, który określi działania pola walki (prace programistyczno-deweloperskie).
  • Następnie przyjdzie kolej na plan “pełnej pacyfikacji” użytkowników snajpera, czyli przekazania im serwisu snajpera w nowej odsłonie, co potocznie w pewnych kręgach przyjęło się określać mianem wdrożenia.

Plan taktyczny

Plan ów, sprowadzi się do odpowiedzi i uzasadnienia związanego z 3 podstawowymi pytaniami:

  1. Co mamy?
  2. Jaki jest cel?
  3. Jakich środków użyć by go osiągnąć?

Mamy snajpera składającego się z 4 modułów, które logicznie rozmieszczone są w 2 warstwach:

  1. Warstwa prezentacyjna (czyli to co widać)

    • strona internetowa (front-end)
    • moduł informacyjny (maile/smsy)
  2. Warstwa silnika (to co “działa)

    • działko snajperskie (moduł realizacji strzałów)
    • wizjer (moduł sprawdzający aukcję)

Strona internetowa (fron-end)
Moduł strony internetowej jest punktem styku między snajperem a użytkownikami. W chwili obecnej snajper nie wygląda źle. Użyteczność oraz ergonomię korzystania z serwisu oceniam nieźle - podobne głosy docierały do mnie od użytkowników, więc w tym zakresie nie przewiduję wprowadzania rewolucyjnych zmian. Będą to zatem kosmetyczne poprawki, które przyszły mi do głowy gdy po kilku(nastu) miesiącach wróciłem do serwisu (np. blok logowania dostępny w każdej części serwisu, rozszerzone opisy statusów strzałów). Być może poproszę kilku specjalistów o opinię co można by poprawić lub dodać (“Cześka” oraz Grześka).

Moduł informacyjny
Tutaj wchodzą w rachubę formy smsów, oraz e-maili jakie snajper rozsyła. Część z nich zapewne zostanie delikatnie zmienionych, tak by były bardziej przyjazne, oraz zawierały więcej informacji.

Działko snajperskie
Najważniejszy moduł snajpera. To on oddaje strzały i realizuje wasze życzenia. Tutaj z pewnością podejmę się optymalizacji i podniesienia skuteczności. Jego architektura jest na tyle złożona, że z pewnością będzie wymagała dużej uwagi. Celem jest wdrożenie rozwiązania bardziej uniwersalnego, tak by niskim kosztem możliwe było wdrożenie w przyszłości kolejnych platform aukcyjnych (np. eBay, Świstak).

Wizjer
Moduł odpowiedzialny za monitorowanie oraz stosowne reagowanie na zmiany w statusie aukcji (wysłanie powiadomienia sms/email). Tutaj w planach poza uaktualnieniem modułu jest jest wprowadzenie powiadomień dostarczanych do użytkowników poprzez komunikatory (gg/jabber).

Którędy do celu

Od czasu powstania snajpera aukcyjnego ustrzel.pl upłynął szmat czasu. Od tamtej pory zmianie uległy standardy aplikacji internetowych do jakich przywykli użytkownicy. Aplikację są bardziej interaktywne, pozwalają na więcej w prosty i intuicyjny sposób. Są technicznie bardziej zaawansowane oraz lepiej dostosowują się do potrzeb użytkowników. Również ustrzel.pl podąży tym tropem. Powstanie on w oparciu o Framework Zend - moim zdaniem jeden z najlepszych. Do niego dołożymy PHPTal’a by otrzymać dobrej jakości kod, oraz jQuery by serwis otrzymał solidną porcję ergonomii jaką daje dynamiczne wykonywanie pewnych czynności. Po przeprowadzeniu pewnych testów wydajnościowych moduł snajpera zostanie przebudowany z wykorzystanie niskopoziomowego języka C, lub pozostanie na rozwiązaniu heterogenicznym (perl,PHP), która się sprawdza.

Serwis będzie powstawał w cyklach (pomysł zaczerpnięty z metodologii Agile), po zakończeniu każdego z nich użytkownikom przekazywany będzie serwis w jego aktualnym stanie do zrecenzowania. Planowana długość cyklu nie powinna przekraczać jednego miesiąca. Tak. Serwis pokroju snajpera nie powstaje na kolanie w jeden weekend. Aktualne podejście, przyznaje się bez bicia - nieco życzeniowe, przewiduje oddanie gotowego do użycia snajpera z aktualnymi funkcjonalnościami do końca września (trzymajcie kciuki). Oczywiście wcześniej użytkownicy będą mogli go testować i opiniować. Po wrześniu nastąpi “mityczny freez”, czyli okres w którym zmiany w projekcie zostaną wstrzymane. Pozwoli to na ocenienie wyników pracy, by uzyskaniu pewnego dystansu można było przystąpić do wprowadzenia nowych funkcjonalności. Jakich? Czas pokaże…

Quo vadis?

Do celu…



Snajper aukcyjny - reaktywacja

Mój prywatny projekt snajpera aukcyjnego ustrzel.pl, którego start miejsce miał mniej więcej 2 lata temu, podupadł. Tzn. jego rozwój stanął w miejscu. Wprawdzie od czasu do czasu dokonywałem koniecznych zmian by “jakoś to działało”, jednak pierwotnie zakładane plany poszły do kosza i nie zostały zrealizowane. Przyczyną takiego obrotu sprawy były wydarzenia prywatno-zawodowe, które w znacznym stopniu angażowały mnie i mój czas, którego siłą rzeczy nie wystarczyło na zajmowanie się aplikacją.

Co się w tym czasie wydarzyło? Wkrótce po starcie snajpera skorzystałem z okazji jaka się nadarzyła czyli darmowej promocji serwisu w wynikach wyszukiwania googla. Pozwoliło to wzbić serwis na poziom “oszałamiającej” liczby odsłon na poziomie ok. 1 tysiąca. Promocja ta okazała się, wbrew moim oczekiwaniom, nadspodziewanie skuteczna. Z serwisu zaczęli korzystać użytkownicy. Co lepsze zostali oni z serwisem na dłużej. Oznaczało to, że comiesięcznie snajper ciągle odnotowywał stałą oglądalność (na mniej więcej wyżej wymienionym poziomie).

Z biegiem czasu Allegro (jedyna aktualnie wspierana przez ustrzel.pl platforma aukcyjna) zmieniało się. Zmieniało się w sposób który snajper musiał odczuć. Struktura serwisu wymuszała dokonywanie pewnych prac konserwacyjnych. W między czasie kilku użytkowników zgłaszało różne uwagi co do samej funkcjonalności serwisu. Zdarzało mi się również odbierać telefony, w których słyszałem raz to pochlebne opinie raz negatywne. Takie życie.

Coś się jednak wydarzyło. W listopadzie 2008 roku miało miejsce coś, czego się nie spodziewałem. Nagle statystyki poszybowały w górę. Analiza przyczyny napływu nowych użytkowników pokazała, że przychodzą oni z polecenia pana G. Pomyślałem “fajnie - zostałem zauważony”. Faktycznie notowania w wynikach googla serwisu poszybowały w górę. Głównie na frazy “snajper aukcyjny” i “snajper allegro”. To dobre frazy. Przynoszą zainteresowanych użytkowników. Którzy korzystają.

Gdy z początkiem lutego, zresztą jak co roku, powoli zaczęły spływać do mnie przypomnienia o fakturach zacząłem się zastanawiać. Zastanawiać się, czy przypadkiem użytkownicy nie zechcieliby dobrowolnie wesprzeć snajpera, dzięki któremu wielu z nich zaoszczędziło z pewnością niejednokrotnie ładne sumki. I tak też przyszło mi do głowy, by przedstawić sytuację użytkownikom i zapytać czy pomogą opłacić faktury za domenę oraz hosting. Prawda jest taka, że w głębi duszy, nie pokładałem w takim zagraniu większych szans aby obciążenie na mnie spoczywające cokolwiek się zmniejszyło. Użytkownicy snajpera jednak mnie bardzo pozytywnie zaskoczyli. Ogółem na moje konto wpłynęło 183 pln. Z własnej więc kieszeni dorzuciłem już kolejne 67pln i udało się uregulować należności.

Wrażenie jakie na mnie pozostawili użytkownicy, którzy z dobrej woli postanowili wesprzeć snajpera, okazało się tak wielkie, że powoli w mojej głowie zaczęła wykluwać się pewna myśl. Idea by reaktywować projekt. Wprawdzie niejaki Heralkit z Efezu twierdził, że nie wchodzi się dwa razy do tej samej rzeki. Ale co mi tam. Heraklita już nie ma, za to snajper jest. Stąd też mogę powiedzieć, że rozpoczynają się pracę nad snajperem w wersji 2.0 :)

Ps. już wkrótce więcej szczegółów.



Wstęp do CSS3: Backgrounds

Kilka dni temu Paweł Wimmer wspomniał na swoim blogu o wstępie do CSS3 jaki na DesignShack został udostępniony. Po krótki przeglądzie zawartości owych tekstów (3 części), zawiedziony marnością opracowania postanowiłem samemu przygotować cykl tekstów związanych z tym co nas czeka w bliższej lub dalszej przyszłości.

Pomimo tego, że twórcy współczesnych przeglądarek usilnie starają się (z “drobnymi” wyjątkami jak np. Internet Explorer) trzymać standardów nie zawsze wychodzi im to najlepiej. Wyścigi w zdobywaniu ACID2 a teraz również ACID3 trwają w najlepsze (Safari i Opera zdobyła 100/100), jednak nawet to nie gwarantuje poprawności implementacji wszystkich funkcji CSS2. Co nam zatem przyniesie CSS3, którego zaledwie szczątki znajdujemy w najnowocześniejszych przeglądarkach? Postaram się przybliżyć nieco kolejne moduły na jaki podzielona została specyfikacja tego przyszłego standardu (w chwili obecnej CSS3 ma status draftu - tj. szkicu specyfikacji). Zaczniemy od modułu Tła i obramowań (Backgrounds and Borders).



Nowa metoda na komentarze warunkowe

Każdy koder nie raz zmagał się z nIEdorobioną przeglądarką - wciąż jest popularna, więc nie można ignorować jej użytkowników. Wszystko rozbija się o bardzo kiepską obsługę CSS w produktach rodem z Redmond. Dlatego chcący zachować zdrowie psychiczne projektant stron zazwyczaj stosuje dobrą i sprawdzoną wielokroć taktykę: najpierw dla przeglądarek a później łatamy IE.

Jak łatamy?

Do łatania niedoróbek w IE służą nam wybiegi, jakie w przeczuciu, że IE jest kiepskie przygotowali nam jego twórcy - komentarze warunkowe. Jak wyglądają? Np. tak:

<!–[if lte IE 7]>
<link rel=”stylesheet” href=”old_ie_fix.css”></link> <![endif]–>
Co zadziała w pseudoprzeglądarkach starszych niż IE7. Analogicznie można również dostosowywać wyrażenie do innych wersji. Jak to wygląda w praktyce? Nienajgorzej, choć czasem przybiera śmieszne postaci np.:


<!--[if IE 7]>
<link type=”text/css” rel=”stylesheet” media=”screen” href=”css/ie7_fix.css”> <![endif]–>
<!–[if lt IE 7]>
<link type=”text/css” rel=”stylesheet” media=”screen” href=”css/ie6_fix.css”> <![endif]–>
<!–[if lt IE 6]>
<link type=”text/css” rel=”stylesheet” media=”screen” href=”css/ie5_fix.css”> <![endif]–>

Nie wygląd to najlepiej. Więc najwyższy czas coś z tym zrobić ;)

Z pomocą JS

Od jakiegoś czasu korzystam z biblioteki jQuery która to bardzo usprawnia proces pisania wszelakiego kodu javascript. Jest to bardzo lekka biblioteka (lżejsza niż prototype czy scriptaculus) i o niebo wygodniejsza. W podstawowym repertuarze ma ona możliwość uruchomienia kodu js w momencie załadowania drzewa DOM do przeglądarki (jeszcze przed wczytaniem dodatkowych zewnętrznym grafik!) - więc można by to wykorzystać do podpięcia tych styli warunkowych. Pozostaje nam kwestia wykrycia że mamy do czynienia z IE. Jak to zrobić dobrze? Bardzo prosto i zawsze skutecznie!

Wykrywanie IE

Podobnie jak w komentarze warunkowe wyposażony jest IE tak też wyposażony został w specjalny bajer w rodzaju kodu JS który tylko on wykona. Skorzystajmy z niego!


/*@cc_on @*/
/*@if (@_jscript_version < 7)
{
document.styleSheets[0].href=”css/ie_fix.css”;
}
@end @*/

Jak widać wyrzucając podpięcie arkusza styli do JS pozbędziemy się zaśmiecającego kod niepotrzebnego śmiecia ;) Idąc dalej możemy sobie korzystając z jQuery zgotować takie cudo:


$(document).ready(function() {
/*@cc_on @*/
/*@if (@_jscript_version < 7)
{
document.styleSheets[0].href=”css/ie6_fix.css”;
}
@end @*/
});

Analogicznie porównując zmienną @_jscript_version do wersji IE możemy podpinać tylko jeden arkusz - w zależności od wersji IE jaką akurat klient wszedł na stronę.

Praktyka

Jak to wygląda w praktyce możecie zobaczyć to na jeszcze niepowstałej do końca wersji mojego portfolio programisty.

Ps. niech was nie zmyli podpięcie JS jako js.php ;) Dzięki php wysyłam do waszych przeglądarek skompresowany gzipem kod js, co przeglądarka sobie rozpakowywuje - a ja zamiast 20kB jQuery wysyłam wam 10kB co powinno być powszechną praktyką w erze “web2.0″ gdzie czasem kod JS przybiera wagę sumaryczną w okolicy 1MB co skutkuje dziwnym krzaczkami - prawda Coolka?



Start snajpera

Jak zapewne niektórzy z was już wiedzą ;) kilka dni temu miał miejsce cichy start mojego serwisu ustrzel.pl, który wykonany został w ramach pracy inżynierskiej.

Serwis wykonany został w oparciu o model architektoniczny MVC. Do budowy snajpera skorzystałem z narzędzi typowych dla architektury LAMP tj. PHP5, Mysql. Całość stoi na serwerze progreso.pl, który funkcjonuje w ramach sieci GTS Energis, dzięki czemu mam możliwie niski czas dostępu do serwerów Allegro (też mają Energis). Jedynym odstępstwem od typowej architektury LAMP jest skorzystanie z Perla, który do pewnego zadania nadawał się znacznie lepiej niż PHP, przy czym dodatkowo ma znacznie lepiej zaimplementowaną wielowątkowość (konieczną dla wykonania wielu strzałów w jednej sekundzie) aniżeli PHP (docelowo noszę się z przepisaniem modułu snajpera w C, który będzie mi tu gwarantował największą szybkość).

Do odpalania zadań snajperskich czyli oddawania samego strzału do Allegro skorzystałem z crona. Ten jednak posiada rozdzielczość zaledwie jednej minuty, co w żadnym wypadku nie nadaje się do realizacji strzału w określonej sekundzie - zgodnie z założeniami snajpera. Dlatego też w perlu wykonałem moduł, dzięki któremu osiągnąłem sekundową rozdzielczość.

Ponieważ w praktyce czasy systemowe na serwerach lubią się rozjeżdżać, okazało się w testach, że strzały bywają realizowane tj. odnotowywane po stronie Allegro z np. 5 sekundowym opóźnieniem. Tak być nie mogło. Więc przed rozpoczęciem wykonywania strzałów każda instancja modułu sprawdza aktualny czas na serwerze Allegro, uwzględnia czas ‘zapytania’ do platformy aukcyjnej, i na tej podstawie wyznacza różnicę w czasie na serwerze snajpera. Ponadto przy realizacji strzału brany jest pod uwagę również uśredniony czas wykonania ostatnich strzałów (wahający się od obciążenia serwerów Allegro, oraz snajpera), co pozwala na trafienie we właściwą sekundę (oczywiście po uwzględnieniu tzw. buforu strzało, który ustawia zlecający strzał). Jedyne zauważone rozbieżności, które odnotowałem były rozbieżnościami “wstecz” o 1 sekundę. Co oznacza, że strzał był wykonany sekundę wcześniej. Więc tu trzeba będzie jeszcze przeanalizować sytuację.

PS. Rozważam “uwolnienie” kodu snajpera na którejś licencji otwartego kodu (z pewnych względów dopiero za ~6 miesięcy). Co sądzicie o takim posunięciu?



Zupełnie darmowa bramka sms ;)

Właśnie natrafiła się okazja do napisania czegoś ciekawego ;)

Ilu z was kiedykolwiek marzyło by mieć do własnej dyspozycji bramkę sms? Ja tak. I oto ona. Całkowicie darmowa, bezcaptchowa bramka sms.

http://fwain.shot.civ.pl/samples/sms/send.php

Działa bez rejestracji / spamu i innego śmiecia. Zapraszam do testowania.

P.S. Bramka ma ograniczenie sumarycznej ilości wysłanych smsów, więc zapewne wkrótce przestanie działać. Korzystajcie póki możecie. Smaczego



Piątek 13tego

Czy ktoś jeszcze wierzy w czarną magię pecha związanego z dzisiejszym pięknym dniem? Bo ja nie ;) A jeśli ktoś wierzy to niech sprawdzi, że przez najbliższe 30 lat nie ma roku bez przynajmniej jednego pięknego piątku trzynastego. Żeby było ciekawiej przez ten jakże piękny okres będziemy mięli 5 lat, w których będziemy mięli po 3 takie piątki (A.D. 2009, A.D.2012, A.D. 2015, A.D. 2026, A.D. 2037).

Dla zainteresowanych kiedy co gdzie i dlaczego oto pomocny link:

http://fwain.shot.civ.pl/samples/friday13/friday13.php

A dla phpowców:

http://fwain.shot.civ.pl/samples/friday13/friday13.phps

Ps. Tylko do 2028 bo wtedy przekręca się licznik ;)



Dlaczego IE ssie ;)

O tym dlaczego IE ssie nie warto wspominać, bo jest to fakt w gronie webdeveloperów powszechnie uznany za oczywisty i nie warty dyskusji. Dla zainteresowanych zapraszam do przejrzenia listy niedoróbek IE.

To, iż dobrym pomysłem jest uświadamiać nieuświadomionych, iż korzystanie z IE, która nIE jest przeglądarką, tudzież uznawana jest za nIEnormalną przeglądarkę jest godne pochwały. Dlatego w idei łącze się z Monkiem, lecz co do techniki perswazji zastanowiłbym się dwa razy ;)

Po 1. pozostawiając użytkownikowi możliwość wyboru nieograniczamy go, nieodrzucamy go w sposób natychmiastowy - w ten sposób zwiększamy szansę na wykorzystanie metod czystej perswazji w postaci komunikatów i innych fajnych uprzykrzaczy. Z pewnością jednak brutalne odrzucanie może nie koniecznie przynieść pożądany skutek.

Po 2. wybrana technika, a zademonstrowana przez Monka na blogu jest nieskuteczna. Wcale nie trzeba daleko googlać, żeby znaleźć rozwiązanie. Wystarczy skorzystać z możliwości zmiany pola User-Agent jakim przeglądarka się przesdtawia. Normalne przeglądarki tą opcję mają łatwo dostępną w opcjach konfiguracji. IE wprawdzie tego nie ma, ale rozwiązanie jest banalne. W tym celu można skorzystać z przygotowanych plików .reg:

Pozdrawiam ;)

Ps. Monku wkrótce po opublikowaniu tej notki zmienił delikatnie regułę sprawdzającą informacje przysyłane w nagłówkach od przeglądarki… ciekawym pozostawiam przetestowanie co takie zmienił ;

Ps2. Przy okazji zamiast ukrywać treść bloga notka o niepraworządnej przeglądarce jest wyświetlana jako pierwsza.



Tekstowe tło - znak wodny (watermark)

Dziś na newsach padło pytanie jak zrobić łatwe i dynamiczne tło tekstowe. Wprawdzie chodziło o rozwiązanie przypominające typowy dla css background-image z jakimś wybranym repeatem, ale stwierdziłem, że da się :)

W tej sytuacji przygotowałem dwa rozwiązanie. Jedno takie sobie, drugie już całkiem całkiem.

Rozwiązanie 1. (takie sobie)

Do dowolnego kontenera (np. div) dajemy wewnątrz spana. Np.


<div>
glowna tresc moze byc nawet bardzo dluga
<span class="background_tekst>
Moj fajny background
</span>
</div>

Oraz ostylować to jak komu się podoba np.

.background_text {
position: absolute;
top: 50%;
left: 30%;
font-size: 3em;
color: #ddd;
z-index: -1;
overflow: hidden;
}

W ten sposób możemy otrzymać takie oto rozwiązanie

Idąc dalej można zaproponować coś innego:
Rozwiązanie 2. (całkiem całkiem)
Zatrudniamy coś server-side np. php do generowania obrazka z naszym dynamicznym tłem. W ten sposób osiągamy lepszy efekt (np. ukośny tekst), jednak spada dostępność tekstu w nim zawartego (screen-readery). Aczkolwiek ponieważ założenie mówi o efekcie ‘graficznym’ możemy otrzymać coś takiego.

Oba rozwiązania do przestudiowania w samplach: http://fwain.shot.civ.pl/samples/background_text/

Ps. rozwiązanie z generowaniem obrazka, aż kusi o zastosowanie cachu, który zmniejszyłby obciążenie zasobożernego GD.