Journal PyQt, QtJambi, et les autres

Posté par  .
Étiquettes : aucune
0
12
oct.
2007
Bonjour à tous,
dans le cadre de mon travail, nous souhaitons réaliser un logiciel de paramétrage de nos installations électroniques. Le but est de faire une interface graphique qui présente l'état de fonctionnement de nos installations et permette quelques réglages simples (avec très peu d'algorithmique). Évidemment, mon patron n'a rien contre une solution à base de logiciels libres.

Les points clés pour cette application sont:
* facilité de maintenance
* fiabilité
* pérennité
* design très personnalisé

L'heure est aujourd'hui au choix des outils. Pour ma part, je pense que Qt serait un excellent candidat pour la librairie graphique. Surtout avec Qt4.2 qui introduit la personnalisation des widgets au travers d'une syntaxe à la CSS.
Comme je ne suis pas capable de programmer en C++ et que j'aime bien Python,j'aimerai bien utiliser les bindings Python pour Qt, à savoir PyQt. Le problème c'est que Python est plutôt inconnu dans le monde de l'entreprise.
Une autre solution serait d'utiliser java qui est très connu par le grand public. D'ailleurs, il y a aussi des bindings Java pour Qt, nommés Qt Jambi, et supportés officiellement par Trolltech, mais je ne connais pas Java. J'ai essayé java ces derniers jours et j'ai trouvé ça assez déroutant. J'ai eu l'impression d'être *obligé* de faire des classes tout le temps, et le typage statique est quand même un peu lourdingue, par exemple quand j'écris:
Voiture maVoiture = new Voiture("ford fiesta");
à quoi ça sert de préciser que maVoiture est de type Voiture (si je voulais transtyper en Vehicule je l'aurai dit)?

Donc voilà, j'en suis à me demander laquelle des deux solutions est la mieux: PyQt ou Qt Jambi?

Toute argumentation est la bienvenue. D'ailleurs, si vous avez d'autres solutions que Qt, ça m'intéresse aussi!
  • # PyQT

    Posté par  . Évalué à 10.

    Franchement, PyQT4 est assez terrible. J'ai pu l'utiliser pour de (petites) applications en entreprise, et ça le fait bien. Sous Windows (comme c'est souvent le cas en entreprise), tu peux toujours générer un binaire autonome avec py2exe (ou pyInstaller, mais j'ai pas testé), et bien malin le lambda qui devinerait que ton truc est en Python - surtout s'il ne sait pas ce que c'est.

    Au final, j'avais ramené chez moi mon code du boulot, à l'époque, et je l'avais testé sur Linux et Mac : il marchait à l'identique. Bien évidemment, ça n'est valable que si évite les fonctions monoplateformes de Python (genre COM ou win32), mais ça tu le sais déjà.

    Sinon, les rares tests que j'ai fait avec Jambi marchaient pas mal. Niveau déploiement, si j'ai tout compris, ça demande juste de rajouter un .jar dans ton déploiement. Mais, comme toi, je suis plus à l'aise avec Python que Java.
  • # Python c'est bon

    Posté par  . Évalué à 3.

    Comme je ne suis pas capable de programmer en C++ et que j'aime bien Python,j'aimerai bien utiliser les bindings Python pour Qt, à savoir PyQt. Le problème c'est que Python est plutôt inconnu dans le monde de l'entreprise.
    Une autre solution serait d'utiliser java qui est très connu par le grand public. D'ailleurs, il y a aussi des bindings Java pour Qt, nommés Qt Jambi, et supportés officiellement par Trolltech, mais je ne connais pas Java


    La réponse est dans la question non ? tu connais pas C++ , Java te lourde , donc python c'est bon ..

    En quoi le fait que le grand publique ne connaisse pas python soit un frein ? il vont juste utilisé le code compilé après non ? (oui compilé , car faut optimiser ) . Je crois pas que le grand public connaisse le java ou le C++ mieux que le python a part entendre s'exclamer , ha oui c'est un javascript ou des trucs du genre ...
    • [^] # Re: Python c'est bon

      Posté par  . Évalué à 2.

      Le grand public c'est surtout mon patron en fait... Il est sympa et compréhensif, mais ça reste difficile de lui expliquer que je veux programmer dans un langage dont il n'a jamais entendu parler, surtout que Java lui est présenté par pas mal de monde comme "la seule alternative sérieuse".
      Ce qu'il se dit, c'est que si tout le monde programme en Java c'est qu'il y a de bonnes raisons (d'ailleurs je me demande s'il n'y a pas *vraiment* de bonnes raisons).
      • [^] # Re: Python c'est bon

        Posté par  . Évalué à 2.

        Et bien tu le regardes très sérieusement et tu lui expliques que python est *tres* sérieux, stable et que en plus tu le pratiques depuis N temps et que donc le dev en sera plus rapide.

        Puis tu ajouteras que tout comme java c'est multiplatforme mais qu'en plus pour windows tu n'as pas besoin d'installer la vm python car py2exe existe.
        • [^] # Re: Python c'est bon

          Posté par  . Évalué à 1.

          Et tu peux même ajouter une liste de projets très connus qui utilisent python (Wengo par exemple si je ne me trompe pas ? Mais je suis sur qu'il y en a d'autres, c'est juste que je suis pas trop au courant de tout ça ...)
      • [^] # Re: Python c'est bon

        Posté par  . Évalué à 3.

        En fait, personnellement, je trouve java pas très joli, mais je pense que sa force vient du fait qu'il possède de très nombreuses et excellentes librairies, qui te permettent de l'étendre très loin.

        Et puis, il existe aussi le Jypthon
      • [^] # Re: Python c'est bon

        Posté par  . Évalué à 3.


        surtout que Java lui est présenté par pas mal de monde comme "la seule alternative sérieuse".
        Ce qu'il se dit, c'est que si tout le monde programme en Java c'est qu'il y a de bonnes raisons (d'ailleurs je me demande s'il n'y a pas *vraiment* de bonnes raisons).


        Ok , alors il y a beaucoup d'organisation utilisant intensivement python pour ne citer que celle qui me vient à l'esprit vite fait : NASA , GOOGLE , ... mais il y a une liste des succès story en python sur des projets /. logiciels très précis et documenté :

        http://www.python.org/about/success/

        celle de la NASA :
        http://www.python.org/about/success/usa/

        Ensuite faut demander au autres messieurs qui disent que java est mieux ou il est mieux et des exemples concrets sur quel projets il fait mieux que python et comparer réellement :) Parce que si c'est juste des décideurs pressé qui dise a ton patron java c'est mieux ,mais il dit pas trop ou ni comment ... Surtout que c'est pas eux qui vont coder alors hein ..
    • [^] # Re: Python c'est bon

      Posté par  . Évalué à 3.

      oui compilé , car faut optimiser

      Python? Compiler? Comment?

      (ceci est une vraie question)
      • [^] # Re: Python c'est bon

        Posté par  . Évalué à 2.

        man python
        ....
        -O Turn on basic optimizations. This changes the filename extension for compiled (bytecode) files from .pyc to .pyo. Given twice, causes docstrings to be discarded.
        ...
        • [^] # Re: Python c'est bon

          Posté par  . Évalué à 2.

          Je ne connaissais pas ce "-O", faudra que je vois s'il apporte vraiment quelque-chose (par rapport aux .pyc qui - rappellons-le - sont générés par défaut dès que les droits en écriture sont présents).

          Parce que pour rendre du Python plus rapide, j'ai tendance à être plus intéressé par Psyco que par une forme à peine plus succinte du bytecode (sans compter que la taille ne fait pas tout, loin s'en faut).

          Pour info, la première doc que je trouve sur ce flag:


          When the Python interpreter is invoked with the -O flag, optimized code is generated and stored in ‘.pyo’ files. The optimizer currently doesn't help much; it only removes assert statements. When -O is used, all bytecode is optimized; .pyc files are ignored and .py files are compiled to optimized bytecode.

          -- http://www.network-theory.co.uk/docs/pytut/CompiledPythonfil(...)

          Pas super transcendant, même si ça a du s'améliorer depuis.
          • [^] # Re: Python c'est bon

            Posté par  . Évalué à 3.

            ouep à tester, moi je n'ai fait que lire le man, je ne sais pas ce que ça vaut, mais à lire la description ça n'a pas l'air d'être de la haute voltige ...
  • # Java vs Python

    Posté par  . Évalué à 4.


    Voiture maVoiture = new Voiture("ford fiesta");
    à quoi ça sert de préciser que maVoiture est de type Voiture (si je voulais transtyper en Vehicule je l'aurai dit)?


    Peut être, mais grâce à cette information qui te parait redondante, le compilateur Java t'interdira d'utiliser maVoiture comme si c'était une carrotte, à moins que tu le veuilles vraiment explicitement.

    Avec Python, ça passera tout debout jusqu'au moment où l'utilisateur ou le testeur exécute le bout de code pourri.

    Moralité, dans le cas Java, il est beaucoup plus facile d'éviter les erreurs débiles, car elles sont détectés à la compilation, alors qu'en Python l'erreur ne sera détectée qu'à l'exécution (d'un jeu de test unitaire, de l'appli par la personne qui teste, ... ou par l'utilsateur).

    En bref, de mon point de vue (qui va certainement pas plaire à tout le monde), il vaut mieux que le langage soit rigoureux, car le développeur, aussi rigoureux qu'il soit, n'est pas à l'abri d'un oubli. Certes, le développement est en général un peu plus long avec un langage comme Java plutôt qu'avec un langage comme Python, mais par la suite au niveau de la maintenance, les avantages/inconvénients se retrouvent inversés.
    • [^] # Re: Java vs Python

      Posté par  . Évalué à 3.

      ouai sauf qu'entre temps on a inventé le lazy typing

      auto maVoiture = new Voiture("ford fiesta");

      ou le compilateur infère le type de maVoiture a Voiture. Et si jamais du veut caster un objet dans sa super classe, il suffira d'expliciter le type a la déclaration.

      le lazy typing est dans D et sera dans C++0x, et est une idée survenue (a mon avis) bien trop tard, cette fonctionnalité pourrait même exister en C.

      Enfin globalement je suis d'accord avec toi, avec un language typé mais très dynamique (comme java donc), un code qui compile est souvent beaucoup plus proche de l'état débugué qu'un code qui passe l'interpréteur sans test de typage. Mais (il y a un mais), la souplesse des languages dynamiques, et je n'explique pas encore, mênent souvent les dévelopeur a faire de meilleures appli qu'avec un language typé.

      Cela reste encore un mystère pour moi, mais mon petit doigt me dit que le temps et les casses têtes a modifier du code dans la rigueur d'un code très typé ne profite finalement pas toujours a la qualité de l'application. (quand je parle de qualité, je pense a l'ergonomie et au bien pensé des fonctionnalité - ergonomie comprend une appli qui ne t'injurie pas constamment avec des exceptions).
      • [^] # Re: Java vs Python

        Posté par  (site web personnel) . Évalué à 1.

        et puis en python, tu peux choisir de gérer les exceptions ou pas. Et c'est aussi bien comme ça.

        parce qu'en java, c'est lourd, pour chaque fonction qui peut lancer une exception faut prévoir le cas où...

        perso, je trouve le java très lourd.

        vive python !
        • [^] # Re: Java vs Python

          Posté par  . Évalué à 4.

          Pour avoir développé en Delphi dans une grosse appli où une méthode qui peut lever des exceptions ne le spécifie pas dans sa déclaration, cela mène très facilement à des exceptions non gérés.

          Alors c'est sur, il faut savoir ce qu'on veut : ok, la gestion des exceptions est "lourde" en Java, mais c'est meilleur moyen de pas avoir une appli qui crashe silencieusement (ou du moins si c'est le cas, c'est la volonté du développeur et qu'il l'assume).

          Au contraire en Python : ça m'est arrivé de nombreuses fois sous Linux d'avoir des applis qui balancent un stacktrace dans la console et n'effectuant pas le comportement attentu, sans aucun message d'erreur à l'écran. Niveau fiabilité (demandée par l'auteur de ce journal), c'est pas vraiment le top.

          Attention, j'ai pas dit que c'était pas possible de faire les choses proprement en Python, mais comme c'est optionnel, le développeur va plus facilement oublier de le faire à un endroit ou à un autre, volontairement ou pas. Le langage ne le contraint pas à la rigeur.

          Donc mon avis, c'est que effectivement, développer en Python est beaucoup plus marrant qu'en Java, car on est plus libre de prototyper (ou de faire de la merde) sans se faire engueuler toutes les 3 secondes par le compilateur. Mais pour développer une appli digne d'un Pierre Tramo Lead Architect, il vaut mieux je pense utiliser un outil strict comme Java.
        • [^] # Re: Java vs Python

          Posté par  . Évalué à 5.

          En java il y a 2 types d'exceptions :
          - Les exceptions que tu dois explicitement gérer et qui sont provoquées par un phénomène normal (comme une sorte de code d'erreur).
          - Les exeptions qu'on est pas obligé de gérer (RuntimeExeption ou Error) dues à des erreurs qui laissent l'appli dans un état indéfini.

          C'est une très bonne chose que le langage t'oblige à gérer le premier type. Par exemple, un utilisateur qui se trompe en saisissant un entier et qui entraine une erreur de convertion string->int n'est pas un bug du programme, mais ne pas gérer ce cas là en engendrerai certainement un.

          Je peut me tromper, mais je ne pense pas que python te permettes d'éviter ce genre d'erreurs de programmation de manière systématique.

          Pareil pour le typage, d'expèrience, le typage statique permet clairement de faire des programmes plus maintenables, et d'éviter les surprises à l'exécution ...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.