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.

Zrobiłem to

Wydałem jabber-gg-transport 2.0.8. Trzeba było wreszcie to zrobić, bo
2.0.7 wykrzaczało się że aż wstyd. W CVS już dawno leżały odpowiednie
poprawki (dziękuję wszystkim którzy je przygotowali albo pomogli mi je
przygotować), ale dopiero dzisiaj zrobiłem „release”. Oto
lista najważniejszych zmian:

  • Wyłączony import kontaktów z serwera GG. Po zmianie protokołu i tak
    nie działał, a powodował wykrzaczanie się całego transportu.
  • Poprawki pozwalające użyć transport z serwerem jabberd 2.0.
  • Poprawiony błąd powodujący zwis przy ponownej rejestracji w
    transporcie.
  • Poprawiony błąd powodujący wykrzaczanie się transportu po odebraniu
    <presence> z pustym <priority>.
  • Poprawiona rejestracja transportu w rosterze użytkownika – już nie
    powinien on się pojawiać w rosterze dwa razy.
  • Poprawiona funkcja licząca skrót SHA tak, aby działała poprawnie na
    architekturach 64-bitowych (w tym na moich Opteronach).
  • Oraz parę mniej istotnych poprawek.

A teraz z innej beczki. Zainstalowałem na serwerach pocztowych
amavisd+ClamAV. Działają ślicznie, ale otrzymywałem skargi że niektóre
wiadomości nie dochodzą. Okazało się, że chodziło o majle które zostały
odrzucone za 8-bitowe znaki w nagłówkach (zabronione przez RFC 2822).
Odrzucanie źle sformatowanych wiadomości ma duży sens, bo nigdy nie
wiadomo czy Outlook tak samo zinterpretuje jej zawartość jak antywirus
i po prostu wirus mógłby umknąć. Na takim bugtraqu są zgodne opinie że
„be liberal in what you receive” w przypadku poczty i antywirusów
powoduje tylko problemy. A więc nie mam zamiaru przyjmować wiadomości
łamiących podstawowe standardy (userom dałem wybór – mogą sobie to
wyłączyć).

W logach sprawdziłem co to za wiadomości są odrzucane. Ta wiadomość
o której było tyle krzyku to najwyraźniej z jakiegoś walniętego albo źle
skonfigurowanego Outlooka, z niezakodowanym
„Środkowoeuropejski” w polu „Date: ”. Ale takich
było wśród odrzuconych niewiele. Większość to majle słane automatem z
różnych serwisów WWW (w większości w PHP). Jakoś mnie to nie dziwi.
Zawsze uważałem że olewanie (a raczej ignorancja w tej dziedzinie)
standardów jest podobna do użytkowników PHP. Ale pewnie jestem
uprzedzony…

Na koniec jeden link:
Head over Heels
. Wkleiłem już go do komentarza na blogu Zgody, ale
uznałem że na głównej stronie też powinien się pojawić. Bardzo
sympatyczna gierka. Nie poświęcam wiele czasu na granie (mam go zawsze
mało, szkoda mi go na takie przyjemności), ale 19% udało już mi się
zrobić. :-)

Nowy transport GG

From: Jacek Konieczny <jajcus@bnet.pl>
To: jggtrans@lists.bnet.pl
Subject: OGŁOSZENIE: Jabber GG Transport w wersji 2.0.7 jest

Witam wszystkich (trzech) czytelników listy :-)

Mam przyjemność was powiadomić, że właśnie wydałem nową wersję
transportu. Najważniejsze zmiany od wersji 2.0.6 to:

* Usunięty błąd powodujący pad transportu gdy próbował z niego korzystać
ktoś z pustym zasobem

* Usunięty błąd powodujący pad transportu podczas próby odczytania
wersji klienta GG przez niezarejestrowanego użytkownika

* Usunięty inny pad transportu, związany ze zmianą statusu użytkownika

* Gdy połączenie transportu z serwerem GG ulegnie zerwaniu wszyscy
użytkownicy GG zostają oznaczeni jako niedostępni

* Gdy włączona zostaje niewidzialność poprzez niewidzialność Jabberową
transport nie robi się niewidzialny - jest widoczny jako "away", a nie
"offline"

* Poprawiona obsługa wiadomości wielolinijkowych

Dla pewności podaję sumę MD5 (był ostatnio włam na JabberStudio
i teoretycznie ktoś mógłby się bawić plikami):

1064637800b0cde435cebc31d27ecc88 jabber-gg-transport-2.0.7.tar.gz

Pozdrowienia,

Jacek

Jabber GG Transport 2.0.6

Jak obiecałem tak zrobiłem. Transport GG w wersji 2.0.6 jest już dostępny. Najważniejsze zmiany to:

  • Poprawiony błąd który powodował wywrotkę transportu po otrzymaniu
    wiadomości od niezarejestrowanego użytkownika (zdalny DoS).
  • Poprawiona obsługa zmian obecności – teraz jggtrans powinien prawidłowo
    obsługiwać wiele sesji Jabbera jednego użytkownika.
  • Usprawniona obsługa statusów niedostępnych kontaktów – powinny być one
    widoczne w większości klientów.
  • Polecenie import roster zostało oznaczone jako „nie zalecane”, a w
    formularzu rejestracyjnym można wybrać pobranie listy kontaktów analogiczne
    do działania komendy get roster.
  • Anulowanie subskrypcji transportu na obecność użytkownika (wywalenie
    transportu z rostera, lub zmiana subskrypcji na „to” lub „none”) nie powoduje
    wyrejestrowania użytkownika z transportu – pozwala to na uniknięcie
    automatycznego logowania do transportu.

Wygląda na to że wersja ta działa stabilnie, a przynajmniej stabilniej od
poprzedniej. Uaktualnienie raczej zalecane, ale oczywiście „NO WARRANTY”. 😉

Życie na zwolnieniu lekarskim

Jakoś dochodzę do siebie po środowej operacji. Wczoraj byłem w Bytomiu na
kontroli i dowiedziałem się, że wyjątkowo mało spuchłem jak na taki zabieg.
A żona i tak twierdzi że wyglądam „jak pół chomika”. Po kontroli wpadłem do
firmy oddać L4 i zrobiłem przy okazji parę pilnych rzeczy, z którymi beze mnie
by sobie nie poradzili. Problemem oczywiście wciąż było (i nadal jest) jedzenie
– obiad jadłem z 5 razy dłużej niż zwykle, a po nim byłem potwornie zmęczony
i obolały. W nocy, jakby jeden chory w rodzinie to było mało, Krysia dostała
gorączki (38.4) i zamiast spać była pełna energii. Musiałem się ewakuować do
drugiego pokoju na podłogę. Czasem jakoś znosiłem jak łaziła mi po twarzy, ale
teraz to było wykluczone.

Dzisiaj obudziłem się bardziej obolały niż wczoraj. Do pracy ani nigdzie
indziej nie musiałem iść, więc żeby się czymś zająć zabrałem się za

Transport GG
. Postanowiłem wreszcie poprawić parę błędów o które userzy mnie
od jakiegoś czasu męczą. Ale mogłem spokojnie to olać, bo najwyraźniej nikomu
bardzo na tych poprawkach nie zależało – nikt nie zgłosił żadnego z tych błędów
na JabberStudio. Przy okazji znalazłem
buga, który pozwala na bardzo prosty zdalny DoS – wywalenie transportu jedną
wiadomością. Oprócz tego poprawiłem obsługę statusów opisowych niedostępnych
użytkowników (przy okazji okazało się, że wina, przynajmniej u mnie, jest w
połowie po stronie jggtrans, a w połowie po stronie tkabbera – w obu podobno
poprawione), obsługę zmian dostępności (brana pod uwagę jest tylko dostępność
zasobu o największym priorytecie) i chyba jeszcze jakieś drobiazgi. U siebie już
to zainstalowałem, jak nic się nie wysypie to prawdopodobnie jutro będzie
release wersji 2.0.6.

Nowy transport i odchudzanie

Wczoraj dostałem informację, że jggtrans nie kompiluje się z nowym libgadu.
Dzisiaj to zbadałem i poprawiłem. Przy okazji dorobiłem obsługę połączeń TLS
do serwerów GG (wymagany jest w miarę nowy snapshot libgadu). Wcześniej
poprawiłem jeden błąd z powiadamianiem o obecności (nie zawsze był używany zasób
„GG”), a dzisiaj dodatkowo cofnąłem zmianę powodującą generowanie błędu zamiast
informacji o niedostępności – na razie chyba żaden klient nie jest na to
przygotowany.

No więc Jabber GG Transport, wersja 2.0.5 już jest. Źródła do ściągnięcia
można znaleźć tam gdzie zwykle.

A ja ostatnio z przerażeniem stwierdziłem, że mi brzucho rośnie. Przerażenie
spotęgował oczywiście blog
AlchemyXa
. Wszystkiemu oczywiście winne są: mój siedzący tryb życia oraz
drugie śniadanka w pracy (takie śniadanko to np.: dwie bułki z szynką,
opakowanie katarzynek i Prince Polo). No więc postanowiłem się odchudzać…

Dzisiaj poranek zacząłem od 50 brzuszków i 25 pompek (docelowo 100 i 50 co
rano), a na drugie śniadanie zjadłem dwie małe bułeczki (i cztery duże
plasterkami szynki). Ciekawe ile wytrwam… 🙂 Dobrze byłoby trochę na rowerze
pojeździć, ale nie wiem czy uda mi się (albo raczej czy będzie mi się chciało)
doprowadzić starą Gazelę do używalności. Idealnie byłoby jeździć na rowerze do
pracy (15 kilometrów w jedną stronę), ale to chyba dla mnie za dużo. Szczególnie
że po każdej takiej jeździe wypadałoby wejść pod prysznic, a przynajmniej się
przebrać. No i nie wiadomo czy rower to przeżyje i ile razy po drodze trzebaby
go naprawiać.

jggtrans ma błędy, PyXML ssie, a ja udzielam wywiadów…

Zaraz po wydaniu transportu GG okazało się, że jednak nie zawsze wysyła
<presence/> poprawnie – tzn. z zasobem „GG”. Przez to czasami kontakty GG
są widoczne podwójnie i nie znikają wtedy kiedy trzeba… Czyli niedługo 2.0.5.

PyXML jest tak wooolneeee, że dzisiaj pół dnia spędziłem na szukaniu
alternatywy, bo z taką szybkością działania jabgraph właściwie traci sens.
Oczywiście niepotrzebnie narobiłem pakietów do PLD z dziwnymi parserami,
bo ta przecież już był libxml2, także w postaci modułu do pythona. Zacząłem
więc przerabiać jabgraph z API DOM na API libxml2 – na razie zrobiłem jedynie
wczytywanie pliku konfiguracyjnego ale już witać dużą poprawę.

Udzieliłem też wywiadu – poważnie to brzmi :). Pytania (z błędami
ortograficznymi) zostały wysłane na listę dyskusyjną i „osoby upoważnione”,
czyli „ważne persony” miały na nie odpowiedzieć. Mnie też przypadł ten zaszczyt,
stąd wzmianka w blogu :). Trzeba przyznać, że same pytania były merytorycznie
OK – jestem ciekaw jak odpowiedzą pozostałe „persony”.

Jeszcze ciekawostka – jak zrobiłem sobie ikonki do transportów w tkabberze.
Umieściłem następujący fragment w ~/.tkabber/config.tcl:

proc postload {} {

	# ... inne ustawienia
    set roster::show_only_online 1
    set roster::show_transport_icons 1
    set roster::show_transport_user_icons 1
    set roster::roster(cached_category_and_subtype,jit.jabber.bnet.pl) {service icq}
    set roster::roster(cached_category_and_subtype,headlines.jabber.bnet.pl) {service rss}
    set roster::roster(cached_category_and_subtype,gg.jabber.bnet.pl) {service x-gadugadu}

    global serviceicon
    set serviceicon(x-gadugadu,available)   [Bitmap::get [pixmap services gg_online.xpm]]
    set serviceicon(x-gadugadu,chat)        [Bitmap::get [pixmap services gg_chat.xpm]]
    set serviceicon(x-gadugadu,away)        [Bitmap::get [pixmap services gg_away.xpm]]
    set serviceicon(x-gadugadu,xa)          [Bitmap::get [pixmap services gg_xa.xpm]]
    set serviceicon(x-gadugadu,dnd)         [Bitmap::get [pixmap services gg_dnd.xpm]]
    set serviceicon(x-gadugadu,unavailable) [Bitmap::get [pixmap services gg_offline.xpm]]
}

Ikonki przerobiłem z pakietu ikonek dla Psi jaki znalazłem w „plikowni”.
IMHO mogłoby to być zrobione lepiej – ale tak też jakoś działa. Może podyskutuję
jeszcze z autorami tkabbera na ten temat.

Jabber GG Transport 2.0.4

Wreszcie udało mi się przywrócić transportowi poprawną stabilność,
poprawić inne znane mi błędy i wydać bestię w wersji 2.0.4.

Podstawowe zmiany:

  • Wszyscy użytkownicy GG widoczni są z zasobem „GG”.
  • Formularze wyszukiwania i rejestracji zostały zmienione tak, by
    były kompatybilne ze wszelkimi implementacjami JEP-4, w szczególności
    z JAJCem (ciekawe czy się udało).
  • Dodana została obsługa Jabberowej niewidzialności. Potrzebne do
    tego jest odpowiednie wsparcie ze strony klienta i czasem wymaga
    gimnastyki od użytkownika. Np. w tkabberze po wybraniu statusu
    „invisible” należy ponownie zalogować się do transportu.
  • Poprawiłem też obsługę statystyk – wszystkie mogą być odczytane
    jednocześnie. Wcześniej problemu nie zauważyłem, bo tkabber zawsze
    czyta pojedynczo, ale jabgraph żąda wszystkich informacji na raz.

Pierwsza z tych zmian powoduje pewne ogłupienie klientów Jabbera
zalogowanych podczas upgrade’u. Niektóre kontakty mogą być widoczne
podwójne, a niektóre jako dostępne, mimo że dostępne nie są. Po
wylogowaniu się z Jabbera (nie transportu) i ponownym zalogowaniu
wszytko powinno wrócić do normy.

Jutro wracam do prac nad jabgraphem. Ale on się straszni muli…
Nawet psyco nie pomaga. Ale trudno, w końcu to tylko taki „proof of
concept”.

Postępy, postępy…

Wreszcie transport GG na moim serwerze się nie wywala – mmazur znalazł
błąd, którego sam nie mogłem dostrzec. A błąd był bardzo głupi.
Zostały jeszcze jakieś drobiazgi do poprawienia i będzie można wydać
wersję 2.0.4.

Jabgraph już też chodzi i rysuje wykresiki dla mojego transportu,
a dzięki wczorajszej poprawce na wykresie uptime’u nie ma kompromitującej
„piły”. Lada dzień na jabberstudio będą dostępne pliki pierwszego
release (w CVS już są) oraz demo na WWW.

Krysia też robi postępy: dzisiaj postawiła swoje pierwsze kroczki
„bez trzymanki”.

A teraz… na rybki! 🙂

PyXML nie taki straszny

Jednak PyXML ma wszystko co trzeba… z wyjątkiem dokumentacji. Okazało się
że można dokument wczytać jako obiekt DOM, jednocześnie go walidując. Przy
okazji znalazłem parę innych przydatnych mi funkcji. Ale to wszystko dopiero po
przejrzeniu źródeł, bo dokumentacja okazała się do niczego :-(.

Grzebię się w tym XMLu, żeby napisać programik do rysowania wykresików ze
statystyk Jabberowych otrzymywanych za pomocą protokołu
JEP-39. Transport
GG oczywiście ten protokół obsługuje, więc przynajmniej do niego będzie
można jabgrapha zastosować. Jabgraph już prawie skończony, poprosiłem
już o odpowiedni projekt na JabberStudio i, jeśli nic mi nie pokrzyżuje
planów, lada dzień powinien być dostępny do ściągnięcia.

Tymczasem transport GG po ostatnich poprawkach ciągle strasznie
niestabilny, a ja nie mogę znaleźć błędu który to powoduje –
użytkownicy jabber.bnet.pl niedługo gotowi będą mnie zlinczować.