Magazyn T3
newsy, felietony, testy i tutoriale



Internet Maker

21/08/2008

Strona WWW w komórce

Więcej artykułów autorstwa »
Napisane przez: Tomasz Galanciak
Tagi:
e5-strona_www_w_komorce.jpg

Tworzenie serwisów internetowych dla urządzeń mobilnych nie różni się znacznie od budowy tradycyjnych stron WWW. Dokumenty serwowane przeglądarce uruchomionej w telefonie komórkowym wciąż są plikami XHTML lub CSS. Mimo to, decydując się na uruchomienie serwisu mobilnego, należy pamiętać o szeregu reguł, których należy przestrzegać.

Prawidłowo wykonanych i popularnych witryn mobilnych w Polsce nie ma zbyt wiele. Podobnie jak i specjalistów w dziedzinie ich tworzenia. Musi się to jednak zmienić, gdyż rynek rozwija się bardzo dynamicznie, a prognozy na najbliższe lata najłatwiej można streścić w zdaniu wypowiedzianym w Polsce przez jednego z założycieli Google, Sergeya Brina: „Przyszłość należy do mobilnego internetu”.

Firmy T-Mobile i Pyramid Research szacują, że
urządzenie mobilne (najczęściej telefon komórkowy)
ma blisko jedna trzecia ludzi na świecie
- co daje ponad 2 miliardów użytkowników.
Stale rozwijane są i powstają nowe technologie,
które umożliwiają coraz szybszy przesył danych
do urządzeń mobilnych (EDGE, UMTS). Bardzo
dynamicznie zmienia się również rynek systemów
operacyjnych, a co za tym idzie – oprogramowania
dostępnego na przenośne urządzenia.

Miniony rok to olbrzymi sukces telefonu
iPhone z wbudowaną przeglądarką internetową
i szeregiem innych aplikacji, korzystających
z sieci. Do walki szykuje się także Google ze swoją
otwartą platformą Android. A nie można przecież
zapominać o obecnych liderach rynku, systemach
Windows Mobile Microsoftu i Symbianie, który
został kupiony przez Nokię i ma wkrótce zostać
otwarty.

Jako webmasterzy wcześniej czy później spotkamy
się z zadaniem stworzenia mobilnej wersji
serwisu internetowego. Dlatego warto już teraz
przyswoić sobie reguły, jakimi trzeba się kierować
w trakcie każdego etapu tworzenia i wiedzieć, na
jakie aspekty trzeba zwrócić szczególną uwagę.
Tym bardziej że nie wymaga to wcale poznawania
nowych technologii czy języków programowania.

Poradnik dewelopera – czyli jak to się robi?

Na szczęście webmaster chcący przygotować mobilną stronę
internetową nie jest pozostawiony samemu sobie. Organizacja
dotMobi (piszemy o niej w osobnej ramce) przygotowała
obszerny poradnik dewelopera, opisujący dokładnie wszelkie
aspekty, jakie musimy mieć na uwadze podczas każdego etapu
tworzenia serwisu. Poradnik dostępny jest bezpłatnie po
zarejestrowaniu się na stronie http://dev.mobi.W chwili pisania tego tekstu dostępna jest pierwsza wersja
poradnika, trwają jednak zaawansowane prace nad drugą
edycją. Dokument przedstawia zalecane rozwiązania techniczne,
bazując m.in. na rekomendacjach W3C (World Wide
Web Consortium). Przybliża także sens
przystosowania serwisu do wymagań
urządzeń mobilnych oraz wymienia liczne
zalety takiej zmiany.

Poradnik dotMobi
(http://dev.mobi) to
obowiązkowa lektura
dewelopera

„Mobilize, don’t miniaturize”

Chcąc poszerzyć liczbę użytkowników naszej
strony internetowej o odbiorców korzystających
z niewielkich urządzeń przenośnych (telefony,
PDA), możemy zdecydować się na dwie różne
opcje: dostosować istniejącą wersję za pomocą
dodatkowego arkusza stylów CSS lub też stworzyć
osobną, dedykowaną witrynę. Obydwa rozwiązania
mają swoje wady i zalety.

Wersja z osobnymi stylami jest o wiele prostsza
do wprowadzenia, ale także znacznie mniej funkcjonalna
i wygodna dla użytkowników. Wdrożenie
sprowadza się do przygotowania alternatywnych
defi nicji stylów dla tagów użytych na stronie oraz
dodania znacznika w sekcji {html}{/html} z odnośnikiem
do osobnego arkusza CSS:

1
<link href=\"wersja_mobilna.css\" rel=\"stylesheet\" type=\"text/css\" media=\"handheld\" />

Nie jest to operacja skomplikowana, można ją
wykonać praktycznie od ręki. Jakie są jednak wady
tego rozwiązania i dlaczego najczęściej zalecana
jest druga opcja, czyli stworzenie osobnej wersji
całego serwisu?

Przede wszystkim w bardzo małym zakresie
uwzględniona została specyfika urządzeń
mobilnych. Strony przeznaczone do odczytu na
niewielkich gabarytowo urządzeniach powinny
charakteryzować się lekkością i umiejętnym
doborem wyświetlanych informacji. Połączenia
z siecią są w większości przypadków rozliczane
na podstawie wygenerowanego transferu, a więc
liczby odebranych i wysłanych danych.
Poprzez dodatkowy arkusz stylów nie zmienimy
przesyłanej wersji XHTML, która zawiera standardowo
informacje przeznaczone dla ekranów
o rozdzielczości 1024×768 pikseli i większych.

Tworząc strony dla urządzeń mobilnych, musimy
więc mieć na uwadze przede wszystkim dwa fakty
- minimalizm przesyłanych danych (aby nie narazić
użytkownika na wysokie koszty połączenia) oraz
dobór i wyświetlenie najważniejszych informacji
(na ekranie o rozdzielczości np. 200×250 pikseli
zmieści się niewiele tekstu).

Stosując dodatkowy arkusz CSS, nie osiągniemy
tych celów. Dlatego o wiele lepszym rozwiązaniem
jest stworzenie osobnej wersji strony, mimo że początkowo
będzie to wymagało większego nakładu pracy.

No to startujemy

Zaprojektowaliśmy zgodnie z zaleceniami
witrynę mobilną, wykonaliśmy ją z dbałością
o standardy, przetestowaliśmy na różnych urządzeń
i opublikowaliśmy pod wybraną domeną
internetową – co nam pozostało? Oczywiście jej
promocja i sprawienie, by zaistniała w świadomości
użytkowników.

Niestety, do mierzenia efektów działań
marketingowych nie wykorzystamy popularnych
systemów statystyk – do śledzenia witryn mobilnych
nie są prawidłowo przystosowane ani Google
Analytics, ani Stat.pl czy inne tego typu aplikacje.

Obecnie pozostaje nam analiza logów serwera
lub też zakup licencji dedykowanych rozwiązań,
przeznaczonych do mierzenia ruchu na witrynach
mobilnych: Mobile Stats (http://mobilestats.co.uk)
albo Mobile Analytics (http://www.amethon.com/Content_Common/pg-Mobile-Analytics.seo).

Obydwa systemy oferują dosyć zbliżoną funkcjonalność,
zapewniając wszelkie potrzebne dane
analityczne: od liczby wizyt, odsłon, po geolokalizacje
czy parametry techniczne użytkowników
(przeglądarki, platformy etc.). Co ciekawe, w przypadku
pierwszego rozwiązania statystyki naszego
mobilnego serwisu sprawdzimy nie inaczej, jak
właśnie poprzez urządzenie mobilne (poprzez
stronę http://mobilestats.mobi).

Jak widać, trudno mieć serwis mobilny,
samemu nie korzystając w ten sposób z sieci. Tak
można najlepiej przekonać się, jakie rozwiązania
sprawdzają się w praktyce.

Wykrywanie urządzenia mobilnego i jego parametrów

Nie wszyscy użytkownicy będą pamiętać adres mobilnej wersji twojego
serwisu. Dlatego bardzo dobrym rozwiązaniem jest ich wykrycie i przekierowanie
na odpowiedni adres. Ważnym aspektem jest również określenie
parametrów urządzenia – szerokości ekranu czy rodzaju używanej przeglądarki.
Pomocne okazują się gotowe bazy danych urządzeń, zawierające
szereg rekordów identyfikujących ich wszelakie parametry.

Największa tego typu baza danych to DeviceAtlas.com, firmowana przez
dotMobi. W zakładce „devices” znajdziemy dokładne charakterystyki
(przykład: http://deviceatlas.com/devices/Nokia/E51) kilku tysięcy modeli.
Poza standardowymi parametrami (takimi jak rozmiar i rozdzielczość ekranu,
system operacyjny) obecne są m.in. informacje o obsługiwanych kodekach
dźwięku i obrazu, maszynie wirtualnej Java czy dostępnych protokołach
sieciowych (GPRS, EDGE, UMTS, HSDPA i inne).

Niestety, baza danych jest bezpłatna jedynie do przeglądania w wersji on-line.
Jeżeli chcemy pobrać ją na dysk, wówczas musimy zakupić jedną z trzech
licencji, w cenie od 99 $ do 299 $ rocznie, w zależności od częstotliwości
aktualizacji. Twórcy DeviceAtlas.com udostępniają również API (Application
Programming Interface), które dostępne jest w językach Java, .NET (w postaci
biblioteki .dll), PHP 5, a wkrótce także w Ruby i Pythonie. Do celów
deweloperskich możemy korzystać z bazy danych i API bezpłatnie.

Jeżeli jednak chcemy tylko wykryć urządzenie mobilne i jego parametry, możemy
skorzystać z darmowego rozwiązania. A to za sprawą open source’owego
projektu WURFL (Wireless Universal Resource File), będącego otwartą
bazą danych w postaci pliku XML, zawierającego informacje o szeregu
urządzeń mobilnych.

Na jego stronie internetowej, działającej pod adresem http://wurfl.sourceforge.net, znajdziemy do pobrania bazę w formacie .xml lub archiwum .zip.
Ponadto udostępniono szereg przykładów użycia dla takich języków i technologii
jak Java, PHP, Perl, Ruby, Python, .NET, C++ czy transformacji XSLT.
W przypadku języka PHP dostępne są dwie gotowe aplikacje przeznaczone
do integracji z bazą WURFL. Pierwsza to zestaw PHP Tools version 2.1 Final,
składający się z 3 głównych plików (konfiguracja, parser i klasa główna).

Drugi to Tera WURFL, bazujący na pierwszym rozwiązaniu, jednak rozszerzający
go o dodatkową funkcjonalność – głównie o korzystanie z bazy danych
MySQL oraz panel administracyjny ułatwiający aktualizację pliku wurfl .xml.
Zalecamy użycie właśnie tej bardziej zaawansowanej biblioteki, która charakteryzuje
się szybszym działaniem, większymi możliwościami, a jednocześnie
równie prostą instalacją.

Wdrożenie Tera WURFL

Aktualne wydanie Tera WURFL oznaczone jest numerkiem 1.5.2 i można je z oficjalnej strony biblioteki:
http://www.tera-wurfl.com.
Rozpakowane pliki kopiujemy do osobnego katalogu na serwerze, a następnie
uruchamiamy w przeglądarce plik {stala}install.php{/stala} z katalogu /admin.
Zostanie wyświetlony instalator, który każe nam skorygować uprawnienia
do katalogów, w których przechowywane będą dane, m.in. plik z bazą urządzeń.

Po podaniu prawidłowych danych logowania do bazy MySQL zostaną
utworzone potrzebne tabele, po czym zostaniemy poproszeni o pobranie
najświeższego pliku wurfl .xml – wystarczy kliknąć w odpowiedni link – dane
mogą pochodzić z pliku lokalnego, z serwera WURFL lub z repozytorium CVS,
gdzie dostępna jest najbardziej aktualna wersja.

Jeśli wszystkie operacje zostaną wykonane poprawnie, kasujemy plik install.
php i przechodzimy w przeglądarce do katalogu /admin. Możemy tutaj m.in.
sprawdzić poprawność instalacji, klikając na opcji „Tera-WURFL test script”.
Kolejnym krokiem jest wykorzystanie biblioteki w skryptach PHP serwisu. Integracja
jest niezwykle prosta – aby sprawdzić, czy odwołanie nastąpiło z przeglądarki
mobilnej, wystarczy wstawić następujące linie w kodzie serwisu:

1
2
3
4
5
6
7
8
9
<?php
require_once(\'tera_wurfl .php\');
$wurfl = new tera_wurfl ();
$matched = $wurfl -> getDeviceCapabilitiesFromAgent ($_SERVER[\"HTTP_USER_AGENT\"]);
if ($matched && $wurfl -> getDeviceCapability (\"is_wireless_device\")) {
  header(\"Location: http://serwis.mobi\");
  exit;
}
?>

W pierwszej linijce kodu ładujemy plik z klasą, a następnie tworzymy jej instancję
i przypisujemy do zmiennej {stala}$wurfl{/stala} . Kolejnym krokiem jest wywołanie
metody pobierającej właściwości urządzenia z podanego parametru „User
Agent”, który w tym wypadku przyjmuje wartość wysłaną przez przeglądarkę
użytkownika. Jeżeli urządzenie zostało znalezione w bazie ({stala}$matched{/stala} jest
równe true) oraz parametr „is_wireless_device” jest prawdziwy – przekierowujemy
użytkownika za pomocą funkcji {stala}header(){/stala} na wersję mobilną serwisu.

Kluczową metodą, która ma bardzo wiele zastosowań, jest {stala}getDeviceCapability(){/stala}.
Jako argument podajemy parametr urządzenia, który chcemy sprawdzić.
Ich obszerna lista przedstawiona jest na stronach WURFL pod adresem:
http://wurfl.sourceforge.net/help_doc.php#product_info. Lista najczęściej
wykorzystywanych została zamieszczona w tabeli:

Internetowe serwisy mobilne w Polsce

Mobilne strony internetowe nie są jeszcze w Polsce
popularne, zarówno wśród użytkowników, jak
i wśród webmasterów. Największe serwisy powoli
dostrzegają jednak potencjał drzemiący w usługach
mobilnych, o czym świadczą m.in. przenośne
wersje polskich portali: Onetu (http://lajt.onet.pl),
Wirtualnej Polski (http://mini.wp.pl), Interii (http://mobinteria.pl) oraz Gazety (http://gazeta.mobi).
Na tym rynku aktywne są zwłaszcza porównywarki
cen, co nie dziwi, gdyż akurat sprawdzenie
wielu ofert np. przez komórkę może być bardzo
przydatne podczas zakupów. Aby zapoznać się
z ich serwisami mobilnymi, odwiedź porównywarki
Ceneo (http://mceneo.pl), Radar (http://m.radar.pl) oraz Nokaut.pl (http://m.nokaut.pl).

Na uwagę zasługuje zwłaszcza rozwiązanie wprowadzone
przez Nokaut.pl, gdzie poza nazwą poszukiwanego produktu możemy podać naszą obecną
lokalizację, dzięki czemu odnajdziemy najtańszą ofertę w okolicy.
Swoje wizytówki mobilne posiadają także niektóre miasta, m.in. Kraków (http://mobi.krakow.pl) oraz
Wrocław (http://mobi.wroclaw.pl). Na uwagę zasługują również serwisy PLL „Lot” (mobile.lot.com) oraz
mapa Polski Targeo (http://www.targeo.mobi).

Jak widać, spory problem stanowi brak jakiejkolwiek standaryzacji, jeżeli chodzi o nazewnictwo
domen. Jedynie dwa z wymienionych serwisów korzystają z dedykowanych adresów .mobi. Pozostałe
zdecydowały się na różnego rodzaju subdomeny, przez co internautom trudniej zapamiętać ich nazwę.

Architektura informacji

Zanim przystąpimy do kodowania, koniecznie
należy spędzić trochę czasu na planowaniu
i przygotowywaniu odpowiedniej architektury oraz
struktury serwisu mobilnego. Dostępna powierzchnia
(ekran urządzania przenośnego) jest niewielka,
dlatego musimy ją wykorzystać jak najbardziej
efektywnie.

Obowiązują tutaj nieco inne zasady, aniżeli
przy tradycyjnych serwisach internetowych.
Podstawową rolę odgrywa prostota i łatwość
w nawigowaniu. Odrzućmy skomplikowane menu
i ścieżki dostępu do danych. Zaleca się, aby główna
nawigacja nie składała się z więcej niż pięciu
działów, a liczba odnośników na jednej podstronie
nie przekraczała dziesięciu.

Niezwykle istotny jest dobór informacji. Nie
każdy materiał musimy przedstawić w wersji
mobilnej. Zamiast tego oferujmy i promujmy to,
co przez użytkowników jest najbardziej pożądane.
Możemy to jasno określić za pomocą prostych
statystyk, opierających się na liczniku czytań
poszczególnych tekstów. Unikajmy także „pustych”
stron, czyli takich, które nie niosą za sobą żadnych
informacji, a tylko linkują do kolejnych podstron.
Przykładowo tworząc sekcję „artykuły”, przedstawmy
w niej 2.3 teksty, a nie tylko odnośniki do
kolejnych działów, jak np. „sport” czy „polityka”.

Przy pracach nad designem bardzo ważnym
aspektem jest dobór szerokości i wysokości strony.
Poradnik dotMobi mówi o optymalnym maksymalnym
rozmiarze 200×250 pikseli, który stanowi
kompromis wśród dostępnych na rynku urządzeń.
Być może nowym standardem stanie się wkrótce
240×320 pikseli – według analiz przeprowadzonych
na rynku brytyjskim, obecnie taki rozmiar
strony prawidłowo wyświetli blisko 82% urządzeń.
Na razie jednak, zwłaszcza na polskim podwórku,
lepszym wyjściem wydaje się stosowanie się do
zalecenia dotMobi.

Szerokość strony zazwyczaj jest stała, nieco
więcej problemu może natomiast sprawić znaczne
przekroczenie zalecanej maksymalnej wysokości.
Dotyczy to zwłaszcza dłuższych artykułów, które
dodatkowo mogą zawierać np. komentarze.
Rozwiązaniem jest rozbicie obszernych tekstów
na kilka podstron, tak aby dalszy ciąg artykułu był
dostępny po kliknięciu w odnośnik zawierający np.
słowo „czytaj dalej” czy też numer strony.

Z kolei według autorów poradnika optymalna
struktura strony powinna składać się z nagłówka,
nawigacji (górna oraz dolna), miejsca na treść oraz
stopki. Obecność dodatkowej dolnej belki nawigacyjnej
ma sens, ponieważ operacja przewijania
strony na telefonach komórkowych (zwłaszcza bez
ekranu dotykowego) nie jest taka łatwa jak w przypadku
standardowych witryn. Dzięki umiejscowieniu
nawigacji u dołu strony, użytkownik może
szybko przejść do dalszej części serwisu. Dolna
belka powinna zawierać m.in. odnośnik do strony
głównej i/lub przejście poziom wyżej.

10 najczęściej popełnianych
błędów przy stronach mobilnych

W serwisie MobiThinking ukazał się ciekawy artykuł, przedstawiający 10 najczęściej popełnianych błędów
w serwisach mobilnych (http://mobithinking.com/tenmistakes). Warto je poznać i pamiętać o ich
unikaniu na każdym etapie tworzenia własnych serwisów:

  1. Traktowanie użytkowników mobilnych tak jak użytkowników komputerów mobilnych. Co przekłada
    się na dużą ilość tekstu, duże pliki graficzne, skomplikowaną nawigację i powolne działanie witryny.
  2. Ignorowanie ograniczeń urządzeń mobilnych, takich jak niewielki ekran, brak myszki, niewygodna
    klawiatura i powiązanie transferu danych z ponoszonymi kosztami.
  3. Ignorowanie zalet urządzeń mobilnych, czyli: możliwość prowadzenia rozmów głosowych, wbudowany
    aparat fotografi czny i kamera wideo, możliwość wysyłania SMS-ów, zintegrowany nadajnik
    GPS oraz odtwarzacz multimedialny, a także łatwość realizacji mikropłatności.
  4. Używanie domeny .com, zamiast dedykowanej domeny .mobi.
  5. Stosowanie ramek w kodzie strony.
  6. Brak przeprowadzonych wcześniej testów na różnych urządzeniach
  7. „Ukrywanie” witryny przez stosowanie trudnej do odgadnięcia domeny i brak obecności w wyszukiwarkach.
  8. Brak promocji wersji mobilnej serwisu.
  9. Prowadzenie kampanii promocyjnych na rynku mobilnym nieprowadzących do swojej strony w wersji
    mobilnej.
  10. Oferowanie takiej samej zawartości serwisu dla wszystkich typów urządzeń i niewykorzystywanie
    zalet baz typu DeviceAtlas czy WURFL.

Zalecenia techniczne

Serwisy mobilne nie powinny generować
zbyt wiele transferu. Standardowo uznaje się, że
jedna podstrona nie powinna przekraczać 10KB,
a w szczególnych wypadkach (np. dłuższy artykuł)
- 25KB. Ważne w kontekście ograniczenia pobieranych
przez użytkownika danych jest wykorzystanie
lokalnego cache. Aby umożliwić jego stosowanie,
warto dodać znacznik:

1
<meta http-equiv=\"Cache-Control\" content=\"max-age=300\" />

lub też skorzystać z funkcji PHP:

1
header (\'Cache-Control:max-age=300\');.

Powinniśmy wystrzegać się kodu Java-
Script, jeśli nie jest on konieczny, podobnie jak
i obiektów osadzanych (np. materiałów wideo)
czy animacji Flash. Ważne, aby unikać stron
przekierowujących (zamiast tego lepiej skorzystać
z nagłówków 3xx) oraz automatycznego odświeżania
witryny (meta refresh).

Niemile widziane jest także otwieranie przez
witrynę nowych okien. Nie jest to zbyt wygodne
dla użytkownika, dlatego też część przeglądarek
nie obsługuje takiego rozwiązania, a inne
stosują mechanizmy blokujące wszelkiego rodzaju
pop-upy.

Ważne jest używanie odpowiednich znaczników,
oddających strukturę strony – tj. nagłówków
(h1-h6), akapitów czy list oraz definicji. Każda podstrona
powinna obowiązkowo posiadać swój tytuł
- zalecany schemat zawartości znacznika {html}{/html}<br /> wygląda następująco: </p> <div class="wp_syntax"> <table> <tr> <td class="line_numbers"> <pre>1 </pre> </td> <td class="code"> <pre class="html" style="font-family:monospace;"><title>Opis podstrony | Nazwa strony</title></pre> </td> </tr> </table> </div> <p> Powinno unikać się tworzenia tabel, gdyż na<br /> większości ekranów będą one źle wyświetlane.<br /> Jeszcze gorszym pomysłem jest opieranie layoutu<br /> strony na tabelach. </p> <p>Istotnym zaleceniem jest używanie klawiszy<br /> dostępu przy odnośnikach. Urządzenia mobilne<br /> w większości przypadków wyposażone są w klawiatury<br /> numeryczne, tak więc użycie parametru<br /> „accesskey” pozwoli na znaczne przyspieszenie<br /> nawigacji pomiędzy podstronami. Przykładowy<br /> link może wyglądać następująco: </p> <div class="wp_syntax"> <table> <tr> <td class="line_numbers"> <pre>1 </pre> </td> <td class="code"> <pre class="html" style="font-family:monospace;"><a href=\"aktualnosci.html\" accesskey=\"1\">Aktualności</a></pre> </td> </tr> </table> </div> <p>Tworząc odnośniki, pamiętajmy też, aby ich opis<br /> (tzw. anchor text) jasno dawał do zrozumienia,<br /> dokąd prowadzi. W przypadku menu i większej<br /> liczby linków zalecane jest wykorzystanie list<br /> numerowanych:</p> <div class="wp_syntax"> <table> <tr> <td class="line_numbers"> <pre>1 2 3 4 5 6 </pre> </td> <td class="code"> <pre class="html" style="font-family:monospace;"><ol> <li><a href=\"aktualnosci.html\"accesskey=\"1\">Aktualności</a><li> <li><a href=\"produkty.html\"accesskey=\"2\">Produkty</a></li> <li><a href=\"kontakt.html\"accesskey=\"3\">Kontakt</a></li> <li><a href=\"onas.html\"accesskey=\"4\">O nas</a></li> </ol></pre> </td> </tr> </table> </div> <p>Warto również stosować odnośniki do numerów<br /> telefonów. W tym celu stosowany jest przedrostek<br /> „tel:”: </p> <div class="wp_syntax"> <table> <tr> <td class="line_numbers"> <pre>1 </pre> </td> <td class="code"> <pre class="html" style="font-family:monospace;"><a href=\"tel:+48400123123\">+48 400 123 123</a>.</pre> </td> </tr> </table> </div> <p>Kolejny ważny aspekt mobilnego serwisu<br /> stanowią zdjęcia. Oczywiste jest, że musimy je<br /> pomniejszać do takiego rozmiaru, który nie wygeneruje<br /> dużego transferu, a także zmieści się na ekranie użytkownika. Twórcy poradnika dotMobi<br /> nie zalecają umieszczania obrazków szerszych<br /> niż 120 pikseli. Zwracają też uwagę na to, że nie<br /> wszystkie pliki grafi czne po takim pomniejszeniu<br /> będą czytelne. Interesującym rozwiązaniem wydaje<br /> się być pobieranie zastosowanej szerokości ekranu<br /> w urządzeniu użytkownika i dynamiczne zmniejszanie<br /> zdjęcia do optymalnego rozmiaru.</p> <p> Pamiętajmy także o konieczności użycia<br /> parametru „alt” opisującego, co jest na obrazku.<br /> Warto również podać jego szerokość (width) oraz<br /> wysokość (height), dzięki czemu przeglądarka<br /> będzie szybciej renderowała stronę.</p> <p>Swoją specyfi kę na witrynach mobilnych mają<br /> także wszelkiego rodzaju formularze, tak często<br /> wykorzystywane w serwisach internetowych. </p> <p>Ze<br /> względu na mało wygodne wprowadzanie tekstu<br /> w telefonach komórkowych czy palmtopach,<br /> powinniśmy ograniczać liczbę pól w formularzach,<br /> sprawiając, aby były one możliwie krótkie.<br /> Użytkownicy z pewnością docenią także użycie<br /> dodatkowego parametru css „wap-input-format”,<br /> określającego rodzaj wprowadzanych danych<br /> w konkretnym polu.</p> <p>Przykładowo, pole tekstowe z możliwością<br /> wprowadzenia jedynie liczb powinno wyglądać<br /> następująco:</p> <div class="wp_syntax"> <table> <tr> <td class="line_numbers"> <pre>1 </pre> </td> <td class="code"> <pre class="html" style="font-family:monospace;"><input type=\"text\" style=\' -wap-inputformat:\"*N\"\' /></pre> </td> </tr> </table> </div> <p>Wymuszenie podania jedynie znaków alfabetu,<br /> z czego pierwsza litera powinna być duża, osiągniemy<br /> dzięki wstawieniu kodu: </p> <div class="wp_syntax"> <table> <tr> <td class="line_numbers"> <pre>1 </pre> </td> <td class="code"> <pre class="html" style="font-family:monospace;"><input type=\"text\" style=\' -wap-inputformat: \"A*a\"\' /></pre> </td> </tr> </table> </div> <p>Zastosowanie tego rozwiązania automatycznie</p> <p>przedstawi klawiaturę użytkownika w odpowiedni<br /> tryb pracy – warto więc o tym pamiętać i wdrażać<br /> we wszelkiego typu formularzach. </p> <h3>Testowanie witryn mobilnych<br /> </h3> <p>Podczas tworzenia witryny dobrze jest móc<br /> na bieżąco śledzić efekty naszej pracy. Jednym<br /> ze sposobów jest oczywiście przeglądanie strony<br /> w urządzeniu przenośnym, które posiada nieograniczony<br /> dostęp do sieci, np. poprzez WiFi. Nie jest<br /> to jednak najwygodniejsze wyjście. O wiele prostszym<br /> rozwiązaniem jest użycie… ramki. Wystarczy<br /> utworzyć dokument html z zawartością: </p> <div class="wp_syntax"> <table> <tr> <td class="line_numbers"> <pre>1 </pre> </td> <td class="code"> <pre class="html" style="font-family:monospace;"><iframe src =\"mobile/index.html\" width=\"240\" height=\"320\" style=\"border:1px solid;\"></iframe></pre> </td> </tr> </table> </div> <p>W pliku zmieniamy oczywiście parametr „src”,<br /> podając w nim ścieżkę do wersji mobilnej, a następnie<br /> otwieramy go w dowolnej przeglądarce<br /> internetowej – obojętnie, czy będzie to Internet<br /> Explorer, Firefox, Opera czy jeszcze inna aplikacja. </p> <p>O ile taki sposób wystarcza w zupełności do<br /> monitorowania efektów codziennych prac, o tyle<br /> przed oficjalnym opublikowaniem witryny mobilnej<br /> należy poczynić dodatkowe kroki, mające na celu<br /> sprawdzenie poprawności wyświetlania w różnych<br /> urządzeniach i przeglądarkach. Ze względu na<br /> mnogość możliwych konfiguracji użytkowników<br /> (wiele przeglądarek, platform oraz urządzeń różniących<br /> się rozmiarem ekranu, rozdzielczością czy<br /> głębią kolorów) jest to operacja niezwykle istotna.</p> <p>Bardzo przydatny okazuje się zaawansowany<br /> walidator, dostępny do użycia bezpłatnie na stronie<br /> <a href="http://ready.mobi" onclick="javascript:_gaq.push(['_trackEvent','outbound-article','http://ready.mobi']);" rel="nofollow" target="_blank" >http://ready.mobi</a>. Udostępniane przez dotMobi<br /> narzędzie bazuje na szeregu testów, określonych<br /> przez W3C (<a href="http://www.w3.org/TR/mobileOKbasic10-tests" onclick="javascript:_gaq.push(['_trackEvent','outbound-article','http://www.w3.org']);" rel="nofollow" target="_blank" >http://www.w3.org/TR/mobileOKbasic10-tests</a>). </p> <p> Sprawdza – poza zgodnością ze<br /> standardami – takie parametry jak rozmiar witryny,<br /> czas i koszt jej pobrania, wymiary obrazków,<br /> zastosowanie parametru accesskey w odnośnikach,<br /> parametry cache’owania czy obecność ramek. Po<br /> podaniu adresu naszej strony wykonywanych jest<br /> łącznie 27 testów, pozwalających wyłapać popełnione<br /> przy projektowaniu i programowaniu błędy. </p> <p> Co ważne, ready.mobi udostępnia również<br /> emulator telefonów pięciu producentów (Nokia<br /> N70, Samsung z105, SE k750i, Motorola v3i, Sharp<br /> GX-10), dzięki któremu możemy sprawdzić, jak wygląda<br /> na nich testowana strona internetowa. Podobnych<br /> emulatorów różnych urządzeń mobilnych<br /> (a raczej przeglądarek na nich zainstalowanych)<br /> jest w sieci sporo. Ponadto warto zwrócić uwagę<br /> na rozwiązanie udostępniane przez Operę pod<br /> adresem <a href="http://www.operamini.com/demo" onclick="javascript:_gaq.push(['_trackEvent','outbound-article','http://www.operamini.com']);" rel="nofollow" target="_blank" >http://www.operamini.com/demo</a>, gdzie<br /> sprawdzimy, jak zachowuje się witryna renderowana<br /> przez norweski produkt, z którego korzysta już<br /> blisko 50 milionów użytkowników. </p> <h3>Wybieramy domenę<br /> </h3> <p>Jedną z pierwszych decyzji przy tworzeniu<br /> strony jest określenie, pod jakim adresem będzie<br /> ona dostępna. Nie inaczej jest w przypadku wersji<br /> mobilnej witryny. Jeśli decydujemy się na jej stworzenie<br /> w postaci osobnej strony, należy również<br /> zadbać o jej unikalny URL. </p> <p>W praktyce spotyka się trzy warianty: osobna<br /> subdomena (np. mobile.serwis.pl czy m.serwis.<br /> pl), katalog (serwis.pl/mobile) lub specjalna<br /> domena .mobi (serwis.mobi). W Polsce najczęściej<br /> stosuje się rozwiązanie z subdomeną. Czynią tak<br /> największe portale (lajt.onet.pl czy mini.wp.pl),<br /> choć nie wydaje się to najlepszym wyjściem, gdyż<br /> przeszkadza tutaj brak standaryzacji – użytkownik<br /> musi pamiętać, jaki serwis jakiej subdomeny<br /> wybrał (lajt.? mobile.? mini.? a może m.?).</p> <p> Organizacja dotMobi zaleca stosowanie<br /> osobnych domen .mobi. Wydaje się to najbardziej<br /> rozsądnym wyjściem, nawet pomimo tego, że<br /> ten rodzaj domeny powstał dzięki lobbingowi<br /> fi rm wspierających dotMobi. W Polsce z tego<br /> rozwiązania skorzystał między innymi portal<br /> Gazeta.pl, który w wersji mobilnej dostępny jest<br /> pod adresem Gazeta.mobi. Wadą takiej opcji jest<br /> konieczność zakupu nowej domeny – na szczęście<br /> nie jest to duży wydatek. U większości polskich<br /> rejestratorów koszt zakupu domeny .mobi wynosi<br /> 200 zł netto rocznie, jednakże możemy skorzystać<br /> z rejestratorów zagranicznych, gdzie cena jest<br /> kilkukrotnie niższa. Przykładowo w GoDaddy.<br /> com zapłacimy około 8 $, co przy obecnym kursie<br /> złotego daje ok. 20 zł.</p> <p>Musimy również pamiętać o tym, że uruchomienie<br /> serwisu w domenie .mobi obliguje nas (takie są<br /> zasady rejestracji) do kilku działań. Strona pod tym<br /> adresem nie może używać ramek, musi serwować<br /> strony w języku XHTML, a także standardowo<br /> stworzona powinna być subdomena www. (tak, aby działały adresy {stala}http://serwis.mobi{/stala} oraz {stala}http://www.serwis.mobi{/stala}). Nie są to wymagania trudne<br /> do spełnienia, ale musimy je mieć na uwadze.</p> <p>Pamiętajmy o tym, aby poinformować użytkowników<br /> o wersji mobilnej i domenie, w której<br /> jest ona uruchomiona. Dobrą praktyką jest także<br /> użycie skryptu, który w momencie wejścia na<br /> „normalną” witrynę wykryje, iż nastąpiło ono<br /> z przenośnego urządzenia, po czym wykona<br /> stosowne przekierowanie na wersję mobilną. </p> <p> W osobnej części artykułu omówiony został<br /> sposób, jak to wykonać, wraz z przykładowym<br /> kodem w języku PHP.</p> <h3>Stosuj standardy</p> </h3> <p>Nie bez powodu posiadanie domeny .mobi<br /> obliguje nas do użycia XHTML. Tworząc witryny dla<br /> urządzeń mobilnych, koniecznie musimy bowiem<br /> przestrzegać standardów stworzonych przez W3C.<br /> Jest to w interesie zarówno twórców, jak i wszystkich<br /> użytkowników. </p> <p>Charakterystyczne dla rynku mobilnego<br /> jest duże zróżnicowanie dostępnych na rynku<br /> urządzeń. Telefony komórkowe, palmtopy i inne<br /> urządzenia różnią się między sobą przekątnymi<br /> ekranu, obsługiwanymi rozdzielczościami,<br /> a także systemami operacyjnymi i co za tym idzie<br /> - aplikacjami, z których kluczowa dla webmasterów<br /> jest oczywiście przeglądarka internetowa.<br /> Istnieje szereg programów tego typu, m.in.<br /> mobilna wersja Internet Explorer, Safari, Opera<br /> Mini czy dedykowana przeglądarka dla systemów<br /> Symbian. Do walki o ten rynek przystąpi wkrótce<br /> także mobilna wersja Firefoksa. Przy takiej mnogości<br /> rozwiązań przestrzeganie standardów jest<br /> niezwykle ważne, gdyż stanowi jedyny sposób<br /> na zapewnienie dobrego działania witryny na<br /> wszystkich platformach.</p> <p>Każdy poprawnie zbudowany dokument<br /> XHTML powinien posiadać znacznik DOCTYPE,<br /> który deklaruje wybrany język znaczników. W przypadku<br /> witryn mobilnych możemy stosować dwie<br /> odmiany XHTML: Basic oraz Mobile. W tym pierwszym<br /> przypadku prawidłowa sekcja otwierająca<br /> plik wygląda następująco: </p> <div class="wp_syntax"> <table> <tr> <td class="line_numbers"> <pre>1 </pre> </td> <td class="code"> <pre class="html" style="font-family:monospace;"><!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML Basic 1.1//EN\" \"http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd\"></pre> </td> </tr> </table> </div> <p>W drugiej wersji mamy do czynienia z tzw.<br /> XHTML-MP (Extensible Hypertext Markup Language<br /> - Mobile Profi le), będącym specjalistycznym rozszerzeniem<br /> XHTML Basic, włączającym kilka użytecznych<br /> funkcji dla urządzeń mobilnych. Jeśli chcemy<br /> z nich skorzystać, dokument otwieramy sekcją:</p> <div class="wp_syntax"> <table> <tr> <td class="line_numbers"> <pre>1 </pre> </td> <td class="code"> <pre class="html" style="font-family:monospace;"><!DOCTYPE html PUBLIC \"-//WAPFORUM//DTD XHTML Mobile 1.0//EN\" \"http://www.wapforum.org/DTD/xhtml-mobile10.dtd\"></pre> </td> </tr> </table> </div> <p>Tworząc kod XHTML, możemy korzystać<br /> z większości podstawowych znaczników. Dlatego<br /> każdy webmaster znający XHTML poradzi sobie ze<br /> stworzeniem poprawnej strony bez najmniejszych<br /> problemów. Do definiowania wyglądu strony wykorzystuje<br /> się oczywiście style CSS, chociaż należy<br /> pamiętać, aby nie korzystać ze zbyt wyszukanych<br /> i zaawansowanych opcji – których przeglądarki<br /> mobilne często po prostu nie obsługują. </p> <p>Strony mogą być wysyłane przez dowolny serwer<br /> HTTP (np. Apache), zalecane jest jednak, aby<br /> korzystać z konkretnego typu MIME, którym jest<br /> {html}’application/xhtml+xml’{/html}. Kolejną zalecaną opcją<br /> jest kodowanie znaków w formacie UTF-8. Niezależnie<br /> jednak, czy wybierzemy Unikod, czy też np. </p> <p> ISO-8859-2, musimy pamiętać o poinformowaniu<br /> o tym przeglądarki. Najlepiej za pomocą znacznika<br /> XML:</p> <div class="wp_syntax"> <table> <tr> <td class="line_numbers"> <pre>1 </pre> </td> <td class="code"> <pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;"><?xml</span> <span style="color: #000066;">version</span>=\<span style="color: #ff0000;">"1.0\"</span> <span style="color: #000066;">encoding</span>=\<span style="color: #ff0000;">"UTF-8\"</span> <span style="color: #000000; font-weight: bold;">?></span></span></pre> </td> </tr> </table> </div> <p>oraz nagłówka HTTP, który w PHP możemy<br /> wysłać za pomocą funkcji: </p> <div class="wp_syntax"> <table> <tr> <td class="line_numbers"> <pre>1 </pre> </td> <td class="code"> <pre class="php" style="font-family:monospace;"><span style="color: #990000;">header</span><span style="color: #009900;">(</span>\<span style="color: #0000ff;">'Content-Type:application/xhtml+xml;charset=UTF-8\');</span></pre> </td> </tr> </table> </div> <p><b>Może Cię zainteresować:</b></p><ol> <li><a href='http://magazynt3.pl/Delirium-pierwsza-polska-MMOG-dostepna-komorce/' rel='bookmark' title='Delirium – pierwsza polska MMOG – dostępna komórce'>Delirium – pierwsza polska MMOG – dostępna komórce</a></li> <li><a href='http://magazynt3.pl/Zumi-na-kazdej-komorce/' rel='bookmark' title='Zumi na każdej komórce'>Zumi na każdej komórce</a></li> <li><a href='http://magazynt3.pl/netvibes-nowoczesna-strona-startowa/' rel='bookmark' title='Netvibes: nowoczesna strona startowa'>Netvibes: nowoczesna strona startowa</a></li> </ol> </div> <br class="clearer" /><br /> <div class="authorbox-wrapper"> <div class="authorbox"> <h2 class="gentesque">O autorze</h2> <div class="author-image"> <img alt='' src='http://0.gravatar.com/avatar/4ac5a0127beb66769216f7df8f4b0286?s=80&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D80&r=G' class='avatar avatar-80 photo' height='80' width='80' /> </div> <div class="author-title adelle">Tomasz Galanciak</div> <br class="clearer" /> <ul class="connect"> <li class="facebook"><a class="tooltip" title="Facebook" href='http://www.facebook.com/tomasz.galanciak'> </a></li> </ul> <div class="more-articles"> Więcej artykułów autorstwa <a href="http://magazynt3.pl/author/tomek/" title="Wpisy, których autorem jest Tomasz Galanciak" rel="author">Tomasz Galanciak</a> » </div> <br class="clearer" /> </div> </div> <br class="clearer" /> <div class="comments-button tooltip" title="Zobacz komentarze"> <a href="http://magazynt3.pl/Strona-WWW-w-komorce/#respond" title="Skomentuj „Strona WWW w komórce”">0 komentarzy »</a> </div> <br class="clearer" /> </div> </div> </div> <div class="right-panel sidebar"> <div class="inner"> <div class="widget"><div class="header-left"> </div><div class="header-middle"><h2 class="gentesque">Nowy numer</h2></div><div class="header-right"> </div><br class="clearer" /><div class="content-wrapper"><div class="content"> <div class="textwidget"><p><a href="http://ulubionykiosk.pl/wydawnictwo/17-t3" onclick="javascript:_gaq.push(['_trackEvent','outbound-widget','http://ulubionykiosk.pl']);" target="_blank"><img src="http://ulubionykiosk.pl/i/dz00MDA=/c1d5ec77/1725-okladka.jpg" width="240" /></a></p> <p>Muzyka jest jedną z moich największych pasji – nic więc dziwnego, że z dużą radością oddaję ten numer w ręce czytelników. W nim bowiem wiodącym tematem jest właśnie muzyka: czego słuchamy, na jakim sprzęcie, jak zmieniała się jej promocja na przestrzeni lat oraz jak ją… kradniemy. W związku z powolnym acz sukcesywnym zbliżaniem się lata, przedstawiamy również 30 kroków jak być w nienagannej formie, gdy już prawdziwie upalne dni zawitają do Polski. Nie zapominamy jednocześnie o gadżetach: testujemy m.in. nowy, topowy smartfon od HTC: One X oraz budżetowe laptopy – by niedrogim kosztem nie rozstawać się z elektroniką również na urlopie.</p> </div> </div></div></div><div class="widget"><div class="header-left"> </div><div class="header-middle"><h2 class="gentesque">Partnerzy</h2></div><div class="header-right"> </div><br class="clearer" /><div class="content-wrapper"><div class="content"> <div class="textwidget"><p><a href="http://imagazine.pl/" onclick="javascript:_gaq.push(['_trackEvent','outbound-widget','http://imagazine.pl']);" target="_blank"><img src="http://magazynt3.pl/imagazine-logo.jpg" width="240"></a></p> <p><br></p> <p><a href="http://facetikuchnia.com.pl/" onclick="javascript:_gaq.push(['_trackEvent','outbound-widget','http://facetikuchnia.com.pl']);" target="_blank"><img src="http://magazynt3.pl/banfik.jpg" width="240"></a></p> </div> </div></div></div> </div> </div> <br class="clearer" /> </div> <div id="comments"> <div class="left-panel"> <div class="inner"> <div class="comments-header"> <div class="ribbon left"> <div class="ribbon-inner"> <h3 class="gentesque">0 komentarzy</h3> </div> </div> </div> <br /> <h3 class="gentesque be-the-first">Skomentuj pierwszy!</h3> <br /> <div id="respond"> <h3 id="reply-title">Zostaw odpowiedź <small><a rel="nofollow" id="cancel-comment-reply-link" href="/Strona-WWW-w-komorce/#respond" style="display:none;">Anuluj pisanie odpowiedzi</a></small></h3> <form action="http://magazynt3.pl/wp-comments-post.php" method="post" id="commentform"> <p class="comment-notes">Twój adres nie zostanie opublikowany. Wymagane pola są oznaczone <span class="required">*</span></p> <p class="comment-form-author"><label for="author">Imię</label> <span class="required">*</span><input id="author" name="author" type="text" value="" size="30" aria-required='true' /></p> <p class="comment-form-email"><label for="email">E-mail</label> <span class="required">*</span><input id="email" name="email" type="text" value="" size="30" aria-required='true' /></p> <p class="comment-form-url"><label for="url">WWW</label><input id="url" name="url" type="text" value="" size="30" /></p> <p class="comment-form-comment"><label for="comment">Komentarz</label><textarea id="comment" name="comment" cols="45" rows="8" aria-required="true"></textarea></p> <p class="form-allowed-tags">Możesz używać tych tagów i atrybutów <abbr title="HyperText Markup Language">HTML</abbr>: <code><a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight=""> </code></p> <p class="form-submit"> <input name="submit" type="submit" id="submit" value="Opublikuj" /> <input type='hidden' name='comment_post_ID' value='14126' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </p> <p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="e6bfc44a6c" /></p><noscript><strong><u><font color="red" size="5">By dodać komentarz, włącz JavaScript w swojej przeglądarce.</font></u></strong></noscript> </form> </div><!-- #respond --> <script type="text/javascript"> jQuery(document).ready(function() { jQuery('#commentform').submit(function() { _gaq.push( ['_setAccount','UA-874262-54'], ['_trackEvent','comment'] ); }); }); </script> </div> </div> <div class="right-panel sidebar"> <div class="inner"> <!-- don't show anything by default --> </div> </div> <br class="clearer" /> </div> <input type="hidden" name="dM5L5IYwG14R" id="dM5L5IYwG14R" /> <script type="text/javascript"> function f4SJ5fRcCXnBd() { var o=document.getElementById("dM5L5IYwG14R"); o.value="gzDpmUB2g6x2"; } var bRalCRZNDcp6i = document.getElementById("submit"); if (bRalCRZNDcp6i) { var ckXU34xZ80aSk = document.getElementById("dM5L5IYwG14R"); var pTsP4TS2hXwiZ = bRalCRZNDcp6i.parentNode; pTsP4TS2hXwiZ.appendChild(ckXU34xZ80aSk, bRalCRZNDcp6i); addHandler(bRalCRZNDcp6i, "mousedown", f4SJ5fRcCXnBd); addHandler(bRalCRZNDcp6i, "keypress", f4SJ5fRcCXnBd); } </script> <div id="footer-wrapper"> <div class="top"> </div> <div id="footer"> <div class="inner"> <div class="left"> <div class="widget"><h2 class="gentesque">Tagi</h2><div class="line"> </div><div class="tagcloud"><a href='http://magazynt3.pl/tag/acer/' class='tag-link-37' title='53 tematy' style='font-size: 10.5344827586pt;'>Acer</a> <a href='http://magazynt3.pl/tag/android/' class='tag-link-48' title='38 tematów' style='font-size: 8.84482758621pt;'>android</a> <a href='http://magazynt3.pl/tag/aplikacje-internetowe/' class='tag-link-1298' title='38 tematów' style='font-size: 8.84482758621pt;'>Aplikacje internetowe</a> <a href='http://magazynt3.pl/tag/apple/' class='tag-link-53' title='113 tematów' style='font-size: 14.5172413793pt;'>Apple</a> <a href='http://magazynt3.pl/tag/asus/' class='tag-link-58' title='38 tematów' style='font-size: 8.84482758621pt;'>Asus</a> <a href='http://magazynt3.pl/tag/badania-internetowe/' class='tag-link-1381' title='83 tematy' style='font-size: 12.8275862069pt;'>Badania internetowe</a> <a href='http://magazynt3.pl/tag/bazy-danych/' class='tag-link-1011' title='43 tematy' style='font-size: 9.44827586207pt;'>Bazy danych</a> <a href='http://magazynt3.pl/tag/bezpieczenstwo-w-sieci/' class='tag-link-1022' title='259 tematów' style='font-size: 18.7413793103pt;'>Bezpieczeństwo w sieci</a> <a href='http://magazynt3.pl/tag/blog/' class='tag-link-1127' title='43 tematy' style='font-size: 9.44827586207pt;'>Blog</a> <a href='http://magazynt3.pl/tag/blogi/' class='tag-link-1006' title='45 tematów' style='font-size: 9.68965517241pt;'>Blogi</a> <a href='http://magazynt3.pl/tag/css/' class='tag-link-1118' title='59 tematów' style='font-size: 11.1379310345pt;'>CSS</a> <a href='http://magazynt3.pl/tag/ebiznes/' class='tag-link-1023' title='282 tematy' style='font-size: 19.224137931pt;'>e-Biznes</a> <a href='http://magazynt3.pl/tag/facebook/' class='tag-link-131' title='90 tematów' style='font-size: 13.3103448276pt;'>facebook</a> <a href='http://magazynt3.pl/tag/firefox/' class='tag-link-1295' title='33 tematy' style='font-size: 8.12068965517pt;'>Firefox</a> <a href='http://magazynt3.pl/tag/gadugadu/' class='tag-link-1364' title='35 tematów' style='font-size: 8.48275862069pt;'>Gadu-Gadu</a> <a href='http://magazynt3.pl/tag/google/' class='tag-link-1143' title='155 tematów' style='font-size: 16.0862068966pt;'>Google</a> <a href='http://magazynt3.pl/tag/grafika/' class='tag-link-1090' title='37 tematów' style='font-size: 8.72413793103pt;'>Grafika</a> <a href='http://magazynt3.pl/tag/gry/' class='tag-link-1047' title='58 tematów' style='font-size: 11.0172413793pt;'>Gry</a> <a href='http://magazynt3.pl/tag/hosting/' class='tag-link-1017' title='51 tematów' style='font-size: 10.4137931034pt;'>Hosting</a> <a href='http://magazynt3.pl/tag/htc/' class='tag-link-165' title='33 tematy' style='font-size: 8.12068965517pt;'>HTC</a> <a href='http://magazynt3.pl/tag/htmlxhtml/' class='tag-link-1346' title='41 tematów' style='font-size: 9.20689655172pt;'>HTML/XHTML</a> <a href='http://magazynt3.pl/tag/konkursy/' class='tag-link-1313' title='41 tematów' style='font-size: 9.20689655172pt;'>Konkursy</a> <a href='http://magazynt3.pl/tag/microsoft/' class='tag-link-237' title='79 tematów' style='font-size: 12.5862068966pt;'>Microsoft</a> <a href='http://magazynt3.pl/tag/monitory/' class='tag-link-244' title='32 tematy' style='font-size: 8pt;'>monitory</a> <a href='http://magazynt3.pl/tag/multimedia/' class='tag-link-254' title='109 tematów' style='font-size: 14.275862069pt;'>multimedia</a> <a href='http://magazynt3.pl/tag/netbook/' class='tag-link-261' title='34 tematy' style='font-size: 8.24137931034pt;'>netbook</a> <a href='http://magazynt3.pl/tag/photoshop/' class='tag-link-1133' title='49 tematów' style='font-size: 10.1724137931pt;'>Photoshop</a> <a href='http://magazynt3.pl/tag/php/' class='tag-link-1138' title='69 tematów' style='font-size: 11.9827586207pt;'>PHP</a> <a href='http://magazynt3.pl/tag/pozycjonowanie/' class='tag-link-1019' title='36 tematów' style='font-size: 8.60344827586pt;'>Pozycjonowanie</a> <a href='http://magazynt3.pl/tag/projekt-strony-www/' class='tag-link-1134' title='88 tematów' style='font-size: 13.1896551724pt;'>Projekt strony WWW</a> <a href='http://magazynt3.pl/tag/samsung/' class='tag-link-313' title='77 tematów' style='font-size: 12.4655172414pt;'>Samsung</a> <a href='http://magazynt3.pl/tag/seo-pozycjonowanie/' class='tag-link-1256' title='48 tematów' style='font-size: 10.0517241379pt;'>SEO Pozycjonowanie</a> <a href='http://magazynt3.pl/tag/serwisy-spolecznosciowe/' class='tag-link-1247' title='65 tematów' style='font-size: 11.6206896552pt;'>Serwisy społecznościowe</a> <a href='http://magazynt3.pl/tag/sklep-internetowy/' class='tag-link-1150' title='35 tematów' style='font-size: 8.48275862069pt;'>Sklep internetowy</a> <a href='http://magazynt3.pl/tag/sklepy-internetowe/' class='tag-link-1248' title='35 tematów' style='font-size: 8.48275862069pt;'>Sklepy internetowe</a> <a href='http://magazynt3.pl/tag/smartfon/' class='tag-link-337' title='44 tematy' style='font-size: 9.56896551724pt;'>smartfon</a> <a href='http://magazynt3.pl/tag/sony/' class='tag-link-339' title='46 tematów' style='font-size: 9.81034482759pt;'>Sony</a> <a href='http://magazynt3.pl/tag/spam/' class='tag-link-1227' title='37 tematów' style='font-size: 8.72413793103pt;'>Spam</a> <a href='http://magazynt3.pl/tag/spotlight/' class='tag-link-12' title='476 tematów' style='font-size: 22pt;'>spotlight</a> <a href='http://magazynt3.pl/tag/tablet/' class='tag-link-360' title='60 tematów' style='font-size: 11.2586206897pt;'>tablet</a> <a href='http://magazynt3.pl/tag/telefon-komorkowy/' class='tag-link-364' title='33 tematy' style='font-size: 8.12068965517pt;'>telefon komórkowy</a> <a href='http://magazynt3.pl/tag/usability/' class='tag-link-1114' title='33 tematy' style='font-size: 8.12068965517pt;'>Usability</a> <a href='http://magazynt3.pl/tag/webdesign/' class='tag-link-1062' title='53 tematy' style='font-size: 10.5344827586pt;'>Webdesign</a> <a href='http://magazynt3.pl/tag/youtube/' class='tag-link-1145' title='33 tematy' style='font-size: 8.12068965517pt;'>YouTube</a> <a href='http://magazynt3.pl/tag/zakupy-w-internecie/' class='tag-link-1013' title='95 tematów' style='font-size: 13.5517241379pt;'>Zakupy w internecie</a></div> </div> </div> <div class="middle"> <div class="widget"> <h2 class="gentesque"> Nasze serwisy </h2><div class="line"> </div> <p> <a href="http://BudujemyDom.pl">BudujemyDom.pl</a> | <a href="http://WybieramyDom.pl">WybieramyDom.pl</a> | <a href="http://CoZaIle.pl">CoZaIle.pl</a> | <a href="http://InformatorBudownictwa.pl">InformatorBudownictwa.pl</a> | <a href="http://ZielonyOgrodek.pl">ZielonyOgrodek.pl</a> | <a href="http://Urz%C4%85dzamyDom.pl">UrządzamyDom.pl</a> | <a href="http://wnetrza.budujemydom.pl">Wnętrza</a> | <a href="http://nieruchomosci.budujemydom.pl">Nieruchomości</a> | <a href="http://Ekobudowanie.pl">Ekobudowanie.pl</a> | <a href="http://InstalacjeB2B.pl">InstalacjeB2B.pl</a> | <a href="http://DachyB2B.pl">DachyB2B.pl</a> | <a href="http://OknaiDrzwiB2B.pl">OknaiDrzwiB2B.pl</a> | <a href="http://Wyka%C5%84czanieB2B.pl">WykańczanieB2B.pl</a> | <a href="http://BudownictwoSportoweB2B.pl">BudownictwoSportoweB2B.pl</a> | <a href="http://DomiWn%C4%99trza.pl">DomiWnętrza.pl</a> | <a href="http://Instalatornia.pl">Instalatornia.pl</a> | <a href="http://Obudowaniu.pl">Obudowaniu.pl</a> | <a href="http://Audio.com.pl">Audio.com.pl</a> | <a href="http://MagazynGitarzysta.pl">MagazynGitarzysta.pl</a> | <a href="http://MagazynPerkusista.pl">MagazynPerkusista.pl</a> | <a href="http://EiS.com.pl">EiS.com.pl</a> | <a href="http://LiveSound.pl">LiveSound.pl</a> | <a href="http://MagazynBasista.pl">MagazynBasista.pl</a> | <a href="http://FirmyMuzyczne.pl">FirmyMuzyczne.pl</a> | <a href="http://Gitarzysta.TV">Gitarzysta.TV</a> | <a href="http://Muzykomachia.pl">Muzykomachia.pl</a> | <a href="http://ElektronikaB2B.pl">ElektronikaB2B.pl</a> | <a href="http://AutomatykaB2B.pl">AutomatykaB2B.pl</a> | <a href="http://ep.com.pl">Elektronika Praktyczna</a> | <a href="http://Elportal.pl">Elportal.pl</a> | <a href="http://www.swiatradio.com.pl">Świat Radio</a> | <a href="http://DigitalCameraPolska.pl">DigitalCameraPolska.pl</a> | <a href="http://mt.com.pl">Młody Technik</a> | <a href="http://WebToster.pl">WebToster.pl</a> | <a href="http://sklep.avt.pl">Sklep AVT</a> | <a href="http://SuperDyskoteka.pl">SuperDyskoteka.pl</a> | <a href="http://zakupydladziecka.pl/">ZakupyDlaDziecka.pl</a> | <a href="http://avt.pl"> Wydawnictwo AVT</a> | <a href="http://UlubionyKiosk.pl">UlubionyKiosk.pl</a> </p> </div> </div> <div class="right"> <div class="widget"> <h2 class="gentesque">Facebook</h2><div class="line"> </div> <div id="fb-root"></div><script src="http://connect.facebook.net/pl_PL/all.js#xfbml=1"></script><fb:like-box href="http://www.facebook.com/magazynT3" width="292" colorscheme="dark" show_faces="true" border_color="" stream="false" header="false"></fb:like-box> </div> <br class="clearer" /> <a class="topofpage tooltip" href="#page-menu-wrapper" title="Top of page"> </a> </div> <br class="clearer" /> </div> <div class="copyright"> <div class="floatleft"> Copyright © 2012 Magazyn T3 All Rights Reserved. </div> <div class="floatright">   </div> <br class="clearer" /> </div> </div> <div class="bottom"> </div> </div> </div> <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-874262-54']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> </body> </html> <!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/ Served from: magazynt3.pl @ 2012-05-23 11:51:35 -->