Catégorie : traductions

La terre ne se réchauffe pas… mais refroidit ?

Je fais cet article suite à la visualisation de cette vidéo : on y voit un député européen expliquer qu’il faut arrêter de prendre les gens pour des imbéciles et qu’il faut arrêter de dire que parce que nous polluons nous sommes responsables du réchauffement de la planète.

Attention : je suis le premier à dire nous polluons trop, et qu’il faut faire quelque chose.

Mais il ne faut pas dire de choses stupides. En fait la terre va se réchauffer, oui. Mais c’est normal.
Non, la terre ne refroidit pas et ce qu’explique ce fameux député européen est faux.

J’insiste : faites vous votre opinion et pensez par vous même, recherchez sur google et pensez par vous même.

Voici ma conclusion personnelle, elle n’engage que moi :
Oui la terre se réchauffe, et non ce n’est pas à cause de nous, ni à cause du CO2.
Il faut éviter de dire : la terre se réchauffe parce que je roule trop en voiture ou autre chose de ce genre.
Oui la terre se réchauffe, mais c’est inévitable, c’est un processus naturel. Ce sont juste certaines personnes bien placées qui ont eu l’idée d’exploiter cela afin de nous faire payer plus pour des choses qui n’existent pas. En cela, le député dont je parle au début a raison.

Il faut dire « oui on pollue », « oui on produit du CO2 ce n’est pas bien », mais surtout pas « le CO2 de notre pollution réchauffe la planète ». C’est faux.

Faites vous votre opinion et pensez par vous même, recherchez sur google et pensez par vous même.

L’arnaque du réchauffement climatique (partie 1)

L’arnaque du réchauffement climatique (partie 2)

L’arnaque du réchauffement climatique (partie 3)

L’arnaque du réchauffement climatique (partie 4)

L’arnaque du réchauffement climatique (partie 5)

L’arnaque du réchauffement climatique (partie 6)

Blague : les chiens guide.

Blague prise en Anglais ici.
(Pour la note, un chien guide est un chien qui sert de guide aux personnes aveugles ou mal voyantes).

Un homme entre dans un bar avec son chien. Il s’approche du comptoir et demande un whisky. Le barman répond :
« Les chiens sont interdits ici ! ».
Ce à quoi le client dit sans sourciller :
« C’est mon chien-guide ».
« Oh, excusez moi, vous êtes le premier à entrer dans mon bar ainsi ».
Le client prend son verre, et va s’asseoir dans un coin près de l’entrée.

Sur ces entrefaites, une autre personne entre dans le bar avec un chihuahua.
Le type avec le chien près de l’entrée l’apostrophe et lui dit :
« Attention, votre chien ne sera pas accepté sauf si vous dites que c’est un chien guide ! ».

La personne la remercie de cette attention, et va commander un verre au bar. Le barman le voit arriver et aussitôt, dit :
« Les chiens sont interdits ici ! ».

Ce à quoi le client répond :
« C’est mon chien-guide ».

Le barman s’esclaffe et sort :
« Non, je ne pense pas, les chihuahua ne sont pas des chiens-guide ! ».

L’homme le regarde alors d’un air surpris et dit : « Quoi ? Ils m’ont donné un chihuahua ? ! ? »

Grippe A : au scandale ! Une pandémie uniquement de profit

Quels sont les intérêts économiques derrière cette grippe porcine dont on nous rebat les oreilles ?

  • 1 million de personnes et plus par an meurent dans le monde de la malaria, qui pourrait être prévenue avec un simple moustiquaire. Cliquez ici pour lire cela en détail.
    Les journaux n’en parlent pas !
  • 2 millions d’enfants par an meurent dans le monde de la diarrhée, alors que l’on pourrait l’éviter avec un banal sérum pour 0,25 € la dose. Cliquez ici pour lire cela en détail.
    Les journaux n’en parlent pas !
  • 10 millions de personnes par an meurent de la rougeole, pneumonies et infirmités, que l’on pourrait les guérir avec de simples vaccins. Je ne vous donne pas de liens : cherchez « pneumonie morts » sur google, « rougeole morts » etc., vous verrez c’est atterrant.
    Les journaux n’en parlent pas!

Mais il y a de cela 10 ans, quand la fameuse grippe aviaire est apparue…
Les journaux mondiaux nous on inondés d’informations à ce sujet : Une épidémie, la plus dangereuse de toutes… une pandémie !
On ne nous parlait que de la terrifiante maladie des volatiles.
Et pourtant, la grippe aviaire a causé la mort de quelques 250 personnes en 10 ans… 25 morts par an.
La grippe commune, tue un demi-million de personnes par an, dans le monde. Un demi-million contre 25 ! Un moment… Un moment s’il vous plaît ! Alors, pourquoi un tel remue-ménage – un scandale – autour de la grippe Aviaire ?
Parce que derrière les poulets il y avait un « Coq », un coq à grande crête. L’entreprise pharmaceutique internationale Roche avec son fameux Tamiflu vendu à des millions de doses aux pays asiatiques. Bien que l’efficacité du Tamiflu soit douteuse, le gouvernement britannique en a acheté pour 14 millions de doses pour protéger sa population. Grâce à la grippe aviaire, Roche et Relenza, les deux des plus grosses entreprises pharmaceutiques qui vendent les antiviraux, ont obtenues des millions de dollars de bénéfices.

Alors, en avant avec les oiseaux et maintenant avec les porcs. Eh oui ! Maintenant commence la psychose avec la grippe porcine. Et tous les médias du monde ne parlent que de ça. Et je me demande : Si derrière les poulets il y avait un « Coq »… N’y aurait-t-il pas derrière les cochons un « gros chef » (pour rester poli) ? L’entreprise Nord-américaine Gilead Sciences détient le brevet du Tamiflu. Le principal actionnaire de cette entreprise n’est autre que Donald Rumsfeld, secrétaire d’état à la défense de Georges Bush… Les actionnaires des entreprises pharmaceutiques Roche et Relenza doivent se frotter les mains, ils doivent être heureux avec les millions de nouvelles ventes du Tamiflu.
La véritable pandémie est celle de l’argent, les énormes bénéfices de ces mercenaires de la santé. Vous trouverez toutes les d’informations utiles sur ce scandale ici (le site est en Anglais) :
http://www.nowpublic.com/world/tamiflu-scandal-gilead-sciences-donald-rumsfeld-connection
Attention ! Je ne nie pas les précautions nécessaires qui sont entrain d’être prises. Mais si la grippe porcine est une pandémie aussi terrible que l’annonce les médias. Si l’OMS se préoccupe tant de cette maladie, pourquoi ne la déclare-t-on pas cette pandémie comme un problème mondial de santé publique (suppression momentanée des droits de brevets) ? Pourquoi ne pas autoriser la fabrication de médicaments génériques pour la combattre ? Se passer momentanément des brevets des entreprises Roche et Relenza et distribuer les médicaments génériques gratuitement à tout les pays, et plus particulièrement aux pays les plus pauvres : ne serait-ce pas la meilleure solution ? Ou alors c’est une farce il n’y a aucune menace réelle. Avez vous remarqué que, malgré le très grand risque lié à la prolifération de cette maladie, aucune précaution n’est prise à l’égard des destinations à risques ? Aucun média ne se fait le relai de la prévention ni ne met sérieusement les gens en garde comme le voudrait le bon sens. Demande-t-on aux gens d’éviter de se rendre aux états-unis ? Non ! Que fait-on concrètement pour enrayer le risque de s’engager dans une pandémie ? Rien ! Pourquoi ?

On est inscrits dans un contexte de crise financière ayant entraîné une crise économique. Une des plus grave que l’on ait connu.

Pour détourner l’attention du peuple et sa méfiance, relancer l’économie « florissante » et ultra-libérale avec les mêmes personnes qu’avant, il faut une situation de crise visant les personnes dans leur intégrité physique. On sait tous qu’en temps de crise, les gens se jettent sur les magasins pour faire des stocks de tout et de rien. La preuve, certains font déjà des listes de survie pour pandémie !

On a vu ça avec les différentes guerres au 20ème siècle, les gens vont naturellement acheter plus et font des réserves. Une guerre mondiale ne pouvant être déclarée (logique) rien de tel qu’une bonne pandémie !

Voilà, pour information, un docteur spécialiste en pharmaco épidémiologie qui explique clairement que non seulement l’efficacité n’a jamais été prouvée, qui explique qu’on a les moyens de tester l’efficacité du vaccin mais que cela na jamais été fait, donc que c’est uniquement à but lucratif, et qui explique que finalement il a par contre été prouvé que le Tamiflu peut être dans certains cas toxique : cliquez ici pour voir cela en vidéo.
Et puis de la même personne : cliquez ici pour voir cela en vidéo.

Conclusion : méfiez-vous de ce que l’on vous raconte et réfléchissez par vous même ! Internet vous donne la possibilité de le faire, ne mangez pas sans réfléchir ce qu’on vous donne, n’écoutez pas sans réfléchir ce qu’on vous donne, ne lisez pas sans réfléchir ce qu’on vous donne !

Kluster : une bonne idée

La traduction n’est pas complète, si vous voulez, je vous laisse faire le reste et me laisser votre travail en tant que commentaire (on peut toujours rêver)… bah oui quoi je vous ai apporté déjà pas mal d’informations, non ?

Si les hommes d’affaire comptent sur la sagesse des masses pour les aider à faire plus de business, il serait enfin temps que les masses aient une petite compensation.

Sur Kluster, le site de Ben Kaufman’s, les compagnies paient les utilisateurs pour leurs idées.

C’est la théorie derrière Kluster, le dernier rejeton de la lignée des compagnies qui veulent utiliser les Web pour drainer l’intelligence collective des étrangers afin de construire des stratégies de business gagnantes. Avec un système de gratifications en monnaie sonnante et trébuchante, et une très bonne impression faite à là conférence de TED la semaine dernière à Monterey, Calif., Kluster espère attirer suffisamment de visiteurs avec suffisamment de personnes créatives pour atteindre des sommets.

En plus des membres du publique, les 1,000 participants de TED, une conference dédiée aux nouvelles technologies, au design et aux divertissement, qui attire les leaders de beaucoup d’industries, ont essayé Kluster pour chercher de nouvelle idées pour un produit, ensuite ils en on choisi un, et ont participé au design. Le résultat : « Over There », un jeu de plateau éducatif ayant pour objectif de promouvoir l’éveil à la culture, avec des questions telle que « Quel est le pourcentage de la population mondiale qui vit plus loin que un kilomètre d’une source d’eau naturellement potable ? ».

Selon Ben Kaufman, le jeune fondateur de 21 ans de Kluster, il y avait uniquement deux contraintes : le produit ne devait pas dépasser 20 x 20 cm et devait pouvoir être construit en une seule injection de plastique (contrainte industrielle). Tout au long du processus, Mr. Kaufman expliquait qu’il imaginait que le produit serait « quelque chose qui ne serve pas un intérêt futile du consommateur, mais un vrai produit humanitaire qui pourrait être utilisé par tout le monde. »

Mr. Kaufman a dit qu’en réalité ce serait son point de départ. Ce même personnage, fondateur de Mophie, un revendeur d’accessoires iPod, a gagné un concours de design de produit à la conférence Macworld, avec des gens qui soumettaient des idées et utilisaient un site Web pour affiner les designs et voter.
C’est ici qu’est né « Bevy » — un porte clé et ouvre-bouteille intégré à un boîtier iPod Shuffle — produit qui a été vendu en plusieurs milliers d’exemplaires à d’autres revendeurs dans le monde entier. Fort de ce succès, Mr. Kaufman a revendu Mophie en août pour une somme non diffusée, et a commencé un business né directement de l’expérience qu’il avait eu lors de la conférence Macworld.

Kluster includes a number of refinements to that process. Those who join are given 1,000 units of Kluster scrip, called « watts », and they may earn more by telling the site more about themselves, like their area of expertise, age and income. Meanwhile, businesses are invited to post specific tasks to be addressed, like creating a new product, logo or corporate event.
Participants browsing the ideas offered by Kluster members can bet some or all of their watts on the ideas they most believe in, or post ideas of their own. Those who had winning ideas earn at least 20 percent of the bounty offered by the company that sought the idea, as well as more watts, while those who bet on the winning idea earn watts. Those who bet wrong lose what they wagered.

Mr. Kaufman said several well-known manufacturers would offer projects on the site after the TED contest. He would not disclose the identities of those businesses, but some, he said, would offer $50,000 or more for winning ideas, while others expect to give far less and hope that they have enough good will among their customers to spur ideas.
Kluster will make money, he said, by taking 15 percent of any rewards offered to projects and by charging fees for prominent placement of projects on the site, among other things.
Don Tapscott, the business strategy consultant and co-author of the book « Wikinomics », said executives were quickly warming to the strategic value of « P.F.E. » ideas, or those « proudly found elsewhere. »
« Throughout the 20th century, we’ve had this view that talent is inside the company », Mr. Tapscott said. « But with the Web, collaboration costs are dropping outside the boundaries of companies, so the world can become your talent. »
Mr. Tapscott, who credited Procter & Gamble with the P.F.E. concept, said executives can go overboard with the idea of outsourcing innovation if, in seeking such help, they expose too much of a company’s trade secrets. But so far, he knows of no business that has done so.
« They always err on the other side », he said. « They don’t do enough. »
Among the obstacles in Kluster’s path are sites like InnoCentive and Cambrian House, which operate similarly. InnoCentive, based in Waltham, Mass., was until late last year a forum for solving science-related problems, typically for cash rewards. In September, it expanded into business, engineering and computer science, among other things. Since then it has grown by 15,000 participants, to 140,000, the company said.
Cambrian House, which is based in Calgary, Alberta, and has 64,000 participants, will also expand its Web site this year to accommodate projects across a broader range of industries. Until now, said Jasmine Antonick, a Cambrian House founder, the site has attracted mostly software and Web entrepreneurs.
Ms. Antonick expects the site to be profitable later this year, when it receives a share of payments made by businesses to several of Cambrian House’s participants, like two men who created Gwabs, an online video game that is to be distributed by an undisclosed company this summer.

Le mois prochain, il présentera VenCorps, un site grâce auquel des investisseurs et autres personnes affiliées, pourront consulter des idées provenant de gens extérieurs, et, au bout de 30 jours, payer le concepteur de l’idée 50,000 dollars en échange d’un d’un achat de parts ou autres.

VenCorps est un partenariat établi entre Cambrian House et Spencer Trask Collaborative Venture Partners, une division New-Yorkaise d’investisseurs de la boîte Spencer Trask. Sean Wise, l’un des fondateurs de Collaborative Venture Partners, avoue qu’il a beaucoup d’espoirs concernant ce site.

« Quel que soit mon degré d’ingéniosité », a-t-il dit, « je ne pourrai jamais produire quelque chose d’aussi subtil et fin que ce qui ressort d’une réflexion collective d’une communauté. »

Josh Bernoff, un analyste chez Forrester Research, a annoncé que Kluster avait un vrai « potentiel commercial ».

« Demander à une communauté de l’aide pour résoudre des problèmes va certainement faire progresser le commerce », a-t-il ajouté. « Ce n’est, actuellement, toujours pas quelque chose qui donne la possibilité de faire une grosse plus-value dans le business. »

… pas encore.

SpeedDate : un site qui tourne bien. Très bien.

Le site de speed-dating SpeedDate a fait une levée de fonds de 6 millions de dollars dans un tour de table « Serie B » dirigé par Menlo Ventures. SpeedDate vous offre la possibilité de faire une discussion de 3 minutes avec une personne de votre choix, 3 minutes pendant lesquelles vous pouvez parler par vidéo, audio et au clavier. Si les deux personnes pensent qu’elles ont eu un bon feeling et qu’elles décident de se rencontrer, à la fin de la discussion, elles peuvent continuer à communiquer via le site jusqu’à ce qu’elles fassent le grand saut dans la vie réelle.

La première fois où nous avions parlé de ce site, il était peu populaire et par là même il y avait peu de personnes inscrites, ce qui rendait difficile le fait de faire plusieurs rendez-vous d’affilée. Maintenant que le site a grossi de manière impressionnante, il parle de 100,000 rendez-vous quotidiens, vous avez de grandes chances de faire pas mal de discussions à peine quelques minutes après vous être inscrit.

J’ai décidé de faire un nouveau test sur le site, maintenant qu’il est censé avoir beaucoup de personnes potentielles avec qui discuter. A l’inverse de la plupart des sites de rencontres, il n’y a aucun processus d’inscription qui dure une éternité avec plein de choses à remplir – le site laisse le vrai « coup de foudre » arriver lors la discussion vidéo, sans se baser sur autre chose. Et malgré le fait que SpeedDate semble avoir complètement ignoré les traits personnels et les les intérêts que j’ai entré, j’ai eu une super expérience lors du test et je me suis beaucoup amusé. Je n’ai eu qu’à attendre quelques minutes entre chaque session, et les personnes avec qui j’ai discuté m’ont dit que, de leur propre expérience, c’était généralement très positif.

SpeedDate est un concurrent direct de Woome (le concept est identique chez eux : des sessions de speed-dating).

Cliquez ici pour une information détaillée : SpeedDate
Information fournie en Anglais par CrunchBase

Librairie Apr : tutoriel 12

12. DSO (Dynamic Symbol Object)

Vous connaissez peut-être les objets partagés (so = shared object) ou les dlls (dll=dynamic link library). Grossièrement on peut dire que DSO est né du principe des so/dll. Mais on parle de dso (Dynamic Symbol Object) pour les différencier des librairies dynamiques so/dll.

Pour comprendre le fonctionnement des dso, il faut savoir comment fonctionne le link et le chargement. En général, lorsqu’on utilise des librairies dynamiques, on les « link » avec le programme principal lors de la compilation. ld(1) s’occupe de cela sur Unix. ld(1) est connu en tant qu’éditeur de lien. Comme ld(1) est habituellement appelé par le compilateur lui-même gcc(1) de façon implicite, peut-être n’avez-vous jamais entendu parler de ld(1). Au mieux avez-vous vu des messages problème de « link » lors de la compilation. Cela signifie que ld(1) n’arrive pas à résoudre certains symboles que vous utilisez dans votre programme. En cours d’exécution, ld.so(8) charge les librairies dynamiques. S’il n’y arrive pas, vous verrez des messages d’erreur de chargement. En résumé, le « link » est fait lors de la compilation, et le chargement est fait lors de l’exécution. Si vous voulez en savoir plus, il vous suffit de lire les manuels ld(1) et ld.so(8).

Grâce à dso, le link et le chargement sont faits lors de l’exécution. Quel est l’intérêt d’un tel mécanisme ? La raison se résume en deux mots : architecture plugin. La seule chose que nous ayons à faire lors de la compilation est de définir les interfaces (« noms symboliques » et la manière les appeler, les paramètres à leur donner, donc) des modules qu’il devra être possible de charger. Le programme charge les modules pendant son exécution, et s’en sert au travers d’interfaces. Les modules dynamiquement « téléchargeables » peuvent ainsi être développés par des programmeurs indépendants. Vous pourrez ainsi rendre votre programme très flexible et extensible.

Voyons voir dso-sample.c. Vous pouvez y voir deux chaines : « libm.so » et « pow ». En réalité, pow(3) est une fonction basique et, en temps normal, n’a pas besoin d’être appelée sous forme de dso, mais c’est simplement pour l’exemple.

Au début, on appelle apr_dso_load() et on lui donne le nom de la librairie : « libm.so ».

/* extrait de dso-sample.c, vérif. des erreurs omise */
const char fname[] = "libm.so";
    apr_dso_handle_t *dso_h;
    apr_dso_load(&dso_h, fname, mp);

Comme vous pouvez l’imaginer, si vous voulez programmer en donnant la possibilité aux autres de faire des plugins pour votre programme, vous devez faire en sorte d’avroi un fichier dans lequel il y a tous les noms des plugins à télécharger. On a déjà quelque chose qui tourne plutôt bien : les modules apache. Leurs noms sont spécifiés, en général, dans le fichier de configuration principal : le fichier « httpd.conf ».

Lorsque apr_dso_load() renvoie une erreur, c’est, la plupart du temps, parce qu’il ne trouve pas le fichier de la librairie dynamique. Le chemin de recherche pour les librairies dépend du système d’exploitation. Sur GNU/Linux, il dépend de la variable d’environnement LD_LIBRARY_PATH. Sur MS-Windows, il dépend de la variable d’environnement PATH. Après avoir un résultat de retour de apr_dso_load() réussi, on peut appeler apr_dso_sym().

Voici le prototype :

/* extrait de apr_dso.h */
APR_DECLARE(apr_status_t) apr_dso_sym(
    apr_dso_handle_sym_t *ressym,
    apr_dso_handle_t *handle,
    const char *symname);

On peut récupérer un objet par son nom via apr_dso_sym(). Le premier argument est un argument résultat. Le second argument est un handle dso, qu’on a avec apr_dso_open() expliqué précédemment. Le troisième argument est le nom du symbole.

Le code suivant est un extrait de dso-sample.c. Le nom du symbole est « pow » et on récupère un pointeur de fontion en tant qu’objet. Comme on connait l’interface de pow(3), il nous suffit de définir la fonction en tant que type : pow_fn_t.

/* extrait de dso-sample.c, vérif. des erreurs omise */
typedef double (*pow_fn_t)(double x, double y);
pow_fn_t pow_fn;

/* récupérer la fonction pow(3) de libm.so */
apr_dso_sym(
    (apr_dso_handle_sym_t*)&pow_fn,
    dso_h, "pow");

/* appeler pow(3) */
printf("%d ^ %d = %f\n", 2, 2, pow_fn(2, 2));

Si votre programme a des plugins, vous devrez définir des noms symboliques ainsi que leurs interfaces. Par la suite, les développeurs devront s’appuyer sur ces déclarations. Enfin, on appelle apr_dso_unload() pour libérer le module. Cela diminue ainsi la consommation mémoire.

Librairie Apr : tutoriels 10 et 11

10. Options de la ligne de commande

Pour les outils en ligne de commande (CLI, Command Line Interface), les options qu’on donne en ligne de commandes sont souvent utilisées. La librairie libapr met des fonctions à disposition qui facilitent grandement la gestion des options fournies en ligne de commande. Voici un extrat de getopt-sample.c.

/* extrait de getopt-sample.c */
static const apr_getopt_option_t opt_option[] = {
    /* énumération comme suit :
     * {opt. longue}, {opt. courte},
     * {flag "argument qui suit"}, {description} :
     */

    /* -i nomfichier or --in nomfichier : */
    { "in", 'i', TRUE, "fichier entrant" },

    /* -o nomfichier or --out nomfichier : */
    { "out", 'o', TRUE, "fichier sortant" },

    /* -h or --help : */
    { "help", 'h', FALSE, "voir l'aide" },

    /* sentinelle de fin : */
    { NULL, 0, 0, NULL },
};

En premier lieu, il faut fournir un tableau d’éléments apr_getopt_option_t. On l’appelle (ici) option-list. Chaque élément a quatre variables :

  1. une option longue ;
  2. une option courte ;
  3. un flag « argument qui suit », pour préciser si cette option nécessite un argument qui doit la suivre ;
  4. une description.

Par exemple, pour l’option « help » :

  • Une option longue : ‘–help’ :
  • Une option courte : ‘-h’.

Les options courtes sont obligatoires et les options longues sont optionnelles. On peut tout à fait mettre NULL pour une option longue. La troisième variable précise si un argument supplémentaire doit suivre cette option. Par exemple si une option de ligne de commande fonctionne ainsi  ‘–in nomfichier’, c’est à dire qu’il faut obligatoirement préciser un nom de fichier, il faut mettre ce flag à vrai (TRUE). Ainsi, si le programme est exécuté et qu’on donne cette option sans donner un argument, par exemple ‘./a.out -in’, une erreur est levée.
Enfin, le tableau de la liste des options doit se terminer par une sentinelle vide qui précise que la liste est finie (voir l’exemple précédent).
Pour parcourir les options fournies dans la ligne de commande, if faut tout d’abord initialiser le parser en appelant ‘apr_getopt_init()’ (pour initialiser un objet apr_getopt_t) puis faire une boucle en s’aidant du tableau des options. Ensuite, on appelle en boucle apr_getopt_long() tant qu’il renvoie APR_SUCCESS. Voici un extrait de getopt-sample.c :

/* extrait de getopt-sample.c */
/* initialiser apr_getopt_t */
apr_getopt_t *opt;
apr_getopt_init(&opt, mp, argc, argv);
/* parcourir toutes les options via opt_option[] */
while ((rv = apr_getopt_long(opt,opt_option,
                             &optch,
                             &optarg)) == APR_SUCCESS) {
...etc.

Dans la boucle, apr_getopt_long() enumère les options passées en ligne de commande une par une. Si l’option trouvée fait partie de la liste des options, apr_getopt_long() renvoie APR_SUCCESS et initialise la valeur de optch en conséquence. Si l’option a un argument supplémentaire apr_getopt_long() le lit et initialise la valeur de optarg.

Voyons un exemple concret. Imaginons que vous lanciez le programme en y ajoutant une option et une valeur associée : ‘./getopt-sample -h -i foo.txt’. Lors de la première boucle, apr_getopt_long() trouve ‘h’ dans la liste des option. Donc, apr_getopt_long() renvoie APR_SUCCESS et initialise optch avec la valeur ‘h’. Sur la boucle suivante, apr_getopt_long() trouve ‘i’ dans la liste des options, et comme ‘i’ nécessite un argument qui doit le suivre, il y a lecture de l’argument suivant, ‘foo.txt’. Ainsi, apr_getopt_long() renvoie APR_SUCCESS, avec optch qui vaut ‘i’ et optarg qui vaut « foo.txt ». Lors de la boucle suivante, apr_getopt_long() ne trouve plus d’options et renvoie par conséquent APR_EOF.

11. memory map (mmap)

mmap signifie « mapping mémoire ». Ce qui veut dire « mapper » des fichiers en mémoire. mmap est principalement utilisé pour :

  • Lire/écrire dans des fichiers le plus rapidement possible ;
  • Allouer un espace mémoire consécutif plus gros (gestion spécifique à chaque système d’exploitation) ;
  • Partage mémoire entre différents processus.

Pensez au cas où vous voulez lire un fichier en entier en une fois. Dans ce cas il faut faire un buffer, lire du début jusqu’à la fin dans une boucle. Le code ressemblerait à cela :

/* code simpliste pour lire le contenu d'un fichier */
apr_file_t *fp;
apr_file_open(&fp, filename, APR_READ, APR_OS_DEFAULT, mp);
while (1) {
    char buf[1024];
    apr_size_t len = sizeof(buf);
    rv = apr_file_read(fp, buf, &len);
    if (rv != APR_SUCCESS) {
        break;
    }
    /* scan buf */
}
apr_file_close(fp);

On peut faire mieux, avec apr_mmap_t :

/* extrait de mmap-sample.c, vérif. des erreurs omise */
apr_file_open(&fp, filename, APR_READ, APR_OS_DEFAULT, mp);
apr_finfo_t finfo;
apr_file_info_get(&finfo, APR_FINFO_SIZE, fp);
apr_mmap_t *mmap;
apr_mmap_create(&mmap, fp, 0, finfo.size, APR_MMAP_READ, mp);
/* scan mmap->mm */
apr_mmap_delete(mmap);

Si le fichier est suffisamment gros, le code basé sur mmap sera plus rapide.
Plus important encore, mmap aide à éviter la fragmentation mémoire. La plupart des systèmes (qui doivent gérer les allocations mémoire) se trouvent confronté au problème de fragmentation mémoire, mais mmap n’entre pas dans le cadre d’allocation mémoire dans l’espace utilisateur. Malheureusement, sur certains systèmes, mmap est parfois lent et bogué.

On peut utiliser mmap pour modifier des fichiers. On ouvre le fichier avec APR_WRITE, puis on « mmap » le fichier en précisant le flag APR_MMAP_WRITE.

REMARQUE : Il est interdit de « mmap-er » un fichier ouvert avec le flag APR_BUFFERED. Le code suivant renverra toujours l’erreur APR_EBADF :

/* Exemple mmap BOGUE */
apr_file_t *fp;
apr_mmap_t *mm;
apr_file_open(&fp,
    fname,
    APR_READ|APR_BUFFERED,
    APR_OS_DEFAULT, mp);
rv = apr_mmap_create(&mm,
    fp, 0,
    finfo.size,
    APR_MMAP_READ, mp);
/* BOGUE : le résultat sera TOUJOURS :
 * rv==APR_EBADF
 */

Librairie Apr : tutoriel : getopt-sample.c

Note

Regardez le tutoriel au complet, en Anglais, ici.
Vous trouverez tout ce tutoriel séparé en plusieurs pages ici.
Ce fichier est l’exemple le plus simple pour mettre en oeuvre les fonctions apr_xx
Il vient d’ici.

/**
 * Exemple du tutoriel apr
 * http://dev.ariel-networks.com/apr/
 */
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

#include <apr_general.h>
#include <apr_getopt.h>

/**
 * command line options sample code
 * @remark Error checks omitted
 */
int main(int argc, const char *argv[])
{
    apr_status_t rv;
    apr_pool_t *mp;
    /* API is data structure driven */
    static const apr_getopt_option_t opt_option[] = {
        /* -i nomfichier or --in nomfichier : */
        { "in", 'i', TRUE, "fichier entrant" },
        /* -o nomfichier or --out nomfichier : */
        { "out", 'o', TRUE, "fichier sortant" },
        /* -h or --help : */
        { "help", 'h', FALSE, "voir l'aide" },
        /* sentinelle de fin : */
        { NULL, 0, 0, NULL },
    };
    apr_getopt_t *opt;
    int optch;
    const char *optarg;

    apr_initialize();
    apr_pool_create(&mp, NULL);

    /* initialize apr_getopt_t */
    apr_getopt_init(&opt, mp, argc, argv);

    /* parcourir toutes les options via opt_option[] */
    while ((rv = apr_getopt_long(opt,opt_option,
                                 &optch,
                                 &optarg)) == APR_SUCCESS) {
        switch (optch) {
        case 'i':
            printf("opt=i, %s\n", optarg);
            break;
        case 'o':
            printf("opt=o, %s\n", optarg);
            break;
        case 'h':
            printf("afficher l'aide\n");  /* no arg */
            break;
        }
    }
    if (rv != APR_EOF) {
        printf("mauvaises options\n");
    }

    apr_terminate();
    return 0;
}