Michaël a écrit 2935 commentaires

  • [^] # Re: Paie ton code d'amateur quand même ...

    Posté par  (site web personnel) . En réponse au journal realloc. Évalué à 5.

    Il me semble qu'en C++ tu te chopes une erreur ou un warning si tu le fais pas.

    En C, caster les mallocs sert seulement à ne pas voir qu'on a oublié le header stdlib.h. Du coup ton compilateur génère un prototype de fonction dont le type de retour est int. Si tes entiers et tes pointeurs n'ont pas la même taille, c'est l'hosto direct!

  • [^] # Re: Futur petit programmeurs modèles

    Posté par  (site web personnel) . En réponse à la dépêche En Estonie, la programmation à l’école dès 6 ans. Évalué à 2.

    Je trouve ta remarque vaguement perfide… :)

  • [^] # Re: Informatique ≠ programmation

    Posté par  (site web personnel) . En réponse à la dépêche En Estonie, la programmation à l’école dès 6 ans. Évalué à 2.

    Ça n'a pas été un franc succès (hmm, quelle surprise !) et les programmes ont fait machine arrière.

    Je pense au contraire que l'intro des «maths modernes» dans les années 60 a été un franc succès, on ne compte plus les mathématiciens brillants de réputation internationale issus de cette génération.

    Il ne faut pas oublier que le public de l'enseignement général de cette époque était bien plus restreint que ce qu'il n'est aujourd'hui et c'est l'élargissement du public qui a justifié cette «machine arrière».

  • [^] # Re: LOGO, Pascal et C

    Posté par  (site web personnel) . En réponse à la dépêche En Estonie, la programmation à l’école dès 6 ans. Évalué à 3.

    C'est plus facile pour les boucles et les fonctions, mais il faut un paquet d'heures pour que la majorité comprenne les pointeurs.

    Ce n'est pas étonnant, il y a même des programmeurs professionels qui passent leur temps à les utiliser n'importe comment…

    À mon avis, c'est plus facile de commencer à programmer en assembleur qu'en C, car l'assembleur ne fait pas de mystère sur les adresses tandis que les pointeurs servent à manipuler des adresses sans en parler vraiment. Au lieu de travailler sur les adresses on travaille en C sur un objet encapsulant les adresses, donc c'est forcément un peu compliqué quand on ne sait pas ce que c'est qu'une adresse. (Les objets plus communs, comme les queues, sont bien plus facile à apréhender.)

    Pour s'initier à la programmation, les langages de choix sont l'assembleur, le Pascal et le Scheme tous les autres sont beaucoup plus compliqués.

  • [^] # Re: troff

    Posté par  (site web personnel) . En réponse au journal Exemple d'interface en ligne de commande. Évalué à 2.

    Il est très bien ton exemple – ça me donne presque envie d'apprendre Tex.

    Je ne peux que t'encourager à apprendre Bhrìd TeX :D

    Les deux livres biens que je connais pour la programmation en TeX sont le TeXbook de Knuth et le Advanced TeXbook de Salomon.

    N'hésite pas à poser toutes tes questions!

    J'en profite pour faire de la pub pour METAPOST un programme de dessin pas très intéractif, compagnon de TeX (et au passage pour mes macros BSD Make):

    http://home.gna.org/bsdmakepscripts/tex.html

    Dans la page (in inglishe, car je suis trop international!) il y a un petit paragraphe sur METAPOST.

  • [^] # Re: troff

    Posté par  (site web personnel) . En réponse au journal Exemple d'interface en ligne de commande. Évalué à 4.

    Voilà celle de plain TeX avec mes annotations et une petite simplification:

    % Notre OTR est plainoutput
    \output{\plainoutput}
    
    % La commande cruciale est ici shipout qui écrit
    % une page (une vbox) dans le fichier de sortie
    \def\plainoutput{%
      \shipout\vbox{%
        \makeheadline  % On prépare le haut,
        \pagebody      %  le corps,
        \makefootline  %  et le pied
      }%
      \advancepageno   % Màj compteur de page
    }
    
    % Préparation du corps de la page,
    %  approche érotique de pagecontents
    \def\pagebody{%
      \vbox to\vsize{%
        \boxmaxdepth\maxdepth
        \pagecontents
      }
    }
    % Prépration du haut de page,
    %  \z@ est un autre nom de zéro
    \def\makeheadline{%
      \vbox to\z@{%
        \vskip-22.5\p@    % Recule de 22.5 pt dans le blanc de page
        \line{%
          \vbox to8.5\p@{}% Calibre de 8,5 pt de haut
          \the\headline   % La headline (enfin)!
        }%
        \vss              % Padding
      }\nointerlineskip   % Pas d'extra-interligne*
    }
    
    % Préparation du pied de page,
    %  je zappe un peu les détails
    \def\makefootline{%
      \baselineskip24\p@
      \lineskiplimit\z@
      \line{\the\footline}%
    }
    
    % Alors voilà,
    %  c'est finalement cette routine la plus importante,
    %  elle prépare le contenu de la page
    \def\pagecontents{%
      % Ici \topins est une boîte verticale contenant
      % les inserts à placer au haut de la page
      % comme une table ou une image p.ex.
      %
      % Si cette boîte n'est pas vide,
      %  on copie son contenu
      \ifvoid\topins\else
        \unvbox\topins
      \fi
      % Mainentant on ajoute le contenu
      %  de la main vertical list
      % \dimen@=\dimen0 (registre de dimension 0)
      % \@cclv = \box255 (registre de boîte 255)
      \dimen@=\dp\@cclv
      \unvbox\@cclv
      % Enfin, on regarde si on a des notes de bas
      %  de page, un peu pareil que pour topins
      %  mais on décore avec une footnoterule.
      \ifvoid\footins\else % footnote info is present
        \vskip\skip\footins
        \footnoterule
        \unvbox\footins
      \fi
      % Si un certain paramètre est actif,
      %  on tasse tout notre beau monde vers le haut…
      \ifr@ggedbottom \kern-\dimen@ \vfil \fi
    }
    
    % Et voilà la footnoterule
    \def\footnoterule{%
      \kern-3\p@
      \hrule width 2truein \kern 2.6\p@
    }
    
    

    *: Dans l'empilement habituel des boîtes verticales il y a un extra-interligne (les cas typique est celui des lignes d'un paragraphe).

  • [^] # Re: troff

    Posté par  (site web personnel) . En réponse au journal Exemple d'interface en ligne de commande. Évalué à 4.

    Ce sont les mécanismes similaires que je voudrais voir fonctionner dans un petit exemple. Si c'est possible et pas trop casse tête.

    En TeX ces mécanismes s'appelent output routine, OTR (OR faisait certainement trop indécis).

    Le principe est que TeX assemble des paragraphes dans la main vertical list, parallèlement à l'assemblage des paragraphes on peut demander de la place pour des réserves (par exemple les notes de bas de page ou les illustrations). Lorsque la hauteur cumulée de la main vertical list est des réserves dépasse une certaine hauteur (en gros la hauteur attendue de la page), une routine utilisateur est appelée (la fameuse OTR) sa mission est d'écrire une page dans un fichier. Elle peut prérarer cette page comme elle le veut à partir des informations qui lui sont données. L'OTR la plus simple est effectivement le mode machine à écrire mais on peut faire des choses plus complexes, comme un mode deux colonnes ou des maquettes plus élaborées.

    Tes explications me donnent l'impression que troff affiche les notes de bas de page “hors page” dans le blanc sous le texte, c'est ça?

  • [^] # Re: troff

    Posté par  (site web personnel) . En réponse au journal Exemple d'interface en ligne de commande. Évalué à 3.

    Pourrais-tu présenter un petit exemple où ressortent un peu clairement les outils de Tex dédiés à la mise en page – comme ci-dessus sur le texte à deux colonnes, ou, si c'est trop complexe, un simple pied de page? Ce serait pour moi un bon moyen de prendre quelques repères dans le langage Tex.

    PS. J'ai pas très bien compris ce que tu cherches. Un exemple des macros de la „domain structure” pour parler comme groff_mdoc(7) ?

  • [^] # Re: troff

    Posté par  (site web personnel) . En réponse au journal Exemple d'interface en ligne de commande. Évalué à 3.

    Quel boulot quand même !

    Tu l'as dit! Bon en fait j'ai commencé il y a 10 ans quand je suis entré en licence de maths et comme tu peux le voir je ne balance pas 600 commits par semaine…

    J'imagine que quand on vient de l'assembleur, c'est un jeu d'enfant. J'imagine aussi que comme le C, on doit apprécier maîtriser le bas niveau. Mais je comprends qu'on ait ajouté la surcouche LaTex à Tex…

    Ce qui fait la difficulté de TeX par rapport à un autre langage de programmation c'est notamment le fait que pour programmer, il faille écrire la suite de son programme (il faut choisir quel tokens mettre à la suite du flot de traitement). Une fois qu'on a compris ce problème et le fait qu'il est résolu par l'emploi des registres, programmer en TeX n'est pas plus compliqué qu'avec n'importe quel autre langage impératif. C'est un peu bavard, mais cela passe encore.

    Par exemple voilà un calendrier perpétuel, qui détermine le jour de la semaine correspondant à une date donnée:

    http://svn.gna.org/viewcvs/bhrid/trunk/src/calendar.nw?revision=35

    Dans quelle conditions as-tu été amené à produire Bhrid Tex ?

    Après avoir lu The Advanced TeXbook de David Salomon, je me suis mis à coder en TeX pour le plaisir… je ne connaissais pas encore LaTeX.

    Ceci dit je trouve LaTeX tout à fait inadapté à la saisie du texte. Si on veut un marquage propre il faut définir ses macros soi-même est c'est vite casse -bonbons parceque LaTeX est assez difficile à programmer, toutes les fonctions ont des noms à la con, la doc est imbuvable, etc.

    J'aime bien le marquage minimal et le côté machine à écrire de plain TeX, conventions détruites par LaTeX. Voir par exemple:

    http://svn.gna.org/viewcvs/bhrid/trunk/example/mg_letter/example.tex?revision=116

    Un exemple de lettre au marquage assez minimal.

    Une autre différence de point de vue est que les formats (ensembles des macros préchargées en TeX) jouent un rôle plus important en Bhrìd TeX. (D'après moi le chargement des fontes et le choix du codage d'entrée doit avoir lieu dans le format.)

  • [^] # Re: ma_variable

    Posté par  (site web personnel) . En réponse au journal Pourquoi je suis libriste intégriste.. Évalué à 3.

    Même si je suis ton argument, je ne rejetterais pas aussi pleinement une convention de nommage des variables, ou plus généralement, des identificateurs.

    Avoir plusieurs conventions de nommages à disposition, permet de les utiliser toutes dans la convention. Par exemple, dans un programme C++ on peut convenir que les noms de classes sont en CamelCase, les noms de méthode ou de fonction en camelCase et les nom de variables présentés par des noms avec un caractère souligné.

    Cette information est bien-sûre redondante mais peut faciliter la lecture.

  • [^] # Re: troff

    Posté par  (site web personnel) . En réponse au journal Exemple d'interface en ligne de commande. Évalué à 4. Dernière modification le 03 septembre 2012 à 22:13.

    Plusieurs commande par ligne ? Des noms de commandes compréhensibles ? Des balises ? ^

    En programmeur TeX invétéré et ex programmeur en assembleur, j'ai adopté la tradition du une instruciton par ligne pour mes programmes TeX.

    Contrairement à ce qu'on pourrait croire en lisant des macros “modernes” pour TeX, apréhender TeX comme une machine à registres permet de réaliser des programmes assez complexes sans trop se casser la bobines.

    J'ai publié une macro getoptspec dans le TuG boat (publiée sous forme de package getoptk pour plain TeX) qui permet d'écrire des commandes qui prennent leurs arguments comme les primitives TeX hbox, hrule etc., càd sous la forme:
    TeX
    \hbox width 12pt{…}

    En y allant tranquillement ce n'est pas si difficile. Comme apparemment certains ici s'intéressent à la programmation TeX j'en profite pour faire de la pub pour mon Bhrid TeX, qui a une sorte de manuel du programmeur.

    http://download.gna.org/bhrid/bhridman.pdf

    La macro getoptspec est décrite pages 62–69 (Listes de spécifications).

  • [^] # Re: T'es gentil

    Posté par  (site web personnel) . En réponse au journal Pourquoi je suis libriste intégriste.. Évalué à 2.

    Dis moi, connais-tu «Moins d'un quart de seconde pour vivre» de Lewis Trondheim? Je pense qu'il faudrait que tu le lises avant de n'avoir épuisé toutes les pages de Wikipedia.

  • [^] # Re: T'es gentil

    Posté par  (site web personnel) . En réponse au journal Pourquoi je suis libriste intégriste.. Évalué à 4.

    Par exemple, un logiciel proprio peut me conférer plus de droits (le droit de ne pas se faire chier par exemple) qu'un logiciel libre (qui ne fait pas ce que je lui demande), ces droits (celui de ne pas se faire chier) peuvent être (largement) plus important pour quelqu'un qu'une liberté de patcher dont on a rien à foutre.

    Je trouve que ton exemple n'est pas super, car il mélange un peu droit et pouvoir (pouvoir de ne pas se faire chier).

    Sans forcément partager tout tes mots ou ton pessimisme final, j'admire tout de même un peu la patience que tu voues à cette discussion…

  • [^] # Re: T'es gentil

    Posté par  (site web personnel) . En réponse au journal Pourquoi je suis libriste intégriste.. Évalué à 7.

    Ensuite, la volonté de réaliser un bénéfice ne préjuge pas de l'utilisation qui pourra être faite de ce bénéfice, et c'est cette utilisation seulement qui permet de caractériser la cupidité.

    [définition du wiktionnaire de cupidité]

    Bon alors je me corrige: Ensuite, la volonté de réaliser un bénéfice ne préjuge pas du caractère immodéré de cette volonté, et c'est cette immodération seulement qui permet de caractériser la cupidité.

    En particulier, il reste toujours faux que quiconque cherche à gagner de l'argent soit cupide. (S'il pousse l'immodération jusqu'à fonder une société, alors là, c'est autre chose! ;) )

  • [^] # Re: T'es gentil

    Posté par  (site web personnel) . En réponse au journal Pourquoi je suis libriste intégriste.. Évalué à 1.

    Mais faire du profit est tout de même un des but principaux, c'est d'ailleurs établi dans les statuts des entreprises il me semble. À mon avis ceci est d'autant plus vrai que la société est grande :

    Une entreprise ou société qui ne fait pas de profit a vocation à faire faillite: cela veut dire plus de service rendu, disparition du savoir-faire, etc.

    il est évident que le but d'Apple ou de Google est de faire de l'argent avant de faire des iPad ou des services internet.

    Si c'est évident, ce n'est pas la peine de le dire: ce que tu exprimes est un point de vue, à moins que tu ne le justifies.

    Mon point de vue est plutôt que les fondateurs de Google (pour reprendre ton exemple) étaient sûrs d'avoir un truc qui marche et qui pourrait être utile aux gens, et ils ne se sont pas trompés.

  • [^] # Re: T'es gentil

    Posté par  (site web personnel) . En réponse au journal Pourquoi je suis libriste intégriste.. Évalué à 8.

    D'abord ce n'est pas un extrait du code civil mais un commentaire sur Wikipedia. Ensuite, la volonté de réaliser un bénéfice ne préjuge pas de l'utilisation qui pourra être faite de ce bénéfice, et c'est cette utilisation seulement qui permet de caractériser la cupidité.

  • [^] # Re: T'es gentil

    Posté par  (site web personnel) . En réponse au journal Pourquoi je suis libriste intégriste.. Évalué à 6.

    Je pense que tu fais une mauvaise lecture du droit: l'article que tu cites n'a pas vocation à normaliser les motivations des associés, mais leurs rapports contractuels.

    La société est instituée par deux ou plusieurs personnes qui conviennent par un contrat d'affecter à une entreprise commune des biens ou leur industrie en vue de partager le bénéfice ou de profiter de l'économie qui pourra en résulter.
    […]
    Les associés s'engagent à contribuer aux pertes.

    Ma lecture: qui souhaite mener avec d'autre une entreprise commune dispose d'un outil juridique normalisant la mise en commun des pertes et des profits qui pourraient résulter de cette entreprise. Cette outil est la société.

  • [^] # Re: T'es gentil

    Posté par  (site web personnel) . En réponse au journal Pourquoi je suis libriste intégriste.. Évalué à 7.

    Les arguments sont restés au placard ?

    Celui qui écrit

    Comme pratiquement toute l'activité économique de notre temps est mue par la cupidité, les entreprises ne servent pas leur clients, elles ne servent qu'elles mêmes, au dépend de leurs clients, s'il le faut.

    prend le risque de gaspiller très rapidememnt son capital de crédibilité auprès de son lectorat.

    Si je descends de chez moi et marchhe vers la ville, je vais trouver 2 salons de coiffure, 3 restaurants, 1 opticien, 2 fleuristes, 1 magasin de déco, 1 superette, etc. Tous ces entrepreneurs ne seraint-ils motivés que par la cupidité?

  • [^] # Re: Jeu surestimé

    Posté par  (site web personnel) . En réponse au journal Échec et mat. Évalué à 2.

    Je trouve que les échecs sont surestimés. Beaucoup les considèrent comme le meilleur jeu jamais crée alors que franchement, j'ai joué à nombre de choses plus divertissantes. C'est un bon jeu mais ça ne mérite pas la vénération qu'on lui porte

    Je suis entièrement d'accord avec toi!

    Il semblerait que,dans la pratique sérieuse du jeu d'échec, les ouvertures de parties (10 coups ou plus?) soient partiquement classifiées et qu'une erreur à ce stade de la partie soit rédhibitoire. (Comme j'ai écrit rédhibitoire sans me tromper, personne ne verra que j'ai interverti deux lettres dans la première partie de mon message!)

    Les échecs sont un jeu finalement quelque peu byzantin, mon goût personnel va aux systèmes un peu plus épurés. Par exemple, les tout aussi vénérables jeu de dames ou jeu de go m'amusent beaucoup plus, en dépit de mon niveau minable. Et si on accepte de ne pas jouer forcément en tête à tête, notre époque a produit de nombreux jeux très interessants (comme Diplomatie ou Vertigo, par exemple).

  • [^] # Re: MAJ SCRIPT

    Posté par  (site web personnel) . En réponse au message Le plus petit. Évalué à 2.

    Merci, la soirée était bien avancée hier et j'ai eu la flemme d'ouvrir une entrée dans le suivi!

  • # Avec SED ou rien!

    Posté par  (site web personnel) . En réponse au message Récupération d'une chaine dans un fichier. Évalué à 1.

    Voilà un filtre (où le [& doit être remplacé par un [[ et le &] par un ]] pour pallier à un petit problème de dacode.

    sed -n -e 's@\([&:alnum:&]*\)=\(/.*\)/\([^/]*\)?\(.*\)@\1|\2|\3|\4@p'
    
    

    Si tu lui donnes à manger

    echo "'nom d_une variable'=//'lieu où se trouve ma bdd'/'nom de ma bdd'?options supplémentaires"

    il te répond

    'nom d_une variable'|//'lieu où se trouve ma bdd'|'nom de ma bdd'|options supplémentaires

    et tu n'as plus qu'à jouer avec AWK '-F|' pour consulter la table produite par un pipe de ton fichier dans le filtre précenent. (Qu'évidemment tu cales dans une fonction autonome avec un nom qui vabien.)

  • [^] # Re: MAJ SCRIPT

    Posté par  (site web personnel) . En réponse au message Le plus petit. Évalué à 2. Dernière modification le 28 août 2012 à 21:15.

    Ta deuxième version de ton script est absolument gorissime. J'ai donc pris mon stylo pour t'écrire le canvas suivant:

    (Il faut remplacer les [@ par un [[ mais dacode croit qu'il s'agit de liens wikipedia, d'où le subtil déguisement.)

    sdata_statname='stats.html'
    
    # sdata_extract
    #  Filter extracting tabular data out of statistiques html page
    #
    # Input is the file served at https://freedom-ip.com/statistiques.php,
    # output is a list of load by servers, looking like
    #
    #   390 NL
    #   315 NL2
    #   140 NL3
    #   140 NL4
    #   38 IE
    #   40 IE2
    #   10 IE3
    #   20 IE4
    sdata_extract()
    {
    {
        sed -n -e 's|^<img src=[./@:alnum:]]* alt="\([@:digit:]]*\) personnes connect.*es .* \([@:alnum:]]*\)".*|\1 \2|p'
    }
    }
    
    
    # sdata_sort_by_name
    #  Filter sorting tabular data by name (ascending order)
    sdata_sort_by_name()
    {
        sort -d -k 2
    }
    
    
    # sdata_sort_by_load
    #  Filter sorting tabular data by load (ascending order)
    sdata_sort_by_load()
    {
        sort -g -k 1
    }
    
    # sdata_try_to_connect
    #  A filter connecting to a server.
    #
    # It read tabular data and tries to connect in turn to each server. It
    # writes the record corresponding to the server it could connect to.
    #
    # Notes:
    #  - Use of echo(1) to output records is okay, because data is read(1).
    sdata_try_to_connect()
    {
        local load
        local server
    
        sdata_connect_state='NOT_CONNECTED'
        while read load server; do
        if [ "$sdata_connect_state" = 'NOT_CONNECTED' ]; then
            if sdata_try_to_connect_loop "$load" "$server"; then
            sdata_connect_state='CONNECTED'
            echo "$load" "$server"
            fi
        fi
        done
    
    }
    
    sdata_try_to_connect_loop()
    {
        if [ "$2" = 'NL2' ]; then
        return 0
        else
        return 1
        fi
    }
    
    # sdata_outcome
    #  A filter describing the outcome of sdata_try_to_connect.
    sdata_outcome()
    {
        read load server;
        if [ "$load" = "" ]; then
        printf 'Failure: could not connect to any server\n'
        else
        printf 'Connected to server %s (%d users apart me), yeah!\n' \
            "$server" "$load"
        fi
    }
    
    # sdata_connect()
    #  The full connection chain.
    sdata_connect()
    {
        sdata_extract < "$sdata_statname" \
        | sdata_sort_by_load \
        | sdata_try_to_connect \
        | sdata_outcome
    }
    
    sdata_connect
    
    

    Ce n'est pas interdit de définir des fonctions au lieu de copier et coller à tort et à travers!

    Ton bloc d'extraction des données de la page est visiblement un bon candidat pour faire une fonction. Au lieu d'enchaîner les cut on peut faire le travail proprement avec sed. C'est ma fonction sdata_extract qui mange ton fichier HTML et écrit un beau tableau bien propre avec toutes les statistiques. C'est l'étape N°1 de tout programme shell qui travaille sur des données: extraire les données dans un format propre. Après c'est un jeu d'enfant de les maniper avec sort, awk, etc.

    Ensuite ton gros bloc de if imbiqués est classiquement représenté par une boucle, ce que fait le while , et c'est toujours achement plus facile de caler la boucle while dans une fonction dédiée (plus facile pour les pipes).

    Ensuite, quelques conseils en vrac, que tu peux utiliser même si tu débutes en shell:

    1. si tes diagnostics sont internationalisés il faut les piper à travers iconv avant de les afficher. Par exemple

      printf 'Pouët\n' | iconv -f utf-8

      si ton script est en utf-8, éventuellement rédiriger vers stderr.

    2. Les trentes lignes de echo avec des lignes vides, des 'début de script' etc. ne servent à rien et créent une sortie inutilement difficile à analyser avec un programme: vire les.

    3. Continue de poser tes questions ici, et si tu n'as pas lu ce journal vas-y!

  • # Grévisse

    Posté par  (site web personnel) . En réponse au journal La langue française, un standard commun ?. Évalué à 3.

    Désolé de faire aussi vieux jeu, mais en plus des outils électroniques que tu évoques on peut utiliser des livres, notamment le Grévisse. C'est un ouvrage de grammaire truffé d'exemples et donc très accessible, qui contient beaucoup d'informations toujours très détaillées.

  • [^] # Re: Put fun back in programming with python

    Posté par  (site web personnel) . En réponse au journal proposition contribution. Évalué à 3.

    Etant donné que vous aimez le python pourquoi ne pas contribuer à un projet qui permet son apprentisage ?

    Ça ferait un peu serpent qui se mord la queue, si j'ose dire!

  • [^] # Re: Merci pour l'info !

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

    Tu n'est 'libre' de faire un 'choix' que quand tu as la possibilite de le faire. Par definition quand il y a abus c'est mauvais.
    Bref trop d'alternatives t'empeche de faire un choix 'libre' puisque tu ne peux pas evaluer toutes les solutions pour savoir laquelle te conviendrait le mieux, te laissant l'arriere gout desagreable de ne pas avoir fait le bon choix justement.

    Tu as tout à fait raison. Par exemple en Allemagne il y a aujourd'hui 146 assurances maladies de régime public (pour simplifier, il y a un second type d'offre—en 1970 il y en avait 1815 et en 1931 6985, d'après Wikipedia), pas facile de s'y retrouver! Une offre d'assurance maladie est une offre très complexe, qui se distingue par les politiques de prévention, la couverture des séjours à l'étranger, etc.

    La façon rationnelle de choisir son assureur serait de faire un bilan de santé complet, d'évaluer ses risques de maladie, de coupler ça aux facteurs “civils” (par exemple les voyages et la couverture à l'étranger), et choisir la meilleures assurance en fonction de cela.

    Évidemment, personne n'évalue correctement les alternatives et se contente de faire comme les autres, ce qui conforte la position des gros poissons et revient pour le consommateur ou l'usager à choisir son prestataire en fonction de l'offre de celui-ci au cours des 10–15 dernières années et pas de l'offre actuelle.