fearan a écrit 7448 commentaires

  • [^] # Re: ca depend

    Posté par  . En réponse au message Windows - Logiciel libre de nettoyage ?. Évalué à 4.

    Si un logiciel est aussi bavard à sa désinstallation, c'est généralement une bonne raison de le virer, il y a de très forte chances qu'il soit un logiciel de pub. :)

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

  • [^] # Re: ca depend

    Posté par  . En réponse au message Windows - Logiciel libre de nettoyage ?. Évalué à 2. Dernière modification le 06 septembre 2016 à 12:06.

    je ne connais pas trop les moutures > 7, mais généralement

    • un coup ce ccleaner pour nettoyer le tout.
    • un tour dans les services Windows+r services.msc, et désactiver tous les services qui servent a rien peut aider.
    • Un tour dans les programmes installés pour virer tout ce qui est toolbar ou adaware qui trainent.

    et en désespoir de cause un msconfig pour désactiver ce que les étapes précédentes n'ont pas réussi.

    Mais évidemment c'est des préconisation de windows 7

    Ah oui si le disque C: est plein, faire le ménage !!!

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

  • [^] # Re: Mauvaise connaissance du c++

    Posté par  . En réponse au journal Gestion de l'erreur - C++ - std::optional. Évalué à 2.

    Alors là c'est qu'on ne passe pas sur les mêmes bases de codes; si on a un e.printStackTrace(), c'est que c'est normalement un cas qui ne doit JAMAIS arriver; si cela arrive, les unités de parse de log te remontent le machin directe chez le dev pour qu'il regarde le cas.

    Par contre comme les procédures pour installer un patch sont assez compliqué à mettre en oeuvre, on préfère garder le système en état de fonctionnement.

    J'ajouterai que ton code, ça risque de ne pas compiler (value peut être non initialisé), il faudrait au moins le mettre à 111, 421 ou 666 ou encore, ajouter un throw :)

    tiens un truc amusant pour chopper un constructor que l'on sait exister avec ensuite utilisation de ce constructor j'ai ça dans mon catch : InstantiationException | InvocationTargetException | NoSuchMethodException | IllegalAccessException

    ça en fait pas mal pour rien…

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

  • [^] # Re: Mauvaise connaissance du c++

    Posté par  . En réponse au journal Gestion de l'erreur - C++ - std::optional. Évalué à 3.

    Plutôt qu'un serr tu plante ton processus par ce que tu viens de te retrouver dans un état impossible.

    C'est pour cela que j'ai tendance à préférer le stacktrace qu'on retrouvera dans les logs; ça évite de planter toute l'appli et de déconnecter sauvagement tous les utilisateurs du serveur métier.

    Tu utilises, ou fait, une API adaptée a ton besoin

    Merci, mais je ne vais pas recoder la roue; je fais avec les briques que j'ai; je ne vais pas coder une api par état non plus (telle api à utiliser dans ce cas là, telle api dans celui ci…

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

  • [^] # Re: audio casque

    Posté par  . En réponse au journal Grosse fatigue.... Évalué à 4.

    ça me rappelle une pub ça ;)

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

  • [^] # Re: Mauvaise connaissance du c++

    Posté par  . En réponse au journal Gestion de l'erreur - C++ - std::optional. Évalué à 3.

    Hum ignoré ou printStracktrace(), dans les deux cas tu as merdé ton design quelque part.

    Je sais pas, je récupère un XML, généré par l'appli, que je parse. Les chance que ce xml ne valide pas le schéma, qu'il soit mal formé ou n'ait pas la balise attendu est nulle, je dois vraiment polluer le code? Et je met quoi ? serr ("Oups si on est la c'est qu'on a vraiment merdé" );

    Là j'ai pris un exemple tangent, mais imagine que c'est une regex en dure dans le code, faut aussi se farcir de la gestion d'exception pour dire qu'elle est mal rédigée?

    Bref lorsque tu codes, tu peux faire des assertions sur ce que tu as en entrée, et tu peux être certains que là où tu passes tu n'auras jamais l'exception; devoir alourdir le code et provoquer des changement de scope (et donc de visibilité) pour des cas qui n'arrivent jamais n'est vraiment pas un gain.

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

  • [^] # Re: Liberté de l'utilisateur

    Posté par  . En réponse au journal Gestion de l'erreur - C++ - std::optional. Évalué à 3.

    à noter que l'exemple n'est vraiment pas top,

    si on fait if( machinOptional ), on peut ensuite utiliser *machinOptional, le value() fait une verif supplémentaire qui n'est pas nécessaire.

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

  • [^] # Re: chauve qui peut

    Posté par  . En réponse au journal "Tant pis, ce seront nos enfants qui paieront". Évalué à 2.

    Tu peux aussi ajouter le cas du dirlo qui se barre avec la caisse.

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

  • [^] # Re: Liberté de l'utilisateur

    Posté par  . En réponse au journal Gestion de l'erreur - C++ - std::optional. Évalué à 2.

    Crée ton optional avec levée d'exception si tu y accède alors qu'il n'existe pas, ou utilise value_or pour avoir une valeur avec du sens; je ne vois pas vraiment ce que l'on peut faire de mieux.

    Il vaut mieux lire l'interface exposée ici pour se faire une idée.

    http://en.cppreference.com/w/cpp/experimental/optional

    pour son exemple

    std::optional<D> foo(Arg arg)
    {
        auto fResO = f(arg);
        if(!fResO)
        {
            return std::optional<D>{}; // un optional vide
        }
    
        auto fRes = fResO.value();
    
        auto gResO = g(fRes);
        if(!gResO)
        {
            return std::optional<D>{}; // un optional vide
        }
    
        auto gRes = gResO.value();
    
        return std::optional<D>{h(gRes));
    }

    Je me contenterai de

    std::optional<D> foo(Arg arg)
    {
      try{
        return make_optional(h( g( f(arg).value() ).value())) ;
       }
       catch(Machin e)
       {
        return std::optional<D>();
       }
    }

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

  • # Mauvaise connaissance du c++

    Posté par  . En réponse au journal Gestion de l'erreur - C++ - std::optional. Évalué à 5.

    Cependant, rien ne force le développeur à gérer les exceptions et rien n'indique à celui-ci qu'une fonction peut lancer une exception, si ce n'est une lecture scrupuleuse de la documentation. Certains langages, comme Java, proposent un système d'exception qui force le développeur à gérer celles-ci ou à les propager explicitement à la fonction appelante.

    Pour la stl, les exceptions sont rare uniquement si tu le réclame, optional à un option de construction qui lui permet de jeter une exception lorsque tu utilisas values() si tu lui réclame.

    Tu as aussi le value_or() qui permet d'avoir une valeur par défaut si on a rien. C'est pareil avec les ios, les dynamic_cast, les conteurs (at() au lieu de operator[]… )

    Le fait d'avoir le choix est une bonne chose, je ne compte pas le nombre de

    Machin ma = null ; 
    try{
      ma=pouet() ;
    }catch(ExceptionMachin ignored){}
    }catch(ExceptionBidule ignored){}
    }catch(ExceptionTruc ignored){}

    que je croise en java pour devoir gérer le fait que l'on sait qu'on a pas d'exception dans ce cas précis, mais qu'on doit faire comme si. Avec en prime le fait que le compilo pense que ma peut être null, ce qui peut faire chier au niveau de certaines annotations, donc faut encore en rajouter…

    Heureusement depuis java 7 on peut cumuler les catch (catch ExecptionMachin|ExceptionTruc|ExceptionBidule|ExcetionCasseCouille|ExcetptionJeDepasseLaLigneDe120Caractere|ExceptionJenAiEncore e)

    Le code java est pollué par de la gestion de truc qui n'arrivent jamais, et le jour où ça arrive, c'est tellement ignoré que ça passe à la trappe; j'ai une préférence pour faire un printstacktrace, au cas où.

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

  • [^] # Re: C++ et exceptions

    Posté par  . En réponse au journal Gestion de l'erreur - C++ - std::optional. Évalué à 3. Dernière modification le 05 septembre 2016 à 10:04.

    tu peux aussi ajouter les dynamic_cast T& qui te jettent une exception std::bad_cast, alors que les dynamic_cast T* vont te renvoyer un pointeur null dans le cas où ce n'est pas possible.

    En c++ on a le choix et c'est bien. Je déteste devoir parsemer mon code de try/catch pour une gestion qui peut s'agrémenter de if ou ?;

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

  • [^] # Re: Peucrédible

    Posté par  . En réponse au journal Un ransomware tout à fait déloyal ... et inquiétant. Évalué à 2.

    Hou Hou, j'ai souvenir d'un client qui était venu nous voire justement pour trouer la sécurité (pas trop quand même, juste un tunnel ssh) pour faire fonctionner un morceau de l'appli, mais qui en raison de la politique de sécurité de l'entreprise, ne pouvait pas fonctionner. Le temps de mettre à jour la config, il a bien fallu passer autour. (Le problème des grosses entités, faut que ce soit validé par tous les n+[1-3], avec le risque que quelqu'un qui n'y connait rien bloque la procédure, ensuite demander au gestionnaire du réseau (qui est encore une autre entreprise), de mettre à jour la conf…

    Bref t'en as pour 6 mois de procédure pour avoir ta mise à jour de configuration, le tout pour une passerelle qui va durer 8 mois; donc si on respecte la procédure, 2 mois d'activité.

    Évidemment si une personne s'était penché sur la problématique avant la mep, on aurait pu faire la demande avant, mais le dev pensait que ça allait passer par les chemins habituels, pas de bol, on lui a spécifié ce détail pas longtemps avant le rendu :P.

    Ah je vous avais dit que chez ce client faut se battre pour avoir les spec avant le début du développement (et encore quand c'est pas à nous de les rédiger à partir d'une expression du besoin).

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

  • [^] # Re: Question ...

    Posté par  . En réponse au journal Un ransomware tout à fait déloyal ... et inquiétant. Évalué à 5.

    Oui d'où l’intérêt pour certains services de prendre les sous et ne pas rendre les données (on peut imaginer pareil avec des otages, mais c'est plus limite coté éthique); et bien médiatiser le tout. Lorsque les gens seront persuadés à 99% de ne pas pouvoir récupérer leur données le business s'écroulera tout seul.

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

  • [^] # Re: Peucrédible

    Posté par  . En réponse au journal Un ransomware tout à fait déloyal ... et inquiétant. Évalué à 7.

    Perso j'ai une nette préférence pour fail2ban avec une limite à 10 tentatives. De toutes façons les bots se plantent sur les logins (seul un login peut facilement être devinable, et c'est pas dans les premier testés)

    Le changement de port à tendance à bloquer lorsqu'on passe par des firewall un peu psychopathe qui limitent les ports de destination.

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

  • [^] # Re: Duff's device

    Posté par  . En réponse au journal Switch, chaîne constante et c++. Évalué à 2.

    je suis pour laisser le compilo gérer ce genre d'optimisation comme un grand; Ensuite ça illustre assez bien le fonctionnement d'un switch/case en C/C++.

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

  • [^] # Re: Quel est le but ?

    Posté par  . En réponse au journal Bienvenue en Musulmanie !. Évalué à 4.

    Desproges se contentait pas de balancer des conneries, il les travaillait ses récits.

    Aujourd'hui il serait incapable de diffuser ses chroniques de la haine ordinaire.

    On en arrive à l'éternelle question de de qui distingue une blague juive d'une blague anti-sémite, sauf qu'avec l'ère d'internet, ce n'est plus que celui qui raconte qui change la donne.

    Désormais, il faut faire de l'humour aseptisé, ne jouer sur les clichés que si l'on fait parti de la population visée par le cliché, et lorsqu'on touche un autre cliché, on a intérêt à être un humoriste reconnu, et encore ce n'est pas toujours suffisant.

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

  • [^] # Re: Bein ouais ... c'est bien connu !

    Posté par  . En réponse au journal Tout le monde déteste les flics !. Évalué à 5.

    ça ressemble à du remplacement automatique à l'aveugle. (Bah oui généralement on écrit comme on parle, par la suite il est obligé de rajouter des circonvolution artificielle qui rendent son texte ridicule. );

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

  • [^] # Re: 100% des poulets français sont donc pro-FN ???

    Posté par  . En réponse au journal Tout le monde déteste les flics !. Évalué à 2.

    effectivement le Gorafi a besoin de clown, il peut donc faire l'affaire o/

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

  • [^] # Re: Tu vends du rêve

    Posté par  . En réponse au journal Microsoft: Powershell libéré. Évalué à 3.

    Mais regarde ta version bash, tu trouves ça pratique et simple?

    Pratique non, simple oui.

    (sinon pour ceux que ça intéresse, y a encore une autre solution mixant perl et bash :

    perl -lpe '$_=hex' file.txt | \
    paste -d" " - file.txt  | \
    sort -n | \
    cut -d" " -f 2-

    trouvé ici (en même temps que la question originale ) http://ask.systutorials.com/813/how-sort-file-hexadecimal-numbers-linux-using-sort-command (Mai 2014)

    Manque encore une réponse python et awk, qui s'y colle.

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

  • [^] # Re: Tu vends du rêve

    Posté par  . En réponse au journal Microsoft: Powershell libéré. Évalué à 3.

    oh un truc comme ça alors :

    cat val.txt| while IFS=" " read hex reste ; do RES[16#$hex]="$hex $reste"; done && printf "${RES[*]}"

    ou si tu veux en perl (je pense qu'il y a moyen de faire plus simple, mais j'ai la flemme de chercher)

    perl -we 'print sort { hex((split / /,$a)[0]) <=> hex((split / /,$b)[0]) } <>' val.txt

    selon la version de perl il faudra potentiellement utiliser les bigint

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

  • [^] # Re: Pas logique ou militant licence MIT

    Posté par  . En réponse au journal Faut-il défendre la GPL devant les tribunaux ?. Évalué à 2.

    Ben justement, je répond que oui, et vous demande de contre-argumenter si vous pensez que non.

    J'ai vu pas mal de restau afficher pique-nique interdit, avec assez souvent un serveur ou un cuistot qui vient le rappeler aux pique-niqueur, leur demander d'acheter au moins une consos s'ils veulent rester.

    Généralement soit ils achètent, soit ils partent; jamais je n'ai vu débarquer la police, et même si le gars appelait la police pour gérer le soucis, vu le temps qu'elle mettrait à se déplacer, les contrevenant aurait déjà dégagés (fini de manger).

    Pas que j'approuve le choix de ne pas faire respecter la licence, juste que je trouve ta foi en l'être humain particulièrement déplorable, en plus d'être inexacte.

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

  • [^] # Re: curieux

    Posté par  . En réponse au message purger le cache RAM après archivage et zippage de gros dossiers. Évalué à 2. Dernière modification le 26 août 2016 à 16:17.

    dans ce cas il faut le mettre au dernier moment avec le minimum de |

    typiquement tar zcvf - $dir | throttle -M10 > $destdir/dir.tar.gz

    histoire de compresser dès le début et avoir le throttle sur le flux réel et pas avant compression; mais là encore on a aucune garantie que le tar s'est bien déroulé

    si tu peux écrire le fichier en local (quitte à monter un volume en loop ou sur un disque temporaire), tu peux créer le fichier en local puis le déplacer sur le volume distant, de préférence avec rsync sans passer par le nfs

    tar zcvf /chemin/temporaire/${dir}.tar.gz $dir && rsync -e ssh --remove-sent-files  --bwlimit=KBPS /chemin/temporaire/${dir}.tar.gz user@seveurNFS:/chemin/destination/sur/le/serveur 
    
    # au pire tu peux aussi donner le chemin destination remplacer 
    user@seveurNFS:/chemin/destination/sur/le/serveur par  $destdir/${dir}.tar.gz,

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

  • [^] # Re: sync ?

    Posté par  . En réponse au message purger le cache RAM après archivage et zippage de gros dossiers. Évalué à 2. Dernière modification le 26 août 2016 à 15:43.

    attention tu mixes 2 commandes :)

    tar cvf machine > destination

    et

    tar zcvf destination machin

    donc déjà ça ne va pas marcher (il manque la destination à la première commande; et ensuite tu gzip 2 fois (z) ;)

    et je ne vois toujours pas l'intérêt de throttle mais je n'ai pas toutes les infos ;)

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

  • [^] # Re: bof

    Posté par  . En réponse au journal Faut-il défendre la GPL devant les tribunaux ?. Évalué à 10.

    C'est pour cela qu'il faut respecter l'étape 1, c'est obligatoire, même si la grosse boite le fait sciemment; cela permet lors de l'étape 2, de le montrer, puis lorsqu'on arrive à l'étape 3 d'avoir un poids et une communauté plus importante derrière soi.

    De même le juge sera plus à l'écoute si tu montres que tu as essayé de réglé le problème à l'amiable.

    Bref quoi qu'il arrive, toujours essayer l'arrangement à l'amiable; le juge est censé être le dernier recours.

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

  • # curieux

    Posté par  . En réponse au message purger le cache RAM après archivage et zippage de gros dossiers. Évalué à 2.

    j'ai un doute sur l'utilité di throttle, tant que tu ne joues pas sur le réseau, ça ne devrait pas trop poser de problèmes, j'ajouterai que ta commande joue avec 3 pipe | throttle | (je considère throttle comme un pipe), là ou un tar zcvf $dirdst/$dir.tar.gz $dir suffirait (mais on a pas le throttle; mais là encore si c'est pour la capacité de destination, il n'est pas au bon endroit
    tar zcvf $dir | throttle -M 10 > $dirdst/$dir.tar.gz

    Et si c'est tar qui n'a pas l'option z, tar cvf $dir | gzip | throttle -M10

    enfin j'aurais tendance à préférer l'usage de la commande tout en un (tar zcvf ) pour la simple et bonne raison que

    true | true | false
    va donner un $? à faux
    alors que
    false | true | true
    va donner un $? à vrai, or le tar aura foiré (incomplet).

    Quant au cache, je ne vois pas trop duquel tu parles, si c'est celui qui est affiché par la commande free, c'est normal qu'il soit plein, et ça ne fait pas planter la machine.

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