Michaël a écrit 2935 commentaires

  • [^] # Re: void et les templates?

    Posté par  (site web personnel) . En réponse à la dépêche Le langage D. Évalué à 2.

    Tu as raison, c'est facile pour le premier, mais impossible à faire en C++ car il n'existe pas de valeur de type void. La question qui m'intéresse — par curiosité ­— est si le langage D répare cette defiscience de C++.
    c++
    slot<int,int> c1(&f1,0);
    slot<void,void> c2(&f2,/* valeur de type void */);

    La méthode classique pour s'en tirer consiste à utiliser les spécialisations de templates.

  • [^] # Re: Irrémédiable

    Posté par  (site web personnel) . En réponse au journal Gnome3 et systemd, c'est la fin des haricots!. Évalué à 4.

    La plupart des gens préfère quand même avoir la même timezone pour toutes les sessions d'un même ordinateur (graphique ou tty) et pour tous les utilisateurs…

    Non, la plupart des gens préfèrent quand même avoir la même timezone dans une session donnée mais des timezone éventuellement différentes pour chaque session. En gros le schéma que fournit l'héritage de TZ par l'environnement

  • [^] # Re: void et les templates?

    Posté par  (site web personnel) . En réponse à la dépêche Le langage D. Évalué à 4.

    Mmmh, c'est pour bricoler des trucs avec des templates? Parce que je ne vois pas trop ce que tu peux faire du x, la variable n'a aucun sens, si?

    La variable n'a aucun sens dans le cas de void, mais dans les autres cas si, donc justement cela induit une exception dans le système des types qui est tout à fait nuisible à la programmation générique.

    Par exemple, essayons de définir un slot qui contient une fonction et une valeur sur laquelle appeler la fonction.

    template <T, P>
    class slot
    {
      public:
        typedef T take;
        typedef P pass;
        typedef T (*callback)(P);
    
        slot (callback _f, pass _x): f(_f), x(_x) {};
    
        T operator()() { return f(x); }
      private:
        callback f;
        pass x;
    };
    
    int
    f1(int x)
    {
       return x;
    }
    
    void
    f2()
    {}
    
    slot<int,int> c1(&f1);
    slot<void,void> c2(&f2);
    
    

    La première utilisation slot<int,int> fonctionne tandis que slot<void,void> explose!

    L'exemple de la définition de slot est très instructif parceque si on essaie d'en faire une solution robuste et générale, il faut:
    — utiliser des types proxies (des templates dont le seul rôle est de définir des types) parcequ'on passe les int, les pointeurs et les références par valeur mais les valeurs de la plupart des autres types par référence;
    ­— utiliser des call proxies pour encapsuler les appels à f(x) (à cause du void);
    ­— utiliser des constructeurs divers et variés parcequ'on a bien envie de pouvoir passer des pointeurs vers membres dans nos slots.

    Au final on arrive à un code très long et pas très lisible, pour faire correctement ce qui dans le cas général prend 6 lignes.

  • # void et les templates?

    Posté par  (site web personnel) . En réponse à la dépêche Le langage D. Évalué à 3.

    Parmi les 1001 aspects du C++ qui sont très pénibles quand on programme avec, il y a notamment le fait que:

    1. void est un type incomplet, en particulier on ne peut pas écrire void x pour déclarer un argument de type void à une fonction;
    2. les pointeurs vers fonction membre ne peuvent assignés aux pointeurs vers fonctions membres constantes(!);
    3. l'algèbre des types est difficile à manipuler parceque si on connaît le type pointeur vers fonction on ne peut pas en déduire le type pointeur vers fonction constante simplement.

    Ces points sont incroyablement agaçants lorsqu'on fait de la programmation générique. Qu'en est-il en D?

    Spécification de surcharge de méthode avec override

    Je pense que tu t'es mal exprimé, surcharge (polysémie) et redéfinition, ce n'est pas du tout la même chose!

  • [^] # Re: Y'a-t-il encore besoin de nouveaux langages "bas niveau"?

    Posté par  (site web personnel) . En réponse à la dépêche Le langage D. Évalué à 2. Dernière modification le 12 juin 2012 à 07:39.

    Si en C++, et visiblement en D, on indique la capacité à lancer des exceptions (et lesquelles), c'est pour garantir un contrat.

    Il me semble que les compilateurs C++ utilisent ces infos pour optimiser, pas pour faire de la vérification — il y a d'ailleurs une exception bad_exception qui signale les exceptions non prévues!

    C'est très important pour une fonction utilisée dans un destructeur, par exemple. Et ça, le compilateur ne peut pas le deviner tout seul lors de la compilation de la fonction.

    Théoriquement rien n'empêche le compilateur de le savoir, mais il faudrait avoir une notion de fichier objet pour les headers — pour retenir l'information calculée — qui devraient être distribués avec les bibliothèques. (Il faut connaître le header et le code pour faire la déduction correcte.)

  • # Le point important

    Posté par  (site web personnel) . En réponse au journal 0,76% de moyenne nationale pour le parti pirate, déception . Évalué à 10.

    Manque éclatant de programme, difficile à défendre devant les électeurs.

    En gros, entre la nouveauté du parti et l'absence de programme, vous n'avez laissé aucune chance aux élécteurs d'être convaincus par vos candidatures.

  • [^] # Re: Moins bien que l'ancienne carte

    Posté par  (site web personnel) . En réponse au journal Le nouveau programme de fidélité de la SNCF : Le programme Voyageur. Évalué à 4.

    Ça, plus le prix exubérant des billet, plus les retards à répétition dont j'attends tjs les remboursements, la pullule ne passe pas !

    Effectivement, cela fait beaucoup de problèmes! :)

  • [^] # Re: C'est dommage… pour l'effet de serre !

    Posté par  (site web personnel) . En réponse au journal Le nouveau programme de fidélité de la SNCF : Le programme Voyageur. Évalué à 2. Dernière modification le 08 juin 2012 à 22:39.

    Je n'ai pas vraiment vu de trains étrangers en gares françaises…

    C'est parceque tu n'as pas bien regardé et que tu n'intéresses pas aux trains de marchandises.

    Génial. Pour voyager c'est super.

    Ce que je voulais souligner en parlant des trains de marchandises, c'est que dans les faits l'ouverture à la concurrence concerne essentiellement le frêt. On peut en retirer que des opérateurs de trains autres que la SNCF s'intéressent au réseau français en général mais pas au transport de personnes en particulier. Donc oui la concurrence est là, mais pour le transport de passagers, ne semble rien avoir à proposer de mieux que la SNCF.

  • [^] # Re: un truc de super avec konqueror

    Posté par  (site web personnel) . En réponse au journal avenir de konqueror et khtml dans KDE ?. Évalué à 3.

    plus de trois lettres pour une extension.

    Dans Unix il n'y a pas d'extension juste des suffixes (comme dans tous les mots). Le mot extension s'utilsie en principe uniquement pour les systèmes de fichiers FAT où les noms de fichiers faisaient 8.3 lettres — le `.' séparant la partie principale de son extension n'est pas stockée par le système, d'où le besoin n'un nom spécial pour indiquer cette séquence.

  • [^] # Re: Pourquoi Linux ne décolle pas

    Posté par  (site web personnel) . En réponse au sondage Qu'utilisez vous pour l'installation de vos logiciels tiers ?. Évalué à 7.

    C'est marrant, ce sondage montre clairement pourquoi Linux ne perce pas dans le grand public!

    Il faudrait une sondage supplémentaire pour demander aux gens comment ils font désinstaller un logiciel, avec une réponse spéciale «je formate mon HD et réinstalle Windows» — parceque parfois il n'y a pas d'autre choix!

  • [^] # Re: C'est dommage… pour l'effet de serre !

    Posté par  (site web personnel) . En réponse au journal Le nouveau programme de fidélité de la SNCF : Le programme Voyageur. Évalué à 2.

    Mais en se débrouillant bien, ça reste plutôt avantageux.

    C'est sûrement là que ça cloche de mon côté! :)

  • [^] # Re: Évaluation partielle

    Posté par  (site web personnel) . En réponse au message Argument de fonction récurrent. Évalué à 2.

    Néanmoins, après plusieurs lignes de codes, je décide de changer la variable par défaut, a=1 dans ton exemple. Comment je fais pour répercuter ça partout ?

    Il ne dit pas qu'il n'aime pas trop que le nom des variables apparaissent dans les applications partielles, ici?

  • [^] # Re: C'est dommage… pour l'effet de serre !

    Posté par  (site web personnel) . En réponse au journal Le nouveau programme de fidélité de la SNCF : Le programme Voyageur. Évalué à -1. Dernière modification le 03 juin 2012 à 13:07.

    Dommage que notre SNCF soit ce qu'elle est.

    Quel est le problème avec la SNCF au juste? Qu'est-ce qu'elle fait moins bien que ses homologues en Allemagne, en Angleterre (ah, ah, ah) ou aux USA (ah, ah, ah, ah, ah!)

    Je n'ai pas vraiment vu de trains étrangers en gares françaises…

    C'est parceque tu n'as pas bien regardé et que tu n'intéresses pas aux trains de marchandises.

    Ça ferait du biens au prix il me semble.

    Tu parles des prix des trajets locaux subventionnés par les régions, ou bien des prix des trajets nationaux qui sont moins chers que l'avion ou la voiture (pour une personne qui prend l'autoroute)?

    (Ça me rappelle que quand il y a la queue à la pharmacie, personne ne râle, mais à la Poste, là c'est intolérable!)

  • # Évaluation partielle

    Posté par  (site web personnel) . En réponse au message Argument de fonction récurrent. Évalué à 3. Dernière modification le 02 juin 2012 à 18:48.

    Je rejoins les commentaires qui t'incitent plutôt à créer un objet encapsulant tes algorithmes, ce qui te permet d'obtenir le résultat attendu. Si tu tiens à l'évaluation partielle, voici une solution un peu moins compliquée que celle de Matthieu.

    Elle fait 6 lignes:

    def bind(x,f):
        def f_x(*argv, **argd):
            argv_x = [ x ]
            argv_x[1:] = argv
            return f(*argv_x, **argd)
        return f_x
    
    

    Ce qui s'utilise commee ça:

    def add(a,b):
        return a + b
    
    add2 = bind(2, add)
    print "La réponse est", add2(40)
    
    

    Tu peux itérer le processus comme dans

    add40and2 = bind(40, bind(2, add))
    print "La réponse est", add40and2()
    
    

    Tu peux varier la préparation de argv_x pour lier le dernier argument, le second etc. Voilà une variante qui lie des arguments de type dictionnaire.

    def bind_argd(x, f):
        def f_d(*argv, **argd):
            argd_x = dict(argd)
            for k,v in x.iteritems(): argd_x[k] = v
            return f(*argv_x, **argd_x)
        return f_x
    
    

    Pour troller un peu, je précise que je n'aime pas du tout programmer en Python. :)

  • [^] # Re: scientificité et scientisme....

    Posté par  (site web personnel) . En réponse au journal En Inde, un calvaire oppose catholiques et scientistes. Évalué à 3.

    Dans ma phrase, le tout porte sur les axiomes, cela n'a rien à voir avec le théorème de Gödel!

  • [^] # Re: imagemagick

    Posté par  (site web personnel) . En réponse au message erreur sed. Évalué à 2. Dernière modification le 29 mai 2012 à 22:20.

    Quand je teste la conversion en djvu avec convert, le résultat est tout pixelisé…

    Cela vient probablement de la `-density' du canvas sur lequel convert fait le dessin. Prendre une -density de 300, 600 ou 1200 pour avoir un meilleur résultat.

    Chez moi j'utilise

    convert -density 1200 fichier.pdf -monochrome bitonal-%05d.tiff
    for bitonal in bitonal*.tiff; do
        cjb2 "$bitonal" "${bitonal%.tiff}.djvu"
    done
    djvm -c /tmp/output.pdf *djvu
    
    
  • [^] # Re: dump

    Posté par  (site web personnel) . En réponse au sondage Quel logiciel libre pour vos sauvegardes ?. Évalué à 4.

    A qui s'adresse ce commentaire sur les "vrais OS"?

    Aux gens qui utilisent un OS qui n'est pas livré avec un outil de sauvegarde raisonnable.

  • [^] # Re: imagemagick

    Posté par  (site web personnel) . En réponse au message erreur sed. Évalué à 1.

    Je suis François sur ces critiques, mais au lieu d'une image JPEG on peut opter pour un fichier DJVU.

  • [^] # Re: Miracle ?

    Posté par  (site web personnel) . En réponse au journal En Inde, un calvaire oppose catholiques et scientistes. Évalué à 3. Dernière modification le 29 mai 2012 à 07:27.

    si elle était un jour contaminée, les évêques se joindraient sans problème aux autorités pour interdire d'en boire…

    Je pense notamment aux évêques qui ont spontanément critiqué ce prêtre qui, il y a 2­–3 ans, affirmait que le préservatif ne protégeait pas du SIDA car le virus était assez petit pour passer à travers la matière. L'affaire avait eu un petit retentissement national, et je ne me rappelle malheureusement pas qu'elle se soit conclue par un désavœu officiel de la position dudit prêtre par sa hiérarchie.

  • [^] # Re: scientificité et scientisme....

    Posté par  (site web personnel) . En réponse au journal En Inde, un calvaire oppose catholiques et scientistes. Évalué à 5.

    Ce propos me paraît contradictoire. Affirmer des choses sans plus les démontrer, n'est-ce pas là le propre de la foi ?

    Pas du tout. La raison a essentiellement une fonction d'organisation des connaissances, mais pour commencer à organiser quoique ce soit, il faut bien des connaissances avec lesquelles commencer. Ces dernières sont invariablement fournies par l'intuition.

    C'est le cas en mathématiques, où on choisit des axiomes et des modes de raisonnement qui nous paraissent en adéquation avec les inuitions qui nous viennent du monde. C'est aussi le cas en philosophie, par exemple lorsqu'on reconnaît que la raison seule est incapable de fonder la morale: dans un système de valeurs morales, la raison permet d'organiser les jugemements ou de dériver de nouveaux jugemements (tuer plusieurs personnes est probablement plus grave que tuer une seule personne qui à son tour est probablement moins grave que de voler une pomme ou pisser dans la piscine de son voisin) de façon cohérente avec avec les premiers jugements.

    En revanche, s'il est exclu de tout démontrer — car cela ne semble pas possible — il n'est pas interdit d'argumenter sur le choix de ces axiomes, sans toutefois fournir de démonstration au sens technique du terme. Par exemple, remarquer que tel choix d'axiomes mathématiques aboutit à une teorie contradictoire ou que tels choix de valeurs morales ne permet pas de condamner le nazisme¹ peut mener vers une critique de ces choix.

    La différence de taille entre science et religion est que dans un cas la critique des axiomes ou vérités premières est vivement encouragée (à condition d'avoir des arguments, tout de même!) dans l'autre absolument interdite, en tout cas en ce qui concerne le quidam.

    ¹ Ce n'est pas un point Godwin mais le sujet du livre «Droit naturel et Histoire» de Léo Strauss.

  • # dump

    Posté par  (site web personnel) . En réponse au sondage Quel logiciel libre pour vos sauvegardes ?. Évalué à 9.

    Comme j'utilise un vrai système d'exploitation (FreeBSD) il y a déjà un outil de sauvegarde simpliste mais robuste installé dessus. Mon schéma de sauvegarde consiste à faire une sauvegarde de niveau 0 quand ça me pète, une sauvegarde de niveau 1 tous les mois, et des sauvegardes de niveau 2-9 le reste du temps.

  • [^] # Re: git push

    Posté par  (site web personnel) . En réponse au sondage Quel logiciel libre pour vos sauvegardes ?. Évalué à 2.

    [Git]est parfait!

    Il me semble qu'il ne sauvegarde pas les dates, si?

    De plus, pour sauvegarder des données utilisateur pourquoi pas, mais s'il s'agit de sauver un système, il vaut mieux penser à autre chose/.

  • [^] # Re: Algo

    Posté par  (site web personnel) . En réponse au message Projeter une image le long d'un chemin. Évalué à 2. Dernière modification le 22 mai 2012 à 22:41.

    Cette transformation ne transforme correctement que les points du haut du motif, c'est à dire ceux qui se retrouveront pile sur la courbe. Les points du bas suivent une autre courbe/équation. Ici cette autre courbe est visible en jaune.

    J'avais fait seulon ton premier dessin, dans le second ce qui tu veux me semble plus clair.

    Il faut que tu envoies le point (ξ,η) sur le point (ξ,f(ξ)) + η N(ξ) où N(ξ) est le vecteur unitaire normal à la courbe (dans l'orientation habituelle du plan) N(ξ) = (-f'(ξ),1)/SQRT(1 + f´(ξ)²).

    Je disais que les points du bas du résultat, ici vers la courbe jaune, n'ont pas qu'un seul candidat dans l'image source.

    C'est pour cela que le plus simple est probablement de déterminer la couleur en faisant une moyenne comme je te le propose dans B' → B !

  • [^] # Re: Un dossier par module

    Posté par  (site web personnel) . En réponse au message Du bon usage de svn. Évalué à 3.

    Dailleurs le developpement de la partie ora10g est en partie base sur ora9i (c'est un fork-cp: cp ora9i ora10g et on repart). Tout comme le so/ora11g est un "fork" de cc021/ora10g. Comment gerer cela correctement ?

    Il faut commencer par définir «correctement»!

    Du point de vue de ton SCM, ici Subversion, il s'agit essentiellement de se souvenir que ora10g est un fork de ora9i, ce que font (certainement) tous les SCM postérieurs à CVS, notamment SVN. (Avec svn cp …)

    Le problème est que le fork est déjà fait, donc la question suivante est «comment importer l'hisotorique dans Subversion?» si cette historique existe! J'ai l'impression que ce n'est pas le cas, la solution suivante serait d'utiliser une sauvegarde antérieure au fork pour créer une historique artificielle qui permettrait de garder trace du fork dans Subversion.

    Ceci dit, si deux arbres source sont aussi proches que tu le dis, on peut se poser la question de l'opportunité d'un fork. Il peut il y avoir de meilleurs moyens d'adapter votre logiciel à son environnement, par exemple avec du polymorphisme ou une configuration adaptée: le SCM n'est pas forcément le bon lieu pour régler ce problème.

    J'ai vu dans un autre fil que tu répugnais à imposer à tes collaborateurs l'emploi des branches. Je te suis en partie, mais en principe le travail sur les branches n'est pas si difficile que ça — à une exception notable près: les merge, qui sont une opération plus délicate. Tu peux tout de même introduire les branches en désignant un petit nombre de «officiers de merge» qui sont plus à l'aise avec la technique et s'occuperont des merge, au besoin avec l'aide du développeur auteur des modifications.

    Ceci dit, même sur un public de gens peu rompus à l'emploi des SCMs, des interfaces graphiques (intégration dans un explorateur de fichier) pour le SCM et un outil pour les merge permet à chacun de se débrouiller de façon honorable — dans cette solution, tu peux garder l'idée des «officiers de merge» qui épauleront leurs collègues en cas de difficultés.

  • # Un dossier par module

    Posté par  (site web personnel) . En réponse au message Du bon usage de svn. Évalué à 3.

    • Tu devrais plutôt opter pour une organisation

    dba_w9n/{mysql_tb,oracle_rac,…}/{branches,tags,trunk}

    • SVN ne garde que HEAD dans le checkout, donc tu ne vas jamais sortir 10 ans de dév.

    • Tu checkoutes seulement le module que tu veux.

    Entre cette organisation, et l'organisation «un repository par module» la différence est mince — est concerne essentiellement l'admin des dépôts.

    Tu peux avoir plusieurs dossiers de branches, par exemple pour trier les topic branches et les maintenance branches.