Ostatnie wiadomości
Witam po znacznej przerwie - ostatnia notka pojawiła się kilka ładnych miesięcy temu a i poprzednie też z dużymi odstępami, dlatego na potrzeby wpisu załóżmy, że nic nie działo się tu o roku. Czas to zmienić - czemu i w jakim celu postaram się opisać niżej.
Rok później
W ciągu ostatniego roku, w tematach zawodowych, zmieniło się dość dużo. Pierwszego września 2010 odszedłem z pracy od mojego dotychczasowego chlebodawcy i zacząłem pracować na własną rękę. Sytuacja utrzymuje się już rok i sądząc po w miarę stabilnym poziomie środków na koncie - zarówno firmowym jak i własnym - w tym temacie nie będziemy się już cofać. Nie mam planów zakładania własnej Agencji Interaktywnej, chociaż wiem, że innym moim współpracownikom udało się śpiewająco, i wykorzystawszy nabytą wiedzę i energię są już znaczącą siłą na rynku.
Nie, na razie robię na swoje - nie pamiętam już czasu, żebym miał tydzień wolnego w jednym momencie, więc jest co robić i póki sił starcza nie będę outsourcował ani zatrudniał innych ;)
Po co znowu blog
Blog powraca jako jedno z kilku narzędzi (poza post-it, todo etc.), które ma mnie motywować, żebym "coś robił". Wiadomo, że najlepiej w pamięć wchodzą rzeczy, o których piszemy - dlatego np. łatwiej w szkole było przypomnieć sobie coś, o czym się pisało niż czytało. Blog ma być takim moim ksero. Nie będę pisał tutaj o czymś, czego sam nie spróbowałem i czego nie uważam za godne polecenia.
Czyli o czym będzie?
Jeżeli szukasz blogu, na którym przeczytasz o nowościach ze świata stron WWW, nowych możliwościach CSS3 czy dobrodziejstwach najnowszych przeglądarek, to ten blog ... nie będzie dla Ciebie.
Mam zamiar pisać o tym, co stanowi chleb powszedni każdej osoby, która zawodowo (nie hobbystycznie!) tworzy strony internetowe. CSS3 i inne rozwiązania, które nie działają w starszych, ale wciąż popularnych przeglądarkach (nie, IE6 już nie wspieram - Ty też przestań)? Nie tutaj - a przynajmniej nie jako temat główny. Postaram się raczej prezentować dobre praktyki, rozwiązania i sztuczki, które możesz wykorzystać w codziennej pracy.
Blog ten nie będzie adresowany do ludzi, którzy tworzą strony dla tworzenia stron i gonią za nowinkami. Wszystkie przykłady i opisywane rozwiązania muszą działać na naszym rynku, na którym wciąż duży kawałek ciasta stanowią stare przeglądarki (IE 7, 8 czy nawet Firefox 3.x).
Jeżeli jesteś pracownikiem agencji interaktywnej, którego zadaniem jest tworzenie kodu HTML i JS, zapewne mniej interesują cię nowinki, a bardziej to, żeby osoby odpowiedzialne za testowanie stron przestały marudzić, że coś nie działa w ich przeglądarce, pod taką a taką rozdzielczością, kiedy stoją na jednej nodze ... Będę starał się pisać właśnie dla Ciebie. Opisywać dlaczego warto skorzystać z mojego rozwiązania, co możesz zyskać (Ty, Twój pracodawca i klient) i co ew. stracić.
Dobra, dobra - napiszesz dwa posty i znowu nic.
Postaram się, żeby taka sytuacja się nie zdarzyła. Od ponad pół roku piszę nową, 3-cią, wersję swojego systemu CMS (komercyjny, dostosowany do moich i klienta potrzeb, a nie moloch typu Joomla) i przy jego tworzeniu wykorzystałem kilka rozwiązań, z dobrodziejstw których (ograniczony IE6 i inną starą technologią, a często też starający się skończyć wszystko na przysłowiowe "wczoraj") do tej pory nie przyszło mi korzystać. Teraz, widząc, że rozwiązania te sprawdzają się w praktyce i stosowanie ich przynosi wymierne korzyści mogę spokojnie usiąść i opisać je "po swojemu" - tak, żebyś i Ty mógł zacząć z nich korzystać.
Wstęp mam nadzieję że nie wyszedł mi zbyt długawy, ani pompatyczny - niech nikt nie pomyli się, i nie pomyśli, że chcę zostać drugim riddle - wręcz przeciwnie, chcę pisać dla ludzi, którzy może nie mają czasu ani potrzeby latać za wszelkimi nowinkami, ale mimo wszystko czerpią (albo czerpali i chcą to odzyskać) przyjemność z tworzenia stron i aplikacji.
Na pierwszy wpis z nowej serii zapraszam, 1-szego grudnia - postaram się utrzymać cykl tygodniowy.
Generowanie mapy witryny - prosta, wydawało by się - rzecz. Jednak, kiedy w naszej firmie pojawiło się wolne stanowisko programisty postanowiliśmy właśnie takie zadanie dać kandydatom do zrealizowania, w celu odsiania "programistów" od programistów.
Zadanie okazało się jednak wykraczające poza wszelkie normy i na jakieś 20 osób (na przestrzeni 5 miesięcy) udało się je zrobić 5. Z tego dwie skopiowały (nie do końca działające) rozwiązania z sieci...
Twoje zadanie - mając tabelę (CREATE TABLE `_tree` (`id` INT(11), `parent` INT(11), `sort` INT(11), `nazwa` VARCHAR(255))) napisz skrypt, który wygeneruje mapę witryny w HTML (w dowolnym standardzie). Większość osób zaczyna od napisania prostego zapytania wyciągającego wszystkie wpisy z parent = 0. Nieliczni dodadzą jeszcze sort. Później, jeżeli ktoś już to zrobi przystępuje do zagnieżdżania kolejnych poziomów while() a nam ręce opadają ...
Dlatego, drogi poszukiwaczu odpowiedzi w sieci, poniżej zamieszczam dwa rozwiązania - wykuj się ich na pamięć, przyjdź do nas i pewnie dostaniesz posadkę ...
Rozwiązanie 1 - rekurencja - dużo zapytań do SQL, mało myślenia:
function lev($parent) {
$query = mysql_query('SELECT * FROM `_tree` WHERE `parent` = '.(int)$parent.' ORDER BY `sort` ASC');
if(mysql_num_rows($query)) {
echo '<ul>'."\n";
while($dane = mysql_fetch_array($query, 1)) {
echo '<li>'."\n";
echo $dane['nazwa']."\n";
lev($dane['id']);
echo '</li>'."\n";
}
echo '</ul>'."\n";
}
}
lev(0);
Rozwiązanie 2 - jedno zapytanie, nieco więcej myślenia:
function getData($parent) {
$query = mysql_query('SELECT * FROM `_tree` WHERE `parent` >= '.(int)$parent.' ORDER BY `parent` ASC, `sort` ASC');
$return = array();
while($dane = mysql_fetch_array($query, 1)) {
$return[] = $dane;
}
return $return;
}
function sortData($data, $root = 0, $level = 0) {
static $return = array();
foreach($data as $item) {
if($item['parent'] == $root) {
$item['level'] = $level;
$return[] = $item;
sortData($data, $item['id'], $level+1);
}
}
return $return;
}
foreach(sortData(getData(0)) as $item) {
echo str_repeat(' ', $item['level'] * 5).$item['nazwa'].'<br />';
}
Niech mi ktoś powie, że to jest mega skomplikowane? Dzisiaj pojawił się jeden człowiek, który był po 2 kierunkach na Politechnice Łódzkiej. Po godzinie nic nie zrobił. Drugi - stwierdził, że pracował w Prado (taki framework) - więc zainstalował sobie WAMP na laptopie, zassał Prado i ... po 2 godzinach wyszedł bez "do widzenia".
Wrzucam, bo może komuś się przyda - potrzebowałem generatora nr. dowodu osobistego do testowania aplikacji, która nie dość, że sprawdza poprawność to jeszcze nie pozwala na użycie tego samego numeru więcej niż raz. Kod PHP jest portem kodu Java z blogu Not All About Java.
function generateDO(){
$seria = $numer = "";
$suma=0;
$waga = array(7,3,1,7,3);
for($i=0;$i<3;$i++){
$seria .= chr(rand(0, (ord('Z') - ord('A'))) + ord('A'));
$suma += $waga[$i] * (ord(substr($seria, $i, 1)) - ord('A') + 10);
}
for($i=0;$i<5;$i++){
$numer .= chr(rand(0, ord('9') - ord('0')) + ord('0'));
$suma += $waga[$i] * (ord(substr($numer, $i, 1)) - ord('0'));
}
return $seria . ($suma%10) . $numer;
}
Od paru tygodni w wolnych chwilach klecę coś, czego mi, jako webdeveloperowi, zawsze brakowało. Czy często zdarza się wam dopytywać klienta o to, pod jaką przeglądarką i konfiguracją systemu strona źle się wyświetla? Ile razy dostaliście zrzut ekranu strony w 3 megowym pliku BMP? Ja za dużo ;-)

JakWyglada.pl to strona która w prosty sposób zbierze dla odwiedzającego informacje o jego przeglądarce, systemie operacyjnym, rozdzielczości czy obsłudze różnych technologii. Informacje te mogą następnie zostać przesłane na wskazany adres e-mail poprzez wypełnienie krótkiego formularza.
Dodatkową funkcjonalnością jest dołączenie do tych informacji zrzutu ekranu - można to oczywiście zrobić ręcznie - Prt Scr i dołączamy obrazek ze stroną i wszelkimi widocznymi informacjami do maila, ale można też wykorzystać opcje wbudowaną w aplikacje. Screenshot wykonywany jest przy użyciu appletu Java - niestety, z powodu ograniczeń bezpieczeństwa wymagane jest zaakceptowanie certyfikatu wystawionego imiennie przeze mnie. Gwarantuję, że applet nie robi nic innego niż zapisanie zrzutu ekran(ów*) jako plik %TEMP%\jakwyglada.jpg i wysłanie go do serwera strony wraz z danymi z formularza.
Oczywiście, jak to w Web 2.0 strona jest w wersji Beta - proszę o przesyłanie wszelkich uwag - zarówno co do wyglądu jak i funkcjonowania strony - czy to tu, czy też mailem na btm@anfo.pl.
* testowałem tylko w przypadku konfiguracji "monitor 1 po lewo, monitor 2 po prawo", jeżeli ktoś ma odwrotnie skonfigurowane monitory - o ile to nie duży problem, proszę o przetestowanie i podesłanie informacji, czy screenshot wykonany jest poprawnie. Wiem, że w przypadku takiej właśnie konfiguracji + MacOS "lewy" monitor ma ujemne współrzędne - jakie inne cyrki mogą wystąpić, nie wiem ;-)