Grająca Starówka

Wczoraj po południu postanowiłem pójść na wykład z serii GNU/Politechnika
o sambie. Ale tam nie dotarłem. Zatrzymał mnie blues na ulicy Szkolnej. Później
okazało się, że impreza ma szerszy zasięg i jeszcze: na Kaczyńcu grano rocka,
na Grodowej grała orkiestra dęta KWK Makoszowy, na rynku była „muzyka klasyczna
i promenadowa”, a na Krótkiej był „wieczór z Gliwickim Teatrem Muzycznym”.
Wcześniej nic o tym nie wiedziałem, bo ostanio nawet nie mam czasu oglądać
plakatów na mieście.

Najbardziej podobał mi się koncert bluesowy i…. orkiestry dętej. Jeśli
chodzi o muzykę klasyczną, to najbardziej podobały mi się skrzypaczki
z pierwszego kwartetu który grał na rynku ;-). Każda scena miała oczywiście
oświetlenie (które do niczego nie służyło, bo było jeszcze jasno), nagłośnienie
i akustyka. Akustyk obsługujący orkiestrę dentą siedział nad konsoletą
i rozwiązywał krzyżówkę – co miał biedak robić, jak orkiestra radziła sobie
bardzo dobrze bez jakiegokolwiek nagłośnienia 🙂

Najwięcej ludzi było przed sceną „wieczoru z Teatrem Muzycznym”. Mnie akurat
ich występy najmniej się podobały. Prawie za każdym razem jak tam zaglądałem, to
zamiast muzyki był gościu opowiadający jacy to ich artyści są wspaniali. A jak
grali, to jakieś przeboje operowe i operetkowe, które nie bardzo przypadały mi
do gustu.

Na scenie rockowej jako pierwszy wystąpił jakiś dziwny zespół grający
oczywiście covery, ale chyba nienajlepiej. Kolejny zespół wypadł już lepiej.

Po 18-tej dołączyły do mnie żona i córka. Okazało się, że roczna Krysia
czuje bluesa – kiwała się w rytm muzyki, uśmiechała się przy tym i protestowała
głośno gdy przenosiliśmy się gdzie indziej. Koncert rockowy (już tego lepszego
zespoły) też się jej podobał, ale chyba trochę mniej.

Uważam że ta impreza to wspaniały pomysł i chciałbym za nią bardzo
podziękować organizatorom. Szkoda tylko że nie została do końca doceniona przez
Gliwiczan – czasem artyści grali dla dosłownie tylko kilku osób. A przecież
często grali bardzo dobrze.

Niestety nie mogłem zostać na Grającej Starówce do końca (21:30), bo
obowiązki „tacierzyńskie” wzywały – 20:00 to czas kąpieli. Dzisiaj dalszy ciąg
imprezy (też 16:00 – 21:30) i może znowu tam zajrzę.

Coś mi ostanio odbiło…

… i postanowiłem napisać własny serwer Jabbera – w pythonie, zgodny ze
specyfikacją XMPP i w ogóle bajerancki. Pewnie i tak nic z tego nie wyniknie. Na razie zacząłem robić moduł do
obsługi strumieni XMPP (jabber.py mnie nie zadowala), oparty o libxml2.
Okazało się, że libxml2 bez poprawek się do tego nie nadaje, ale
przygotowałem odpowiedniego patcha i jest OK. Mam nadzieję że go zaaplikują do
oryginalnych źródeł.

Jednak na razie musiałem sobie pisanie modułu i serwera odpuścić – w końcu
za tydzień będę prowadził wykład i trzeba jakąś prezentację przygotować. Na
razie porobiłem trochę screenshotów (jak ktoś ma jakieś ciekawe screenshoty
klientów jabberowych, to jestem chętny) i walczę z OpenOffice (chyba jednak
LaTeX bardziej mi odpowiada).

Ale przygotowanie prezentacji pewnie też sobie zaraz daruję, żeby dołączyć
do Iwony i Krysi, które pojechały na spacer na działkę 🙂

Z innej beczki: chyba w PLD szykuje się (albo tylko szykował) przewrót.
„Rebelianci” chcieli, żebym ich poparł, ale ja wolę się nie mieszać. Też mnie
kloczek wkurza, ale miejscami rozumiem jego rację, racje „rebeliantów” zresztą
też. Ja tylko chcę mieć działającą dystrybucję, z w miarę aktualnymi zasobami,
a na razie żadna ze stron nie jest w stanie mi tego zagwarantować.

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ć.

Koszmar XML w pythonie o raz inne duperele

Chciałem wczytać plik XML, zwalidować go zgodnie z pewnym DTD,
przetwarzać poprzez API DOM i wypluć uzupełniony. Nic specjalnego. To co
jest załączone w pythonie (minidom) ani nie waliduje, ani nie potrafi
ładnie wypluć (taki pretty-print z wcięciami itd.). Jest też PyXML. Ma
kompletny DOM, z PrettyPrint oraz parser walidujący – można użyć
albo jednego, albo drugiego. Dwa razy tego samego pliku
parsować nie mam zamiaru – walidację sobie odpuściłem. Do tego doszedł
jeszcze jabber.py z własnym parserem i niby-DOMem. 😦 A mogłoby być tak
pięknie – python to wspaniały język, tylko coś porządnej biblioteki
dorobić się nie może.

Transport GG po ostatnich przeróbkach mi się wywala. Ale oczywiście
nigdy pod gdb. To znaczy raz mi się wywalił pod gdb i jeden głupi błąd
poprawiłem, ale wywala się nadal.

Córeczka właśnie się drze z krzesła. Nie mam pojęcia jak na nie
wlazła… Wcześniej przeglądała (z bardzo mądrą miną) „Układy
półprzewodnikowe” Tietze’a i Schenka. Czy nie za szybko ona nam
dorośleje (przypominam ma roczek).

Znalazłem dzisiaj też coś dla wszystkich co się uważają (tak jak ja)
za nerdów i/lub geeków. Przeczytajcie kto to:
nerd
i geek.
Szczególnie pierwsze znaczenie (w obu przypadkach) oraz trzecie (w
przypadku geeka) jest ciekawe 🙂 .

Wczoraj…

Mama jest zawalona egzaminami do sprawdzania, więc zamiast obiadu u niej
musieliśmy sami sobie coś zorganizować. Wybraliśmy się więc do pizzerii.
Pizzeria okazała się porządniejszą restauracją i zamiast Pizzy ja
zamówiłem „żeberka na ostro z purée fasolowym”, a żona Lasagne ze
szpinakiem. Dobre było, ale rachunek podano mi z cukierkami – dla
osłody sumy jaka tam widniała. Krysia przez większość naszego obiadu
słodko spała w wózeczku obok stolika.

Potem Iwona z Krysią pojechały do domu, a ja udałem się na wykład
o DNSie zorganizowany przez SLUG. Nie dowiedziałem się
może niczego nowego, ale warto było, chociażby żeby spotkać się
z lokalnym „community”. Wykład był poprowadzony bardzo dobrze, IMHO
wypadł najlepiej z wykładów z serii GNU/Politechnika, na których byłem.
No, może prelegenci się zbytnio rozgadali (trwało to prawie trzy
godziny), ale na ten temat można by mówić i o wiele dłużej.

Jak zwykle na wykładzie rozdano ankiety. Tym razem było tam pytanie
„na jakie jeszcze wykłady się wybierasz?”. Z tego co ludziom zza ramion
podejrzałem, to mało kto wybiera się na mój wykład o Jabberze. Może
i lepiej – kompromitacja będzie mniejsza :). Myślę że zainteresowanie
tematem jest małe, bo mało kto ten temat traktuje poważnie
– większości kojarzy się on z GaduGadu i rozmowami w stylu „Skond
klikasz? Ile masz latek?”. A może rzeczywiście, to nie jest
wystarczająco poważna tematyka, aby wykład o niej prowadzić?

Problemy z browsingiem i nowy jggtrans

Wczoraj dopisałem obsługę JEP-11 (browse) do SMS-transportu. Dzisiaj smoku mi
napisał, że to nie działa. Okazało się, że z Psi rzeczywiście nie bardzo. Ale
Psi obsługuje to browse, tak jak serwer jabbera – wyszło na to że jabberd też
nie obsługuje JEP-11 zgodnie ze specyfikacją. Później sprawdziłem jeszcze swój
transport GG – też niezgodny ze standardem. Zacząłem więc poprawiać…

Patch na jabberd-1.4.x jest dostępny tutaj.
Należy też pamiętać o poprawieniu sekcji <browse/> pliku jabber.xml.

Nowy transport GG (oprócz poprawienia browse ma ulepszoną obsługę proxy)
można znaleźć tam gdzie zwykle.