Planet Libre

Nizar Kerkeni : De Ubuntu à Ubuntu Gnome

J’ai profité de la sortie de la dernière version de Ubuntu, la 17.04, pour faire une réinstallation complète de mon système sur mon PC de bureau et mon portable. Pour cette installation j’ai opté pour la variante officielle Ubuntu Gnome pour remplacer la version Ubuntu classique. Les motivations de ce choix sont principalement deux.

logo ubuntu gnome

Premièrement, il y a la décision de Canonical d’abandonner Unity et de revenir vers le bureau Gnome Shell. Ce changement de bureau de ma distribution favorite a été annoncé pour la version 18.04 LTS qui sortira en avril 2018. Puis le changement a été encore avancé de six mois pour être effectif dans la version 17.10, qui sortira en octobre prochain. Alors pourquoi pas ne pas l’avancer encore de six mois à mon niveau pour découvrir et prendre en main cet environnement de bureau que j’ai abandonné depuis que Ubuntu a adopté Unity. Je parle ici de découverte de Gnome Shell, car je n’ai pas eu vraiment l’occasion de l’utiliser régulièrement et pour une période prolongée. J’ai, bien évidemment, déjà installé Gnome Shell avant par curiosité pour voir ce qu’il propose, mais je ne l’ai jamais adopté. J’étais pleinement satisfait de mon bureau Unity.

La seconde motivation est que pour la première fois depuis l’apparition de la variante Ubuntu Gnome, on trouve la dernière version du bureau Gnome, la version 3.24. Moi qui suis impatient de retrouver les nouveautés je suis donc bien servi.

L’installation s’est bien déroulée et j’utilise mon bureau Gnome Shell depuis quelques semaines maintenant, il est donc temps de faire un petit retour d’expérience. Il est impossible pour moi de faire le retour complet sur le nouveau environnement, car je suis toujours dans un processus de découverte. Voici donc ce que j’ai noté comme points positifs et points négatifs.

(+) Comptes en ligne

Lors de la première connexion au bureau Gnome il y a une fenêtre qui propose de configurer les comptes en ligne. La bonne surprise est la proposition de configurer un compte Nextcloud qui n’existait pas sous Ubuntu. Cette configuration permet donc une bonne intégration de l’agenda, des contacts et des fichiers de nextCloud avec les applications de Gnome, respectivement agenda (gnome-calendar), contacts (gnome-contacts) et le gestionnaire de fichier (nautilus).

Gnome Shell - Comptes En Ligne

(-) Support de langue

Comme toujours, la première chose que je configure dans mon système c’est le support de la langue arabe en plus de la langue française. Avec Gnome le panneau de contrôle, via l’outil « Pays & langue », permet de configurer, entre autres, la langue principale et les sources de saisies. Petit problème, aucun paquet supplémentaire n’est téléchargé ni installé. Je pense surtout aux paquets de traduction (Français et Arabe) et surtout aux polices de caractères.

Pour contourner ce problème j’ai du donc installé le paquet « gnome-language-selector » qui a permis de télécharger automatiquement les paquets nécessaires.

Gnome Shell - Parametres

(+) Extensions

Une autre bonne découverte, c’est les extensions Gnome qui permettent de personnaliser le bureau à volonté. Même si les dépôts contiennent les paquets d’extension j’ai préféré passer par le site web – https://extensions.gnome.org – qui propose plus d’extensions et des versions qui sont plus à jour que celles dans les dépôts.

Voici par exemple à quoi ressemble mon bureau Gnome Shell actuel après l’installation et la configuration de quelques extensions. Oui, c’est un bureau Gnome Shell et non pas un bureau Unity. Je consacrerai un autre biller de mon blog pour détailler comment je suis arrivé à ce bureau.

Gnome Shell - Bureau

(-) Terminaux virtuels

Pour les vieux GNU/Linuxiens, comme moi, rien ne vaut un Ctrl+Alt+F1 pour basculer vers un joli terminal textuel et lancer un kill -9 ou autre service truc stop quand l’interface graphique fait des siennes. C’est avec grosse déception que j’ai découvert que mon Ubuntu Gnome ne propose plus que deux terminaux graphiques au lieu des sept classiques, six terminaux textuels et un graphique. J’ai pas encore trop chercher comment faire pour retrouver des terminaux textuels mais si vous avez des pistes je suis preneur.

share this

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

Articles similaires

citizenz7 : Les "Stats" pour les Nuls : Netdata

​Afficher les stats d'un serveur, cela peut être bien utile : vérifier la charge processeur, la RAM utilisée, la "santé" de sa base de données SQL, etc.
Jusqu'à maintenant, j'avais l'habitude d'installer Munin qui nous propose de jolis graphiques. Mais, à mon goût, l'un des inconvénients de Munin, c'est que, outre l'aspect esthétique graphique un peu répétitif, ça devient vite "assez lourd" sur des petits systèmes (sur un petit VPS avec un proc et 2 GO de RAM, vous êtes vite dépassé niveau charge avec des crêtes d'utilisation assez élevées...).

Et puis je suis tombé sur Netdata. Un site proposait d'aller "voir" ses stats en ligne : ahurissant !
Netdata, c'est du "live", "temps réel", "en direct", blablabla, ... et vous avez beau descendre dans la page de stats, vous en avez toujours, encore et encore.
C'est ULTRA complet, esthétiquement à des années lumières de Munin. Ca flash !

C'est quoi Netdata ?
Netdata est un outil de supervision en temps réel pour les systèmes Linux qui va nous permettre de visualiser les éléments importants d'un système (processeur, mémoire, débit du disque dur, traffic réseau, application, etc.).
C'est assez exhaustif et vous serez surpris du nombres d'éléments visualisables ! 

Comment on installe Netdata ?
Bon : on va l'installer sur notre serveur Debian. Mais avant cela, on va installer quelques éléments indispensables :

$sudo apt install zlib1g-dev gcc make git autoconf autogen automake pkg-config

J'ai l'habitude d'installer mes sites web dans /var/www/monsite.com/web.
Je pars du postulat que Nginx (version stable depuis le dépot officiel), php5 ou php7 sont installés.
N'oubliez pas de changer monsite.com avec vos propres infos.

Pour plus d'aisance, on passe directement en root :

$sudo -s

Puis on crée le répertoire web qui va accueillir les fichiers netdata :

#mkdir /var/www/netdata.mondomaine.com

Si vous n'avez jamais encore configuré de site dans ce répertoire, entrez plutôt la commande suivante : 

#mkdir -p /var/www/netdata.mondomaine.com

On se place dans le répertoire web qu'on vient de créer :

#cd /var/www/netdata.mondomaine.com

La ligne suivante est facultative (mais ça me permet de placer les logs du site afin de les consulter facilement, notamment en cas de soucis...)

#mkdir logs

On va maintenant cloner le repertoire git du projet Netdata :

#git clone https://github.com/firehol/netdata.git netdata --depth=1

L'étape suivante est facultative. Je renomme le répertoire netdata pour coller avec ma config et mon "organisation" :

#mv netdata/ web/

On se place dans le répertopire web/ :

#cd web/

... et on installe Netdata :

#./netdata-installer.sh

... et c'est tout !

Configuration Nginx
Il reste quand même à configurer Nginx :

#cd /etc/nginx/conf.d
#vim netdata.mondomaine.com.conf

Cerise sur le gateau, nous allons configurer le vhost Nginx avec HTTPS Let's Encrypt :
- netdata écoute, par défaut, sur le port 19999
- IPV6 ready
- tous les accès sur le port 80 sont "automagiquement" renvoyer sur le port 443 (HTTPS)
- on ne log pas les accès sur le port 80
- on ajoute plusieurs options SSL "qui vont bien" ...
- nous configurerons Let's Encrypt juste après cette partie

Voici le fichier :

#/etc/nginx/conf.d/netdata.mondomaine.com.conf
upstream backend {
    server 127.0.0.1:19999;
    keepalive 64;
} server {
    listen 80;
    listen [::]:80;
    server_name netdata.mondomaine.com;
    return 301 https://$server_name$request_uri;
    access_log /dev/null;
    error_log /dev/null;
} server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name netdata.mondomaine.com;
    charset utf-8;     access_log /var/www/netdata.mondomaine.com/logs/netdata.access.log combined;
    error_log /var/www/netdata.mondomaine.com/logs/netdata.error.log error;     ssl_certificate /etc/letsencrypt/live/netdata.mondomaine.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/netdata.mondomaine.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/netdata.mondomaine.com/chain.pem;
    ssl_protocols TLSv1.2;
    ssl_ecdh_curve prime256v1;
    ssl_ciphers EECDH+AESGCM:EECDH+AES;
    ssl_prefer_server_ciphers on;     resolver 80.67.169.12 80.67.169.40 valid=300s;
    resolver_timeout 5s;
    ssl_session_cache shared:SSL:10m;     add_header Strict-Transport-Security "max-age=15768000";
    add_header Referrer-Policy "strict-origin-when-cross-origin";     location / {
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_pass_request_headers on;
        proxy_set_header Connection "keep-alive";
        proxy_store off;
    } }

Et voila. Vous enregistrez ce fichier après avoir adapté les passages avec netdata.mondomaine.com.

Configuration de Let's Encrypt
On passe à la config Let's Encrypt. On installe d'abord les backports Debian (à moins que cela ne soit déjà fait ...) :

#echo "deb http://httpredir.debian.org/debian jessie-backports main" >> /etc/apt/sources.list

On met à jour : 

#apt update && apt full-upgrade -y

On installe Let's Encrypt :

#apt install -t jessie-backports letsencrypt

Pour obtenir un certificat Let's Encrypt, il faut arrêter Nginx (port 80) :

#service nginx stop

Puis on génére le certifcat (à adapter pour netdata.mondomaine.com et l'adresse e-mail) :

#letsencrypt certonly -d netdata.mondomaine.com --agree-tos -m contact@mondomaine.com --rsa-key-size 4096 --standalone

Si vous voyez "Congratulations..." etc., c'est bon, votre certificat Let's Encrypt a été créé et installé dans /etc/letsencrypt/live/netdata.mondomaine.com/.
Vous y trouverez plusieurs fichiers : fullchain.pen, chain.pem, privkey.pem, ...

Redémarrez maintenant votre serveur Nginx :

#service nginx start

Si vous ne voyez pas d'erreur : VICTOIRE !

Vous pouvez aller voir vos superbes stats sur l'adresse https://netdata.mondomaine.com !
 

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

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

Pour la 19è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

Carl Chenet : De l’importance de bien choisir son instance Mastodon

mastodon

Pour rappel, Mastodon est un nouveau réseau social, décentralisé et basé sur un logiciel libre qui se développe rapidement (déjà 600000 comptes). Ayant créé mon compte il y a environ un mois, j’ai rapidement accroché et déjà écrit deux outils pour ce réseau social, Feed2toot et Boost.

Il m’apparaît avec un peu de recul important de souligner l’importance de bien choisir son instance Mastodon.

Quelques rappels sur le fonctionnement de Mastodon

Une précision rapide est nécessaire sur le terme décentralisé. Pour Mastodon, la décentralisation est réalisée grâce à une fédération entre différents serveurs informatiques, appelés instances, chacun géré de façon complètement indépendante. Votre compte utilisateur est créé sur une instance particulière. Vous avez deux choix :

  • Créer votre propre instance. Cela demande des compétences techniques importantes.
  • Créer votre compte utilisateur sur une instance ouverte au public. Cela s’avère le moyen le plus simple et le plus rapide de commencer à utiliser Mastodon.

Il est possible de migrer votre compte utilisateur d’une instance à l’autre, mais cela demande une démarche particulière qui peut s’avérer relativement laborieuse, selon vos affinités pour les manipulations techniques et le nombre de vos abonnés qu’il faudra prévenir de votre changement de compte.

Plusieurs points découlant directement de ce fonctionnement vont donc nous intéresser, points  techniques et humains.

La bonne gestion technique de l’instance

Si le modèle du réseau social Mastodon est bien décentralisé, avec plus de 600000 utilisateurs et plus de 1500 instances existantes, le cas typique de fonctionnement consiste à créer son compte sur une instance ouverte. En effet créer sa propre instance relève du parcours du combattant pour le commun des mortels. Et donc une dépendance forte à l’administrateur technique de votre instance se créée.

mastodon-map

Votre administrateur technique va devoir assumer plusieurs contraintes pour assurer la pérennité du service, avec du matériel performant et des sauvegardes régulières. Cela a un coût, en temps et en moyen.

Au niveau temps il paraît judicieux de privilégier une équipe d’administrateurs plutôt qu’une personne isolée, les événements de la vie pouvant faire évoluer très rapidement les centres d’intérêt de chacun. Framasoft propose par exemple sa propre instance Mastodon nommée : Framapiaf.

Au niveau des moyens financiers, on voit naturellement fleurir les demandes de dons via Patreon par les administrateurs d’instances ayant un nombre important d’utilisateurs et on peut comprendre pourquoi : héberger ou faire héberger un serveur a un coût.

 Framapiaf

L’instance Mastodon de Framasoft : Framapiaf

La ligne idéologique de votre instance

Autant on pouvait soupçonner les points techniques précédents depuis l’explosion récente de l’utilisation du réseau social Mastodon, autant le point évoqué ici semble avoir pris un peu tout le monde de court. En effet les instances affirment peu à peu leur « culture », leurs actions revendicatrices et leur propagation d’idées sur ce réseau social.

Tout pouvoir étant donné à l’administrateur d’une instance sur son instance, ce dernier peut en effet interdire sa propre instance de communiquer avec d’autres instances mais aussi interdire aux utilisateurs de son instance d’interagir avec des comptes d’autres instances.

Alors que tout le monde considérait avant tout les grands avantages de la fédération d’instances, cette autonomisation partielle de certaines instances vis-à-vis de la fédération en surprend plus d’un. Cas d’école récente : l’interdiction par l’administrateur de l’instance Unixcorn.xyz à ses utilisateurs de lire le compte d’Aegis hébergé lui sur sa propre instance a provoqué un séisme avec de nombreuse répercussions, séisme que j’ai nommé #AegisGate tant il est symptomatique des différences d’approches, de la modération possible et de son acceptation par les uns et les autres sur Mastodon.

Exemples de règles très précises d'une instance

Exemples de règles très précises d’une instance

Si vous ne créez pas votre propre instance, au moment de choisir l’instance sur laquelle vous souhaitez créer votre compte, soyez donc sûr de créer votre compte sur une instance qui accepte votre point de vue et vos idées. Oui je sais, cela peut paraître surprenant à priori, mais comme énoncé précédemment, vous dépendez de l’infrastructure de quelqu’un, qui peut avoir une démarche idéologique vis-à-vis de l’hébergement qu’il propose sur Mastodon. Évitez donc – par exemple – si vous êtes un nazi d’ouvrir votre compte Mastodon sur une instance LGBT extrême gauche. À priori votre compte ne resterait pas longtemps ouvert.

La ligne de modération est décrite dans la page « about/more » de votre instance et peut contenir des éléments idéologique.

mastodon-aboutmore

Un peu de réflexion avant la création de votre compte

Dans le cas où vous souhaitez donc créer votre compte sur une instance que vous ne contrôlez pas, deux éléments sont donc à vérifier : la disponibilité du service dans le temps, souvent liée à l’administrateur ou à l’organisation administrant l’instance et l’orientation idéologique de votre instance. Ces deux éléments vous permettront de faire grandir votre compte en toute sérénité, sans vous exposer à des problèmes de disponibilité du service ou à découvrir un matin que votre compte a été fermé pour n’avoir pas suivi la ligne idéologique de l’instance.

… et pour finir

Pour soutenir mon implication dans le Logiciel Libre et mes articles sur ce blog, n’hésitez pas à donner via ma page Liberapay, même à hauteur de quelques centimes par semaine 😉 Mes adresses Bitcoin, Monero et Ğ1 sont également disponibles sur cette page.

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

Articles similaires

Mathieu Ignacio : Je passe sur un blog statique !

Après quelques mois de tergiversation je me suis décidé à passer de dotclear à Pelican. Pelican c'est un moteur de blog statique écrit en python qui me permet d'écrire mes articles avec un éditeur de texte quelconque et de "compiler" mes articles pour les transformer en joli blog en html et css (enfin joli quand j'aurai pris du temps pour revoir les css).

Alors vous me direz que c'est encore un truc de geek que les gens normaux ne peuvent pas utiliser, et je vous dirai que malheureusement pour les gens normaux, il faut effectivement mettre un peu les mains dans le cambouis, mais de mon point de vue ce n'est pas une perte de temps.

Pourquoi passer à un blog statique ?

Pour moi essentiellement pour des raisons de sécurité dans un premier temps. J'ai la facheuse habitude d'abandonner mes différents sites parfois pendant plusieurs années, et quand j'y reviens j'ai déjà eu la mauvaise surprise d'avoir un site visité et utilisé par des pirates pour faire du phishing. Avec les blogs dynamiques (dotclear, wordpress) ou bien les wiki, vous avez intérêt à faire des mises à jour régulièrement afin de colmater les failles de sécurité qui sont trouvées. Avec un moteur de blog statique, ce problème est résolu. Alors je ne vous cache pas que cela ne va pas sans avoir quelques contraintes qui peuvent être rédibitoireis pour certain, je vais donc faire un bref tour des inconvénients et avantages d'utiliser un blog statique aujourd'hui.

Les blogs statiques : pourquoi c'est nul ?

Tout d'abord vous pouvez oublier la jolie interface graphique qui vous permet de rédiger vos articles. Il vous faudra utiliser un éditeur de texte et apprendre quelques éléments de syntaxe à la wiki pour formater vos articles. Il existe bien des éditeurs "markdown", la syntaxe la plus courante pour le formatage de texte, mais je ne les ai pas testé (pas interessé).

Côté look toujours, vous pouvez également oublier les éditeurs qui vous permettent de d'adapter l'apparence de votre site. Une fois encore il va falloir mettre les mains dans le cambouis. Notez qu'il ne serait pas impossible d'avoir un outil localement qui vous permette de gérer votre site et d'en faire un site statique, mais qu'à ma connaissance cela n'existe pas.

Ensuite par défaut, pour n'aurez pas de système de commentaire. Le site étant statique, il n'y a pas de moteur sous le capot permettant de gérer les commentaires. Ce problème est en fait contournable, mais j'y reviendrai plus loin. De manière générale, il vous faudra soit oublier soit trouver une solution pour tout ce qui est dynamique : commentaires, notes, statistique, envoi de message.

Alors vous allez me dire que c'est quand-même extrêmement limité comme outil et que l'on a fait un bond en arrière d'au moins 20 ans... Oui mais non, en fait une partie des limitations n'en sont pas et demande de faire les choses différement. On y reviendra.

Les blogs statiques : pourquoi c'est bien ?

Alors je vous en ai déjà parlé, mais côté sécurité et durabilité c'est le pied. Plus aucun risque de se faire poutrer le site à cause d'une faille sur le logiciel de gestion du site, et ça c'est vraiment énorme. Plus aucune mise à jour à faire, zéro tracas : on écrit, on publie et on oublie.

Ensuite comme votre site est statique, vous pouvez facilement l'héberger à moindre coût chez la totalité des hébergeurs : plus de problème de compatibilité php ou mysql. Vous pouvez également opter pour l'autohébergement : pas besoin d'avoir une bête de course pour faire tourner votre site car il est statique. Le besoin en administration est absolument réduit, c'est le compagnon idéal de l'hébergement sans souci.

Techniquement un site statique offre une capacité à tenir la charge (le nombre de visiteurs) sans pareil, même chez vous avec de petits moyens votre site devrait tourner même avec un pic inattendu de visiteurs (bon, il y a des limites tout de même).

La sauvegarde et la restauration se font les doigts dans le nez. Une simple archive des fichiers et c'est parti. Pas besoin de faire des exports et imports de base de données en croisant les doigts pour que cela soit synchro avec les fichiers. Pour restaurer ? On regénère le site, on renvoie les fichiers, ça prend 2 minutes et on passe à autre chose.

Ok, et comment je fais pour avoir des fonctionalités modernes ???

J'y viens. Tout d'abord sachez que même si le site est statique, le site peut comporter des éléments en css et en javascript. Cela veut dire que techniquement il serait tout à fait possible de faire de l'Ajax avec un site statique, et donc intégrer des bouts de code dynamique côté client.

Les commentaires

Il n'y a pas de moteur de commentaire sur un site statique. Pour avoir des commentaires il vous faut donc passer par un outil extérieur comme Disqus qui est un service de commentaires. N'hésitez-pas à voir le site de Jason Antman pour voir l'intégration en ce service et Pelican. Techniquement, vous insérez un bout de code en javascript dans votre page afin de faire apparaitre le système de commentaire à la fin des articles. Bon côté vie privée c'est pas ça, on peut dire que ça tue des chatons, mais il existe probablement des services communautaires de commentaires (à creuser).

Les statistiques

Vous avez l'embarras du choix pour avoir des stats. Quelque soit l'hébergeur il vous proposera toujours un service de consultation des statistiques de visite de votre site. Dans le cas où vous êtes auto-hébergé, vous avez simplement accès aux logs de votre serveur web et un logiciel comme le vénérable Awstats peut faire l'affaire. Enfin, vous pouvez toujours utiliser une méthode moderne et tueuse de chatons en intégrant un bout de javascript qui fournira des données sur tous vos visiteurs à une entreprise peu soucieuse de la vie privée de vos lecteurs.

Etre contacté

Bon, je vois au moins 2 solutions. La première est de mettre votre adresse électronique et votre contact n'aura qu'a utiliser son client de courriel préféré pour vous joindre. Si cette solution vous ennuie, il est toujours possible de mettre une page dynamique en php qui permet de vous envoyer un message. Après tout, ce n'est pas parce que le site est statique qu'il faut s'interdire d'utiliser un peu de scripts.

Et les modules pour faire xxx ou yyy ?

Les moteurs de blog statique sont comme les moteurs de blog classique. Ils ont des modules qui leur permettent d'avoir des fonctionnalités supplémentaires et des thèmes pour personnaliser votre site. Comme pour les blogs classiques, le choix du logiciel utilisé dépend des modules et des thèmes existants. Par contre il ne faut pas s'attendre à personnaliser son blog en 3 clics, il faudra nécessairement passer par la ligne de commande pour télécharger, installer et configurer ces modules.

Et pelican dans tout ça ?

Et bien c'est l'outil que j'ai choisi pour faire mon blog, et il est écrit en python. Pour le moment j'ai conservé le thème par défaut et tout le reste aussi, je ferais quelques personnalisations ici et là au fur et à mesure. Voici par exemple un article en markdown :

Title: Je passe sur un blog statique ! Date: 2017-05-13 18:51 Category: logiciel Slug: je-passe-sur-blog-statique Tags: logiciel libre, python, blog, planet-libre Après quelques mois de tergiversation je me suis décidé à passer de dotclear à Pelican. Pelican c'est un moteur de blog statique écrit en python qui me permet d'écrire mes articles avec un éditeur de texte quelconque et de "compiler" mes articles pour les transformer en joli blog en html et css (enfin joli quand j'aurai pris du temps pour revoir les css).

Après avoir ecrit l'article, il ne me reste plus qu'a exécuter 2 commandes pour générer et envoyer mon site sur le serveur web:

make html make ssh_upload

Par défaut Pelican possède un système de thème, gère les tags, les catégories, les flux Atom, et tout un tas d'autres trucs classiques pour les blogs, mais j'aborderai cela dans un autre article.

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

Articles similaires

Benoît Boudaud : Python: les fichiers (2/3) – le module os

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.

Lorsque j’ouvre un fichier en mode écriture et que ce dernier n’existe pas, alors il est créé dans le répertoire courant, c’est-à dire à l’endroit ou le script est lancé. Prenons un exemple concret.

#!/usr/bin/env python3 # -*- coding: utf8 -*- bonjour = "Bonjour et bienvenue dans mon antre!" with open('test_file', 'w') as file_: file_.write(bonjour) print(bonjour)

Bonjour et bienvenue dans mon antre!

  • Mon script s’appelle fichier_2.py.
  • Il se trouve dans /home/benoit qui est donc le répertoire courant.
  • Le chemin absolu du script est /home/benoit/fichier_2.py
  • Le chemin relatif est fichier_2.py.
  • Dans ce script, j’ai ouvert (en écriture) un fichier test_file dans lequel j’ai écrit le contenu de la variable bonjour. Le fichier test_file est créé par défaut dans le répertoire courant car j’ai utilisé son chemin relatif.

Si je veux connaitre le répertoire courant, il me faut importer le module os et faire appel à la méthode os.getcwd(). Cela signifie get current working directory. (= obtenir le répertoire courant)

#!/usr/bin/env python3 # -*- coding: utf8 -*- import os cwd = os.getcwd() print(cwd) bonjour = "Bonjour et bienvenue dans mon antre!" print(bonjour)

/home/benoit
Bonjour et bienvenue dans mon antre!

Le répertoire courant, c’est-à dire l’endroit où le script est lancé, est donc /home/benoit. Si je lance le script dans un émulateur de terminal, il me suffit de taper ./fichier_2.py.

terminal_fichier_2

Déplacement du script dans mon dossier /home/benoit/Documents.

À présent, je vais déplacer ce script intitulé fichier_2.py dans mon dossier Documents. Le chemin absolu devient donc:

/home/benoit/Documents/fichier_2.py

Que devient le répertoire courant? Faisons le test en reprenant le code:

#!/usr/bin/env python3 # -*- coding: utf8 -*- import os cwd = os.getcwd() print(cwd) bonjour = "Bonjour et bienvenue dans mon antre!" with open('test_file', 'w') as file_: file_.write(bonjour) print(bonjour) Dans un environnement de développement intégré IDLE3

Si je lance le script à l’aide de l’environnement de développement intégré IDLE3, le répertoire courant devient /home/benoit/Documents. Quant au fichier test_file, il est créé dans ce répertoire courant.

  • Son chemin absolu est donc /home/benoit/Documents/test_file.
  • Son chemin relatif est test_file.
Dans un émulateur de terminal

Par contre, si je lance le script dans un un émulateur de terminal, le répertoire courant est toujours /home/benoit par défaut. Et le fichier test_file est créé dans ce répertoire courant.

  • Son chemin absolu est donc /home/benoit/test_file.
  • Son chemin relatif est test_file.

Pour ce qui est du script fichier_2.py:

  • son chemin absolu est  /home/benoit/Documents/fichier_2.py
  • son chemin relatif devient Documents/fichier_2.py

terminal_fichier_2_2

Tout ceci pour vous dire que cette histoire de répertoire courant peut s’avérer un peu déroutante pour celui qui se lance dans l’apprentissage du Python.

D’aucuns vont me dire qu’il suffit de toujours utiliser le chemin absolu pour ouvrir un fichier mais je crains que ce soit une mauvaise solution. Pourquoi donc? parce que si vous exportez votre programme chez un autre utilisateur, son répertoire courant sera différent (sauf coup de bol) et votre programme ne s’exécutera pas.

Par exemple, le chemin absolu du fichier test_file que je viens de créer en utilisant un émulateur de terminal est : /home/benoit/test_file. Or, tout le monde ne s’appelle pas Benoît. Certains s’appellent Sigismond, Côme, Alceste ou Antiphane. C’est leur droit. Du coup, il y a fort à parier qu’un tel script ne s’exécutera pas (à cause de la ligne 5):

#!/usr/bin/env python3 # -*- coding: utf8 -*- bonjour = "Bonjour et bienvenue dans mon antre!" with open('/home/benoit/test_file', 'w') as file_: file_.write(bonjour)

Personnellement, pour venir à bout de ce problème, je récupère le répertoire courant grâce à la méthode os.getcwd(), je le stocke dans une variable (ligne  6) et je couple cette dernière avec le chemin relatif du fichier (ligne 9).

#!/usr/bin/env python3 # -*- coding: utf8 -*- import os cwd = os.getcwd() print(cwd) bonjour = "Bonjour et bienvenue dans mon antre!" with open(cwd + '/test_file', 'w') as file_: file_.write(bonjour) print(bonjour) Changer de répertoire avec os.chdir() et la commande cd la commande cd fournie par l’interpréteur en ligne de commande Bash

Cette commande bash s’utilise dans un émulateur de terminal et elle permet de modifier le répertoire courant. cd signifie change directory. Je rappelle que le répertoire courant d’un émulateur de terminal est toujours par défaut le répertoire utilisateur (/home/benoit en ce qui me concerne). Pour le modifier, il suffit par exemple de rentrer cd Documents et le répertoire courant deviendra /home/benoit/Documents. Observez la capture d’écran ci-dessous et constatez par vous-même que l’invite de commande à changé : benoit@benoit-GA-880GM-UDH:~/Documents$

cd

La méthode os.chdir()

On peut également modifier le répertoire courant dans le script grâce à la méthode os.chdir(). Là encore, chdir signifie change directory.

Les deux codes ci-dessous exécutent le même programme. Le script fichier_2.py est placé dans /home/benoit tandis que le chemin du fichier test_file est /home/benoit/Documents. Ce sont les lignes 5 et 8-9 qui nous intéressent.

#!/usr/bin/env python3 # -*- coding: utf8 -*- import os os.chdir(os.getcwd() + "/Documents") cwd = os.getcwd() print(cwd) bonjour = "Bonjour et bienvenue dans mon antre!" with open('test_file', 'w') as file_: file_.write(bonjour)

/home/benoit/Documents

#!/usr/bin/env python3 # -*- coding: utf8 -*- import os cwd = os.getcwd() print(cwd) bonjour = "Bonjour et bienvenue dans mon antre!" with open('Documents/test_file', 'w') as file_: file_.write(bonjour)

/home/benoit

Aperçu de quelques méthodes du module os.path()

Le code ci-dessous vous montre quelques méthodes du module os.path, à savoir :

  • abspath() qui retourne le chemin absolu du fichier passé en argument.
  • basename() qui retourne le nom de base du chemin absolu d’un fichier passé en argument.
  • dirname() qui retourne le nom du répertoire parent du fichier passé en argument.
  • split() qui fractionne un chemin absolu passé en argument et retourne un tuple

Ce n’est qu’un aperçu. Il existe d’autres méthodes que je vous invite à découvrir en consultant la documentation officielle.

#!/usr/bin/env python3 # -*- coding: utf8 -*- import os.path os.chdir(os.getcwd() + "/Documents") cwd = os.getcwd() bonjour = "Bonjour et bienvenue dans mon antre!" with open('test_file', 'w') as file_: file_.write(bonjour) absolute_path = os.path.abspath('test_file') basename = os.path.basename(absolute_path) dirname = os.path.dirname(absolute_path) split = os.path.split(absolute_path) print("Répertoire courant = {}".format(cwd)) print("Chemin absolu = {}".format(absolute_path)) print("Nom de base = {}".format(basename)) print("Nom du répertoire parent = {}".format(dirname)) print("Fractionnement du chemin absolu = {}".format(split))

Répertoire courant = /home/benoit/Documents

Chemin absolu = /home/benoit/Documents/test_file
Nom de base = test_file
Nom du répertoire parent = /home/benoit/Documents
Fractionnement du chemin absolu = (‘/home/benoit/Documents’, ‘test_file’)

La méthode os.listdir()

Cette méthode retourne une liste contenant les noms de toutes les entrées d’un répertoire passé en argument. Je vais appliquer par exemple os.listdir() sur un de mes répertoires intitulé mon_jardin.

#!/usr/bin/env python3 # -*- coding: utf8 -*- import os print(os.listdir("/home/benoit/mon_jardin"))

[‘notes_tomates’, ‘note_number’, ‘species.py’, ‘entrylist’, ‘validated’, ‘images_fruits’, ‘images’, ‘legumes’, ‘entrees_agenda’, ‘phototheque.py’, ‘.gitkeep’, ‘images_legumes’, ‘calendrier.py’, ‘accueil.py’, ‘agenda.py’, ‘dossiers_images’, ‘__pycache__’, ‘jardin.desktop’, ‘fruits’, ‘README.md’, ‘module_notes.py’, ‘file_color’, ‘varietes_tomates’]

La méthode os.rename(src, dst)

Renomme le fichier ou le répertoire source (src)  en dst (destination).

#!/usr/bin/env python3 # -*- coding: utf8 -*- import os os.rename("/home/benoit/mon_jardin", "/home/benoit/mon_ordinateur")

mon_ordinateur

La méthode os.remove(path)

Supprime le chemin passé en argument (path). Si path est un répertoire, Python lève une exception. Pour supprimer un répertoire, il faut utiliser la commande os.rmdir() qui ne fonctionne que si le répertoire est vide! Si tel n’est pas le cas, Python lève là-encore une exception!

La méthode os.mkdir(path)

Cette méthode créé un répertoire nommé path.

#!/usr/bin/env python3 import os os.mkdir('/home/benoit/ma_voiture')

ma_voiture


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

Articles similaires

Framablog : Framasoft sur les routes, et sur un nouveau T-shirt !

Un nouveau T-shirt Framasoft (et le mugounet qui va avec) pour briller lors des événements où nous pourrons nous rencontrer sous le soleil du printemps… et de l’été !

Nouveau T-shirt : la route est longue…

Soyons franc·he·s : on n’est pas foutu·e·s de faire un T-shirt.

Voilà plus de deux ans qu’on a changé de logo, et… rien. Ah ça, pour dégoogliser, y’a du monde, hein ! Mais quand il s’agit de pondre un visuel, contacter des fournisseurs, se mettre d’accord un modèle, créer et gérer un stock… y’a plus un GNU à l’horizon !

Alors nous avons choisi la solution de facilité et lancé une campagne chez Keewi.io, le « Ulule du T-shirt ». Le principe : on propose un visuel. Nous, on a choisi de le mettre sur un T-shirt unisexe et sur un mug. On s’est dit comme ça : « Si d’ici le 22 mai, y’a au moins 100 produits pré-commandés, la production est lancée. Sinon, tout le monde récupère ses sous et rentre chez soi. »

Cliquez sur le mug si vous voulez faire une commande

Le 3 mai, nous avons commencé à en parler… exclusivement sur les réseaux sociaux Libres : notre compte Framasphère*, et notre fil Framapiaf. En 24h, les 100 premières pré-commandes étaient atteintes ! Dès le 9 mai, on a fait circuler l’info sur notre fil Twitter et notre page Facebook. Et aujourd’hui : on vous en parle ici !

Après le 22 mai : y’en a plus !

Ben oui, c’est une campagne, et une campagne, ça se termine. Nous, le principe nous va assez bien… vu qu’on expérimente !

L’avantage pour nous est double : ne pas avoir toute la production/vente/distribution à gérer (donc avoir plus de temps pour Dégoogliser), et savoir si ce genre de goodies vous intéressent vraiment, ou si c’est juste un plaisir de l’entre-soi… Et pour l’instant, c’est un succès, plus spécifiquement un succès offert par les « vrai·e·s fans » de Framasoft, a priori.

Ce procédé nous offre en plus l’occasion de faire un prix tout petit (13 € 37, c’est pas un hasard). Nous savons que c’est pas avec des T-shirts qu’on va remplir la marmite, du coup on a choisi de pas beaucoup marger dessus. Là, c’est pour se faire plaisir et pour pouvoir porter des couleurs et une devise qui nous parlent, même si les cordons de la bourse sont assez serrés.

Alors voilà, c’est pas parfait hein, c’est une expérimentation, y’a des inconvénients et défauts, mais c’est mieux que ce que nous faisions jusqu’à présent (à savoir : rien depuis deux ans). Du coup, si vous en voulez, faut se bouger : vous avez jusqu’au 22 mai !

Et si vous cliquez sur le T-shirt, vous tomberez… ben sur la page où on peut le commander.

À propos de route : on sera dessus !

Avec les beaux jours arrivent les festivals qu’on aime bien et où on se retrouve avec délices.

Avec seulement 30 membres et 7 salarié·e·s, notre micro-association a beau se plier en quatre, on ne peut pas être partout !

Néanmoins, vous pourrez nous retrouver…

Alors vu que la voie est Libre, on espère qu’elle sera assez dégagée pour que nous nous rencontrions sans encombres !

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

Articles similaires

citizenz7 : Utilser rsync (+ ssh et sudo) pour copier facilement vos données

​Imaginons : vous avez plusieurs centaines de fichiers et des répertoires entiers à rapatrier depuis votre anciens serveur vers votre nouveau serveur. Pour aller plus vite, l'outil idéal, c'est rsync.

Le wiki Ubuntu nous dit :

rsync (pour remote synchronization ou synchronisation à distance), est un logiciel de synchronisation de fichiers.
Il est fréquemment utilisé pour mettre en place des systèmes de sauvegarde distante.
rsync travaille de manière unidirectionnelle c'est-à-dire qu'il synchronise, copie ou actualise les données d'une source (locale ou distante) vers une destination (locale ou distante) en ne transférant que les octets des fichiers qui ont été modifiés.

Mettons tout cela en place sur notre Debian :
sudo apt install rsync

Il vous faut également ssh (sudo apt install ssh).

Voici un exemple assez complet de rsync :
rsync -av --progress --delete --stats --human-readable -e 'ssh -p xxxx' user@serveurdistant.fr:/home/user/* /home/user/

-a : c'est l'option de la "mort-qui-tue". En fait ça fait tout (ou presque). C'est un moyen rapide de dire que vous voulez la récursivité et préserver pratiquement tout. C'est équivalent aux optissn combinées -rlptgoD.
-v : verbeux
--progress : vous indique la progression de la copie/transfert
--stats : affichage de stats sur le transfert des fichiers
--human-readable : lecture "humaine" des chiffres. Idem à l'option ls -h (transforme en KO, MO, GB, ...)
- e : spécifie un shell distant

Il existe une autre option bien pratique :

 --delete : cette option demande à rsync d'effacer tous les fichiers superflus côté réception (ceux qui ne sont pas du côté envoi); uniquement pour les répertoires synchronisés. Attention toutefois à l'utilser correctement ...

Vous avez "la totale" des options rsync ici :

http://www.delafond.org/traducmanfr/man/man1/rsync.1.html

Résultat ?

Avec la commande utilisée plus haut, une fois rentré le mot de passe de l'utilisateur distant (en ayant précisé un éventuel port ssh au cas où le serveur ssh ne tournerait pas sur le traditionnel port 22), rsync va "copier" tous les fichiers du répertoire /home/user (/home/user/*) depuis le serveur distant VERS votre nouveau serveur dans le répertoire /home/user.

Il peut arriver que certains répertoires ou fichiers ne puissent être récupérés pour des questions de droits. Il va alors falloir, sur le serveur distant, configurer sudo

Sur le serveur distant, si sudo n'est pas installé :
sudo apt install sudo 

Il faut configurer sudo :
sudo visudo

Nous allons rajouter dans le fichier la ligne suivante (où vous voulez) :
user ALL= NOPASSWD:/usr/bin/rsync 

Evidemment, changez "user" par votre véritable nom/pseudo... C'est le truc con qui arrive quand on fait des copier/coller. Je dis ça, car je suis le roi du "Ca marche pas... pourquoi ... Oh M.... ! J'ai pas changé user / mondomaine.com !"

Puis on va utiliser l'option "--rsync-path" pour préciser à rsync de démarrer avec l'option sudo :
rsync -av --progress --stats --human-readable --rsync-path="sudo rsync" -e "ssh -p xxxx" useronremoteserver@remoteserver:/data/to/sync /archive/data/

Et hop, là, plus de soucis on récupère tous les répertoires et fichiers.

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

Philippe Scoffoni : Thunderbird reste chez Mozilla

Mozilla ThunderbirdLa vie n’est pas toujours un long fleuve tranquille. J’aurais même tendance à dire que c’est rarement le cas y compris pour les projets de logiciel libre comme Thunderbird. Depuis de nombreux mois, des incertitudes pèsent sur la pérennité du projet.

Pourtant, il continue d’exister et d’évoluer à son rythme avec la sortie fin avril de la version 52. Certes, on ne peut pas dire que ce soit à une vitesse folle. Mais l’essentiel est préservé et quelques nouveautés contribuent à améliorer son fonctionnement.

Suite à la décision de Mozilla de rendre sa liberté au projet, une étude a été réalisée par Simon Phipps bien connu dans le monde du logiciel libre et de l’open source pour étudier les opportunités existantes. Trois possibilités s’offraient alors ;

Des trois options, celle de The Document Foundation me semblait la plus intéressante. L’intégration de Thunderbird et de son agenda Lightning dans la suite bureautique LibreOffice avait une certaine cohérence sur le plan « marketing » face à la suite bureautique de Microsoft. Cependant dans cette réflexion l’aspect marketing n’était pas le seul en jeu.

Après de longs mois de réflexion et d’échanges, c’est au final une sorte de statu quo qui s’impose dans un communiqué publié sur le blog de Mozilla.

The Mozilla Foundation has agreed to serve as the legal and fiscal home for the Thunderbird project, but Thunderbird will migrate off Mozilla Corporation infrastructure, separating the operational aspects of the project.

La fondation Mozilla reste l’entité légale et fiscale qui porte le projet Thunderbird. Cependant, les aspects « opérationnels » vont être gérés en dehors de l’infrastructure technique de Mozilla.

L’année qui s’est écoulée a permis au projet de mettre en place ses propres flux de revenus, principalement des dons, gagnant ainsi une autonomie indispensable à la poursuite du projet.

Il reste cependant quelques points d’achoppement dans les divergences techniques entre le projet Thunderbird et son grand frère Firefox. Cependant, un changement d’entité légale n’aurait rien changé à cet état de fait, il est vrai. Le « Conseil Thunderbird » a donc jugé préférable de se concentrer sur le développement de Thunderbird plutôt que de passer du temps sur un changement purement juridique. L’essentiel de ce côté étant préservé par le récent accord avec Mozilla.

Pour la suite des événements, Thunderbird sera maintenu sur la plateforme technique actuelle Gecko. À long terme, une réécriture complète de ce dernier est envisagée. La technologie sera « web » ce qui reste vague même si on comprend bien qu’il ne s’agira plus d’un client « lourd » traditionnel.

Je pense que tous les utilisateurs de Thunderbird peuvent dormir sur leurs deux oreilles, leur logiciel préféré n’est pas mort même si je ne pense pas qu’il faille s’attendre à de grandes évolutions. Mais ce qu’il fait déjà, il le fait bien. En exploitant toutes les possibilités existantes couplées à des services web basés sur des logiciels libres comme Nextcloud pour les agendas, contacts et partage de fichiers ou Dolibarr pour la gestion, vous obtenez une solution qui n’a rien de celle du « pauvre » !

Réagir à cet article

Article original écrit par Philippe Scoffoni le 11/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

Max Koder : Exécuter une requête asynchrone avec PHP et cURL

Exécuter une requête asynchrone avec PHP et cURL

Je vous parlais de cURL et d’API il y a quelques jours. Aujourd’hui, j’enfonce le clou avec une méthode que j’expérimente pour un futur projet : Comment exécuter une requête asynchrone avec PHP et cURL.

L’origine du problème

Pour rappel, PHP est un langage de programmation séquentiel, impératif ou encore synchrone. C’est à dire qu’à l’exécution d’un script, il va exécuter chaque instruction séquentiellement, l’une après l’autre.
Avant de passer à la suivante, il attendra obligatoirement le résultat de la dernière instruction.

De plus, le protocole HTTP est également synchrone. Cela signifie qu’à chaque requête, le navigateur attend une réponse qu’il va ensuite afficher.

Dans la plupart des cas, ce fonctionnement suffit. L’utilisateur souhaite accéder à une ressource ou la mettre à jour : Pas de problème, la réponse est envoyée dans la foulée. Mais ce n’est pas toujours suffisant.

Quel problème ?

Je l’ai dit : Généralement le fonctionnement séquentiel est suffisant pour nos besoins. Mais il y a des tas de raisons pour vouloir faire de l’asynchrone avec PHP : Écriture de logs, de nombreux UPDATE à la DB, lancement d’une requête cURL à une API, envoie d’un pouet sur Mastodon lorsque j’écris une news, … Ces opérations peuvent être longues et donc donner la sensation aux visiteurs que votre serveur est en rade, ou que votre script est à chier.

Comprenez bien que si vous, en tant que visiteur, ne voulez pas attendre qu’une page s’affiche, il en est de même pour les usagers qui viendront sur votre site.

La requête asynchrone

La solution à cela est en effet la requête asynchrone. Pendant que votre script enregistre les logs ou se connecte à une API, il est inutile de faire attendre l’utilisateur.
On va donc chercher à faire travailler PHP en fond sur ces tâches lourdes, et continuer nos instructions plus légères jusqu’à l’envoi de la réponse au navigateur.

Plusieurs méthodes possibles

Il existe en fait d’autres approches que celle que je vais vous présenter :

  • fsockopen : ou stream_socket_client. Permet d’ouvrir une connexion par socket, afin d’enregistrer par exemple des données avec fwrite.
  • exec : Cette fonction permet de lancer une instruction, comme si vous la tapiez dans un terminal. En ajoutant un &  à la fin de cette ligne de commande, l’exécution sera réalisée en tâche de fond et PHP n’attendra pas le résultat avant de continuer le script.
  • pg_send_query : Celle-ci supporte une ou plusieurs requêtes asynchrones à une connexion PostgreSQL. A ma connaissance, il n’existe pas d’équivalent pour MySQL.
  • curl_multi_init : Enfin, cette dernière autorise l’exécution de multiples gestionnaires cURL de façon asynchrone.

Pour ma part, voilà comment je procède.

Une requête asynchrone avec PHP et cURL

Le principe est simple si vous connaissez un peu la librairie cURL. Il suffit de lancer une requête cURL à laquelle on définit un timeout, afin que PHP n’attende pas la réponse et passe à la suite :

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, ' curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1000); curl_exec($ch); curl_close($ch);

Oui, c’est tout.
L’option intéressante est

CURLOPT_TIMEOUT_MS , qui permet de définir un temps maximum d’exécution de la fonction cURL, en millisecondes. A la seconde près

J’ai mis 1000, soit une seconde. Cela permet de ne pas trop gêner le visiteur mais c’est aussi le délai minimum pour la résolution du hostname sur les systèmes Unix/Linux, sans quoi une erreur 28 (timeout) sera envoyée à PHP :

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, ' curl_setopt($ch, CURLOPT_TIMEOUT_MS, 10); curl_exec($ch); echo curl_errno($ch); curl_close($ch); // 28

En faisant mes recherches, j’ai trouvé quelques articles qui mettaient une valeur de 1ms. Je ne sais pas sur quel type de serveur ils tournent, mais ça ne fonctionne pas, vous pouvez essayer.

Outrepasser cette limite

Mais on peut le faire !
Malheureusement ces articles n’en parlent pas, alors j’ai cherché pour vous

En effet, avec l’option CURLOPT_NOSIGNAL, on peut ignorer les fonctions qui causent l’envoi d’un signal au processus PHP :

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, ' curl_setopt($ch, CURLOPT_TIMEOUT_MS, 10); curl_setopt($ch, CURLOPT_NOSIGNAL, 1); curl_exec($ch); curl_close($ch);

Un cas concret

A présent, voyons comment cela peut nous être utile.

Imaginons un réseau social décentralisé (parait que c’est la mode), où chaque utilisateur peut suivre n’importe qui sur n’importe quelle instance. Le B.A.-BA en somme.
Lorsqu’un utilisateur, suivi par 100 personnes, poste un nouveau contenu, comment géreriez-vous cela ? Comment informer les 100 autres utilisateurs, possiblement sur 100 instances différentes, que notre bon utilisateur a posté quelque chose ? Et surtout, sans gêner l’auteur du post.
Avec cURL et notre pseudo méthode asynchrone, c’est possible.

Il suffit d’appeler une page sur le même domaine/serveur, qui traitera ces 100 requêtes cURL par exemple, en tâche de fond, à la manière d’une tâche CRON.
Pour l’utilisateur, rien ne transparaît, et le message peut se répliquer tranquillement sur chaque instance sans craindre un timeout execution.

L’article Exécuter une requête asynchrone avec PHP et cURL 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

Framablog : Quand les recommandations YouTube nous font tourner en bourrique…

Vous avez déjà perdu une soirée à errer de vidéo en vidéo suivante ? À cliquer play en se disant « OK c’est la dernière… » puis relever les yeux de votre écran 3 heures plus tard… ?

C’est grâce à (ou la faute de, au choix !) l’algorithme des recommandations, une petite recette qui prend plein d’éléments en compte pour vous signaler les vidéos qui peuvent vous intéresser.

Guillaume Chaslot a travaillé sur cet algorithme. Il a même créé un petit outil open-source pour le tester, afin de valider sa théorie : ces recommandations nous pousseraient de plus en plus vers les « faits alternatifs » (ça s’appelle aussi une légende urbaine, un complot, une fiction, du bullshit… vous voyez l’idée.)

Le groupe Framalang a décidé de traduire cet article passionnant.

Ne soyons pas complotistes à notre tour. Cet article ne dit pas que Google veut nous remplir la tête de mensonges et autres légendes numériques. Il s’agirait là, plutôt, d’un effet de bord de son algorithme.

Nous ne doutons pas, en revanche, qu’un des buts premiers de Google avec ses recommandations YouTube est de captiver notre attention, afin de vendre à ses clients notre temps de cerveau disponible (et d’analyser nos comportements au passage pour remplir ses banques de données avec nos vies numériques).

Sauf qu’avec ce genre de vision (et de buts) à court/moyen terme, on ne réfléchit pas au conséquences sur le long terme. Lorsque l’on représente l’endroit où une grande portion de notre civilisation passe la majeure partie de son temps… C’est problématique, non ?

Tout comme les révélations de Tristan Harris, ce témoignage nous rappelle que, même chez les géants du web, notre monde numérique est tout jeune, immature, et qu’il est grand temps de prendre du recul sur les constructions que nous y avons dressées : car chacun de ces systèmes implique ses propres conséquences.

“The things you own end up owning you » de koka_sexton sous licence CC BY 2.0
(« Ce que vous possédez finit par vous posséder », une citation de Fight Club)

Comment l’I.A. de YouTube favorise les « faits alternatifs »

de Guillaume Chaslot, source : Medium.

Traduction : Jerochat, jaaf, dominix, mo, goofy, Asta, Opsylac, Nimanneau, audionuma, Lyn. + les anonymes

Les I.A. sont conçues pour maximiser le temps que les utilisateurs passent en ligne… Et pour ce faire, la fiction, souvent, dépasse la réalité.

Tout le monde a déjà entendu parler des théories du complot, des faits alternatifs ou des fake news qui circulent sur Internet. Comment sont-ils devenus si répandus ? Quel est l’impact des algorithmes de pointe sur leur succès ?

Ayant moi-même travaillé sur l’algorithme de recommandation de YouTube, j’ai commencé à enquêter, et je suis arrivé à la conclusion que le puissant algorithme que j’avais contribué à concevoir joue un rôle important dans la propagation de fausses informations.

Pour voir ce que YouTube promeut actuellement le plus, j’ai développé un explorateur de recommandations open source qui extrait les vidéos les plus recommandées sur une requête donnée. Je les ai comparées aux 20 premiers résultats venant de requêtes identiques sur Google et Youtube Search.
Les résultats sur les 5 requêtes suivantes parlent d’eux-mêmes :

1 — Question élémentaire : « La Terre est-elle plate ou ronde ? »

2 — Religion : « Qui est le Pape ? »

Pourcentage des résultats à propos du pape affirmant qu’il est « le mal », « satanique », « l’antéchrist »

3 —Science : « Le réchauffement climatique est-il une réalité ? »

Pourcentage des résultats affirmant que le réchauffement climatique est un canular

4 —Conspirations : “Est-ce que le Pizzagate est vrai ?”

Le Pizzagate est une théorie du complot selon laquelle les Clinton auraient été à la tête d’un réseau pédophile en lien avec une pizzeria de Washington. Des vidéos faisant la promotion de cette théorie ont été recommandées des millions de fois sur YouTube pendant les mois précédant l’élection présidentielle américaine de 2016.

5 — Célébrités : “Qui est Michelle Obama ?”

Pourquoi les recommandations sont-elles différentes des résultats de recherche ?

Dans ces exemples, une recherche YouTube et une recommandation YouTube produisent des résultats étonnamment différents, alors que les deux algorithmes utilisent les mêmes données. Cela montre que de petites différences dans les algorithmes peuvent produire de grosses différences dans les résultats. La recherche est probablement optimisée dans un objectif de pertinence, alors que les recommandations prennent sûrement davantage en compte le temps de visionnage.

YouTube ne recommande pas ce que les gens « aiment ».

Étonnamment, on remarque que les « j’aime » ou « je n’aime pas » (pouce bleu ou rouge) ont peu d’impact sur les recommandations. Par exemple, beaucoup de vidéos qui prétendent que Michelle Obama est « née homme » ont plus de pouces rouges que de bleus, et pourtant elles sont toujours fortement recommandées sur YouTube. Il semble que YouTube accorde davantage d’importance au temps de visionnage qu’aux « j’aime ».

Ainsi, si « la Terre est plate » maintient les utilisateurs connectés plus longtemps que « la Terre est ronde », cette théorie sera favorisée par l’algorithme de recommandation.

L’effet boule de neige favorise les théories du complot.

Une fois qu’une vidéo issue d’une théorie du complot est favorisée par l’I.A., cela incite les créateurs de contenus à charger des vidéos supplémentaires qui confirment le complot. En réponse, ces vidéos supplémentaires font augmenter les statistiques en faveur du complot. Et ainsi, le complot est d’autant plus recommandé.

Finalement, le nombre important de vidéos qui soutiennent une théorie du complot rend cette dernière plus crédible. Par exemple, dans l’une des vidéos sur le thème de « la terre plate », l’auteur a commenté

« Il y a 2 millions de vidéos sur la « terre plate » sur YouTube, ça ne peut pas être des c*** ! »

Ce que nous pouvons faire

L’idée ici n’est pas de juger YouTube. Ils ne le font pas intentionnellement, c’est une conséquence involontaire de l’algorithme. Mais chaque jour, les gens regardent plus d’un milliard d’heures de contenu YouTube.

Parce que YouTube a une grande influence sur ce que les gens regardent, il pourrait également jouer un rôle important en empêchant la propagation d’informations alternatives, et le premier pas vers une solution serait de mesurer cela.

Faites des expériences avec l’explorateur de recommandations si vous souhaitez découvrir ce que YouTube recommande le plus au sujet des thèmes qui vous tiennent à cœur.

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

Articles similaires

genma : Pour travailler avec moi au sein de mon équipe...

Ce billet vient en complément de mon billet Je suis chef d'équipe ; tu nous rejoins ?.

Pour travailler avec moi au sein de mon équipe et sous ma direction, je recherche une personne expérimentée, ingénieure ou autodidacte, qui aime et connaît bien les technologies du logiciel libre.

Tu fais de la veille et tu es arrivé sur ce billet de blog via ton agrégateur... Tu es tout à fait capable de gérer plusieurs sujets en parallèle, tu es vraiment organisée (adepte de méthodologie de lifehacking comme GTD ou Pomodoro bienvenue). Tu rédiges des tutoriaux, ton propre wiki pour tes projets personnels (autohébergement ou autre), tu contribues au logiciel libre... Tu es la personne que je recherche !

Tu as envie de changer, tu veux de la reconnaissance de tes véritables compétences et tu veux débuter une nouvelle carrière. Tu veux travailler dans le monde du logiciel libre ?

Mon objectif est de consolider et renforcer mon équipe avec des personnes supplémentaires, sur lesquelles je peux m'appuyer pour qu'ensemble nous relevons et réussissions les défis de projets en cours et à venir. Je ne te cache pas que ce ne sera pas facile tous les jours, les journées passent vite... Je serai exigeant mais aussi à l'écoute, je jouerai mon rôle de leader et chef d'équipe, pour que nous puissions tous nous épanouir au sein de notre travail quotidien (Voir à ce sujet mes différents billets , Je suis chef d'équipe ; tu nous rejoins ? et Vous voulez que vos employés s'épanouissent ?).

Mais mon expérience dont je témoigne ici est toujours et on ne peut plus vrai.

Regarde ici les annonces ici sur Linuxjobs, ça te donnera une idée des postes à pourvoir. En ce qui concerne mon équipe, les termes Intégrateur, Administrateur système, Messagerie, Identité sont les mots clefs. Si toutefois rien te correspond car tu es atypique, envoie une candidature spontanée. Prépares un CV et une lettre de motivation, et surtout ton entretien avec moi. Je serai exigeant, je validerai que tu corresponds bien au profil que je cherche.

Pour répondre aux questions fréquentes : pas de télétravail, travail à Paris la Défense (c'est là que je suis). Junior accepté si tu te reconnais dans le profil que j'ai décrit et que tu sais démontrer ton potentiel. Tu rejoindras alors les pandawans !

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

Tuxicoman : Blender : comparaison de performance OpenCL & AMD / Cuda & Nvidia

Blender donne maintenant de meilleures performances de calcul avec les cartes AMD que Nvidia.

Comparaison des temps de rendu avec accélération GPU (OpenCL sur AMD, Cuda sur Nvidia) pour carte graphique de même prix :

A noter qu’il vous faut une carte AMD GCN 2.0 pour en profiter : R9 290/290X, RX 480 et plus récentes.

Il faut remercier AMD qui a aidé au développement de Blender pour arriver à ce résultat.

Source : Wiki Blender.

Related Posts:

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

Articles similaires

nIQnutn : ownCloud / Nextcloud : sauvegarder ses contacts et ses calendriers

Une petite astuce qui pourra vous être utile pour sauvegarder vos contacts et calendriers sur ownCloud / Nextcloud.
Pas besoin d'installer un utilitaire, on utilisera simplement un navigateur web.

Sauvegarder ses contacts

Pour exporter les données au format vCard (exemple: contacts-2017-05-10.vcf)
Entrer dans votre navigateur l'URL suivante:

# Pour Nextcloud 11 https://ADDRESS/remote.php/dav/addressbooks/users/USERNAME/ADDRESSBOOKNAME?export # Pour ownCloud 9 https://ADDRESS/remote.php/carddav/addressbooks/USERNAME/ADDRESSBOOKNAME?export

en prenant le soin de remplacer:

  • ADDRESS: le nom de domaine de votre instance
  • USERNAME: le nom d'utilisateur
  • ADDRESSBOOKNAME: le nom du carnet d'adresse

Chez moi, pour le carnet d'adresses par défaut, ça ressemble à:

# Pour Nextcloud 11 https://niqnutn.com/remote.php/dav/addressbooks/users/nIQnutn/contacts?export # Pour ownCloud 9 https://niqnutn.com/remote.php/carddav/addressbooks/nIQnutn/contacts?export Sauvegarder ses calendriers

Pour exporter les données au format iCalendar (exemple: personal-2017-05-10.ics)
Entrer dans votre navigateur l'URL suivante:

# Pour Nextcloud 11 https://ADDRESS/remote.php/dav/calendars/USERNAME/CALENDARNAME?export # Pour ownCloud 9 https://ADDRESS/remote.php/caldav/calendars/USERNAME/CALENDARNAME?export

en prenant le soin de remplacer:

  • ADDRESS: le nom de domaine de votre instance
  • USERNAME: le nom d'utilisateur
  • CALENDARNAME: le nom de l'agenda

Chez moi, pour l'agenda par défaut, ça ressemble à:

# Pour Nextcloud 11 https://niqnutn.com/remote.php/dav/calendars/nIQnutn/personal?export # Pour ownCloud 9 https://niqnutn.com/remote.php/caldav/calendars/nIQnutn/personal?export Ressources 2016 nIQnutn CC-BY

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

Okki : Sortie de Corebird 1.5

Pour ceux qui ne seraient toujours pas passés à Mastodon, réseau social décentralisé de micro-blogage, Corebird vient de sortir une nouvelle version de son client Twitter.

Corebird 1.5

Parmi les différentes nouveautés qu’offre cette nouvelle version, nous pouvons citer :

  • La possibilité de sauvegarder un média en effectuant un clique droit sur ce dernier, puis en choisissant Sauvegarder sous.
  • Si aucune bannière n’est configurée, Corebird utilisera la couleur du thème indiquée dans le profil du compte Twitter.
  • La fenêtre de composition comporte désormais une liste d’images préférées permettant d’insérer rapidement dans un tweet des images que l’on envoie souvent.
  • Lors de l’ouverture d’un média, la fenêtre affiche désormais des contrôles Précédent / Suivant permettant de basculer rapidement entre les différents médias d’un même tweet.
  • Suite à la fermeture du service, la prise en charge de Vine a été supprimée.
  • On peut désormais faire des sélections de texte dans les messages directs.
  • Un nouveau paramètre –account permet d’ouvrir l’application sur le compte spécifié.
  • Prise en charge des tweets contenant jusqu’à 50 utilisateurs.
  • Ajout d’une icône sur l’avatar des utilisateurs dont le compte est certifié.
  • L’interface utilisateur pour la création de compte a été retravaillée.
  • Sans oublier les éternelles corrections de bugs :)

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

Articles similaires

Okki : 3000 évaluations sur ODRS

L’Open Desktop Ratings Service (ODRS) est un service en ligne qui offre aux différentes logithèques (telles que Logiciels) la possibilité de récupérer des évaluations d’applications ou d’en proposer de nouvelles, permettant ainsi aux utilisateurs de se faire un avis avant d’installer une application.

Évaluations de l’application Darktable dans Logiciels 3.22

Le service a récemment dépassé les 3000 évaluations en plus d’une centaine de langues ; le tout concernant plus de 600 applications. Plus de 4000 personnes ont également cliqué sur le bouton permettant d’indiquer si une évaluation leur a été utile ou non, permettant ainsi d’affiner l’ordre d’affichage des différentes évaluations. Depuis la mise en place du service, 37 évaluations ont été signalées pour abus, dont 15 ont été supprimées pour injures ou racisme.

Enchaînons sur quelques graphiques intéressants, à commencer par le nombre de requêtes par mois.

Nombre de requêtes par mois

Suivi par le nombre de personnes soumettant de nouvelles évaluations. Comme on peut le constater, avec seulement 350 personnes durant les derniers mois, le niveau est bien inférieur au nombre de personnes qui se contentent de les afficher.

Nombre de personnes soumettant de nouvelles évaluations chaque mois

Le dernier montre les distributions GNU/Linux utilisées pour la soumission des évaluations. On remarquera la prédominance de Fedora et l’absence d’Ubuntu, qui utilise son propre système plutôt que l’ODRS. Quant à Debian, qui ne propose pas Logiciels dans sa version stable actuelle (Jessie), le taux devrait sans doute rapidement augmenter maintenant que la future version stable (Stretch) a atteint son gel complet et que de plus en plus d’utilisateurs vont l’essayer.

Provenance des évaluations

N’hésitez donc pas à soumettre de nouvelles évaluations en français, de noter les applications en cliquant sur les petites étoiles ou d’indiquer si oui ou non les évaluations d’autres utilisateurs vous ont été utiles.

Et si vous souhaitez vous investir plus encore, sachez que Richard Hughes est à la recherche de modérateurs. Vous pouvez le contacter par email ou sur IRC (hughsie@freenode). Étant donné qu’il semble être tout seul pour le moment, ça ne serait pas du luxe d’avoir au moins un modérateur pour les évaluations en français.

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

Okki : Liste des projets acceptés pour le Google Summer of Code 2017

Google Summer of Code

Tous les ans, plutôt que de passer l’été à vendre des beignets sur la plage, Google permet à des étudiants de travailler sur des projets libres. Le fameux Google Summer of Code.

Cette année, 20 projets GNOME ont été acceptés :

  • Agenda : ajout de la prise en charge des tâches récurrentes.
  • Builder : trois étudiants travailleront sur l’environnement de développement du projet GNOME. Le premier sera en charge d’implémenter la navigation dans le code et de pouvoir effectuer des recherches globales de symboles. Un deuxième étudiant sera en charge de proposer de la documentation lors de l’écriture de code ou en cliquant sur une portion de code. Quant au dernier étudiant, il aura pour objectif d’améliorer le complètement automatique dans le but d’obtenir un fonctionnement plus proche de celui de Vim, pour trouver une correspondance après le mot ou le curseur.
  • Comptes en ligne : amélioration de la prise en charge de Nextcloud en proposant une liste d’hébergeurs si l’utilisateur ne dispose pas déjà de son propre compte. Amélioration de l’intégration au sein de Fichiers en ajoutant des options dans le menu contextuel ou en modifiant les icônes.
  • Disques : implémentation du redimensionnement et de la réparation des systèmes de fichiers.
  • Fichiers : réécriture de la gestion des entrées-sorties pour de meilleures performances. Amélioration de la recherche en utilisant toutes les possibilités offertes par Tracker, ce qui devrait offrir de nouveaux critères de recherche.
  • GJS : réécriture de certaines parties en Rust dans le but de réduire ou d’éliminer les fuites de mémoire et d’augmenter la sécurité.
  • GNOME Keysign : implémentation du transfert de clés par Bluetooth.
  • GNOME Shell : ajout de nouvelles fonctionnalités utiles et peaufinage de l’interface.
  • Jeux : possibilité de configurer clavier et manettes de jeu depuis l’application, ainsi que la prise en charge complète de la Nintendo DS et des différentes fonctionnalités inhérentes à cette console : double écran tactiles, fermeture de la console pour résoudre certains puzzles, rotation de l’écran…
  • Journaux : amélioration de la recherche, possibilité de filtrer les entrées redondantes ou de fournir des résultats au shell de GNOME.
  • Pitivi : mise en place d’un système de greffons et développement de plusieurs greffons qui seront fournis par défaut : console du développeur, marqueurs de la piste de montage et transitions automatiques. Ajout d’une interface utilisateur pour créer facilement un effet Ken Burns. Ajout d’une interface de correction de couleur utilisant trois roues chromatiques pour les ombres, les tons foncés et les tons clairs.
  • Mutter : suppression de la dépendance obligatoire à X11 pour les sessions Wayland.
  • Recettes : implémentation du partage de la liste de commissions vers l’application mobile Todoist.
  • To Do : implémentation de la prise en charge de Todoist.

Notez qu’il ne s’agit que de la liste des projets qui ont été acceptés. Il n’y a aucune garantie sur le fait que les étudiants pourront mener leur projet à terme, et que la qualité du travail soit suffisamment bonne pour qu’il soit un inclus dans les différentes applications.

Rien ne dit que nous retrouverons donc toutes ces fonctionnalités dans la prochaine version de GNOME.

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

Articles similaires

genma : Conférence gesticulée - « Informatique ou libertés ? » - Lunar

Présentation de la vidéo

Première représentation publique (avec tous ses défauts) enregistrée à l'amphi Donzelot (Université Rennes 1) le 28 février 2017 dans le cadre d'une CryptoParty co-organisée par la bibliothèque de l'INSA Rennes, le SCD de l'Université de Rennes 1 et l'association Actux. https://informatique-ou-libertes.fr/

Travailler, s'informer, jouer, vivre ses amitiés, se soigner, consommer ou se révolter... Quel contrôle avons-nous sur ces ordinateurs devenus omniprésents ? À qui facilitent-ils vraiment la vie ?

L'apparente complexité technique cache des enjeux politiques. Lunar partage dans sa conférence vingt ans d'expérience technique et militante pour nous aider à y voir clair et à nous organiser.

Vidéo à voir et télécharger ici : Conférence gesticulée - « Informatique ou libertés ? » - Lunar

La critique de Genma

La vidéo est longue, plus de 2 heures pour voir son intégralité. Mais je ne peux que vous conseiller de prendre ce temps là pour la voir.

Je ne suis pas très familier avec le concept de Conférence gesticulée, je ne m'attarderai donc pas sur ce sujet. De ce que j'en comprends à travers le prisme de cette vidéo, c'est que c'est une sorte de pièce de théâtre, de one-man show. Il n'y aucune note, aucun support, ce n'est pas une conférence. Une interaction avec le public est possible : sondage à main lever, petite réflexion ou phrase d'humour, pour interpeller le spectateur... Il y a une alternance entre la station debout, assise, un déplacement dans l'espace.

Lunar joue des scénettes de théâtre, il raconte une histoire, il lit un livre. Dans sa conférence, Lunar nous raconte une histoire, son histoire. Sa découverte de l'informatique, d'Internet avant les années 2000 et en utilisant des métaphores de son expérience auto-stoppeur, de libriste et d'autres expériences riches et enrichissantes...

Tout cela lui permet d'aborder un certains nombres de sujet, de comment marche Internet, son évolution, qu'est-ce que le logiciel libre... Pour en arriver à aborder les problématiques de l'Informatique ou des libertés.

Originalité, créativité, indispensable, ce sont trois mois que j'utiliserai pour qualifier cette vidéo et conclure. Car je n'en dirais pas plus, je vous renvoie vers la vidéo Conférence gesticulée - « Informatique ou libertés ? » - Lunar. A voir de toute urgence.

Merci à Framasoft d'avoir mis cette vidéo à disposition de tous et toutes.

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

Tuxicoman : Debian 8.8

Mise à jour pour la version stable de Debian qui passe à la version 8.8

Vous trouverez ici la liste des changements en français. Comme d’habitude, principalement des corrections de bugs et de sécurité.

A noter la suppression du paquet Owncloud car il était obsolète. Il faut maintenant l’installer à la main (voir passer à Nextcloud)

N’oubliez pas que pour bénéficier de la mise à jour du noyau, il faut redémarrer la machine.

 

Related Posts:

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

Articles similaires

alterlibriste : Lancement de RadioWiki, la radio des libristes

Aujourd’hui est née une nouvelle web radio qui a pour but de promouvoir le libre et l’open source.

Son créateur a contacté l’équipe du Planet-Libre afin de pouvoir relayer les informations diffusées dans les articles publiés sur le site.

Je relaie donc son message d’annonce de présentation :

Radiowiki se veut être une radio qui diffuse des informations à destination des communautés du Libre et de l’Open Source mais elle se veut aussi "généraliste" avec des rubriques plus traditionnelles (des informations nationales, de la météo, des infos cinéma...) et, bien évidement de la musique !

Le contenu "Informatique et Open Source" prend encore peu de place mais il y a déjà quelques news, l’Agenda du Libre et des emplois (Linuxjobs.fr) !

Il y a deux façons d’écouter Radiowiki :

* au travers d’un mini-site web avec lecteur intégré, à l’adresse http://radiowikifr.playtheradio.com

* en intégrant directement le flux http://listen.radionomy.com/radiowikifr dans un lecteur approprié tel Radiotray pour Linux.

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

Pages