Archiwalia dla 06.2005

Planet PLD

Właśnie skończyłem wstępną zmianę layoutu Planet PLD - agregatora informacji publikowanych przez deweloperów wyżej wspomnianej dystrybucji.

Póki co, design strony opiera się na zmodyfikowanym mocno Kubricku. Może nie jest to specjalnie oryginalne, ale z pewnością nowy układ jest bardziej czytelny od poprzedniego.

Mam nadzieję, że przy okazji niczego nie zepsułem na serwerze DeeJay1, jeśli coś nie zachowuje się tak, jak powinno, to proszę o pilną informację.

PS: najlepszy dowcip o blondynce, jaki kiedykolwiek czytałem.

Lekka nuta dekadencji, czyli Oldschool Kubrick theme dla Joggera

Kolejny szablon, tym razem starsza wersja Kubricka, wykonana bez użycia grafik. Testować na żywo można na blogu tymczasowym (a uprzedzałem, że często się zmienia).

Do pobrania z mojego serwera, tam też znajduje się zrzut ekranu prezentujący szablon w działaniu.

Przy okazji dodałem brakujące zrzuty ekranów do pozostałych szablonów.

Human Condition - kolejny wolnodostępny szablon dla Joggera

Właśnie skończyłem konwersję kolejnego z bardzo ładnych moim zdaniem szablonów WordPress. Tym razem jest to Human Condition, do zobaczenia - oczywiście na żywo - na moim blogu eksperymentalnym (przynajmniej do czasu, kiedy skonwertuję kolejny szablon).

Do pobrania z mojego serwera.

Poprzednio skonwertowany Kubrick (używam go tutaj) nadal jest dostępny do pobrania.

BrowseHappy na trzecim miejscu w Google

Już po 24 godzinach od rozpoczęcia akcji, strona promująca alternatywne przeglądarki pojawiła się na trzecim miejscu w najpopularniejszej wyszukiwarce - Google. Kilka osób zadało mi pytanie, jak to możliwe, skoro sama strona nie zawiera w żadnym miejscu frazy konkursowej - MsnBetter ThanGoogle.

Jako, że wiele osób zarzuca mi niekompetencję, czy też skrajną głupotę, zaznaczam z góry, że przytoczone poniżej informacje mogą być dawno nieaktualne bądź nieprawdziwe - w takim przypadku proszę o poprawienie mnie, jako że nie śledzę forów tematycznych, zajmujących się pozycjonowaniem.

Wyniki wyszukiwania

Google przy wyszukiwaniu stron bierze pod uwagę kilka czynników:

  1. URI strony (obecność słów kluczowych z wyszukiwanej frazy)
  2. Tytuł dokumentu
  3. Zawartość dokumentu (obecność słów, ich wzajemny układ, odległość, gęstość występowania i stosunek ich ilości do objętości samego tekstu)
  4. Odnośniki do dokumentu (obecność słów kluczowych)
  5. Współczynnik PageRank strony

Nie są brane pod uwagę elementy <meta/> nagłówka dokumentu ani komentarze oraz elementy o zawartości typu CDATA (kod JavaScript, Visual Basic, arkusze stylów).

O ile BrowseHappy nie zawiera poszukiwanej frazy w żadnym z trzech pierwszych elementów listy, o tyle ma bardzo wysoki PageRank, o którym niżej. Dzięki temu jest w stanie przeskoczyć wyniki o dużym nasyceniu treści poszukiwaną frazą. Podobnie wypozycjonowane zostały strony Microsoft Polska i sama wyszukiwarka Google.

PageRank

PageRank jest iteracyjnym algorytmem obliczania ważności dokumentu. Nazwa pochodzi od nazwiska jednego z założycieli Google, który jest posiadaczem patentu na sam algorytm.

Jego idea polega na śledzeniu działań typowego użytkownika - budowany jest skierowany graf połączeń i wybierany jest jeden nieterminalny węzeł (taki, który posiada ścieżkę wyjściową). Wszystkim węzłom nadawane są równe wartości PageRank, obierany jest też współczynnik znudzenia internauty (liczba rzeczywista z zakresu 0-1, nie jest mi znana dokładna wartość tego parametru, z tego co pamiętam, oscylowała ona w przedziale 0,6-0,9).

Następnie robot wyruszając z danego wierzchołka przechodzi do każdego z jego sąsiadów, zwiększając ich współczynnik PageRank o PageRank bieżącego węzła podzielony przez całkowitą liczbę linków wychodzących z danego węzła i pomnożony przez współczynnik znudzenia (istnieje prawdopodobieństwo, że internauta nie będzie dość cieprpliwy, aby dalej podążać za kolejnymi odnośnikami). Innymi słowy, bieżący węzeł rozdaje po równo swój PageRank pomiędzy dokumenty, do których się odnosi, propagując tym samym własną popularność.

Czynność ta jest powtarzana rekurencyjnie dla wszystkich zlinkowanych sąsiadów, aż wyczerpane zostaną wszystkie połączenia w grafie.

Po przejściu przez cały graf, wartości PageRank wszystkich wierzchołków mnożone są przez (1 - współczynnik znudzenia).

Całość nie jest liczona od razu, używane są przybliżenia iteracyjne, gdzie wartości modyfikowane są stopniowo za pomocą algorytmów przybliżeniowych - liczba stron w internecie nie pozwoliłaby na zbudowanie rzeczywistego grafu wszystkich połączeń. Dane analizowane są więc w postaci przybliżonej i po ich uszczegółowieniu przeprowadzany jest kolejny krok iteracji.

Po przeprowadzieniu około stu kroków iteracyjnych, generowany jest nowy indeks popularności serwisów i rozpoczyna się faza jego wdrażania. Tutaj pojawiają się problemy z różnymi wynikami Google zwracanymi dla różnych użytkowników.

Tańczący z Google’ami

Kiedyś nazywało się to Google dance i było zjawiskiem regularnie obserwowanym raz w miesiącu, kiedy to indeksy były rozsyłane do kolejnych serwerów obsługujących wyszukiwanie (Google jest obsługiwane przez kilka-kilkanaście klastrów serwerowych i w zależności od szczęścia, dostawcy internetu i pogody w Zairze, możemy trafić na dowolny z nich).

Od kilku lat Google uaktualnia indeksy nieregularnie, od kilku do kilkunastu razy w miesiącu, co powoduje, że ciężko wykryć moment podmiany. Aby ułatwić to webmasterom, wprowadzone zostały dwa dodatkowe adresy - www2.google.com oraz www3.google.com, które zawsze wykorzystują najnowsze zestawienia. Jest to jedyne autorytatywne źródło aktualnych wyników podczas operacji podmiany.

Dlatego właśnie wczoraj użytkownicy magistrali innych niż TP otrzymywali inne wyniki niż klienci monopolisty, którego serwery DNS w cache miały akurat adres IP świeżo zaktualizowanego serwera.

Na zakończenie

Pozycjonowaniem nie miałem czasu zajmować się już dłuższy czas, stąd powyższe informacje mogą zawierać zupełnie nieaktualne dane, możliwe też, że źle pamiętam sam mechanizm punktowania serwisów.

Update: przepraszam za bałagan, ale przy formatowaniu tekstu zginął mi jeden akapit tekstu, już poprawione.

O co dokładnie chodzi z BrowseHappy i MsnBetter ThanGoogle?

Przy okazji opisu konkursu SEO narodził się pomysł wypromowania dla żartu strony BrowseHappy. Akcja ruszyła, co można zaobserwować na stronie głównej Joggera. Szukamy chętnych do pomocy.

Jak się przyłączyć? To proste, wystarczy, że na stronie (np. w notce na swoim blogu) umieścisz poniższy kod HTML:

<a href="http://browsehappy.pl/">MsnBetter ThanGoogle</a>

Akcja ma charakter czysto ideologiczny i formę raczej żartobliwą, BrowseHappy nie zostało zgłoszone jako uczestnik konkursu i nie czerpie żadnych finansowych korzyści z pozycji w wyszukiwarce.

Dlaczego hidentity.org jest złe

Internet ewoluował znacznie od stanu, kiedy FrontPage firmy z Redmond był topowym edytorem HTML. Coraz większy nacisk kładzie się obecnie nie tylko na wygląd, ale na samą strukturę dokumentu. Powracają stare, dobre czasy, kiedy to naturalną rzeczą było dzielenie pliku na sekcję (choćby dosowy edytor Tag tego wymagał) - w HTML służą do tego różnego poziomu nagłówki, coraz mniej pojawia się grafik czysto dekoracyjnych (takich, które nie niosą ze sobą informacji, np. bullety przy wypunktowaniu) - tutaj pomaga CSS. Grafiki informacyjne, jak nagłówki czy zdjęcia coraz częściej posiadają poprawnie wypełniony atrybut alt, a nierzadko i tytuł w atrybucie title. Powoli, małymi krokami znikają też serwisy wymagające przepisywania dziwnych kodów z obrazków o pstrokatym tle - zabezpieczenie to można w prosty sposób zastąpić odpowiednim skryptem po stronie serwera. Zwiększa się użyteczność serwisów, także względem użytkowników o specyficznych potrzebach, jak korzystający z przeglądarek tekstowych czy z lektorów w aural browsers. Sieć coraz bardziej skupia się na informacji, popularną formą czytania o nowościach jest subskrypcja blogów i ich strumieni RSS.

Z drugiej strony coraz bardziej uciążliwym problemem jest spam i niektórzy cierpią wręcz na paranoiczny zespół ochrony prywatności. Adresy email na stronach wstawiane są na przeróżne dziwne sposoby, począwszy od najprostszych i najbardziej eleganckich - usunięcie kropek i zastąpienie małpy napisem AT, przez stosowanie dziwnych zabiegów w CSS, JavaScript, a kończąc na zastępowaniu części lub całości grafiką. Pierwsza z metod ma tę przewagę, że jest skuteczna, prosta i jedyne, czego wymaga to przepisanie kilku znaków, działa też w każdej przeglądarce na każdym systemie operacyjnym, jaki sobie wymyślimy - od telefonu komórkowego do mikrofalówki. Pozostałe obarczone są mniejszym lub większym uszczerbkiem na użyteczności - CSS zależy mocno od możliwości przeglądarki, a na tym polu dominujący nam IE nie jest mocny, JavaScript może zostać wyłączony lub w ogóle może nie być zaimplementowany (choćby w urządzeniach przenośnych). Grafika generuje problemów najwięcej - przede wszystkim nie daje się zaznaczyć i skopiować, poza tym jej semantyczne umieszczenie na stronie wymagałoby wpisania w zawartość atrybutu alt adresu email, co stoi w konflikcie z naszymi intencjami.

W niektórych przypadkach zespół ochrony prywatności posuwa się jeszcze dalej - powstają serwisy typu Hidentity, gdzie zupełnie bezpłatnie można obfuskować za pomocą grafiki nie tylko swój adres poczty elektronicznej, ale tak poufne informacje jak numer GG czy login Skype. Oczywiście, żaden bot spamowy nie jest w stanie odróżnić ich na stronie (dla GG to zwykła liczba, dla Skype dowolny ciąg znaków), ale skoro da się je ukryć w obrazku, to czemu by nie. Wkrótce pojawią się zapewne serwisy informacyjne, publikujące całe artykuły w formacie wielowarstwowego pliku Adobe Photoshopa. Autorzy Hidentity poszli nawet o krok dalej - w celu zaoszczędzenia miejsca na stronie, dane prezentowane są w postaci animowanego pliku GIF z cykliczną rotacją. Nie przeszkadza im zapewne fakt, że próbując przepisać czyjś adres bądź numerek trzeba uciekać się do intuicyjnych rozwiązań z gatunku zrób screenshot, wklej do Painta. Na koniec wiele do życzenia pozostawia też sama graficzna forma tak przygotowanej informacji - wygląda jak typowy button reklamowy, co powoduje odruchowe pomijanie takich grafik - w identyczny sposób oko automatycznie pomija bannery reklamowe. Dla ciekawskich proponuję pochodzić po dużym portalu i po przejściu na kolejną stronę spróbować przypomnieć sobie, co reklamował banner na poprzedniej.

Ja ze swojej strony do walki ze spamem polecam automatykę. Spam Assassin i filtry Bayesa sprawują się bardzo sprawnie. Otrzymuję dziennie około 600 wiadomości pocztowych, z których około 100 to spam, do dziś tylko jedna wiadomość prześliznęła się przez regułki. Inną alternatywą jest konto na GMail, gdzie filtry spamowe działają niemal całkowicie bezbłędnie.

Trac, czyli system wspomagania projektu

Praktycznie każdy większy projekt trafia na taki moment, gdzie do wymiany zadań i zgłaszania problemów przestaje wystarczać email. Pojawiają się problemy: coraz częściej kilka osób zgłasza tę samą usterkę, zaczynają ginąć informacje (czy to przez chaos czy przez zwykłe zapomnienie o wiadomości). Ma to miejsce tak samo w projektach wewnątrzfirmowych, gdzie osób zgłaszających i obsługujących jest relatywnie mało, i w przedsięwzięciach OpenSource, gdzie liczba zgłaszających sięga czasem setek. Tutaj przychodzi czas na wdrożenie narzędzia, które pozwoli ogarnąć i poukładać przychodzące i wychodzące informacje. Najzwyklejszy bugtracker, bądź system ticketowania, używając bardziej ogólnej nazwy.

Pojęcie ticketu pasuje tu bardziej. Ticketem nazywamy zlecenie. Nie musi to być bug, może to być prośba o sprawdzenie czegoś, pytanie o implementację dodatkowej funkcjonalności czy notatka do samego siebie, pozostawiona na później przez zapominalskich (jak ja). Ticket od zwykłego maila różni się tym, że ma nadany unikalny numer, przypisanego autora (czyli zgłaszającego), a nawet własną stronę WWW. Strona ta pozwala śledzić zmiany zachodzące w zgłoszeniu, sprawdzić postęp prac czy pozostawić swój komentarz. Na tym praca systemu ticketowego się nie kończy. Możliwości jest wiele.

Najpopularniejsze wśród programistów są naturalnie wszelkie BTS. Na tym polu króluje niepodzielnie Bugzilla - system zbudowany z myślą o bardzo dużych projektach programistycznych, jego oryginalnym przeznaczeniem były projekty prowadzone przez Mozilla Organization.

Bugzilla jest świetnym systemem, jeśli chodzi o raportowanie i statystyki, marzenie dla osoby bezpośrednio zaangażowanej w życie projektu. Każdy problem jest dokładnie zaszeregowany, określony jest ściśle komponent, w którym błąd występuje, znany jest niemal numer linii, którą należy poprawić. Głównym problemem Bugzilli jest właśnie ta szczegółowość. Trudno bowiem oczekiwać od zwykłego użytkownika, by przed opisaniem okoliczności usterki musiał zapoznać się z kodem źródłowym swojej przeglądarki, a co najmniej z wewnętrzną strukturą projektu.

Istnieje jednak alternatywa. Jest wiele innych aplikacji o podobnym przeznaczeniu, choćby Mantis czy używany przez PLD Flyspray.

Jest też Trac - mój ulubieniec, którego używamy w firmie. Jest niezwykle lekki, jednym z podstawowych założeń projektu jest niewpływanie na wypracowane przez zespół metody prowadzenia projektu. Przez to Trac jest bardzo elastyczny i łatwo dostosować go do własnych potrzeb (choćby przez definicję własnych pól). Jego interfejs jest dziecinnie prosty w użyciu, nie znajdziemy tu kilkudziesięciowierszowych formularzy czy zawiłej wyszukiwarki, całość wyglądem przypomina bardziej Basecamp niż Bugzillę. Co ważne dla końcowych użytkowników, wysyłanie ticketów nie wymaga rejestracji w systemie. Jako zawartość pola autor wpisujemy swój adres email i system będzie automatycznie informował nas o każdej zmianie w zgłoszeniu.

Nie do pominięcia jest też integracja z lokalnym repozytorium Subversion. Trac w czytelny sposób wyświetla nam Timeline, czyli chronologiczny zapis zmian w projekcie, gdzie obsługa ticketów miesza się z commitami do repozytorium, a przy każdym elemencie wyświetlona jest krótka informacja podsumowująca jego zawartość. Oczywiście, widok ten (podobnie jak każdy inny) możemy zasubskrybować w swoim ulubionym czytniku RSS. Dodatkowo listę kamieni milowych możemy połączyć ze swoim ulubionym kalendarzem, np. z iCal, Outlookiem czy Evolution.

Na deser otrzymujemy jeszcze narzędzie do zarządzania projektami z poziomu wiersza poleceń. Można z jego pomocą wykonywać większośc pracy administracyjnej, jak dodawanie użytkownikom uprawnień czy zarządzanie komponentami projektu. Otrzymujemy też masę przykładowych skryptów do wykorzystania i integracji z Tracem, np. skrypt automatycznie zamykający zlecenia na podstawie commitlogów z repozytorium.

Jedyną wadą Traca jest brak graficznego systemu administracyjnego i konieczność używania poleceń konsoli, co dla mnie jest bardzo wygodne, ale często może być niepożądane bądź niemożliwe do zrealizowania. Na szczęście kolejny kamień milowy ma już w planach klikalna wersję i tego narzędzia.

Pong!

Co można zrobić w trzy godziny po pracy? Można pójść na piwo, można obejrzeć ciekawy film (byle długi), poczytać książkę, pooglądać telewizję (jeśli jest się głuchym, ślepym i odpornym na głupotę, albo wyjątkowo ceni się reklamy). Można też pójść do grafika do domu i pobawić się flashem.

Artystycznie zdolności posiadam absolutnie zerowe, nie znam się specjalnie na Macromedia Flashu MX, znam się za to na programowaniu i sprawia mi to niesamowitą frajdę, a tak się akurat złożyło, że jeden z klientów zamówił od nas… Ponga! Takiego ze starusieńkich automatów Atari, z wbudowanym telewizorem (kiedy o płaskich ekranach nikt jeszcze nie słyszał) i z pokrętłem zamiast joysticka.

Efektem trzygodzinnego dopieszczania i testowania jest najnudniejsza gra na świecie. W wersji pełnej można, naturalnie, pograć myszką i zapisać swój wynik online.

Coś tu śmierdzi…

SEO PL szukają sobie darmowej reklamy najwyraźniej. Postanowili zorganizować najgłupszy konkurs w historii internetu, pozycjonowanie własnej strony na hasło msnbetter thangoogle. Przemilczę tutaj swoją opinię o wyszukiwarce MSN jak i o całości usług przez MSN oferowanych. Ważne jest to, że akcja ma, oprócz sprawdzenia czyichś umiejętności (jakich umiejętności, pozycjonowania się wśród 20 wyników?), zachęcić zespół Google do przemyślenia swoich postępków odnośnie pozycjonowania. Jak długo żyję, nie słyszałem żeby ktoś narzekał na to, że ma zbyt prostą robotę. Skoro pozycjonowanie w Google jest tak bajecznie proste ich zdaniem, to czemu chcą jego zmiany? Może konkurencja radzi sobie lepiej? Doprawdy, ciężko pojąć, że z taką łatwością gotowi są oddać te nieprzebrane oceany gotówki. Google może i łatwo oszukać. No cóż, zwykłym ludziom pozostaje smutne wpisywanie zapytań dłuższych niż jedno słowo :>

Update: all your base are belong to us - MsnBetter ThanGoogle.

Standards versus reality, part 4

Dziś krótko o stylach.

CSS ma taką przemiłą cechę, że pozwala przypisać dowolnemu elementowi nieograniczoną liczbę klas. Definiuje się to rozdzielając nazwy klas za pomocą spacji:

<p class="pierwsza druga">Lorem ipsum, baby!</p>

O dziwo, działa to nawet w IE. Przynajmniej częściowo. Pewien nieznośny bug sprawia, że w przypadku wystąpienia kilku klas, IE zaczyna przypisywać je dość rozrzutnie, aplikuje mianowicie wszystkie klasy, których nazwa zaczyna się (a może zawiera) dowolną z wymienionych. Stąd jeśli do powyższego przykładu przypisze się poniższy arkusz, efekt może być dość nieoczekiwany:

.pierwsza
{
	color: #000;
}
.druga
{
	border: 1px solid #000;
}
.pierwszaNotka
{
	background: #000;
}

IE z ogromną radością zaaplikuje nam wszystkie trzy klasy, a efektem będzie czarny pasek. Czyż to nie przepysznie? Dlatego też należy unikać jak ognia sytuacji, kiedy nazwa jednej klasy jest jednocześnie prefiksem nazwy innej. Można też unikać aplikowania kilku klas do pojedynczego elementu.

Drugi problem dotyczy wielkości liter, standard definiuje nazwy klas i identyfikatorów jako rozróżniające duże i małe litery. IE z kretesem ignoruje te informacje. Są dwa przypadki, kiedy może nas to zaboleć. Pierwszy to arkusz styli zbudowany z myślą o IE (o ile można w ogóle budować arkusze styli z myślą o konkretnej przeglądarce). Jeśli bowiem nasz dokument jest serwowany jako XHTML, przeglądarka ma obowiązek ściśle przestrzegać tagów elementów pisanych małymi literami. Stąd poza IE poniższy styl nie ma żadnego zastosowania, jako że nie istnieje element <STRONG/>:

STRONG
{
	color: #f00;
}

Druga sytuacja to nazwy klas pisane jako pojedynczeSłowo (preferuję ten styl ze względu na czytelność arkusza):

<p class="loremIpsum">Lorem ipsum dolor sit amet</p>
.loremIpsum
{
	color: #f00;
}
.lOrEmIpSuM
{
	color: #00f;
}

Kto zgadnie, jakiego koloru będzie powyższy paragraf? Tutaj sprawa jest prosta, nazwy trzeba definiować z rozmysłem i konsekwentnie, wtedy taka sytuacja raczej nie będzie mieć miejsca. Stosuje się tu też powyższa uwaga - do testowania CSS (jako podstawowej przeglądarki) należy używać czegoś, co działa. Dopiero potem dostosowywać kod do IE.