Planet Libre

Planet Libre : Brèves du Planet Libre - lundi 14, mars 2016

Où en est la version GNU/Linux de Firefox côté performances ? - Journal sur LinuxFR.org Firefox Linux

antistress : Vous l'avez peut-être remarqué, différentes fonctionnalités sont dans les tuyaux tandis que certaines sont déjà activées – mais à un rythme différent selon les systèmes d'exploitation. D'où l'idée de faire le point sur ce qui est déjà implémenté et activé, déjà implémenté mais pas activé, ou pas encore implémenté… En bonus, un comparatif des performances du mode multi-processus selon les OS et selon les navigateurs.

Google applique le droit à l'oubli à toutes les recherches faites en Europe - Numerama CNIL Google anonyme oubli recherche pistage

antistress : "Les nouvelles règles de Google en matière de droit à l'oubli entrent en vigueur cette semaine. Désormais, les résultats n'apparaîtront plus que si l'on effectue ses recherches en dehors de l'Union européenne. Suffisant pour satisfaire la CNIL ?"

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

Articles similaires

Philippe Scoffoni : Installation de MyPads sur Debian 8

logo_mypadsVendre du MyPads ?

Allons droit au but, si je me lance dans cette installation c’est dans l’idée d’évaluer la faisabilité de proposer un service payant basé sur ce logiciel. Pour l’instant, j’en suis aux premières expérimentations. De nombreuses questions sont encore en suspens tant sur le plan technique que commercial.

Comment facturer ce service ? Une facturation au compte utilisateur impliquerait d’interdire les pads publics, sinon comment comptabiliser les utilisateurs :-) ?

Le nombre de pads créés pourrait être un autre critère, mais là aussi ce n’est pas évident si l’on permet des pads publics. Il me semble que c’est plus le nombre d’utilisateurs qui génère la charge machine  que le nombre de pads créé. Un pad public utilisé par 200 personnes ce ne doit pas être rien en terme de charge.

Reste la solution, et c’est peut-être la plus simple, de mettre à disposition des instances dédiées avec des ressources allouées. Ce sont elles qui limiteront de fait les capacités d’usage de MyPads. L’avantage est de ne pas avoir à se soucier du nombre d’utilisateurs. En effet, il peut y avoir des utilisateurs ponctuels, réguliers, etc. De plus l’ouverture de pads publics redevient envisageable.

J’ouvrirais probablement une bêta avec des comptes ou instances gratuites pour voir un peu le comportement en charge de l’engin. En attendant, je vais déjà l’utiliser dans le cadre de mes prestations ou de projets en lien avec la formation.

Reste à savoir s’il y a un marché pour ce type d’offre… Face aux Google Apps ou à Office 365 dont les fonctionnalités sont bien plus avancées, j’ai quelques doutes… Mais il y a peut-être une micro-niche dans le domaine de l’éducation ou de la formation.

Mais commençons par le début : la mise en place. Je procède à un installation dans un serveur virtuel sous Proxmox 3 et une machine virtuelle OpenVZ équipé d’une Debian 8.

Installer Etherpad

C’est la première étape, MyPads a été développé comme un module complémentaire du logiciel libre Etherpad. Framasoft a déjà pensé à nous et met à disposition un tutoriel pour l’installation d’Etherpad. Si je prends, je donne, allez voir sur la page mécènes, vous y trouverez ma société :-) . Je suggère fortement à toutes les entreprises qui utilisent Mypads sur leurs serveurs d’en faire autant.

Etherpad est basé sur NodeJS. Ce dernier est disponible dans les dépôts de Debian 8 ce qui n’est pas le cas pour la version 7. Il vous faudra procéder comme expliqué sur le tutoriel de Framasoft dans ce dernier cas. Donc pour NodeJS :

apt-get install nodejs

et pour Node Package Manager :

apt-get install npm

Toujours rien de bien difficile. Continuons de suivre le tutoriel en créant un utilisateur dédié à Etherpad et en installant git et tout ce qu’il faut pour compiler.

Enfin, voici le moment venu de cloner le dépôt d’Etherpad sur la machine. A ce stade, il vous faudra également ajouter la commande curl

apt-get install curl

et créer le lien symbolique node pointant vers nodejs

ln -s /usr/bin/nodejs /usr/bin/node

Vous pourrez alors lancer le script d’installation. Effectuez la configuration comme indiqué sur le tutoriel et installer Mongodb. A noter qu’il n’est plus utile d’indiquer « sessionKey » dans le fichier json. La valeur est désormais générée automatiquement.

apt-get install mongod

Appliquez les modifications de configuration du tutoriel. Si vous n’avez pas fait d’erreur, la console va vous afficher :

Ensure that all dependencies are up to date...  If this is the first time you have run Etherpad please be patient. npm WARN package.json async-stacktrace@0.0.2 No repository field. npm WARN package.json channels@0.0.4 No repository field. npm WARN package.json tinycon@0.0.1 No repository field. Ensure jQuery is downloaded and up to date... Clearing minified cache... Ensure custom css/js files are created... Started Etherpad... [2016-02-27 20:59:07.483] [INFO] console - Installed plugins: [2016-02-27 20:59:07.496] [INFO] console - Report bugs at https://github.com/ether/etherpad-lite/issues [2016-02-27 20:59:07.497] [INFO] console - Your Etherpad version is 1.5.7 (d880527) [2016-02-27 20:59:07.578] [INFO] console - You can access your Etherpad instance at http://0.0.0.0:9001/ [2016-02-27 20:59:07.578] [INFO] console - The plugin admin page is at http://0.0.0.0:9001/admin/plugins

Well done :-)
Sélection_207

Il vous faudra encore installer un proxy web pour rediriger selon vos besoins un nom de domaine sur votre installation. Dans mon cas ce dernier existe déjà, il m’a suffi de déclarer mon nouveau sous-domaine et le faire pointer vers la bonne machine virtuelle.

Dans les éléments de configuration d’Etherpad, j’ai changé la langue par défaut positionné à « en-gb » par ‘fr » dans le fichier /home/etherpad/etherpad-lite/settings.json aux environs de la ligne 73.

Autres détails, j’utilise pour l’instant l’utilitaire screen pour lancer Etherpad et bénéficier d’une vue sur la console. Ce n’est probablement pas la solution finale que j’adopterais, mais pour l’instant elle me permet de voir ce qui se passe côté serveur simplement.

Ajoutons MyPads

Là, cela devient enfantin, puisqu’il suffit de se rendre sur la page d’administration sous l’url http://example.com/admin/plugins et de faire une recherche sur Mypads. Cliquez ensuite sur « Install ». Vous n’avez plus qu’à vous rendre sur votre url http://example.com/mypads.

Pour accéder à la page d’administration de MyPads, il vous faut utiliser l’utilisateur que vous avez configuré dans le fichier /home/etherpad/etherpad-lite/settings.json.

Dans zone de recherche saisissez mypads et cliquez sur Install. A ce stade, j’ai également ajouté les plug-ins suivants :

  • adminpads : pour gérer tous les pads qui ont été créés sur l’instance et faire le ménage facilement ;
  • sync_status: pour voir un petit message et se rassurer sur la bonne sauvegarde de ses modifications ;

Quand je compare mes pads à ceux du Framapad, je me dis qu’il doit me manquer encore quelques plug-ins. Si un admin de Framasoft passe par là et peut laisser la liste des plug-ins en commentaires, cela serait sympa :-)

Il me faut personnaliser la page d’accueil et limiter ou au moins contrôler les possibilités de création de comptes. Je n’ai pas retrouvé l’information sur qui avait développé au final MyPads. Là encore, laissez l’information en commentaire, j’aimerais bien le contacter pour chiffrer les évolutions qui me sont nécessaires pour pouvoir proposer une offre de services pour MyPads.

Réagir à cet article

Article original écrit par Philippe Scoffoni le 12/03/2016. | 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

ephase : Démarrage PXE avec Openwrt, Dnsmasq et FreeNAS

Ajourd'hui j'ai décidé de simplifier mon architecture réseau , je me sépare donc de mon serveur DHCP(dhcpd) et décide d'utiliser celui de mon routeur sous OpenWRT. Il y a tout de même un petit couac : mon vieux serveur me permettait de démarrer en PXE pour différentes architectures x86 : efi, efi64 et Bios.

Si la configuration du PXE sous dhcpd est très documenté, avec dnsmasq c'est pas vraiment le cas. Je vous livre ici le résultat de mes recherche avec un exemple qui fonctionne très bien.

Ce que j'ai

J'ai un routeur TPLink sous OpenWRT et un serveur Freenas qui fournit des services SMB, NFS et TFTP. FreeNAS et déjà configuré et fonctionnel puisque je l'utilisait déjà avec mon serveur DHCP.

Le démarrage PXE est assuré par iPXE. Le tout doit me permettre de démarrer des machines via le réseau soit pour installer des Windows, soit cloner / restaurer des machines avec Clonezilla ou encore dépanner / récupérer des données avec SysrecueCD. Las machines clientes sur lesquelles j'interviens vont du vieux portable en Core Duo à l'ordinateur fixe en Core i7 en passant par des Mac (bon je triche, là iPXE démarre depuis une clé USB : pas de vrai PXE possible).

Voilà un schéma de ce que je veux :

img

Sur mon FreeNAS, TFTP est activé, les fichiers sont rangés comme ceci :

  • tftp/efi
    • ipxe.efi : le chargeur de démarrage ipxe en mode efi64
    • ipxe_32.efi : le chargeur de démarrage ipxe en mode EFI 32 bits, ce n'est pas très utile normalement mais il arrive encore de trouver des machines efi32 …
  • tftp/bios
    • ipxe.pxe : le chargeur de démarrage ipxe en mode Bios
  • /tftp/c
    • boot.ipxe : le fichier de configuration contenant le menu qu'ipxe appelle lorsqu'il démarre.
configuration du routeur

J'ai donc besoin de configurer dnsmasq sur le routeur pour lui permettre de choisir le bon fichier de démarrage par le réseau en fonction de ma machine cliente.

Je me connecte sont en SSH sur mon routeur, puis j'édite le fichier /etc/dnsmasq.conf comme ci dessous :

# mach arch type for proper pxe Boot dhcp-match=bios,option:client-arch, 0 dhcp-match=efi32,option:client-arch, 6 dhcp-match=efix64,option:client-arch, 7 dhcp-match=efix64,option:client-arch, 9 #Special case : iPXE boot dhcp-match=ipxe,option:user-class,iPXE # Boot now! dhcp-boot=tag:bios,bios/ipxe.pxe,srvtech,192.168.10.250 dhcp-boot=tag:efix32,efi/ipxe.efi,srvtech,192.168.10.250 dhcp-boot=tag:efix64,efi/ipxe.efi,srvtech,192.168.10.250 dhcp-boot=tag:ipxe,c/boot.ipxe,srvtech,192.168.10.250

Le principe est très simple, on colle une étiquette en fonction de l'architecture du client avec l'option dhcp-match. La syntaxe est dhcp-match=tag:[étiquette],option:[option_a_comparer],[valeur_a_comparer].

Cette étiquette servira ensuite au dhcp d'envoyer à la machine client le bon ordre de récupération du fichier de démarrage avec l'option dhcp-boot avec comme syntaxe dhcp-boot=tag:[étiquette],[fichier_de_demarrage],[nom_du_serveur],[adresse_du_serveur].

Étant donné qu'iPXE vient chercher son fichier de configuration lui aussi en mode PXE, notre serveur DCHP attribue à sa demande une étiquette spéciale afin qu'il récupère convenablement celui-ci.

Il suffit ensuite de redémarrer le service dnsmasq avec la commande /etc/init.d/dnsmasq restart.

Il suffit maintenant de tester un démarrage par le réseau mais attention, pensez a désactiver le Secure Boot dans les paramétrages de l'EFI sur vos machines clientes...

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

Articles similaires

PostBlue : Liste d’extensions Firefox

Petite liste simple et rapide des extensions ajoutées à mon installation de Firefox, sur une distribution Arch Linux avec le gestionnaire de bureau GNOME.

N'hésitez pas à me conseiller l'une ou l'autre extension que je ne connaitrais pas.

Arc Firefox Theme

J’utilise le thème Arc sous GNOME1, et donc aussi le thème développé pour le navigateur (parce que j'aime la régularité du style des applications).

Arc Firefox

Choisir un thème de la collection Arc Firefox Themes sur le site de Modules pour Firefox.

eID Belgique

Cette extension permet d’utiliser la carte d’identité électronique belge (eID) dans Firefox.

  1. Outre cette extension, il faut installer le middleware eid-mw sur sa machine (et il y a même des dépôts pour l'installation sur des machines GNU / Linux).
  2. Le lecteur de carte d’identité électronique doit être connecté à la machine avant le lancement de Firefox pour que l'extension fonctionne.

Installer l'extension eID Belgique depuis le site de Modules pour Firefox.

GNotifier

GNotifier intègre les notifications de Firefox et Thunderbird au système de notification natif de GNOME (mais sensément de tout gestionnaire de bureau sous Linux utilisant libnotify) et de Windows (8 et 10). Il remplace le gestionnaire de pop-up par défaut dans Firefox pour l'intégrer au bureau, pour :

  • la complétion de téléchargement, avec la possibilité de sélectionner l'action par défaut au clic : ouvrir le document ou le dossier parent ;
  • les nouveaux éléments dans les flux RSS ;
  • les sites/services envoyant des notifications, comme FreshRSS2 ou Movim.

GNotifier

Installer l'extension GNotifier depuis le site de Modules pour Firefox.

HTitle

HTitle permet de cacher la barre de titre de Firefox quand la fenêtre est maximisée, et donc de gagner de l'espace vertical pour afficher le plus de contenu possible à l'écran3. Le développement de ce module est malheureusement abandonné, mais il fonctionne encore sans souci sur une installation récente de Firefox.

HTitle

Installer l'extension HTitle depuis le site de Modules pour Firefox.

uBlock Origin

uBlock est une extension qui bloque les publicités et les pisteurs, tout simplement et avec légèreté (mémoire et processeur).

Installer l'extension uBlock Origin depuis le site de Modules pour Firefox.

Greasemonkey

Un gestionnaire de scripts utilisateur pour Firefox, utilisé en mon cas pour le script Anti-Adblock Killer.

Installer l'extension Greasemonkey depuis le site de Modules pour Firefox.

HTTPS Everywhere

Module issu de la collaboration entre le Tor Project et l'Electronic Frontier Foundation, HTTPS Everywhere (site officiel du projet) active une redirection automatique, côté navigateur, vers le contenu accessible en HTTPS des sites visités, sur base d'une base de donnée locales.

HTTPS Everywhere

Installer l'extension HTTPS Everywhere depuis le site de Modules pour Firefox.

Privacy Badger

Privacy Badger (site officiel du projet) bloque (en apprenant, pas tout tout de suite) les scripts espions et les pisteurs.

Privacy Badger

Installer l'extension Privacy Badger depuis le site de Modules pour Firefox.

PassFF

Cette extension n'est rien de moins qu'un gestionnaire de mots de passe. Ou plutôt, c'est une extension qui permet à Firefox de dialoguer avec pass, un password store, directement depuis le navigateur.

pass est un gestionnaire de mots de passe qui se base sur git pour collectionner les changements apportés à sa base de données, et GPG pour chiffrer les mots de passe.

PassFF

Installer l'extension PassFF depuis le site de Modules pour Firefox.

Pure URL

Cette extension supprime des URLs de la barre d'adresse les éléments suivants :

  • utm_source, utm_medium, utm_term, utm_content et utm_campaign, traçage pour Google Analytics ;
  • yclid, traçage pour Yandex.Metrica ;
  • feature, pollution de l'URL sur YouTube ;
  • fb_action_ids, fb_action_types, fb_ref, fb_source, action_object_map, action_type_map, action_ref_map, traçage pour Facebook ;
  • ref, fref, hc_location, pollution de l'URL sur Facebook ;
  • ref_, pollution de l'URL sur IMDB.

Installer l'extension Pure URL depuis le site de Modules pour Firefox.

Decentraleyes

Decentraleyes protège du pistage lié à l'accès à des contenus centralisés. Du coup, cette extension accélère de nombreuses requêtes en les servant localement, allégeant la charge des sites (qui ne vont plus s'alimenter de celles hébergées sur l'un ou l'autre CDN, dont j'ai déjà dit tout le mal que je pensais). Elle complète les bloqueurs de contenus habituels.

 evade content delivery networks without breaking websites.

Installer l'extension Decentraleyes depuis le site de Modules pour Firefox.

  1. Plusieurs variantes sont disponibles, dont Dark et Darker qui sont sombres, j’utilise celle qui est « claire ».

  2. Voir la documentation de FreshRSS pour un complément d'information.

  3. Voir le tutoriel Headerbar sur GitHub pour une petite marche à suivre de l'intégration de Firefox au bureau GNOME avec le thème Adwaita.

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

Framablog : Comment créer une belle Framacarte avec un compte ? (Tutos uMap 3/4)

Juste avant Noël, nous vous présentions Framacartes, un service de création de cartes personnalisées pour vos sites web, communautés, randos, chasses au trésor… Framacartes est basé sur le logiciel Umap, qui permet d’ajouter des points, tracés et polygones sur les fonds de cartes d’OpenStreetMap.

C’est alors qu’Antoine Riche, ingénieur informatique, Contributeur et Formateur OpenStreetmap, nous a contactés pour nous présenter sa série de tutoriels (libres, eux aussi) pour apprendre à maîtriser uMap (et donc Framacartes) à toute la famille Dupuis-Morizeau.

C’est avec son autorisation (et de chaleureux remerciements) que nous reproduirons sur le framablog les quatre premiers tutos (le niveau « débutant ») afin d’en faire profiter le plus grand nombre.

Nous avons commencé par nous familiariser avec uMap pour profiter pleinement d’une Framacarte

Puis, nous avons vu comment créer sa première Framacarte

Cette semaine, créons un compte afin de faire de bien jolies cartes et de ne pas les perdre !

J’utilise un compte et crée une belle carte Ce que nous allons apprendre
  • Utiliser un compte pour retrouver ses cartes
  • Changer la forme, la couleur et le pictogramme d’un marqueur
  • Créer et modifier une ligne ou un polygone
Procédons par étapes

Nous avons appris dans le tutoriel précédent comment créer une carte anonyme contenant un marqueur. Nous allons à présent créer une carte plus complète : la carte de nos vacances au Camping de la plage Goulien sur la Presqu’île de Crozon en Bretagne.

Au lieu de créer une carte anonyme, nous allons utiliser un compte pour créer cette carte.

1. Utiliser un compte

uMap permet d’associer ses cartes à un compte. Cela présente deux avantages importants par rapport à la création de cartes anonymes :

  • les cartes créées avec un compte constituent un catalogue permettant d’accéder facilement à ses cartes
  • on peut modifier chaque carte du catalogue sans avoir besoin de conserver un lien d’édition

Le logiciel umap ne gère pas directement de comptes utilisateurs : la gestion des comptes dépend de la configuration du logiciel. Sur https://framacarte.org, nous vous proposons d’utiliser un compte OpenStreetMap. Si vous n’avez pas de compte, c’est le moment de vous inscrire sur le site www.openstreetmap.org : cliquez Créer un compte dans le coin supérieur droit et suivez les instructions – une adresse mail vous sera demandée (plus d’infos).

framacarte connexion

Cliquez sur Connexion / Créer un compte puis sur le pictogramme correspondant au compte que vous souhaitez utiliser. Apparaît alors la page de connexion du site : saisissez le nom d’utilisateur et le mot de passe. La page suivante vous demande d’autoriser l’application uMap à utiliser ce compte : accordez cet accès. Vous retrouvez alors la page d’accueil de uMap, sur laquelle le lien de connexion a laissé la place à un lien Mes cartes vous permettant d’accéder à l’ensemble des cartes créées avec ce compte.

framacarte compte 3

Notez l’URL de la barre d’adresse quand vous consultez votre catalogue de cartes : celle-ci contient le nom de votre compte – par exemple https://framacarte.org/fr/user/PouhiouNoenaute/. Vous pouvez l’utiliser pour accéder à votre catalogue de cartes, même sans être connecté à votre compte : vous pouvez diffuser cette URL, les récipiendaires ne pourront pas modifier vos cartes.

Toutes les cartes que vous créez en étant connecté à votre compte sont ajoutées à votre catalogue.

2. Créer un joli marqueur

Commençons par créer une carte : donnons-lui un nom, définissons une emprise et ajoutons un marqueur à l’emplacement du camping. Nous avons vu dans le tutoriel précédent comment effectuer ces opérations.

umap_marqueur_props

Ce gros marqueur bleu n’est pas très explicite pour figurer un camping. Remédions à cela. Dans le panneau latéral visible lorsqu’un marqueur est sélectionné, le menu Propriétés avancées permet de modifier l’apparence du marqueur :

  • Couleur : cliquer sur Hériter permet de choisir une couleur.
  • Forme de l’icône : le choix Par défaut correspond au marqueur actuel, les autres choix sont Cercle, Goutte et Épingle.
  • Symbole pour le marqueur : cliquer sur Ajouter un symbole pour choisir parmi une centaine de pictogrammes. Notez que le symbole n’est affiché que pour les formes d’icônes Par défaut et Goutte.
  • Étiquette : choisir Oui permet d’afficher en permanence le nom associé au marqueur

Voici le marqueur obtenu avec les propriétés ci-contre :

umap_camping

Modifier un marqueur

Pour modifier un marqueur de la carte, deux possibilités s’offrent à vous :

  • un clic sur le marqueur affiche le panneau qui vous permet de modifier son nom et sa description
  • un glisser-déposer vous permet de déplacer le marqueur sur la carte
3. Créer une ligne

Le premier jour de vacances nous allons en kayak de mer jusqu’à la Pointe de Dinan à l’ouest de la plage de Goulien. Traçons l’itinéraire suivi.

umap_lineLe bouton Dessiner une ligne permet de tracer, point par point, une ligne constiutée de plusieurs segments. Cliquez à nouveau sur le dernier point tracé pour terminer la ligne : apparaît alors à droite un panneau permettant de donner un nom et une description à la ligne, comme pour les marqueurs.

Modifier une ligne

A tout moment vous pouvez sélectionner une ligne en double-cliquant dessus. Vous pouvez alors éditer ses propriétés dans le panneau latéral, ou modifier son tracé sur la carte :

  • supprimer un point de la ligne, matérialisé par un carré blanc, en cliquant dessus
  • déplacer un point par un glisser-déposer
  • insérer un point en cliquant sur un carré gris se trouvant au milieu de chaque segment
  • allonger la ligne avec un Ctrl-Clic lorsque le curseur est placé sur le premier ou dernier point
  • couper la ligne en deux : Clic droit sur un point puis choisir l’option Scinder la ligne

umap_ligne

Propriétés d’une ligne

umap_ligne_props
Les propriétés avancées d’une ligne permettent de définir sa couleur et d’autres paramètres définissant son style :

  • l’épaisseur est définie en nombre de pixels, sa valeur par défaut est 3 : saisir une valeur plus grande pour un trait plus large (qui sera plus facile à sélectionner).
  • l’opacité est un nombre entre 0 (transparent) et 1 (opaque), sa valeur par défaut est 0.5. Plus le trait est épais plus il peut être transparent.
  • la simplification du tracé définit la précision du tracé en nombre de pixels : le tracé s’adaptera au niveau de zoom. Il est en général inutile de modifier cette valeur pour un tracé réalisé à la main.
  • les pointillés sont définis par une série de chiffres séparés par des virgules : nombre de pixels affichés, nombre de pixels cachés, etc. L’épaisseur du trait doit être prise en compte : plus les traits sont épais plus les intervalles doivent être grands.

Voici le style de trait obtenu avec les propriétés ci-contre :

umap_ligne_tirets

4. Créer un polygone

Le second jour de vacances nous louons un dériveur et naviguons dans la zone définie par le club nautique. Ajoutons cette zone à la carte.

umap_polygonLe bouton Dessiner un polygone permet de tracer le périmètre d’un polygone point par point, et de le terminer en cliquant à nouveau sur le dernier point comme pour le tracé d’une ligne. Une différence toutefois : dès le troisième point l’intérieur du polygone est coloré.

Propriétés d’un polygone

La liste des propriétés d’un polygone est assez longue. On y retrouve les mêmes propriétés que pour les lignes (couleur, opacité, etc.) : celles-ci s’appliquent au périmètre du polygone. Plus bas nous trouvons des propriétés spécifiques aux polygones :

  • les options trait et remplissage permettent de ne pas afficher le périmètre ou l’intérieur du polygone : si aucun de ces deux éléments est affiché le polygone est invisible.
  • la couleur du remplissage est par défaut celle du trait, mais peut être modifiée.
  • l’opacité du remplissage varie de 0 à 1, elle peut être très légère pour un polygone.

Deux autres options propres aux polygones sont disponibles :

  • lien externe : spécifier une URL aura pour effet d’ouvrir le page Web correspondante lorsque l’utilisateur clique sur le polygone.
  • Cliquable : choisir la valeur non ne permettra pas à l’utilisateur de sélectionner le polygone, donc de voir son nom et sa description dans une popup. Cela peut être utile pour définir la zone d’intérêt de la carte, qui ne porte pas elle-même d’information utile.

Un polygone non-cliquable ne peut plus être sélectionné sur la carte même en mode édition. Il faut pour cela passer par l’opération Visualiser les données disponible dans le sélecteur de calque, puis éditer l’élément correspondant dans la liste des données.

Faisons le point

Notre deuxième carte est déjà plus intéressante que la première, et en plus nous savons comment la retrouver facilement. Nous verrons dans le prochain et dernier tuto comment personnaliser notre carte.

Liens utiles :

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

Articles similaires

François Boulogne : NAS : choix des composants

Dans ce billet, j'établis mon choix pour le montage d'un NAS.

Mon état des lieux est le suivant. J'ai plus de 8To de données personnelles et professionnelles qui sont actuellement sur des disques durs usb. Il devient compliqué de brancher et débrancher, de manipuler sans laisser tomber, de savoir quoi est sur qui.

La sauvegarde est un enfer : sauvegarde de machines sur des disques, de machines sur des machines, de disques sur des disques, etc. J'ai toutes les chances de rater un étape. L'idée est donc de rationnaliser tout ça :

  • Une machine qui héberge données et sauvegarde des desktops/serveurs.
  • Une autre machine qui sauvegarde les données critiques du NAS.
Avantages/inconvénients d'un NAS

Avantages

  • Espace de stockage continu plutôt que N disques distincts
  • Espace disponible sur le réseau (communication avec plusieurs machines, montage NFS...)
  • Facilite grandement la sauvegarde régulière
  • Résilient à des pannes disques (ça dépend du RAID choisi, mais je m'intéresse à un système résilient)

Inconvénients

  • Si un nombre critique de disques flanche ou un autre problème apparait (erreur de manipulation, matériel défaillant causant une perte majeure des disques), on perd tout.
  • Machine supplémentaire donc coût supplémentaire comparé à un boitier de disque externe.
  • Les disques de parité sont de la mémoire morte, c'est-à-dire de l'espace non visible par l'utilisateur.
  • Un système RAID n'est pas une sauvegarde, il faudra donc sauvegarder.
Choix technologiques
  • De la redondance de données pour être résilient aux pannes disques.
  • Système de fichiers ZFS qui est éprouvé pour ce genre d'usage (en attendant que btrfs soit mature).

Par conséquent, on s'oriente vers un RAIDz1, 2 ou 3, c'est-à-dire 1, 2 ou 3 disques de redondance. A l'heure actuelle, il semble que RAIDZ1 soit déconseillé. L'argument est le suivant. Les disques sont de plus en plus gros. Par conséquent, si un disque est en panne, il est nécessaire de le remplacer pour reconstruire le pool. La charge appliquées sur les disques est d'autant plus grande que chaque disque est volumineux. Il y a donc un risque (non négligeable ?) qu'un second disque casse à ce moment là. RAIDZ3 demande beaucoup d'investissement. J'opte donc pour RAIDZ2. Le nombre minimal de disques est de 4 et il est conseillé d'avoir un nombre pair.

Les NAS commerciaux

On va voir que notre machine sans disque présentée ci-dessous peut recevoir jusqu'à 12 disques. Bien plus qu'il nous en faut. Les NAS commerciaux de 2 ou 4 disques sont courants. Si on se base sur des marques bien connues comme synology, il faut compter

  • 2 baies 300-350€
  • 4 baies 450€
  • 5 baies 600-700€
  • 6 baies 700-800€
  • 12 baies à 1300€.

C'est un prix typique plutôt minimaliste, on peut sans problème trouver bien plus cher. Je n'ai pas vu de synology à 6 baies.

D'un point de vue rentabilité, un 4 baies est juste pour un RAID6 (=RAIDZ2 pour ZFS), car seule la moitié de l'espace acheté sera disponible. Le 5 baies étant le plus proche, je vais comparer avec le DS1515 :

  • quad core 1.4 GHz
  • 2 Go RAM
  • disques EXT4 hot swappable
  • Extension possible à 15 disques, mais avec un module coutant 450€ / 5 disques supplémentaires
  • Ajout d'un disque SSD possible (Les tests de performance présentés sur le site utilisent un SSD)

L'avantage d'un tel NAS est le coté clef en main du produit (d'après ce que je lis). Par contre, les inconvénients que je vois :

  • peu d'évolutivité en nombre de disques ou chère
  • logiciel propriétaire
  • pour un RAID6, je n'ai que 5-2 = 3 fois la taille d'un disque disponible. La sacrifice est important.
  • le 8 baies est bien plus cher

Pour un prix légèrement inférieur, ma proposition ci-dessous me donne

  • quad core 2.4 GHz
  • 16Go RAM ECC
  • disques en ZFS (ou autre chose)
  • Avec le boitier, on peut y mettre jusqu'à 8 disques facilement, 10 sans trop de difficulté.

Pour l'évolutivité :

  • Possibilité d'ajouter deux disques SSD pour améliorer les performances si le besoin sans fait sentir (pour NFS ?).
  • Possibilité de monter jusqu'à 64 Go de RAM (je reviendrai là dessus).
  • Possibilité d'ajouter de la ventilation.
  • Possibilité d'en faire autre chose qu'un NAS si les besoins devaient évoluer brutalement.
Le choix

Pour le matériel, et notamment la partie critique (carte mère, mémoire, etc), je conseille LDLC car ils ont un excellent support téléphonique (déjà testé), une bonne politique de retour, un site bien fait et une livraison gratuite dans des points relais. Les choix ne sont pas neufs en soi. Je me suis largement inspiré des conseils donnés sur le forum de freenas et quelques blogs.

Le système d'exploitation

BSD gère nativement ZFS, mais ça reste possible avec debian. Néanmoins, j'ai une confiance plus grande sur un support natif, je m'oriente donc vers FreeNAS pour la distribution. La documentation de FreeNAS est exhaustive, le forum est très actif et possède beaucoup de contenu.

UPS

Le nombre de disques durs peut être important. Je veux que ça tienne un minimum et avoir le temps d'éteindre proprement. De plus, les capacités des batteries peuvent diminuer au cours du temps, il faut prendre ce paramètre en compte.

Carte mère

Les critères que j'ai retenu :

  • le nombre de port SATA
  • la capacité en mémoire vive (FreeNAS en consomme beaucoup et de manière générale, c'est plutôt bien de ne pas en manquer)
  • le réveil par réseau (Wake On LAN)
  • la consommation énergétique (inférieure à 50W)

ASRock fabrique de très belles cartes mères pour les serveurs. Mon choix s'est porté sur une version 4 coeurs. En 8 coeurs, la différence de prix est selon moi trop importante pour une utilité relative sur un NAS. Le petit plus que j'apprécie : le CPU est livré avec la carte mère, pas besoin d'aller jouer avec la pâte thermique.

Version Quad core

Caractéristiques :

  • mini itx
  • Intel Avoton C2550 Quad Core 2.4GHZ featuring 14W TDP
  • 16 Go par slot, 64 max, 4 slots
  • 12 SATA (4 SATA2, 8 SATA3)
  • Support de l'IPMI
  • 3 ports USB (dont un pour l'UPS, et un pour l'OS)
Version Octa core

Les autres caractéristiques sont identiques à ci-dessus.

RAM ECC

Il est important d'utiliser des mémoires ECC. C'est recommander par freenas pour éviter les corruptions de données.

8Go est le minimum pour FreeNAS, 16Go devrait être à peu près confortable avec la possibilité de passer à 32Go. Les mémoires de 16Go sont un peu trop couteuses ici. Notre système se limitera donc à 32Go pour des raisons de coûts.

Chassis

Critères :

  • de l'espace, pour faire circuler l'air et pour faciliter l'installation.
  • un grand nombre d'emplacements pour disques 3.5"
  • de la ventillation et des filtres pour la poussière
  • des cables bien rangés
  • compatible carte mini itx

Mon choix :

Caractéristiques :

  • alim ATX/EPS
  • 2 SSD (à placer sur le coté)
  • 8 disques 3.5" ou 2.5"
  • 2 espaces pour lecteurs optiques dans lesquels il serait possible de mettre deux racks pour disques durs 3.5" ou 2.5"
  • 2 ventilateurs 140mm fournis
  • un grand nombre de réceptacles pour des ventilateurs supplémentaires
 Alim

Il faut donc choisir une alimentation ATX/EPS. Toujours prendre de la qualité pour éviter de sentir un jour le plastique brûlé.

  • FSP AURUM S400 400W 80PLUS Gold 60€ (LDLC)
  • Enermax Revolution XT ERX430AWT 80PLUS Gold 75€ (LDLC)
USB
  • SanDisk Cruzer Fit 16 Go 6€

Avantages :

  • petit prix
  • deux fois l'espace nécessaire à freenas
  • 5 mm de longueur. Elle s'oublira à l'arrière de la machine.
Disques

Je privilégie :

  • des disques de récupération (en bon état tout de même)
  • des disques à faible vitesse (5400 tours/min) car ils chauffent moins
  • des disques WD red, j'en ai une très bonne expérience

A noter que la taille totale disponible dépend de la taille du plus petit disque. Il faut aussi réfléchir aux besoins futurs avec les remarques suivantes :

  • On ne pourra pas ajouter de disques. Il n'est pas raisonnable de mettre deux vdev, et il est impossible d'étendre un vdev.
  • Quel coût existera-t-il si on veut augmenter la taille de chaque disque ? Quel gain ? Faut-il le faire maintenant ou plus tard (évolution des prix, existant).

Ces choix sont à faire au cas par cas. A noter aussi qu'il est déconseillé d'acheter tous les disques de même modèle, en même temps, chez le même fournisseur. La probabilité qu'ils tombent en panne simultanément est plus grande.

Connectique
  • La carte mère est venue avec 6 cables SATA. A compléter si on veut passer à 8.
  • L'alimentation possède un nombre limité de connecteur d'alim SATA (5). Il faut donc soit mettre des dédoubleurs sur des fiches molex (que l'on utilise pas), soit des extensions de fiche SATA.
SSD

Il n'est pas encore clair qu'un disque SSD apporte des améliorations pour mon utilisation (cf reddit ou Introduction to vdev, zpool, ZIL, L2ARC). Le point sensible est ici la partie NFS qui peut avoir besoin d'un cache pour être plus rapide. De même que pour les NAS assemblés, c'est optionnel et souvent laissé au regard de l'utilisateur. La documentation de freenas indique qu'il faut privilégier la RAM en premier.

Liens intéressants

Gravatar de François Boulogne
Original post of François Boulogne.Votez pour ce billet sur Planet Libre.

Articles similaires

Goffi : Installer une instance de Libervia (SàT) en moins de 10 min

Bon avouons le tout de suite, je triche, 2 fois. La première c'est que nous allons utiliser les images Docker autrement dit des versions pré-installées et qui facilitent la vie. La deuxième c'est que quand je dis « moins de 10 min », je ne compte pas le temps de téléchargement de ces images, qui peut bien évidemment varier selon la vitesse de votre connexion.

Ceci dit, voyons comment avoir une instance de Libervia, l'interface web du projet « Salut à Toi », fonctionnelle de manière triviale. Pour mémoire il s'agit d'un outil de communication (d'aucuns parlent de « réseau social ») basé sur le protocole standard et ouvert « XMPP », et donc compatible avec la multitude de logiciels déjà existants.

Préparatifs Docker

Il vous faut essentiellement avoir Docker installé sur votre machine. Sur une Debian ou dérivée (Ubuntu, Linux Mint – attention dans ce dernier cas, elle a récemment été compromise –, etc) il suffit de faire :

# apt-get install docker.io

En tant que root (c.-à-d. précédez de « sudo » si nécessaire). Dans les autres cas, reportez-vous à la documentation officielle.

Il faut ensuite vous ajouter au groupe « docker », ce qui devrait pouvoir se faire avec

# adduser docker && newgrp docker

Ou, si vous avez sudo installé et configuré (c'est le cas sur Ubuntu par exemple):

# sudo adduser $(whoami) docker && newgrp docker

À partir de maintenant, il n'est plus besoin d'être root, vous pouvez faire la suite avec votre utilisateur normal, qui vient d'être ajouté au groupe « docker ».

libervia_cont.sh

La deuxième chose à faire est d'installer le script libervia_cont.sh qui aide grandement à la gestion des conteneurs de Libervia. Pour cela, il suffit d'entrer :

wget https://repos.goffi.org/sat_docs/raw-file/tip/docker/libervia_cont.sh && chmod a+x libervia_cont.sh

(si wget n'est pas présent, installez-le, par exemple avec « apt-get install wget »)

Lancement

Pour lancer Libervia, il vous faut maintenant entrer :

./libervia_cont.sh

Et c'est tout ! Si si, je vous assure, le script et Docker se chargent de télécharger les images (ce qui peut prendre un peu de temps selon votre connexion) et de les lancer, À la fin, vous allez voir une liste de ports s'afficher, en particulier vous devez avoir une ligne qui ressemble à :

port 8080 (HTTP): 0.0.0.0:32771

Le numéro à la fin est le port choisi par Docker pour accéder à Libervia via HTTP, il vous suffit d'ouvrir votre butineur sur http://localhost:32771 (en remplaçant 32771 par le port que vous avez bien sûr) et vous devriez voir apparaître la page d'accueil de Libervia. Le serveur n'est accessible qu'après quelques secondes.

Libervia login

Plutôt simple non ? Bon comme c'était trop facile, voyons voir comment configurer tout ça.

Configuration ports

Une des options les plus importantes est l'option -p, qui permet de lancer Libervia avec des ports fixes, ainsi vous pourrez atteindre Libervia sur le port 8080 et non un port qui change à chaque lancement.

Vous pouvez spécifier des ports différents grâce aux variables d'environnement SAT_CONT_PORT_xxxxxxxx est le port que vous voulez remplacer. Ainsi si vous voulez utiliser les ports 80 et 443 qui sont les ports standard HTTP et HTTPS, plutôt que 8080 et 8443, il vous suffit de faire, avant de lancer libervia_cont.sh :

export SAT_CONT_PORT_8080=80 export SAT_CONT_PORT_8443=443 nom de domaine

Si vous avez déjà votre nom de domaine (l'obtention d'un nom de domaine et sa configuration dépassent le cadre de cet article, mais les explications ne manquent pas sur le web), vous pouvez le spécifier avec l'argument -d ou avec la variable d'environement SAT_CONT_DOMAIN, exemple :

export SAT_CONT_DOMAIN=goffi.org éditer les fichiers

Vous pouvez éditer le fichier de configuration de SàT/Libervia en tapant simplement

./libervia_cont.sh config

De même, pour éditer la configuration du Prosody intégré, faites

./libervia_cont.sh config prosody Sauvegardes

Le script gère également les commandes de sauvegardes. Pour faire une sauvegarde, il suffit de taper

./libervia_cont.sh backup

Ceci crééra un fichier sat_data_backup_.tar.gz. Pour le restaurer plus tard, vous n'aurez qu'à faire

./libervia_cont.sh restore sat_data_backup_.tar.gz À suivre…

Cet article est le premier d'une petite série où je vais vous expliquer comment mettre en place et publier dans un blog comme le mien (qui tourne désormais avec SàT/Libervia) grâce à ce que nous venons d'installer. La prochaine fois (demain ?) j'expliquerai la configuration avancée (certificat personnalisé, lancement automatique).

Si vous parlez anglais, l'utilisation des images Docker et du script libervia_cont.sh sont documentés sur le wiki.

Nous aimerions beaucoup faciliter l'installation de Libervia avec d'autres méthodes, par exemple avec des scripts pour YunoHost, un peu d'aide serait très appréciée, car nous sommes déjà bien chargés. Si vous pensez pouvoir participer, venez en discuter sur le salon sat@chat.jabberfr.org.

N.B. : comme vous l'avez vu l'image contient un serveur XMPP (Prosody) pré-configuré pour simplifier l'installation. Cependant Salut à Toi et donc Libervia marchent bien évidemment avec tout autre serveur (les fonctionnalités seront juste adaptées selon ce qui est disponible), et vous pouvez créer un profil externe, sur un autre serveur (vous pouvez même entrer directement un jid et un mot de passe existant dans Libervia). Il est probable qu'il existe de futures variantes de ces images sans serveur XMPP pré-installé, ou avec un autre.

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

PostBlue : Passer à systemd sur un VPS OpenVZ avec Debian Jessie

Attention : je n'ai pris aucune précaution, je ne pourrais être tenu pour responsable de quoique ce soit. Je suis d'ailleurs tout à fait irresponsable.

L'un des VPS que j'administre utilisait upstart comme système d'initialisation, parce que le noyau OpenVZ n'a longtemps pas supporté systemd, ou inversément systemd ne supportait pas les vieux noyaux d'OpenVZ, toujours est-il que la cohabitation était controversée.

Le noyau d'OpenVZ est basé sur Linux 2.6.32. 2009, tout de même ! C'est le noyau qui propulsa à leur époque (2009) Ubuntu 10.04 LTS « Lucid Lynx » et Debian 6.0 « Squeeze ». Or, Debian 8.0 « Jessie », sortie en avril 2015, intégra le noyau Linux 3.16, et passa de sysvinit à systemd comme système d'initialisation par défaut.

Donc les services, scripts, etc, sont par défaut écrits pour fonctionner avec systemd. Et depuis quelques temps, le noyau OpenVZ permet de parler la même langue que systemd (grosso modo). Et j'avais envie de tester le changement, sachant que j'avais transféré ma machine sur un dédié Kimsufi.

Donc, on se lance.

Dans une session SSH, je lance l'installation par aptitude, qui intègre un outil de résolution des conflits et offre des solutions de remplacement en cas d'installation problématique.

aptitude install systemd systemd-sysv

aptitude propose de remplacer upstart par systemd : il suffit d'accepter.

Plus qu'à redémarrer. Le système va se plaindre de ne pas pouvoir utiliser l'init pour lancer la commande reboot proprement (normal, vu qu'on vient d'en changer).

Pour être au minimum propre (ce que je n'ai pas fait), on peut stopper proprement les services chatouilleux, MySQL & co. Puis redémarrer brutalement :

reboot -f

La connexion est perdue directement. Quelques secondes à attendre avant de relancer une session SSH et tenter de se connecter à la machine.

  • Connexion établie ? Bravo, tout s'est bien passé ! On peut maintenant balancer systemctl --failed pour voir s'il y a des services défectueux qui trainent sur la machine.

  • Connexion impossible ? Too bad! Vous venez de tuer votre machine qui ne démarrera plus en l'état. Contactez votre hébergeur, réinstallez votre machine, faites vous un thé.

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

Littlewing : Développement WEB

Bon je n’ai pas écrit d’article depuis quelques temps. Je suis à fond sur l’apprentissage des technologies WEB :

  • bootstrap
  • angular
  • yeoman
  • nodejs

J’ai donc un peu laché le développement spark/scala pour le parcours de spécialisation coursera.

Je pense écrire un peu plus ensuite ( dans quelques mois …)

See you

 

 

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

Articles similaires

Goffi : Guru Meditation

Un petit mot pour m'excuser auprès des lecteurs et en particulier des lecteurs de Planet Libre et de SeenThis : je viens de passer mon blog principal sur Salut à Toi/Libervia et avec lui les flux Atom (qui me permettent d'apparaître sur ces 2 médias), et je pensais qu'avec les dates de mise à jour j'apparaîtrais à la même place qu'avant (soit en décembre pour mon dernier article). Il se trouve que mes 10 derniers articles sont apparus en tête probablement parce qu'il y a eu un changement de liens et d'identifiants, c'est pourquoi vous voyez autant de (vieux) articles d'un coup.

Toutes mes excuses pour ce spam involontaire, il ne devrait plus y avoir de problème désormais, et si jamais c'était le cas je désactiverais la synchronisation le temps de les résoudre.

J'en profite pour annoncer que je vais faire une mini série d'articles pour expliquer comment installer une instance de Libervia et importer son blog dessus.

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

Francois Aichelbaum : Share a multifunctional printer (with your Synology)

So, lately, we decided to truly use several different computers at home. The fun part is that we want to share the same peripherals (as the multi-functional printer (here, as an HP PhotoSmart B109a), with different OS (for now, Linux and Windows). Let’s see how our Synology saved the day.

The Synology NAS embed a Linux system so basically, we should be able to run most of the applications, as far as we can deploy/compile it. But, because the Synology guys wants to ease our life, they did a great thing : they offer the possibility to add a multi-functional printer and manage it. As far as they did great, the system only embed some drivers (and software – i.e. only cups) and for me, even if the printer is fully discovered, only the print services will be shared over network.

So I had to complete the setup. First, I need to be able to extend the system with new package. As we have a pretty recent DS1515+, we don’t have any ipkg system out of the box. But now, this is pretty well documented over internet (in english or in french, for instance).

Now that we can install third party software easily on the CLI, let’s setup SANE. So, as a root on the Synology :

ipkg install hplip libusb libieee1284 sane-backends xinetd echo "hpaio" >> /opt/etc/sane.d/dll.conf echo "hpaio" > /opt/etc/sane.d/dll.d/hplip

Let’s see if the Synology see the scanner :

sane-find-scanner

Which should reply something like :

found USB scanner (vendor=0x03f0 [HP], product=0x7a11 [Photosmart B109a-m]) at libusb:002:003

Since the NAS sees the scan, let’s test it with SANE via :

scanimage -L

It will reply something as :

device `hpaio:/usb/Photosmart_B109a-m?serial=CN999750CB05C7' is a Hewlett-Packard Photosmart_B109a-m all-in-one

Now, let’s ensure that the service is visible from the rest of the network. To do so, we need to edit /opt/etc/xinetd.conf where we check the line “only_from” : it should match the IP range of the local network. Then we edit /opt/etc/sane.d/saned.conf with the same purpose. We can now edit xinetd to start the sane service properly with the right port, editing /opt/etc/xinetd.d/sane-port :

service sane-port { port = 6566 socket_type = stream wait = no user = root group = root server = /opt/sbin/saned }

Let’s start it (it will be automatically started on the next reboot :

/opt/etc/init.d/S10xinetd

As we’re good on the server side, let’s focus on the client side. We’ll start with the Linux client as it’s the simpliest. I assume you already installed xsane.  Now, we just need to tell Xsane where it can find the scan. So, we edit /etc/sane.d/net.conf to replace “# localhost” with the IP of the Synology. The printer is just a few click away when you go through the regular GUI to add a network printer. We’re good to go.

On the Windows side (Windows 10 here), it’s a bit more tricky. First, we’ll focus on the printer service. For this, we’ll have to follow the directives from Synology. This will enable a printer. Windows might complain about missing drivers for some mass storage USB device and an unknown device but you can just ignore as those are the scan and the multi card reader.

For the scan service, we’ll have to install some other tools. Indeed, Windows use a specific protocol which is not compatible with sane (it can be TWAIN, ISIS or WIA).  But , as we exposed the scan via sane, we need … sane … Absolute logical logic. Thanks to our opensource community friends, port exists. Not so much up2date or maintained, but it’s enough ok to be used. The solution here will be SaneWinDS. Just download the installer, follow the instruction of the GUI and here you go. Reboot your Windows (after all, it remains as a Windows), and now you have a Sane application on your Windows that you can use. The UI is pretty archaic but it should do the trick.

The post Share a multifunctional printer (with your Synology) appeared first on Here and Now ... Then and There.

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

Articles similaires

genma : Firefox OS - Quick Settings Enhancement

Quick Settings Enhancement est un addon disponible dans le marketplace, et dont le code source est sur Github

Comme le montre cette image

cette addon est bien pratique car elle ajoute dans la barre de notification tout un tas de raccourcis fort pratique qui viennent s'ajouter à ceux existant (mode avion, wifi, connexion de données) à savoir : l'activation ou la désactivaton du NFC, de la Géolocalisation, du mode économie de la batterie, réglage de la luminosité de l'écran... Tout un tas d'options et de réglages qui sont normalement disponibles via les menus du paramétrage sont enfin à portée de main et c'est fort pratique.

Le petit plus, une option Lampe de poche qui permet d'allumer en continue la led Flash du téléphone (pour les modèles en disposant comme le Sony Z3C par exemple).

Un addon devenu indispensable pour moi. Merci à Philipe, Mozillien, pour m'avoir présenté cette addon.

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

Articles similaires

Goffi : Appel à la communauté: aidez moi à traduire la série « Parlons XMPP »

Salut à vous,

la série que j'ai commencé fin juin, « Parlons XMPP » a plus de succès que ce à quoi je m'attendais (surtout en été !), et a incité plusieurs personnes à regarder un peu plus ce que peut faire ce protocole.

Du coup j'aimerais bien traduire la série en anglais (ou autre !), mais je n'ai vraiment pas le temps de le faire moi même, vu que je dois déjà travailler sur Salut à Toi, et que l'écriture des articles en français me prend beaucoup de temps.

Alors je veux tenter le coup avec une traduction collaborative, un peu comme ce que fait framasoft pour traduire des articles de l'anglais vers le français, mais dans l'autre sens.

Tous les articles sont sous licence libre (Cc By-SA), et il faut bien noter que je parle souvent de « Salut à Toi » sur lequel je travaille, même si je parle aussi d'autres projets.

Bref, je tente le coup, j'ai ouvert un framapad avec le premier article.

Si vous voulez participer ajoutez votre nom ou pseudo pour être dans les auteurs de la traduction, et vous pouvez traduire en dessous du paragraphe en français. Je demanderai une relecture par un anglophone à la fin.

En dehors des 6 articles déjà publiés, je pense continuer au rythme d'un par semaine au moins pendant l'été.

Pour aider à la traduction, c'est par ici: https://bimestriel.framapad.org/p/parlons_XMPP

Merci d'avance !

Goffi

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

Goffi : Conférences des RMLL

Salut à vous,

  j'attendais de voir les vidéos publiées, c'est désormais le cas. Notre passage aux RMLL s'est très bien passé et a été l'occasion de se faire de nouveaux contacts et d'avoir des discussions très intéressantes. J'ai particulièrement apprécié participer à la table ronde sur les nouveaux médias, et rencontrer Arno de SPIP/SeenThis (je connaissais déjà les autres participants).   Je n'ai pas eu l'occasion de voir beaucoup de conférences car j'étais au stand, mais je viens bien sûr vous recommander de voir celles sur XMPP ou en particulier la table ronde sur les nouveaux médias:

Toutes les interventions étaient vraiment intéressantes, y compris dans le public. Merci à ceux qui y ont participé, et à Olicat pour avoir animé.

En ce qui concerne XMPP, il y a bien sur les conférences de Libervia et Movim. Pour Libervia la qualité est vraiment mauvaise, aussi je vous recommande plutôt la version de Pas Sage En Seine, c'est la même conférence:

Libervia

Movim

Et sur un plan plus technique, la conférence « PubSub, Microblogage et XMPP » dont j'ai déjà parlé plusieurs fois:

En dehors de ça comme je l'ai dit je n'ai pas pu voir beaucoup de conférences. J'ai particulièrement aimé celle de Paul Kocialkowski sur Replicant (en anglais, il y en a aussi eu une en français que je n'ai pas pu voir, je ne sais pas si c'est le même ou pas, du coup je mets les 2):

À voir aussi celle de Gelnior (de Newebe/Cozy cloud) sur la conception graphique, je l'avais vue aux JDLL:

Enfin, autre conférence que je n'ai pas (encore) vue, mais comme on en parle dans la table ronde je la mets ici, la conférence « SPIP et sa communauté »:

  Il y en a eu beaucoup d'autres, aussi n'hésitez pas à préciser en commentaires celles que vous conseillez.

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

Goffi : Parlons XMPP - épisode 7 - cas pratiques: SleekXMPP et SàT

/* Styles pour Pygments (coloration syntaxique) */ .hll { background-color: #ffffcc } .c { color: #408080; font-style: italic } /* Comment */ .err { border: 1px solid #FF0000 } /* Error */ .k { color: #008000; font-weight: bold } /* Keyword */ .o { color: #666666 } /* Operator */ .cm { color: #408080; font-style: italic } /* Comment.Multiline */ .cp { color: #BC7A00 } /* Comment.Preproc */ .c1 { color: #408080; font-style: italic } /* Comment.Single */ .cs { color: #408080; font-style: italic } /* Comment.Special */ .gd { color: #A00000 } /* Generic.Deleted */ .ge { font-style: italic } /* Generic.Emph */ .gr { color: #FF0000 } /* Generic.Error */ .gh { color: #000080; font-weight: bold } /* Generic.Heading */ .gi { color: #00A000 } /* Generic.Inserted */ .go { color: #888888 } /* Generic.Output */ .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ .gs { font-weight: bold } /* Generic.Strong */ .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ .gt { color: #0044DD } /* Generic.Traceback */ .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ .kp { color: #008000 } /* Keyword.Pseudo */ .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ .kt { color: #B00040 } /* Keyword.Type */ .m { color: #666666 } /* Literal.Number */ .s { color: #BA2121 } /* Literal.String */ .na { color: #7D9029 } /* Name.Attribute */ .nb { color: #008000 } /* Name.Builtin */ .nc { color: #0000FF; font-weight: bold } /* Name.Class */ .no { color: #880000 } /* Name.Constant */ .nd { color: #AA22FF } /* Name.Decorator */ .ni { color: #999999; font-weight: bold } /* Name.Entity */ .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ .nf { color: #0000FF } /* Name.Function */ .nl { color: #A0A000 } /* Name.Label */ .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ .nt { color: #008000; font-weight: bold } /* Name.Tag */ .nv { color: #19177C } /* Name.Variable */ .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ .w { color: #bbbbbb } /* Text.Whitespace */ .mb { color: #666666 } /* Literal.Number.Bin */ .mf { color: #666666 } /* Literal.Number.Float */ .mh { color: #666666 } /* Literal.Number.Hex */ .mi { color: #666666 } /* Literal.Number.Integer */ .mo { color: #666666 } /* Literal.Number.Oct */ .sb { color: #BA2121 } /* Literal.String.Backtick */ .sc { color: #BA2121 } /* Literal.String.Char */ .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ .s2 { color: #BA2121 } /* Literal.String.Double */ .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ .sh { color: #BA2121 } /* Literal.String.Heredoc */ .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ .sx { color: #008000 } /* Literal.String.Other */ .sr { color: #BB6688 } /* Literal.String.Regex */ .s1 { color: #BA2121 } /* Literal.String.Single */ .ss { color: #19177C } /* Literal.String.Symbol */ .bp { color: #008000 } /* Name.Builtin.Pseudo */ .vc { color: #19177C } /* Name.Variable.Class */ .vg { color: #19177C } /* Name.Variable.Global */ .vi { color: #19177C } /* Name.Variable.Instance */ .il { color: #666666 } /* Literal.Number.Integer.Long */

(pour lire les épisodes précédents, suivez l'étiquette correspondante)

Comme cela a été demandé plusieurs fois, nous allons pour cet article faire un petit cas pratique avec deux bots XMPP.

SleekXMPP

c'est SleekXMPP que nous allons tester, que je n'avais jamais utilisé avant cet article. Il s'agit d'une bibliothèque Python qui se veut simple, avec peu de dépendances, et gérant tout avec des greffons. Vous pouvez aussi utiliser le fork (amical) fait pour Poezio, Slixmpp qui a réécrit le cœur de la bibliothèque pour tout gérer en asynchrone (sans thread) via le récent asyncio (aussi il faut une version de Python >= à 3.4, alors que SleekXMPP fonctionne avec Python 2 et 3).

Sans entrer trop dans les détails, que vous trouverez sur le site officiel avec plusieurs tutoriels (http://sleekxmpp.com/), faisons un simple bot qui répond à des commandes ad-hoc (aucun lien avec Tintin, voir plutôt l'épisode 6):

Ce script est une adaptation de l'exemple donné dans le dépôt officiel (voir sa licence). Des explications sont données après le script, et il devrait fonctionner avec Python 2.6 ou supérieur ou 3.1 ou supérieur.

#!/usr/bin/env python # -*- coding: utf-8 -*- import sleekxmpp from sleekxmpp import jid JID="mon_super_bot@mon_super_server.tld" PWD="mon_super_mot_de_passe" ADMIN=jid.JID("mon_admin@mon_super_server.tld") CMD_ENVOI = u'envoi message' CMD_DECO = u'déconnexion' CMD_ADMIN = u'gros bouton rouge' class MonSuperBot(sleekxmpp.ClientXMPP): def __init__(self): sleekxmpp.ClientXMPP.__init__(self, JID, PWD) self.add_event_handler("session_start", self.session_start) # note 1 self.register_plugin('xep_0030') self.register_plugin('xep_0004') self.register_plugin('xep_0050') self.register_plugin('xep_0199', {'keepalive': True, 'frequency':15}) def session_start(self, event): # note 2 self.send_presence() self.get_roster() self['xep_0050'].add_command(node='monbot', name=u'Commandes de monbot', handler=self._handle_commands) def _handle_commands(self, iq, session): form = self['xep_0004'].makeForm('form', 'bot') form['instructions'] = u'Choisissez une commande' options = [CMD_ENVOI, CMD_DECO] # note 3 if session['from'].bare == ADMIN: options.append(CMD_ADMIN) form.addField(var='command', label=u'commande', ftype='list-single', required=True, options=options ) session['payload'] = form session['next'] = self._handle_command_complete session['has_next'] = False return session def _handle_command_complete(self, payload, session): form = payload command = form['values']['command'] if command == CMD_ENVOI: self.send_message(mto=session['from'], mbody="Message important !", mtype='headline') elif command == CMD_DECO: self.disconnect(wait=True) # note 4 elif command == CMD_ADMIN: # note 5 if session['from'].bare == ADMIN: session['notes'] = [('warning', 'BOOM !')] else: raise ValueError("ce n'est pas un admin !") return session if __name__ == '__main__': xmpp = MonSuperBot() if xmpp.connect(): # note 6 print(r"\\o/") xmpp.process(block=True) else: print(":(") Explications

Après avoir importé sleekxmpp, nous utilisons quelques constantes (n'oubliez pas bien sûr de remplacer JID et PWD par des valeurs adaptées) pour simplifier, les exemples officiels permettent de manière plus élégante de préciser jid et mot de passe en ligne de commande.

Notre bot se comportera comme un client, nous héritons donc de sleekxmpp.ClientXMPP.

au niveau de la note 1 nous implémentons les greffons qui gèrent les XEPs qui nous intéressent :

  • disco (XEP-0030) pour annoncer ad-hoc, comme expliqué dans l'épisode 3
  • les formulaires de données (x-data, XEP-0004) et les commandes « ad-hoc » (commands, XEP-0050), expliquées dans l'épisode 6
  • la XEP-0199 permet d'envoyer et de répondre à des « pings », afin de s'assurer que la connexion et les logiciels sont toujours actifs.

À la note 2 nous envoyons notre présence et demandons la liste de contacts (« roster »), ce qui est requis par les RFCs, certains serveurs pouvant refuser de répondre si ce n'est pas fait.
Ensuite nous utilisons le greffon des commandes « ad-hoc » pour ajouter le point d'entrée à nos commandes.

Ce point d'entrée appellera la méthode « _handle_commands », et nous utilisons un formulaire (comme expliqué dans la XEP-0004) pour spécifier nos commandes. La liste « options » nous sert à indiquer nos commandes dans l'ordre voulu.

Au niveau de la note 3, nous profitons de l’identification forte de XMPP pour vérifier très simplement si le demandeur utilise l'adresse (jid) de notre compte privilégié, que nous avons indiqué dans la constante « ADMIN ». Nous aurons ainsi un jeu de commandes différent si nous utilisons le compte privilégié ou un autre.
Évidemment si vous voulez profiter de l'authentification forte, il faut vous assurer que tout est en ordre au niveau des certificats et du chiffrement (ce que fait a priori SleekXMPP de base, consultez la documentation pour plus d'informations).

L'ajout de commande se fait ici par une liste à choix unique (« list-single »), mais vous pouvez demander d'autres choses comme des mots de passe ou des jids, tout est expliqué dans la XEP-0004.

Quelques précisions sur ad-hoc : à chaque « page » vous pouvez effectuer une action:

  • cancel pour annuler
  • prev pour revenir en arrière
  • execute pour lancer une commande ou continuer la session
  • next pour passer à la page suivante
  • complete pour finir la sesssion

Ces actions sont gérées par sleekXMPP à travers le dictionnaire « session », la meilleure documentation que j'ai trouvée sur le sujet est le code lui-même : dans le fichier « sleekxmpp/plugins/xep_0050/adhoc.py » présent dans les sources.

Ad-hoc permet également d'indiquer un message, une « note », pour donner l'état de votre commande, elle peut avoir un type « info », « warn » (warning: attention) ou « error » (erreur).

Dans le code nous indiquons que nous avons notre dernière « page » par « session['has_next'] = False », et qu'il faut traiter la réponse dans « _handle_command_complete ». Oui c'est un peu contre-intuitif d’avoir à la fois has_next à False, et un next, mais ce dernier correspond à la réponse et non à une nouvelle page.

Passons à ces réponses. Nous regardons ce qui est dans le formulaire pour savoir quoi faire. Dans le premier cas nous envoyons un message manchette ou « headline » (voir l'épisode 2)

Dans le deuxième cas (au niveau de la note 4) on fait une déconnexion. Alors j'ai eu un problème ici avec SleekXMPP, que j'utilise pour la première fois comme indiqué plus haut : il faudrait pour faire propre terminer la session ad-hoc avant de déconnecter, mais je n'ai pas trouvé de moyen simple de le faire, vu que la déconnexion est immédiate et qu'il faut retourner le dictionnaire session pour terminer la séquence. Peut-être que je suis passé à côté de quelque chose, n'hésitez pas préciser en commentaire si vous avez une astuce.

Passons à la note 5: je refais une vérification du jid avant de lancer la commande privilégiée. La raison est simple: le formulaire est envoyé du client au bot par le serveur sans être vérifié par ce dernier, c'est au bot à le faire. Il est interdit d'ajouter une nouvelle commande, mais comme je doute que SleekXMPP conserve le formulaire d’origine pour vérifier qu'il n'y a rien de nouveau, un attaquant pourrait ajouter la commande privilégiée sans être admin. Cette vérification permet de l'éviter.

Pour faire propre il faudrait envoyer une réponse XMPP précisant que l'action est interdite, mais pour faire simple je me suis contenté d'une exception ici.

Enfin, au niveau de la note 6 on se connecte. Pour un serveur local de test, si vous n'avez pas de serveur DNS configuré comme il faut, vous pouvez spécifier l'adresse ip ou le nom de domaine local en dur, ainsi que le port (par exemple « self.connect(('localhost', 5222)) ». Si votre certificat n'est pas valide, vous pouvez aussi utiliser « use_tls=False » (pour les tests uniquement !). La documentation de SleekXMPP vous indiquera plus clairement comment gérer correctement les certificats.

Enfin, un autre problème que j'ai eu avec SleekXMPP: il ne semble pas possible avec ma version (1.3.1) d'indiquer de ne pas utiliser de commande « exécuter » ou de spécifier son équivalence (ce qui est pourtant possible avec la XEP-0050). Il faudrait qu'elle soit absente ou équivalent à « compléter ». Vous allez ainsi avoir un bouton qui sera inutile, et provoquera même une erreur. Là encore si quelqu'un plus habitué à la bibliothèque peut indiquer en commentaire comment corriger cela. Utilisez donc le bouton « compléter » (ou « finir ») et non « exécuter » de votre client.

Voilà la capture de notre bot piloté par Gajim:

bot piloté par Gajim

Salut à Toi

Pour indiquer les ajouts faits au code, nous utilisons un bot dénommé « Sabot ». Nous gérons les sources avec Mercurial (sur https://repos.goffi.org/). Celui-ci permet d'exécuter une commande via des crochets (« hooks »), dont un qui est lancé à chaque série de commits: incoming. Nous avons donc ceci dans notre hgrc:

[hooks] incoming.sabot = /chemin/vers/hg_sabot_hook.sh

Pour le bot, nous profitons du côté multi-interfaces de SàT: SàT a une architecture qui permet pour un même client (et donc les mêmes profils, comptes, etc) d'avoir différentes interfaces (console, ligne de commande, bureau, web, etc).

Nous avons donc créé le compte comme un compte normal grâce à Primitivus, l'interface console (nous sommes sur un serveur sans interface graphique disponible). On peut joindre le salon désiré (ici sat@chat.jabberfr.org), et le mêttre en favori (grâce à la XEP-0048), ainsi que gérer l'entrée automatique (« autojoin »). Il ne reste plus qu'à envoyer le message quand le script hg_sabot_hook.sh est appelé, ce que nous faisons à l'aide de « jp », l'interface en ligne de commande:

#!/bin/sh #on s'assure d'abord que D-Bus est lancé eval `/chemin/vers/dbus-launch.sh` REPOS_BASE="http://repos.goffi.org/sat" PROJECT_FULL="Salut à Toi" REPOS="$REPOS_BASE/rev/$HG_NODE" MUC="sat@chat.jabberfr.org" hg log -r $HG_NODE --template "Commit from {author|person} on $PROJECT_FULL\\n{desc}\\n$REPOS" | jp message -cp sabot $MUC

(le vrai script est un tout petit peu plus long puisqu'il gère aussi les noms des autres dépôts).

L'option « -c » indique de se connecter si ça n'est pas le cas, et « -p sabot » précise qu'il faut utiliser le profil « sabot »

Le script dbus-launch.sh s'assure juste que D-Bus est bien lancé et réutilisé entre les sessions de l'utilisateur:

#!/bin/sh DBUS_PATH="/tmp/.dbus.`whoami`" if [ ! -e $DBUS_PATH ]; then dbus-launch --sh-syntax > $DBUS_PATH chmod 400 $DBUS_PATH fi cat $DBUS_PATH

Voilà pour ces cas pratiques. La prochaine fois, je parlerai soit de PubSub, soit de Jingle.

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

Goffi : Parlons XMPP - épisode 8 - PubSub et PEP

(pour lire les épisodes précédents, suivez l'étiquette correspondante)

Aujourd'hui nous allons expliquer dans les grandes lignes comment fonctionnent « PubSub » et « PEP », et voir à quoi cela peut servir. Cet article va reprendre en partie ce que j'ai dit à la conférence « PubSub, microblogage et XMPP » en juillet dernier aux RMLL.

PubSub signifie « Publish/Subscribe » (Publication/Abonnement), c'est un mécanisme qui permet à une ou plusieurs personnes de publier toutes sortes d'informations sur un endroit connu (qu'on appelle un nœud) et aux personnes qui le désirent de s'abonner, c'est à dire d'avoir accès au contenu et d'être averti des modifications, le tout avec un système d'accès simple. Il s'agit du patron de conception « observateur/observable » décentralisé et appliqué à XMPP.

Le fonctionnement est expliqué dans la XEP-0060, c'est une des XEPs les plus longues de XMPP mais le principe est relativement simple à comprendre. Sans reprendre le long glossaire du document, expliquons quelques termes :

  • le service PubSub est l'entité qui gère le mécanisme de publication, d'autorisation, d'abonnement, de notification. C'est une entité XMPP et un jid y est donc associé, c'est à lui que vous faites toutes les requêtes pour un nœud donné.
  • le nœud est un espace associé à une publication. On peut associer ça à l'adresse d'un flux Atom.
  • un « item » (élément) est une publication dans un nœud. On peut associer ça à un article dans un flux Atom.
  • cet « item » contient un « payload » (charge utile), c'est à dire un contenu significatif qui dépend de la fonctionnalité utilisée. En effet la XEP-0060 décrit un mécanisme générique et souple, qui est ensuite utilisé dans des cas pratiques par d'autres extensions.

Un service PubSub est généralement un composant de votre serveur, mais ça peut-être n'importe quelle entité : votre serveur lui-même (c'est le cas avec PEP que nous allons voir ci-dessous), ou un client voire votre client lui-même (mais c'est assez rare – je n'ai jamais vu de client le faire –, car en général on utilise le service de son serveur).

Le mécanisme général est très simple et centré sur les nœuds : chaque entité (associée à un jid) à un rôle lié à ce nœud selon qu'elle l'ait créé, qu'elle soit publieur, abonné, banni ou sans lien avec le nœud. À ces rôles sont donnés des autorisations : le droit d'écrire (avec le « publish model » ou modèle de publication) et le droit en lecture (avec l'« access model » ou modèle d'accès).

Reprenons de manière un peu plus formelle. Les rôles dont nous avons parlé sont appelés « affiliations », et on peut avoir les suivantes:

  • owner (propriétaire): en général celui qui a créé le nœud
  • publisher (publieur): celui ou ceux (il peut y en avoir plusieurs) qui ont accès en écriture
  • publish-only (publication seulement): droit d'écriture mais pas de lecture, c'est un cas peu fréquent.
  • member (membre): quelqu'un qui est abonné au nœud
  • none (rien): l'entité n'a pas de lien avec le nœud
  • outcast (banni): l'entité a été explicitement interdite d'accès au nœud

La section 4.1 de la XEP-0060 fourni un tableau qui montre les autorisations selon l'affiliation. Ainsi on voit que le propriétaire peut publier ou configurer un nœud.

Les modèles d'accès (pour la lecture) définis dans la XEP-0060 sont les suivants:

  • open (ouvert, public): tout le monde peut lire le nœud
  • presence (présence – oui je traduis même pour un seul accent –) : si une entité est autorisée à voir la présence du publieur, alors elle peut accéder au nœud
  • roster (liste de contacts): si une entité est dans un groupe défini (dans la configuration du nœud) de la liste de contacts du service pubsub, elle a accès au nœud.
  • whitelist (liste blanche): des entités sont explicitement autorisées dans la configuration du nœud

Et rapidement les modèles de publication:

  • publishers (publieurs): quelqu'un qui a l'affiliation publieur peut écrire
  • subscribers (abonnés): n'importe quel abonné peut écrire
  • open (ouvert/libre): tout le monde peut écrire

Il faut bien noter une chose essentielle dans PubSub : quand la combinaison autorisation/abonnement/configuration le permet, on reçoit une notification immédiatement quand un élément est publié, modifié ou supprimé. Autrement dit on n'est plus du tout dans l'analogie avec un flux Atom – où on doit aller vérifier régulièrement qu'il n'y a rien de nouveau –, on est prévenu si nécessaire. Ceci est beaucoup plus efficace, rapide, et économe en ressources.

Voilà pour la base. La XEP défini d'autres choses qu'il n'est pas forcément pertinent d'expliquer ici, comme les métadonnées ou les inscriptions temporaires. On peut toutefois s'arrêter sur les collections, qui ne sont que mentionnées dans la XEP-0060 mais décrites en détails dans la XEP-0248. Elles permettent de faire des arbres de nœuds, et ainsi de représenter des données avec des relations entre elles. Des exemples valent parfois mieux qu'un long discours: les collections peuvent être utilisées pour représenter un système de fichiers sur un disque dur, ou un arbre généalogique.

Tout ceci est souple, générique, puissant, et relativement facile à utiliser par un client. Mais la XEP étant très longue, et l'implémentation de la partie service plus complexe, les implémentations ont mis du temps à arriver (et encore aujourd'hui elles sont très inégales). Comme PubSub peut être intéressant même sans tout le mécanisme, une version simplifiée est décrite dans la XEP-0163: « Personal Eventing Protocol » (Protocole d'évènements personels).

Cette dernière se base sur PubSub, mais définit les règles suivantes qui simplifient beaucoup :

  • 1 compte (jid) = 1 service : probablement la règle la plus importante, elle évite d'avoir à chercher un service PubSub associé à un jid, puisque le service est l'adresse canonique (« bare jid ») de l'entité. Ainsi pour la microblogage (XEP-0277), il suffit de connaître le jid de la personne – le nœud étant défini dans la XEP – pour retrouver ses publications.

  • 1 publieur par nœud : le propriétaire et le publieur sont le même, et il n'y a qu'un publieur par nœud. On se coupe ainsi de l'édition collaborative par souci de simplification, et il faudra utiliser PubSub pour ce genre d'applications.

  • accès par présence par défaut : sans rien toucher, il suffit d'avoir quelqu'un dans sa liste de contacts (et qui a accès à la présence) pour qu'il soit autorisé à voir nos publications

  • notifications filtrées sur l'intérêt exprimé : pour éviter d'être submergé de notifications, une entité/un client doit explicitement indiquer qu'il est intéressé par tel ou tel nœud

  • options par défaut au plus simple

PEP était utilisé au début pour des événements (sans grand intérêt à mon sens) comme l'humeur ou la musique en cours d'écoute, mais depuis son utilisation a évolué.

Voici, pour finir, quelques exemples d'utilisation de PubSub ou PEP:

  • enregistrement de données publiques ou semi-publiques (XEP-0222), par exemple une clef publique de chiffrement
  • enregistrement de données privées (XEP-0223), très utile pour n'importe quelle donnée de petite taille
  • les marque-pages (XEP-0048) utilisés pour les salons de discussions utilisent PEP (la XEP-0048 a été modifiée après l'apparition de PEP pour s'y adapter)
  • le microblogage bien entendu (XEP-0277), qui utilise PEP et utilise du Atom pour sa « charge utile » (« payload ») et un accès en général public. Les commentaires sont sur un nœud PubSub séparé, en général avec un modèle de publication par abonnement.
  • la XEP-0214 utilise PubSub et les collections pour faire un dépôt de fichiers
  • le futur protocole de discussions de groupe « MUC 2 » devrait se baser sur PubSub

PubSub pourrait aussi être utilisé pour placer des points sur une carte, faire un wiki, organiser des événements, ou encore gérer et surveiller une batterie de serveurs qui nous préviendraient en cas de problème.

Je reviendrai sûrement plus tard sur tout ça pour expliquer le microblogage ou d'autres extensions.

La prochaine fois, je pense vous parler de Jingle (mais pas de la partie vidéo-conférence). J'espère qu'à ce stade vous commencez à comprendre que XMPP n'est pas une technologie, mais un ensemble de technologies coordonnées et qui se réutilisent les unes les autres quand nécessaire.

J'ai un peu réduit le rythme des articles ces derniers temps car je travaille sur mon projet, et qu'une partie a été traduite en anglais avec l'aide de pas mal de monde (merci encore !), tout cela prend du temps.

Si vous venez à la fête de l'huma ce week-end, vous pourrez me trouver au village du libre, où Parinux me prête gentiment un bout de stand (merci aussi !). Je n'y serai pas en permanence, car je compte aussi profiter un peu de la fête :)

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

Goffi : Vous voulez du (micro)blogage, de la décentralisation et du chiffrement sur Android ?

Salut à vous !

 Aujourd'hui nous lançons une petite campagne de financement participatif pour le développement d'une version Android de Libervia/Salut à Toi. Nous souhaitons ici développer une application native, avec toutes les fonctionnalités avancées dont nous disposons déjà, telles que le (micro)blogage, le chiffrement de bout en bout via OTR (et il est possible que nous ajoutions OMEMO/Axolotl, une nouvelle méthode permettant de chiffrer les messages hors ligne ou dans une discussion de groupe), le partage de fichiers, ou des choses plus exotiques comme une télécommande universelle. Ce développement fonctionnera également sur bureau (Gnu/Linux bien sûr, mais il devrait fonctionner sur d'autres plateformes comme Windows ou Mac OS X) avec la même interface. Il existe déjà quelques clients Android (comme le très joli Movim de notre ami Edhelas, Conversations ou Xabber), mais aucun n'offre actuellement le même bouquet de fonctionnalités que Libervia/Salut à Toi, aussi ce développement sera un vrai plus. D'autre part nous sommes particulièrement attentifs à l'éthique (cf notre contrat social) et nous sommes organsiés en association loi 1901 en autogestion, dans l'idée de faire une coopérative sur le long terme. Cette campagne est aussi l'occasion de tester un moyen de financement, et nous avons choisi Arizuka car ce site se concentre sur les projets de l'économie sociale et solidaire. Voilà, donc maintenant on compte sur vous ! N'hésitez pas à poser vos question soit en commentaire, soit par courriel (goffi@goffi.org) soit sur notre salon de discussion XMPP: sat@chat.jabberfr.org lien vers la campagne: http://www.arizuka.com/fr/projects/liberviaSalut à Toi: http://salut-a-toi.org 
P.-S. : nous préparons aussi une (grosse) nouvelle version dans les semaines à venir, je ferai certainement une série d'articles pour expliquer les nouveautés et comment se servir de Libervia ou SàT en général.

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

Goffi : Parlons XMPP - épisode 9 - copie de fichiers et Jingle

(pour lire les épisodes précédents, suivez l'étiquette correspondante)

Bien que déjà répété un certain nombre de fois, je le redis : XMPP fait bien plus que de la messagerie instantanée. Une des fonctionnalités qui est apparue rapidement est la copie de fichiers, voyons cela de plus près

Le problème : XMPP étant du XML, il n'est pas vraiment adapté aux données purement binaires comme des fichiers. La solution est de passer par l'extérieur, c'est à dire une autre connexion non XML, et d'utiliser le flux XML pour la gérer, on parle de connexion « out-band ». Malheureusement, parfois il n'est pas possible d'établir cette connexion, alors on passe tout par le flux XML : c'est lent, peu efficace, mais ça fonctionne presque toujours, on parle de connexion « in-band » (qu'on pourrait traduire par « interne »).
Il y a aussi des cas où il est plus simple et efficace de rester « in-band », enfin surtout un : si on envoie très peu de données, comme une petite image (un avatar par exemple).

Comme souvent dans le monde XMPP, plusieurs solutions ont été proposées, expérimentées, parfois adoptées puis dépréciées, jusqu'à ce qu'on trouve et garde celle qui semble convenir le mieux, et qui est a priori la meilleure techniquement.
Commençons par la solution courante, appelée « Stream Initiation » (initiation de flux), elle est définie par la XEP-0095, et la copie de fichier l'utilise via la XEP-0096.

La copie de fichiers est la seule application qui utilise la XEP-0095. Nous avons 2 personnes en jeu : celle qui veut envoyer le fichier, qu'on appellera « l'expéditeur » (« sender » en anglais) et celui qui veut le recevoir, qu'on appellera « le destinataire » (« receiver » en anglais).

La XEP-0096 défini ce qu'on appelle un « profil » pour l'initiation de flux, le profil « transfert de fichier ». Elle sert principalement à transmettre les métadonnées du fichier : une description, sa taille, son nom, sa date de dernière modification, et un « hash », c'est à dire une somme de contrôle pour vérifier que le fichier a été correctement copié. C'est l'algorithme MD5 qui est utilisé ici, pourtant connu pour avoir des failles, même si elles ne sont pas dramatiques dans le cadre d'un transfert de fichier (l'expéditeur étant déjà validé par ailleurs).

Il est également possible d'indiquer une fourchette (« range ») à copier, c'est à dire un point de départ (« offset ») dans le fichier et une longueur (« length »), pratique si un transfert a été interrompu en plein milieu, par une coupure de courant par exemple.

Le reste, c'est la XEP-0095 qui s'en occupe, il s'agit juste de négocier la méthode à utiliser, le destinataire accepte ou non le flux, et choisi une des méthodes. Il y a 2 méthodes principales : la première est le transfert en interne (« In-Band Bytestreams », XEP-0047) qui se contente de transcoder les données en base64.

La deuxième (la XEP-0065, « SOCKS5 Bytestreams ») est plus intéressante, elle utilise SOCKS v5 pour établir une connexion externe (« out-band ») et tenter une connexion directe ou via un « proxy » qui est un élément externe relayant les données. L'utilisation d'un proxy est moins efficace qu'une connexion directe bien entendu (les données passent par un 3ᵉ point), mais est parfois nécessaire si une connexion directe est impossible à cause d'un pare-feu ou d'un NAT par exemple. XMPP permet, grâce à disco (la XEP-0030) de savoir automatiquement si votre serveur propose un proxy.
C'est donc la XEP-0065 qui est à l'origine du nom « proxy65 » couramment utilisé.
Petit détail qui a son importance : dans le cas du transfert direct, la connexion se fait du destinataire vers l'expéditeur (qui a ouvert un port pour l'occasion), aussi la connexion peut échouer dans beaucoup de cas (par exemple l'expéditeur est derrière un NAT). Une méthode a été faite pour améliorer la situation, mais elle n'a jamais été standardisée, vous pouvez la trouver ici : http://delta.affinix.com/specs/stream.html.

Voilà pour la méthode actuelle. Elle pose de nombreux problèmes : c'est uniquement l'expéditeur qui doit proposer et le destinataire accepte ou refuse, il n'y a pas de vraie méthode de secours (appelée « fallback » en anglais), c.-à-d. de méthode pour passer de SOCKS5 (ou « s5b ») au transfert « in-band » (ou « ibb »), et il y a souvent des difficultés pour établir une connexion directe comme expliqué au paragraphe précédent. Bref, ça n'est pas satisfaisant. Mais le problème est assez complexe, il n'est pas si simple de faire une connexion directe, c'est à dire pair à pair (ou « peer to peer » en anglais).

Heureusement, une nouvelle méthode est apparue, et elle est beaucoup plus souple et efficace : Jingle. Mais cet article étant déjà long, j'en parlerai la prochaine fois.

J'en profite pour annoncer que je vais commencer une série d'articles pour expliquer l'architecture et ce qu'on peut faire concrètement avec « Salut à Toi ».

Je vous rappelle aussi que nous avons une campagne de financement participatif en cours pour porter « Salut à Toi » sur Android et faire une version de bureau, et que nous avons bien besoin de soutien ! http://www.arizuka.com/fr/projects/libervia
Merci :)

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

Articles similaires

Goffi : SàT: Comment ça marche ?

Salut à vous,

En parallèle de la série d'articles sur XMPP, j'en commence une pour expliquer « Salut à Toi », notre logiciel à tout faire basé sur ce protocole. Il y a beaucoup de choses qui tournent autour de ce logiciel, sur son organisation technique, sa philosophie, et ce qu'on peut faire avec. Aussi je vais faire des articles plus ou moins techniques (plutôt moins), et je vais bientôt expliquer quelques cas concrets d'utilisation.


Ce premier article est un peu technique, puisque je vais expliquer l'organisation générale du logiciel, et ce qu'elle a de particulier.

Donc pour vous donner une idée, SàT c'est dans les grandes lignes ça:

http://ftp.goffi.org/media/pictures/schemas/sat_simplified_overview.png

C'est un client XMPP. Si vous avez lu mes articles, vous savez que XMPP ne signifie pas que « messagerie instantanée », mais beaucoup, beaucoup plus de choses. Le projet SàT essaye non seulement de faire le maximum de ces choses, mais aussi d'expérimenter de nouvelles.

La partie centrale  est la partie « d'arrière-plan » ou « backend » en anglais. C'est elle qui gère le plus gros du logiciel. La partie à droite  sont les « frontaux » (« frontends » en anglais) ou encore les interfaces homme/machine. C'est elles qui gèrent tout l'affichage des informations, ou la réception des commandes et autres messages.

Ce qui fait la force de cette architecture, c'est qu'il est très facile de faire un nouveau frontal, et que le tout représente un seul client. Autrement dit : si vous créez un profil (voir plus bas) sur un frontal, il sera disponible sur tous les autres, si vous envoyez un message d'un côté, il sera visible sur tous les frontaux connectés, l'historique est commun, les fonctionnalités aussi.
En effet, quand on ajoute une fonctionnalité (les messages de groupe par exemple, la copie de fichier, les blogs), c'est dans le « backend » que nous le faisons, et elle se retrouve ainsi disponible partout. Évidemment dans certains cas ça demande du développement particulier pour les interfaces : nous avons un jeu de Tarot par exemple, et on ne dessine pas les cartes de la même manière dans l'interface console (appelée Primitivus) et dans l'interface web (appelée Libervia).

Les interfaces (ou frontaux) disponibles aujourd'hui sont:
 
  • Libervia : interface web 
  • Primivus : interface de console (avec des fenêtres de type ncurses
  • jp: ligne de commande, permet d'automatiser des tâches facilement, d'envoyer un fichier dans parcourir des menus, d'écrire depuis Vim, etc 


Nous avions une autre interface pour le bureau, appelée « Wix », mais nous l'avons abandonnée, car elle était peu pratique et peu utilisée. Notre campagne de financement en cours permettra de remplacer cette interface et par la même occasion de porter le projet sur Android.

Cette architecture a un autre avantage : il est facile d'intégrer SàT dans des logiciels existants, et avec n'importe quel langage de programmation, mais laissons cela de côté pour le moment.

SàT a également une architecture modulaire via l'utilisation de greffons (ou « plugins » en anglais) au niveau du  sur le schéma : le cœur ne gère que l'essentiel (messages simples, liste de contacts, système de logs, gestion des profils, etc), et toutes les fonctionnalités avancées sont disponibles sous forme de greffons (messages de groupe, blog/microblogs, syntaxes avancées, etc). L'idée est d'une part de pouvoir désactiver les fonctionnalités qu'on ne veut pas, et d'autres part de permettre d'étendre facilement le logiciel : un greffon sera d'autant plus intéressant qu'il sera disponible pour toutes les interfaces. Ainsi un de nos greffons gère les marque-pages (c.-à-d. une liste de salons de discussions) : ils sont utilisables à la fois avec Primitivus (en texte), avec Libervia (graphiquement via le web) ou encore avec jp (en ligne de commande). À terme nous comptons faire un système de téléchargement automatisé de greffons, un peu comme les dépôts de logiciels.

Nous avons besoin de travailler un peu côté serveur, pour notre composant PubSub ou notre annuaire par exemple, nous avons donc aussi quelques travaux de ce côté.

 Enfin les profils dont je parlais plus haut sont des comptes locaux associés à un compte XMPP. Ainsi j'ai un profil pour mon compte sur le serveur jabber.fr et un autre pour celui sur libervia.org, je peux utiliser l'un ou l'autre ou les 2 en même temps.
 
Voilà pour une première introduction, un peu technique parce que je voulais expliquer l'originalité de l'architecture. La prochaine fois je pense parler un plus spécifiquement de Libervia, et du système de blogs/microblogs décentralisé.

N'oubliez pas que nous avons une campagne de financement en cours, et nous avons grand besoin de soutien ! Merci.
 

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

Goffi : centralisé, décentralisé, P2P, mais c'est quoi tout ça ?

Une petite mise au point technique, parce que je vois qu'il y a beaucoup de confusion sur les termes « centralisé » (encore lui ça va), « décentralisé », « distribué », « fédéré », « pair à pair », etc.

Il faut dire que la confusion est assez normale, il n'y a pas vraiment de définition de ces termes, et ce que les gens entendent en les employant dépend de leurs lectures, leur compréhension, et leur sensibilité.

Commençons par le plus simple : centralisé. Un système centralisé c'est un système où tout le monde dépend d'une même autorité, un serveur a priori dans le cas informatique. Bien qu'un système centralisé soit beaucoup plus simple à faire sur le plan technique (facile de trouver des gens ou des informations quand ils sont tous au même endroit), il peut avoir ses propres problèmes : montée en charge en particulier ; il est plus difficile d'absorber des données quand il n'y a qu'un centre de traitement, les tuyaux peuvent rapidement se trouver trop petits, etc.

Un système de communication centralisé pose de nombreux problèmes : il est évident qu'il est plus facile d'espionner, censurer ou modifier des données quand elles sont dépendantes d'un seul point. Même sans intention malicieuse, on a un point unique de défaillance (ce que les anglophones appellent « single point of failure »), c.-à-d. qu'une panne, une attaque, une catastrophe naturelle ou pas provoque l'arrêt du service voire la perte des archives.
Dans les cas les plus gros, on prend un hangar et on le remplit d'ordinateurs, ce sont les fameux centres de données ou « data centers ».

Là où ça se complique un peu, c'est qu'un système centralisé peut être physiquement en plusieurs endroits, ou utiliser des systèmes de répartition/répétition des données. Le principe est d'éviter l'engorgement ou les risques de pannes cités plus haut, mais même si ces machines sont séparées et communiquent entre elles à distance, elles sont a priori toujours sous la même autorité.


http://repos.goffi.org/sat_docs/raw-file/tip/schemas/decentralisation/centralised_simple.png


Passons maintenant aux systèmes décentralisés/distribués/fédérés. Certains vont pousser les haut-cris que je mette tout ça ensemble, parce qu'il n'y pas vraiment de définition et que chacun se fait plus ou moins la sienne.

« dé-centralisé » veut dire qui n'a pas de centre, ni plus ni moins. L'idée pour un système de communication, c'est que toute entité (individu, association, organisation, etc) puisse être une partie d'un réseau qui n'a pas d'autorité principale, et que ces autorités puissent parler entre elles.

On essaye ainsi d'éviter les problèmes de la centralisation, mais on se retrouve avec tout un tas de nouveaux problèmes, techniques pour la plupart : il est beaucoup plus difficile de retrouver des données ou des gens en plusieurs endroits, de se mettre d'accord sur la « langue » à utiliser pour communiquer (surtout quand on a des logiciels ou des versions d'un même logiciel différents), ou encore d'être sûr que la donnée qu'on a est à jour (est-ce que le message a été modifié ou supprimé ?).

« fédéré » est généralement employé pour parler de systèmes différents (noms de domaines différents par exemple, voire logiciels différents) qui peuvent communiquer entre eux. Un système décentralisé est fédéré par nature, sinon on a affaire à plusieurs systèmes centralisés indépendants. Disons que si on veut être pointilleux, on peut dire qu'un système décentralisé peut communiquer avec seulement certaines entités (je communique avec les serveurs de mon entreprise internationale, mais pas avec le reste du monde), et que la fédération implique l'idée que c'est ouvert à tous (ou presque, il y a souvent des gens qu'on ne veut pas, les spammeurs par exemple).

« distribué » ne devrait pas être employé pour les systèmes de communication. Le terme est normalement utilisé pour le calcul : si votre ordinateur a plusieurs processeurs, il distribue la charge de calcul entre eux, ou dans le cas de très grosses demandes (recherche par exemple), on peut demander à plusieurs machines distantes de faire chacun une partie d'une grosse opération mathématique. Dans ce cas, l'organisation de la répartition est souvent contrôlé par une même autorité (par exemple le laboratoire qui veut faire cette opération).
Par extension, le terme est aussi utilisé pour les systèmes de fichiers, et certains l'emploient pour les logiciels de communication, mais cela ne veut pas dire autre chose que décentralisé.


http://repos.goffi.org/sat_docs/raw-file/tip/schemas/decentralisation/decentralised_simple.png


Enfin, il y a le terme P2P ou « pair à pair » (« peer to peer » en anglais). En fait une connexion pair à pair n'est rien d'autre qu'une connexion directe entre 2 ordinateurs, mais on l'associe souvent aux technologies plus ou moins apparentées qui ont commencé à apparaître à la fin des années 90/au début des années 2000 et qui servaient (et servent toujours) principalement à partager des fichiers.

Après Napster (lancé mi 1999) qui était un bête système centralisé qui mettait en relation des machines pour une connexion directe, il y a eu beaucoup d'essais et d'évolutions pour trouver un système qui permet de se passer de serveurs, l'idée étant principalement de permettre au réseau de fonctionner même si on lui coupe l'accès à une partie de lui-même.

Je vous passe toutes les techniques qui sont utilisées : c'est un domaine très pointu, très intéressant, et qui demanderait facilement un livre pour être expliqué. Ça part des systèmes de répartition par propagation de proche en proche à la Usenet, jusqu'aux récentes chaînes de blocs (blockchain), en passant par les tables de hachage distribuée (Distributed Hash Table), etc.

Ce qui fait principalement la différence entre un système « décentralisé » et « entièrement P2P », c'est la place du serveur. Un serveur, dans les grandes lignes, c'est ce qui permet à votre logiciel (le « client ») de contacter d'autres clients via d'autres serveurs. Il est là pour tout un tas de raisons : identifier les gens, donner les bonnes données aux bonnes personnes, garder
les fichiers à donner à un client actuellement hors ligne quand il sera disponible, etc.
Si on supprime le serveur, inévitablement c'est votre client (ou un autre) qui va devoir se charger de ce travail, ce qui aura un impact sur votre bande passante, la charge de travail pour votre processeur (et donc la durée de vie de votre batterie le cas échéant), et compliquera la tâche de votre logiciel (plus difficile de savoir à qui parler et à qui faire confiance quand on n'a pas de serveur comme référence).

http://repos.goffi.org/sat_docs/raw-file/tip/schemas/decentralisation/fully_P2P_simple.png

Pour transformer un système décentralisé avec serveurs en système entièrement P2P (c.-à-d. sans serveur), je vais vous donner une recette : vous mettez un seul client sur votre serveur, et vous mettez le serveur et le client sur la même machine.
Bien sûr si vous voulez être vraiment indépendant, il va falloir supprimer le besoin de points de références, et en particulier le système de noms de domaine ou « Domain Name System ». C'est ce qui associe le nom de votre serveur (par exemple « libervia.org ») à l'adresse « IP » qui permet de vous retrouver sur Internet. Il va falloir aussi être capable de retrouver les données ou les gens un peu partout, et là on se retrouve avec les technologies intéressantes mais complexes évoquées plus haut (« D.H.T. », « Blockchain », « SuperPeer », etc).
 

Et XMPP dans tout ça ?

Je vais quand même parler un peu de XMPP. XMPP est un système dit « hybride », c'est à dire qu'il fonctionne normalement sur un modèle client/serveur, mais il peut faire du P2P à la demande (pour transférer un fichier ou faire de la visioconférence par exemple).
Il est même possible de fonctionner sans serveur sur un réseau local (comme expliqué ici), et il peut parfaitement devenir à terme un système entièrement P2P comme expliqué dans le paragraphe précédent.

Ceci dit, même si l'approche entièrement P2P est séduisante, je pense que l'architecture décentralisée sur un modèle client/serveur est un compromis bien plus efficace : elle limite le travail de votre client, permet une meilleure optimisation du trafic ou du calcul, et facilite l'échange asynchrone (quand deux personnes ne sont pas connectées en même temps). Bref, c'est tout sauf un modèle du passé comme on peut le lire parfois, et bien qu'il y ait plusieurs recherches et options intéressantes pour des systèmes entièrement P2P, il ne faudrait pas jeter le bébé avec l'eau du bain.

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

Pages