PyXMPP — coraz poważniej

Zrobiłem w końcu stronę WWW dla
PyxMPP
. To dopiero początek, ale na jakiś czas powinno starczyć. Zacząłem
też robić zestawy testów jednostkowym (opartych o PyUnit — moduł
unittest) do testowania całości. Na pierwszy ogień poszło
pyxmpp.jabber.vcard do którego już jakieś testy były i trzeba
było je tylko przerobić na PyUnit i uzupełnić. Oczywiście wyszło parę błędów,
które poprawiłem. Później pyxmpp.jabber.disco, w którym chciałem
uzupełnić API, testy miały mi pomóc zrobić to tak, żeby nic nie zepsuć.
Pomogły, a przy okazji poprawiłem w testowanym module sporo błędów. Ogólnie
fajna rzecz takie testy i wbrew pozorom nie tak bardzo upierdliwa (mniej niż
uzupełnianie docstringów).

Dzisiaj zrobiłem jeszcze małą rewolucję. Wkurzało mnie już to, że
importowanie jakiegokolwiek modułu z pyxmpp powodował
importowanie całości (prawie). Wynikało to z tego, że dla wygody developerów
pakiet pyxmpp importował najważniejsze obiekty ze swoich modułów.
Od dłuższego czasu głowiłem się na tym, jak to rozwiązań nie tracąc tej wygody
i nie psując za bardzo kompatybilności wstecz i w końcu coś wymyśliłem. Teraz
samo z siebie nic niepotrzebnie się nie importuje, ale jak ktoś chce po
staremu, to wystarczy że raz sobie zaimportuje pyxmpp.all, i/lub
pyxmpp.jabber.all albo pyxmpp.jabber.all (jeśli
któregoś z nich używa). W ten sposób chyba i wilk syty i owca cała.

Następnie zabrałem się za CJC. Wkurzało mnie długie ładowanie konfiga, okazało
się, że to przez częste wywoływanie logging.debug()
wywaliłem i jest lepiej. Potem postanowiłem porawić pewnego upierdliwego i
często zgłaszanego buga — część wpisów w rosterze pojawiało się przed
zamiast za nazwą grupy. Okazało się, że porównywanie JIDów z innymi obiektami
było w PyXMPP spieprzone i niektóre JIDy były mniejsze od None. I
znowu testy jednostkowe się przydały, a zgłoszenie mogłem zamknąć.

I po cholerę to wszystko piszę? Nie wiem… może, żebyście wiedzieli jak
wygląda prawdziwie geekowski sylwester… Nie, żebym nie imprezował —
specjalnie z tej okazji mam tu colę (z cytrynką) i chipsy
;-).

Zasmarkane Święta

Z okazji świąt w pracy miałem mieć wolne od piątku do poniedziałku
włącznie. Sporo czasu, między innymi na ruszenie swoich projektów do przodu.
Jednak już w piątek rano wstałem tak zasmarkany, że było wiadomo, że święta
przechoruję. W przychodni mieli wolne, a do przypadkowego lekarza się nie
wybierałem, więc zostały domowe metody: wapno, witamina C i leżenie w łóżku.
Właściwie nie w łóżku, ale na ganganie (dmuchanym materacu), a jak się gangan
spuścił, to na podłodze (no dobra, na karimatach i kocach).

Chorowanie chorowaniem, ale Wigilia wigilią — w piątkową uroczystą
kolację zjedliśmy u teściów. Jakoś to przetrzymałem. Następnego dnia
pojechaliśmy na obiad do mojej mamy. Ale już niedzielny obiad u ojca sobie
darowałem — dziewczyny pojechały same. Przez te trzy dni nie zrobiłem
właściwie nic konstruktywnego — wylegiwałem się licząc, że choroba sama
ustąpi (latem jeden dzień leżenia pomógł). Przez to szybko mi się jeden
prezent skończył — Na glinianych nogach Pratchetta przeczytałem w
półtora dnia.

Jak już mowa o prezentach, to dostałem jeden z nich wyjątkowo geekowy:
domenę jajcus.net. W piątek niewiele się nią nacieszyłem,
bo, poza chorobą, nie mogłem zmienić DNSów (błąd w systemie do obsługi
domenki). Niby domena działała, ale światu się nią jeszcze nie chwaliłem, bo
dowcipnisie wystawili tam słynne zdjęcie z kaczuszką. ;-) Wczoraj
błąd został usunięty i domenka działa jak należy, nawet mój nowy e-mail
działa.

Strony WWW jeszcze nie zrobiłem. Wcześniej powinienem zrobić tę co
obiecałem, czyli stronę dla PyXMPP. Dokumentację HTML mam już wygenerowaną,
automatykę do wspomagania tworzenia modelu UML też. Nawet już się zabrałem za
pisanie strony… ale nagle sobie przypomniałem jaki to ciężko chory jestem.
;-)

Wracając do tematu, to wczoraj byłem u lekarza. Okazało się, że to znowu
infekcja w zatokach. Dostałem L4 i końską dawkę antybiotyku. Wygląda na to, że
działa. Nawet nie przyjmuję do wiadomości, że mogłoby nie działać —
jutro chcę wreszcie móc zbliżyć się do żonki bez obawy że ją zarażę, bo tej
bezpiecznej odległości mam już dosyć. Było to jednak konieczne, bo
jakby żona i córka się pochorowały, to chyba byłby koniec świata.

Doczego to doszło…

… portuję PyXMPP na
Windows. To znaczy gościu mi pisze co mu nie działa, a ja poprawiam. Wczoraj
wymieniłem swój resolver (który nie umiał znaleźć serwerów nazw na Windows) na
dnspython. Dzisiaj poprawiłem
streambase, żeby na sockecie używało recv() zamiast
read (Windows sucks, POSIX rulez! ;-)). I podobno
zadziałało.

Oprócz tego pracuję nad dokumentacją. Docstringi są już w całym kodzie,
HTML jakiś się z tego generuje. Właśnie kończę skrypt tworzący z drzewa
dokumentacji wyciągniętego przez epydoc plik XMI, który mogę
załadować do Umbrello aby narysować diagramy UML. Jeszcze tylko stworzyć
stronę WWW z tym wszystkim i może wreszcie jacyś developerzy się tym PyXMPP
zainteresują i ostatecznie pogrążę XMPPPY (konkurencję) ;-).

Jakiego rodzaju magię uprawiasz?

Znowu PubSub podesłał mi ciekawy artykuł (na zapytanie o Pythona):

Black magic, singularities and genies
. Wielu czytelników pewnie znajdzie tam coś o sobie.
Sam się przekonałem, że często uprawiam ciężkie czarodziejstwo (heavy wizardy),
czasem nawet czarną magię, liznąłem nieco głębokiej magii, stosuję programowanie voodoo (aczkolwiek tej
techniki nie lubię), a także, wstyd się przyznać, zdarzało mi się uprawiać kult kargo.

Na tę samą subskrybcje w PubSub złapałe mi się też zupełnie inna historia (i
teraz ciągle powraca) — O podróżach
pythona Paco
. Rzecz jest o wężu wysłanym razem z odtwarzaczem DVD do
serwisu Samsunga. (— naprawicie mi to DVD?, — oczywiście,
jak tylko wyjmie pan tego pythona
)

Blogowy nastrój…

Ostatnio jestem w jakimś takim blogowym nastroju. Nie dość, że chodzę
po różnych głupich (i mniej głupich) blogach (w czym mi PubSub.com pomaga),
po długiej przerwie napisałem parę postów, to jeszcze trochę odnowiłem mój
szablon. Nawet dodałem, poprzez brzydkiego hacka (takie są przecież
najfajniejsze ;-)), jeden ficzer, którego sam Jogger
nie daje. Co gorsza, już myślę o kolejnych…