fearan a écrit 7241 commentaires

  • [^] # Re: Je hais le C++

    Posté par  . En réponse au journal Moi, expert C++, j'abandonne le C++. Évalué à 2. Dernière modification le 05 juin 2019 à 09:34.

    Tu pose une question, je répond, va pas changer l'énoncé ensuite, même valgrind ne bronche pas sur le premier exemple.

    D'un point de vue technique (norme) le pointeur renvoyé c_str() (ou data()) reste valide tant que la chaine initiale n'est pas modifié. La chaine est détruite à la fin de la ligne const char *c1= s.substr(2).c_str(); , et la ligne suivante donne donc théoriquement un comportement indéfini;

    cependant au vu de la taille de la chaine résultante, "123", on est dans le cas de la short string optimisation, ce qui fait que la totalité de la string est stocké sur la pile; non partagé avec qui que ce soit; et donc en absence de nouvelle allocation locale, on y touche pas; donc la mémoire est toujours valide ;) Ce qui fait que ton cas est parfaitement prévisible ;)

    évidemment, si on agrandi la chaine résultante pour ne plus bénéficier de la short string optimisation, on n'alloue plus sur la pile mais le tas, et là tu vas faire broncher valgrind ;)

    Ensuite du C dans du C++, c'est fréquent; par contre je le redis : on ne passe en char* qu'au dernier moment ;)

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: Je hais le C++

    Posté par  . En réponse au journal Moi, expert C++, j'abandonne le C++. Évalué à 2.

    tu as tout faux, même si ton compilateur en a tiré qq chose

    Je connais le problème des pointeur / référence sur temporaire; il se trouve que dans un environnement simple ton test donnée ne va jamais planter parce que le recouvrement de mémoire n'est pas fait, même valgrind ne râle pas, c'est pour dire! :P

    Le vrai soucis c'est que tu combine du C (stdio.h) avec du C++. normalement, tu ne passe en c_str qu'au dernier moment.

    En C moi j'ai eu ça

    int calculJour(int i )
    {
       static int *tab=NULL;
       [...]
       if ( taille insuffisante)
         tab=realloc(...);
       tab[n]=calculJour(n)
       [...]
       return x;
    }

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: En France d'ailleurs

    Posté par  . En réponse au message Plateforme équivalente . Évalué à 3.

    j'aurais dis /. mais ça fait longtemps que je n'ai pas été y faire un tour ;)

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: Je hais le C++

    Posté par  . En réponse au journal Moi, expert C++, j'abandonne le C++. Évalué à 4.

    Toi ça ne te choque pas qu'un paramètre par défaut soit modifié à chaque appel ?

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: c'est un peu vague comme énoncé

    Posté par  . En réponse au message Logiciel pour remplacer mots. Évalué à 7. Dernière modification le 04 juin 2019 à 16:37.

    rapidement

    sed -r 's/monNomDeDomaine[.]fr/monNouveauNomDeDomaine.org/g' -i.old $(find -iname '*html' -or -iname '*md')

    en gros va remplacer toutes les chaines monNomDeDomaine[.]fr par monNouveauNomDeDomaine.org dans tous les fichier se terminant par html ou md.

    dans le cas où tu aurais des / dans les noms à repplacer, il vaut mieux uiliser # comme séparateur de champs, donc

    sed -r 's#monNomDeDomaine[.]fr#monNouveauNomDeDomaine.org#g' -i.old $(find -iname '*html' -or -iname '*md')

    le -i.old permet de ne pas perdre les fichier d'origines, ils seront simplement renommé en .old

    -i tout court va modifier les fichiers sans sauvegarde :)

    le [.] dans la première partie permet de ne pas interpréter le . (dans une regEx, le . désigne n'importe quel caractère ) ou plus précisément [.] prends un caractère dans la liste des caractères entre les [] ici il n'y a que le . certains utilisent ., mais ça devient vite le bordel, notamment quand on inclue des chaines de caractères dans les autres.

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: Je hais le C++

    Posté par  . En réponse au journal Moi, expert C++, j'abandonne le C++. Évalué à 2. Dernière modification le 04 juin 2019 à 15:14.

    l'un de mes préféré en java (valable au moins jusqu'au 8, je ne sais pas pour les suivant)

    Je meuble un peu pour l'indentation :P

    Integer a = new Integer(126);
    Integer b = new Integer(126);
    if ( a==b ) 
      System.out.println("1  : a==b")
    a++;
    b++
    if ( a==b ) 
      System.out.println("2 : a==b")
    a++;
    b++;
    if ( a==b ) 
      System.out.println("3 : a==b")

    Que donne ce petit bout de fonction ?

    et ce qui fait que je hais le java

    class Pika
    {
      void accept(Collection<String>   plop) { [...]}
      void accept(Collection<Integer>  plop) { [...]}
    
    }

    Ne peut pas compiler car il n'existe pas de type Collection<Truc>, en fait on a que des collection d'objet!

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: Je hais le C++

    Posté par  . En réponse au journal Moi, expert C++, j'abandonne le C++. Évalué à 4.

    pour le 1, rien de plus que ce qu'on pourrait penser

    123
    123
    123

    le pointeur retourné par c_str() reste valide tant qu'il n'est pas invalidé par une fonction modifiant la string d'origine ;)

    Le deuxième cas est plus compliqué tu as d'ailleurs joué avec une variable globale pour éviter un bon gros warning de compilation (voir une erreur) (pour cet exemple); il t'affiche

    A
    B

    pour ceux qui n'auraient pas compris la blague B(b) est interprété comme B b; une déclaration d'une variable b de type B. Mais bon c'est quoi ton langage préféré ? parce que des blagues de ce genre j'en ai en java, python, C, perl, bash…

    si il avait déclaré une variable locale ou en tant que paramètre

    void fun( int b)
    {
            B(b);
    }

    Il aurait eu une joli erreur de compilation

    plop2.cc:17:5: error: la déclaration de « B b » masque un paramètre

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • # c'est un peu vague comme énoncé

    Posté par  . En réponse au message Logiciel pour remplacer mots. Évalué à 3.

    Tu pourrais être plus précis sur l'exercice : format de fichier en entré, exemple de cas (exemple quoi)

    Car la simplement comme logiciel :

    on a emacs qui fait tout

    perl si tu veux un truc plus user friendly ;)

    ou comme dit plus haut une articulation bash autour de sed

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: Go ou Rust?

    Posté par  . En réponse au journal Moi, expert C++, j'abandonne le C++. Évalué à 5. Dernière modification le 04 juin 2019 à 12:02.

    Yep, c'est ce qui se disais aussi ici, le temps d'exec on s'en fout, sauf qu'on a passé la limite critique de temps de calculs, notamment pour la coordination européenne, les gens ont tellement codé comme des porcs, qu'en à peine 1 journée de boulot, on est passé de 1h de traitement à 30 minutes, un calcul mal placé. Mais régulièrement on fait 2 ou 3 recherche dans les map, là où une seule suffit.

    Les gens oublient que le insert en c++ n'insert rien si l'objet est déjà présent (et renvoi une paire (itérateur de l'élément dans la map (nouveau ou ancien), booleen d'insertion), et font des recherche/ajout,

    Alors ce genre de petits détails peut ne pas impacter l'appli, quand tu les fais en plein milieu des calculs ça commence à impacter sérieusement les perfs. De même utiliser un vector pour une liste d'éléments dans laquelle on supprime et ajoute des éléments n'est pas non plus optimal.

    Je ne parle même pas des allocations dynamique là où une variable locale suffit.

    C'est clair qu'une mise-à-jour du matériel est moins chère.

    Yep c'est ce que le client pensait aussi, sauf qu'en codant avec des complexité en O(K * N²), le K a 3 ou 4 il commence à faire mal lors des calculs intensifs; si à cela tu ajoute que souvent on est en n3 au et que pas mal de n² pourraient être en n * log(n), le coût du matériel commence à se faire vraiment sentir, et qui dit serveur de plus (on fait du calcul distribué), dit aussi maintenance en plus.

    Y'a quelques années j'avais aussi gagné un facteur 3 sur un ensemble de calculs (une bonne semaine de boulot, factorisation des calculs identique)

    Bref optimiser à fond, traquer le point qui fait perdre 3ms, aucun intérêt; par contre timer le code voir où on perd le plus de temps, voir si c'est normal, et dans le cas contraire s'en occuper est indispensable.

    Plus récemment, j'ai trouvé dans le code une recherche d'élément dans une map qui ne cherche pas par la clé (problème de jouer avec plusieurs identifiants); le tout dans uns boucle, schématiquement c'est

    for( auto pika : lstElement )
    {
      if ( grosConteneur.getFromSecondary(pika)   // O(n)
           ||  grosConteneur.get(pika)  )         // O(log(n)) 
      {
         Choux bruxelle = grosConteneur.getFromSecondary(pika);
         if( !bruxelle )
           bruxelle = grosConteneur.get(pika);
         [...]
      }
    }

    Le stict minimum, c'est d'avoir une durée qui n'explose pas dès qu'on augment un peu la volumétrie; sinon c'est tous les 2 mois qu'il faut racheter des serveurs, multiplie ça par le nombre de lieu où c'est déployé (5-6 en France, et d'autre à l'étranger), l'achat de serveur n'est pas toujours la bonne solution.

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: Mon avis (professionnel)

    Posté par  . En réponse au journal Moi, expert C++, j'abandonne le C++. Évalué à 3.

    yep j'aime beaucoup celle qui permet de ne même pas avoir d'allocation dynamique sur les petite chaines ;)

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: Performance

    Posté par  . En réponse au journal Moi, expert C++, j'abandonne le C++. Évalué à 4.

    ton application C++ en 30ans tu l'a réécrite 2 fois au moins (une fois pour prendre en compte C++98 et une pour C++11) si tu t'en es bien sorti. Oui tu as aussi dû réécrire ton application python pour passer à python3 on est d'accord. C'est juste pour dire que la maintenance de ce genre de code même en C++ ce n'est pas trivial du tout.

    If it works, don't fix it !!!

    Le code entre C++ 98 (ou 2003), est compatible avec le C++11, mise à part quelques cas marginaux comme des using namespace std et using boost::shared_ptr, pas besoin de mettre à jour le code. Lors de modifications de code (évolution), il est tout à fait possible de faire la mise à jour du code dans le cadre de l'évolution.

    il est beaucoup plus simple d'écrire des tests, mais vraiment beaucoup.

    il y a pas mal de composant de test (cppunit, google test suit) qui rendent l'écriture de test très aisée.

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: Mon avis (professionnel)

    Posté par  . En réponse au journal Moi, expert C++, j'abandonne le C++. Évalué à 2.

    Quelques pistes à m'indiquer ?

    Je vais essayer de faire succin ;)

    • l'intégration de pas mal de fonctionnalité de boost comme les pointeurs intelligents, les regex…
    • les lambda function (permettre la définition d'une fonction lambda, très utile pour tout ce qu'il y a dans std::algorithm
    • le mot clé auto (en gros déduction par le compilateur du type de la variable; très pratique pour les itérateurs :) )
    • variadic template, ou template a nombre variable d'argument (si tu as utilisé le make_shared de boost et regardé sa définition (pré c++ 2011) tu peux comprendre rapidement l'intérêt)
    • la spécialisation partielle de template
    • Plus avancé mais un gros travail sur les rvalue/lvalue, de nouveau type de constructeur (déplacement)
    • de grosses facilité pour l'écriture de template (enable_if<>…)
    • static_assert

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: Réunion des développeurs C++ anonymes ;)

    Posté par  . En réponse au journal Moi, expert C++, j'abandonne le C++. Évalué à 3.

    ça dépend; tu as des VN en python, tu as des casses briques en java (oui oui minecraft rentre dans le domaine casse-briques); tu as un paquet de jeux en html+js (twine assez souvent), tu en a aussi en html5, ou en flash.

    Tu as même pleins de remake des jeux des années 1990 dans le navigateur (lemmings, doom… )

    Par contre la majorité 'gros' jeux (Skyrim, Fallout4…) sont en C++; pour ces deux là tu as un langage de script associé (papyrus) qui permet de d'interfacer les quêtes/sorts/actions et rendent le système plus flexible.

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: Mon avis (professionnel)

    Posté par  . En réponse au journal Moi, expert C++, j'abandonne le C++. Évalué à 3.

    mouais c'est pas pour ça qu'on a les scoped_lock ?

    parce que le jour où on rajoute un truc qui pète en dehors du try, on est dans la mouise ;) Surtout que là on a masqué l'exception, ça peut être justifié, ça dépend du contexte ;)

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: Mon avis (professionnel)

    Posté par  . En réponse au journal Moi, expert C++, j'abandonne le C++. Évalué à 4.

    M'en parle pas on est en c++ 2003 ici, et je tombe sur du copier/coller ou des macro là où fonction ou template suffirait, je retrouve jusqu'à 6 passage identique dans un même fichier (3*2), trois fois la même chose, dont certains élément à l'intérieur se répètent eux même.

    Il n'est pas rare de retrouver le même bloc de 6 lignes répétées 15 fois… Je ne compte plus les

    if ( mapDeTruc.find(pika) == mapDeTruc.end() ){
       mapDeTruc[pika]=vector<plop>();
    }
    mapDeTruc[pika].push_back(choux);

    ou les find juste avant les insert. Bref même pour des morceaux de langage vieux de 20 ans les gens ne regardent pas la doc. (pour info seule une seule ligne ci-dessus est nécessaire, la dernière;

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: nope

    Posté par  . En réponse au message X11 et le vol par capture d'images. Évalué à 2.

    Ce doit être plus compliqué que ça…

    • keylogger ( par exemple https://www.macrorecorder.com/ ou sous Linux yum install xev (ou dnf install xev , ou urpmi xev selon la distrib ), puis xev -id fenêtre )
    • pour le presse papier, sous windows tu as quick atlas qui te traduit le contenu du presse papier, ou office qui te conserve jusqu’à un certain nombre de copier, sous Linux klipper sous kde, fait la même chose qu'office (depuis plus longtemps ;) )
    • lecture/écriture sur disque, n'importe quelle appli le permet, suffit de modifier la conf pour s'en rendre compte ;)

    Car si faille il y a, alors elle est sans doute exploitées.

    Ce ne sont pas des failles, pas en tant que telle, normalement ce qui tourne sur ton poste est contrôlé, c'est toi qui est maitre de ce qui tourne, et avant html5, ce que permettait un navigateur était assez limité, d'où la présence de flash/java qui permettaient de faire plus, le premier étant plus limitant que le second.

    Avec l'arrivé du html5, ces deux dinosaures finiront par tomber dans l'oubli, mais la maitrise de ce qui tourne est plus compliqué, si on pouvait activer/désactive ces deux antiquités, html5, lui, n'est pas désactivable.

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: peertube / docker

    Posté par  . En réponse au journal projet s2s. Évalué à 3.

    C'est une bonne question. À partir de quand la loi va considérer que c'est ou non la même instance (typiquement une nouvelle adresse vers laquelle on est redirigé (en plus du changement de charte graphique). Ça seul un juge sera capable de le dire…

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: L'avenir des cryptomonnaies ?

    Posté par  . En réponse au journal La Banque du futur. Évalué à 5.

    Ah ben oui, pourquoi pas. Donc comme j'écrivais au-dessus: s'il m'arrive quelque chose, tu vas demander à ma femme de:[…]

    Je crois que tu as zappé l'usufruit… Globalement l'idée pour éviter d'augmenter le traumatisme de perdre un proche, tu gardes l'usage des biens possédés, mais pas leur propriété, le tout sans taxe. Cela évite de devoir vendre pour payer les droits de succession, et si tu veux à nouveau léger ta maison/entreprise/fauteuil louis XVI, tu rachète à l'état la propriété.

    Pareillement pour ma fille si elle atteint ses 18ans et qu'elle perd ses parents:

    Pareil, cela rentre dans l'usufruit détaillé plus haut.

    Tout comme 0 taxe sur le pécule hérité en propriété - dont le seuil reste à définir, mais doit rester bas.

    Je pense que tes idées sur l'héritage ont été bien peu confrontées au monde réel.

    J'ai surtout l'impression que tu n'avais pas lu ma réponse :P

    Notre maison est uniquement à mon nom, et c'est une idée… de ma femme! L'idée est que si on investit en immobilier, sa côte de crédit à elle sera encore bonne puisque l'hypothèque de la maison est à mon nom uniquement.

    Moui, toutes ces raisons sont de la manipulation et du contournement, j'ai rien contre, mais râler ensuite parce que cela se retourne contre toi… Tu veux les gains sans les risques.

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: L'avenir des cryptomonnaies ?

    Posté par  . En réponse au journal La Banque du futur. Évalué à 5.

    Je n'ai pas parlé de supprimer l'héritage, juste que je n'étais pas jusqu'au boutiste de ce que l'on doit hériter ou non. Qu'on puisse transmettre à ses héritiers un petit pécule me parait normal, certaines choses ont une valeur sentimentale ; que l'usufruit des biens immobilier possédés soit passé à la génération suivante et survivante, me parait aussi normal. Mais au delà de la, pour retransmettre la maison ou les parts d'entreprise, il faudrait la racheter à l'état.

    Avec ce genre de système, tu limites l'accumulation de richesses, sans foutre les gens dehors ou hors de leur entreprise.

    En prenant comme exemple dans un couple où chacun à son propre compte : si l'un décède, c'est normal pour toi que l'autre n'hérite pas de l'argent qu'il/elle n'aura pas "mérité" ?

    Si une telle loi existait, et que les deux époux on décidé de ne pas mettre l'argent en commun de leur vivant pourquoi le faire à leur mort?

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: peertube / docker

    Posté par  . En réponse au journal projet s2s. Évalué à 2.

    Yep, c'est cool, maintenant mon coté froid se demande comment juridiquement ça passe avec la dernière directive sur les droit d'auteur passé au parlement européen - et probablement juillet prochain en France. Si tu maintien ton serveur plus de 3 ans tu as l'obligation de mettre des filtre ça gère comment ?

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: L'avenir des cryptomonnaies ?

    Posté par  . En réponse au journal La Banque du futur. Évalué à 4.

    Je ne suis pas adepte de crypto monnaie mais…

    • comment fait-on pour bloquer un compte (suite à une décision de justice) ?

    Ça ne marche pas pour toutes les banques; typiquement va prendre une banque dans un pays autre que celui où la décision est rendue, l'exécution du blocage n'est pas garantie.

    • comment fait-on pour récupérer son argent si on a perdu son mot de passe ?

    Oups ;)

    • comment fait-on pour être remboursé s'il y a eu une opération frauduleuse ?

    Oups, encore :) Normalement, les transactions bancaires (ou du moins jusqu'à récemment), devaient être authentifié par toi pour être valide, ce qui fait qu'il suffisait de dire que ce n'était pas toi pour que la banque rembourse (même si elles avaient tendance à refuser ou exiger des frais, mais en insistant et leur rappelant leur devoirs, il annulaient la transaction) Pour les crypto monaie… c'est foutu :)

    • comment fait-on pour débloquer un compte sans l'accord de son propriétaire (par exemple lors d'un héritage) ?

    N'étant pas vraiment fan de l'héritage (argent gagné non mérité) je verrai plus ça comme une fonctionnalité ;) Ensuite la personne peu aussi donner ces informations dans un testament ou un coffre ouvert à sa mort.

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: nope

    Posté par  . En réponse au message X11 et le vol par capture d'images. Évalué à 4.

    C'est moi, ou cette absence de sécurité sur les contenus visuels semble préoccuper personne ?

    Cela préoccupe des gens, mais peu de systèmes bloquent réellement la capture d'écran ou de zone d'écrans. Par ailleurs si tu as un processus résident qui 'regarde' ton écran, qu'en est il du clavier? Du presse papier? du disque dur? du réseau? Si tes mots de passes sont stocké sur disque, il est plus simple d'écouter le clavier lorsque tu tape ton master password; si c'est sur le réseau un processus résident de l'utilisateur peu aussi regarder sa mémoire ou le remplacer…

    Et je ne parle pas du risque d'élévation de privilège, qui même si elle est plus compliqué, peu se faire (mais nécessite une connaissance plus précise du système. )

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: Premier vote

    Posté par  . En réponse au journal Appel de plusieurs organisations à imposer un minimum d'interopérabilité pour les GAFA. Évalué à 10.

    Y'en a ici (et ailleurs) qui font limite des crises de panique devant. C'est ridicule.

    J'ai pas vu de crises de panique, juste des remarques incendiaires sur la forme, comme se prendrait tout journal bourré de faute, écrit en SMS, ou en 1337 5P34K, ou faisait appel à de trop nombreux anglicismes; ce n'est pas réservé à cette mode; juste qu'ici on a pas mal de jeune ou vieux conservateurs ou conservatrices n'appréciant pas que l'on martyrise notre bonne vielle langue Française par des annotations sauvages.

    L'individu ayant jadis perpétré le même méfait et ayant déjà eu des remontrances à cette occasion, ça n'en fallait que peu pour enflammer l'ire des êtres qui déchiffrent sa prose. Réprobation d'autant plus violente que la nouvelle masquée par des atours de langages fort disgracieux était, ma foi, digne d'intérêt. Et lorsque l'on affriande le chaland ou la chalande, toute vétille compte et l'accueil de la missive découle de sa tournure, d'où les rodomontades vouées à améliorer à l'avenir la prose de cette damoiselle ou damoiseau.

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: pas cool les gens

    Posté par  . En réponse au journal Appel de plusieurs organisations à imposer un minimum d'interopérabilité pour les GAFA. Évalué à 10.

    Arguer qu'ils nécessitent un effort substantiel à la lecture en est une autre.

    Il nécessite le même effort que déchiffrer du SMS, du 1337 5P34K ou des regEx, et pour que l(es |')aut(rice|eur)s? se permette(nt)? la flemme de ne pas développer son texte; (il|elle) impose à toutes personnes cherchant à comprendre son message de faire un effort supplémentaire; ce n'est pas parce que tu n'as pas d'effort supplémentaire à fournir que c'est de cas de tout le monde.

    Utiliser des mots rares permet d'enrichir le vocabulaire des l3ct.3ur.r1c3.s et permet de nouvelles façons d'exprimer des idées il y a un gain. Faire un effort pour satisfaire la flemme d'une? autre : NON.

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • [^] # Re: Premier vote

    Posté par  . En réponse au journal Appel de plusieurs organisations à imposer un minimum d'interopérabilité pour les GAFA. Évalué à 10.

    Tu devrais essayer d'écrire un journal ou une dépêche en SMS, juste pour voir comment les vieux et les réacs vont réagir.

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent