Renaud a écrit 11 commentaires

  • # Pour moi: pré-allouer un buffer d'urgence (a l'ancienne)

    Posté par  . En réponse au journal Gestion des erreurs d’allocation mémoire en C. Évalué à 5. Dernière modification le 27 octobre 2016 à 19:26.

    La réponse dépend vraiment de ce que fait ton programme. Dans mon cas, j'ai ma surcouche à malloc()/free()/realloc(), et lors de l'init de mon programme je reserve un bloc de 1Mo. Si un malloc() échoue, je tappe dans mon bloc de 1Mo et je met une variable globale à TRUE disant qu'il n'y a plus de mémoire. Comme mon programme fait une grosse boucle, je consulte souvent cette variable et si elle est activée je libère de la mémoire utilisée pour faire du cache. Si on échoue trop souvent, on loggue proprement l'erreur et on quitte.

    Franchement, je ne trouve pas que wrapper malloc soit trop lourd. C'est pénible à court terme, c'est pratique de pouvoir factoriser cette fonction critique à long terme. De manière générale, je wrappe toutes les fonctions externes tant que possible, ça aide pour la portabilité.

    Je ne recommande pas de faire un bzero() sur ton buffer alloué. Tu y perds énormément en performance si tu programme fait beaucoup d'allocations.

    La plupart des bibliothèques (des bonnes en tout cas) te permettent de définir quelles fonctions utiliser pour malloc()/realloc()/free(), donc c'est globalement pas un problème (sauf pour la libc).

    CECI ETANT DIT:

    • Comme tu le dis, sous Linux, un malloc() qui réussit n'indique pas forcément qu'il y a de la mémoire dispo. /proc/sys/vm/overcommit_memory peut t'aider mais risque de dégrader les perfs.

    • Les problèmes de fragmentation de mémoire font que si tu libères 200 blocs de 1ko, tu ne sais pas si ton allocation suivante de 200ko va fonctionner (probablement pas) ;

    • Si tu gères des énormes buffers, rien de tout ceci ne s'applique;

    J'avais lu un papier récemment qui disait quand quand l'allocation de mémoire échoue, tu es fichu de toute façon. C'est pas forcément faux. Peut être que faire un abort() propre (avec message d'erreur) dans ton malloc() custom est une approche plus simple (je l'ai fait pendant longtemps).

    (Ref: La première fois que j'ai vu cette histoire de buffer pré-alloué c'était dans 'Inside Macintosh' pour programmer sous système 7).

  • [^] # Re: Quoi d’intéressant?

    Posté par  . En réponse au journal [Bookrmark] How to troll systemd in one blog post. Évalué à 3.

    Oui, on utilise getaddrinfo() depuis le début. La fonction peut appeler gethostbyname(_r)() ensuite. Ou peut être pas, une fois qu'on regarde l'implémentation de ce code on commence à douter de tout de toute façon.

    Mais bonne remarque :)

  • [^] # Re: Quoi d’intéressant?

    Posté par  . En réponse au journal [Bookrmark] How to troll systemd in one blog post. Évalué à 1.

    s/gethostbyname/getaddrinfo/g—j'avais oublié que sur LinuxFR, il est plus important de pinailler sur les détails que sur le fond, merci de me le rappeler. (il y a aussi des fautes d'orthographe/conjugaison dans mon message précédent)

    Le coeur du problème que j'essayais de soulever, c'est que la résolution de noms, ça n'est pas forcément DNS de nos jours. Il y a d'autres mécanismes (mDNS, etc…) et on veut TOUT déléguer à un tiers, pas juste DNS. Mais oui, un service dont la présence est garantie par systemd ça ne me gêne pas. Le problème c'est que personne ne semble se pencher sur ce problème, systemd est le seul a se diriger vers cette architecture.

  • [^] # Re: Quoi d’intéressant?

    Posté par  . En réponse au journal [Bookrmark] How to troll systemd in one blog post. Évalué à 10.

    "en quoi est-ce le rôle de systemd de faire resolver DNS"

    De tous les reproches que l'on peut faire à systemd, je pense que c'est bien le moindre. La résolution de noms est devenue quelque chose de chaotique sous Linux. Si tu fais un gethostbyname("foo"), il faut regarder dans /etc/hosts, demander éventuellement à mDNS (avahi?), demander au serveur DNS local, etc… Le resolveur de la glibc tente d'avoir une architecture "ouverte" pour rajouter d'autres méthodes plus ou moins dinosauresques (telles que NIS ou WINS) et c'est en partie à cause de lui qu'il est peu recommandé / impossible de faire des binaires statiques sous Linux.

    Le problème pour un dévelopeur c'est que tellement de couches ont été empilées que gethostbyname() devient dangereux à utiliser. Lorsque je codais encore (je suis vieux maintenant :), on a commencé à remarqué des problèmes de stabilité énorme dans notre programme multithreadé, pour réaliser que le resolveur WINS (installé rarement mais chez certains clients) n'était pas thread-safe. Ensuite on a du patcher à la volée la glibc pour interdire la lecture de /etc/hosts car on a aussi remarqué que dans un environment hautement multi-threadé, ouvrir le fichier et le lire bloquait notre programme (sans parler de la performance). Et difficile de diagnostiquer le problème—à la fin, gethostbyname() c'est un mini programme qui tourne dans le contexte de notre programme, avec ses allocations de mémoire, etc… Et il y a d'autres problèmes—notre programme fait énormément d'I/O réseau sur un grand nombre de sockets, je ne peux pas appeler select() (limite MAX_FD), je n'ai pas de garantie que gethostbyname() ne le fasse pas, je peux juste espérer que les développeurs de la glibc (et des modules dynamiques!) codent proprement et utilisent poll().

    Du coup, il est 100 fois plus propre de modifier gethostbyname() pour envoyer un simple message à un resolveur local et d'attendre la réponse plutôt que d'allouer de la mémoire, ouvrir des fichiers et des sockets, etc… Et comme on ne veut absolument pas que le resolveur local soit en panne, autant le mettre dans systemd :)

    Voilà, c'était mes 2 centimes.

    (Disclaimer: je n'ai aucune action systemd et je ne gère aucun système le faisant tourner :)

  • [^] # Re: Eviter le monopole

    Posté par  . En réponse au journal La France ridiculisée par Amazon. Évalué à 10.

    Tout d'abord, pour éviter le monopole, un bon nombre de librairies pourrait commencer par améliorer leur qualité de service pour qu'on ait envie d'y aller. Je suis passé en France l'année dernière, et j'ai fait quelques librairies pour chercher des livres pour enfants. Résultat:

    • Je suis allé dans une librairie 100% indépendante, spéciale enfants (qui avait un gros "stop amazon" placardé sur sa porte d'entrée). Je demande à la vendeuse ce qu'elle recommande comme livre à lire pour mon fils d'un an. Sa réponse: lever les yeux au ciel histoire que je me sente bien bête d'avoir osé chercher un livre pour enfant et dire "je ne sais pas, peut être cette collection là-bas" (en gros, "vtff"). Je n'y retournerai jamais.

    • Deuxième librairie qui est une "petite" chaine (genre Chapitres, mais je ne me souviens plus du nom exact). On achète une tonne de bouquins avec ma femme. Je paie (par carte). Je demande un sac -> Ah ben non, ça pollue alors c'est 0.20 euros (en dessous du minimum par carte et j'ai pas de monnaie). WTF, je viens de dépenser 300x ce montant en bouquins, ça vous ferait mal de me permettre de les transporter? Bon, j'ignore ce problème, on se débrouille comme on peut. On rentre à la maison et on découvre qu'on a pris un livre en double. Le lendemain on demande à se faire rembourser et ils ne remboursent pas, ils font des bons d'achat dans leur même magasin. Je ne savais pas qu'une telle pratique existait encore. Je n'y retournerai jamais.

    • Troisième libraire: Fnac (tu sais, la boite qui était l'affreux monopole avant Amazon mais personne ne s'en souvient). Rayon bouquins pour enfants: bien fourni, personnel sympa. Mais tous les livres sont abimés car feuilletés par des centaines de gamins avant. Pas des gros dégats: pages un peu cornées, petite tache par ici, etc… Mais bon, c'est lourd d'acheter un bouquin aux prix actuels pour qu'il ressemble à celui de la bibliothèque locale :(

    • Quatrième libraire: Fnac*.com*, où on achète un livre qu'on a pas trouvé ailleurs. On paye par carte et on attend la livraison. Dans les 24h, Fnac.com nous envoie un mail disant qu'en fait ils n'ont pas le livre et ne l'auront jamais, alors du coup il nous créditent notre "compte fnac" des 20 euros dépensés. Super, je n'utilise jamais ce site, je suis en France 15j par an. (on mettra de coté la légalité de leur démarche). Je n'y retournerai jamais.

    Tu compares à Amazon où:

    • Il y a un énorme inventaire, mais c'est le bazar (facile de trouver ce que tu cherches, mais en termes de suggestion c'est super pauvre). Mais au moins, tu n'as pas une sorte de clippy qui lève les yeux au ciel quand tu fais une recherche ;
    • Ils t'envoient tes bouquins chez toi, pas de problème de sac. Et tu n'as pas eu a attendre a la caisse ;
    • Les bouquins qui arrivent sont dans un état neuf et 100% germ-free ;
    • Tu peux renvoyer ce que tu veux super facilement, et tu te fais rembourser immédiatement sur ta carte et pas sur leur compte imaginaire ;

    Donc globalement, on dira ce qu'on voudra, mais il ne faut pas s'étonner du succès d'amazon. Ce que fait l'Etat, c'est juste une tentative (pour la forme) de leur mettre la tête sous l'eau plutôt que de mettre en place un cadre législatif/économique qui permette aux libraire d'engager du personnel et de dégager assez de marge pour améliorer leurs magasins (et acheter des sacs!).

    Enfin, pour ton histoire de monopole et de censure—si l'Etat créé des taxes qui de fait empêchent un accès facile et à bas prix de la culture, n'est-ce pas une forme de censure en premier lieu? Ne devrait-il pas s'émerveiller devant un peuple qui cherche une autre forme culturelle que TF1?

  • [^] # Re: Pauvres choux

    Posté par  . En réponse au journal Situation des frontaliers Suisse : vers la fin du choix de cotisation pour l'assurance maladie. Évalué à -1.

    Elle ne s'est pas fait virée, car a accouché dans les temps impartis par son assurance.

    Sur ses deux pattes, en dépit de la péridurale? C'est un miracle. (ou alors laisses-moi deviner, son assurance ne couvrait pas la péridurale et il y avait une clause "must suffer" dans le contrat).

    Je compatis avec des êtres humains qui ont le système réputé le plus cher et injuste au monde. Il n'est effectivement pas pour moi question d'aller aux USA sans une couverture maladie blindée (bref, d'avoir déjà mon contrat et de l'avoir suffisamment bien payé pour compenser le prix à payer en assurances diverses), et tout en sachant que j'ai un backup européen.

    Il n'est pas injuste, il faut juste s'en occuper et être responsable, ce qui est effectivement très différent du système français.

  • [^] # Re: Pauvres choux

    Posté par  . En réponse au journal Situation des frontaliers Suisse : vers la fin du choix de cotisation pour l'assurance maladie. Évalué à -2.

    Sicko est assez universalement reconnu comme étant un mauvais film à charge. Tu peux trouver des cas borderline partout.

    Et non, ça ne me choque pas de payer pour ceux qui ont des maladies plus graves et plus coûteuses encore.

    Ca tombe bien, l'Etat ne te demande pas ton avis!

  • [^] # Re: Pauvres choux

    Posté par  . En réponse au journal Situation des frontaliers Suisse : vers la fin du choix de cotisation pour l'assurance maladie. Évalué à 3.

    ~20% (13.10+0.75+7.50+0.5), et ce si tu parles de brut, vaut mieux parler de brut chargé et ça tombe à ~15% du total qui part en santé. Pour les indé comme moi ça tombe à ~12% du total (Assurance maladie + CSG).

    Au temps pour moi. Ça reste quand même bien supérieur à ce que je paie ici. Et dans ton cas d'indépendant, tu ne prends pas en compte l'incompétence chronique de RSI (c'est chez eux que tu cotises, non?) qui donne plutôt envie de n'avoir aucune couverture.

    Ben non : assurance complémentaire. Tu choisis comme tu veux cette assurance, seule la base est obligatoire.

    Elle est gratuite ton assurance complémentaire? Non? Alors c'est une dépense supplémentaire (on arrive à combien de dépense santé mensuelle à ce niveau? 22%? 25%?). Si le montant total "santé" dépensé par mois ne rentre pas dans ton équation, il y a des plans ici qui sont assez fantastiques. Il y a aussi des mécanismes pas mal (HSA, FSA) qui permettent de dépenser de l'argent pré-impôt (et donc te réduire tes vrais coûts de santé), mais je ne rentre pas dans les détails…

    Je crois qu'il ne vaut mieux pas comparer (aller, un exemple, sécu d'un pote US : "vôtre femme à le droit à 6 heures pour accoucher, après elle dégage", en France tu prends le temps qu'il faut).

    Si on a droit aux exemples imaginaires et bidons, la discussion n'a pas lieu d'être. Je connais une dizaine de personnes qui ont accouché ici, et personne ne s'est fait virer au bout de 6h. Tu aurais pu utiliser un vrai argument (ils ont la césarienne un peu facile), mais celui-là il ne marche pas, désolé. (je ne doute pas que la femme de ton copain se soit fait virer au bout de 6h, mais sans le contexte précis c'est dur de dire pourquoi. Si en France ta femme arrive à l'hopital deux semaines en avance, ils la virent aussi, hein).

    Mais bon, si tu es heureux avec le système que tu as, je pense que c'est l'essentiel, non?

  • [^] # Re: Pauvres choux

    Posté par  . En réponse au journal Situation des frontaliers Suisse : vers la fin du choix de cotisation pour l'assurance maladie. Évalué à 1.

    Entre 18 et 36 mois. L'idée étant que ça te donne le temps de trouver un nouveau boulot. Si tu ne trouves pas de nouveau boulot, les assurances te prennent même, c'est plutôt les pré-conditions non déclarées qui posaient problème (ie: tu dois faire une dialyse, tu leur dis pas -> cotisation mensuelle plus faible -> tu va à l'hopital pour ta première dialyse -> ton assurance te vire), et ça devient illégal avec "Obamacare".

    Maintenant, tout n'est pas rose ni en France ni aux US. En France ~30% de ton salaire part dans la sécu (en prenant en compte les charges patronales) et toute la population a le même plan (qui est bien quand tu as de gros soucis, mais plus pourri pour les petits bobos où il est souvent préférable d'avoir une mutuelle) ; aux US c'est un forfait à prix fixe (indépendant de ton salaire) négocié par ta boite, tu as souvent plusieurs plans possible, et parfois tu vois des gens qui prennent le plan "el cheapo" à $5/mois qui couvre rien et qui après se lamentent le jour où ils ont un vrai souci. Parfois les plans offerts par les employeurs sont pourris (mais tu as le droit de refuser le plan d'entreprise et de prendre un plan indépendant, qui coutera très cher), parfois la couverture de la sécu est pourrie aussi.

  • [^] # Re: Pauvres choux

    Posté par  . En réponse au journal Situation des frontaliers Suisse : vers la fin du choix de cotisation pour l'assurance maladie. Évalué à 1.

    Jusqu'à ce que ta boite te vire sous une excuse bidon

    Si ta boite te vire il y a Cobra qui prend le relais le temps que tu trouves une autre mutuelle.

  • # les certificats fournits ne forment pas une chaîne de certificats

    Posté par  . En réponse à la dépêche Législatives françaises et vote par internet pour les Français de l'étranger. Évalué à 5.

    J'ai rencontré ce problème en votant ce matin. Java 1.7 n'est pas supporté. C'est intéressant, car c'est la seule version qui est proposée lorsque l'on va sur le site d'Oracle.

    Donc:
    1. Je vais sur le site de vote avec mon PC tout neuf. Il me demande d'installer Java, ce que je fais en cliquant sur le lien proposé
    2. Je me prend cette erreur relativement cryptique
    3. La FAQ du site me dit que cette erreur est dûe à Java, je n'ai qu'a réessayer à partir d'un autre ordinateur (ben voyons)

    (et attention, par "PC tout neuf" dans le premier point, il faut comprendre "une VM de Windows 7", parce que bien entendu chez moi ça ne marche pas avec Safari sous Mac OS 10.7 [trolls s'abstenir][et les paranos me diront justement qu'on a peut être pas forcément envie de laisser un programme d'Etat s'executer sur notre machine principale]).

    La solution était triviale—il m'a suffit de démarrer une (autre) vieille VM qui, il se trouve, avait un Java 1.6 d'installé, et le vote s'est bien passé. Ma grand-mère pourrait sans doute en faire autant, et moralité: n'installez jamais de mise à jour de sécurité.

    On dit que Linux n'est pas près pour le desktop, mais à coté de cette expérience de vote je pense que Gentoo devient plaisant ;)

    Et sinon, j'ai reçu un magnifique numéro de confirmation et un hash de 4096 bits certifiant que mon vote était pris en compte, avec un message de bon gros cryptographe qui explique que le vote est invalide sans le hash (comprendre "pour que la vérification du vote ait un sens, il faut regarder le numéro de confirmation et le hash").

    Vivement le deuxième tour.