Journal Répliquer ses vidéos Peertube − premiers pas

12
13
juil.
2018

Sommaire

Bonjour nal, et bonjour à tou⋅te⋅s,

Tu connais Peertube, la super plateforme fédérée pour s'échanger des vidéos en (web)torrent. Si c'est pas le cas, je te renvoie à une dépêche parue récemment.

Une des questions qui secoue pas mal la communauté Peertube, c'est comment répliquer les vidéos de mon instance pour les seeder depuis un autre ordinateur ? Si les développeureuses de Peertube comptent intégrer un système de réplication à leur plateforme, ça fait pas de mal de bidouiller ça dans son coin en mode KISS en attendant.

La situation

Peertube diffuse ses vidéos en webtorrent, où l'instance Peertube est également annoncée dans le torrent comme "webseed", c'est à dire qu'elle peut streamer le contenu en HTTP(S) au client webtorrent si jamais le client ne supporte pas WebRTC.

Nous, de notre côté, on pourra pas offrir cette possibilité car il faudrait que le serveur modifie le fichier torrent pour nous enregistrer comme webseed. On se contentera donc de partager en webtorrent.

De son côté, Peertube propose des flux RSS, Atom et JSON pour suivre les dernières publications sur l'instance. Du coup on va pouvoir s'interfacer avec les outils de notre choix !

Trouver un client

Malheureusement, peu de clients Webtorrent existent à ce jour. La plupart des clients Bittorrent qu'on chérie ne supporte pas encore les webtorrents. Du coup, en attendant de trouver mieux, on va utiliser Webtorrent Desktop pour seeder les vidéos.

Webtorrent Desktop dispose d'ailleurs d'une option très pratique (et assez commune) pour automatiquement télécharger et partager les torrents qu'on ajoute dans un dossier. On va donc créer un dossier dédié, par exemple ~/seedbox.

Implémentation

Maintenant qu'on a un client équippé et configuré, il nous reste à écrire un programme pour télécharger régulièrement les torrents associés aux nouvelles vidéos sur notre instance Peertube préférée !

peertube-replication.sh

J'ai du coup créé un petit script en bash en une centaine de lignes. Il a pour dépendances :

  • bash ← j'ai pas testé avec d'autres shell mais je crois que j'utilise des idiosyncrasies bashistes (je débute en programmation shell)
  • curl ← pour récupérer les fichiers en HTTPS
  • jq ← pour extraire des informations du flux JSON
  • awk ← pour des manipulations de chaînes de caractères
  • oi.sh ← pour gérer les niveaux d'information (DEBUG, INFO, ERROR) et la colorisation des sorties

Installation

Sur Debian, apt install cron jq fera l'affaire. Ensuite, il faut rajouter peertube-replication.sh et oi.sh dans ton $PATH, c'est à dire dans la variable qui dit à ton shell où aller chercher les programmes. Sur Debian (et dérivées) tu pourras copier ça dans /usr/local/bin par exemple :

sudo cp oi.sh peertube-replication.sh /usr/local/bin && sudo chmod +x /usr/local/bin/*.sh

Utilisation

La syntaxe de peertube-replication.sh est très simple. Elle prend en premier paramètre l'adresse du flux JSON de ton instance Peertube, et en second paramètre le dossier dans lequel enregistrer les torrents et garder en mémoire la dernière vidéo qu'on connaît sur le serveur.

Par exemple, on peut faire:

peertube-replicate.sh "https://www.yiny.org/feeds/videos.json?sort=-publishedAt&filter=local" ~/seedbox/

Note: il est tout à fait possible de répliquer les vidéos de plusieurs instances dans le même dossier. En effet, la dernière vidéo connue de l'instance www.yiny.org est stockée dans le fichier ~/seedbox/www.yiny.org.latest. Pas de collisions en vue avec d'autres instances, donc (ouf).

Checker les nouveautés

On va maintenant voir comment configurer ton système pour checker automatiquement si des nouvelles vidéos ont été publiées. cron est un outil permettant de plannifier des tâches récurrentes sur ta machine.

Si le système est configuré pour (c'est le cas par défaut), chaque utilisateurice sur la machine a un fichier dans lequel iel peut enregistrer ses tâches récurrentes : c'est le crontab. Pour éditer ton fichier crontab, il y a la commande crontab -e.

Je vais pas faire un cours sur cron, parce que y'en a déjà plein des très biens (par exemple ici), mais voici un exemple pour checker l'apparition de nouvelles vidéos toutes les heures et enregistrer la sortie du programme dans un fichier de log :

0 * * * * /usr/local/bin/peertube-replication.sh "https://www.yiny.org/feeds/videos.json?sort=-publishedAt&filter=local" /home/yolo42/seedbox/ >> /home/yolo42/seedbox/peertube-replication.log

D'autres implémentations ?

Toutes les remarques sont bienvenues, mais je ne souhaite pas particulièrement recevoir de contributions extérieures sur peertube-replication.sh. Par contre, n'hésite pas à pomper le code (c'est du copyleft en GPL) pour en faire autre chose, ou à juste écrire ta solution dans ton coin pour la repartager avec tout le monde !

À quand une implémentation en Rust ? En BrainFuck ? En Haskell ? En Lisp ? Bientôt plus d'implémentations que TapTempo ? Bon ptet pas quand même !

Sinon si tu trouves d'autres clients compatibles webtorrents avec lesquels on peut s'interfacer ça m'intéresse grave. N'hésite pas à me dire en commentaire. Mon idéal serait un programme en ligne de commande avec un daemon, qu'on puisse déployer ça sans installer un environnement de bureau pour faire tourner les surcouches Electron de Webtorrent Desktop.

Algorithme

Si jamais tu veux faire une implémentation compatible, voici les grandes lignes :

  1. On checke qu'on a deux arguments ; sinon (ou si la personne le demande), on affiche l'aide
  2. Le premier argument est l'URL du flux (JSON/RSS/Atom) à checker, le second le dossier où stocker les données
  3. Checker le format de l'URL pour déterminer le type de flux (et où stocker sa dernière vidéo connue)
    1. Si le flux est un flux d'instance, on sauvegarde la dernière vidéo dans le fichier instance.tld
    2. Si le flux est un⋅e user, on sauvegarde dans @user@instance.tld (← pas encore implémenté)
  4. Vérifier qu'on a les droits en lecture et écriture sur le dossier
  5. Si cette information existe, récupérer la dernière vidéo connue localement
  6. Récupérer le flux distant
  7. Comparer les dernières vidéos (locale et distante) : si elles sont identiques, on n'a pas de vidéos à importer
  8. Pour chaque vidéo publiée après la dernière vidéo connue (dans l'ordre chronologique)
    1. Récupérer dans le flux l'URL correspondante
    2. Télécharger le torrent dans le dossier, sous le nom original du fichier (IDENTIFIANT-UNIQUE.torrent)
    3. Sauvegarder le nom de la vidéo comme dernière vidéo rencontrée pour ce flux

Limitations et améliorations

Webseed

On pourra pas faire webseed. Donc pour les clients qui ne supportent pas webrtc, c'est toujours l'instance peertube qui va balancer la sauce. Ça coûte cher en bande passante et surtout si t'es à l'autre bout du monde ça risque de moins bien marcher. Mais bon j'imagine que c'est mieux que pas de vidéo du tout :O

 Suppression des vidéos

Si une vidéo est supprimée sur le serveur, je ne connais pas de mécanisme pour être mis⋅e au courant. Peut-être y a-t-il un flux dans l'API de Peertube pour les dernières vidéos supprimées ?

Ça pose problème si tu répliques le contenu d'une instance publique et que tu te retrouves malgré toi à héberger du contenu pas cool (genre une vidéo de propagande pour l'armée ou un groupuscule fasciste). Du coup j'ai pas de solution à proposer à part de répliquer les vidéos d'instances à qui tu fais confiance.

Gérer les flux des utilisateurices

On pourrait répliquer également les flux d'un⋅e utilisateurice bien précis⋅e. Après tout, pourquoi répliquer toute une instance quand peut-être il n'y a qu'une personne qui nous intéresse dessus ?

Les adresses de flux des utilisateurices ressemblent beaucoup au flux de l'instance, mais elles comprennent un paramètre accountId. On pourrait passer un coup de regex sur l'URL fournie pour détecter s'il s'agit d'un flux d'instance, de user, ou bien à l'avenir peut-être d'une playlist ou d'un groupe.

Les flux utilisateurice pourraient ainsi être stockés dans le format @user@instance. C'est décrit dans l'algorithme, mais j'ai pas encore implémenté ça.

Quota

On devrait pouvoir configurer le programme pour limiter le stockage maximum. En cas de spam ou de grosse activité sur un serveur, ça ne devrait pas remplir tes partitions à 100%. Dans tous les cas j'espère que tu feras pas tourner ce petit script sur ta partition racine.

Il faudrait du coup enregistrer la taille de chaque flux en cumulant les informations individuelles sur chaque torrent fournies par l'API de Peertube. On pourrait ensuite paramétrer ça avec des variables d'environnement tels que REPLICATION_MAXSIZE=40G ou alors par flux REPLICATION_PERFLUX=5G.

Perso je pense pas implémenter ça. Ça me paraît trop chiant à faire pour mon utilisation précise. Après je t'encourage à développer ça dans ton coin et à partager ton code pour inspirer plus de monde :)

Conclusion

La fédération c'est chouette, mais avec la réplication c'est encore mieux. Vivent les projets libres et décentralisés ! Longue vie à Peertube et au fediverse ! Feu aux prisons (dorées ou pas) ! Mort à toutes les polices, du ouèbe et d'ailleurs !

  • # Mort à toutes les polices

    Posté par (page perso) . Évalué à 6 (+4/-0).

    Mort à toutes les polices, du ouèbe et d'ailleurs !

    Et pourtant il y a plein de polices utiles voire très jolies !

  • # Use case

    Posté par (page perso) . Évalué à 7 (+5/-0). Dernière modification le 13/07/18 à 21:35.

    Bon, c'est génial.

    Effectivement, après le succes (266%) du dernier financement, on attend tous une solution à ce problème, qui est tout sauf théorique.

    Toutes mes vidéos sont actuellement indisponibles ; elles sont listées sur tout le fediverse, mais l'instance où elle sont hébergées (apparemment, une trucbox dans un appart) est tombée, et son admin est en vacances :s pour un producteur, plusieurs semaines de silence au cœur de l'été - je suis en pleine pre-release - c'est comme regarder la mort dans les yeux ; j'ai réactivé youtube, mais bon, v'là l'bordel ; entre ça et Liberapay qui calanche, le libre pour les artistes, c'est pas du tout la lose :p

    Boah, on les aura, TKT

    • [^] # Re: Use case

      Posté par (page perso) . Évalué à 4 (+2/-0).

      Arf, j'ai oublié le lien du ticket.

      • [^] # Re: Use case

        Posté par (page perso) . Évalué à -2 (+1/-5). Dernière modification le 13/07/18 à 22:36.

        'tain c'est con tu vas te faire moinsser (à mort) à cause que ton texte (par ailleurs assez génial au niveau du vécu quoi, même les devs ont flashé dessus) n'est pas rédigé en français ISO900+, c'est marrant moi j'ai même pas remarqué à la première lecture, mais bon c'est pas une raison (suffisante) pour changer de langue, hein. Bande de sauvageons.

    • [^] # Choix de son instance

      Posté par (page perso) . Évalué à 3 (+4/-2).

      Toutes mes vidéos sont actuellement indisponibles ; elles sont listées sur tout le fediverse, mais l'instance où elle sont hébergées (apparemment, une trucbox dans un appart) est tombée, et son admin est en vacances :s

      L’intérêt de la fédération c’est justement de responsabiliser les utilisateurs : plutôt que de faire aveuglément confiance à un fournisseur de service unique (comme YouTube), tu as la possibilité de choisir l’entité qui hébergera ton contenu.

      Vu ce que tu racontes là, on dirait que tu ne t’es pas beaucoup (pas du tout ?) renseigné sur cette instance avant d’y publier. Quelques minutes de recherche d’une instance auraient pu t’éviter ce problème.

      De plus, pourquoi réactiver un compte YouTube quand tu pourrais simplement changer d’instance PeerTube ? C’est un autre intérêt de la fédération.

      • [^] # Re: Choix de son instance

        Posté par (page perso) . Évalué à 3 (+4/-3).

        L’intérêt de la fédération c’est justement de responsabiliser les utilisateurs : plutôt que de faire aveuglément confiance à un fournisseur de service unique (comme YouTube), tu as la possibilité de choisir l’entité qui hébergera ton contenu.

        Ah mince, j'ai merdé alors hein ? Je suis un irresponsable :p

        Vu ce que tu racontes là, on dirait que tu ne t’es pas beaucoup (pas du tout ?) renseigné sur cette instance avant d’y publier. Quelques minutes de recherche d’une instance auraient pu t’éviter ce problème.

        Merci papy, j'ai échangé des toots avec son admin, c'est mon pote maintenant, tu imagines vivre ce genre de trucs ensemble ? Je ne regrette pas particulièrement de lui avoir fait confiance, je trouve qu'il a bien réagi, shit happens. Où on en était ? Oui, donc, t'es dépendant de ton instance, dont t'as pas forcément le dernier audit sous les yeux, je crois que c'était ça le sujet.

        De plus, pourquoi réactiver un compte YouTube quand tu pourrais simplement changer d’instance PeerTube ? C’est un autre intérêt de la fédération.

        Vu ce que tu racontes, on dirait que tu ne t'es pas beaucoup (pas du tout ?) renseigné (c'est agaçant, hein? :p) sur Peertube et le fediverse, en l'état actuel des choses, non, on ne peut pas migrer 30+ vidéos comme ça d'une instance à l'autre, et c'est rien de le dire.

        • [^] # Re: Choix de son instance

          Posté par (page perso) . Évalué à 2 (+4/-3).

          j'ai échangé des toots avec son admin, c'est mon pote maintenant […] shit happens

          Et il ne t'a pas prévenu dès le départ que c'était hébergé sur "une Trucbox dans un appart" ? Si ton activité principale dépend de la fiabilité de l'hébergement de tes créations, je suis désolé mais je ne peux que maintenir que tu aurais dû commencer par mieux te renseigner. En dehors d'internet, tu ferais confiance au premier venu pour assurer un service critique à ton activité sans poser plus de questions ?

          sur Peertube et le fediverse, en l'état actuel des choses, non, on ne peut pas migrer 30+ vidéos comme ça d'une instance à l'autre

          C'est très difficile de renvoyer toi-même tes vidéos sur une autre instance depuis chez toi ? Je suis d'accord que la migration automatique entre instances en un clic est une fonctionnalité intéressante, mais c'est un peu gros de te prétendre complètement bloqué sans cette fonctionnalité. Alors oui, ça demande plus d'effort qu'un clic, mais guère plus que ce qu'aurait représenté l'effort initial de se renseigner sur les différentes instances. :-)

          • [^] # Re: Choix de son interlocuteur

            Posté par (page perso) . Évalué à -8 (+3/-13).

            En dehors d'internet, tu ferais confiance au premier venu pour assurer un service critique à ton activité sans poser plus de questions ?

            En dehors d'internet, tu porterai attention au premier venu qui débarque et t'explique doctement que tu es dans la merde et que lui, il aurait fait autrement nananere?

            C'est très difficile de renvoyer toi-même tes vidéos sur une autre instance depuis chez toi ?

            Et la fermer, sur les sujets auxquels tu pannes visiblement que dalle, c'est très difficile apparemment pour toi, hein ?

  • # Novlangue

    Posté par (page perso) . Évalué à 9 (+17/-10).

    développeureuses, utilisateurices… Ha ouais, quand même… il y a une règle décidée pour savoir quand mettre le point milieu et quand il ne faut pas mettre?

    • [^] # Re: Guide pratique

      Posté par . Évalué à 1 (+9/-8).

      Non. Pas de règle, mais des "recommendations" du HCE.

      La langue française étant une langue vivante, on ne peut pas faire beaucoup mieux que des recommendations, l'usage populaire se charge du reste ;)

      • [^] # Re: Guide pratique

        Posté par (page perso) . Évalué à 8 (+7/-0).

        Je n'ai pas pris le temps de lire ce document en détails (faut dire que dès l'avant-propos on se mange du "citoyen.ne.s désireuses et désireux d’agir pour l’égalité réelle", ce qui ne facilite pas la lecture…), mais ne serait-il pas plus raisonnable de recommander l'introduction de formes féminines des mots plutôt que d'inventer des mot hybrides ? Par exemple "développeure" ça pourrait encore marcher sans trop de mal, mais "développeureuse", vraiment ??

        On peut tout à fait éviter les stéréotypes de genre et le parler sexiste tout en employant le français "normal", il suffit surtout de faire attention aux propos que l'on tient.

        On peut aussi aspirer à une évolution de la langue qui puisse concilier égalité et lisibilité.

        • [^] # Re: Guide pratique

          Posté par . Évalué à 8 (+6/-0).

          Ben développeuse ça marche très bien…
          Ça sonne correct, c'est réglo, c'est propre, ya pas trop de débat là-dessus, non ?

          Yth, père plexe…

        • [^] # Re: Guide pratique

          Posté par . Évalué à 5 (+7/-3).

          Intéressant, l’article derrière ce lien. Sans donner ma propre opinion sur le sujet (elle n’est pas fixée), je vous propose une petite analyse.

          • Le titre est malhonnête : « Aimons-nous "encore" la langue française ? ». Il n’est question pour personne d’aimer ou de ne pas aimer la langue française. D’ailleurs, il faudra dire à cette personne qui aime tant la langue française qu’on utilise les guillemets français, en français. Faire appel aux sentiments n’a rien à faire dans une argumentation technique donc déjà c’est annoncé, on n’a pas vraiment affaire à une argumentation rationnelle (ce qui peut être valide, mais il faut en avoir conscience).
          • Argument d’autorité : l’auteur cite Descartes, qui a écrit ses textes à une autre époque.
          • L’auteur se prend pour un oracle : « en écrivant ainsi, Descartes serait devenu l’homme, ou la femme, le/la plus absurde de son époque ». J’attends des arguments concrets, pas de jugement sans fondement d’une personne.
          • L’auteur tente de ridiculiser (et y arrive probablement) le procédé en utilisant des mots forts et en faisant le clown : « malade », « (hic !), "une sorte d’eczéma »
          • L’auteur sort un grand mot, « glossomanie » (pour asseoir son autorité ?) qui est, après vérification, une attaque ad hominem. « Utilisation par certains psychopathes d’un langage fantaisiste sans structure ni syntaxe, souvent présenté comme une véritable langue étrangère » -> il est simplement en train de traiter les gens de psychopathes. C’est violent, en fait. C’est très sympathique aussi pour les gens réellement malades d’ailleurs. Moi aussi je peux y aller de mon jugement expéditif, c’est facile et pas cher : « Clairement, vu cette attaque, l’auteur est hostiles aux gens qui cherchent des solutions pour casser les discriminations, c’est un sexiste ! »
          • l’auteur use inutilement de l’exagération : « intolérable laideur ». Il n’aime pas, on a compris ! C’est un peu lourd. Heureusement qu’il écrit bien, sinon son torchon serait carrément indigeste ! (voyez, c’est facile)
          • « « Cher.e.s compatriotes ». Où était parti l’accent grave sur la forme féminine de cher ? ». C’est un bon point, mais est-ce un vrai problème, dans le fond ?
          • son histoire de mélodie et de rythme est une question de goût (qu’on peut partager, que j’ai même tendance à partager, ça n’empêche pas).

          « tous les hommes et toutes les femmes » : effectivement, je suis d’accord avec l’auteur, ce n’est pas idéal. « tous les humains », « tous les gens », "toutes les personnes » son des tournures plus concises qui évitent d’impliquer la notion de genre inutilement dans la phrase. Aidons-le à reformuler son exercice de réécriture du passage de Descartes :

          Le bon sens est la chose du monde la mieux partagée : car chaque personne pense en être si bien pourvue, que celles mêmes qui sont les plus difficiles à contenter en toute autre chose n’ont point coutume d’en désirer plus qu’elles en ont. En quoi il n’est pas vraisemblable que toutes se trompent ; mais plutôt cela témoigne que la puissance de bien juger […] est naturellement égale en tous les humains ; et ainsi que la diversité de nos opinions ne vient pas de ce qu’une personne est plus raisonnables qu’une autre […].

          Tout de suite plus lisible ?

          Bref. Cet académicien est un peu décevant, et vue la manipulation dont il abuse dans son écrit, je n’ai pas envie de lui faire confiance. Cet intellectuel, cette autorité devrait montrer un peu plus de rigueur, un peu plus l’exemple.

          Sinon dans le fond, le vrai problème, c’est qu’il s’oppose à une solution (ce qui est valide) sans en proposer une autre. Il rejette cette charge « aux partisans de la féminisation ».
          Déjà, il ne s’agit pas du tout de féminiser quoi que ce soit, il s’agit de rendre plus neutre. L’auteur choisit bien ses mots et manie bien sa langue, il est académicien et il ne se prive pas de le montrer dans ce même texte. Pour moi, c’est subtilement malhonnête.

          On peut critiquer une solution. Mais si on reconnaît qu’il y a un problème, on le dit, et on propose une autre solution, sinon les choses ne vont pas avancer puisqu’une solution est nécessaire. Si on ne pense pas puisqu’une solution est nécessaire, c’est qu’on ne pense pas qu’il y a un problème. Ce qui est une position valide.

          Aussi, il existe déjà des tas de propositions pour changer la langue. Peut-être qu’on peut en aimer certaines, d’autres moins, la langue va en retenir un ensemble et tout va bien se passer. Pas la peine de montrer une telle inquiétude pour cette langue française.

          Je ne connaissais pas le document que rigelk pointe, mais je le trouve plutôt bien fait, il utilise trop peu l’écriture avec les points pour que ça soit si difficile à lire pour les gens qui ne l’aiment pas, et il propose justement un ensemble de solutions, et il n’y a aucune obligation de toutes les aimer. Il propose aussi un ensemble de choses à faire si on tient à casser les discriminations. C’est rapide à lire et ça vaut le coup à mon avis. Et il n’use pas de procédés rhétoriques « moisis » pour faire passer un message.

          Donc s’il vous plaît, si vous n’aimez pas certains procédés linguistiques qui tentent d’apporter une solution à ce qui représente un problème pour un certain nombre de gens, si vous comptez le faire remarquer, ne tombez pas dans les travers de cet académicien, vous pouvez essayer de proposer une solution ! Il n’est pas obligatoire de donner une image de vous étant contre quelque chose « et c'est tout ». À ce stade, on sait largement que :

          • un certain nombre de personne souhaite utiliser des changements proposés et connus du français
          • un certain nombre s'oppose à ces changements.

          Ça ne sert à rien de montrer cette opposition sans proposer autre chose, les gens de la première catégorie ont besoin d’une solution de toute façon donc ils vont utiliser la meilleure (ou la moins mauvaise) des solutions qui existent actuellement à leur problème.

          Bref : arrêtez de râler, ça n’apporte que du négatif. Mais n’hésitez pas à proposer ! :-)

          • [^] # Re: Guide pratique

            Posté par (page perso) . Évalué à 5 (+4/-0). Dernière modification le 15/07/18 à 00:22.

            « « Cher.e.s compatriotes ». Où était parti l’accent grave sur la forme féminine de cher ? ». C’est un bon point, mais est-ce un vrai problème, dans le fond ?

            Je profite de cette remarque pour illustrer le comportement des "militant.e.s" de l'écriture inclusive, qui ont tendance justement à voir plus de sous-entendus qu'il n'y en a vraiment dans l'écriture conventionnelle de la plupart des personnes :

            "Ah, tu ne vois pas le problème ? Pas d'accent, ça sous-entend encore que la forme masculine l'emporte sur le féminin ! Au bûcher, espèce de sexiste !"

            Donc même avec cette écriture supposée inclusive, en cherchant la petite bête on peut encore trouver des sous-entendus sexistes…

            (Au passage, n'est-ce pas une intéressante propriété du français de pouvoir écrire "la forme masculine" et "le féminin" ? :-)

            Je suis à peu près certain qu'en utilisant le mot "homme" Descartes (et autres auteurs des mêmes époques) veut dire "humain" et pas "monsieur l'humain de sexe masculin". C'est malheureux que certains lecteurs d'aujourd'hui y voient un sous-entendu sexiste.

            Autrement, je suis d'accord que le texte de cet académicien n'est pas excellent pour les raisons que tu cites, mais son message principal "essayons d'éliminer les tournures discriminantes sans sacrifier la lisibilité" est à mon avis raisonnable. D'ailleurs, pour répondre à la fin de ton message, tout ce que je propose moi c'est d'utiliser la forme d'écriture inclusive la plus lisible, c'est-à-dire l'invention de noms féminins quand ils manquent (typiquement pour des professions ou des fonctions) plutôt que l'utilisation de points ou traits d'union comme dans "utilisateur.ice.s" et le raccourci des articles en le/la au lieu de prendre la peine d'écrire lisiblement les deux options l'une à la suite de l'autre.

          • [^] # Re: Guide pratique

            Posté par . Évalué à 1 (+0/-0). Dernière modification le 16/07/18 à 13:40.

            Ce que j'ai écrit plait à certaines personnes, ne plait pas d'autres. Si vous êtes dans la deuxième catégorie, n'hésitez pas à me dire ce qui ne va pas pour que je puisse faire mieux la prochaine fois et éviter ce que je devrais éviter de faire :-)

  • # WebTorrent-Desktop

    Posté par . Évalué à 2 (+1/-0).

    WebTorrent-Desktop est sur Flathub !

Envoyer un commentaire

Suivre le flux des commentaires

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