Anthony Jaguenaud a écrit 1957 commentaires

  • [^] # Re: sftp vs ftps ?

    Posté par  . En réponse au message Problème avec lftp. Évalué à 2.

    Et pourquoi pas utiliser la commande sftp ?

    man sftp te dis qu’il y a l’option -b batch file. Donc la possibilité de scripter les transferts.

  • [^] # Re: tableau de bord

    Posté par  . En réponse au message Aide pour utiliser les forums. Évalué à 3.

    Salut,
    Effectivement, linuxfr ne permet pas de recevoir des courriels en réponse aux messages postés. Néanmoins, j’entrevois une possibilité… mais je ne sais pas si c’est simple à mettre en place.

    Tu peux utiliser weboob, dans les applications tu trouves QBoobMsg qui permet de suivre divers forums dans une seule application. Il y a aussi Monboob qui permet de récupérer les messages sur des forums et les envoyer par courriel.

  • [^] # Re: Ordre des constructeurs

    Posté par  . En réponse au message Le constructeur d'une classe de base peut-il savoir qu'il n'est pas le dernier?. Évalué à 2.

    Personnellement, je m’étais fait avoir sur un destructeur qui appelait une fonction virtuelle pure… ça lance une belle exception ;-).

    Oui oui, c'est logique, je l'ai réalisé dès que j'ai repéré un bug lié à ce problème. Le principe de ma hiérarchie de classe est d'utiliser des méthodes génériques de la classe de base, et tout fonctionnait très bien jusqu'à ce que j'essaye de le faire aussi dans le constructeur.

    Si tu as ce besoin dans le constructeur, c’est que ta hiérarchie est mal répartie. Ce n’est pas un problème de C++, tu aurais le même type d’ennuis dans tous les langages objets que je connais.

    Pour chaque classe tu dois savoir quelles sont ses responsabilités. Avoir les données minimales pour gérer ces responsabilités.

    Si je reprends ton exemple de Polygone, il est logique que le polygone possède la liste des points. C’est même à lui de retourner le nb de points mais en regardant le nombre d’éléments dans la liste.

    int Polygone::get_nb_points() { return v.size(); }

    Par contre positionner les points c’est à la classe fille de le faire… via une nouvelle fonction de Polygone : addPoint.

    Ensuite, je ferais une classe spécifique comme ça :

    template <int n> class PolygoneRegulier: public Polygone 
    {
        PolygoneRegulier():Polygone() {
           // Ici Polygone est construit, donc on peut utiliser ses méthodes.
           for (int i = 0; i < n; i++) {
               Point p = Point(cos(i*360/n), sin(i*360/n));
               addPoint(p);
           }
        }
    }
    
    typedef PolygoneRegulier<3> Triangle;
    typedef PolygoneRegulier<4> Carre;

    J’ai tapé ça vite fait… je ne sais même pas si ça compile ;-) mais l’idée est là.

    Pour être honnête, j'ai même pensé à passer this en paramètre du constructeur de la classe de base, mais j'ai rapidement décidé que je ne voulais même pas savoir si c'était légal.

    Ce n’est pas nécessaire, le this est le même dans toute la hiérarchie. Juste qu’une méthode parente n’a pas à appeler une méthode d’une fille, car sinon comment choisir ? Ex :

    class Mere
    {
    public:
        Mere() { Fille::methode(); }
    };
    
    class Fille:public Mere {
        
        void methode();
    };
    
    class Fille2: public Mere {
        
        void methode();
    };
    
    Fille2 var;
    };

    Comment peut-on construire var puisque var sera une Fille2 ainsi qu’une Mere. Mais pas une Fille ! Donc si ça compilait se serait catastrophique.

    Pour la suite je ne suis pas certains d’avoir tous saisi.

    Je suis quand même un peu surpris que le C++ n'ait pas un mécanisme simple pour s'assurer qu'une fonction est exécutée exactement une fois lors de la construction, sans pour autant contraindre la hiérarchie de classes (typiquement, pour réserver de la mémoire).

    Je l’ai expliqué au dessus. Après tu peux faire une construction via une factory.

    Dès que les classes filles appellent le constructeur des classes mères, on se retrouve à devoir choisir où réserver la mémoire ;

    Je ne comprends pas.

    soit dans le constructeur de la classe mère (et donc, de devoir se débrouiller pour passer des variables membres en paramètre du constructeur, ce qui est quand même étrange), soit dans le constructeur de la classe fille (ce qui rend presque mécaniquement la classe mère virtuelle).

    Ton problème vient du fait que tu dois penser en terme de responsabilité :

    • Mon objet c’est quoi ?
    • Quel information caractérise se quoi.
    • Quel comportement je lui donne.

    Si a l’une de ses questions tu dois avoir des méthodes dans des classes qui hériteront c’est qu’il y a un soucis.

    Disons que je comprends le pourquoi du comment techniquement, mais que ça me semble être un mécanisme légitime en POO…

    Je pense que tu découvre la POO et que tu as trouvé génial l’héritage et les fonctions virtuelles, mais il faut bien comprendre se qu’elles permettent et pas leur donner des pouvoirs qu’elles n’ont pas.

    L’exemple classique s’est la figure géométrique que l’on veut déplacer. Il suffit d’appeler la fonction dessiner dans la fonction deplacer. En rendant dessiner virtuelle, ça permet d’avoir une seule implémentation de deplacer.

    Je te conseillerai un livre très bien écrit : Programmer en langage c++ de Claude Delannoy. J’ai une très vieille version 4° édition 1998… il manque le c++03, c++11… néanmoins, la présentation du livre est très didactique et une fois assimilé les concepts de base, les informations glanées sur internet n’ont plus à être aussi didactique.

    Finalement, j’ai fais un paver ! J’espère que ce n’est pas trop indigeste.

  • [^] # Re: Ordre des constructeurs

    Posté par  . En réponse au message Le constructeur d'une classe de base peut-il savoir qu'il n'est pas le dernier?. Évalué à 3.

    Je comprends un peu mieux ce que tu veux faire… Ce n’est pas possible, car quand tu es dans le constructeur de polygone, le vtable (pointeur vers la table des fonctions virtuelles) est initialisé pour Polygone. Ce n’est qu’à la fin du constructeur de Polygone où le runtime modifie la vtable puis appelle le constructeur de Triangle.

    Dans ce cas simple, la solution est de descendre l’information nb_de_point en paramètre au constructeur de Polygone.

    class Triangle: public Polygon {
      public:
        Triangle(): Polygon(3) { } 
        int get_nb_points() const { return 3; } // pourrait être plus compliqué, lire dans un fichier, etc. 
    };

    Mais sinon, une méthode statique de construction de l’objet peut-être intéressante.

    Pour comprendre l’ordre d’exécution, la vtable… tu peux ajouter des traces (un bête std::cout) et dump(this,sizeof(*this)) dans chaque constructeur. Ça devrait te donner une idée.

  • # Ordre des constructeurs

    Posté par  . En réponse au message Le constructeur d'une classe de base peut-il savoir qu'il n'est pas le dernier?. Évalué à 3. Dernière modification le 10 juillet 2017 à 12:40.

    Dans un cas simple (sans héritage multiple ni virtuel), les constructeurs sont appelés dans l’ordre.

    Dans le cas Derived2 :
    D’abord Base::Base() qui s’il appelle init ne peut appeler que Base::init (il ne peut avoir connaissance des autres, et la table des méthodes virtuel pointe pour l’instant sur sa fonction.
    Ensuite Derived::Derived() qui s’il appelle init peut appeler soit la sienne Derived::init() soit celle de Base::init().
    Ainsi de suite.

    Si ton but est que chaque niveau de la hiérarchie appelle sa fonction d’init il n’y a pas de problème.

    Une solution a ton problème pourrait-être d’utiliser une classe de callback sur destructeur.

    class CallBack {
    public:
      CallBack(fct):my_fct(fct) {}
      ~CallBack() {my_fct(/* ancien this ? */);}
    
      modify(fct) { my_fct = fct; }
    private:
      my_fct;
    };

    Je n’ai pas défini le type de fct. On doit pouvoir utiliser std::bind pour inclure le this dans l’appel.

    Ensuite, tu crées ton constructeur un peu comme ça :

    Base::Base (param, callBack(fct)) { callBack.modify(my_init); }

    Le dernier appelé sera celui de plus haut niveau (le dernier exécuté). L’objet temporaire créé pour le passage de paramètre sera détruit à la sortie du constructeur et donc, hors optimisation, le destructeur de l’objet callback devrait être appelé. (je n’ai pas le temps de tester mon idée…).

    Je ne sais pas si ça résous ton problème, mais je rejoins le commentaire au dessus pour dire que ça semble être un soucis d’analyse du problème.

    Par contre, la fonction que tu utilises ne peut être que statique. Ou alors, tu dois enregistrer un pointeur vers ton objet et dans ce cas faire : obj.fct()

  • [^] # Re: sftp vs ftps ?

    Posté par  . En réponse au message Problème avec lftp. Évalué à 3.

    Oui, c'est pour ça que j'ai proposé scp qui fonctionne aussi au dessus de ssh. Mais ça doit être du ftps, et du coup l'URL lftp devrait être : lftp ftps://user:mdp@...

  • # Pb d’uid ?

    Posté par  . En réponse au message Problème avec lftp. Évalué à 3.

    La commande lftp est-elle bien lancée avec le même uid que filezilla ?

    Pour moi, lftp arrive a créer le fichier, donc écrire dans le répertoire distant. Par contre il n’arrive pas à écrire le contenu. Deux solutions :

    • Il n’arrive pas à écrire…
      • Vérifier l’umask distant, se serait bête de créer un fichier dans lequel on ne peut écrire ;-)
    • Il n’arrive pas à lire le fichier source.
      • Vérifier uid:gid et droit du fichier local.

    Essaye avec un autre programme : scp

    $ scp /home/mesfichiers/fichier.txt user@site.fr:/Share
    …

    Tu verras si ça passe. Par contre si tu ne fais pas d’authentification par clé, il faudra taper le mdp. Je ne sais pas si tu peux écrire :
    scp /home/mesfichiers/fichier.txt user:password@site.fr:/Share

  • [^] # Re: graver un CD/DVD

    Posté par  . En réponse au message installation de linux mint 17.1. Évalué à 2.

    Changer la pile, si, finalement la machine part à la poubelle, ça ne vaut pas le coût écologique. Après, si la machine convient, alors là, oui il faudra changer la pile.

  • [^] # Re: et hop !

    Posté par  . En réponse au message [Résolu] Comment charger un module ubifs absent de l'initrd ?. Évalué à 2.

    Penses à passer le sujet à [Résolu].

  • [^] # Re: graver un CD/DVD

    Posté par  . En réponse au message installation de linux mint 17.1. Évalué à 3.

    Au minimum, au boot du PC, tu le mets à l’heure dans le BIOS. Tant que tu ne l’éteins pas, il l’a conserve.

    Je ne suis pas sûr que ça marche mieux, mais tu peux essayer.

  • [^] # Re: QT5_USE_MODULES

    Posté par  . En réponse au message [Résolu] Qt, cmake et debian…. Évalué à 5.

    Je me réponds, Cmake est sensible à l’ordre des instructions…

    il faut mettre le find_package en premier se qui définie tout le reste.

    Voici la version qui fonctionne :

    cmake_minimum_required(VERSION 2.8.3)
    project(test)
    find_package(Qt5Test REQUIRED) # À mettre au début
    
    
    # Find includes in corresponding build directories
    set(CMAKE_INCLUDE_CURRENT_DIR ON)
    # Instruct CMake to run moc automatically when needed.
    set(CMAKE_AUTOMOC ON)
    
    add_executable(test src/MainTest.cpp)
    
    
    QT5_USE_MODULES(test Test)
  • # QT5_USE_MODULES

    Posté par  . En réponse au message [Résolu] Qt, cmake et debian…. Évalué à 2.

    Il faut ajouter : QT5_USE_MODULES(test Test) le premier étant le project et le second la bibliothèque Qt associé sans le Qt.

    Par contre, maintenant, il ne me génère pas le moc… je regarde.

  • [^] # Re: au hasard

    Posté par  . En réponse au message [Résolu] Qt, cmake et debian…. Évalué à 3.

    Le # est une erreur de copier/coller concaténation… en fait, j’avais :

    /usr/include# ls x86_…/

    Quand j’ai concaténé, j’ai gardé le #…

    Je vais me répondre, j’ai trouvé une partie.

  • [^] # Re: Ce n'est pas la première fois

    Posté par  . En réponse au journal Un bug ? Qui est le coupable ? Le processeur !!!. Évalué à 2.

    Je m'en souviens très bien, l'échange était pour les entreprises, le patch pour les particuliers.

    Je m’en souviens vaguement… c’était en 1994, ça ne nous rajeunis pas ! J’étais à la FAC et je lisais les magasines d’informatique de l’époque. Hélas, j’ai fini par les jeter dans mes multiples déménagement. J’aurais bien relu des articles de l’époque pour me remémorer tout ça.

  • [^] # Re: Ce n'est pas la première fois

    Posté par  . En réponse au journal Un bug ? Qui est le coupable ? Le processeur !!!. Évalué à 3.

    Lorsqu'il y a eu le bogue de la division des Intel Pentium, Intel à seulement fourni un patch qui désactivait le co-processeur mathématique dans certaines conditions…

    Bah, il me semblait que intel avait proposé un échange de processeur. Mais peu de gens l’aurait demandé.

  • [^] # Re: Aux confins de l'extrême...

    Posté par  . En réponse à la dépêche Sortie de Replicant 6.0. Évalué à 3.

    En escalade on utilise des cordes élastiques, si ta corde Petzl n'est pas élastique, tu peux en faire pleins de choses, mais tu va probablement être déçu parce que c'est vendu comme une corde d'escalade.

    Vu le résultat d’une chute en tête avec une corde non élastique… tu n’auras pas vraiment le temps d’être déçu.

  • [^] # Re: graver un CD/DVD

    Posté par  . En réponse au message installation de linux mint 17.1. Évalué à 2.

    Salut, pour créer une clé USB à partir de Windows, j’ai toujours utilisé UnetBootIn.

    J’espère que ça t’aidera.

    À part un BIOS trop vieux pour booter sur USB, je n’ai jamais eu de problème.

  • [^] # Re: cp

    Posté par  . En réponse au message comment calculer le bs d'un dd. Évalué à 3.

    Dans ces usages, dd sert surtout a avoir un fichier de taille fixe, on pourrait surement utiliser d'autres commandes a la place.

    Moi, j’utilise truncate dans ce cas là. C’est plutôt rapide :

    $ time truncate -s 5000000000 test.img
    
    real    0m0,003s
    user    0m0,000s
    sys     0m0,000s
    $ ls -lh
    total 28K
    -rw-r--r-- 1 capello capello 4,7G juil.  2 23:07 test.img
    $
  • [^] # Re: cp

    Posté par  . En réponse au message comment calculer le bs d'un dd. Évalué à 2.

    Tu pourrais détailler ta méthode ?

  • [^] # Re: Je note...

    Posté par  . En réponse au journal [HS] Bookmark déplacé : bronsonisation de T411 :<. Évalué à 4.

    Tu défends un relativisme extrême dans lequel toutes les valeurs se valent…

    Oui, c’est la loi, autrement dit : « la morale de la société » que j’opposerai à « la morale individuelle » dont nous avons environ 60 millions de cas différents en France.

    Zénitram ne dit pas que c’est bien ou mal, mais que tu ne respectes pas la loi.

    Pour reprendre un exemple au dessus parlant de meurtre :
    Si je tue mon voisin, je peux dire que je ne suis pas un meurtrier, car de toute façon il ne servait à rien, il ne travaillait pas, il faisait du bruit… toute excuse.
    Toi tu penses que c’est pas bien. Je te dit : Non, de mon point de vue, comme c’était un boulet inutile, je me considère comme les résistants. C’est un argument choc, là si tu acceptes ça, tu acceptes que chacun fait ce qu’il veut en fonction de sa morale individuelle…
    Moi je pense que c’est à la justice et au législateur de faire ce travail. Pense à contacter ton député pour qu’il réforme ce droit.

    Oui, il faut sans doute se poser la question du © et des droits voisins. Mais il faut utiliser les bons termes : c’est de la contrefaçon, que tu l’assumes c’est très bien, mais ça reste de la contrefaçon tant que la loi n’aura pas changé.

  • [^] # Re: 4 ans que pas grand monde n'est impacté

    Posté par  . En réponse au journal Vulnérabilité majeure dans Kmail. Évalué à 2.

    Tiens, en parlant d’Akonadi. Je viens de mettre à jour ma debian/stable, et je voudrais reset la BD. Suffit-il de virer le fichier base_de_donne_akonadi ? Y-a-t-il une manière propre de le faire ?

  • [^] # Re: Orthographe

    Posté par  . En réponse au journal Un pas en avant pour les serveurs libres: Le projet NERF. Évalué à 2.

    Île fot aiqrire avek plaint de fôte pour èdé gramalecte.

    --
    S’en grammalecte je arivent pa a ékrir frenssé… soutenez gramalecte

  • [^] # Re: Tant mieux

    Posté par  . En réponse au journal [HS] Bookmark déplacé : bronsonisation de T411 :<. Évalué à 10.

    Moi je vois plus ça comme une preuve que des gens sont prêt à payer pour avoir des films sans avoir 20 minutes de morale avant de pouvoir voir le film.

  • [^] # Re: cp

    Posté par  . En réponse au message comment calculer le bs d'un dd. Évalué à 2.

    Je me doutais que quelqu’un me répondrait pour m’apprendre quelque-chose, merci à toi.

    Je retiens surtout que dd peut continuer en cas d’erreur.

    Merci.

  • [^] # Re: cp

    Posté par  . En réponse au message comment calculer le bs d'un dd. Évalué à 1.

    Oui, tu fait un cp /dev/sda /dev/sdb (à adapter à tes besoins). Pour moi dd n’a d’utilité que pour les bandes magnétiques qui ont quasiment disparue.