Szkodnik polskiego WWW zdemaskowany

Chcąc trochę polepszyć pracę naszego proxy zagłębiłem się w jego statystyki.
Okazało się że najwięcej przetwarzanych żądań dotyczy *.hit.gemius.pl (10% całego ruchu), przy czym nie są one w ogóle keszowane (0.06% trafień w cache).

Każde załadowanie strony na onet.pl, interia.pl itp. wiąże z połączeniem nie tylko z wybranym serwerem, ale także z którymś z serwerów *.hit.gemius.pl – z punktu widzenia użytkownika to drugie połączenie jest zupełnie niepotrzebne, a może opóźnić załadowanie całej strony.

Ja rozumiem – badania internetu. Ale czy nikt nie słyszał o badaniach przesiewowych? Gdyby badania dotyczyły co setnego połączenia, to przecież wyniki wcale nie byłyby dużo gorsze, a koszt znacznie mniejszy. Ale w końcu to koszt użytkownika – kto by się z tym liczył?

A genialność twórców tego systemu (a przynajmniej programistów) potwierdzić może ten link: http://onet.hit.gemius.pl/. Normalnie odwołania są razem z jakąś ścieżką (za każdym razem inną), ale bez ścieżki efekt jest najciekawszy ;-)

Zastanawiam się jak oszczędzić użytkownikom (i naszej sieci) tych niepotrzebnych połączeń. Wyciąć tego po prostu na proxy nie mogę – byłaby to cenzura i ktoś mógłby się słusznie doczepić (nawet jeśli wycinam tylko spyware). Ale jak dam użytkownikom opcję „przyspiesz swój internet”, z opisem na czym to polega (nie ważne że nikt nie zrozumie), to już chyba byłoby OK…

Holandia?

Dostałem dzisiaj ciekawego majla:

Hello,

Is there already someone busy with translation your jabber-gg-transport into
dutch? If not, I will translate it. This will take a week, a month,… but it
will not take longer than 2 months normally. 🙂

Włączając mechanizmy gettext do kodu transportu GG nie sądziłem że będą
potrzebne do czegoś więcej niż język polski. Ale jak ktoś chce robić
holenderskie tłumaczenie… niech robi :-)

Prawie skończyłem implementację vCard w PyXMPP. Działa już wczytywanie
Jabberowego vcard-temp i standardowego formatu MIME directory
(RFC2426/RFC2425) oraz zapisywanie tego drugiego. Trzeba jeszcze przetestować
kompatybilność z innymi implementacjami RFC2426 (jakieś address-booki) oraz
dodać tworzenie XMLowej wizytówki. Wtedy będzie można implementować
/whois w CJC i w JJIGW.

W domu zacząłem co-nieco sprzątać. Jeśli w weekend (gdy przyjeżdża żona) ma
być czysto, to muszę zacząć już teraz ;-).

Pajałem i bóciłem

W piątek prosto z pracy poszedłem na obiadek do restauracji Krakowianka. To
mała knajpka niedaleko firmy, z zewnątrz wyglądała nieciekawie, a w środku
całkiem sympatycznie. A rolada z kluskami była po prostu pyszna.

Po obiadku wsiadłem w samochód i pojechałem do moich dziewczyn do Bochni. W
Rudzie Śląskiej, przed wjazdem na DTŚ był pierwszy korek. Zaskoczyło mnie to, bo
tam akurat nigdy nie stałem (ale często nie jeżdżę, więc to może normalka).
Potem DTŚ – raz dwa i byłem w Katowicach. Tam trochę mi się mieszały pasy zanim
wjechałem na A4 (wcześniej ten kawałek wydawał mi się wyjątkowo prosty), na
samej autostradzie też miałem wrażenie, że strasznie z tymi pasami namieszali,
ale to chyba tylko taki dzień. Na A4 rozkopy, przed Chrzanowem jeszcze nie takie
straszne, ale dalej duże kawałki drogi z ruchem dwukierunkowym i ograniczeniem
do 70. Bardzo się nie spieszyłem, więc specjalnie się tym nie przejmowałem.
Przed Balicami zjechałem na stację na siusiu i do myjni (a co będę do żony
brudnym samochodem jechał – raz na dwa lata nawet Polonezowi należy się
mycie).

Z automatycznej myjni korzystałem po raz pierwszy. Kupiłem w kasie kartę,
podjechałem pod myjnię, poczekałem aż poprzedni samochód wyjedzie (czytając w
tym czasie kilka razy instrukcję obsługi), podjechałem do środka aż zapalił się
napis Stop. Zanim się zatrzymałem zapaliło się Do tyłu, to
cofnąłem. Znowu zapaliło się Stop, a jak się zatrzymałem to zgasło.
Uznałem że jest ok, poszedłem do budki sterującej, włożyłem kartę,
nacisnąłem Start. Napisało mi na wyświetlaczu po francusku jakieś
cośtam cośtam 3…. No to czekam… i czekam… i nic. Wołam gościa co się
kręci obok przy serwisie. Podszedł, obmacał urządzenie i stwierdził, że on się
nie zna, to mu si kolega, zaraz przyjedzie. No to czekam na kolegę… Po
dziesięciu minutach się zjawił, otworzył budkę, poprzyciskał coś tam i
nic. Podszedł do światełek (tam gdzie świeciło się Stop i Do tyłu),
walną kilka razy i za którymś błysnęło Do przodu. Więc gościu powiedział,
żebym zwolnił hamulec i się samochód popchnie. Popchnęliśmy jakieś 1-2cm i
zapaliło się Stop. Wróciliśmy do budki, ale maszyna dalej nie
rusza. Gościu jeszcze raz to otworzył, poprzyciskał ileś guzików (chciałem
zasugerować reset), aż w końcu zadziałało. Gościu jeszcze powyklinał
kogoś, że paru żarówek nie chcą kupić, a klienci nie wiedzą gdzie
podjechać
. Po paru minutach mycie się skończyło i mogłem wyjechać. Nie
powiem, żebym efektem był zachwycony, ale że samochód wyjechał czyściejszy to
nie da się ukryć.

Zanim dojechałem na miejsce zdążyło się ściemnić. Przed Wieliczką i w
Wieliczce oczywiście korek, ale tego można było się spodziewać. Dalej jechało
się całkiem miło. Aż do Bochni gdzie pobłądziłem. Najpierw skręciłem nie w tą
stronę i wyjechałem z powrotem na Kraków. Za drugim razem, na tym samym
skrzyżowaniu znowu pojechałem nie w tą stronę (prosto zamiast w prawo), ale to
już udało mi się naprawić bez wyjeżdżania poza miasto. Gdy dojechałem pod hotel
okazało się, że w pokoju nikogo nie ma, a komórka żony nie odpowiada. Na
szczęście teść odebrał – byli w restauracji. Żona wyszła mi naprzeciw. Dosiadłem
się do stolika, nawet coś dla mnie zostało. A Krysia jak zobaczyła że tatuś
przyjechał zaczęła szaleć – wszystko chciała mi od razu opowiedzieć. Że
windom, że śweci. że pani itp.

Po wykąpaniu dziecka i położeniu jej spać poszliśmy z żoną na miasto. Trochę
się pokręciliśmy po okolicy, ale nigdzie nie zaglądaliśmy. Zaskoczyło nas że z
wielu lokalów słychać było całkiem sensowną muzykę – w dwóch były koncerty na
żywo (w jednym z nich wyglądało to trochę śmiesznie – kapela byłaby dwa razy
większa, to nie byłoby miejsca dla klientów), ale nigdzie nie wchodziliśmy, bo
nie chcieliśmy dziecku papierochami śmierdzieć, sami tego zapachu zresztą
też nie lubimy. Po rundce dookoła centrum wróciliśmy do pokoju. Niestety warunki
do nacieszenia się żoną dość ograniczone – dziecko śpi w łóżeczku obok, a
teściowe za ścianą. Trzeba było być bardzo cicho…

W środku nocy obudziło mnie bulgotanie w brzuchu. Dwa czy trzy razy chodziłem
do kibelka, łącznie spędziłem tam w bólach chyba z godzinę. W końcu położyłem
się na swojej karimacie między łóżkiem i łóżeczkiem i zasnąłem. Żona po tej nocy
była cały dzień niewyspana. Ja też się potem dobrze nie czułem.

Rano poszliśmy z Krysią do księgarni pokazać jej królika (bardzo jej się
spodobał) i do zoologicznego zobaczyć inne zwierzątka, ale rybki, szczurki i
myszki nie zrobiły już takiego wrażenia. Obiad zjadłem w tamtejszej pizzerii
„Bella” – tak jak zawsze zjadłem tam tanio i dobrze. Wypad na huśtawki się nie
udał, bo zaczęło padać. Schowaliśmy się do sklepu i żona kupiła sobie nowe buty.
Z powodu pogody nie pojechaliśmy też do Centrum Aktywnego Wypoczynku w
Borku.

Kolejną noc przespałem już normalnie, no pomijając eksmisję z łóżka na
karimatę, gdy rano Krysia się obudziła i zajęła miejsce przy mamie.

Dzisiaj rano na zmianę się chmurzyło i świeciło słońce. Postanowiliśmy jednak
do tego Borka jechać, żeby pokazać Krysi koniki. Oczywiście wtedy zaczęło padać.
Mimo pogody pojechaliśmy. Wyjechaliśmy nie tym wyjazdem z Bochni, ale jakoś na
miejsce udało nam się trafić. Było zamknięte (w folderze reklamowym nie podano
godzin otwarcia, więc błędnie założyliśmy że jest otwarte cały dzień).
Wróciliśmy już właściwą prostą drogą.

Po wycieczce objazdowej wyszliśmy całą rodzinką na spacer po mieście.
Krysia dobrze się z dziadkami bawiła, to zostawiliśmy ich i wróciliśmy do pokoju
w Hotelu (w końcu tydzień nie będziemy się widzieć). Gościu w recepcji trochę
dziwną miał minę jak po jakiś dwudziestu minutach wychodziliśmy nieco zmienieni
na twarzach i spytałem go gdzie mają jakąś cukiernię. Cukiernię znaleźliśmy
i kupiliśmy sobie lody – trzeba było trochę ochłonąć.

O drugiej pożegnałem się z rodzinką i poszliśmy na obiad – oni do hotelowej
restauracji, ja do Karczmy Rycerskiej potem wsiadłem w samochód i
pojechałem. Tym razem nawet w Wieliczce prawie nie było korka. W miarę szybko
dojechałem do Katowic. Tam nie skręciłem na DTŚ, tylko pojechałem dalej zobaczyć
ile tej autostrady minister Pol nam wybudował. Autostrada dojechałem
mniej-więcej tam gdzie ostatnio (jakieś 3 lata temu) gdy tamtędy jechałem.
Różnica była taka, że dalej było widać powstającą dalszą część A4. Pojechałem
więc przez Rudę Śląską kierując się drogowskazami na [A4] Wrocław.
Wyjechałem na trasę mikołowską i dalej prościutko do domu. Po drodze
przekroczyłem budowę autostrady jeszcze z 2-3 razy. Kiedyś może uda się im ją
skończyć.

O 16:40 byłem już w domu. Żonie zameldowałem (przez Jabbera oczywiście), że
dojechałem cały i zdrowy, a teraz meczę ludzi swoimi wypocinami.

Transport GG wersja 2.0.9

Dzięki wielkiemu poświęceniu (nikt inny nie chiał tego zrobić ;-))
mmazura
Transport GG znowu obsługuje pobieranie listy kontaktów z serwera GG.
Powinno to ładnie działać w większości klientów Jabbera. W Psi nie bardzo,
bo Psi nie obsługuje jabber:x:roster. Stare obejście dla
psi (komenda import roster) zostało usunięte, bo było niezgodne
z protokołem XMPP. Z innych usprawnień wymienić należy: poprawienie błędu powodującego zwis po nieudanym połączeniu z serwerem Jabbera oraz innego – powodującego problemy po zapełnieniu bufora wyjściowego (dotyczyło to dużych serwerów).

W domu na ścianie, mimo dwukrotnego zamalowywania, dalej widać ślady
krysinych obiadków. Na szczęście jest to dużo mniej widoczne niż przed
zamazaniem, ale jednak – plama to plama. Trudno. Kiedyś zrobimy porządne
malowanie, to zdrapiemy resztki obiadków razem ze starą farbą. To już powinno
pomóc.

Działający parser i kompilowany szablon

Wczoraj udało mi się doprowadzić nowy parser strumienia w PyXMPP do działania.
Nie piszę skończyć, bo zasługuje jeszcze na wiele, głównie kosmetycznych, poprawek.
W każdym razie już CJC z libxml2 2.6.7 dzała, a to najważniejsze.

W pracy dokończyłem analizę tego nieszczęsnego machine check exception
i wyszło mi na to, że błąd został zgłoszony przez north bridge i dotyczy
kontroli ECC w pamięci. Czyli albo pamięć walnięta, albo płyta główna. Będzie trzeba
to sprawdzić i felerny sprzęt wymienić.

Potem na jogu
Marcoosa
przeczytałem o XFN i postanowiłem
użyć tego cuda u siebie. Ale że wymagałoby to poprawienia linków w dwóch plikach
(index.html i comments.html), to postanowiłem najpierw coś z
tym utrudnieniem zrobić. Więc resztę czasu w pracy, pomiędzy telefonami
klientów, spędziłem na tworzenie szablonów do szablonu i systemu kompilacji tego
do formy strawnej przez Joggera. Udało mi się – z kawałków będących well-formed
XML składane jest (XInclude, zaimplementowane w xmllint) szablony dla strony
głównej i z komentarzami. Po drodze jest wszystko walidowane – w tym celu
stworzyłem DTD do szablonów dla XHTML 1.0. Pliki źródłowe się nie walidują, bo
musiałbym zrobić jeszcze DTD uzwględniające XInclude, a docelowy nie waliduje
się, bo ma deklarację DTD dla XHTML, nie uwzględniającą tagów Joggera, poza
deklaracją waliduje się względem tego mojego Joggerowego DTD.

Dla odmiany style CSS tworzone są przy pomocy preprocesora M4. Zrezygnowałem
z używania @import do składania szablonów w przeglądarkach
czytelników, zamiast tego na Joggerze leżą już kompletne, posklejane pliki
stylów. Dzięki temu walidator przestał głupieć, a i strona ma szansę szybciej
się załadować (aby wyświetlić stronę w pełni teraz wystarczy załadować 3 pliki
zamiast 7).

Wszystko razem spięte jest przy pomocy plików Makefile dla
GNU Make Oznaczeń XFN jeszcze nie dodałem. Nie starczyło czasu…
:-)

Obiadek (schabowy z frytkami i surówką) zjadłem Pod Pierożkiem, tak
jak pisałem. I smakował mi bardziej, niż wczorajszy w Sphinksie. Do tego był
tańszy, ale odrobinę mniej.

A teraz zabiorę się za zamalowywanie pamiątek po krysinych obiadkach. Ciekawe
czy po tym ta ściana nie będzie wyglądać jeszcze gorzej…

Problemy z CSS

Coś spieprzyłem CSS w moim szablonie. Mnie się wydaje że jest OK, ale Validator ma inne zdanie. No cóż – nie wiem jak to poprawić (nie zmieniając za bardzo sposobu zapisu kolorów), więc na razie usuwam ikonkę Valid CSS, ale będę musiał coś z tym zrobić. :-(

Jakoś sobie radzę

Wczorajszym obiadkiem się nawet nie otrułem. Co ciekawsze nawet mi smakował,
a przecież tylko wrzuciłem na patelnię co mi w ręce wpadło: boczek, kiełbasę,
cebulę, czosnek, marchewkę, makaron i ser.

Wieczorem zabrałem się za nowy parser strumienia dla PyXMPP, bo z
libxml2-2.6.7 dotychczasowy nie działa i podobno to jest ficzer a nie bug.
Mam już gotowy analizator leksykalny – automat Mealy’ego na 35 stanach, który
bez problemu wyłuskuje konkretne tagi oraz dane pomiędzy nimi ze strumienia XML,
nie głupiejąc nawet na sekcjach CDATA, czy niewyeskejpowanych
> w wartościach atrybutów. Nie obsługuje DTD, ale to i
tak w strumieniach XMPP jest zabronione. Obsługuje za to (tzn. umie ignorować)
PI i komentarze, mimo że też nie musi. Najlepsze jest to, że automat zadziałał
poprawnie (na ile go przetestowałem) za pierwszym razem gdy go uruchomiłem i
udało mi się go jakimiś danymi nakarmić. Teraz jeszcze muszę dokończyć
wyłuskiwanie początku/końca strumienia i pełnych zwrotek oraz przekazywania tego
do parsowania przez libxml2 (mój preparser nawet nie do końca sprawdza
czy otrzymany XML jest well-formed).

Pracę zacząłem on restartowania serwera na Opteronach który zrobił Ooopsa.
Niektóre kernele na nim odpalane od razu wywalały się z machine check
exception
, więc wiem że coś jest skopane. Dzisiaj nawet próbowałem dojść do
tego co dokładnie i zacząłem analizować kody które mi któryś z tych kerneli
wyrzucił. Ale zanim się mniej-więcej w tym połapałem i znalazłem odpowiednie
tabelki w specyfikacji, to minęła 16-ta i czas było wracać do domu.

Po drodze do domu poszedłem na obiad do Sphinksa. Pierwszy raz zresztą.
Jedzenie może nie rewelacyjne, ale dobre, dużo i w miarę tanie. Zresztą w moim
przypadku to już sukces, że byłem w stanie to zjeść bez kombinowania.
Wielokrotnie już zamawiałem jedzenie, którego potem nie byłem w stanie zjeść i
zostawiałem nieruszone. Tym razem dla pewności nawet wypytałem najpierw kelnera
czy ta Shoarma na pewno nie ma żadnych pomidorów i czy przypadkiem nie jest
przyprawiona na słodko. Nic z tych rzeczy, więc zamówiłem. I rzeczywiście na
talerzu było wszystko jadalne – frytki, mięsko i normalna (bez
majonezu/śmietany/pomidorów/buraczków) surówka. Podali też trzy różne sosy w
miseczkach, ale tego nie musiałem ruszać (dwa spróbowałem na końcu frytki, ale
ten ostry był z pomidorami i wcale nie taki ostry, a czosnkowy chyba na
śmietanie – nic dla mnie). Jeszcze kiedyś się tam wybiorę, może z żonką.
A jutro Bar pod Pierożkiem :-) .

Zostałem sam

Żona i córka wyjechały na dwa tygodnie do Bochni wypoczywać. Nie będzie miał
kto pilnować, żebym za długo przed kompem nie siedział. Nie będzie miał kto mi
pysznych obiadków gotować. Nie będzie miał kto fundować mi wieczornej łóżkowej
gimnastyki. Moje zdrowie jest więc zagrożone, ale dwa tygodnie powinienem jakoś
przeżyć. Szczególnie, że na weekend do nich się wybieram.

Ten czas postaram się spędzić jakoś pożytecznie. Może przynajmniej część
moich projektów ruszy z miejsca. Mam nadzieję że wcześniej nie znajdę jakiejś
super gierki ani innego pożeracza czasu, ani że w firmie za dużo roboty mi nie
przywalą.

Na razie rozpoczynam destrukcję mieszkania, od kuchni – idę sobie
przygotować jakąś namiastkę obiadu.

Niekompetencja informatyków czai się wszędzie…

Oto wiadomość jaką dzisiaj dostałem na adres zapisany w bazie WHOIS:

From: „LiveNet.pl” <bok@livenet.pl>
To: [cenzura]
Subject: Wlamanie z waszej sieci !!!

Dzien dobry
Jestem wlascicielem firmy hostingowej livenet.pl. Pisze w sprawie jednego z
Państwa klientów, otóż uw klient wykazuje zdolności hakerskie włamując się na
serwery smtp i podszywając się pod właścicieli serwera wysyła spam co w świetle
dzisiejszego prawa jest przestępstwem. Ja w imieniu swoim oraz kilku innych
zaprzyjaźnionych firm z branży zaobserwowaliśmy to już od jakiegoś czasu. My
oraz nasi klienci dostajemy maile z załącznikami w których znajdują się wirusy.
Chcieli byśmy poznać dane tego człowieka. poniżej przesyłam wycinek z logów
serwera na który polowaliśmy jakiś czas. dla uproszczenia proszę mi podać dane
człowieka który o godzinie 12:16 korzystal z IP [cenzura] prosze o kontakt
telefoniczny [cenzura].

Poniżej tego tekstu nie było żadnych logów, ale nagłówki wiadomości. Już na
pierwszy rzut oka widać że to wirus, a pierwsze użycie Google wykazało że to
Bagle.H. Oczywiście postarałem się o zablokowanie dalszego rozsyłania wirusa z komputera
nieostrożnego klienta, jednak przesłane w skardze nagłówki nie ułatwiały mi tego jak powinny
– nazwa serwera podanego w nagłówków Received:
stuff.livenet.pl w ogóle nie istnieje. Przy okazji okazało się że ta
skarga przyszła do mnie jedynie z powodu przeoczenia przy konfiguracji mojego
serwera – taka nazwa w HELO nie powinno w ogóle być przyjęta. I więcej
przyjmowana nie będzie (oczywiście poza pocztą wysyłaną na konto
postmaster).

Wszystkie [cenzura] są oczywiście wstawione przeze mnie zamiast
informacji których nie chciałem publikować. Myślałem nad wycięciem także nazwy
firmy, ale niech zostanie – ku przestrodze potencjalnych klientów.

Czyżby libxml2 to był zły wybór?

Zaczynam wątpić w to że użycie libxml2 w PyXMPP to był naprawdę dobry
wybór. I to nie z tego powodu, że ta biblioteka, wraz z modułem pythonowym
jest dość trudno dostępna dla użytkownika końcowego. Chodzi raczej o podejście developerów
libxml2
. A może po prostu ja byłem głupi zakładając że interfejs SAX,
czyli strumieniowy, będzie mnie informował o zdarzeniach na bieżąco. Czyli że
np. informację o początku elementu dostaję zaraz po przeczytaniu całego taga
początkowego, a nie po rozpoczęciu kolejnego elementu. W każdym razie po
uaktualnieniu (zresztą podyktowanym względami bezpieczeństwa) libxml2 do
wersji 2.6.7 PyXMPP i wszystko co z niego korzysta (a więc CJC i JJIGW)
przestaje działać. I nie będzie działać, póki autorzy libxml2 nie cofną tego
feature’a, albo ja nie przygotuję obejścia (ręcznego wstępnego
parsowania strumienia XML przed przekazaniem go do parsera XML).

Routerek 3Coma nadal działa, ale zdążył nas zaskoczyć. Konfiguracja
firewalla, która miała zablokować dostęp po TCP i UDP do routera, zablokowała
cały ruch TCP i UDP przechodzący przez router. Okazało się że w ACLach w tym
routerze maski adresów IP mają odwrotne znaczenie niż gdzie indziej (chociaż
może w innych routerach jest tak samo) i adres z maską
255.255.255.255 oznacza dowolny adres, a jak chcę złapać
ten jeden konkretny, to muszę użyć maski 0.0.0.0. Dziwne,
ale teraz działa.

Postawiłem i wczoraj w końcu skonfigurowałem zgodnie z życzeniami
użytkowników serwerek Quake3 na firmowym serwerze games.bnet.pl. Gostki
przez dwa tygodnie za mną chodzili w tej sprawie. Podziwiam ich
cierpliwość. :-)

A’propos gier. Doszedłem to tego, czemu mi się komp przy OpenGL wywalał –
nie miałem modułu via-agp załadowanego, a obsługa DRI na Rage128
w trybie PCI najwyraźniej się sypie. A samo agpgart już nie
wystarcza. Obejrzałem sobie UFO: Alien
Invasion
– może z tego być niezła gierka.