Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Python] PyTalk un client Jabber en PyQt4

    23 janvier 2008 à 10:50:23

    Bonjour,

    Je viens vous présenter PyTalk, un client Jabber en Python et PyQt4.

    Overview


    Dans le cadre de mes études, j'avais à choisir un projet est à le mener de bout en bout (du début à la fin)
    Certains on choisi de faire des sites web, mais j'avais déjà une longue expérience dans ce domaine grâce entre autre au site du zéro et à ses cours sur le sujet.

    J'ai donc décidé d'innover un peu et de dépasser les limites de ce que je savais faire.
    Dans le même temps, une entreprise m'a demandé de trouver une solution à ses problèmes de visioconférence derrière un firewall.

    Il faut savoir que la visioconférence demandant un fort débit (envoyer 15 images de 10ko par secondes ça fait déjà du 150kb/s en upload et en download * nb de client) donc pour ne pas avoir de problème d'engorgement, on utilise le P2P.
    Cependant, le P2P derrière un Firewall ou une Passerelle, c'est la galère. -> Mon rapport sur le sujet en Anglais

    Je me suis donc penché sur la question, et la meilleure solution c'est de suivre les innovations dans ce domaine.
    Une seule direction : Jabber.

    Jabber est un protocole de messagerie instantanée qui a le mérite d'être OpenSource, d'être en streaming de XML et d'être extensible à l'infini grâce à cela.

    Google ayant basé son client GTalk dessus a travaillé pour mettre en place un système d'audio conférence.
    La XMPP Foundation travaille actuellement à la standardisation de ce qui s'est appelé Jingle (Communication P2P avec Jabber : Audio, Video, Transfert de fichier, Partage d'écran ...)

    La solution qui sera très bientôt proposé au programmeur a déjà été adopté par AOL pour son client AIM, Microsoft qui compte bien utiliser Jabber dans sa prochaine version de Windows Live Messenger.

    PyTalk dans tout cela


    Pour suivre le mouvement et le comprendre rien de mieux que de travailler sur un client Jabber.
    Un client Jabber c'est l'ouverture sur tous les protocoles de messagerie.
    Un client Jabber ne dialogue qu'avec son serveur qui lui s'occupe de tout (Discussion avec les autres serveurs (MSN, Jabber.org, talk.google.com, jabber.nuxo.net et tous les serveurs jabber)

    Les buts de PyTalk


    • S'adapter à l'environnement de l'utilisateur
    • Être multi-plateforme
    • Être OpenSource
    • Permettre la vidéo et audio conférence avec TOUS les clients Jabber existants même ceux qui n'ont pas encore le support Webcam
    • Être intertionnalisé
    • Être complet autant que possible


    Seulement, il faut bien commencer.
    Au départ, j'avais choisi Java, car ça plaisait bien à mon tuteur de projet et puis faire une application en Qt Jambi ça me plaisait bien.
    Mais sous Mac Qt Jambi c'est un calvaire alors j'ai décidé de programmer le tout en Python avec PyQt4.

    Les Frameworks


    J'ai utilisé :
    • xmpppy : Framework de communication Jabber. (Simple et complet)
    • PyQt4 : Framework de réalisation graphique GUI (Simple et très très complet)
    • PyDNS : Framework utilisé par xmpppy pour faire les résolutions de nom de domaines en Python
    • Enum : Un moyen d'avoir des enums en Python


    Version 0.1


    Maintenant après 4 jours de travail effréné (c'est ça d'être un Geek expatrié), je peux vous présenter une première version utilisable.

    Elle est mise à jour en continue utilisaient le SVN pour la tester :
    $ svn checkout https://svn.tchoy.net/svn/jTalk/trunk/pyTalk/ PyTalk


    Pour les frameworks, vous en avez une version de chaque ici (hormis Qt4 et PyQt4 trop gros) :
    $ svn checkout https://svn.tchoy.net/svn/jTalk/trunk/deps/ dependances_PyTalk


    Bien évidement, les Linuxiens seront bien avantagé pour tester l'application car en deux coups de svn et un coup de package manager, ils pourront tester en faisant :
    $ cd PyTalk
    $ python pytalk.py


    Pour les autres, je viens de faire le Bundle Mac et le Exe Windows que vous pouvez trouver ici : http://pytalk.trunat.fr/downloads/

    Quelques screenshots


    Image utilisateurImage utilisateurImage utilisateurImage utilisateurImage utilisateur

    J'ai besoin de votre aide pour tester et me faire tous les rapports de bugs que vous voudrez.
    Ainsi que les modules Jabber que vous utilisez le plus.

    Je vous ferez un Roadmap très bientôt.
    • Partager sur Facebook
    • Partager sur Twitter
      27 janvier 2008 à 10:48:16

      Dès que y a un .exe je test avec plaisir :p , hop je met le sujet en surveillance par mail :D
      • Partager sur Facebook
      • Partager sur Twitter
        27 janvier 2008 à 13:11:55

        Je t'ai fais un .exe du coup ;)
        Il me reste un peu de travail pour avoir une version complète, mais elle est déjà utilisable.
        Sous Windows, impossible de se connecter à mon compte Google Talk sans aucune raison :(

        http://download.trunat.fr/PyTalk/PyTalk_0.1_win32_beta1.zip
        Il suffit de décompresser le Zip et de lancer pytalk.exe

        J'en ai aussi profiter pour ouvrir le site officiel de PyTalk : http://pytalk.trunat.fr/

        Pour Mac OS X je suis en train de bosser sur le Bundle, mais je rame un peu beaucoup ...
        • Partager sur Facebook
        • Partager sur Twitter
          27 janvier 2008 à 19:46:35

          Merci, effectivement je ne peux pas me connecter non plus avec le compte Jabber que j'ai crée :(
          • Partager sur Facebook
          • Partager sur Twitter
            27 janvier 2008 à 21:01:55

            Comment tu vas faire pour permettre la vidéoconférence chez les autres clients qui n'ont pas implémenté la fonction o_O ?

            Et sinon j'ai pas bien compris, j'installe quoi ? j'utilise quel SVN ?
            • Partager sur Facebook
            • Partager sur Twitter
            Administrateur Wikipédia. Ancien staffeux du SdZ.
              27 janvier 2008 à 21:03:48

              J'ai réussi à avoir les fichiers avec ce svn :

              https://svn.tchoy.net/svn/jTalk/trunk/pyTalk

              Mais bon je ne peux rien lancer étant sous windows je peux mettre pyqt mais le reste :-°
              • Partager sur Facebook
              • Partager sur Twitter
                27 janvier 2008 à 21:24:34

                Sous Windows mieux vaut utiliser l'exécutable que j'ai fais.
                J'en referais un a chaque version cruciale.

                Sinon, c'est aussi possible.
                Il faut installer Python, PyQt4, Qt4, Enum, xmpppy, PyDNS.
                Vous trouverez un version des moins courants ici : https://svn.tchoy.net/svn/jTalk/trunk/deps/

                Pour le svn voici les commandes :
                svn checkout https://svn.tchoy.net/svn/jTalk/trunk/pyTalk/ PyTalk


                Pour les dépendances :
                svn checkout https://svn.tchoy.net/svn/jTalk/trunk/deps/ PyTalk_dependances


                Après pour installer les dépendances c'est
                python setup.py install


                Pour installer PyQt4 et Qt4, il vaut mieux utiliser son gestionnaire de packet sur sa distrib.

                Pour lancer le programme :
                python pytalk.py


                La connexion Jabber peut prendre du temps. Pour être sur que ça se connecte pas sur ton serveur Jabber, il faut que tu es la réponse Connection Error (une jolie boite de dialogue).

                Pour la visioconférence, il faut tester ;)

                EDIT : J'ai trouvé le problème avec Windows, c'est la recherche avec PyDNS qui n'est pas parfaite et qui est lente.
                En utilisant DNSPython c'est non seulement instantanée mais ça fonctionne sous Windows.

                Je me suis rendu compte que les champs server et port n'était en fait pas pris en compte.
                Donc il se basait uniquement sur la recherche SRV oO :-° qui ne semble pas fonctionner sous Windows.

                Maintenant, si vous remplissait les champs server et port ça doit fonctionner.
                J'ai aussi mis une réponse par défaut pour gmail.com sur talk.google.com avec le port 5222.

                Vous pouvez maintenant tester la nouvelle version corrigée pour Mac et PC : http://pytalk.trunat.fr/downloads/

                Merci pour vos retours ;)
                • Partager sur Facebook
                • Partager sur Twitter
                  7 février 2008 à 18:31:11

                  Bonjour Bonsoir,

                  Je vais commencer mon travail de fin d'étude la semaine prochaine dans plus ou moins le même domaine que toi.
                  En fait il s'agira pour moi de créer un petit logiciel couplé à un site de rencontre (www.nice-people.be) qui permettra aux membres de chatter entre eux.
                  Il y aura donc un "messenger" sur PC et il devrait y avoir aussi un chat intégré au site. Sachant que les utilisateurs doivent pouvoir discuter entre eux peu importe d'où il se connecte (app client ou chat on-line).

                  La personne responsable m'a demandé de pouvoir utiliser la webcam.

                  Puis-je te demander où tu en es de ce coté étant donné que tu as quelques mois d'avance.
                  Utilises-tu Jingle?
                  Sinon qu'utilises-tu?
                  La communication entre une app cliente et un app web avec webcam en P2P te semble-t-elle possible, sachant que j'utiliserai très probablement C#.

                  Merci d'avance.

                  Bonne soirée.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 février 2008 à 19:05:32

                    Pour ma part je ne me suis pas encore lancer dans Jingle et j'utilise mebeam.com pour les conversation Webcam.
                    C'est totalement configurable et intégrable donc ça me convient.

                    Pour le P2P comme tu le définis à part le faire en flash avec un server RED5 ou Flash Media Server c'est pas possible.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 février 2008 à 12:07:08

                      Bonjour,

                      MeBeam offre une API que l'on peut utiliser dans sa propre applic?
                      Tout ce que j'ai trouvé c'est leur chat on-line et la version flash téléchargeable :euh:
                      • Partager sur Facebook
                      • Partager sur Twitter
                        10 février 2008 à 18:43:28

                        Tu as une API bien sur mais pour moi l'intéret est justement de pouvoir le lancer dans le navigateur et donc de se détacher de l'application.

                        On peut donc faire des visio conférences avec des gens qu'elle que soit l'application utilisée et le fait qu'elle soit compatible vidéo ou pas.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          10 février 2008 à 20:56:21

                          Ah oui ok d'accord... Tu rediriges sur MeBeam, tu ne gère pas la webcam en elle-même dans ton applic...

                          Tu ne connais pas par hasard d'autres API que Jingle qui implémente la webcam?
                          J'ai lu que Jingle n'implémentait que l'audio et le transfert de fichier, les articles datent un peu, mais je n'ai rien trouvé actuellement qui dit que Jingle a avancé et que la webcam est gérée :(
                          J'ai découvert SIP aujourd'hui, je cherche un peu de ce coté...
                          Mais en C# y a pas encore grand chose...

                          Bonne soirée.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            10 février 2008 à 22:46:07

                            En même temps, tu vas pas pouvoir faire grand chose de portable en C#. Avec Mono tu ne bénéficie pas de toute la puissance de .NET, et il faut oublier les utilisateurs Mac me semble-t-il.
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Administrateur Wikipédia. Ancien staffeux du SdZ.
                              11 février 2008 à 0:22:34

                              Oui je ne saurais que te déconseiller le C# et toute cette m***e de .Net.
                              Mais ce n'est pas mon rôle ici ...

                              Donc pour en revenir à nos moutons, je dirais juste que la meilleure solution me semble d'utiliser Jingle.
                              Le RTP en Audio fonctionne exactement comme pour la Vidéo. Donc avec Jingle tu pourras t'en sortir.

                              SIP me semble aussi une excellente idée et bonne solution d'autant plus qu'à l'avenir il devrait être géré matériellement.

                              Après comme tu bosse dans du .net et que tu t'en fous donc de la portabilité rien ne t'empêche de te faire ton propre protocole de transmission P2P ....
                              • Partager sur Facebook
                              • Partager sur Twitter
                                11 février 2008 à 21:51:02

                                Bonsoir,

                                une autre petite question...

                                Comment peut-on mémoriser les identifiants de l'utilisateur de manière sécurisée pour une connexion automatique?

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  12 février 2008 à 11:45:44

                                  Le mieux c'est de le crypter avec une clef connue par le programme et avec un moyen de cryptage decryptable (pas un hash).

                                  Ensuite si tu utilise Qt, tu as la classe QSettings qui s'occupe d'enregistrer les infos dans le Registre sous Windows ou dans des fichiers sous Unix.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    14 février 2008 à 22:52:09

                                    Je suis sous Ubuntu 7.10.
                                    J'ai installé DNSPython, PyQt4, SIP, Qt4 avec le gestionnaire de paquets.
                                    Le reste avec svn.

                                    Voilà mon erreur:

                                    Citation : terminal

                                    quentin@jorkar:~/PyTalk$ python pytalk.py
                                    Traceback (most recent call last):
                                    File "pytalk.py", line 10, in <module>
                                    from ConnectorThread import ConnectorThread
                                    File "/home/quentin/PyTalk/ConnectorThread.py", line 2, in <module>
                                    import xmpp
                                    ImportError: No module named xmpp



                                    Que faire?
                                    Je suis avec attention le développement de ton projet depuis longtemps. Bravo! car je pense que la gestion de l'audio/vidéo est vraiment LE truc qui manque dans les clients Jabber!
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      27 février 2008 à 23:16:07

                                      Merci de ta réponse.
                                      Déjà, je comprends pas bien comment ça se passe avec le svn et les dépendances:
                                      si j'éxécute les commandes que tu as données plus haut dans mon home:

                                      Déjà je vais avoir 2 dossiers, Pytalk/ et Pytalk_dependances/ dans mon home. Donc comment va faire pytalk pour appeler les dépendances? Faut-il que je copie tous les fichiers dans un seul et même dossier et que j'éxécute setup.py et pytalk.py ensuite?
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        28 février 2008 à 1:02:10

                                        Ah non pas du tout oO
                                        Il faut installer les dépendances.

                                        python setup.py install

                                        Pour XMPPPy il faut copier le dossier xmpp dans /usr/lib/python/site-packages/
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          28 février 2008 à 12:56:39

                                          Citation : Natim

                                          Oui je ne saurais que te déconseiller le C# et toute cette m***e de .Net.
                                          Mais ce n'est pas mon rôle ici ...


                                          On reste poli, merci.

                                          Citation : Diti

                                          En même temps, tu vas pas pouvoir faire grand chose de portable en C#. Avec Mono tu ne bénéficie pas de toute la puissance de .NET, et il faut oublier les utilisateurs Mac me semble-t-il.


                                          1) Cites ce qui te fais dire ça ("blabla puissance .NET").
                                          2) Mac est supporté (les deux première lignes de la page d'accueil : "Mono provides the necessary software to develop and run .NET client and server applications on Linux, Solaris, Mac OS X, Windows, and Unix."). Je connais au moins deux-trois personnes qui l'utilise à temps plein sur cette plateforme
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            28 février 2008 à 16:01:34

                                            Citation : Garuma

                                            Citation : Diti

                                            En même temps, tu vas pas pouvoir faire grand chose de portable en C#. Avec Mono tu ne bénéficie pas de toute la puissance de .NET, et il faut oublier les utilisateurs Mac me semble-t-il.


                                            1) Cites ce qui te fais dire ça ("blabla puissance .NET").


                                            J'ai arrêté Mono parce que ton tuto était incomplet. Alors, pour pouvoir dire ça, je constate. J'ai récemment aperçu un éditeur de texte codé en .NET (Notepad.NET, tout connement). Il fallait le framework .NET version 3.0 au minimu pour le faire tourner.

                                            Tout comme les programmes en Qt qui disposent de spécificités propres (l'exemple que je vais prendre est les menus, que tu prennes TeXMaker, Mumble ou d'autres programmes Qt, l'interface est la même), les programmes .NET 3.0 peuvent disposer d'une interface ressemblant de très près à celle de Office 2007. Est-ce que Mono permet de faire ceci ?

                                            Enfin, je vais peut-être terminer par une connerie : Mono essaie d'implémenter .NET en libre, il me semble. Cela signifierait-il qu'il est « moins avancé », à la manière d'une documentation officielle et exhaustive contre cette même documentation reprise par un amateur, sans doute non exhaustive ?


                                            Merci de tes réponses.
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Administrateur Wikipédia. Ancien staffeux du SdZ.
                                              28 février 2008 à 17:02:34

                                              Citation : Natim

                                              Ah non pas du tout oO
                                              Il faut installer les dépendances.

                                              python setup.py install

                                              Pour XMPPPy il faut copier le dossier xmpp dans /usr/lib/python/site-packages/


                                              Donc j'ai fait ça dans chaque dossier des dépendances, je crois que ça a fonctionné.
                                              Mais si je fais ça dans le dossier Pytalk/, j'ai cette erreur:
                                              1. quentin@jorkar:~/PyTalk$ sudo python setup.py install
                                              2. [sudo] password for quentin:
                                              3. Traceback (most recent call last):
                                              4.   File "setup.py", line 2, in <module>
                                              5.     import py2exe
                                              6. ImportError: No module named py2exe

                                              Cela dit, si je lance Pytalk avec "python pytalk.py", il se lance, mais je n'arrive pas à me connecter que ce soit avec mon compte google ou fritalk.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                28 février 2008 à 18:28:29

                                                Pour PyTalk pas besoin de l'installer.
                                                La fichier setup.py ne sert qu'à faire le .exe et le package Mac.
                                                Normalement ça doit fonctionner avec python pytalk.py
                                                Tu as des messages d'erreurs ?
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  28 février 2008 à 18:52:27

                                                  Citation : Diti

                                                  Citation : Garuma

                                                  Citation : Diti

                                                  En même temps, tu vas pas pouvoir faire grand chose de portable en C#. Avec Mono tu ne bénéficie pas de toute la puissance de .NET, et il faut oublier les utilisateurs Mac me semble-t-il.


                                                  1) Cites ce qui te fais dire ça ("blabla puissance .NET").


                                                  J'ai arrêté Mono parce que ton tuto était incomplet. Alors, pour pouvoir dire ça, je constate. J'ai récemment aperçu un éditeur de texte codé en .NET (Notepad.NET, tout connement). Il fallait le framework .NET version 3.0 au minimu pour le faire tourner.

                                                  Tout comme les programmes en Qt qui disposent de spécificités propres (l'exemple que je vais prendre est les menus, que tu prennes TeXMaker, Mumble ou d'autres programmes Qt, l'interface est la même), les programmes .NET 3.0 peuvent disposer d'une interface ressemblant de très près à celle de Office 2007. Est-ce que Mono permet de faire ceci ?

                                                  Enfin, je vais peut-être terminer par une connerie : Mono essaie d'implémenter .NET en libre, il me semble. Cela signifierait-il qu'il est « moins avancé », à la manière d'une documentation officielle et exhaustive contre cette même documentation reprise par un amateur, sans doute non exhaustive ?


                                                  Merci de tes réponses.


                                                  Le menu de Office est un des nouveaux contrôle de Winform 3, dans le dernier Google Summer of Code un des étudiants à codé un widget similaire pour GTK# (http://wordpress.com/tag/soc-2007/).

                                                  Mono et .NET sont l'implémentation d'une *même* spec de l'ECMA, après chacun ses différences (Microsoft a ses extensions proprios et Mono a ses propres composants). Vouloir implémenter tout .NET (i.e. non ECMA) est, selon moi, une erreur.
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    28 février 2008 à 19:44:53

                                                    Bon, bah encore une fois, je mourrai moins con :D !
                                                    Je ne savais pas que .NET et Mono venaient d'une spécification (quoique, j'aurais pu le deviner, tout comme HTLM est dérivé de SGML).

                                                    Merci pour la précision sur Winforms.
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Administrateur Wikipédia. Ancien staffeux du SdZ.
                                                      28 février 2008 à 22:05:19

                                                      Tout ça pour dire que niveau choix stratégique, je ne prendrais pas Mono, même si ce que tu fais pour le développement de Mono est à mon avis tout à fait louable. Mais c'est trop d'honneur que vous faites à Microsoft que de les ouvrir de force au libre ...
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Anonyme
                                                        11 mars 2008 à 10:23:28

                                                        Salut j'essaie de lancer Pytalk :
                                                        $ python pytalk.py 
                                                        Traceback (most recent call last):
                                                          File "pytalk.py", line 10, in ?
                                                            from ConnectorThread import ConnectorThread
                                                          File "/home/jarvis/DEV/PyTalk/ConnectorThread.py", line 8, in ?
                                                            from jabber import STATUS
                                                          File "/home/jarvis/DEV/PyTalk/jabber.py", line 3, in ?
                                                            from enum import Enum
                                                        ImportError: No module named enum


                                                        si je comprends bien c'est que je n'ai pas Enum... Donc j'ai téléchargé enum-0.4.3.tar.gz sur http://pypi.python.org/pypi/enum/
                                                        , je le décompresse et après je fais quoi?

                                                        Merci :)
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          11 mars 2008 à 11:24:24

                                                          python setup.py install
                                                          dans le répertoire de Enum.

                                                          J'en profite pour vous donner le PDF de ma Keynote de ce matin sur PyTalk.
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Anonyme
                                                            11 mars 2008 à 17:34:22

                                                            Ok merci ça marche.
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            [Python] PyTalk un client Jabber en PyQt4

                                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                            • Editeur
                                                            • Markdown