Zaloguj się

Jog Jajcusia

xmpp:jajcus@jajcus.net

Rzucam to wszystko...

Zastanowiłem się nad tym co napisał zgoda w komentarzach do ostatniego wpisu i chyba muszę się z tym zgodzić. Ci wielcy gracze to nic dobrego, zaraz wszystko zepsują. Teraz Sun zaczyna — psując wspaniałą ideę tekstowej komunikacji przez jakieś VoIP, videokonferencje itp. wynalazki w swojej implementacji. Potem będzie Microsoft, skoro jest RFC, to będą musieli zrobić swoją implementację. W każdym Windows będzie klient Jabbera, którego nawet moja matka obsłuży. Zdaje się, że Apple już coś takiego zrobiło (na szczęście u nas Maki nie są zbyt popularne). No i po co to nam? Nie po to robię trudnego do zainstalowania, brzydkiego klienta CJC, żeby gadać z ludźmi, co u siebie mają śliczne cukierkowe okienka i, co gorsza, cieszą się z narzędzia, którego używają! Nie po to robiłem transport GG, żeby przestał być potrzebny jak ludzie z GG uciekną.

Ostatecznie stwierdzam, że dam sobie z tym spokój. Dość ślęczenia nad PyXMPP i CJC, wystarczająco czasu na to zmarnowałem. Transport GG też okazał się niewypałem, zamiast pozwalać ludziom z GG gadać z Jabberowcami, jak już muszą, to spowodował przejście iluś użytkowników GG na Jabbera — straszne. Tego bloga też zamykam, przeniosę się gdzieś, gdzie nie ma takich niepotrzebnych bajerów jak dodawanie notek z jakiegoś komunikatora, czy powiadomienia, co rozpraszają człowieka przy normalnej pracy.

Więcej o tym, czemu XMPP ssie i czemu nie chcę mieć z tym już nic wspólnego opowiem na Pingwinariach, zamiast wykładu o tym głupim publish-subscribe — myślę że ludzie będą mi za to wdzięczni.

8 komentarzy do wpisu „ Rzucam to wszystko...”


Różności...

Ten wpis napisałem wczoraj, ale że Jogger nie działał, to idzie teraz...

Mozilla Team mnie zaskoczyło. Gdy mi po upgrade się Firefox wywalał przy wpisaniu czegokolwiek w pasku adresu, to użyłem Quality Feedback Agent do wysłania raportu. Bez jakichkolwiek nadziei, że coś z tego wyniknie. A jednak. Dostałem odpowiedź, z automatu, że problem został wyjaśniony, instrukcję jak sobie z nim poradzić (sam sobie poradziłem wcześniej) i radę na przyszłość. Czyli to jednak działa :-).

A ostatnio znowu trochę dłubię przy CJC i PyXMPP. Repozytoria SVN na JabberStudio już mi działają, więc mogę commitować co zrobię i jest jakaś motywacja. Kommitnąłem poprawki które się nazbierały w czasie gdy JabberStudio nie działało i poprawiłem jakieś drobne błędy w CJC, które zresztą znałem już od dawna i od dawna wiedziałem jak je poprawić. A w PyXMPP zrobiłem Pythonowe wersje klas i funkcji z kompilowanego modułu _xmlextra. Są to obrzydliwe hacki, dużo wolniejsze od oryginałów, ale przynajmniej można teraz PyXMPP używać bez żadnego kompilowania (zakładając, że się ma moduły libxml2 już skompilowane), co powinno ułatwić coniektórym instalację. Przy okazji powkurzałem się na libxml2 który potrafi generować bzdurny kod XML po zmianie przestrzeni nazw elementu w drzewie dokumentu. Zgłosiłem to na listę dyskusyjną, może też zgłoszę do bugzilli. Jakoś ten problem nie wpłynął na działanie CJC (przypadek), więc na razie go olewam. Muszę jeszcze odpalić ponownie automatykę do snapshotów, żeby ludzie mogli moją aktualną twórczość ściągać.

Dodaj komentarz do wpisu „ Różności...”


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 ;-).

9 komentarzy do wpisu „ PyXMPP — coraz poważniej”


Bye-bye, CVS

Miam na tyle dość CVS, że postanowiłem przenieść moje Jabberowe projekty do Subversion. Okazało się to łatwiejsze niż przypuszczałem. Na JabberStudio jest zainstalowany SVN, skonfigurowany svnserve, a nawet jakiś ViewCVS do tego.

Wczoraj wieczorem przemigrowałem repo PyXMPP. Dodałem skrypt do generacji ChangeLog (tym razem nie po stronie serwera) oraz automatykę do generowania snapshotów — dla tych co uparcie bronią się przez SVN, a chcieli by spróbować świeżego PyXMPP czy CJC.

Następne w kolejce jest oczywiście CJC, no i może Transport GG. Zobaczymy co z tego wyniknie.

19 komentarzy do wpisu „ Bye-bye, CVS”


Mam go! :-)

Od wielu miesięcy gnębi mnie jeden błąd w CJC: czasem gdy ja coś robię (np. przełączam bufory) i jednocześnie coś przychodzi z sieci to się wiesza. Typowe zakleszczenie (deadlock). Wiadomo, że gdzieś źle blokady wątków zastosowałem, ale to się strasznie źle debuguje (dlatego IMHO wątków należy unikać jak ognia). Kiedyś próbowałem, ale bardzo się nie postarałem i poległem. Potem po prostu problem olewałem (pojawiał się tylko raz na jakiś czas, więc można było z tym żyć). Wczoraj powiesiło się znowu i postanowiłem dzisiaj coś z tym zrobić.

Najpierw więc dodałem do CJC obsługę pliku konfiguracyjnego dla modułu logging ze biblioteki pythona (świetna rzecz!). Potem zapuściłem na źródłach coś takiego:

find . -name "*.py" | xargs perl -pi -e \
's/^(\s+)([\w.]+\.(acquire|release)\(\))[ \t]*$/\1logging.getLogger("lockdebug").debug("\2..."); \2; logging.getLogger("lockdebug").debug("...\2")/'

Po tej operacji odpaliłem CJC, wszedłem na dwa czaty grupowe i zacząłem przełączać bufory jak szalony. Po jakiejś minucie, czy dwóch zwiesił się (Murphy poszedł na piwo?). No i chyba mam go! :-)

2004-10-24 16:49:38,503 window.py: 167 th#16386 DEBUG self.screen.lock.acquire()...
2004-10-24 16:49:38,516 window.py: 167 th#16386 DEBUG ...self.screen.lock.acquire()
2004-10-24 16:49:38,524 text_buffer.py: 42 th#65540 DEBUG self.lock.acquire()...
2004-10-24 16:49:38,525 text_buffer.py: 42 th#65540 DEBUG ...self.lock.acquire()
2004-10-24 16:49:38,526 window.py: 252 th#65540 DEBUG self.screen.lock.acquire()...
2004-10-24 16:49:38,527 text_buffer.py: 208 th#16386 DEBUG self.lock.acquire()...

Teraz pozostaje to poprawić i liczyć na to, że to odosobniony przypadek :-)

4 komentarze do wpisu „ Mam go! :-)


Nowy ejabberd

Niedawno wyszedł Ejabberd 0.7.5. Czekałem na niego, bo miał mieć StartTLS i ulepszony interfejs administracyjny. Wczoraj zainstalowałem go na jabber.bnet.pl. Przy okazji wyszły błędy (dotyczące AMD64, którego akurat używam na tym serwerze) w paczce dla PLD.

I rzeczywiście, na stronie administracyjnej pojawiła się opcja dodawania userów, a przy połączeniu możliwość użycia StartTLS. To ostatnie objawiło się w CJC pięknym tracebackiem i komunikatem błędu, że zły XML przyszedł. Na konsoli XML śmieci. Oczywiście coś spieprzyłem przy ostatnim oczyszczaniu kodu. Nie miałem StartTLS na serwerze, to nie zauważyłem.

Dzisiaj w pracy poprawiłem, wspomniane błędy w paczce ejabberd, a także problemy w budowie erlanga na builderach. W oficjalnym Ac oba pakiety powinny się niedługo pojawić. Wieczorem poprawiłem też obsługę StartTLS w PyXMPP i CJC (oba trzeba było poprawić) i już mogę się cieszyć szyfrowanymi połączeniami z serwerem. I to na normalnym porcie! :-)

6 komentarzy do wpisu „ Nowy ejabberd”



Jesteście obserwowani...