Les entrailles d’un interpréteur CSS très rapide : Quantum CSS (alias Stylo)

119
31
août
2017
Mozilla

Cet été, Lin Clark a publié un article assez détaillé sur le fonctionnement du nouvel interpréteur CSS qui sera utilisé par les futures versions de Firefox.

Comme l’article est assez détaillé et qu’il révèle ce qui fait la magie de Rust et du projet Quantum, nous avons décidé de vous proposer une traduction dans la suite de la dépêche.

Veuillez noter que l’article original est sous licence _Creative Common Attribution — Partage dans les mêmes conditions 3.0 non transposé, cette dépêche suit donc les mêmes règles.

Sommaire

Les entrailles d’un interpréteur CSS très rapide : Quantum CSS (alias Stylo), par Lin Clark

Vous avez sûrement entendu parler du projet Quantum… C’est une réécriture majeure des entrailles de Firefox pour le rendre rapide. Nous intégrons actuellement dans Firefox des parties de notre navigateur Web expérimental, Servo, et nous faisons d’importantes améliorations sur d’autres parties.

Le projet peut être illustré par le remplacement en vol des pièces d’un jet. Les changements se font sur place, pièce par pièce, pour que vous puissiez voir les résultats dans Firefox le plus tôt possible dès qu’une pièce est prête.

Projet Quantum illustré par un réacteur

Et le premier composant majeur de Servo — un nouveau moteur CSS appelé Quantum CSS (connu auparavant sous le nom de Stylo) — est maintenant en cours de test dans la version Nightly de Firefox. Vous pouvez vérifier que le nouveau moteur est activé chez vous : dans la page about:config, vérifiez que le paramètre layout.css.servo.enabled est à true.

Ce nouveau moteur rassemble les innovations de l’état de l’art de quatre navigateurs Web différents pour créer un super interpréteur CSS.

Quantum CSS est nourri par 4 navigateurs Web

Il profite des matériels modernes en parallélisant le travail à travers tous les cœurs de votre machine. Il peut donc fonctionner deux, quatre ou même dix‐huit fois plus rapidement.

En plus de cette amélioration, il combine l’état de l’art des optimisations utilisées par les autres navigateurs Web. Ainsi, même si la parallélisation n’est pas utilisée, il s’agira toujours d’un moteur CSS rapide.

Course de jets

Mais que fait un moteur CSS ? Commençons par inspecter le moteur CSS et comment il s’insère dans le reste du navigateur. Ensuite, nous verrons comment Quatum CSS fait pour tout accélérer.

Que fait un moteur CSS ?

Le moteur CSS est une partie du moteur de rendu du navigateur. Le moteur de rendu prend le code HTML et les fichiers CSS d’un site Web et les transforme en pixels sur l’écran.

Des fichiers aux pixels

Chaque navigateur Web a son propre moteur de rendu. Dans Chrome, il s’appelle Blink. Dans Edge, c’est EdgeHTML. Dans Safari, il s’agit de WebKit. Et dans Firefox, il s’appelle Gecko.

Pour passer des fichiers aux pixels, tous ces moteurs de rendu font essentiellement les mêmes étapes :

  1. Analyser les fichiers et les transformer en objets que le navigateur peut comprendre, dont le DOM. À cette étape, le DOM connaît déjà toute la structure de la page. Il sait tout sur les relations parents‐enfants entre les éléments. En revanche, il ne connaît pas l’aspect visuel de chacun de ces éléments. Analyser le code HTML et en créer un arbre DOM
  2. Comprendre comment les éléments devraient apparaître. Pour chaque nœud DOM, le moteur CSS recherche les règles CSS à appliquer. Ensuite, il retrouve la valeur de chacune des propriétés CSS pour ce nœud DOM. Styliser chaque nœud de l’arbre DOM en leur attachant le style calculé
  3. Mesurer les dimensions pour chaque nœud et leur emplacement sur l’écran. Des boîtes sont créées pour chaque chose qui peut être affichée à l’écran. Les boîtes ne représentent pas seulement les nœuds DOM, vous avez aussi des boîtes pour des choses à l’intérieur des nœuds DOM, comme des lignes de texte. Mesurer toutes les boîtes pour créer un arbre de frame
  4. Dessiner les différentes boîtes. Ça peut se passer sur plusieurs calques. Je me représente ça comme les anciennes animations peintes à la main, avec différents papiers calques superposés comme une peau d’oignon. Ça permet de modifier juste un calque sans avoir à tout redessiner. Dessiner chaque calque
  5. Prendre ces différents calques, appliquer les propriétés de composition — comme transform — et les transformer en image. C’est essentiellement comme prendre une photo des calques posés les uns sur les autres. Cette image est ensuite rendue sur l’écran. Rassembler les calques et prendre une photo

Ainsi, quand il commence à calculer les styles, le moteur CSS a deux outils à disposition :

  • un arbre DOM ;
  • une liste de règles de style.

Il parcourt tous les nœuds DOM, un par un, et pour chaque nœud il retrouve les styles associés. Durant ce processus, il donne au nœud DOM une valeur pour toutes les propriétés CSS, même si les feuilles de style ne déclarent pas de valeur pour certaines propriétés.

Je l’imagine comme une personne qui parcourt un formulaire et le remplit. Il a besoin de remplir un formulaire pour chacun des nœuds DOM. Et pour chacune des questions, il doit avoir une réponse.

Formulaire avec propriétés CSS sans valeurs

Pour le remplir, le moteur CSS a besoin de faire deux choses :

  • trouver quelles règles s’appliquent au nœud ­— c’est‐à‐dire faire correspondre les sélecteurs CSS aux nœuds DOM ;
  • remplir toutes les valeurs manquantes avec les valeurs du parent ou une valeur par défaut — c’est‐à‐dire cascader les styles.

Faire correspondre les sélecteurs CSS aux nœuds DOM

Durant cette étape, nous allons ajouter chaque règle qui correspond au nœud DOM dans une liste. Comme plusieurs règles peuvent correspondre, il pourrait y avoir plusieurs déclarations de valeur pour une même propriété.
Personne qui coche chaque règle CSS correspondante au nœud DOM

En plus des règles déclarées par le code du site, le navigateur ajoute lui‐même certaines CSS par défaut (appelées feuilles de style user agent).

Comment est‐ce que le moteur CSS peut choisir quelle valeur doit être utilisée avec ces multiples déclarations ?

C’est ici que le principe de la spécificité des déclarations CSS intervient. Le moteur CSS crée en gros une feuille de calcul avec pour chaque ligne une déclaration CSS. Ensuite, il ordonne les lignes selon différentes colonnes.
Déclarations dans un tableur

La règle CSS définie avec la plus grande spécificité gagne. Ainsi, depuis cette feuille de calcul, le moteur CSS est capable de remplir les valeurs dans le formulaire. Pour l’instant, il ne remplit que les valeurs déclarées explicitement par des règles du code CSS du site.
Formulaire avec quelques propriétés CSS remplies

Pour le reste, il va devoir utiliser la cascade.

La cascade de styles

Le principe de la cascade rend le code CSS plus facile à écrire et maintenir. Grâce à la cascade, vous pouvez paramétrer la propriété color une fois sur le corps de la page <body/> et vous savez que le texte des éléments <p/>, <span/> et <li/> utilisera la même couleur (à moins de faîre une règle plus précise qui remplacera cette valeur).

Pour arriver à ce résultat, le moteur CSS regarde tous les blancs qui restent dans le formulaire. Si une propriété hérite par défaut de la valeur de l’élément parent, alors le moteur CSS remonte l’arbre DOM et regarde si le parent a une valeur. Si aucune valeur n’est déclarée pour le parent ou si une propriété n’hérite pas, il utilise la valeur par défaut.
Formulaire avec toutes les propriétés CSS remplies

Maintenant tous les styles ont été calculés pour ce nœud DOM.

Quelques précisions : le partage des structures de style

Le formulaire que je vous ai montré est une simplification. Le standard CSS a des centaines de propriétés. Si le moteur CSS tenait pour chaque nœud DOM la liste de chaque propriété avec une valeur, il serait rapidement à court de mémoire.

Ainsi, au lieu de tenir de tels formulaires, les moteurs utilisent généralement ce qu’on appelle le partage des structures de style. Ils enregistrent les données qui vont habituellement ensemble (comme toutes les propriétés de police d’écriture) dans un même objet appelé structure de style. Ensuite, plutôt que d’avoir toutes les propriétés dans un même objet pour un nœud, l’objet contenant le style calculé du nœud est un ensemble de pointeurs. Pour chaque catégorie de propriétés, il y a un pointeur vers une structure de style qui a les bonnes valeurs pour ce nœud DOM.
Parties de formulaires retirées dans des objets séparés

Cette technique permet à la fois de réduire l’espace mémoire et le temps de traitement nécessaire. Tous les nœuds qui ont des propriétés proches (comme les jumeaux) peuvent simplement pointer vers les mêmes structures pour les propriétés partagées. Et comme beaucoup de propriétés sont héritées, un ancêtre peut partager une structure avec tous ses descendants qui n’ont pas de déclaration de valeur plus spécifique.

Maintenant, comment peut‐on faire tout ça rapidement ?

Voici à quoi ressemblent les calculs de style si vous ne les avez pas optimisés.
Les étapes de calcul de style CSS : connexion des sélecteurs, ordonnancement par spécificité et calcul des valeurs de propriété

Il y a beaucoup de travail à exécuter ici. Et pas seulement au premier chargement de la page. Le travail doit être refait encore et encore tant que l’utilisateur interagit avec la page, en passant la souris par‐dessus des éléments (hover) ou en modifiant le DOM, déclenchant à nouveau le calcul des styles.
Création initiale de style et recréation pour le recouvrement de la souris, l’ajout de nœud DOM, etc

Ainsi, le calcul des styles CSS est un très bon candidat pour l’optimisation et les navigateurs ont testé différentes stratégies pour l’optimiser durant ces vingt dernières années. Ce que Quantum CSS fait est de prendre le meilleur des stratégies des différents moteurs, de les combiner et de créer un nouveau moteur très rapide.

Examinons donc en détail comment faire fonctionner ensemble ces stratégies.

Tout faire en parallèle

Le projet Servo (d’où vient le moteur Quantum CSS) est un navigateur expérimental qui essaie de paralléliser toutes les différentes parties de la création de rendu d’une page Web. Qu’est‐ce que ça signifie ?

Un ordinateur ressemble à un cerveau. Il y a une partie qui pense (l’ALU). Très proche de celle‐ci, il y a une mémoire à court terme (les registres). Ces parties rassemblées forment le processeur (CPU). Ensuite, il y a la mémoire à long terme, la mémoire vive.
CPU avec ALU (la partie qui fait le job) et les registres (mémoire à court terme)

Les premiers ordinateurs ne pouvaient penser qu’à une chose à la fois en utilisant ce CPU. Mais ces dernières années, les CPU ont évolué pour avoir plusieurs ALU et registres, regroupés en cœurs. C’est‐à‐dire que le CPU peut penser à plusieurs choses en même temps ­— en parallèle.
Processeur avec plusieurs cœurs contenant chacun des ALU et des registres

Quantum CSS utilise cette fonctionnalité récente sur les ordinateurs en partageant le calcul des styles pour les différents nœuds DOM à travers les différents cœurs.

Ça paraît être facile à faire… Simplement partager les branches de l’arbre DOM et les envoyer aux différents cœurs. C’est en réalité beaucoup plus difficile, et ce pour plusieurs raisons. Une de ces raisons est que l’arbre DOM est souvent déséquilibré. Ainsi, un cœur aura beaucoup plus de travail que les autres.
Arbre DOM déséquilibré qui sera partagé non équitablement entre plusieurs cœurs

Pour répartir le travail plus équitablement, Quantum CSS utilise une technique nommée le vol de travail. Quand un nœud DOM est en train d’être analysé, le code reprend ses enfants directs et les partage en une ou plusieurs « unités de travail ». Ces unités de travail sont mises dans une queue.
Les cœurs segmentent leur travail en unités de travail

Quand un cœur finit le travail de sa queue, il regarde la queue des autres pour trouver plus de travail à faire. Ainsi, nous pouvons séparer équitablement le travail sans perdre du temps pour traverser l’arbre et chercher comment l’équilibrer à l’avance.
Les cœurs qui ont terminé leur travail volent celui du cœur avec le plus de job

Dans la plupart des navigateurs, il serait très difficile de bien le faire. Le parallélisme est un problème connu pour être difficile et le moteur CSS est très complexe. Il s’insère aussi entre les deux autres parties les plus complexes d’un moteur de rendu ­— le DOM et l’affichage. Ainsi, il est très facile de créer des bogues et, quand le parallélisme engendre des bogues, qui sont très difficiles à résoudre, ils sont appelés « courses de données » (data races). J’approfondis les explications sur ce type de problèmes dans un autre article.

N. D. M. : voir cette discussion pour plus de détails sur les différences entre data race (« course de données ») et race condition (« concurrence critique » ou « situation de compétition »).

Quand vous acceptez des contributions de centaines ou de milliers d’ingénieurs, comment pouvez‐vous créer un programme parallélisé sans être effrayé ? C’est pour ça que nous avons Rust.
Logo Rust

Avec Rust, vous pouvez vérifier statiquement que vous n’aurez pas de courses de données. C’est‐à‐dire que vous empêchez l’apparition de bogues difficiles à résoudre, simplement en vous empêchant de les créer dans votre code dès le début. Le compilateur ne vous laissera pas faire. Je suis en train d’écrire d’autres articles à ce sujet. Pour l’instant, vous pouvez voir cette vidéo d’introduction au sujet du parallélisme dans Rust ou celle‐ci, qui est une discussion plus détaillée sur le vol de travail.

Avec tout ceci, le calcul des styles CSS évolue de ce que nous appelions « un difficile problème de parallélisme » à « de très petits problèmes bloquants pour une exécution en parallèle efficace ». C’est‐à‐dire que nous pouvons nous rapprocher d’une accélération linéaire en termes de vitesse. Si vous avez quatre cœurs dans votre machine, alors ça pourra s’exécuter presque quatre fois plus vite.

Accélérer les recalculs de style avec l’arbre des règles

Pour chaque nœud DOM, le moteur CSS doit traverser toutes les règles pour faire la correspondance des sélecteurs CSS. Pour la plupart des nœuds, les correspondances ne changeront pas souvent. Par exemple, si l’utilisateur passe la souris sur un parent, les règles qui y sont liées pourraient changer. Nous devons donc encore recalculer les styles pour ses descendants afin d’appliquer correctement les propriétés héritées. Mais les règles correspondant à ses descendants ne changeront probablement pas.

Ce serait mieux si nous pouvions simplement noter quelles règles correspondent à chaque descendant et ne pas avoir besoin de refaire le calcul des correspondances pour eux de nouveau… C’est ce que fait l’arbre des règles, emprunté du précédent moteur CSS de Firefox.

Le moteur CSS effectue la recherche des sélecteurs qui correspondent et ensuite les trie par spécificité. De ceci, il crée une liste chaînée de règles.

Cette liste sera ajoutée à l’arbre des règles.
Une chaîne de règle à ajouter à l’arbre des règles

Le moteur CSS essaie de conserver le plus petit nombre de branches dans l’arbre. Pour cela, il essaie de réutiliser une branche dès qu’il peut.

Si la plupart des sélecteurs dans une liste sont les mêmes que dans une branche existante, alors il suivra le même chemin. Mais il pourrait atteindre un point où la règle suivante dans la liste n’est pas dans cette branche de l’arbre. Seulement à ce point il ajoute une nouvelle branche.
Le dernier élément de la chaîne doit être ajouté à l’arbre

Le nœud DOM recevra un pointeur vers la règle qui a été insérée en dernier (dans cet exemple, la règle div#warning). C’est la plus spécifique.

Lors d’un recalcul de styles, le moteur fera une vérification rapide pour voir si le changement du parent modifie les règles qui correspondent aux enfants. Si les correspondances ne changent pas, alors pour tous les descendants, le moteur peut juste suivre le pointeur du nœud descendant pour obtenir la règle. De là, il peut remonter l’arbre jusqu’à la racine pour obtenir une liste complète de règles correspondantes, de la plus spécifique à la moins spécifique. Ça signifie qu’il peut complètement outrepasser les étapes de recherche de correspondance de sélecteurs et de leur tri.
Outrepasser la correspondance des sélecteurs et leur tri par spécificité

Ainsi, cela aide à réduire le travail nécessaire durant le recalcul de styles. Mais il y a encore beaucoup de travail pour le premier calcul de styles. Si vous avez 10 000 nœuds, vous devez toujours faire la recherche de correspondance des sélecteurs 10 000 fois. Mais il y a un autre moyen d’accélérer tout ceci.

Accélérer le rendu initial (et la cascade) avec le cache partagé des styles

Pensez à une page avec des milliers de nœuds. Beaucoup de ces nœuds correspondront aux mêmes règles. Par exemple, pensez à un long article Wikipédia ; les paragraphes dans le contenu principal devraient tous suivre exactement les mêmes règles et avoir donc les mêmes styles calculés.

S’il n’y avait pas d’optimisation, alors le moteur CSS devrait faire la correspondance des sélecteurs et calculer les styles pour chaque paragraphe individuellement. Mais s’il y avait un moyen pour prouver que les styles seront les mêmes d’un paragraphe à l’autre, alors le moteur ne devrait faire ce travail qu’une fois et il ferait pointer chaque nœud de paragraphe au même style calculé.

C’est ce que fait le cache partagé des styles, inspiré par Safari et Chrome. Après avoir traité un nœud, il met le style calculé dans le cache. Ensuite, avant de débuter le calcul de style du nœud suivant, il lance quelques vérifications pour voir s’il peut réutiliser les données du cache.

Ces vérifications sont :

  • est‐ce que les deux nœuds ont les mêmes identifiants, classes, etc. ? Si oui, alors ils vont correspondre aux même règles ;
  • pour ceux qui ne sont pas stylés depuis les sélecteurs — les styles inline par exemple —, est‐ce que les nœuds ont les mêmes valeurs ? Le cas échéant, les règles au‐dessus soit ne seront pas surchargées, soit elles seront surchargées, mais de la même manière ;
  • est‐ce que les deux parents pointent vers le même objet de styles calculés ? Si oui, alors les valeurs héritées seront identiques.

Les styles calculés sont partagés par leurs parentées et on leur demande si un cousin peut être paragé. Réponse : oui

Ces vérifications ont été utilisées dès le début des premiers caches de styles partagés. Mais il y a beaucoup d’autres petits cas où les styles pourraient ne pas correspondre. Par exemple, si une règle CSS utilise le sélecteur :first-child, alors deux paragraphes ne pourraient pas correspondre, même quand les vérifications ci‐dessus suggèrent que oui.

Dans WebKit et Blink, le cache partagé de styles est abandonné dans ces cas et le cache n’est pas utilisé. Comme de plus en plus de sites utilisent ces sélecteurs modernes, l’optimisation a été de moins en moins utile, à tel point que l’équipe Blink l’a récemment enlevée. Mais il s’avère qu’il y a un moyen d’utiliser le cache de styles partagés avec ces changements.

Dans Quantum CSS, nous rassemblons tous ces sélecteurs bizarres et vérifions s’ils s’appliquent au nœud DOM. Ensuite, nous stockons les réponses avec des uns et des zéros. Si les deux éléments ont le même nombre de uns et de zéros, nous savons qu’ils correspondent effectivement.
Un tableau de scores montrant les zéros et uns, chaque colonne est nommée avec des sélecteurs comme « :first-child »

Si un nœud DOM peut partager des styles qui ont déjà été calculés, vous pouvez passer outre presque tout le travail. Comme les pages ont souvent beaucoup de nœuds DOM avec les mêmes styles, le cache de styles partagés peut économiser beaucoup de mémoire et vraiment accélérer les choses.

Livraison de tout le travail

Conclusion

C’est le premier grand transfert de technologie de Servo vers Firefox. Durant ce chemin, nous avons beaucoup appris sur la manière d’apporter du code moderne et performant écrit en Rust dans le cœur de Firefox.

Nous sommes vraiment enthousiastes d’avoir rendu disponible cette grosse pièce du projet Quantum aux utilisateurs pour qu’ils l’expérimentent directement. Nous sommes très heureux de vous laisser l’essayer et, si vous rencontrez le moindre problème, faites‐le nous savoir.

  • # Belle promesse

    Posté par (page perso) . Évalué à 7.

    L'article omet juste d'évaluer le poids des CSS dans le calcul d'une page. Quelqu'un aurait une idée de combien le rendu global d'une page est accéléré avec Stylo?

    ⚓ À g'Auch TOUTE! http://afdgauch.online.fr

    • [^] # Re: Belle promesse

      Posté par . Évalué à 7.

      Et aussi une petite comparaison de perf avec «l'avant» et les concurrents

    • [^] # Re: Belle promesse

      Posté par (page perso) . Évalué à 5.

      L'article était déjà bien assez long pour ne pas y inclure un benchmark :D

      Je ne sais pas si des benchmarks sont déjà sorti, mais tu peux déjà tester toi-même le nouveau moteur en installant Firefox Nightly comme écrit dans les premiers paragraphes.

      • [^] # Re: Belle promesse

        Posté par . Évalué à 1.

        Au passage, dans firefox 55, about:config contient déjà cette option pour servo, à false par défaut. m'enfin, tout est déjà rapide chez moi sur la 55. Je suis dans le cas de ceux qui utilisent des 100aines d'onglets et firefox 55 a été du pain béni pour moi sur ce point, et je retrouve la fluidité d’antan sur les autres points (très notable dans les glissé/déposé des onglets vers les signets. Il y avait parfois du retard qui pouvait approcher de la seconde, il n'y en a plus aucun. Testé sur un ordi sous Intel core i7 et un autre avec un processeur ARMv7 RK3288.

        Il reste un bug (ancien) sur cette version, après avoir utilisé pas mal d'onglets parmi mes centaines. quand je tape une url dans la barre dédiée, je n'ai plus de suggestion depuis mon historique (je désactive généralement la recherche sur le net pour que le moteur de recherche ne log pas tout ce que je tape). (ça fait 1 ou 2 ans que je me dit qu'il faut que je fasse un rapport de bug).

    • [^] # Re: Belle promesse

      Posté par (page perso) . Évalué à 10.

      Je ne connais pas de benchmarks comparatifs de Stylo ou même de Quantum, mais ce que je peux dire après être passé de Firefox 55 à la nightly, c'est que c'est absolument incomparable au niveau performance.
      Cette nightly est une véritable bombe, à un point qu'elle arrive à me faire faire une croix (temporaire) sur beaucoup de mes extensions devenues incompatibles.

      • [^] # Re: Belle promesse

        Posté par (page perso) . Évalué à 4.

        Tu peux vérifier que ce soit bien dû à cela (ou plutôt quelle part) en désactivant la fonctionnalité dans about:config. Il y'a beaucoup d'efforts ces derniers temps autour des perfs, entre autre une diminution importante de la consommation mémoire (par exemple https://metafluff.com/2017/07/21/i-am-a-tab-hoarder/)

      • [^] # Re: Belle promesse

        Posté par (page perso) . Évalué à 10.

        Si tu as beaucoup d'extensions, le gain de perf peut venir en partie de la croix faite dessus…

        • [^] # Re: Belle promesse

          Posté par . Évalué à 1.

          C'est un peu vrai mais l'apport de la Nightly par rapport à Firefox 55 nu est Substantiel.

        • [^] # Re: Belle promesse

          Posté par (page perso) . Évalué à 4. Dernière modification le 01/09/17 à 11:48.

          J'hésite à décrire mon expérience individuel ici car je ne suis pas certain de la pertinence du lieu, mais je rencontre de gros problèmes de ralentissement avec la 55 même sans absolument aucune extension. Juste 7 ou 8 onglets avec certes 1 ou 2 applications un peu gourmandes en javascript.

          Là où ça passe comme une lettre à la poste avec chromium (60 onglets en général), Firefox 55 se traîne et devient parfois inutilisable sur mon laptop…

          Tout cela disparaît avec la nightly. Alors effectivement, je viens de faire le test en désactivant Servo, et la nightly semble fonctionner également parfaitement bien, donc c'est probablement pas lié aux améliorations intrinsèques à Stylo (qui doivent se percevoir à mon avis dans un contexte beaucoup plus chargé en onglets), mais juste aux autres amélios de la 56 et la 57 ou bien mon environnement local (machine, os, etc) qui entrave le bon fonctionnement de la 55.

          • [^] # Re: Belle promesse

            Posté par . Évalué à 3.

            Je confirme que depuis quelques temps Firefox n'est plus que l'ombre de ce qu'il était, en particulier lorsque des onglets de sites google comme youtube, gmail, docs sont épinglés.

            Et comme Google n'arrête pas de faire de la pub tous azimuts pour son navigateur chrome soit disant mieux optimisé dés qu'il détecte qu'on utilise Firefox, et qu'effectivement sous Chrome il n'y a pas de soucis, j'en suis arrivé au point où je soupçonne Google de faire ramer Firefox exprès et ça m'agace.

  • # Coquilles

    Posté par . Évalué à 2.

    "il s'insert" (2 occurrences) => il s'insère http://www.wordreference.com/conj/FRverbs.aspx?v=s%27ins%c3%a9rer

    "à besoin" => "a besoin"

    "en détails" => "en détail" https://french.stackexchange.com/questions/19002/doit-on-%c3%a9crire-en-d%c3%a9tail-ou-en-d%c3%a9tails

    "de très petits problèmes bloquant" => "de très petits problèmes bloquants" http://fr.lettres.langue.francaise.narkive.com/k8MA5eKd/criteres-bloquant-ou-criteres-bloquants

    • [^] # Re: Coquilles

      Posté par (page perso) . Évalué à 4.

      Corrigé, merci.

      • [^] # Re: Coquilles

        Posté par . Évalué à 1. Dernière modification le 01/09/17 à 00:49.

        [ question de licence ]

        Dans l'idée de faire respecter les souhaits de l'auteur originel, je pose la question suivante : est-ce correct de publier un contenu réclamant un partage à l'identique en incrémentant le numéro de version de la licence ?

        Car la traduction publiée ici l'est sous la licence CC BY SA 4.0, or l'original est déclaré (en tête de la présente traduction) être publié sous licence CC BY SA 3.0 (j'ai cherché en vain à le vérifier à la source : dans l'en-tête, à la signature en fin d'article, dans le corps du texte).

        J'ai comparé les deux pages suivantes et elles sont identiques (au numéro de version de la licence près) :

        Cependant, en tête de chacune de ces deux pages, il y a la mention suivante : « C'est un résumé (et non pas un substitut) de la licence. Avertissement ». Le mot licence est un lien qui mène à un contenu détaillé. J'avoue que je n'ai pas lu les deux versions de la licence, qui sont des textes assez longs… d'où ma question.

        • [^] # Re: Coquilles

          Posté par (page perso) . Évalué à 5.

          Hello,

          Note que dans le 3ème paragraphe de l'introduction de la dépêche, nous avons inclus le texte qui mentionne bien la licences CC BY SA 3.0 avec le lien vers la bonne version résumée (j'ai trouvé cette licence dans le pied de page du site web contenant l'article original).

          Le lien que tu pointes est celui ajouté automatiquement par LinuxFR sous le titre de la dépêche.
          Dans l'espace de rédaction, je n'ai pas vu d'option pour désactiver cette licence automatique.

          Est-ce que c'est possible de mettre à jour son lien ou on n'a que le texte qui peut le surpasser ?

        • [^] # Re: Coquilles

          Posté par (page perso) . Évalué à 7. Dernière modification le 01/09/17 à 08:39.

          La licence vient de :
          "Veuillez noter que l'article original est sous licence Creative Common Attribution - Partage dans les Mêmes Conditions 3.0 non transposé, cette dépêche suit donc les mêmes règles."

          Le "4.0" du lien au dessus est un problème technique du site qui ne donne pas le choix de version, mais à mon avis n'importe quelle personne "normale" qui lit la dépêche comprend que c'est de 3.0.

          J'avoue que je n'ai pas lu les deux versions de la licence

          Dommage, tu y trouverais pas exemple "You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License (…)" donc la licence mise par le site semble bien compatible.

          (à ma connaissance c'est arrivé avec la version 3 des CC, et ça doit bien aider pour le futur pour ne pas se prendre la tête avec des incompatibilités idiotes)

          edit : grillé pendant la rédaction :)

          • [^] # Re: Coquilles

            Posté par . Évalué à -4.

            Bien joué !

          • [^] # Re: Coquilles

            Posté par (page perso) . Évalué à 5.

            (à ma connaissance c'est arrivé avec la version 3 des CC, et ça doit bien aider pour le futur pour ne pas se prendre la tête avec des incompatibilités idiotes)

            c'est déjà dans la CC-by-sa 2.0 https://creativecommons.org/licenses/by-sa/2.0/legalcode

            • voir §4.b
            • You may distribute, publicly display, publicly perform, or publicly digitally perform a Derivative Work only under the terms of this License, a later version of this License with the same License Elements as this License, or a Creative Commons iCommons license that contains the same License Elements as this License (e.g. Attribution-ShareAlike 2.0 Japan).

            un peu comme pour la GPL où c'est la GPL-2.0 qui inclut par défaut le GPL-2 + (sauf quand il est expressément retiré comme pour le noyau Linux…)

            • [^] # Re: Coquilles

              Posté par (page perso) . Évalué à 2.

              un peu comme pour la GPL où c'est la GPL-2.0 qui inclut par défaut le GPL-2 + (sauf quand il est expressément retiré comme pour le noyau Linux…)

              Pas exactement. La GPL 2.0 elle-même ne dit rien là-dessus. Cependant, le texte que la FSF propose d'utiliser pour choisir la GPL indique "version 2 ou n'importe quelle version ultérieure". Précisément cela apparaît dans "How to Apply These Terms to Your New Programs", juste après la fin de la license (END OF TERMS AND CONDITIONS) ici: https://www.gnu.org/licenses/old-licenses/gpl-2.0.fr.html

              Dans le texte de la licence il est bien précisé que ce changement de version n'est possible que si c'est spécifié explicitement de cette façon.

      • [^] # Re: Coquilles

        Posté par . Évalué à 8.

        A)

        Vous avez sûrement entendu parlé

        --> parler

        B)

        quatre navigateurs web différent

        --> différents

        C)

        Je l'imagine comme une personne qui traverse un formulaire et le remplit.

        --> "qui parcourt un formulaire" semble plus adapté

        D)

        Si une propriété hérite par défaut la valeur de l'élément parent

        --> hérite par défaut de la valeur de l'élément parent

        E)

        quand le parallélisme engendre des bugs, qui sont très difficiles à résoudre, ils sont appelés courses de données (data races)

        1) Par défaut, j'aurais dit que "data race" renvoie à "race condition" qui se traduit typiquement par Situation de compétition, ou autre expressions similaires cf. Situation de compétition dont je cite l'intro :

        Une situation de compétition (ou situation de concurrence, accès concurrent, concurrence critique, course critique, séquencement critique ; race condition en anglais, littéralement « situation de course »), est un défaut dans un système caractérisé par un résultat différent selon l'ordre dans lequel agissent les acteurs du système.

        2) l'auteur précise :

        J'approfondis les explications sur ce type de problèmes dans un autre article.

        Or dans cet autre article, il n'emploie pas une seule fois l'expression "data race" mais systématiquement "race condition", y compris dans le titre de l'article et dans l'URL !

        3) en cherchant "data race" dans gogol, en plus des entrées « Situation de compétition — Wikipédia » et son équivalent anglais « Race condition - Wikipedia » (en 2e et 3e places respectivement), j'obtiens en 4e et 5e place :

        Ces deux pages détaillent la différence entre "data race" et "race condition". Voici un extrait significatif (en anglais, je m'abstiens de traduire) tiré du début de l'article de l'avant dernier lien cité, c'est à dire de la question traitée sur stackverflow.com :

        No, they are not the same thing. They are not a subset of one another. They are also neither the necessary, nor the sufficient condition for one another.

        The definition of a data race is pretty clear, and therefore, its discovery can be automated. A data race occurs when 2 instructions from different threads access the same memory location, at least one of these accesses is a write and there is no synchronization that is mandating any particular order among these accesses.

        A race condition is a semantic error. It is a flaw that occurs in the timing or the ordering of events that leads to erroneous program behavior. Many race conditions can be caused by data races, but this is not necessary.

        Par ailleurs, si on cherche l'expression "data race" dans l'entrée « Race condition - Wikipedia », on trouve seulement deux occurrences, toutes deux dans la même phrase, à savoir :

        The memory model defined in the C11 and C++11 standards uses the term "data race" for a critical race condition caused by concurrent reads and writes of a shared memory location. A C or C++ program containing a data race has undefined behavior.

        4) Ma conclusion intermédiaire : puisque l'auteur parle de bugs très difficiles à résoudre, il ne s'agit pas de "data races", qui eux peuvent être détectés automatiquement, mais bien de "race conditions" qui sont d'ailleurs traités dans son autre article.

        Ainsi, je pense qu'il convient d'utiliser une des expressions proposées par Wikipédia pour "race condition" (je mets celle qui me semble la plus explicite en gras) :

        • situation de compétition
        • situation de concurrence
        • accès concurrent
        • concurrence critique
        • course critique
        • séquencement critique

        5) Un problème apparaît, du fait que l'expression "data race" est à nouveau utilisée par l'auteur quelques lignes plus bas, mais cette fois il est question explicitement de détection automatique (par analyse statique avec Rust), je cite :

        Avec Rust, vous pouvez vérifier statiquement que vous n'aurez pas de courses de données.

        6) Ma Conclusion terminale : euh… héhé… bon courage pour faire le bon choix en restant clair pour les lecteurs. Je dirais ceci :

        • si vous respectez les choix de l'auteur initial, gardez "courses de données" dans les deux cas, mais assumez pour la première occurrence ce qui semble être une incohérence de sa part relativement à son autre article (qu'il cite lui-même) et le fait que ce n'est pas un bug très difficile à résoudre (d'ailleurs il le dit lui-même à la deuxième occurrence).
        • si vous voulez gagner en justesse, assumez d'utiliser une expression comme "concurrence critique" à la première occurrence (en notant l'erreur de l'auteur et en renvoyant à cette discussion si besoin), tout en éclairant le lecteur à l'occasion de la deuxième occurrence, par exemple, en indiquant qu'une "data race" est une forme de bug, analysable statiquement, qui pourrait mener à une "concurrence critique"

        7) En conséquence, voici mes propositions de correction (je fais le second choix proposé ci-avant) :

        a) pour la portion de phrase pointée en tête de la présente section E) — je la rappelle :

        quand le parallélisme engendre des bugs, qui sont très difficiles à résoudre, ils sont appelés courses de données (data races)

        Je propose la nouvelle formule suivante :

        quand le parallélisme engendre des bugs, qui sont très difficiles à résoudre, ils sont appelés concurrences critiques — alias situations de compétition ou « race condition » en anglais — [NDR : l'auteur utilise ici par mégarde l'expression « data races », traduisible littéralement par « courses de données », cf. l'explication donnée sur Stackoverflow.com, en anglais, pour comprendre la différence : multithreading - Are "data races" and "race condition" actually the …]

        b) pour la phrase comportant la deuxième occurrence de "data races", voici :

        Je rappelle la phrase en question :

        Avec Rust, vous pouvez vérifier statiquement que vous n'aurez pas de courses de données.

        Voici ma proposition :

        Avec Rust, vous pouvez vérifier statiquement que vous n'aurez pas de courses de données [NDR : une course de données (« data race » en anglais) apparaît lorsque deux instructions de différents threads accèdent au même emplacement mémoire, au moins une des deux instructions étant une écriture, et sans synchronisation impliquant un ordre particulier parmi ces accès — beaucoup de situations de concurrences critiques peuvent être causées par des courses de données, mais ce n'est pas nécessairement le cas]

        F)

        c'est ce que l'arbre des règles — emprunté du précédent moteur CSS de Firefox — fait

        Je propose une formule allégée :

        c'est ce que fait l'arbre des règles, emprunté du précédent moteur CSS de Firefox.

        G)

        C'est ce que le cache partagé des styles — inspiré par Safari et Chrome — fait.

        avec la même approche qu'au point précédent, je propose :

        C'est ce que fait le cache partagé des styles, inspiré par Safari et Chrome.

        Là, on est bon :)

        • [^] # Re: Coquilles

          Posté par (page perso) . Évalué à 5.

          Merci pour tes contributions, c'est dommage que tu ne puisses pas nous aider en amont :(

          Pour le «data race», le contexte de l'article est une vulgarisation de beaucoup d'aspects techniques. Je pense que dans ce cas, il est dommage d'y apporter de si grandes notes de traduction pour un point qui est clairement renvoyé à un autre article plus détaillé.

          • [^] # Re: Coquilles

            Posté par . Évalué à -5.

            Merci pour tes contributions, c'est dommage que tu ne puisses pas nous aider en amont :(

            En effet, ce serait appréciable que les corrections soient faites en amont pour profiter à tous les lecteurs. Je pourrais éventuellement aider en amont — ça m'arrive parfois — cependant :

            • il serait profitable que l'appel à la relecture soit explicite pour les dépêches qui vont passer en modération
              • J'imagine volontiers un affichage dans la colonne de gauche qui mette en évidence les dépêches qui sont estimées finalisées par l'auteur mais ne sont pas encore passées à l'étape de modération (alors rendues non accessibles pour les utilisateurs qui ne sont pas modérateurs).
              • Du coup, il conviendrait de rajouter une étape dans le flux des tâches, avec un bouton libellé du genre "appel à relecture finale", charge à l'auteur de déclencher le passage en modération lorsqu'il estime que suffisamment de relecture a été faite
            • avec mon karma très souvent négatif (lié à une kabbale, cf. (par exemple) ce commentaire au 3e point), je peux contribuer en modifiant le texte d'une dépêche en cours de réaction, mais je ne peux pas m'exprimer dans la tribune associée (ni aucune tribune, d'ailleurs, que ce soit la "tribune des rédacteurs" ou la célèbre 3bune, alias /board) et du coup la contribution est moins aisée. Je vois plusieurs solutions à ce problème :
              • le verrouillage du karma en positif pour les cibles de kabbale comme moi
              • le déblocage de l'impossibilité de contribuer dans les tribunes pour des comptes spécifiques qui sont en négatif comme le mien

            Pour le «data race», le contexte de l'article est une vulgarisation de beaucoup d'aspects techniques. Je pense que dans ce cas, il est dommage d'y apporter de si grandes notes de traduction pour un point qui est clairement renvoyé à un autre article plus détaillé.

            Je pense que ma proposition de corrections respecte le principe de la vulgarisation (je ne rentre pas trop dans les détails et renvoie à la source Stackoverflow.com pour les avoir), tout en corrigeant l'article originel qui semble clairement erroné sur ce point à la première occurrence de « data race ».

            Le texte NDR peut aussi être allégé, par exemple :

            a)

            Texte originel de la première occurrence :

            quand le parallélisme engendre des bugs, qui sont très difficiles à résoudre, ils sont appelés courses de données (data races)

            Proposition de correction allégée :

            quand le parallélisme engendre des bugs, qui sont très difficiles à résoudre, ils sont appelés concurrences critiques — alias situations de compétition, en anglais « race condition » [NDR : l'auteur utilise ici par mégarde l'expression « data races » (courses de données), cf. l'explication en anglais donnée sur Stackoverflow.com pour comprendre la différence].

            b)

            Texte originel de la deuxième occurrence :

            Avec Rust, vous pouvez vérifier statiquement que vous n'aurez pas de courses de données.

            Proposition de correction allégée :

            Avec Rust, vous pouvez vérifier statiquement que vous n'aurez pas de courses de données [NDR : une course de données apparaît lorsque deux instructions de différents threads (dont au moins une écriture) accèdent au même emplacement mémoire, sans synchronisation impliquant un ordre particulier parmi ces accès].

            Notes :

            • ici j'ai oblitéré le fait suivant : beaucoup de situations de concurrences critiques peuvent être causées par des courses de données, mais ce n'est pas nécessairement le cas. Je trouve dommage d'oblitérer ce passage, car il permet au lecteur non anglophone de mieux comprendre la distinction avec la première occurrence erronée.
            • il est même tout à fait possible d'oblitérer complètement cette NDR, charge au lecteur connaissant l'anglais de lire l'explication sur Stackoverflow.com citée préalablement — auquel cas, le texte originel de la deuxième occurrence reste inchangé.
            • [^] # Re: Coquilles

              Posté par (page perso) . Évalué à 7.

              avec mon karma très souvent négatif (lié à une kabbale

              Ton karma est négatif à cause de tes interventions ineptes sur l'informatique, de ta logorhée assez délirante sur Zino et de tes propos d'extrême-droite. Tu en es à ton septième compte (au moins) ouvert sur linuxfr après fermeture des autres par les modérateurs ou toi-même.
              Tu tentes de te refaire une santé en corrigeant des fautes d'orthographe et en t'acharnant sur des détails sensibles par ici (les questions de licences). De même, tu adoptes de temps en temps les tics de langage de la tribune.
              Ça ne change rien au fait que tu connais très mal Linux et le logiciel libre.

              "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

              • [^] # Re: Coquilles

                Posté par . Évalué à -10.

                Bien, je vais donc te faire plaisir ainsi qu'à quelques autres qui veulent mon départ depuis trèèèèès longtemps, avec beaucoup de mauvaise fois pour la plupart.

                Qu'il soit connu que je ne suis pas d'extrême droite ! Que ton attitude délétère serve au moins à réveiller quelques moutons sur l'amalgame quasi systématique entre {anti-sionisme | révisionnisme historique | critique de la franc-maçonnerie} et une quelconque extrême droite !

                Je salue chaleureusement les personnes qui ont apprécié mes contributions au fil des dix années passée et particulièrement celles et ceux qui l'ont manifesté.

                Bonne continuation.

              • [^] # Re: Coquilles

                Posté par . Évalué à 2. Dernière modification le 02/09/17 à 09:40.

                Ton karma est négatif à cause de tes interventions ineptes sur l'informatique, de ta logorhée assez délirante sur Zino et de tes propos d'extrême-droite.

                Il souleve quand meme un vrai probleme (dans son commentaire en lien). Il est possible de moinser plein de messages sans les lire.

                mais ça n'a pas duré : bien que je n'ai posté aucun autre commentaire depuis le 24 août, un utilisateur malveillant à mon égard a pris soin de "moinser" de très nombreux anciens commentaires (je conclue ainsi, sinon je ne vois pas comment je serais passé de positif à -32 dans la nuit) ;

                Ce n'est plus l'expression de son avis sur un commentaire. Tout le monde peut devenir un censeur selon ses propres criteres plus ou moins naif sans devoir s'expliquer de rien ni a personne.

                • [^] # Re: Coquilles

                  Posté par (page perso) . Évalué à 7.

                  Il souleve quand meme un vrai probleme (dans son commentaire en lien). Il est possible de moinser plein de messages sans les lire.

                  Problème qui n'a rien à voir avec Linuxfr : il est possible de dire du mal d'un livre sans l'avoir lu, d'élire quelqu'un sans connaître son programme, d'écrire une dépêche sans connaître le sujet, etc. La technique ne peut résoudre un problème éthique et moral.

                  Quand au moinssage d'anciens commentaires on peut aussi bien y voir l'action de personnes étonnées par ses propos, qui ont voulu en savoir plus et qui sont donc parti chercher ses commentaires précédents.

                  "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

                  • [^] # Re: Coquilles

                    Posté par . Évalué à -7.

                    Problème qui n'a rien à voir avec Linuxfr : il est possible de dire du mal d'un livre sans l'avoir lu, d'élire quelqu'un sans connaître son programme, d'écrire une dépêche sans connaître le sujet, etc. La technique ne peut résoudre un problème éthique et moral.

                    Quand au moinssage d'anciens commentaires on peut aussi bien y voir l'action de personnes étonnées par ses propos, qui ont voulu en savoir plus et qui sont donc parti chercher ses commentaires précédents.

                    Tu fais semblant de ne pas comprendre. Ce n'est pas une bonne attitude de communication, tu sais.

                    • [^] # Re: Coquilles

                      Posté par (page perso) . Évalué à 5.

                      ???
                      Eh oh faut arrêter avec le mode "conspirateurs partout"! Si tu penses que je n'ai pas compris explique au lieu de penser que je le fais exprès.

                      "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

                      • [^] # Re: Coquilles

                        Posté par . Évalué à 3.

                        Il dit qu'il est possible d'aller moinsser des messages vieux de plusieurs semaines/mois.
                        Ce qui est vrai, dans une certaine mesure : si j'en crois ma rapide vérification empirique, je peux aller plusser/moinsser des commentaires d'un journal datant du 9 juin, mais pas ceux d'un autre journal datant du 23 mai.

                        • [^] # Re: Coquilles

                          Posté par (page perso) . Évalué à 6.

                          c'est limité à 3 mois, ce qui semble cohérent. Après, se plaindre de son karma et espionner ses propres notes relève àmha du complot, ça n'est pas si important que cela au jour le jour et ne va pas révolutionner votre vie…

                          • [^] # Re: Coquilles

                            Posté par (page perso) . Évalué à 10.

                            C'est du logiciel libre, le code est dispo et donc les conditions sont définies ainsi : un compte actif, qui ne soit pas celui qui a écrit le commentaire, un commentaire qui doit avoir moins de 3 mois, un compte ayant encore au moins une note à attribuer ou qui soit modérateur/admin, et un compte qui n'a pas déjà noté ce commentaire-là.

                              def votable_by?(account)
                                !deleted? && user_id != account.user_id    &&
                                    (Time.now - created_at) < 3.months     &&
                                    (account.nb_votes > 0 || account.amr?) &&
                                    !vote_by?(account.id)
                              end
                            • [^] # Re: Coquilles

                              Posté par . Évalué à 2.

                              Merci.
                              La flemme d'aller chercher dans le code de linuxfr…

                        • [^] # Re: Coquilles

                          Posté par (page perso) . Évalué à 4. Dernière modification le 02/09/17 à 16:54.

                          Ce qui est très bien. Comme dit Baud, c'est cohérent, le contenu n'étant pas périmé ou peut toujours réagir. Bien que modérateur, donc très assidu par ici, il y a plein de contenu intéressant que je rate et découvre au hasard d'une recherche.
                          (et merci pour l'explication, je n'avais effectivement pas compris que c'était la date ancienne qui posait problème)

                          "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

              • [^] # Re: Coquilles

                Posté par . Évalué à -4. Dernière modification le 04/09/17 à 11:40.

                @ Zero Heure
                Bon je le comprends. Avec la bande de t-d-c "commissaires du peuple" politisé sur ce site! (confère les menaces de "liste de moutons noirs" à une autre occasion)
                Je ne suis pas de droite et pas de gauche non plus, mais linuxfr.org est en train de devenir une feuille de choux avec des propos de plus en plus sectaire mené par une bande d'ignares. Et c'est récurrent maintenant.
                Au final, cette liste a de moins en moins d'intérêt. En tous cas rien a voir avec Linux ou le libre ou l'informatique.

                • [^] # Re: Coquilles

                  Posté par (page perso) . Évalué à 5.

                  C'est une tendance très générale d'oublier que toutes ces choses dépendent de nous. L'ambiance sur le site dépend de ceux qui la fond. Tu ne commente pas souvent, implique-toi, rédige des journaux, des dépêches, …

                  C'est comme en politique : on a trop souvent une attitude fataliste devant les décisions du gouvernement, avec l'impression qu'on ne peut pas influencer cette grosse machine. Or c'est faux, l'histoire le prouve amplement : manifs, syndicats, associations, … ont toujours influé les décisions. Par contre on ne le voit pas, le processus est long, les changements interviennent longtemps après.

                  "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

                • [^] # Re: Coquilles

                  Posté par (page perso) . Évalué à 4.

                  la bande de t-d-c "commissaires du peuple" politisé sur ce site

                  Je débarque totalement. Tu peux donner des exemples ?
                  Je n'ai aucun souvenir d'avoir lu quoi que ce soit qui me fasse penser à ça. Où alors mon seuil de détection est trop laxiste.

                  • [^] # Re: Coquilles

                    Posté par . Évalué à 3.

                    Deux qui me viennent en tête, le premier est un article sur un jeux ou le développement d'un jeu dont les images étaient trouvée sexiste. Un autre article parlant d'une personne décédée promettait de faire une liste de ceux qui n'allait pas dans son sens style le "mur des cons" qui avait défrayé la chronique en son temps dans les infos.
                    Deux exemples frappants.

                    Pour le reste, non effectivement je ne commente pas beaucoup, parce que je ne vois pas l'utilité de mettre mon grain de sel si je n'ai rien à dire ou rien a proposer de plus et que l'article est complet. Pas plus que je coche souvent les cases pertinents ou pas, encore moins d'aller me renseigner sur un de ceux qui s'expriment juste pour voir de quel bord ils sont. (exemple : cet article dans un commentaire un peu plus haut). Je me fous de savoir ce que les utilisateurs de site font dans leur vie et je me fous de savoir s'ils sont casher ou pas. La question ne se pose même pas. Il y a eu en son temps l'abominable étoile jaune et je ne vois pas pourquoi il y en aurait qui seraient d'autres couleurs aujourd'hui. C'est honteux!

                    Par contre, je trouve très bien le souci des corrections orthographiques. Lorsque l'ont vois des articles de journalistes mainstream pas fichu d'écrire une phrase sans 10 fautes ou avec des tournures de phrases qui ne veulent rien dire. Je pense que c'est une très bonne chose qui participe au sérieux d'un media.

            • [^] # Re: Coquilles

              Posté par (page perso) . Évalué à 4.

              Corrigé, merci.

  • # Super article!

    Posté par . Évalué à 10.

    C'est le genre de contenu que j'aimerais voir plus souvent sur LinuxFR.
    Technique détaillé et très bien expliqué.

    Merci pour la traduction!

    • [^] # Re: Super article!

      Posté par (page perso) . Évalué à 10.

      Pour voir plus souvent ce genre de contenu, il faut les écrire ou les traduire, ou encore faire des interviews. Lecteurs, à vous de jouer!

      "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

  • # La suite !

    Posté par (page perso) . Évalué à 7.

    Durant ce chemin, nous avons beaucoup appris sur la manière d'apporter du code moderne et performant écrit en Rust dans le cœur de Firefox

    Ça c'est super, ça veut dire que les prochaines intégrations Quantum pourraient ne pas prendre trop de temps (miam, miam) :)

  • # Republication de l'article et publicité

    Posté par . Évalué à 6.

    L'article a été republié sur le blog de Mozilla et un petit message pour l'annoncé est apparu sur la page d'accueil de nightly.

  • # CSS

    Posté par (page perso) . Évalué à 2.

    Ma CSS ne redimensionne pas les images… L'article est donc illisible :'(

    --> []

    • [^] # Re: CSS

      Posté par (page perso) . Évalué à 4.

      Clic-droit → ouvrir en navigation privée.

      « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

  • # Expression du Québec VS Expression de la France

    Posté par . Évalué à 5.

    il regarde la queue des autres pour trouver plus de travail à faire

    Bon vous allez me trouver enfantin, mais ce n'est pas grave! Dans le contexte de la phrase cité ci-dessus, au Québec, l'expression "queue" n'existe pas et on dit plutôt "file d'attente"! Cette phrase en joual québecois veux littéralement dire "il regarde la bizoune des autres pour trouver plus de travail à faire"!

    Très bonne article et en plus j'ai rit un bon coup!

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.