Thomas Douillard a écrit 9164 commentaires

  • [^] # Re: Lisibilité

    Posté par  . En réponse au journal Jouons avec le ``switch`` et C++17. Évalué à 3.

    Quand tu en est rendu à écrire ce type de code, c’est que tu joues avec le système de type, peut être pour faire des vérifications assez avancées au moment de la compilations. Du coup ce qui compte c’est pas tant l’assembleur généré, ce code ne faisant absolument rien tu aurais tôt fait de ne rien écrire :) L’extensibilité de la solution mentionnée dans un autre commentaire prime sans doute alors, c’est sacrifier un peu de lisibilité dans la biblio pour pouvoir faire des vérifications poussées simplement sur le code client. Enfin j’imagine parce que j’ai foutrement aucune idée de à quoi une telle construction peut servir :) Le fait que le code ne fasse rien me fait penser que c’est peut être purement pour satisfaire ou aider le système de type dans un truc avec un haut niveau de généricité.

    Par curiosité, @l’auteur, c’est quoi le contexte ?

  • [^] # Re: Super !

    Posté par  . En réponse au journal Port de taptempo en Rust. Évalué à 4.

    |s| s != "q"
    fonction anonyme de paramètre "s" (et de valeur s!=q). C’est juste plus compact et léger que les déclarations de fonctions habituelles :)
    Map est juste une fonction qui en attend une autre en paramètre. Le « map » classique s’applique sur une liste et applique la fonction sur tous les élément de la liste. C’est à dire qu’à partir d’une fonction d’un type A vers un type B ( A -> B ) map permet de former une fonction qui à partir d’une liste de A ([A] ou Liste A) retourne une liste de B : [A] -> B.

    Haskell, avec la notion de foncteur, a généralisé cette idée avec la notion de « foncteur » et fmap : un « truc » qui transforme une fonction de A -> B en une fonction « Truc A -> Truc B » est le fmap du foncteur truc ( https://hackage.haskell.org/package/base-4.10.1.0/docs/Control-Monad.html#v:fmap )
    Corrigez moi si je me trompe mais en l’occurrence « map » est le « fmap » du std::option de rust : il permet d’appliquer une fonction A -> B qui n’a pas à se soucier de si son A peut être null ou que sais-je en une fonction « option A -> option B » (« Truc A -> Truc B » avec Truc = option) qui va gérer d’elle même les cas « null » dans d’autres langage.

    Et effectivement, on peux trouver son code ici : https://doc.rust-lang.org/src/core/option.rs.html#402-407

        pub fn map<U, F: FnOnce(T) -> U>(self, f: F) -> Option<U> {
            match self {
                Some(x) => Some(f(x)),
                None => None,
            }
        }

    f est une fonction qui renvoie un U et map(f) renvoie un option.

    L’idée du « Maybe » en haskell c’est que tu écris tes fonctions sans te soucier des cas d’erreurs ou des éventuels « null » quand rien ne peut arriver, comme si tu écrivais du code avec exceptions presque (ou des fonctions qui prennent un A et retournent un « peut être B » ( voir https://en.wikibooks.org/wiki/Haskell/Understanding_monads#Motivation:_Maybe ). Et le langage t’aides à les composer comme il faut avec des opérateurs et du sucre syntaxique éventuellement. C’est un cas particulier de « monade ». Dans un monade des opérations sont abstraites de la même manière que « fmap » est abstraite dans le début de mon commentaire.

  • [^] # Re: Types

    Posté par  . En réponse au journal Portage de TapTempo en Wren. Évalué à 3.

    Dans les langages à typage dynamique tu veux dire ? Le type n’est pas déduit (dans le sens de l’inférence de types en tout cas), il est donné par le type de la valeur affectée lors de l’utilisation de la variable par l’interpréteur.

    Après la construction d’un objet « TapTempo », _sampleSize à la valeur qui correspond au littéral « 5 », qui est probablement un entier. Mais si c’est dynamique on peut affecter une valeur de n’importe quelle autre type plus loin dans le programme, et la seule manière de savoir ce qu’il y a dedans qui marchera à tout les coups c’est de tester ça à l’exécution.

  • # Deviner l’intérêt du langage

    Posté par  . En réponse au journal Portage de TapTempo en Wren. Évalué à 6.

    Ou essayer. Parce qu’à la lecture de ce simple helloworld, pas simple de deviner une quelconque spécificité par rapport aux autres.

    C’est assez lisible, comparable à du lua dans la même niche. Au delà de ça, difficile de dire quoi que ce soit :) Il y a un intérêt au delà du fait que ça semble être populaire ?

  • [^] # Re: What else ?

    Posté par  . En réponse au journal Portage de TapTempo en Python (2.7). Évalué à 3.

    C'est facile, tu prends la version C++ et les bonnes options de g++.

  • [^] # Re: Gestion du cache

    Posté par  . En réponse à la dépêche Firefox 58. Évalué à 4.

    C’est différent de modifier le cache avec un fichier js non compilé ?

  • # Contraire à la ligne du parti ?

    Posté par  . En réponse à l’entrée du suivi Une catégorie bookmark. Évalué à 2 (+0/-0).

    Le besoin de partager des liens, il est présent dans toute communauté. Si les gens le font pas ici, il le feront ailleurs, genre sur des plateformes proprios comme twitter qui sont parfaites pour ça.

    Le truc c’est que sur ces plateformes, on est pas forcément dans la même logique qu’ici : soit on est abonnés à des proches, soit on est abonné à des « célébrités » (des personnes en vue ou influente). Ici on reçoit les liens de personnes qu’on aurait pas forcément remarqué dans une logique plus thématique que personnelle, c’est une autre perspective qui favorise la diversité.

    Enfin la possibilité de création de contenu peut naître de l’éventuelle discussion qui suit, ce qui sur un site thématique comme linuxfr ou les commentaires sont généralement relativement pertinents, n’est pas inintéressant. Ce serait rajouter une section similaire à « HackerNews » https://news.ycombinator.com/ sur Linuxfr.

    J’ai déjà par exemple trouvé des liens pas inintéressants sur la tribune de rédaction que personne n’avait eu le temps de développer en journal, et c’est dommage parce qu’ils sont peu visibles.

  • # Dans le même registre jsawk

    Posté par  . En réponse au journal JSON en ligne de commande : jq/pjy. Évalué à 5.

    J’en ai utilisé un autre dans le genre dans le passé : https://github.com/micha/jsawk . Comme awk balance du texte en sortie, ça peut balancer du json en sortie. On peut extraire des données pour les sortir formatées en texte comme on veut, et le langage n’est pas du awk mais du js à la place.

  • # Chez Wikimedia …

    Posté par  . En réponse au journal On ne contribue pas que du code. Évalué à 7.

    Sommaire

    Ça pourrait être un peu long parce qu’il y a pléthore d’outils, alors je vais me contenter d’un inventaire à la Prévert. On sent que c’est un projet fondamentalement international pour lequel les langues sont importantes, même si comme ailleurs bien des discussions se font en anglais. Voici un aperçu des outils que j’ai eu l’occasion d’utiliser :

    Tanslatewiki.net

    (que je découvre pour l’occasion n’est même pas géré par Wikimedia). Un wiki qui expose les chaîne de traduction de divers projets, dont Wikimedia et ses extensions. On peut proposer son propre projet en en parlant aux responsables de wiki. Gère d’autres projets d’envergure comme les logiciels OSM, apparemment.

    Pour le traducteur, il se voit proposer une interface avec une pseudo page wiki à traduire pour chaque message, éventuellement avec une doc pour aider les suivants et contextualiser un peu (si vous avez tenté de traduire un logiciel, vous savez sûrement qu’un message isolé sans avoir connaissance de l’interface autour, on sait pas toujours bien ce qu’il est supposé vouloir dire). Relativement simple. L’interface utilise une extension Mediawiki dont on parle plus bas. L’aspect social est géré par les messages entre utlisateurs sur le wikis et les différents systèmes de notification, et de suivi des modifications habituels sur les wikis.

    Pour le développeur, ça à l’air de fonctionner grâce aux fichiers .po et à la bonne volonté des responsables du wiki, donc peut possible de gérer plus ou moins d’autres formats en s’arrangeant avec eux : https://translatewiki.net/wiki/Translating:Localisation_for_developers

    Extension « Translate »

    L’extension Translate est une extension Mediawiki qui permet de gérer des wikis multilingues. En pratique une page wiki dans une langue peut être préparée pour être traduite grâce à des balises dans le code déterminant les parties à traduire. L’interface expose alors à un traducteur dans une langue la liste des parties d’article à traduire. Elle génère ensuite une version traduite de la page par langue.

    Elle gère une éventuelle documentation des message à traduire et l’identification des message dans la page pour suivi grâce à des annotations automatiques du code wiki. C’est important parce que les pages wiki sont évolutives et éditées en permanence, tout peut être déplacé à l’envie. Elle possède des fonctionnalité de relecture et d’aide à la traduction : suggestions de traductions existantes de messages proches dans la base existante de traduction, et suggestion de traduction par des services de traduction automatique.

    Elle gère aussi des listes de traductions de messages non associées à des pages wikis traditionnelles. Peut être des pages de fichiers « po » annotés dans le cas de « translatewiki.net », mais c’est pure spéculation de ma part.

    Dans le cadre de l’utilisation aux quotidien sur un wiki, il faut compter sur la bonne volonté des éditeurs d’une page wiki qui peuvent ne pas apprécier des annotations du code induites, qui sont perçues comme compliquant l’édition. (note perso et certains vouent un tel culte de la « simplicité » du code que ça en confine au simplisme.)

    Extension « Content Translation »

    Outil pour le transfert d’article d’un projet linguistique à un autre, par exemple traduire un article de wp en français en arabe ou en anglais.
    Fonctionne en divisant la page en titre / section / paragraphe qu’on peut sélectionner (ou pas) pour la traduction. Propose pas mal d’aides comme la traduction des liens de site, il s’agit de trouver automatiquement l’article équivalent (ou la catégorie) équivalente dans le wiki cible, l’expansion des modèles (les modèles du wiki source sont pas forcément dispo sur le wiki cible, ou sont incompatibles). Propose pour certaines paires de langues des traductions automatiques. Fonctionne avec une version « visuelle » des parties à traduire et du formatage wysiwig.

    C’est assez sympathique et utile, mais ça souffre de pas mal de bugs qui font que la sortie de l’outil doive de mon expérience forcément être revue après traduction (perte des formules mathématiques, difficulté de gérer le formatage avec l’interface au moment de la traduction.) Défauts de jeunesses mais qui perdurent, les équipent qui développent ayant d’autres projets et priorités. J’ai subis des gros bugs comme l’impossibilité de recharger une traduction en cours (qui traînait un peu) après quelque semaine quand l’article original est modifié, tout perdu. La traduction est toujours en cours mais du coup j’ai suivi une stratégie différente, exporter un semblant de traduction depuis l’outil de traduction dans une page wiki très tôt dans le processus traduction vers une page normale de mon espace utilisateur, que je modifie comme n’importe quelle page.

    Tooltranslate: les outils web de l’univers Wikipedia

    Des serveurs hébergent des interfaces web qui fournissent des service divers et variés pour visualiser / modifier / faire des requêtes sur les outils Wikimedia, par exemple https://tools.wmflabs.org/reasonator/ opur visauliser Wikidata ou https://petscan.wmflabs.org/ pour récupérer des tas d’articles et leur élément Wikidata en fonction de tout un tas de critères et des éditions en masse.
    Ces outils disposent de tooltranslate, qui vise manifestement l’efficacité et l’ouverture. On clique sur « traduire », on choisit sa langue et on traduit. Il semble possible d’ajouter ses propres outils à l’envie sans demander à personne. Il suffit d’avoir un compte Mediawiki pour traduire, l’identification est gérée par Wikimedia.

    Ressources linguistiques inter-langues libres :

    Il y a bien évidemment le wiktionnaire, qui donne des définitions de pleins de termes dans plein de langue, avec le projet en cours de wiktionnaire structuré, c’est à dire d’utiliser des structures de données informatiques pour stocker les synonymes, antonymes … des termes dans les différentes langues, les relier à l’élément Wikidata correspondant à leurs différentes définitions. Il y a des projets de https://en.wiktionary.org/wiki/Wiktionary:Thesaurus . Wikidata fournit un point de vue inverse : pour un concept donné, on peut retrouver un « intitulé » (terme) (et les pages wikipédia le décrivant) le désignant dans toutes les langues. C’est ce qui permet à l’outil de traduction d’article de transposer les liens, même si c’est pas abouti.

    En conclusion :

    J’ai un peu débordé du cadre, mais le potentiel de Wikimedia en terme d’ingénierie du langage est tel que c’est bien tentant. On pourrait rire au nez et douter du succès de n’importe quel autre projet avec ce genre d’ambition, mais dans le cas de Wikimedia ça semble juste naturel. La fondation a une équipe de développement dédiée

  • # Utiliser les notifications

    Posté par  . En réponse au journal Histoire de budget. Évalué à 6.

    Au lieux de stocker les mots de passes en clair, tu peux peut être t’envoyer régulièrement des notifications pour te rappeler de lancer un script, associé à zenity pour te demander les mots de passe. Un truc genre « appindicator » (comment on fait ça on python : http://candidtim.github.io/appindicator/2014/09/13/ubuntu-appindicator-step-by-step.html » ) que tu lances à chaque démarrage de ton desktop, ou par anacron, qui fonctionnerait un peu comme les notifications de nouvelles mises à jour système.

  • [^] # Re: Math

    Posté par  . En réponse au journal La recherche en langages de programmation au quotidien. Évalué à 4.

    Sauf qu’aujourd’hui certaines preuves utilisent des ordis pour faire des bouts de démonstration. Ça complique les choses d’une part parce que si tu veux enlever l’algo de l’équation ça produit des preuves dont la taille est sans commune mesure avec les preuves d’avant. Donc un truc probablement fastidieux et long à vérifier à la main, on a ptete mieux à faire du temps et des nerfs de nos meilleurs matheux. Ou alors ça nécessite de se convaincre que le programme utilisé est effectivement capable de produire une démonstration de ce qu’il est supposé montrer. Donc qu’il est sans bug. Les matheux tradis détestent ces démonstrations d’ailleurs, parce que les ordis servent souvent à faire une exploration systématique d’un certain nombre de cas qui peuvent exploser combinatoirement, et qu’ils préfèreraient un argument qui règle tout de manière plus synthétique avec une belle théorie. Et que ça rend difficile de se convaincre de la correction de la preuve. Mais rien ne dit que ça existe dans l’absolu et que toutes les preuves sont « courtes ». Au contraire est certains qu’il y a des objets comme des indécidables ou des propositions à démonstrations très très longue dans un système logique donné. cf. https://fr.wikipedia.org/wiki/Longueur_d%27une_d%C3%A9monstration

    Par exemple pour P=?NP ou des « preuves » sont produites régulièrement par tout un chacun et envoyés à des experts, il y a de bonne chances pour que personne ne lise jamais la proposition, trop long et peu probable que ce soit correct de la part d’un non expert du domaine. Si ça se trouve elle a été trouvée mais personne n’a ouvert le mail et elle a zéro chances d’être publiée :) Si le type fournit une preuve prouvée (inception) il a peut être plus de chances d’être pris au sérieux.

  • [^] # Re: c'est bien joli, mais…

    Posté par  . En réponse au journal La recherche en langages de programmation au quotidien. Évalué à 6.

    Nope, ça se prononce donc c’est non seulement un sigle mais c’est aussi un acronyme : https://fr.wikipedia.org/wiki/Acronymie

    et un acronyme peut s’écrire comme un nom propre d’après la page que je lie.

  • [^] # Re: Lisibilité

    Posté par  . En réponse au journal La recherche en langages de programmation au quotidien. Évalué à 5.

    Pardon pour les puristes

    Les puristes de quoi ? et si on est un adorateur de langage fonctionnel pas abscons tu t’excuses pas ? Pas très rigoureux tout ça ;)

  • [^] # Re: Hum... C'est pas gagné

    Posté par  . En réponse à la dépêche La vidéo pour expliquer le logiciel libre à votre voisin. Évalué à 3.

    De mémoire, ça fait un moment qu’effectivement la mofo a décidé que rendre gecko modulaire pour être utilisable par un projet externe ne faisait pas partie de ses objectifs. Après là avec servo c’est affiché sur la page d’accueil du projet :)

  • [^] # Re: Merci Free!

    Posté par  . En réponse au journal Free-electrons se fait attaquer en justice par Free, et change de nom. Évalué à -1.

    Marrant moi le bulldozer j’associe ça plus à des tendances libertariennes (ou pirate) qu’à une tendance geek en tant que tel. Il y a des geeks libertariens ou pirate, mais c’est pas forcément le cas. Sinon pour moi c’est assez dur de dissocier Free ou Illiad de Niel. On trouve ce même esprit bulldozer dans d’autres de ses projets comme 42 dont on est pas obligé d’apprécier tous les aspects, même si on est geek.

  • [^] # Re: Merci Free!

    Posté par  . En réponse au journal Free-electrons se fait attaquer en justice par Free, et change de nom. Évalué à 4.

    Dire qu'à une époque, quand j'étais un jeunot à l'école, Free avait cette superbe aura de petite boîte moderne et active qui renversait les gros mammouths de l'époque. Maintenant c'est juste un des nouveaux mammouths qui fait pareil que les autres. Et les affaires scandaleuses les concernant se multiplient et se succèdent ces dernières années.

    Encore aujourd’hui Niel a une bonne image, c’était genre le « patron préféré des français » l’an dernier. Mais s’il était populaire à l’époque c’était par les résultats, et aussi parce qu’ils faisaient du dumping et avaient une politique assez agressive au niveau des prix. Mais le prendre pour un modèle de vertu, même à l’époque, faut pas déconner. Ça peut plaire à certains ce côté sulfureux d’ailleurs, la fin justifie les moyens tout ça. Mais
    ça rend pas très surprenant les scandales futurs. Perso j’ai jamais été un grand fan de Niel (je devrai penser à changer d’opérateur /o).

  • [^] # Re: Interopérabilité avec le Social Web ?

    Posté par  . En réponse au journal Construisez un web décentralisé avec Salut à Toi et XMPP !. Évalué à 3.

    Ok, peut être que la bonne approche c’est de tenter de communiquer directement avec ActivityPub pour avoir des infos ou collaborer, alors.

  • [^] # Re: Interopérabilité avec le Social Web ?

    Posté par  . En réponse au journal Construisez un web décentralisé avec Salut à Toi et XMPP !. Évalué à 3.

    Ça pose la question des relations entre XMPP et le w3c. Et euh, il y en a ? J’ai un peu l’impression que les deux s’ignorent royalement, et ça me semble un peu dommage.

    Il semble pourtant qu’XMPP soit un standard reconnu par l’IETF et que le principal donateur de l’IETF donne aussi pas mal au w3c si j’en crois Internet : https://www.quora.com/Whats-the-relationship-between-IETF-and-W3C (m’enfin c’était en 2011, je crois que le w3c a perdu de l’influence politique depuis).

    L’IETF ne s’assure pas d’une certaine cohérence entre les technos qu’elle promeut ?

  • [^] # Re: Linked Data (RDF)?

    Posté par  . En réponse à la dépêche Scrutari, moteur de recherche pour sites gentils. Évalué à 5.

    Wikipėdia en anglais
    year started : 1997

    Un des 《 Primer 》date de 2004 http://www.yoyodesign.org/doc/w3c/rdf-primer/ et fait refetence à des docs anterieurs.

    Oui ca existait dejà en 2008 donc 😉

    Mais c'était pas forcément populaire, du fait que c'etait initialement basé sur XML, que l'idée etait que les gens feraient pas le boulot alors que google etait efficace, ou que plus prosaiquement《 semantique, bullshit 》

  • [^] # Et les maths ?

    Posté par  . En réponse au journal Une CSS « froide » pour l'hiver : Steelblue. Évalué à 4.

    Un autre point dont je viens de m'apercevoir

    Ce qui est au dessus est une citation du post précédent

    Je testerai bien ce que ça donne avec \frac{1}{x} des maths en ligne.

    Et pourquoi pas avec

    une formule de maths un peu costaud, hors ligne ?

    et même encore des maths

    -- @
    --
    -- @since 4.8.0.0
    class Bifunctor p where
        {-# MINIMAL bimap | first, second #-}
    
        -- | Map over both arguments at the same time.
        --
        -- @'bimap' f g ≡ 'first' f '.' 'second' g@
        bimap :: (a -> b) -> (c -> d) -> p a c -> p b d
        bimap f g = first f . second g
    
        -- | Map covariantly over the first argument.
        --
        -- @'first' f ≡ 'bimap' f 'id'@
        first :: (a -> b) -> p a c -> p b c
        first f = bimap f id
    
        -- | Map covariantly over the second argument.
        --
        -- @'second' ≡ 'bimap' 'id'@
        second :: (b -> c) -> p a b -> p a c
        second = bimap id
    
    
    -- | @since 4.8.0.0
    instance Bifunctor (,) where
        bimap f g ~(a, b) = (f a, g b)
    
    -- | @since 4.8.0.0
    instance Bifunctor ((,,) x1) where
        bimap f g ~(x1, a, b) = (x1, f a, g b)
    
    -- | @since 4.8.0.0
    instance Bifunctor ((,,,) x1 x2) where
        bimap f g ~(x1, x2, a, b) = (x1, x2, f a, g b)
    
    -- | @since 4.8.0.0
    instance Bifunctor ((,,,,) x1 x2 x3) where
        bimap f g ~(x1, x2, x3, a, b) = (x1, x2, x3, f a, g b)
    
    -- | @since 4.8.0.0
    instance Bifunctor ((,,,,,) x1 x2 x3 x4) where
        bimap f g ~(x1, x2, x3, x4, a, b) = (x1, x2, x3, x4, f a, g b)
    
    -- | @since 4.8.0.0
    instance Bifunctor ((,,,,,,) x1 x2 x3 x4 x5) where
        bimap f g ~(x1, x2, x3, x4, x5, a, b) = (x1, x2, x3, x4, x5, f a, g b)
    
    
    -- | @since 4.8.0.0
    instance Bifunctor Either where
        bimap f _ (Left a) = Left (f a)
        bimap _ g (Right b) = Right (g b)
    
    -- | @since 4.8.0.0
    instance Bifunctor Const where
        bimap f _ (Const a) = Const (f a)
    
    -- | @since 4.9.0.0
    instance Bifunctor (K1 i) where
        bimap f _ (K1 c) = K1 (f c)
  • [^] # Re: Trucs qui vont pas

    Posté par  . En réponse au journal Une CSS « froide » pour l'hiver : Steelblue. Évalué à 4.

    Effectivement c’est plutôt à droite /o/

  • [^] # Re: Trucs qui vont pas

    Posté par  . En réponse au journal Une CSS « froide » pour l'hiver : Steelblue. Évalué à 4.

    Malheureusement non, le correcteur orthographique ne connaît pas le mot « digitalement » qui est un néologisme :) M’enfin je m’en suis accordé la licence.

  • # Trucs qui vont pas

    Posté par  . En réponse au journal Une CSS « froide » pour l'hiver : Steelblue. Évalué à 6.

    Hello, merci pour cette contribution ! Il y a des trucs sympas, même si je ne pense pas l’adopter, principalement à cause de la palette de couleur qui ne me plaît pas trop.

    Quelques ptits bugs (qui sont pas forcément spécifiques à cette CSS ci) :
    * la barre de navigation (nouveaux commentaires etc.) est trop transparente, du coup quand wa se superpose à du texte c’est complètement illisible.
    * elle disparaît quand la largeur du navigateur est petite, ça me pose perso problème.
    * l’indentation des longs threads est problématique en petite largeur, le texte finit par commencer à gauche du cadre des commentaires. C’est pas la seule CSS qui fait ça, mais certaines ont bien réussi à corriger le tir.

    (en passant, rien à voir avec cette CSS mais j’en profite : les boutons «<» et «>» pour naviguer dans les nouveaux commentaires sont trop petits dans certaines CSS pour être utilisé digitalement)

  • [^] # Re: Écran

    Posté par  . En réponse au journal Résolution pour 2018. Évalué à 7.

    c’est une tomate qui prend une résolution, et splash l’écran ?

  • [^] # Re: Écologie, écologie, ... Faut mesurer avant

    Posté par  . En réponse au journal De la difficulté de trouver un moteur de recherche pertinent pour un site institutionnel du libre. Évalué à 4.

    Sur le plan de la qualité des résultat, google va aussi calculer le ranking du résultat avec des informations que le moteur interne n’a pas (sauf s’il se démerde pour associer un rang régulièrement avec un service externe), genre la manière dont le reste du monde référence tes pages.

    Il risque donc fort d’être plus pertinent pour l’utilisateur.

    Ça me fait penser qu’on pourrait ptete penser à un service de récupération d’un « rang » des pages web qu’un site pourrait importer pour son moteur interne. Ça existe un moteur de recherche « libre » ou pas avec une API qui étant donné un lien quelconque te donne un score d’indexation ?