pygglib 0.2 released

16 stycznia 2008, 18:37:35

Poziom: 0 | Kategoria: Komputerowo-internetowo, Python, Studia, Techblog.

Można powiedzieć, że dzisiaj światło dzienne ujrzała wersja 0.2 pygglib — biblioteki do obsługi protokołu Gadu-Gadu napisanej w pythonie. Wersja ta implementuje już większą część protokołu opisanego na stronach EKG.

Przy okazji pisania testów i implementacji okazało się, że panowie z Gadu-Gadu znowu mieszają coś w protokole, poza tym opis na stronach EKG jest już trochę nieaktualny (szczegóły zostały wysłane na listę dyskusyjną ekg-devel). W każdym razie dzisiaj miała miejsce prezentacja projektu na zajęciach i muszę przyznać, że większość prac, która została przewidziana, została zaimplementowana. Niestety zabrakło czasu na obsługę bezpośrednich połączeń oraz takich rzeczy jak połączenia konferencyjne, czy rozmowy głosowe, jednak jestem zadowolony z tego, co zostało napisane.

Przy okazji muszę ponarzekać na pythona... Przyzwyczajony byłem do tej pory do składni języka Ruby i trochę trudno było mi się przestawić na wcięcia i dwukropki. Poza tym podobno python jest językiem obiektowym, więc tym bardziej denerwowało mnie na przykład to, że lista nie ma metody "len" bądź "length", tylko jej długość możemy sprawdzić funkcją len(lista), co już, według mnie, za bardzo obiektowe nie jest.

Na osobną notkę zasługuje również coś, co według mnie powinno zostać naprawione wieki temu — w pythonie nie da się (pod Windowsem i w sposób najbardziej naturalny) przechwytywać sygnału SIGINT po wciśnięciu Ctrl+C (czyli wyjątku KeyboardInterrupt) w programach wielowątkowych! Jest to absolutna kompromitacja. W programie demonstrującym działanie pygglib chciałem stworzyć proste echo, które byłoby wyłączane przez wciśnięcie Ctrl+C, jednak, ponieważ biblioteka korzysta z listenera i obsługuje zdarzenia, przez co jest wielowątkowa, stało się to niemożliwe. Pod linuxem można ten błąd w dosyć prosty sposób ominąć poprzez zastosowanie os.fork(), jednak pod Windowsem takiej opcji nie ma.

To tyle narzekania na Pythona. Zainteresowanych zapraszam do pobrania źródeł biblioteki oraz testowania. Ewentualnie błędy i sugestie proszę zgłaszać na Trac projektu.

EDIT: Wypuściliśmy wersję 0.2.1, w której poprawiony został odczyt wiadomości wysyłanych z niektórych wersji Gadu-Gadu, na końcu których występowały czasem śmieci. Link do źródeł został zaktualizowany.

Tagi:

Komentarze do notki “pygglib 0.2 released”:

  1. rp

    Teraz możesz napisać klienta jabbera, bo freetalk zaczyna mi płatać różne figle.

  2. GhandaL

    Zawsze możesz zmienić komunikator :-)

  3. lionix

    Zawsze masz metodę len ale funkcja len() jest wygodniejsza.

    Co prawda z nowego wątku nie da się przechwycić wyjątku, ale nie widzę takiej potrzeby. Da się to ominąć okrężną drogą korzystając z biblioteki ctypes, poprzez ctypes.pythonapi.PyThreadState_SetAsyncExc.

  4. lionix
    [].__len__
    

    ah ten textile

  5. GhandaL

    Metoda z podrkeśleniami w nazwie jest zła, przede wszystkim nie jest mnemoniczna. Jeżeli chodzi o przechwytywanie KeyboardInterrupt, to napisałem, że chciałem zamykać aplikację wywołując SIGINT, a przed zamknięciem powinienem się wylogować (wywołać metodę logout), stąd potrzeba przechwytywania wyjątku.

  6. lionix

    nie wiem co rozumiesz przez mnemoniczna ale idea tego jest taka że len miało być przeładowaniem operatora, tak jak np add

    nie wiem bardzo o co chodzi ale KeyboardInterrupt zawsze można złapać w głównym wątku

  7. GhandaL

    Właśnie o to chodzi, że nie da się w głównym wątku przechwycić KeyboardInterrupt, to jest bug, który nie wiem kiedy zostanie naprawiony.
    Natomiast jeżeli chodzi o mniemoniczną ideę, to chyba bardziej naturalnym jest wywołanie lista.length(), ewentualnie lista.length niż len(list) lub lista.__len__(). Nie twierdzę, że nie można się do tego przyzwyczaić, piszę tylko, że moim skromnym zdaniem takie rozwiązanie jest nienaturalne.

  8. Cinu

    GhandaL, a naturalne jest lista5, albo slownik[‘cos’]? Czy moze powinno byc list.get(5), slownik.get(‘cos’)?

  9. Cinu

    Textile czasem nie jest fajne :-/ Mialo byc lista [ 5 ] – mam nadzieje, ze tutaj sie nie zrobi odnośnik ;)

  10. GhandaL

    Cinu, wiesz, o co mi chodzi (mam nadzieję). A słownik, czy tablia (lista) z indeksem/kluczem w [] jest jak najbardziej naturalna.

  11. Cinu

    Wiem o co Ci chodzi. Oczywiście zgadzam się z Tobą, że [] jest naturalne. Ale czym takim się różni len(lista) od lista[‘cos’] z punktu widzenia „wizualnej” obiektowości? Niczym. Różnica polega jedynie na tym, że lista[‘cos’] jest bardzo powszechne, a len(lista) nie. Jesteś przyzwyczajony do konstrukcji [], dlatego nie przeszkadza Ci to, że nie jest „wizualnie” obiektowa.

  12. GhandaL

    Tym się różni, że pisząc lista[‘cos’] widać od razu, że wywołujesz metodę [] na obiekcie lista (modulo kropka po nazwie obiektu). Wywołując len(lista) aplikujesz jakąś funkcję (niewiadomo skąd) z zewnąrz do obiektu lista. To nie jest czysto obiektowe według mnie i trochę kłóci się z ideą obiektowości (Smalltalkową, gdzie wszystko jest obiektem).

  13. quake

    A obsługa obrazków będzie?

  14. attitude

    Pygglib bardzo przydatna , ale mam mały problem zostawiłem URL :D Byłbym wdzięczny za pomoc

Zostaw komentarz (Textile włączony):