Planet Libre

Renault : Participez à la journée de test consacrée à DNF 2.0

Aujourd'hui, ce mardi 9 mai, est une journée dédiée à un test précis : sur la création de média installable pour Fedora. En effet, durant le cycle de développement, l'équipe d'assurance qualité dédie quelques journées autours de certains composants ou nouveautés afin de remonter un maximum de problèmes sur le sujet.

Elle fournit en plus une liste de tests précis à effectuer. Il vous suffit de les suivre, comparer votre résultat au résultat attendu et le notifier.

En quoi consiste ce test ?

Fedora 26 propose comme nouveauté une mise à jour de son gestionnaire de paquets par défaut, dnf, à une nouvelle version majeure 2.0. Qui consiste en un nettoyage, changement d'API et bien entendu corrections de certains problèmes.

Étant donné le caractère central de ce programme, il est nécessaire de s'assurer que ce composant est fiable et donc de remonter l'essentiel des problèmes avant la diffusion de Fedora 26.

Les tests du jour couvrent :

  • La mise à jour, installation, suppression, établir la liste de paquets ;
  • Tests en ligne de commande ou graphiquement (via yumex par exemple) ;
  • La compatibilité avec la commande yum (son prédécesseur).

Pour une fois, c'est plutôt simple et rapide. :-)

Comment y participer ?

Vous pouvez vous rendre sur la page des tests pour lister les tests disponibles et rapporter vos résultats. La page wiki récapitule les modalités de la journée.

Si vous avez besoin d'aide lors du déroulement des tests, n'hésitez pas de faire un tour sur IRC pour recevoir un coup de main sur les canaux #fedora-test-days et #fedora-fr (respectivement en anglais et en français) sur le serveur Freenode.

En cas de bogue, il est nécessaire de le rapporter sur le BugZilla. Si vous ne savez pas faire, n'hésitez pas à consulter la documentation correspondante.

De plus, si une journée est dédiée à ces tests, il reste possible de les effectuer quelques jours plus tard sans problème ! Les résultats seront globalement d'actualité.

Gravatar de Renault
Original post of Renault.Votez pour ce billet sur Planet Libre.

Articles similaires

Thuban : Publication de la 3e édition de "s'auto-héberger avec OpenBSD"

Suite à la publication en ligne de la troisième version, voici la version papier que vous pouvez acheter sur Atramenta.

Concernant le prix et les modalités de publication :

  • Stéphane va être content, il est référencé en librairie;
  • Après négociation, il ne coûte pas moins cher qu'avant, mais les frais de ports sont gratuits. Cela me semblait plus intéressant que le non-référencement en librairie qui l'aurait mis à 14€ avec les frais de ports à ajouter.

Merci infiniement à Péhä pour la superber couverture, à Stéphane pour son travail sur toute la partie DNS et à Starsheep pour la 4e de couverture.

J'espère qu'il aidera un maximum d'entre vous à reprendre le contrôle de ses données. Car il ne sert à rien d'utiliser Linux pour être libre si on garde ses mails ailleurs que chez soi.

Gravatar de Thuban
Original post of Thuban.Votez pour ce billet sur Planet Libre.

Articles similaires

Journal du hacker : Liens intéressants Journal du hacker semaine #18

Pour la 18ème semaine de 2017, voici 10 liens intéressants que vous avez peut-être ratés, relayés par le Journal du hacker, votre source d’informations pour le Logiciel Libre francophone !

Pour ne plus rater aucun article de la communauté francophone, voici :

De plus le site web du Journal du hacker est « adaptatif (responsive) ». N’hésitez pas à le consulter depuis votre smartphone ou votre tablette !

Le Journal du hacker fonctionne de manière collaborative, grâce à la participation de ses membres. Rejoignez-nous pour proposer vos contenus à partager avec la communauté du Logiciel Libre francophone et faire connaître vos projets !

Et vous ? Qu’avez-vous pensé de ces articles ? N’hésitez pas à réagir directement dans les commentaires de l’article sur le Journal du hacker ou bien dans les commentaires de ce billet :)

Gravatar de Journal du hacker
Original post of Journal du hacker.Votez pour ce billet sur Planet Libre.

Articles similaires

Benoît Boudaud : Python: les fichiers (1ère partie)

Pour une lecture plus agréable (page plus large), je vous invite à cliquer sur ce lien et à lire ce chapitre dans la rubrique consacrée au langage Python.

Introduction

Dans le chapitre 2, nous avons vu que les variables étaient des objets comparables à des tiroirs dans lesquels on pouvait déposer des données de différents types (nombres entiers, chaînes de caractères, etc…). Mais lorsque nous fermons notre programme, ces variables qui sont créées dans la RAM, c’est-à dire la mémoire vive de l’ordinateur, disparaissent corps et âmes. Il ne sert donc à rien d’y stocker des données que l’on souhaite conserver après la fermeture du programme puisque de toute façon, elles seront perdues. Comment faire alors?

La seule solution consiste à stocker les données que l’on souhaite conserver dans des fichiers qui se trouvent non pas dans la mémoire vive de l’ordinateur mais sur le disque dur.

files

Utilité d’un fichier

Prenons un exemple concret pour illustrer mon propos :

prenom = input("Entrez votre prénom: ") print("Votre prénom est {}".format(prenom))

Votre prénom est Maxence

Dans ce premier bout de code, le programme demande à l’utilisateur de renseigner son prénom grâce à la fonction input(). La chaîne de caractères est ensuite stockée dans la variable prenom. Mais dès que nous quittons le programme, la variable prenom avec la chaîne de caractères Maxence, disparaît.

À présent, nous allons stocker le prénom de l’utilisateur dans un fichier conservé dans le répertoire courant sur le disque dur :

prenom = input("Entrez votre prénom: ") file_ = open("utilisateur", 'w') file_.write(prenom) file_.close() file_ = open("utilisateur", 'r') first_name = file_.read() file_.close() print("Votre prénom est {}".format(first_name))

Votre prénom est Fulgent

Dans ce deuxième bout de code, j’ai créé sur mon disque dur (plus précisément dans le répertoire courant qui se nomme /home/benoit), un fichier utilisateur. Ce fichier récupère le prénom entré par l’utilisateur à savoir Fulgent. Le fichier a été créé en mode écriture (‘w’ = write). Ensuite, j’ai fermé le fichier et je l’ai réouvert en mode lecture (‘r’). J’ai stocké le prénom dans une variable intitulée first_name. J’ai fermé le fichier et j’ai fait appel à la fonction print() pour afficher le prénom.

Le fichier créé dans mon répertoire courant /home/benoit

" data-medium-file="https://ordinosor.files.wordpress.com/2017/05/utilisateur.png?w=840?w=114" data-large-file="https://ordinosor.files.wordpress.com/2017/05/utilisateur.png?w=840?w=114" src="https://ordinosor.files.wordpress.com/2017/05/utilisateur.png?w=840" alt="Le fichier créé dans mon répertoire courant /home/benoit">

utilisateur_2

Maintenant, je ferme le programme. La variable first_name qui stockait le prénom Fulgent a certes disparu mais comme j’ai pris soin de conserver l’information dans un fichier enregistré dans le répertoire courant sur mon disque dur, je peux très facilement rouvrir ce dernier et récupérer le prénom. Action!

file_ = open("utilisateur", 'r') # Ouverture du fichier en mode lecture first_name = file_.read() # Stockage du contenu du fichier dans une variable file_.close() # Fermeture du fichier print("Votre prénom est {}".format(first_name))

Votre prénom est Fulgent

Mission accompli! Fulgent est toujours en vie.

L’objet-fichier _io.TextIOWrapper

Les fichiers peuvent être manipulés grâce à une interface qu’on appelle objet-fichier. Si on fait print(file_), on obtient ceci :

_io.TextIOWrapper name=’utilisateur’ mode=’r’ encoding=’UTF-8′

Dans le code ci-dessus, file_ est donc un objet de type _io.TextIOWrapper qui ouvre un fichier dont le nom est utilisateur, en mode lecture (‘r’). L’encodage est UTF-8.

Les différents modes d’ouverture Le mode lecture (‘r’)

Le mode lecture (‘r’) est le mode d’ouverture par défaut c’est-à-dire que vous n’êtes pas obligé de le préciser :

file_ = open("utilisateur")

Le mode lecture permet d’appliquer plusieurs méthodes d’extraction de données que je vais vous présenter dans cet article.

Le mode écriture (‘w’) avec effacement préalable du fichier

‘w’ signifie write. Lorsqu’on utilise ce mode:

  • S’il n’existe pas, le fichier est d’abord créé et il s’agit d’un fichier vide.
  • Si le fichier existe déjà, celui-ci est vidé de son contenu au préalable et grâce à la méthode write(), on peut y écrire de nouvelles données.

Mon fichier utilisateur contient actuellement le prénom Fulgent. Je vais le remplacer par le prénom Toufik.

prenom = input("Entrez votre prénom: ") file_ = open("utilisateur", 'w') file_.write(prenom) file_.close() file_ = open("utilisateur", 'r') first_name = file_.read() file_.close() print("Votre prénom est {}".format(first_name))

Entrez votre prénom: Toufik
Votre prénom est Toufik

Le contenu de mon fichier a été modifié. Fulgent a disparu et Toufik a pris sa place :

toufik

Le mode ajout (‘a’)

‘a’ signifie append. L’ouverture du fichier en mode ajout va créer un nouveau fichier vide de tout contenu si celui-ci n’existe pas. Si le fichier existe déjà, le mode ‘a’ permet l’écriture dans le fichier à la suite des données déjà présentes. Le contenu du fichier n’est donc pas écrasé au préalable.

prenom = input("Entrez votre prénom: ") file_ = open("utilisateur", 'a') file_.write(prenom) file_.close() file_ = open("utilisateur", 'r') first_name = file_.read() file_.close() print("Le contenu du fichier est {}".format(first_name))

Entrez votre prénom: Helmut
Le contenu du fichier est ToufikHelmut

ToufikHelmut

Eh! Mais keskispass? ToufikHelmut!! C’est quoi le blème?

Il n’y a pas de blème. Le fichier est ouvert en mode append donc les nouvelles données sont écrites à la suite de celles déjà présentes. Si on veut que le nouveau prénom soit écrit sur une nouvelle ligne, alors il faut prendre soin de rajouter un caractère de saut de ligne ‘\\n’. C’est ce que je fais à la troisième  et à la huitième ligne du code ci-dessous.

prenom = input("Entrez votre prénom: ") file_ = open("utilisateur", 'a') file_.write(prenom + '\\n') # Rajout d'un saut de ligne file_.close() file_ = open("utilisateur", 'r') first_name = file_.read() file_.close() print("Le contenu du fichier est:\\n{}".format(first_name))

Entrez votre prénom: Toufik
Le contenu du fichier est:
Toufik
>>>
Entrez votre prénom: Helmut
Le contenu du fichier est:
Toufik
Helmut

Vérifions le fichier en question. Nous constatons que cette fois-ci, Helmut a bien été rajouté sur une nouvelle ligne:

helmut

Les modes d’ouverture de fichiers binaires

Dans le prochain chapitre, nous verrons qu’il est parfois nécessaire d’ouvrir des fichiers binaires. Pour ce faire, il existe des modes d’ouverture en binaire :

  • Le mode lecture : ‘rb’
  • Le mode écriture avec effacement préalable du contenu : ‘wb’
  • Le mode ajout : ‘ab’
La fonction intégrée open()

Lorsqu’on créé un objet-fichier, l’ouverture du fichier se fait grâce à la fonction intégrée open().

prenom = input("Entrez votre prénom: ") file_ = open("utilisateur", 'a') Refermer un fichier à l’aide de la méthode close()

Après avoir travaillé sur les données d’un fichier, il est nécessaire de refermer ce dernier afin qu’il puisse être disponible pour d’autres utilisations. C’est exactement comme un livre… Lorsque vous avez fini votre lecture, vous ne reposez pas le livre ouvert dans votre bibliothèque! Vous le refermez d’abord, n’est-ce pas?

Cette opération s’effectue grâce à la méthode close() que vous avez découverte dans les différents codes de cet article. Il ne faut pas oublier de refermer un fichier.

Nous verrons dans un prochain paragraphe qu’il existe une autre méthode d’ouverture avec une syntaxe un peu particulière (with open() as). Elle est très intéressante car elle permet de s’affranchir de la méthode close() grâce à l’indentation.

Écrire dans un fichier grâce la méthode write()

La méthode write(), appliquée sur un objet-fichier, permet d’écrire dans un fichier.

file_.write(prenom + '\\n') # Écriture dans le fichier Extraire les données d’un fichier pour les stocker dans une variable

Après avoir ouvert un fichier en mode lecture (‘r’), on peut appliquer sur l’objet-fichier diverses méthodes d’extraction de données.

La méthode read()

Dans les codes précédents, j’ai utilisé la méthode read(). Cette dernière extrait la totalité du contenu du fichier qu’elle retourne sous la forme d’une chaîne de caractères.

La méthode readline()

Cette méthode ne lit qu’une seule ligne à la fois et ne prend pas en compte le caractère de fin de ligne. Elle retourne une chaîne de caractères.

file_ = open("utilisateur", 'r') first_name = file_.readline() file_.close() print("Le contenu du fichier est:\\n{}".format(first_name))

Le contenu du fichier est:
Toufik

>>> print(file_.readline())
Helmut

>>> print(file_.readline())
Kevin

La méthode readlines()

La méthode readlines() extrait la totalité du fichier et retourne non pas une chaîne de caractères mais une liste sur laquelle il est possible ensuite d’effectuer une itération.

file_ = open("utilisateur", 'r') first_name = file_.readlines() file_.close() print("Le contenu du fichier est:\\n{}".format(first_name))

Le contenu du fichier est:
[‘Toufik\\n’, ‘Helmut\\n’]

À présent, grâce à une boucle for, je peux par exemple appliquer sur chaque élément de la liste, la méthode lower() pour mettre les prénoms en minuscules.

file_ = open("utilisateur", 'r') first_name = file_.readlines() file_.close() file_ = open("utilisateur", 'w') for i in first_name: file_.write(i.lower()) file_.close()

Les majuscules initiales ont disparu!

lower

La syntaxe with open() as

Dans la mesure du possible, je vous conseille vivement d’utiliser cette syntaxe pour ouvrir vos fichiers car elle a un gros avantage : il n’y a pas besoin d’utiliser la méthode close() pour refermer le fichier. Cette opération est effectuée automatiquement, à la sortie du bloc indenté. with open() as fonctionne comme ceci:

with open("fichier", 'mode') as objet_fichier: variable = objet_fichier.readlines() # BLOC INDENTÉ

Reprenons le code précédent et utilisons cette nouvelle syntaxe pour mettre Toufik et Helmut en majuscules à l’aide de la méthode upper():

with open("utilisateur", 'r') as file_: first_name = file_.readlines() with open("utilisateur", 'w') as file_: for i in first_name: file_.write(i.upper())

TH

Vous constatez que tous les file_.close() ont disparu. Ils sont devenus inutiles. Les étourdis ne risquent donc pas d’oublier de refermer un fichier! Personnellement, j’utilise presque toujours cette syntaxe.

Conclusion

Les fichiers sont nécessaires pour conserver des données avant de quitter une application et pouvoir les réutiliser par la suite. Dans la deuxième partie de ce chapitre, nous ferons connaissance avec le module os et le module pickle.


Gravatar de Benoît Boudaud
Original post of Benoît Boudaud.Votez pour ce billet sur Planet Libre.

Articles similaires

citizenz7 : Utiliser Protonmail en MX principal pour votre nom de domaine

J'utilise Protonmail depuis quelques semaines et je suis entièrement satisfait.
Pas encore francisé mais parfaitement utilisable, Protonmail n'offre pas qu'un simple service mail : mais bien plus !
L'offre de base (gratuite) vous permet d'obtenir une adresse e-mail en @protonmail.com avec 500 Mo.
L'offre payante à 5 € commence à être très inétressante : 5 Go, 5 adresses, VPN et possibilité de configurer un "custom domain", c'est à dire d'utiliser le MX de protonmail pour votre domaine.
Pour cela, protonmail propose 7 étapes.

Il vous suffit de suivre l'assistant de configuration qui va vous aiguiller et vous présenter les bonnes config (notamment au niveau config DNS...).

Voici les 7 étapes en images :

Une fois fait vous devrez attendre 1 heure ou deux, ... voir plus, pour que les nouvelles options du DNS se propagent (MX, opendkim, SPF, opendmarc, ...)
Si tout est bon, vous devrirez donc voir passer au vert les 6 "cases" de la configuation du "custom domain".


Vous pourrez alors créer une (ou plusieurs) adresse e-mail pour votre domaine et tous les mails pour cette adresse arriveront dans votre boite mail Protonmail.

Un dernier test :
[olivier@archy ~]$ host citizenz.info
citizenz.info has address 37.187.121.56
citizenz.info has IPv6 address 2001:41d0:a:f238::1
citizenz.info mail is handled by 10 mail.protonmail.ch.

On peut bien voir ici que le MX de citizenz.info est bien mail.protonmail.ch.
Je vous recommande chaudement Protonmail pour sa simplicité d'utilisation.

L'utilisation du VPN Protonmail est aussi un avantage important car il permet de configurer sa connexion avec plusieurs niveaux sécurité (voir cet article).

Pour rappel, Protonmail vous propose 3 niveau d'utilisation :
1 - GRATUIT : 500 MB, 1 adresse, 150 messages par jour, 20 labels, support limité
2 - 5 € / mois ou 48 € / an (soit 4 € / mois) : 5 GB, 1 custom domain, VPN, 5 adresses, 1000 messages par jour, 200 labels (et répertoires), support, filtres d'email. Vous pouvez également choisir plus de stockage, plus d'adresses etc. moyennant finance.
3 - 30 € /mois ou 288 € / an (soit 24 € / mois) : 20 GB, 10 custom domains, 50 adresses, envois illimités, labels et repertoires illimités, support prioritaire, filtres d'e-mail, etc.

Gravatar de citizenz7
Original post of citizenz7.Votez pour ce billet sur Planet Libre.

Okki : Sortie de GStreamer 1.12

Une nouvelle version de GStreamer, le framework multimédia utilisé par les différentes applications GNOME, vient de sortir.

Parmi les principales nouveautés, nous noterons la prise en charge de l’Intel Media SDK, qui offre une accélération matérielle de l’encodage et du décodage vidéo sur les puces du fondeur. La possibilité de pouvoir utiliser plusieurs versions de l’encodeur x264, dont une proposerait pas exemple une profondeur des couleurs de 8-bit et une autre de 10-bit. Les mises à l’échelle et les conversions vidéo sont désormais multithreadées. Le greffon (decklink) pour les cartes Blackmagic Design DeckLink bénéficie d’un certain nombre d’améliorations. Un nouveau greffon (iqa) pour mesurer la qualité perceptuelle d’images fait son apparition. L’OpenGL bénéficie également d’un certain nombre d’améliorations, d’optimisations et autres correctifs… sans oublier les innombrables améliorations sur l’ensemble du framework et la correction de plus de 635 bugs.

En ce qui concerne les codecs audio AC-3 et MP3, dont les derniers brevets logiciels ont expiré respectivement les 20 mars et 23 avril, ils ne seront pas déplacés vers les greffons « Good » avant le prochain cycle.

Vous pouvez consulter le changelog complet (en anglais) sur le site officiel.

Gravatar de Okki
Original post of Okki.Votez pour ce billet sur Planet Libre.

Articles similaires

Tuxicoman : Raccourcis clavier Gnome Shell

Avez-vous jeté un oeil à la liste des raccourcis claviers pour le bureau Gnome?

J’y ai découvert des trucs bien sympas comme :

  • verrouiller sa session
  • basculer entre les fenêtres d’une même application
  • prendre une capture d’écran de l’application
  • enregistrer une vidéo de ce qui se passe à l’écran
  • bouger une fenêtre d’un écran à l’autre
  • se déplacer entre les bureau virtuels
  • ouvrir le panneau de notification
  • lancer une commande

 

Related Posts:

Gravatar de Tuxicoman
Original post of Tuxicoman.Votez pour ce billet sur Planet Libre.

Articles similaires

Thuban : zeniTK - un zenity sans GTK

Alors que je bricole 2-3 trucs sur mes sessions, je râle à chaque fois qu'un script doit utiliser zenity. C'est censé être de petits outils rapides, mais la moindre petite fenêtre met 3 plombes à s'ouvrir le temps que toutes les libs GTK soient chargées.

J'ai donc eu envie de refaire un zenity à ma façon à partir de la librairie tkinter, et ça donne ZeniTK.

L'outil ne propose pas encore autant d'options que zenity, et je ne suis pas certain d'en rajouter sauf si j'en ai besoin ou si des contributions sont proposées.

On peut déjà profiter des éléments suivants :

  • Alertes habituelles :

  • Entrer et récupérer ce que l'utilisateur a écrit :
  • Sélection de fichier ou répertoire avec éventuellement filtre d'extensions :
  • Barre de progression :
  • Afficher et éditer du texte :

Ce dernier permet de faire un éditeur de texte tout bête pour prendre des notes par exemple :

#!/bin/sh DIR=~/Documents/notes mkdir -p $DIR N=$(zeniTK --title="Nouvelle note" --text="Nom de la nouvelle note : " --entry) if [ -n "$N" ]; then RES=$(cat "$DIR/$N" | zeniTK --text-info) if [ -n "$RES" ]; then echo $RES > "$DIR/$N" fi fi exit
  • Sélecteur de couleur

Ne vous fiez pas aux couleurs dans les captures d'écran, j'ai modifié des fichiers système par erreur mais ne parviens plus à les retrouver pour remettre à la normale. Oui, je suis un boulet :)

Gravatar de Thuban
Original post of Thuban.Votez pour ce billet sur Planet Libre.

Articles similaires

mozillaZine-fr : Quoi de neuf dans Firefox Nightly ? 15ᵉ éd.

logo-nightlyLe blog de Firefox Nightly publie les articles de Mike Conley (aidé cette semaine par Johann Hofmann) intitulés These Weeks in Firefox. Sa 15ᵉ édition rapporte des nouvelles du développement de Firefox. Nous en avons sélectionnées quelques-unes :

Firefox 55 (actuellement en Nightly) inclut la fonctionnalité lazy-tabs-browsers qui ne restaure que les onglets lors de la demande. Cela signifie que la restauration de n’importe quelle session (même avec beaucoup d’onglets) devient presque instantanée.

(Re)lire : Aurora s’éteindra à l’aube, sur Mozilla francophone

La refonte de Places (la bibliothèque de Firefox : marque-pages, historique…) pour prendre en charge des favicons en haute résolution a embarqué et apporte un gain en performances de près de 30 % pour certaines mesures d’entrées-sorties (I/O) de fichiers. Du travail de suivi est toujours en cours.

Dans le cadre de Photon Animation, Mozilla a inclus une préférence pour consolider et activer/désactiver toutes les animations cosmétiques dans l’interface du navigateur et a une variable qui arrive pour activer/désactiver spécifiquement les changements de l’animation de Photon (dans Nightly jusqu’à la version 57).

Pour aider à mesurer l’impact sur les performances que les efforts en matière de Quantum Flow ont, Mozilla a désactivé les modules qui exigent des aménagements temporaires pour la compatibilité pour les versions Nightly. Cela signifie que seules les WebExtensions et les extensions étiquetées comme compatibles avec le multiprocessus resteront actives.

 barre de notification de la désactivation d'extensions

Ce changement est réversible en passant la préférence extensions.allow-non-mpc-extensions à true. Cependant, l’équipe aimerait que vous ne reveniez pas sur ce basculement pour permettre à l’équipe performances d’avoir une idée plus claire sur l’amélioration de Firefox dans ce domaine et si ces efforts ont rendu Firefox plus rapide ou pas.

Le nombre de compartiments mémoire que les processus de contenu utilisent a été réduit. Cela devrait réduire leur impact de quelques mégas chacun !

eslint-plugin-mozilla peut désormais être utilisé via npm pour des projets externes. Il comprend une configuration « recommandée » qui est celle initialement présente dans toolkit/.

Les permissions « optionnelles » pour les WebExtensions ont été activées par défaut.

Permissions optionnelles pour les WebExtensions

La fonctionnalité de remplissage automatique de formulaire a été activée cette semaine (pour @autocmplete sur ).

Firefox Screenshots est en bêta 2 cachée derrière une préférence par défaut. Il sera activé très bientôt. Vous pouvez voler le départ en basculant la préférence extensions.screenshots.system-disabled.

Firefox Screenshots (Beta) – Coming soon

Firefox Screenshots est l’outil de partage de captures d’écran testé originellement dans Test Pilot (wiki) sous le nom de Page Shot.

Modules complémentaires

Vous voulez découvrir les WebExtensions exécutées dans leur propre processus ? Alors réglez la préférence cachée extensions.webextensions.remote true. Remplissez des rapports de bogues !

La nouvelle API pour appliquer un thème visuel a été activé par défaut. Ainsi, les auteurs d’extension peuvent changer l’apparence dynamiquement dans les WebExtensions.

Mobile

Un effort de Photon sur mobile (Android+iOS) a été lancé, avec comme objectif Firefox 57.

Quelques super nouvelles fonctionnalités arrive dans Firefox pour Android :

  • prise en charge des onglets personnalisés d’Android pour les autres applications ;
  • gestion des dossiers de marque-pages ;
  • applications web progressives (mode autonome) ;
  • WebExtensions (projet GSoC 2017).
Vie privée / Sécurité

jkt a rédigé un billet de blog sur la nouvelle fonctionnalité « Toujours ouvrir dans ce conteneur ».

Test Pilot

Min Vid célèbre sa plus grosse version avec l’ajout une file de lecture et d’historique. Ajoutez les médias que vous voulez regarder à votre file de vidéos en cours ou revoyez quelque chose que vous avez manqué en cliquant sur l’onglet historique. Min VId fonctionne actuellement sur YouTube, SoundCloud, Vimeo et les liens directs pour l’audio et la vidéo.

⁨Pulse⁩ a ajouté des invites occasionnelles (moins d’une fois par jour) pour des retours afin d’aider à éviter les données biaisées. Si vous voulez aider Firefox à améliorer les performances sur vos sites préférés, c’est votre chance ! Les données provenant de cette expérimentation vont directement à l’équipe produit de Firefox pour aider à prioritiser les améliorations.

Snooze Tabs est proposé dans le monde entier en 23 langues. En plus de pouvoir utiliser Snooze Tabs dans votre langue préférée, vous trouverez aussi un bouton Annuler lorsque vous supprimez un onglet différé.

Pour des détails du développement d’Activity Stream, de l’ingénirie du cœur de Firefox, du remplissage automatique des formulaires, de Photon, du projet Mortar (PDFium), de la recherche et des sujets abordés ici, lisez l’article original de Mike Conley sur le blog de Firefox Nightly (version de Firefox que nous vous conseillons d’utiliser au quotidien).

Gravatar de mozillaZine-fr
Original post of mozillaZine-fr.Votez pour ce billet sur Planet Libre.

Articles similaires

Max Koder : cURL : Dialogue avec une API en PHP

curl-php

Il y a quelques temps, j’ai été confronté à l’API de Mastodon, et me suis rendu compte que j’utilisais en fait 2 méthodes pour dialoguer avec une API en PHP. J’étais initialement parti pour vous présenter les 2, mais je ne détaillerai que la plus efficace : cURL.
La seconde, plus aisée et rapide fera l’objet d’un second article à venir.

Euh, Jamie, c’est quoi une API ?

Vous avez raison, avant tout cela, posons les bases.

API

Je suis sûr que vous avez déjà entendu parler d’API, même sans savoir ce que c’est. API signifie Application Programming Interface, ou Interface de Programmation Applicative. Ouais, moi non plus ça m’aide pas beaucoup. Ce qui est important là dedans, c’est le mot Interface.

En programmation comme dans la vie quotidienne, une interface désigne un moyen accessible (dans le sens facile) d’interagir avec un programme, une classe, une chaîne HiFi ou votre lave-vaisselle.
Pour imager, prenons l’exemple classique d’une télévision et sa télécommande. Cette dernière est l’interface entre vous et la TV.

Pour changer une chaîne, il suffit d’appuyer sur le bouton du canal désiré, et la télécommande va envoyer un signal au récepteur de la TV afin qu’elle change de fréquence. Personnellement, j’ai encore en mémoire la vieille TV de mes grands-parents où il fallait changer la fréquence avec un potar en façade. Ça change la vie
Et donc, comme dans chaque interface, une API impose une procédure qu’il faut respecter si l’on souhaite que ça fonctionne. Vous n’imaginez pas allumer votre voiture en appuyant sur le bouton des phares ? Ici c’est pareil

Comment ça marche ?

Je l’attendais celle-là. Et bien, ça marche plutôt bien.

Plus sérieusement, voilà comment ça fonctionne en très gros :
Un site web propose d’héberger des photos. Il est alors possible de s’inscrire sur ce site, et d’y envoyer des photos. Le site vous donne en retour une URL que vous pouvez donner à vos amis pour montrer vos prouesses.
Et bien généralement, ces services web proposent une API pour utiliser leurs services sans passer par leur site. C’est le cas de Twitter (récupérer des tweets), PayPal pour les solutions de paiement, Facebook, … où l’on peut récupérer des informations où en poster via PHP, ou une console, …

Pour notre exemple d’hébergement de photos, on peut imaginer qu’on effectuera une première requête vers l’API pour s’authentifier sur le site, puis une seconde en envoyant la photo, et le serveur nous renverra alors l’URL de l’image en ligne si la transaction a été effectuée.

REST, SOAP, RESTful, …

Je ne détaillerai pas ici les différents types d’API, mais sachez, même si l’on entend parler que de lui, qu’il n’existe pas que REST.
SOAP est à ma connaissance le plus vieux (90), mais aussi moins utilisé, et repose sur des échanges basés sur du XML. Certains prétendent qu’il connaîtra un essor dans quelques années, à voir.

Enfin RESTful désigne simplement une application REST, plus récent (2000) mais également voulu moins lourd et plus simple. Dans la suite de ce billet, je ne parlerai que de ce type d’API.

cURL

La bibliothèque cURL de PHP est certainement la plus efficace et la plus utilisée des méthodes pour se connecter à une API. Il est possible de faire des tas de choses avec, comme l’utilisation de web services, de proxy, de faire du téléchargement, un crawler, gérer un FTP, …
Si cURL est bien connu des utilisateurs de Linux, c’est un outil multi-plateforme rapide, pas très compliqué à utiliser et qui gère l’authentification sécurisée.

Pour pouvoir l’utiliser avec PHP, il suffit d’activer la bibliothèque libcurl. Un petit

phpinfo()  pour vérifier si elle est bien activée :

et c’est parti.

Initialiser cURL

Pour créer une nouvelle ressource cURL, la syntaxe est simple:

$curl = curl_init();

A cela, on peut ajouter un argument : L’URL de destination. Ou l’on peut l’ajouter plus tard, c’est la méthode que je préfère.

Mise en place des paramètres

Il existe 2 façons pour ajouter des options à une ressource cURL :

Par l’array

J’aime bien le jeu de mots
Il est possible de fournir à notre ressource un tableau préalablement créé afin de lui spécifier des paramètres avec la fonction

curl_setopt_array() :$opts = [ CURLOPT_SSL_VERIFYPEER => false, CURLOPT_HTTPHEADER => $headers, CURLOPT_URL => $this->domainURL . $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 30, CURLOPT_CONNECTTIMEOUT => 30 ]; curl_setopt_array($curl, $opts);

Le premier argument à fournir est la ressource à paramétrer. La seconde contient notre tableau associatif, avec les options.

A l’ancienne

Quand je dis à l’ancienne, ne pas comprendre que cette fonction est plus vieille que l’autre. C’est juste la forme redondante que prend cette méthode à écrire. Bref, il est possible de passer les arguments un à un avec la fonction

curl_setopt() :curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

Cette fonction attend en argument :

  1. La ressource cURL à paramétrer
  2. Le paramètre
  3. La valeur
Quelques options intéressantes

Je vous livre ici quelques options de cURL, les plus utiles et basiques selon moi :

  • CURLOPT_URL : URL de l’hôte à utiliser pour la connexion.
  • CURLOPT_CONNECTTIMEOUT : Durée maximale que pourra prendre la tentative de connexion à l’hôte, en secondes.
  • CURLOPT_TIMEOUT : Durée maximale d’exécution de la requête, en secondes
  • CURLOPT_HEADER : Permet d’inclure l’entête dans la valeur de retour.
  • CURLOPT_RETURNTRANSFER : Retourne le transfert sous une chaîne au lieu de l’afficher.
  • CURLOPT_HTTPHEADER : Permet d’envoyer des entêtes HTTP avec la transaction. Nous verrons ça plus bas.
  • CURLOPT_SSL_VERIFYPEER : Si cette option est à true  (par défaut), alors cURL vérifiera l’authenticité du certificat. Si vous n’utilisez pas de connexion SSL ou TLS, passez la à false .
  • CURLOPT_POST : Indique que la requête est de type POST. Si cette ligne n’est pas présente, cURL enverra par défaut une requête GET.
  • CURLOPT_POSTFIELDS : Dans une requête POST, tableau associatif avec les données à envoyer à l’hôte.
  • CURLOPT_FOLLOWLOCATION : Si cURL doit suivre les redirections éventuelles.
  • CURLOPT_USERAGENT : Spécifier un User-agent dans l’entête d’une requête HTTP. Liste de quelques user-agent sur Wikipédia.
Exécution de la session

Pour exécuter la requête, rien de plus simple. Il suffit d’utiliser la fonction :

curl_exec()  :$response = curl_exec($curl);

Vous l’aurez compris, l’argument à passer à cette fonction est notre ressource cURL. Cette fonction retourne simplement la réponse de l’hôte distant.

Fermer la ressource

Pour libérer de la mémoire, il est vivement conseillé, une fois la transmission terminée, de fermer la ressource :

curl_close($curl);

Testons cela alors.

Récupérer le contenu d’une page web

Ici, nous allons tenter de récupérer le contenu d’une page web. Vous allez voir que le code est très simple :

<?php $curl = curl_init(); $opts = [ CURLOPT_URL => 'www.google.fr', CURLOPT_RETURNTRANSFER => true, ]; curl_setopt_array($curl, $opts); $response = curl_exec($curl); curl_close($curl);

Ici on définit peu de paramètres :

  • L’URL de la page à récupérer
  • Le souhait de retourner la réponse et non de l’afficher.

La variable

$response  contient en sortie la réponse de la requête. Ici, c’est une chaîne de caractères comprenant le code HTML de la page de google.
Vous pouvez donc exploiter comme n’importe quelle string ce résultat.

Petit rappel : Pour parser un document HTML, vous pouvez vous aider de la classe DOMDocument ou de l’extension SimpleXML.
Sinon, il suffit d’un

echo  pour l’afficher sur la page :

L’utilité du User-Agent

Brève petite astuce : Je vous ai mis l’option CURLOPT_USERAGENT dans la liste des paramètres tout à l’heure. Celle-ci peut nous permettre par exemple de simuler une connexion à Google comme si nous nous connections avec un smartphone.

Dans le code précèdent, ajoutons simplement un user-agent de navigateur mobile dans les paramètres de la transmission :

<?php $curl = curl_init(); $opts = [ CURLOPT_URL => 'www.google.fr', CURLOPT_RETURNTRANSFER => true, CURLOPT_USERAGENT => 'Mozilla/5.0 (Linux; U; Android 2.1-update1; fr-fr; GTI9000 Build/ECLAIR) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17', ]; curl_setopt_array($curl, $opts); $response = curl_exec($curl); curl_close($curl); echo $response;

On voit ainsi que Google a pris en compte notre requête, et a adressé la réponse en fonction du user-agent spécifié :

Transmission avec une API

Maintenant que nous avons vu sommairement l’utilisation de cURL, nous allons nous attaquer à ce qui nous intéresse : Dialoguer avec une API.

Requête GET

Selon l’API, comme avec le protocole HTTP que vous connaissez, il faut parfois effectuer une transaction GET ou POST.
GET est généralement utilisée lorsque votre application ne doit que récupérer des données de l’hôte, mais il est possible d’y passer des arguments.

Pour tester cela, nous allons nous servir de l’API Random User Generator, que j’ai découvert il y a peu, grâce au blog de ShevAbam. Il s’agit uniquement de pouvoir récupérer des informations d’utilisateurs aléatoires (factices), utiles pour vos éventuels tests.

La documentation, portée sur jQuery, permet tout de même d’en comprendre le fonctionnement.

On y apprend que l’URL d’entrée pour cette API, celle qui représente la ressource à récupérer, appelée endpoint, est , et que la ressource récupérée est un objet JSON.

Passons au code :

<?php $curl = curl_init(); $opts = [ CURLOPT_URL => ' CURLOPT_RETURNTRANSFER => true, ]; curl_setopt_array($curl, $opts); $response = json_decode(curl_exec($curl), true); print_r($response);

Si vous avez bien suivi, il ne devrait rien y avoir de compliqué.
J’ai renseigné le endpoint dans le paramètre CURLOPT_URL, et décode ensuite l’objet JSON que l’API me renvoie.

Voilà le résultat produit :

Array ( [results] => Array ( [0] => Array ( [gender] => male [name] => Array ( [title] => mr [first] => leon [last] => hübner ) [location] => Array ( [street] => 9377 parkstraße [city] => bayreuth [state] => hamburg [postcode] => 29972 ) [email] => leon.hübner@example.com [login] => Array ( [username] => heavyladybug706 [password] => dogwood [salt] => iSK8r2hd [md5] => ce2261b02d713de1b6f25710f40a38e0 [sha1] => e640a316dca46761476458eb17fbf8f8018949f7 [sha256] => 9c919250c04e2c3b925434c56a0aae210cd96b70e6b5a65cc1ddf764067f8260 ) [dob] => 1982-10-19 09:48:01 [registered] => 2004-04-06 02:49:59 [phone] => 0658-4413331 [cell] => 0174-7427152 [id] => Array ( [name] => [value] => ) [picture] => Array ( [large] => [medium] => [thumbnail] => ) [nat] => DE ) ) [info] => Array ( [seed] => 04b9f8b8ed62a4a6 [results] => 1 [page] => 1 [version] => 1.1 ) )

Des paramètres ?

Je vous ai dit tout à l’heure qu’il était possible de spécifier des paramètres dans la requête. Voyons ça.

Comme dans n’importe quelle requête HTTP GET, les paramètres se mettent dans l’URL, tout simplement :

CURLOPT_URL => ' j’ai fourni plusieurs paramètres, récupérés dans la doc. Le résultat :Array ( [results] => Array ( [0] => Array ( [gender] => male [name] => Array ( [title] => mr [first] => adam [last] => addy ) [nat] => CA ) [1] => Array ( [gender] => male [name] => Array ( [title] => mr [first] => benjamin [last] => martin ) [nat] => NZ ) ) [info] => Array ( [seed] => 52b8ab0ce31a8031 [results] => 2 [page] => 1 [version] => 1.1 ) )

Requête POST

Ce type de requête n’est pas plus compliquée. Il suffira généralement de quelques paramètres en plus dans notre ressource cURL.

Pour cet exemple, je me servirais de JSONPlaceholder. Pour ceux qui ne connaissent pas, c’est une fausse API en ligne qui existe uniquement à but de tests et prototypes. C’est parfait pour nous !

Encore une fois, la documentation est écrite pour Javascript, mais l’usage est simple. Vous pouvez si vous le souhaitez vous amuser avec les requêtes GET, mais ce qui nous intéresse ici est la création d’un nouveau post.

Pour faire cela, il va falloir envoyer une requête HTTP POST, avec 3 paramètres :

  • title : Le titre du post
  • body : Le corps du billet
  • userId : ID (entier) de l’auteur

Je vous donne le code :

<?php $curl = curl_init(); $params = [ 'title' => 'Welcome Bro !', 'body' => 'Lorem Ipsum etc etc', 'userId' => 5 ]; $params_string = http_build_query($params); $opts = [ CURLOPT_URL => ' CURLOPT_POST => true, CURLOPT_POSTFIELDS => $params_string, CURLOPT_RETURNTRANSFER => true, ]; curl_setopt_array($curl, $opts); $response = json_decode(curl_exec($curl), true); print_r($response);

J’ai mis en évidence les paramètres à modifier dans la ressource cURL pour exécuter correctement la requête.

Un point cependant, concernant la variable

$params_string . C’est en fait la génération des paramètres encodés en URL, grâce à la fonction http_build_query($params) .

Encore une fois, on décode la réponse et on observe le résultat :

Array ( [title] => Welcome Bro ! [body] => Lorem Ipsum etc etc [userId] => 5 [id] => 101 )

C’était vraiment compliqué ?

Pour aller plus loin

J’ai testé ici des exemples très scolaires et simples. Lors de l’utilisation d’une API plus complexe, par exemple avec une authentification par OAuth, des procédures et paramètres plus avancées sont requis.

J’essayerai dès que possible de créer un billet sur l’utilisation de Mastodon via l’API, toujours en PHP.

N’hésitez pas d’y aller de vos commentaires si je peux améliorer cet article, merci !

L’article cURL : Dialogue avec une API en PHP est apparu en premier sur Max-Koder.

Gravatar de Max Koder
Original post of Max Koder.Votez pour ce billet sur Planet Libre.

Articles similaires

Jehan : ZeMarmot — travail en cours: de l’animatique à l’animation

Alors que nous sommes en pleine étape d’animation, on s’est dit que vous aimeriez un peu en savoir plus sur cette étape de production. Comment passe-t-on d’images statiques à images animées?

Storyboard, puis Animatique

Nous avons déjà parlé en long et en travers de ces étapes, donc nous n’allons pas épiloguer. Nous vous conseillons de lire les blog posts des mois passés pour en savoir plus. Ce sont les étapes des images « purement statiques » type BD (storyboard) puis d’images statiques projetées en vidéo (animatique).

Key Framing

Avec le numérique, le sens terme « keyframe » a changé plusieurs fois. Ainsi dans les vidéos formats, on entend par « keyframe » une image qui est complète dans le flux vidéo, en oppositions d’images partielles qui n’ont de sens qu’associés à une keyframe précédente. Dans l’animation 3D ou vecteur, on va en général nommer keyframe les positions extrêmes dans une transition (mouvement de personnage par exemple), dont les positions intermédiaires sont calculées par un algorithme (interpolation ). C’est plus ou moins la définition donnée par Wikipedia pour une keyframe: « A key frame in animation and filmmaking is a drawing that defines the starting and ending points of any smooth transition. »

Cette définition est cependant un peu trop « mécanique », liée aux méthodes modernes d’animer avec la 3D et le dessin vectoriel (ce n’est pas totalement vrai même avec ces techniques, mais avec un peu de paresse, en découvrant la magie de l’interpolation algorithmique, cela paraît être la définition pour beaucoup). Les keyframes sont en fait simplement des « images importantes », ce qui est déterminé totalement subjectivement. Keyframing est donc une part de l’art de l’animateur, plutôt qu’une science. Bien sûr, très souvent, les keyframes sont des débuts/fins de mouvement, mais ce n’est pas une vérité absolue. On les appelle aussi parfois les « poses clés »; il s’agit donc des poses que l’animateur juge comme importante pour rendre le mouvement juste, de manière totalement partiale comme pour tout œuvre.

Animation Pose à Pose vs Straight Ahead

Il y a 2 principales logiques pour animer. La première méthode consiste à décomposer le mouvement en poses clés (keyframes) dans un premier temps. Dans le second temps, quand vous êtes content du résultat, you pouvez ajouter les images intermédiaires (inbetweens). C’est la méthode pose à pose.

Dans un gros studio, les keyframes sont généralement dessinées par les animateurs expérimentés. Puis les assistants (animateurs juniors)  dessineront les inbetweens après coup. Cela permet un peu plus de partage de travail, d’efficacité et de multi-tâche. Pour ZeMarmot malheureusement, Aryeom fait toutes les étapes elle-même, puisque nous n’avons pas le financement pour engager plus d’artites pour l’instant.

L’autre méthode s’appelle en anglais « Straight Ahead » et consiste à dessiner les images successivement les unes après les autres, sans décomposition préalable. Cela rend le planning de la séquence plus difficile et le timing est bien plus difficile à gérer. Il est également plus probable que vous gâcherez des dessins avec cette méthode. Néanmoins certains animateurs aiment la liberté apportée et aussi le manque de planification peut permettre des mouvements moins parfait, moins mécanique et donc plus réalistes. Il s’agit de reproduire les êtres vivants dans toute leur splendeur de parfaite imperfection!

En observant Aryeom travailler, on peut constater qu’elle utilise régulièrement l’une ou l’autre méthode. Cela dépend des séquences.

Conclusion

Nous espérons que vous aurez apprécié ce petit aperçu dans le monde de l’animation et le travail de l’animateur. Nous espérons également que la petite vidéo attachée vous aura intéressés. Nous l’avons choisie pour vous montrer diverses étapes de la même section de scène, l’une après l’autre, puis côte-à-côte.

Vous remarquerez aussi que nous avons tendance à montrer toujours les mêmes sections du travail car nous souhaitons vous éviter le moins possible de spoiler, ce qui gâcherait le visionnage final. 🙂

Amusez-vous bien!

Équipe de ZeMarmot

Rappel: pour aider notre film d'animation, à voir le jour, lequel est fait avec des logiciels libres — et pour lequel nous contribuons aussi beaucoup de code — et qui sera sous licence Creative Commons by-sa 4.0 international, vous pouvez contribuer financièrement en USD sur Patreon ou en EUR sur Tipeee.

Gravatar de Jehan
Original post of Jehan.Votez pour ce billet sur Planet Libre.

Articles similaires

P3ter : Activer le HTTPS sur son site web avec un certificat signé par Let's Encrypt

L'ennui avec HTTPS, c'est que pour obtenir le fameux cadenas vert à gauche de l'url de son site, il faut un certificat signé par une Autorité de Certification connue de son navigateur Internet. Et c'est là qu'intervient Let's Encrypt. Dans cette article, je vous explique comment j'ai pu mettre en place le HTTPS sur ce blog, obtenir mon certificat et le maintenir à jour, le tout gratuitement et de manière automatique. Vous verrez également comment paramétrer NGINX pour faire fonctionner le tout avec PluXml.

HTTPS est l'accronyme qui désigne l'utilisation des protocoles SSL au sein du protocole HTTP. Il vous permet de chiffrer la communication entre votre navigateur et le site web que vous consultez. Imaginez-vous sur un site de e-commerce. Vous devez saisir votre numéro de carte bancaire ainsi que les autres informations nécessaires au paiement. Sans HTTPS, toutes ces données sont transmises au site en clair. Cela signifie, qu'elles vont circuler sur le réseau local et sur Internet de manière totalement lisible par d'autres. Ainsi une personne tierce qui "lit" ce qui passe sur le réseau, peut récupérer les informations de votre carte bancaire. Il en va de même pour les logins et mots de passe de votre webmail ou encore lorsque vous communiquez via une messagerie instantanée ou bien sur un forum il est possible d'intercepter les messages. Une connexion chiffrée permet d'éviter ces problèmes, en rendant illisible tout ce que vous envoyez depuis votre navigateur. De plus, le chiffrement de vos communications permet de garantir l'intégrité des échanges, vous êtes ainsi assuré que les données n'ont pas été modifiée par un tiers au cours de leur tranversée du réseau. Le passage à HTTPS peut également être motivés par trois autres facteurs : depuis 2014 Google favorise le référencement des sites web qui proposent du HTTPS ; les navigateurs Chrome et Firefox à partir de janvier 2017 affichent des messages d'alertes directement dans les formulaires (login, mot de passe, carte de crédit) des pages HTTP ; Enfin, le protocole HTTP/2 a pour prérequis d'utiliser HTTPS. Ainsi, depuis 2017 bon nombre sites, dont mon blog, proposent par défaut le https.

Les deux font la paire

Avant de mettre en place ce fameux HTTPS,  il faut d'abord comprendre comment ça fonctionne. SSL utilise trois éléments. Un système de chiffrement asymétrique (RSA, par exemple) qui permet de générer une paire de clés (une clé privée et une clé publique), un système de chiffrement symétrique pour les données (AES , par exemple) et enfin un système de signature (SHA, par exemple), pour vérifier l'intégrité des données. Lorsque que le client et le serveur (le navigateur et le site web) veulent communiquer via HTTPS, ils choisissent les systèmes communs qu'ils vont utiliser. Il est d'ailleurs possible d'en voir la liste en cliquant sur le cadenas du navigateur.

Dernier point de la chaîne, le certificat. Celui-ci est fourni au visiteur par le site web. Il permet de s'assurer que le serveur qui vous répond est bien celui qu'il prétend être. Le certificat fourni un ensemble d'information dont les PKI. Ce sont des clés publics fournis par des autorités de certification dont la liste est enregistrée dans la navigateur. C'est là qu'intervient Let's Encrypt, une autorité de certification qui fournies gratuitement et de manière automatique des certificats. Avec l'aide de Mozilla, l'Electronic Frontier Foundation (EFF) et l'université du Michigan, Let's Encrypt utilise une implémentation serveur et client sous licence libre. Tout le projet est disponible sous Github, facilitant les démarches d'audits et laissant la place à un travail collaboratif d'amélioration continue. En pratique, pour fonctionner sur tous les navigateurs, Let's Encrypt va signer vos certificats avec un certificat intermédiaire. Celui-ci, est lui même signé par le certificat racine de Let's Encrypt, mais aussi par le certificat racine de l'Autorité de Certification IdenTrust qui est connue de tous les navigateurs Internet.

La clé du succès

Commençons directement par l'obtention de notre certificat. Pour cela les développeurs de Let's Encrypt ont créé le protocole ACME. Il permet entre autre, au travers de messages JSON échangés en HTTPS avec l'autorité de certification, de créer votre compte, d'enregistrer votre nom de domaine et d'obtenir votre certificat.

Let's Encrypt recommande d'utiliser un client ACME développé par l'Electronic Frontier Foundation : Certbot. Une liste de clients est disponibles ici : https://letsencrypt.org/docs/client-options/

L'installation de Certbot, passe par la copie du dépôt git.

git clone https://github.com/certbot/certbot.git
cd certbot

Pour dialoguer avec notre autorité de certification, nous allons utiliser le script : certbot-auto. La commande ci-dessous va nous permettre de créer un compte, de vérifier que le nom domaine nous appartient bien, puis de créer le certificat.

sudo ./certbot-auto certonly --webroot --webroot-path /srv/web/p3ter.fr --domains p3ter.fr,www.p3ter.fr --agree-tos --text --email

--webroot : l'authentification de votre site sera réalisée par un challenge ACME. Un fichier fourni par Let's Encrypt sera temporairement déposé sur votre serveur web.
--webroot-path : nécessaire pour le challenge ACME, il s'agit du chemin absolu vers le répertoire contenant votre site (généralement /var/www/).
-- domains : le ou les noms de domaines qui seront couvert par le certificat (séparés par des virgules).
-- adree-tos : permet d'accepter automatiquement les conditions d'utilisation de l'autorité de certification.
--text : lancer la commande en mode texte et non en mode graphique.
--email : l'adresse mail qui sera nécessaire en cas de perte du compte.

Si la commande à réussi, vous avez désormais un certificat et la clé privée associée. Ils sont disponibles dans le répertoire ci-dessous :

sudo tree /etc/letsencrypt/live

cert.pem : le certificat.
privkey.pem : la clé privée.
chain.pem : le certificat intermédiaire.
fullchain.pem : le certificat racine et intermédiaire.

La prochaine étape consiste à paramétrer le serveur web pour utiliser le HTTPS, ainsi que le certificat et sa clé privée. Pour cela je vous recommande cet article sur ce même blog. Dans mes exemples j'utilise le serveur web NGINX, l'opération consiste à modifier le virtualhost, pour rediriger le traffic http vers https, et pour fournir le certificat et sa clé privée. Les paramètres supplémentaires ssl_protocols et ssl_ciphers, permettent de restreinte la liste des protocoles mis à disposition des visiteurs dans le but de s'appuyer sur les protocoles les plus fiables.

Ci-dessous un extrait de virtualhost pour NGINX, qui permet de rediriger les requêtes HTTP vers du HTTPS et qui utilise notre clé et son certificat Let's Encrypt. C'est la configuration minimale en terme de sécurité.

server {
  listen 80;
  server_name mon.site.fr;
  return 301 https://$server_name$request_uri;
}
server {
  listen 443 ssl;
  (...)

  ssl                               on;
  ssl_certificate             /etc/letsencrypt/live/mon.site.fr/cert.pem;
  ssl_certificate_key     /etc/letsencrypt/live/mon.site.fr/privkey.pem;
  ssl_protocols              TLSv1.2 TLSv1.1 TLSv1;
  ssl_ciphers                 ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!3DES:+HIGH:+MEDIUM;
  ssl_prefer_server_ciphers   on;

  (...)
}

Ensuite il suffit de redémarrer son serveur web, pour prendre en compte ces modifications.

sudo systemctl restart nginx

L'autre force de Let's Encrypt et de Certbot c'est la possibilité de renouveler automatiquement le certificat. En effet, celui-ci après 90 jours arrivera à expiration et affichera un joli message d'alerte sur le navigateur. Pour éviter ça, nous allons créer un script qui sera lancé automatiquement une fois par mois, en utilisant Cron (plus d'info).

sudo vim /etc/cron.mounthly/certbot.sh

Ce script est très basique et ne fera que lancer certbot avec les mêmes paramètres que précédemment, mais en ajoutant --renew-by-default pour seulement renouveler le certificat.

#!/bin/bash
cd /home/pedro/git/certbot
./certbot-auto certonly --webroot --webroot-path /srv/web/p3ter.fr --domains p3ter.fr,www.p3ter.fr --agree-tos --text --email --renew-by-default

Ensuite il suffit de donner les droits d'exécution au script, pour que Cron puisse le lancer.

sudo chmod u+x /etc/cron.mounthly/certbot.sh Savoir garder un secret

En guise de conclusion, je souhaite simplement attirer votre attention sur le fait que, comme dans la vrai vie, on ne confit pas un secret à n'importe qui. Dans le cadre du chiffrement c'est la même chose : votre clé privée doit rester un secret bien gardé. Par exemple, lorsqu'on utilise un service de mail hébergé par un tier, au hasard Google, c'est bien lui qui est propriétaire de la clé privée. Toute une conversation par mails chiffrée avec PGP peut tout à fait être lue par le tiers qui a fourni la clé de chiffrement.

Il existe en revanche des solutions décentralisées basées sur le protocole Tor, qui apportent une protection bien meilleur, dont j'espère vous parler prochainement sur ce blog.

Pour finir, j'aimerais vous recommander le blog de Aeris (membre de l'équipe de Cozy Cloud) et fin spécialiste du chiffrement. Vous y trouverez : un article sur les limites de Let's Encrypt, un article pour approfondir les systèmes de chiffrements et les comparer, et enfin un outil qui vous permettra de tester le niveau de sécurité d'un site web à partir de son URL. Du coté de Mozilla il existe Observatory un autre outil d'audit de la sécurité de votre site.

Un article à retrouver sur P3ter.fr

Gravatar de P3ter
Original post of P3ter.Votez pour ce billet sur Planet Libre.

Articles similaires

Thuban : Bilan libre du mercredi (6)

C'est mercredi, l'heure pour un autre bilan libre :P :

  • J'ai participé bien que légèrement au projet BlockZones qui permet de générer des listes d'IP connues pour être nuisibles
  • J'ai modifié le système de notifications de Blogotext pour que les mails soient tout en texte et non en html. J'en ai profité pour traduire cette partie en français.
  • Il y a désormais 413 bruteforceurs connus et 138 spammeurs dans les listes que j'entretiens selon les attaques portées sur mon serveur. ^^
  • Un peu de boulot sur vilain, l'antibruteforce pour OpenBSD avec de l'aide de Vincent Delft qui semble bien parti pour en faire un outil avec un moteur différent. ^^
  • Suite aux quelques dons reçus pour le livre sur l'auto-hébergement (Merci !!! :) ), je pense publier au format papier. Le prix ne sera pas aussi bas que j'imaginais, mais les frais de port seront gratuits, donc ça reste très intéressant. J'en suis aux échanges avec l'éditeur, ça ne saurait tarder. J'espérais qu'il soit prêt pour mon anniversaire, il y aura quelques jours de retard seulement.
  • Je prépare un remplaçant à zenity en utilisant Tk. Ça se veut plus rapide et plus simple. Le code n'est pas encore fini mais les bases sont là.
  • J'ai mis à jour les outils pour créer des ISOS d'installation d'OpenBSD customisées pour la 6.1. Tout n'est pas encore testé par les 3hg, donc ce n'est pas publié.
  • Enfin, je prépare de quoi tester OpenBSD sereinement, affaire à suivre... :)
  • J'ai créé des adresses mail sur mon serveur pour la famille, on ne sait jamais par les temps qui courent. :s
  • J'ai reçu mes premiers dons sur liberapay, merci !

Sinon, car tout ne tourne pas ici, sachez qu'OpenBSD a publié ses premiers patches de sécurité, le projet suckless.org a publié un nouveau dmenu, et arpi continue de bosser pour les amoureux de debian.

Pour info, les bilans seront plutôt mensuels désormais, pour des raisons relatives au boulot et à la vie, tout simplement.

Bon après-midi les enfants :)

Gravatar de Thuban
Original post of Thuban.Votez pour ce billet sur Planet Libre.

Articles similaires

Carl Chenet : Édito de mai 2017

Après de bonnes petites vacances à Los Angeles en fin de mois dernier et la publication de mes activités du Libre en avril 2017 (article en anglais), voici l’édito de mai 2017.

Le réseau social Mastodon

Beaucoup de travail sur le réseau social Mastodon, avec des rapports de bugs en cours sur Mastodon.py, la bibliothèque Python permettant d’interagir avec les instances Mastodon et sur toot, un outil en ligne de commande pour poster vers Mastodon. Le projet est jeune et évolue vite. Également un nouveau projet lié à ce réseau social à venir très très vite.

Mon compte perso : https://mastodon.social/@carlchenet

masto-carlchenet

 

Documentation de mes projets personnels

J’ai beaucoup publié le mois dernier sur ce blog au sujet de mes projets personnels comme Feed2tweet, Retweet ou Feed2toot. Cela permet à la fois de les faire connaître, de développer comment utiliser certaines fonctionnalités intéressantes et de créer de la documentation un peu moins aride que la documentation officielle, qui peut décourager lorsqu’on cherche directement dedans sans être déjà un peu familier du projet. Un billet de blog qui couvre le sujet que vous cherchez, c’est tout de suite plus motivant 🙂

Évolution de ma page Liberapay

Ma page Liberapay : https://fr.liberapay.com/carlchenet

Grâce à de nombreux dons que je remercie systématiquement via les réseaux sociaux (en particulier Mastodon ;), les contributions à ma page Liberapay permettent d’augmenter mon revenu lié à mes actions dans le Logiciel Libre. Je n’en suis qu’au début mais c’est un grand honneur de recevoir des dons et mes remerciements via les réseaux sociaux ainsi que mon billet récapitulatif mensuel vont permettre aux intéressés de suivre cela de près 😉

liberapay

Le mois de Mai au niveau personnel

Je suis dans une période où j’essaie beaucoup de choses et j’accorde beaucoup de temps à l’expérimentation et à l’échange avec la communauté. N’hésitez donc pas à me solliciter via les réseaux sociaux ou les moyens plus traditionnels.

 

 

 

Gravatar de Carl Chenet
Original post of Carl Chenet.Votez pour ce billet sur Planet Libre.

Articles similaires

Jean-Baptiste Holcroft : Les traducteurs francophone de KDE redémarrent

L’équipe de traducteurs francophones de KDE reprend le travail ! Suite à un message du mainteneur de Kwave – Thomas Eschenbacher faisant un appel aux traducteurs francophones, plusieurs personnes se sont dites intéresser pour contribuer. Faute de coordinateur actif pendant quelques mois, l’équipe était tombée en sommeil, Ludovic Grossard en a donc profité pour relancer l’équipe.

Si vous aimez la traduction, KDE et son écosystème, n’hésitez pas à rejoindre cette liste, y proposer vos services et à parcourir cette page qui sembre lister tous les liens utiles : French Team (fr).

À savoir : l’équipe KDE utilise beaucoup Pology et Lokalize quelques notes sur la grammaire, leur dictionnaire,

Vincent Pinon résume les étapes clefs de cette façon : installer Lokalize, télécharger le fichier.po de kwave (exemple), traduire le paquet et le renvoyer sur la liste.

En complément, il propose comme astuce : télécharge un (ou plusieurs, voir tous) dossiers de traductions KDE, et dans Lokalize, les « ajouter à la mémoire de traduction », comme ça il y a plein de messages déjà saisis ou proches : ça permet d’aller plus vite et d’avoir une bonne cohérence.

Je ne connais pas encore le détail du fonctionnement de l’équipe KDE, mais je souhaie bon courage à cette équipe !

Gravatar de Jean-Baptiste Holcroft
Original post of Jean-Baptiste Holcroft.Votez pour ce billet sur Planet Libre.

OLPC France : Des tablettes équipées de Sugarizer dans une classe à Saint-Ouen

Grâce au soutien de la Fondation L’Oréal nous avons lancé en début d’année le premier déploiement de Sugarizer sur des tablettes Android à l’école Mandela, à Saint-Ouen. Premier compte-rendu d’utilisation.

Depuis la Toussaint, l’enseignante de la classe de CM1 de l’école Mandela utilise des tablettes équipées de la suite pédagogique libre Sugarizer, tablettes prêtées par OLPC France.

Ces tablettes évolueront en fonction des besoins des enseignants, tant au niveau matériel qu’au niveau des applications, et un serveur viendra donner accès aux fonctions de partage de Sugarizer, ainsi qu’à des contenus accessibles sans connexion internet.

Parmi les applications de Sugarizer régulièrement utilisées par les élèves, nous retrouvons Labyrinth (qui permet de faire des cartes mentales de manière ludique et intuitive), et Speak (synthèse vocale des écrits des élèves).

Des applications supplémentaires Android ont été demandées par l’équipe, et installées en complément (Scratch junior, Book Creator, …). Elles peuvent être lancées directement depuis l’environnement Sugarizer OS.

Les projets de la classe de Sonia Carril Créer un livre numérique

Les élèves de la classe de Sonia se sont lancés dans un projet prévu sur l’année à partir des revues « Mon petit quotidien » : chaque enfant choisit un quotidien et approfondit ses connaissances sur le sujet choisi. L’élève utilise diverses ressources trouvées à la médiathèque, dans la classe ou sur le web pour en faire un livre et un exposé. Afin de rendre ces livres plus ludiques, les élèves se sont emparés de l’application Book Creator : Chaque élève crée son propre livre et y intègre ses textes rédigés, les photos qu’il sélectionne, des dessins et des bandes sons – le texte de la page est lu par l’élève, dans le but de rendre accessible à tous, même les non-lecteurs.

Exemple avec BookCreator

Exemple d’utilisation de BookCreator

L’initiation au code

Depuis le début de l’année, l’enseignante fait découvrir à sa classe les différentes écritures (les hiéroglyphes égyptiens, idéogrammes chinois, …) afin de leur faire comprendre que notre alphabet n’est pas le seul mode de communication existant. A partir de manipulations simples, tirées du livre « 1, 2, 3, codez ! » de La Main à La Pâte, les élèves découvrent le langage informatique : ils commencent en créant des « messages secrets » en binaire. Suite à cela, ils apprendront à diriger un personnage grâce à l’application Scratch junior pour en faire un jeu ou une animation.

Apprendre à organiser sa pensée

Les élèves ont besoin d’outils pour organiser leur pensée et mieux mémoriser les notions rencontrées. La création de carte mentale se révèle être un bon outil pour cela. C’est pourquoi l’enseignante les initie à cette structuration des idées : l’idée principale s’inscrit au centre, et l’on développe les informations annexes par branches. La classe commence l’appropriation de cette méthode sur papier, chacun pourra produire sa carte mentale sur sa tablette par l’intermédiaire de l’activité Labyrinth, intégrée à Sugarizer. Celle-ci peut ainsi être enregistrée et partagée entre tablettes, vers le TNI ou l’utiliser à la maison sur une clé USB.

Les cartes mentales avec l’activité « Labyrinthe »

 

A suivre : la mise à jour et l’appropriation du serveur de contenus, et les autres activités !

Gravatar de OLPC France
Original post of OLPC France.Votez pour ce billet sur Planet Libre.

Articles similaires

genma : Git et clef SSH

Ce billet ne sera pas un billet sur l'état de l'art de créer sa clef SSH. Je pars du principe que vous en avez déjà une.

Les dépôts en ligne Git (Github, Framagit, qui est basé sur Gitlab ou un dépôt Gitlab autohébergé) propose comme fonctionnalité intéressante celle de pouvoir uploader une clef publique ssh sur le serveur (la clef publique, pas la clef privée. Surtout pas la clef privée) de la même façon que l'on peut le faire pour un serveur sur lequel on se connecte en ssh. Le serveur git étant lui-même un serveur, il dispose aussi d'un serveur ssh.

L'association d'une clef publique à un compte utilisateur (le même compte que le compte Git) a pour avantage qu'ensuite, on peut faire les connexions avec le serveur git en ssh, récupérer des fichiers ou les pousser au sein de ce tunnel ssh... Dès que l'on fera une commande en interaction avec git, on n'aura qu'à taper une fois sa phrase de passe de sa clef SSH pour être authentifiée pour tout le reste des manipulations. Un autre intérêt et qu'on utilise la phrase de passe de la clef SSH et non le mot de passe (comme dans le cas d'une connexion https).

Comment ça se passe ?

Pour définir le dépôt distant, on fera comme commande

git remote add git@framagit.org:genma/My_repository.git

au lieu de

git remote add https://framagit.org/genma/My_repository.git)

Pour que les connexions aux serveurs pour git se fasse via le protocole SSH et non plus via le protocole HTTP.

Enfin, toujours sur Git et les astuces, il y a la possibilité de signer ses commit avec sa clef GPG, et pour ce, je vous renvoie au tutorielhttps://git-scm.com/book/fr/v2/Utilitaires-Git-Signer-votre-travail.

Gravatar de genma
Original post of genma.Votez pour ce billet sur Planet Libre.

Philippe Scoffoni : Zero inbox et GTD avec Thunderbird

Je rencontre régulièrement chez mes clients et prospects des personnes pour qui Microsoft Outlook représente la panacée de la messagerie ou en tout cas un outil dont il ne saurait se passer. Quand j’explique que je me passe bien de ce dernier et que je ne me sens pas moins productif pour autant, il y a toujours un vague soupçon de tentative de prosélytisme non objectif.

La meilleure façon d’illustrer tout le bien que je pense de Thunderbird rien ne vaut, je pense, une petite illustration bien concrète de ce que j’ai fait de ce dernier avec pas mal d’essais/échec, quelques extensions et un peu de méthode qui tient en quelques commandements.

Je gère au quotidien plusieurs boîtes email soit environ 10 comptes. Toutes n’ont pas la même importance et je ne leur applique pas forcément les méthodes qui suivent. Certaines sont partagées avec mes collaborateurs comme la boîte du support par exemple. J’apprécie tout particulièrement l’affichage en mode « unifié » de Thunderbird qui regroupe en sous-ensemble les boîtes de réception, dossiers envoyés, etc. avec la possibilité d’avoir une vue « fusionnée » du contenu de chaque dossier.

Tes emails tu ne classeras pas

Le classement des emails représente une activité chronophage. Le principal avantage pour les défendeurs de cette pratique : le gain de temps pour les retrouver par la suite. Le classement leader en la matière se fait par personne et/ou par projet. On aboutit  à une arborescence plus ou moins profonde ou longue. Au bout d’un certain temps avec le volume, il devient assez difficile de retrouver le bon mail. Quelle personne, quel projet ? Autant ne rien classer.

J’utilise la fonction « Archiver ». Elle permet d’envoyer un email dans un dossier Archives et un sous-dossier par année ou mois / année. La touche raccourcie est « A ». Ainsi dés que j’ai traité ou lut un email dans ma boîte et qu’il n’appelle pas de réponse ou d’action de ma part j’archive.  Pas de classement non plus pour les emails envoyés. Ils s’empilent dans mon dossier « Envoyé ». Une fois par an, je crée un sous-dossier pour l’année et je déplace tous les emails de l’année dedans.

Lorsque je veux suivre une personne ou un groupe de personnes en particulier dans le cadre d’un projet, je crée là aussi des dossiers virtuels en utilisant la règle « De, Pour, copie, copie cachée » avec un opérateur « contient » sur le nom de domaine par exemple ou sur une adresse email précise. Le dossier ainsi obtenu me permet de retrouver ainsi tous les emails envoyés et reçus avec ces personnes.

Zéro Inbox

Je pratique le zéro inbox. Mon objectif est de conserver ma boîte de réception vide. Selon mon emploi du temps, je traite ma boîte de réception « par lot » quatre ou six fois par jour. En général le matin en arrivant, en fin de matinée, en milieu d’après-midi et le soir.

Au préalable, vous devez avoir effectué un travail pour filtrer tous les emails type newsletter ou autres notifications de réseau social. Thunderbird permet de définir des règles très simplement. Pour ma part, j’utilise des filtres côté serveur de messagerie. Ainsi si je consulte mes emails depuis mon smartphone, les emails sont également filtrés.

Je déconnecte souvent Thunderbird lorsque je suis en train de travailler sur un sujet qui réclame de la concentration bien que les notifications soient désactivées. J’ai souvent besoin de consulter des emails dans Thunderbird et le fait de voir un nouvel email non lu est une tentation très forte de se dérouter de ce que l’on faisait à l’instant.

Concentrons-nous sur la boîte de réception. Une fois les messages « d’information » lus et archivés, il reste encore les emails nécessitant une réponse ou une action. Selon les principes du Zero Inbox, je réponds immédiatement à ceux qui ne nécessitent pas plus de deux, trois minutes.

Il ne reste plus que les emails nécessitant une action plus longue. L’objectif est ici de faire en sorte qu’ils soient traités.

Getting Things Dones

Il me fallait trouver un moyen de faire sortir ces emails de ma boîte de réception, sans pour autant les perdre de vue et sans les classer. Pour cela j’utilise deux fonctions de Thunderbird : les étiquettes et les dossiers virtuels.

Je marque ces emails de l’étiquette « A faire » (touche 4) et je l’archive. J’ai un dossier virtuel qui me permet de retrouver tout simplement les emails que j’ai marqués. Il est ainsi configuré :

Comme vous le voyez, j’utilise deux autres étiquettes afin de me permettre de hiérarchiser les emails à traiter. Au niveau du dossier virtuel, j’utilise les possibilités d’affichage de Thunderbird (dans menu « Affichage -> Trier par » Étiquettes, ordre croissant et option « Groupe par ordre de tri ») pour obtenir la vue suivante :

Je reviens selon mes activités à un moment choisi pour passer en revue cette liste et traiter les emails qui y sont présents. Une fois fait, je supprime l’étiquette,  l’email disparaît de la liste. Il m’arrive également souvent de m’envoyer un email pour penser à faire quelque chose. Cet email est bien sûr marqué à faire et archivé dans la foulée.

Des extensions pour améliorer le tout

Comme je gère plusieurs comptes, j’utilise l’extension Account Colors. Elle permet de changer la couleur de fond par exemple selon le compte de l’email. Quand vous utilisez des vues unifiées, c’est particulièrement pratique. Crédit @jpfox qui m’a fait découvrir cette extension.

L’autre extension clé est QuickFolders. Elle me permet de disposer d’onglet pointant sur des dossiers virtuels pour la plupart dans Thunderbird. J’ai ainsi des onglets « permanents » et d’autres liés à mes projets en cours.

Dans le domaine du respect de mes destinataires, j’utilise souvent les fonctions de l’extension Envoyer Plus Tard pour éviter d’envoyer des emails dans la soirée. Je programme leur envoi le matin, histoire de respecter la tranquillité de mes destinataires.

Et du collaboratif

Cela fera probablement l’objet d’un prochain article, mais Thunderbird est pour moi un véritable centre de pilotage de mon activité. Avec désormais trois collaborateurs, il nous fallait un outil commun et des méthodes pour fonctionner. Nextcloud, son agenda, ses tâches, Dolibarr et ses contacts sont au centre de notre fonctionnement.

Une chose est certaine, Thunderbird est loin d’être mort 🙂 !

Réagir à cet article

Article original écrit par Philippe Scoffoni le 01/05/2017. | Lien direct vers cet article

Cette création est mise à disposition sous un contrat Creative Commons BY à l'exception des images qui l'illustrent (celles-ci demeurent placées sous leur mention légale d'origine).

.

Gravatar de Philippe Scoffoni
Original post of Philippe Scoffoni.Votez pour ce billet sur Planet Libre.

Articles similaires

System Linux : MariaDB Créer un utilisateur ayant les droits minimum juste pour de la sauvegarde

mysql jpg

Pour éviter d'utiliser le compte root

Avec ces trois commandes sql que ce soit du myisam ou du inodb ça fonctionnera :

CREATE USER 'botbackup'@'localhost' IDENTIFIED BY 'password'; GRANT SELECT, SHOW VIEW, RELOAD, REPLICATION CLIENT, EVENT, TRIGGER ON *.* TO 'botbackup'@'localhost'; GRANT LOCK TABLES ON *.* TO 'botbackup'@'localhost';

Gravatar de System Linux
Original post of System Linux.Votez pour ce billet sur Planet Libre.

Articles similaires

Pages