Linux (fr)

  • Les journaux LinuxFr.org les mieux notés du mois de juin 2015 (Dépêches LinuxFR)

    LinuxFr.org propose des dépêches et articles, soumis par tout un chacun, puis revus et corrigés par l'équipe de modération avant publication. C'est la partie la plus visible de LinuxFr.org, ce sont les dépêches qui sont le plus lues et suivies, sur le site, via Atom/RSS, ou bien via partage par messagerie instantanée, par courriel, ou encore via médias sociaux.

    Bannière LinuxFr.org

    Ce que l’on sait moins, c’est que LinuxFr.org vous propose également à tous de tenir vos propres articles directement publiables, sans validation a priori des modérateurs. Ceux-ci s'appellent des journaux. Voici un florilège d'une dizaine de ces journaux parmi les mieux notés par les utilisateurs… qui notent. Lumière sur ceux du mois de juin passé.

    Lire les commentaires

  • Nouveauté : SuperTuxKart Remix 0.9-0.73 (Dépêches LinuxFR)

    Les examens sont finis, il est temps de se défouler : à l'instar de la Framakey Ubuntu Remix, voici un DVD multimodal spécial SuperTuxKart.

    SuperTuxKart est un jeu de course de karting avec Tux comme héros et d'autres mascottes de logiciels libres (le gnou de Gnu, Gimp, Suzanne de blender, Xue la souris d'XFCE, etc).

    SuperTuxKart Remix 0.9-0.73 est un DVD(/USB) basé sur LinuxConsole 2.4 et comprenant diverses versions de SupertuxKart de 0.73 à 0.9. Le DVD est multilingue (français, anglais, allemand et italien au moins). C'est une collaboration entre l'association LanPower et Yann Ledoaré de LinuxConsole. C'est un DVD avec donc une partie Live DVD (ou DVD autonome).

    Nous y avons rajouté :

    • dans le répertoire binaries : les installeurs SuperTuxKart 0.9 pour Windows de XP à 8. SuperTuxKart 0.73 est disponible pour des raisons de compatibilité avec Windows 2000 mais aussi pour les machines peu performantes. Dans ce répertoire, vous trouverez aussi les binaires pour Linux (fichier .tar.gz) et pour MacOSX (fichier .dmg) ;
    • dans le répertoire data se trouvent la vidéo officielle de SuperTuxKart 0.9 ainsi que diverses autres vidéos, le poster officiel, des papiers peints et des étiquettes pour CD/DVD ;
    • une interface utilisateur multilingue se lance automatiquement sous Windows (sinon lancer windows.bat). Cette interface fonctionne (parfois) aussi sous Linux grâce à Wine (lancer "bash linux.sh").

    Pour résumer, il y a au moins trois utilisations possibles :

    • sans système d'exploitation : démarrer sur le DVD (choix "Live CD") ou sur la clé USB (choix "Live USB")
    • sous Windows : exécution automatique ou lancer windows.bat
    • sous Linux : utiliser le binaire tar.gz de SuperTuxKart 0.9 fourni dans le répertoire binaries, ou démarrer l'interface Windows par linux.sh (bien sûr, vous n'avez pas besoin de ça si SuperTuxKart 0.9 figure dans les dépôts de votre distribution et que vous avez Internet).

    Note : SuperTuxKart cherche toujours un développeur OpenGL.

    Lire les commentaires

  • Entretien avec Véronique Torner (Alter Way) présidente du Paris Open Source Summit 2015 #OSS_Paris15 (Dépêches LinuxFR)

    Nous lançons pour l'été une petite série d'entretiens avec un certain nombre d'acteurs du Logiciel Libre et Open Source avec des profils très variés comme vous pourrez le constater.

    Nous démarrons avec Véronique Torner, qui a pas mal de cordes à son arc et surtout connue en tant que co-fondatrice et co-dirigeante d'Alter Way (ESN avec un modèle d'affaire basé sur l'Open Source) et administratrice du Syntec Numérique (syndicat professionnel) et qui est doublement présente dans l'actualité actuellement :

    Elle est aussi la seule femme présente dans le guide des expertes à la section Open Source.

    Place à l'entretien dans la seconde partie de la dépêche.

    LinuxFr.org : «­؜ Bonjour Véronique. Tu es co-présidente d’Alter Way, administratrice du Syntec Numérique, pourrais-tu nous en dire un peu plus sur tes activités au quotidien ? »

    Véronique Torner : « Bonjour LinuxFr.org !

    J'ai la chance d'avoir une activité professionnelle très riche et multi-facettes dans un secteur passionnant qui est le numérique :

    • Face A : une activité d'entrepreneur dans une PME aux ancrages technologiques forts et valeurs d'ouverture fondamentales avec des challenges quotidiens de croissance, de management et d'innovation.
    • Face B : une activité associative dans un syndicat professionnel pour la défense d'un collectif, d'une filière.

    L'engagement, le travail en équipe, l'ouverture, la solidarité sont les valeurs qui me portent et me réjouissent ! »

    «­؜ Tu es une des rares femmes entrepreneur dans ce milieu très masculin. D’ailleurs, tu le mets en avant sur l’appel à contribution du prochain Paris Open Source Summit. Pourquoi ? Est-ce difficile d’être une femme du numérique ? »

    « Je ne t'apprends rien en te disant qu'il y a encore trop peu de femmes dans notre secteur. Je me sens la responsabilité d'être quand je le peux le porte-drapeau des femmes dans le numérique ! Et pour répondre à ta question : être une femme du numérique n'est pas difficile c'est tout simplement passionnant ! »

    «­؜ Que peuvent faire concrètement au quotidien, selon toi, les libristes et plus largement chacun d’entre nous pour améliorer la situation ? »

    « Contribuer au monde numérique de demain en préservant nos valeurs d'ouverture ! De manière pragmatique venir au prochain Paris Open Source Summit pour faire briller notre filière et tous ses talents. »

    «­؜ L’actualité d’Alter Way récemment, c’est la prise de contrôle par Econocom qui n’est pas forcément connu pour son côté Open Source/Libre (ni en bien, ni en mal d’ailleurs). Ne risquez vous pas d’y perdre votre âme pro-libre ? D’être le vilain petit canard dans ce très grand groupe ? »

    « Philippe Montargès (mon associé) et moi même avons engagé Alter Way dans un plan stratégique pour les 5 prochaines années.
    Ce projet que nous avons appelé Born2run vise à nous développer principalement sur nos activités de Run (TMA, Support et infogérance de cloud) en France et en Europe pour atteindre fin 2020 40M€ de CA.

    C'est un projet ambitieux qui nécessite des partenaires financiers audacieux. Econocom a racheté les titres de nos investisseurs historiques pour nous accompagner dans cette aventure. Il ne s'agit pas d'une absorption mais d'un investissement. Nous nous sommes choisis avec Econocom parce que nous nous retrouvons sur les valeurs d'entreprendre et l'envie de développer un leader européen de l'Open Source. Nous sommes très heureux de ce choix et très fiers d'être le satellite Open Source de la galaxie Econocom. »

    «­؜ Ça va être moules-frites tous les jours à la cantine d’Alter Way ? »

    « Alter Way reste Alter Way. À titre perso, j'adore les moules frites ! »

    «­؜ Tu as pris les rênes du comité programme du prochain Paris Open Source summit et tu as lancé un appel à projet ambitieux dans des délais resserrés. Pourrais-tu nous en dire plus sur tes attentes ?  »

    « Nous souhaitons avec ce nouvel événement être le rendez-vous incontournable de tous ceux qui construisent le numérique de demain : un numérique innovant, collaboratif, interopérable, performant garantissant sécurité et liberté.
    Notre ambition est d'exposer les innovations technologiques, la réalité et le dynamisme économique des solutions et acteurs du libre et Open Source, ainsi que les impacts sociétaux de notre filière. »

    «­؜ Tu as volé la baguette de Gandalf. Quelle conférence de rêve (sujet/intervenant) souhaiterais-tu avoir pour le prochain Paris Open Source Summit ? »

    « Hum question difficile… sans dévoiler les surprises de notre programme…
    Soyons fous : un débat entre Linus Torvalds et Satya Nadella »

    «­؜ Quelle place y aura-t-il pour le tissu associatif libriste dans ce nouvel événement ? »

    « Une grande place !

    Je crois que l'ossature proposée du programme offre de belles possibilités. Pour déposer sa proposition de contribution, c'est directement sur le site dédié »

    «­؜ Peux-tu nous dire quel est ton environnement de travail sur ton ordinateur ? »

    « Je travaille sur Mac.  »

    « Merci Véronique et bon courage ! »

    Lire les commentaires

  • Rencontres Mondiales du Logiciel Libre, du 04 au 10 juillet 2015, à Beauvais (Dépêches LinuxFR)

    Les Rencontres Mondiales du Logiciel Libre 2015 commencent ce samedi, à Beauvais, Oise, sur le parvis de la cathédrale par le « week-end grand public » qui a pour but de faire découvrir les technologies et la culture libre à un large public.

    Les Rencontres se poursuivront ensuite toute la semaine par des cycles de conférences, axés autour de thèmes et fils rouge. Un Festival des Arts Numériques vous sera également proposé, offrant trois soirées, concerts et scéance cinéma (ainsi que quelques surprises ;-)

    Pas moins de 43 associations seront présentes, de la Ligue de l'Enseignement jusqu'à l'April, en passant par Debian France, AFPy, Café Vie Privée, Clonezilla, FLOSS Manuels Francophones, FSFE, Haiku, … Et bien sûr Oisux ! Retrouvez la liste complète ici. LinuxFr sera présent.

    Neuf thèmes de conférences, «Systèmes embarqués», «développement logiciel», «infrastructures», mais aussi «art, culture & médias», «société», «sécurité». Retrouvez la liste complète. Chaque thème dispose d'une page spécifique détaillant chaque conférence, leurs horaires, lieux, les intervenants, etc. Le programme étant riche, il est également proposé une page plus synthétique regroupant toutes les conférences sous forme d'un calendrier. Enfin, une application pour Android (v3+) est disponible (sur le magasin de logiciels libres Fdroid afin d'avoir le programme complet dans sa poche).

    Lire les commentaires

  • Parlons XMPP - épisode 3 - le cœur et les extensions (suite) (Journaux LinuxFR)

    Sommaire

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

    En plus de cette partie centrale, des fonctionnalités peuvent être ajoutées, d'où le X de XMPP (pour eXtensible).

    Les extensions sont rédigées sous la forme de « XEP » (XMPP Extension Protocol), idée héritée — si je ne m'abuse — de Python. C'est de cela qu'on parle quand on voit les cryptiques XEP-0XXX dans les fonctionnalités gérées d'un serveur ou d'un client. Pas besoin évidemment de savoir cela pour utiliser un client XMPP, mais il peut être utile de lire une extension (elles se trouvent sur https://xmpp.org/xmpp-protocols/xmpp-extensions/) pour bien comprendre à quoi sert une fonctionnalité. Deux parties sont particulièrement utiles sans avoir à entrer dans les détails d'implémentation : la partie « abstract » (résumé) tout en haut qui indique ce que la XEP fait, et la section « introduction » (la toute première section) qui explique un peu plus les raisons et les cas d'utilisations de l'extension.

    résumé de la XEP-0045

    Une XEP peut décrire une fonctionnalité, une procédure (par exemple la XEP-0001 explique le cycle de vie des XEPs elles-mêmes), un héritage historique (c'est à dire le fonctionnement de quelque chose créé avant la XMPP Standard Foundation), une information (comme des bonnes pratiques), voire une blague (si si, y'a des histoires de toto dans les XEPs aussi !). Elle peut avoir plusieurs statuts (expliqués dans la XEP-0001, je ne sais pas s'il existe une version traduite en français quelque part). Il est intéressant de noter que beaucoup de XEPs sont « experimentales », et donc techniquement pas (encore) des standards, mais souvent implémentées tout de même. De telles XEPs peuvent changer fortement avant le passage au statut de « brouillon » (« Draft »), puis de standard final.

    Pourquoi je vous parle de tout ça ? Pour que vous compreniez bien une chose: XMPP ce n'est pas que de la messagerie instantanée !

    Voici quelques exemples d'extensions intéressantes:

    • Extended Stanza Addressing (Adressage de « stanzas » étendue, XEP-0033): permet d'envoyer un message à plusieurs destinataires à la fois, ou de faire des copies carbones ou des copies carbones invisibles (comme le … oui oui vous voyez où je veux en venir)

    • Multi-User Chat (Discussions multi-utilisateurs, XEP-0045): les discussions de groupes, à la IRC.

    • Ad-Hoc Commands (commandes de circonstance, XEP-0050): un système générique pour gérer tout type de commandes. Lié aux permissions des utilisateurs, c'est un outil absolument génial !

    • vcard-temp (Cartes virtuelles, version temporaire, XEP-0054): la façon historique de gérer des cartes de visites, une sorte de profil public. Une nouvelle extension va la remplacer à terme (la XEP-0292)

    • Jabber Search (Recherche Jabber/XMPP, XEP-0055): pour chercher des jid, utilisé en général par les annuaires.

    • Publish/Subscribe (Publication/Abonnement, XEP-0060): un très gros morceau, qui permet la publication de tout type d'information, et sa récupération en fonction de permissions, avec un système de notification en temps réel.

    • XHTML-IM (XEP-0071): pour publier avec un sous-ensemble de XHTML, c'est à dire avec une mise en forme (écrire en gras ou mettre une image par exemple).

    • Gateway Interaction (Communication avec les passerelles, XEP-0100): permet de gérer les passerelles, c'est à dire des liens avec des réseaux extérieurs

    • Personal Eventing Protocol (protocole d'événements personnels, XEP-0163): une sorte de Publish/Subscribe simplifié

    • Jingle (XEP-0166): Négociation de session pair à pair (P2P), avec un grand nombre d'applications possibles, la plus connue étant la visioconférence.

    • Serverless Messaging (Communication sans server, XEP-0174): permet, comme indiqué, de se passer des serveurs

    • Message Archive Management (gestion des archives des messages, XEP-0313): permet de récupérer des messages ou autre (ça fonctionne aussi avec publish/subscribe) selon certains critères comme une date. Utilisé notamment pour avoir votre historique de conversations sur votre serveur (et ainsi y accéder depuis tous vos clients).

    Et dites-vous bien qu'on ne vient que de gratter la surface.

    Plusieurs de ces extensions seront expliquées dans de futurs articles.
    À noter aussi qu'on utilise souvent des noms courts pour désigner les extensions par exemple « MAM » pour « Message Archive Management ». Ces noms sont normalement indiqués en fin de XEP, dans les appendices (« Document information »): c'est le « short name » (nom court).

    Avec toutes ces extensions, on va se retrouver avec des clients ou serveurs qui gèrent l'une ou l'autre, comment se mettre d'accord ? Eh bien grâce à une autre extension (mais tellement indispensable et couramment implémentée qu'on peut presque la considérer comme standard de base): « Service Discovery » (découverte de services, XEP-0030, nom court : « disco »)).

    Le principe est simple, chaque client ou serveur ou composant (un composant est un service qui vient se greffer à un serveur, voir plus bas) dit qui il est, ce qu'il sait faire, ou les éléments associés.

    qui il est

    Une adresse XMPP (le jid) peut être utilisée par beaucoup de monde: un serveur, un client, un « bot » (robot, nom qu'on utilise pour un programme qui automatise des tâches, agissant souvent comme un client), une passerelle, etc.

    Quand un client (ou autre) en voit une, il est utile de savoir à quoi on parle, par exemple pour afficher de telle ou telle façon dans l'interface (c'est grâce à cela que votre client peut afficher une passerelle d'une autre façon que les clients normaux).

    C'est l'identité de disco qui permet ça, et elle donne une catégorie (par exemple « client » ou « serveur »), un type (dans client par exemple ça peut être « bot », « web », « game » — jeu —), et un nom libre (par exemple « ejabberd »). Vous avez une liste des différentes catégories et les types associés ici : https://xmpp.org/registrar/disco-categories.html.

    ce qu'il sait faire

    XMPP grâce à son côté extensible, est très riche en fonctionnalités, aussi il est indispensable de savoir ce que le logiciel avec lequel on discute est capable de faire. Ce sont les « features » (fonctionnalités) indiquées par disco, c'est pour cette raison que parfois quand vous discutez avec quelqu'un une icône est grisée, par exemple la visioconférence: cela indique que le client en face indique qu'il ne sait pas la faire, ou plus exactement n'indique pas qu'il sait la faire.

    Ces fonctionnalités sont liées à des espaces de nommage (namespaces) qui sont indiqués dans les XEPs concernées, vous avez aussi une liste qui permet de retrouver une partie des XEPs depuis un espace de nommage ici : https://xmpp.org/resources/schemas.

    les éléments associés

    En plus de l'identité et des fonctionnalités disponibles, une entité XMPP peut avoir des éléments associés. Ce peut être un serveur qui indique que des salons de discussions sont disponibles à telle adresse, ou une passerelle vers tel réseau.

    essayons

    Pour que cela soit plus clair, prenons un exemple. « jp », l'interface en ligne de commande de Salut à Toi, permet d'obtenir le disco d'une entité avec la commande « jp info disco », essayons avec le serveur jabber.fr :

    % jp info disco jabber.fr
    Features:
    
    http://jabber.org/protocol/commands
    http://jabber.org/protocol/disco#info
    http://jabber.org/protocol/disco#items
    http://jabber.org/protocol/stats
    iq
    jabber:iq:register
    jabber:iq:time
    jabber:iq:version
    msgoffline
    presence
    presence-invisible
    urn:xmpp:time
    vcard-temp
    --
    Identities:
    
    ejabberd (server/im)
    --
    Extensions:
    
    http://jabber.org/network/serverinfo
    
    --
    Items:
    
    [chat.jabberfr.org]
    [irc.jabberfr.org]
    [j2j]
    [presence.jabberfr.org]
    [proxy.jabberfr.org]
    [users.jabberfr.org]

    On voit ici que jabber.fr sait gérer la version historique des vcards (vcard-temp, XEP-0054) ou les commandes ad-hoc (http://jabber.org/protocol/commands, XEP-0050), qu'on discute avec un serveur (server/im) qui s'appelle « ejabberd ». On voit également que plusieurs services sont disponibles, par exemple chat.jabberfr.org. Regardons de plus près :

    % jp info disco chat.jabberfr.org
    Features:
    
    http://jabber.org/protocol/disco
    http://jabber.org/protocol/muc
    http://jabber.org/protocol/muc#unique
    jabber:iq:browse
    jabber:iq:last
    jabber:iq:register
    jabber:iq:time
    jabber:iq:version
    urn:xmpp:ping
    vcard-temp
    --
    Identities:
    
    Public Chatrooms (conference/text)
    --
    Items:
    
    [...]
    JabberFR (13) [jabberfr@chat.jabberfr.org]
    [...]

    On voit qu'on a affaire à un service de salons de discussions (conference/text), qui utilise le protocole « Multi-User Chat » (discussions multi-utilisateurs, http://jabber.org/protocol/muc), qui est à ce jour le seul disponible pour les discussions de groupes (nous y reviendrons). Les éléments « Items » contiennent ici la liste des salons, avec le nom, le nombre d'occupants, et le jid correspondant, j'ai tronqué la liste qui était très longue.

    Dans les informations de jabber.fr, vous avez peut-être remarqué la section « extensions », il s'agit d'une XEP (la XEP-0128) qui permet d'étendre disco pour tout type d'informations, dans le cas d'ejabberd ici, c'est pour indiquer les adresses de contact du serveur, mais elles ne sont pas renseignées pour jabber.fr.

    Ci-dessous, la fenêtre disco de Gajim:

    disco chez Gajim

    La première fois que j'ai essayé XMPP, avec Psi au début des années 2000, j'ai été un peu intimidé par le menu « service discovery », qui permet d'afficher quasi directement les informations que nous venons de voir. Ce genre de menu est souvent, à mon sens, affiché un peu trop « brut » dans les clients XMPP : utiliser disco directement (c.-à-d. en dehors de ce qui est automatisé par le client) relève déjà de l'utilisation avancée.

    En bonus, je vais rapidement évoquer l'extension « software version » (version logicielle, XEP-0092) qui permet, comme son nom l'indique, de savoir à quel logiciel on parle, et le système d'exploitation utilisé. jp permet d'afficher ces informations avec « jp info version », essayons sur jabber.fr :

    % jp info version jabber.fr
    Client name: ejabberd
    Client version: 2.1.13
    Operating System: unix/linux 3.2.0

    On connaît désormais la version d'Ejabberd utilisée, pratique quand on veut savoir si une fonctionnalité est présente, ou un bogue corrigé. Et cela fonctionne avec toute entité qui implémente la XEP, pas uniquement les serveurs:

    % jp info version chat.jabberfr.org
    Client name: MU-Conference
    Client version: 0.9-svn (Jan 27 2014)
    Operating System: Linux 3.2.0-4-amd64

    Voilà, connaître les extensions permet de vraiment savoir ce qu'on peut faire avec un client ou un serveur. La prochaine fois je pense m'attaquer aux discussions de groupes, et voir ce qui change par rapport à IRC.

    Lire les commentaires

  • Sortie de Makefly 0.4, alternative au moteur de blog statique Nanoblogger (Dépêches LinuxFR)

    Makefly est une alternative rapide et légère en ligne de commande au moteur de blog statique Nanoblogger suite à l'arrêt de son développement en 2013. Un an après la sortie de la version 0.3 de Makefly, c'est une nouvelle mouture qui voit le jour estampillée 0.4.

    Dans les grandes lignes des nouveautés, nous avons :

    • la partie BSD Makefile est abandonnée au profit d'un système en Lua permettant de lancer les différentes commandes de Makefly ;
    • la dépendance vers lua-markdown n'est plus nécessaire ;
    • le système de commentaire Isso écrit en Python dont nous fournissons un service (en bêta) nommé Rave (pour ceux qui ne peuvent pas l'installer sur leur machine) ;
    • une nouvelle documentation sur la manière de créer un thème pour Makefly.

    Nous espérons ainsi avoir quelques contributions de thèmes pour Makefly afin de compléter la collection déjà présente.

    Makefly fournit de quoi créer un blog avec :

    • des billets munis de tags, une catégorie ;
    • un système pour le référencement via le choix du nom des pages, de keyword pour chaque article et le formatage des adresses réticulaires (URL) ;
    • un flux RSS ;
    • des pages statiques ;
    • un système de sauvegarde, de publication, de création d'article, de migration depuis Nanoblogger ;
    • un système de commentaire, de template (personnalisation des thèmes) et de traduction ;
    • un badge GNU Social ;
    • etc.

    La documentation fournit de plus amples informations sur les fonctionnalités présentes.

    Je tiens aussi et surtout à remercier les derniers utilisateurs qui m'ont contacté pour leurs critiques et avoir souligné les problèmes rencontrés. J'invite d'ailleurs tout utilisateur de Makefly à donner son avis sur l'outil. C'est appréciable et cela donne véritablement une valeur ajoutée sur ce logiciel que je pensais être le seul à utiliser.

    Lire les commentaires

  • Alter Way, partenaire de Mirantis, propose les formations officielles OpenStack Bootcamp en français (Dépêches LinuxFR)

    Vous aimez OpenStack, mais l’anglais n’est pas votre langue de prédilection, ça tombe bien car Alter Way va dispenser en français les formations officielles de Mirantis (société connue notamment pour son logiciel libre de gestion et de déploiement Fuel). Une première en France !

    Depuis le mois de juin, Alter Way Formation animera la formation (OS100) OpenStack Bootcamp ! « Formation complète à l’administration OpenStack » en français.

    Cette formation de 3 jours, abordera l’ensemble des étapes nécessaires à l’exploitation de l’environnement OpenStack. Elle couvrira l’architecture, les bonnes pratiques, le workflow, l’interaction avec les composants. Le cours est divisé en deux parties : théorie et exercices pratiques.
    Pour animer cette formation, les formateurs d'Alter Way ont suivi le cursus certifiant OS110 dispensé par Mirantis (certification administrateur MCA 200).

    Prochaine session le 14 septembre 2015 dans les locaux d'Alter Way Formation à Saint-Cloud (92). Possibilité d'intra-entreprise.
    Réservez vite votre place !

    Lire les commentaires

  • dpkq, un piocheur de données. (Journaux LinuxFR)

    Dans le cadre de la mise à jour des utilitaires que j'ai développés, après vous avoir présenté xppq et tmcq, voici maintenant dpkq.

    dpkq est un piocheur de données basé sur le framework Epeios. Il pioche au hasard une fiche dans une table stockée dans un fichier XML, et l'écrit dans un autre fichier XML, en l'associant à un fichier XSL de manière à pouvoir l'afficher dans un navigateur Web avec une mise en forme HTML.

    Cette description étant loin d'être d'une limpidité exemplaire (désolé, mais je n'en ai pas trouvé de meilleure…), je vais tenter de l'éclaircir en vous détaillant, à titre d’exemple, l'usage pour lequel j'ai développé cet utilitaire.

    Étant musicien, je suis naturellement amené à travailler des partitions (musicales, hein, pas celles de mes disques durs). Pour faciliter l'organisation de mes sessions de travail, j'ai écrit un ensemble de fichiers XML contenant les tables suivantes :

    • Composers : contient les fiches relatives aux compositeurs,
    • Instrumentations : il se trouve que je joue, et du piano, et de l'orgue ; contient donc des fiches permettant d'affecter une instrumentation à une œuvre musicale donnée,
    • Collections : certaines œuvres sont regroupées sous forme de recueils ; les fiches de cette table font référence à une fiche instrumentation et généralement à une fiche composer,
    • Pieces : les œuvres proprement dites ; les fiches font référence, soit à une fiche collection, soit à une fiche composer et une fiche instrumentation,
    • Movements : certaines pièces sont décomposées en mouvements ; les fiches font référence à une fiche piece,
    • Voices : pour le œuvres pour piano à 4 mains (pour distinguer la voix primo et la voix secundo) ; les fiches font référence, soit à une fiche piece, soit à une fiche movement,
    • Elements : contient les fiches sur les partition proprement dites ; les fiches font référence, soit à une fiche piece, soit à une fiche movement, soit à une fiche voice,
    • Segments : chaque fiche fait référence à un fiche element, en lui adjoignant une mesure de début, ainsi qu'une mesure de fin.

    La notion de faire référence à une fiche est apparentée à la notion de relationnel d'une base de données relationnelle.

    Les segments sont en fait répartis dans trois tables différentes. Une table contient les segments des partitions que je suis en train de déchiffrer, une autre ceux sur lesquels, après avoir été déchiffrés, je travaille la musicalité, et une troisième les segments des partitions travaillées que je rejoue régulièrement pour éviter de les oublier. J'ai installé dpkq sur une tablette, et, lors d'une session de travail, je le lance sur l'un des groupes de segments, et dpkq me génère alors un fichier XML qui est affiché dans un navigateur Web sous forme de page HTML. Celle-ci contient toutes les informations sur un segment tiré au hasard parmi tous les segments de la table concernée, notamment les mesures du segment, ainsi que les images des pages de la partition contenant ces mesures.

    Bien sûr, dpkq peut être utilisé dans un tout autre contexte et avec des données de toute autre nature…

    Un jeu complet et fonctionnel de fichiers de test, ainsi que des détails sur le fonctionnement de dpkq, sont présents sur la page dédiée : http://q37.info/computing/epeios/tools/dpkq/ (en).

    Voici le contenu de quelques-uns de ces fichiers (les directives préfixées par dpk: sont les directives traitées par dpkq, les directives préfixées par xpp: sont des directives destinées au préprocesseur XML (en) :

    La table Composers (composers_.xml) :

    <?xml version="1.0" encoding="utf-8"?>
    <xpp:bloc xmlns:dpk="http://q37.info/ns/dpk" xmlns:xpp="http://q37.info/ns/xpp">
        <dpk:table label="Composers">
            <dpk:content DefaultRecordLabelTag="Surname">
                <Composer dpk:label="Bach JC">
                    <Surname>Bach</Surname>
                    <FirstNames>Johann Christian</FirstNames>
                </Composer>
                <Composer dpk:label="Bach JS">
                    <Surname>Bach</Surname>
                    <FirstNames>Johann Sebastian</FirstNames>
                </Composer>
                <Composer>
                    <Surname>Beethoven</Surname>
                    <FirstNames>Ludwig Van</FirstNames>
                </Composer>
                <Composer>
                    <Surname>Brahms</Surname>
                    <FirstNames>Johannes</FirstNames>
                </Composer>
                <Composer>
                    <Surname>Chopin</Surname>
                    <FirstNames>Frédéric</FirstNames>
                </Composer>
                <Composer >
                    <Surname>Debussy</Surname>
                    <FirstNames>Claude</FirstNames>
                </Composer>
                <Composer>
                    <Surname>Fauré</Surname>
                    <FirstNames>Gabriel</FirstNames>
                </Composer>
                <Composer>
                    <Surname>Gershwin</Surname>
                    <FirstNames>George</FirstNames>
                </Composer>
                <Composer>
                    <Surname>Granados</Surname>
                    <FirstNames>Enrique</FirstNames>
                </Composer>
                <Composer>
                    <Surname>Grieg</Surname>
                    <FirstNames>Edvard</FirstNames>
                </Composer>
                <Composer>
                    <Surname>Liszt</Surname>
                    <FirstNames>Franz</FirstNames>
                </Composer>
                <Composer dpk:label="Mendelssohn">
                    <Surname>Mendelssohn Bartholdy</Surname>
                    <FirstNames>Felix</FirstNames>
                </Composer>
                <Composer>
                    <Surname>Mozart</Surname>
                    <FirstNames>Wolfgang Amadeus</FirstNames>
                </Composer>
                <Composer>
                    <Surname>Perterson</Surname>
                    <FirstNames>Oscar</FirstNames>
                </Composer>
                <Composer>
                    <Surname>Prokofiev</Surname>
                    <FirstNames>Sergueï</FirstNames>
                </Composer>
                <Composer>
                    <Surname>Rachmaninov</Surname>
                    <FirstNames>Sergueï</FirstNames>
                </Composer>
                <Composer>
                    <Surname>Ravel</Surname>
                    <FirstNames>Maurice</FirstNames>
                </Composer>
                <Composer>
                    <Surname>Schubert</Surname>
                    <FirstNames>Franz</FirstNames>
                </Composer>
                <Composer>
                    <Surname>Schumann</Surname>
                    <FirstNames>Robert</FirstNames>
                </Composer>
                <Composer>
                    <Surname>Simon</Surname>
                    <FirstNames>Claude</FirstNames>
                </Composer>
                <Composer>
                    <Surname>Tchaïkovski</Surname>
                    <FirstNames>Piotr Ilitch</FirstNames>
                </Composer>
                <Composer>
                    <Surname>Widor</Surname>
                    <FirstNames>Charles-Marie</FirstNames>
                </Composer>
            </dpk:content>
        </dpk:table>
    </xpp:bloc>

    et le fichier encapsulant cette table (Composers.xml ; il n'est pas donné pour les autres tables, car présentant peu de différences) :

    <?xml version="1.0" encoding="utf-8"?>
    <dpk:data xmlns:dpk="http://q37.info/ns/dpk" xmlns:xpp="http://q37.info/ns/xpp">
        <xpp:expand href="composers_.xml"/>
    </dpk:data>

    La table Instrumentations (instrumentations_.xml) :

    <?xml version="1.0" encoding="utf-8"?>
    <xpp:bloc xmlns:dpk="http://q37.info/ns/dpk/" xmlns:xpp="http://q37.info/ns/xpp">
        <dpk:table label="Instrumentations">
            <dpk:content>
                <Instrumentation dpk:label="2 hands">
                    <Name>Piano two hands</Name>
                </Instrumentation>
                <Instrumentation dpk:label="4 hands">
                    <Name>Piano four hands</Name>
                </Instrumentation>
                <Instrumentation dpk:label="Classical">
                    <Name>Classical organ</Name>
                </Instrumentation>
                <Instrumentation dpk:label="Hammond">
                    <Name>Hammond organ</Name>
                </Instrumentation>
            </dpk:content>
        </dpk:table>
    </xpp:bloc>

    Et enfin, la table Collections (collections_.xml), dont les fiches font référence à des fiches des deux tables précédentes :

    <?xml version="1.0" encoding="utf-8"?>
    <xpp:bloc xmlns:dpk="http://q37.info/ns/dpk" xmlns:xpp="http://q37.info/ns/xpp">
        <xpp:expand href="composers_.xml"/>
        <xpp:expand href="instrumentations_.xml"/>
        <dpk:table label="Collections">
            <dpk:aliases label="%RL%" TableLabel="Instrumentations"/>
            <dpk:aliases label="%RL%" TableLabel="Composers">
                <dpk:alias label="C" TableLabel="Composers"/>
            </dpk:aliases>
            <dpk:content DefaultRecordLabelTag="Title">
                <Collection dpk:label="Corner">
                    <dpk:insert RecordAlias="Debussy"/>
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>Children's Corner</Title>
                </Collection>
                <Collection dpk:label="Romances">
                    <dpk:insert TableAlias="C" RecordLabel="Fauré"/>
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>3 Romances sans Paroles</Title>
                    <Opus>17</Opus>
                </Collection>
                <Collection dpk:label="Fantaisies">
                    <dpk:insert RecordAlias="Brahms"/>
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>7 Fantaisies</Title>
                    <Opus>116</Opus>
                </Collection>
                <Collection dpk:label="Saisons">
                    <dpk:insert RecordAlias="Tchaïkovski"/>
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>Les Saisons</Title>
                    <Opus>37a</Opus>
                </Collection>
                <Collection dpk:label="Preludes 1">
                    <dpk:insert RecordAlias="Debussy"/>
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>Préludes - Premier livre</Title>
                </Collection>
                <Collection dpk:label="Lyriques 12">
                    <dpk:insert RecordAlias="Grieg"/>
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>Pièces lyriques</Title>
                    <Opus>12</Opus>
                </Collection>
                <Collection dpk:label="Arabesques">
                    <dpk:insert RecordAlias="Debussy"/>
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>2 arabesques</Title>
                    <Opus Catalogue="L">66</Opus>
                </Collection>
                <Collection>
                    <dpk:insert RecordAlias="Schumann"/>
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>Albumblätter</Title>
                    <Opus>124</Opus>
                </Collection>
                <Collection dpk:label="Preludes 28">
                    <dpk:insert RecordAlias="Chopin"/>
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>24 préludes</Title>
                    <Opus>28</Opus>
                </Collection>
                <Collection dpk:label="Espagnoles">
                    <dpk:insert RecordAlias="Granados"/>
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>12 danses espagnoles</Title>
                </Collection>
                <Collection dpk:label="Sentimentales">
                    <dpk:insert RecordAlias="Schubert"/>
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>Valses sentimentales</Title>
                    <Opus>50</Opus>
                    <Opus Catalogue="D">779</Opus>
                </Collection>
                <Collection>
                    <dpk:insert RecordAlias="Liszt"/>
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>Consolations</Title>
                    <Opus Catalogue="S">172</Opus>
                </Collection>
                <Collection dpk:label="Mazurkas 4">
                    <dpk:insert RecordAlias="Chopin"/>
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>4 Mazurkas</Title>
                    <Opus>17</Opus>
                </Collection>
                <Collection dpk:label="Liebesträume">
                    <dpk:insert RecordAlias="Liszt"/>
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>Liebesträume</Title>
                    <Opus Catalogue="S/G">541</Opus>
                </Collection>
                <Collection dpk:label="Faschingsschwank">
                    <dpk:insert RecordAlias="Schumann"/>
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>Faschingsschwank aus Wien</Title>
                    <Opus>26</Opus>
                </Collection>
                <Collection dpk:label="Piano bar">
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>Best of piano bar</Title>
                </Collection>
                <Collection dpk:label="Liebeslieder">
                    <dpk:insert RecordAlias="Brahms"/>
                    <dpk:insert RecordAlias="4 hands"/>
                    <Title>Liebeslieder Waltzes</Title>
                    <Opus>52a</Opus>
                </Collection>
                <Collection dpk:label="Sonates120">
                    <dpk:insert RecordAlias="Brahms"/>
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>Sonates pour clarinette et piano</Title>
                    <Opus>120</Opus>
                </Collection>
                <Collection dpk:label="Jazz Hammond">
                    <dpk:insert RecordAlias="Hammond"/>
                    <Title>Home Organist Library Volume 7 - Jazz Pieces</Title>
                </Collection>
                <Collection dpk:label="Big Band Hammond">
                    <dpk:insert RecordAlias="Hammond"/>
                    <Title>Big Band Specials for Organ</Title>
                </Collection>
                <Collection dpk:label="Oye">
                    <dpk:insert RecordAlias="Ravel"/>
                    <dpk:insert RecordAlias="4 hands"/>
                    <Title>Ma mère l'Oye</Title>
                </Collection>
                <Collection dpk:label="PJazzExercises">
                    <dpk:insert RecordAlias="Perterson"/>
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>Jazz exercises</Title>
                </Collection>
                <Collection dpk:label="Chopin69">
                    <dpk:insert RecordAlias="Chopin"/>
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>2 valses</Title>
                    <Opus>69</Opus>
                </Collection>
                <Collection dpk:label="Brahms118">
                    <dpk:insert RecordAlias="Brahms"/>
                    <dpk:insert RecordAlias="2 hands"/>
                    <Title>Six pieces for Piano</Title>
                    <Opus>118</Opus>
                </Collection>
            </dpk:content>
        </dpk:table>
    </xpp:bloc>

    Lire les commentaires

  • Sortie de Proxmox VE 4.0 Beta1 (Dépêches LinuxFR)

    Proxmox Virtual Environment (Proxmox VE) est une plateforme opensource de virtualisation pour KVM & Containers, entièrement administrable via une interface web, ou via ligne de commande pour les administrateurs aguerris. Proxmox VE est développé par Proxmox Server Solutions GmbH, basé à Vienne/Autriche, et de nombreux contributeurs via Internet.

    Les nouveautés sont décrites dans la seconde partie de la dépêche.

    Cette version bêta est annoncée afin de permettre à un grand nombre d'utilisateurs de tester la prochaine version majeure, et d'identifier les bugs pouvant encore subsister, avant l’annonce d'une version stable pour la mise en production.

    Attention: cette version ne permet pas d'assurer une migration des données utilisateurs depuis la version 3.4, et est prévue pour être utilisée dans un environnement de test.

    Nouveautés de cette version beta1:

    • Parmi les nouvelles fonctionnalités de cette version 4.0, Proxmox VE contient un nouveau gestionnaire de Haute Disponibilité (pve-ha-manager), écrit par l'équipe Proxmox en remplacement de rgmanager. pve-ha-manager surveille l'état de toutes les machines virtuelles et containers sur le Cluster, et entre en action automatiquement si l'un des serveurs est détecté comme défaillant. Toutes les options sont configurables via GUI.

    • Cette version comprend également le tout nouveau Proxmox HA Simulator, qui permet de tester les fonctions haute disponibilité de Proxmox, avant une mise en production.

    • Cette version est la première version de Proxmox VE à inclure un support natif des conteneurs LXC en plus des machines virtuelles KVM. Les conteneurs LXC sont complètement intégrés aux autres composants de Proxmox, permettant d'utiliser tous les modèles de stockage déjà existants.

    • Proxmox VE 4.0 beta1 inclut la première version stable de DRBD9. DRBD9 est particulièrement recommandé pour les tâches nécessitant un haut niveau d'IOPS.

    Lire les commentaires

  • Revue de presse de l'April pour la semaine 26 de l'année 2015 (Dépêches LinuxFR)

    La revue de presse de l'April est régulièrement éditée par les membres de l'association. Elle couvre l'actualité de la presse en ligne, liée au logiciel libre. Il s'agit donc d'une sélection d'articles de presse et non de prises de position de l'association de promotion et de défense du logiciel libre.

    Sommaire

    [L'OBS] Je suis tombé dans l’univers parallèle des «crypto-parties»

    Par Marc Meillassoux, le dimanche 28 juin 2015. Extrait:

    Ces rencontres hackers-débutants peuvent rebuter par leur langage ésotérique: mais elles sont précieuses pour partager des outils de cryptographie et sécuriser les connexions internet, mails, docs et périphériques.

    Lien vers l'article original: http://rue89.nouvelobs.com/2015/06/28/suis-tombe-lunivers-parallele-crypto-parties-259995

    [ITespresso] Vente liée ordinateur-logiciel: la Cour de cassation demande l'arbitrage de l'Europe

    Par la rédaction, le vendredi 26 juin 2015. Extrait:

    Sur demande de la Cour de cassation française, la Cour de justice de l’Union européenne devra se prononcer que la réalité de pratiques commerciales déloyales dans le cadre de la vente liée d’ordinateur et de logiciels.

    Lien vers l'article original: http://www.itespresso.fr/vente-liee-ordinateur-logiciel-cour-cassation-demande-arbitrage-europe-99893.html

    Et aussi:

    Voir aussi:

    [Le Mag numérique] Richard Stallman à Rennes pour clôturer Jardin Entropique

    Par Anthony Chénais, le vendredi 26 juin 2015. Extrait:

    Breizh Entropy Congress et Jardin Numérique fusionnent pour créer un événement sur le numérique et la liberté, Jardin Entropique.

    Lien vers l'article original: http://www.lemag-numerique.com/2015/06/richard-stallman-a-rennes-pour-cloturer-jardin-entropique-7601

    Et aussi:

    [Next INpact] Le CNNum invite le gouvernement à donner la priorité aux logiciels libres

    Par Xavier Berne, le mardi 23 juin 2015. Extrait:

    Le moins que l’on puisse dire, c’est que le rapport remis jeudi à Manuel Valls, et qui se présente comme le fruit de plus de cinq mois de concertation citoyenne, prend clairement position en faveur du logiciel libre. Dans le sillon d'un précédent rapport sénatorial, le Conseil national du numérique préconise en effet de «mobiliser le levier de la commande publique pour mettre en avant des exigences d’interopérabilité, de standards ouverts et d’accès au code source».

    Lien vers l'article original: http://www.nextinpact.com/news/95515-le-cnnum-invite-gouvernement-a-donner-priorite-aux-logiciels-libres.htm

    Et aussi:

    Voir aussi:

    [Numerama] Loi Renseignement: un recours citoyen de 120 pages dévoilé!

    Par Guillaume Champeau, le mardi 23 juin 2015. Extrait:

    La Quadrature du Net, l'association French Data Network (FDN) et la fédération FDN ont rendu public mardi un projet d'argumentaire de 120 pages qui sera envoyé au Conseil constitutionnel pour lui permettre de limiter la portée du projet de loi Renseignement.

    Lien vers l'article original: http://www.numerama.com/magazine/33489-loi-renseignement-un-recours-citoyen-de-120-pages-devoile.html

    Et aussi:

    Voir aussi:

    [Next INpact] Le gouvernement prêt à saper l'Open Data sur les données de transport

    Par Xavier Berne, le lundi 22 juin 2015. Extrait:

    Alors que le Premier ministre promettait jeudi d’inscrire les principes de l’Open Data dans la loi, son gouvernement a soutenu dans le même temps un amendement à la loi Macron qui permettra aux sociétés de transport de s’exonérer des obligations de diffusion initialement voulues par le législateur. La SNCF, Air France ou la RATP pourront en effet signer des codes de bonne conduite prévoyant entre autre le paiement de redevances.

    Lien vers l'article original: http://www.nextinpact.com/news/95504-le-gouvernement-pret-a-saper-open-data-sur-donnees-transport.htm

    Lire les commentaires

  • DragonFly BSD 4.2 (Dépêches LinuxFR)

    La nouvelle version stable du système d'exploitation DragonFly BSD, la 4.2, est sortie aujourd'hui 29 juin 2015. Elle est disponible au téléchargement. De nombreux changements ont été apportés depuis la version 4.0 de novembre dernier, notamment de nombreuses améliorations pour le pilote i915. GCC 5.1.1 fait son apparition dans base, d'importants changements ont lieu dans les pilotes wifi, et la pile audio qui souffrait de plusieurs problèmes a été revue en profondeur.

    Merci à tous les contributeurs à cette dépêche et en particulier à François Tigeot et Joris Giovannangeli.

    Sommaire

    Noyau

    Performances

    Maintenant que la plupart des sous-système importants du noyau peuvent fonctionner en parallèle sans verrous, les performances en charge peuvent être dégradées par des choses apparemment anodines.
    C'est le cas du sous-système sysctl, utilisé pour échanger des informations entre le noyau et les applications en espace utilisateur, qui utilisait jusqu'à maintenant un verrou global.
    Ce verrou n'est maintenant utilisé plus que pour la création et la suppression de nœuds. L'immense majorité des opérations peuvent désormais se dérouler en parallèle, sans se bloquer.

    L'algorithme CRC iscsi a été remplacé par la version rapide de Gary S. Brown, obtenue depuis FreeBSD. Cela devrait permettre d'améliorer grandement les performances du système de fichier HAMMER2.

    Une fonction critique du sous-système SCSI, la CAM SWI est maintenant capable de fonctionner sur plusieurs processeurs en parallèle, ce qui devrait améliorer les performances en entrée/sorties lorsque plusieurs disques ou SSD travaillent en même temps.

    Le sous-système callout a été réécrit pour fonctionner de manière plus efficace. Cette interface de programmation du noyau permet d'enregistrer des minuteurs associés à une fonction de traitement. Quand le temps demandé est écoulé, la fonction enregistrée est exécutée. Il est désormais plus simple de forcer l’exécution des fonctions sur un CPU particulier. Une API permettant de se saisir automatiquement d'un verrou avant d’exécuter certaines fonctions, à la manière de FreeBSD, a été implémentée. Cette fonctionnalité devrait faciliter le port de pilotes venant du noyau FreeBSD.

    L'allocateur mémoire interne du noyau utilise le mécanisme de Slab allocation. Pour les tailles les plus courantes, l'allocation est arrondie à la puissance de 2 supérieure. Au lieu de créer les objets uns à uns, des zones mémoires de tailles fixes pouvant contenir plusieurs objets de tailles très proches sont allouées d'un seul coup, puis remplies selon la demande. Cela permet de réduire la pression sur le sous-système mémoire. La fonction slab_cleanup est chargée de détruire les zones qui ne sont plus utilisées. Elle utilisait jusqu'à présent des listes simplement chaînées. Sur certaines machines comportant une quantité de mémoire importante, supprimer des slabs inutilisés pouvait consommer un temps excessif de processeur. Les listes sont désormais doublement chaînées, ce qui réduit la complexité de l'opération. Ce changement était particulièrement visible sur Monster, une machine de test quadri-Opteron avec 128GB de mémoire et 48 cœurs relativement lents.

    Systèmes de fichiers

    HAMMER

    HAMMER est un système de fichiers déclaré stable pour la production lors de la sortie de DragonFly 2.2 en avril 2009 et utilisé comme système de fichiers par défaut à l'installation avec la sortie de DragonFly 2.4 en septembre 2009. Avec les années, HAMMER a bénéficié de nombreux ajustements, améliorations de performance ou encore de la dé-duplication de données.

    Cependant, Matt Dillon, l'auteur de HAMMER, consacre désormais une bonne partie de son temps au développement de HAMMER2, un nouveau système de fichiers qui devrait corriger les quelques défauts de HAMMER ainsi qu'apporter la prise en charge du clustering au niveau du système de fichiers. Une personne non proche du développement de DragonFly pourrait penser que HAMMER ne reçoit désormais plus le soin nécessaire à sa maintenance mais il n'en est rien.

    De nouveaux développements mineurs d'HAMMER ont ainsi eu lieu depuis DragonFly 4.0 :

    • une commande "hammer abort-cleanup" a été ajoutée ;
    • l'export NFS de systèmes de fichiers esclaves a été rendu possible.

    L'utilisation d'HAMMER en production sur des serveurs de stockage de plus en plus importants a également permis de corriger des bugs gênants mais qui n'étaient pas visibles sur des machines comportant un nombre de disques modestes.

    La bibliothèque libhammer(3), permettant de gérer les fonctions avancées des systèmes de fichier HAMMER, a également fait l'objet de nombreuses corrections de bugs.

    Par ailleurs, un nouveau contributeur, Tomohiro Kusumi, a fait son apparition depuis février dernier. Jusqu'à présent il a apporté quasi exclusivement des corrections mineures à ce système de fichier, tout en étudiant en détail son fonctionnement.

    Pour la petite histoire, Tomohiro souhaitait initialement faire un portage natif de HAMMER pour Linux (donc sans passer par FUSE) ce qui l'a poussé à regarder le code source et à commencer à soumettre quelque patchs. Le temps passant, il a fini par prendre goût à DragonFly, recevoir un commit bit et abandonner l'idée du port Linux.

    De toute façon HAMMER serait très difficile à porter sur une autre plateforme selon Matt Dillon. C'est un des "défauts" que HAMMER2 devrait combler…

    HAMMER2

    Les personnes qui pourraient penser que HAMMER2 n'est qu'une simple évolution de HAMMER se tromperaient. Ce système de fichiers, toujours en cours d'écriture, est entièrement différent. Alors qu'il est prévu qu'il conserve les fonctionnalités de HAMMER qui lui donnent tout son intérêt (historique fin (paramétrable), snapshoting, gestion multi-volume, mirroring via le réseau, récupération instantanée lors de crashs (fsck(8) n'est pas nécessaire), …), il est également prévu de faire encore un pas en avant.

    Matt Dillon a acquis une excellente expérience lors du développement de HAMMER ce qui lui permet aujourd'hui d'identifier les points faibles de son implémentation. Par exemple, les arbres B+ utilisés comme structure de données sur disque et en mémoire sont remplacés par des arbres radix pour HAMMER2. Ce choix permet de réduire la complexité du code et facilite la synchronisation de plusieurs systèmes de fichiers sur le réseau, car les fichiers sont représentés naturellement par un arbre radix.

    HAMMER2 est pensé pour fonctionner en multi-maîtres dans le cadre d'un cluster, chaque machine du groupe ayant la même vue du système de fichiers et les opérations effectuées sur n'importe quel nœud étant visibles par les autres.

    HAMMER2 est loin d'être fini mais de nombreux progrès ont été faits depuis DragonFly 4.0 :

    • la libération d'espace après suppression de fichiers est maintenant fonctionnelle ; par le passé, le système de fichier ne pouvait que se remplir et seule une opération de formatage de type newfs permettait de récupérer l'espace disque ;
    • la gestion de disques distants est maintenant opérationnelle ;
    • la gestion de messages du cluster est maintenant opérationnelle ;
    • du travail a été fait pour la validation de quorum dans le cadre d'un cluster ;
    • la gestion de la synchronisation des données et la gestion des erreurs réseau est également en cours de développement ;
    • les Pseudo File Systems (PFS) sont maintenant compressés par défaut avec l'algorithme lz4.

    Le processus de développement est itératif et des changements de structures de données disque ainsi que du refactoring de certains sous-ensembles du code de HAMMER2 ont lieu en fonction des problèmes rencontrés lors des progrès de l'implémentation.

    Le document de référence HAMMER2 a été mis à jour en fonction de ces changements.

    tmpfs et ext2

    Non content d'avoir amélioré de nombreux détails du code de HAMMER, Tomohiro Kusumi a également commencé à s'attaquer à tmpfs et ext2, apportant de nombreuses corrections de bugs et corrigeant la documentation lorsque cela était nécessaire.
    Le pilote de gestion des systèmes de fichier ext2 n'est pas actuellement fonctionnel, mais si Tomohiro continue son travail il sera sans doute bientôt possible de relire de vieux disques durs formatés en ext2fs ou d'utiliser ce système de fichiers pour une partition d'échange entre Linux et DragonFly.

    Pile graphique

    Le code noyau drm a été partiellement mis à jour vers Linux 3.14 afin d'accompagner l'évolution des pilotes i915 et radeon.

    De nombreuses interfaces de programmation et structures de données Linux ont été implémentées afin de faire tourner le code drm et ses pilotes avec aussi peu de modifications que possible. Du point de vue du sous-système graphique, le noyau DragonFly peut ainsi être considéré comme une implémentation sous licence BSD de Linux.

    i915

    Le pilote drm/i915 a été mis à jour vers la version de Linux 3.14, ce qui apporte notamment une prise en charge des GPU Broadwell (mais sans accélération pour le moment).

    • La plupart des chemins de code GEM sont maintenant similaires à ceux de Linux, entraînant une augmentation de la stabilité et des performances. Faire ce changement a été grandement aidé par l'étude du code OpenBSD.
    • De nombreuses corrections de bugs ont été apportées. Le pilote est maintenant plus robuste et résiste mieux aux plantages du GPU.
    • Les fonctions d'économie d'énergie et de compression du framebuffer sont maintenant activées par défaut (suivant la famille de GPU utilisée).
    • La gestion de l'économie d'énergie a par ailleurs été grandement améliorée.
    • Les écrans HDMI 4K sont maintenant pris en charge, ainsi que les systèmes d'affichage 3D/stéréo.
    • La gestion du modesetting a été améliorée. Il devrait maintenant être possible d'utiliser des systèmes d'affichage utilisant des couleurs 30 bits.
    • Le branchement d'écrans à chaud a été amélioré et devrait être plus robuste.
    • Outre une prise en charge initiale des GPU Broadwell, de nouveaux membres de la famille Haswell ont été ajoutés
    • Le changement de fréquence et l'overclocking ont été grandement améliorés sur les familles de GPU Sandy-Bridge à Haswell
    • Le cache géant de 128MB est maintenant activé sur les GPU Haswell qui le possèdent
    • Le moteur VECS est maintenant activé sur Haswell. Il est utilisé par libva pour des tâches de post-traitement video.

    radeon

    Le pilote drm/radeon a été mis à jour vers la version de Linux 3.11. Parmi les diverses améliorations que cela apporte, on peut noter une prise en charge du son via HDMI (fonctionnalité encore expérimentale).
    Il est également désormais possible de lire les informations des capteurs de température.

    Pile sonore

    Le sous-système de gestion du son a été mis à jour vers la pile sonore de FreeBSD 11 (version en cours de développement) datée de janvier 2015.

    Cela a permis d'améliorer la prise en charge du matériel récent (en particulier les chipsets Intel depuis la génération de processeurs Ivy-Bridge) et d'apporter la gestion des flux audio sur liens HDMI et DisplayPort.
    Il est désormais possible de changer simplement la carte son utilisée par défaut grâce au sysctl(8) hw.snd.default_unit.

    L'amélioration la plus visible est que les vidéos HTML5 peuvent maintenant être lues avec du son sans manipulation particulière.

    La qualité du son est également améliorée, la nouvelle pile utilisant des algorithmes avancés de conversion et de ré-échantillonnage conçus pour respecter au maximum la fidélité des données.

    Plusieurs pilotes aux licences jugées trop restrictives ou nécessitant l'emploi de blobs binaires ont été éliminés. À l'inverse, un nouveau pilote a été ajouté pour gérer le son sur les portables Acer Chromebook de la série C720. Ce pilote n'est pas présent dans FreeBSD.

    Pile USB

    La pile USB a été mise à jour depuis FreeBSD. La gestion de l'USB 3 est maintenant activée par défaut et les chipsets Wildcat Point gérés.

    Les pilotes aue(4), cue(4), ipheth(4), kue(4) et axge(4) pour adaptateurs ethernet USB ont été portés depuis FreeBSD.

    Fiabilité, facilité de maintenance et disponibilité

    Capteurs de température et compteurs ECC

    Les pilotes dimm(4), ecc(4), coretemp(4) et memtemp(4) ont été créés ou mis à jour afin de pouvoir obtenir et traiter les informations concernant l'état du matériel de la part des capteurs inclus dans les cœurs processeur et les barrettes mémoire.

    Les informations de température ainsi que le taux d'erreur ecc remontés par les différents composants sont classés en fonction de la topologie matérielle afin de pouvoir identifier facilement les composants problématiques.

    Un taux d'erreurs mémoire corrigées acceptable est paramétrable pour le pilote ecc(4). Si ce taux est dépassé, une alerte est générée en utilisant le mécanisme devctl(4).

    Les informations des capteurs sont sinon visibles sous les arborescences sysctl hw.sensors et hw.dimminfo comme le montrent ces exemples:

    hw.sensors.cpu5.temp0: 44.00 degC (node0 core1 temp), OK
    hw.sensors.dimm0.ecc0: 0 (node0 chan0 DIMM0 ecc), OK
    $ sysctl hw.dimminfo
    hw.dimminfo.dimm0.node: 0
    hw.dimminfo.dimm0.chan: 0
    hw.dimminfo.dimm0.slot: 0
    hw.dimminfo.dimm0.ecc_thresh: 10
    hw.dimminfo.dimm1.node: 0
    hw.dimminfo.dimm1.chan: 1
    hw.dimminfo.dimm1.slot: 0
    hw.dimminfo.dimm1.ecc_thresh: 10
    

    Les pilotes ecc(4) et memtemp(4) gèrent les contrôleurs mémoire des familles de processeur Intel Xeon E3, E3v2, E3v3 et Intel Xeon E5v2 et E5v3, ainsi que les processeurs Intel core i3/i5/i7 Haswell.

    Watchdogs

    Le pilote ichwd(4) a été mis à jour pour gérer les chipsets Intel Coleto Creek (Xeon EP Ivy-Bridge), Lynx Point et Wildcat Point (processeurs utilisant le socket 1150)

    Un nouveau pilote ipmi(4) a été ajouté et gère la fonctionnalité watchdog présente dans les systèmes de gestion IPMI.

    Réseau

    Protocoles

    Fonctionnalités

    La prise en charge du protocole SCTP (une alternative à UDP et TCP) a été supprimée. Le code datait du début des années 2000 et n'ayant reçu aucune maintenance, il commençait à poser problème pour l'évolution d'autres éléments de la pile réseau.
    Le protocole SCTP n'ayant eu aucun utilisateur connu depuis 15 ans, son élimination n'a pas fait l'objet de débat.

    La prise en charge des adresses IPV4 sur les sockets IPv6 a été supprimée.
    Cela a grandement simplifié le code de gestion des protocoles IPv4 et IPv6 et éliminé de nombreux problèmes potentiels dus à la complexité de gestion de l'ancien système.
    OpenBSD avait déjà rejeté la gestion des adresses IPv4 sur sockets IPv6 il y a de nombreuses années, principalement pour des raisons de sécurité.
    Un draft IETF du regretté Itojun recommandait déjà de ne pas utiliser ce système depuis presque 12 ans.

    Le Maximum Transmission Unit (MTU) est la taille maximale d'un paquet TCP qui peut circuler entre deux hôtes sans qu'il ne soit découpé en paquets plus petits. Pour des raisons de performance, il est souhaitable que les paquets transmis soient le plus proche de la taille maximale supportée par le réseau car fragmenter des paquets réduit les performances. Le Path MTU Discovery permet de vérifier dynamiquement la taille du MTU et de l'ajuster selon les cas pour éviter la fragmentation des paquets TCP par les routeurs. Ce mécanisme est disponible depuis longtemps mais il est maintenant activé par défaut pour le protocole TCP.

    Performances et parallélisme

    Le code de gestion du réseau dans le noyau a une architecture plutôt inhabituelle. Pour chaque connexion, un hash symétrique est calculé en utilisant l’adresse source et l’adresse de destination. Ce hash permet de décider à quel processeur cette connexion appartient, tous les paquets étant traités par ce processeur, ce qui évite l'utilisation de verrous. Pour l'instant, seuls les protocoles UDP et TCP sur IPV4 utilisaient tous les cœurs.

    Le code de gestion du protocole ICMP a été amélioré. En plus d'une amélioration de la vitesse de traitement brut de certains types datagrammes, de nombreuses fonctions sont maintenant capables de fonctionner de manière asynchrone et ne bloquent plus le thread principal de traitement des données réseau. Le code de gestion du protocole ICMP est maintenant capable de fonctionner en parallèle sur plusieurs processeurs.

    Du travail a été commencé pour rendre le code de gestion des protocoles IPv6 et ALTQ capable de fonctionner en parallèle sur plusieurs processeurs. Le calcul d'un hash pour IPV6 est plus coûteux et n'était jusqu'à présent pas prioritaire. Toutes les connexions IPV6 sont pour l'instant gérées par le premier cœur mais cet état de fait devrait changer sous peu.

    En plus de ces améliorations, de nombreuses corrections de bugs ont également eu lieu dans la pile TCP/IP et dans le code de gestion du protocole NFS.

    Pilotes réseau

    Le pilote alc(4) a été mis à jour depuis FreeBSD, apportant la gestion des cartes Atheros AR8161, AR8162, AR8171, AR8172 et Killer E2200

    Le groupe de pilotes e1000 (em(4), emx et ig_hal) a été synchronisé avec les sources du pilote Intel em-7.4.2, apportant la prise en charge des puces réseau I218V.

    Le sous-système wlan(4), ainsi que les pilotes iwn(4) et ath(4) ont été mis à jour depuis FreeBSD, ce qui devrait améliorer la qualité des connexions wifi.

    Le pilote de(4) a été mis à jour vers la version FreeBSD r271849, ce qui lui permet de fonctionner maintenant avec plus de 4Go de RAM. Bien que les cartes réseau DEC Tulip soient maintenant extrêmement rares, ce matériel est souvent émulé par des systèmes de gestion de machines virtuelles tels que Qemu.

    Nouveau pare-feu : ipfw3

    Deux systèmes de parefeu réseau étaient jusqu'à présent disponibles. ipfw(8), mieux connu sous le nom de ipfw2, qui est le pare-feu traditionnel de FreeBSD. Il s'agit d'une réécriture d'un système plus vieux, ipfw, et disponible depuis FreeBSD 5. Plus tard, le pare-feu écrit pour OpenBSD, pf(4) a été adapté sous DragonFlyBSD. Ces deux pare-feux sont toujours disponibles et l'utilisateur peut choisir l'un ou l'autre en fonction de ses préférences.

    Un nouveau pare-feu dérivé de ipfw(8) a été implémenté par Bill Yuan. Il a été décidé de le nommer ipfw3 pour éviter toute confusion avec ipfw2, la réécriture de ipfw(8) dans FreeBSD 5.0.

    Les outils en espace utilisateur sont rétro-compatibles avec les versions précédentes mais le code noyau a été entièrement réécrit. Le but de cette réécriture est de rendre le code plus extensible et modulaire, ainsi que d'améliorer les performances sur les machines avec plusieurs processeurs. Comme la plupart des pare-feux modernes, ipfw3 est un pare-feu stateful qui conserve l'état des connexions pour éviter d'avoir à ré-évaluer les règles pour tous les paquets d'une même connexion.

    Le code est organisés en deux classes de modules :

    1. les modules de filtres :

      • le module de base fournit les fonctionnalités courantes d'un pare-feu. Il permet de sélectionner les paquets entrant ou sortant en fonction de leur interface, de leur provenance et de leur destination. Il supporte les tags de paquets, ainsi que des compteurs et la gestion des états de connexion.
      • le module layer2 permet de filtrer selon les adresses MAC source ou destination.
      • le module layer4 ajoute des fonctionnalités spécifiques aux protocoles de la couche application. Il permet de filtrer selon les drapeaux des paquets TCP, ou de l'identité (utilisateur et groupe) du processus possédant le socket de destination. L'utilisateur a aussi la possibilité d'écrire des filtres complexes en utilisant le langage BPF.
    2. les modules d'action :

      • le module NAT ajoute le support de la translation d’adresse dans le noyau.
      • le module dummynet permet de spécifier des politiques de qualité de service (QoS), en limitant la bande passante, le nombre de connexions simultanées depuis une même adresse source, ou en utilisant des files à priorité.
      • le module table apporte la possibilité de créer des ensembles d’adresses ou de ports et d'utiliser cet ensemble dans une règle de filtrage à la place d'une adresse unique.

    Divers

    utimensat(2) et futimens(2) ont été ajoutés par Dimitris Papastamos.

    L'appel système chflagsat(2) a été ajouté par Joris Giovannangeli.

    Tous les pilotes possèdent maintenant une sous-arborescence sysctl(8) du type dev.foo.X. Lorsqu'elle existait, l'ancienne arborescence hw.fooX.y a été supprimée.
    Ce changement permet d'obtenir une compatibilité parfaite avec les nouvelles versions de FreeBSD qui utilisent une arborescence sysctl(8) du type dev.foo.X.

    L'économie d'énergie a été améliorée sur les systèmes avec processeurs Haswell tournants au ralenti (idle).

    Un système de chiffrement automatique du swap a été mis en place, activé par l'option "crypt" de fstab.
    Lorsque cette option est activée une clef de 256-bit est générée de manière aléatoire au boot et un périphérique chiffré mappé automatiquement au dessus de la partition de swap traditionnelle.

    Le sous-système ACPICA a été mis à jour vers la version 20150515 d'Intel.

    Espace utilisateur

    Outils de développement

    Le compilateur principal a été mis à jour vers la branche de maintenance de GCC 5.1.1 datée du 25 mai 2015. Il bénéficie ainsi de 5 semaines de corrections de bugs depuis la sortie de GCC 5.1 le 22 avril 2015.

    Le compilateur secondaire a logiquement été remplacé par l'ancien compilateur principal, GCC 4.7.4 et l'ancien compilateur GCC 4.4 a été supprimé.

    Deux nouvelles options ont fait leur apparition dans compilers.conf pour gérer des compilateurs non installés par défaut: clang36 et gcc6-devel.

    Binutils 2.25 a remplacé la version 2.24, qui est maintenant fournie en tant que linker secondaire et l'ancienne version 2.22 a été supprimée.

    Le groupe d'utilitaires binutils comporte deux linkers: le traditionnel GNU ld, et une nouvelle implémentation, gold (fichier ld.gold). Gold est désactivé car étant écrit en C++, il est beaucoup plus lent à compiler que ld et n'apporte pas d'avantages significatifs en utilisation par rapport à ce dernier.

    Introduction de sshlockout(8)

    sshlockout(8), un utilitaire permettant de bloquer temporairement le trafic SSH venant sous forme de tentative bruteforce de login, a été ajouté. En cas de tentative de login répétée, notamment avec un utilisateur inconnu du système, une règle est automatiquement ajoutée au firewall afin de bloquer l'IP responsable du trafic. L'utilitaire n'est toutefois pas encore jugé prêt à la production.

    DMA remplace Sendmail en tant que MTA par défaut

    DragonFly Mail Agent (DMA) remplace Sendmail comme MTA (Mail Transfer Agent) par défaut. DMA est inclus dans base depuis la version… 1.12 de DragonFly (2008) mais pour des raisons inconnues, il n'avait jusqu'alors pas remplacé Sendmail en tant que MTA par défaut. Cela étant désormais fait, Sendmail est retiré du système de base. Une page de wiki à propos de MTA a été écrite afin de guider les utilisateurs désirant malgré tout utiliser Sendmail ou encore ceux désirant un MTA bien plus complet que DMA (Postfix, OpenSMTPD, Sendmail). En effet, DMA est simple de conception et ne vise pas à remplir les fonctionnalités d'un MTA complet. Ainsi, il se contente d'accepter les courriels des MUA (Mails User Agents) locaux et de les délivrer, soit localement mais également à distance. TLS/SSL est pris en charge ainsi que l'authentification SMTP. Cependant, DMA n'écoute pas sur le port 25 pour des connexions entrantes, puisque tel n'est pas son but.

    Il est à noter que DMA ne se limite pas à DragonFly BSD. Il est ainsi aussi disponible dans FreeBSD ou différentes distributions GNU/Linux telles Debian ou Mageia par exemple.

    Bibliothèque mathématique

    La biliothèque mathématique, libm, a été synchronisée avec FreeBSD et NetBSD afin d'ajouter des fonctions manquantes. Bien qu'il s'agissait d'obscures variantes de fonctions existantes, leur absence était gênante car elle empêchait GCC d'activer la prise en charge de la norme C99.

    Symbol versioning

    Le symbol versioning a été activé sur les bibliothèques z, ncurses, lzma, edit, archive, md et bz2.

    Le symbol versioning permet de ne plus avoir à gérer des numéros de bibliothèques différents à chaque changement d'interface binaire.
    A chaque fois qu'un changement d'API incompatible a lieu, la trace de l'ancienne interface est gardée dans les sources de la bibliothèque et l'ancienne interface binaire continue à être créée dans les nouvelles versions du fichier libxxx.so.y.

    En pratique cela signifie que les anciens programmes binaires vont continuer à fonctionner avec toutes les nouvelles versions de la bibliothèque. Il n'y a plus besoin de partir à la recherche d'une libc.so.4 pour faire tourner un vieux programme sur un système n'ayant qu'une libc.so.6 par exemple.

    Unicode

    La prise en charge d'unicode a été améliorée dans libedit.
    En janvier 2015, Baptiste Daroussin a synchronisé libedit de FreeBSD avec la dernière version de NetBSD. Après cela, il a ajouté des patches pour corriger la lecture de lignes dans un environnement unicode.
    Concrètement, cela a permis à sh(1) de fonctionner dans un environnement UTF-8. Merci à Baptiste d'avoir pris le temps d'identifier ces patches pour le bénéfice de DragonFly.

    Divers

    date(1) bénéficie désormais de l'option -R afin d'afficher en format compatible avec la RFC2822 (qui est l'équivalent de "%a, %d %b %Y %T %z" avec LC_TIME=C).

    patch(1) reçoit l'alias --dry-run, équivalent à -C pour une compatibilité accrue avec GNU patch, svn patch et FreeBSD patch.

    Le flag -b a été ajouté à camcontrol(8) devlist afin d'afficher les bus existants et leurs sims parents.

    tail(1) bénéficie désormais d'une option -q qui permet de supprimer les en-têtes des noms de fichiers.

    powerd(8) a reçu de nombreuses corrections et améliorations telles qu'une nouvelle option pour désactiver le mode turbo ou pour contrôler le seuil limite de la charge processeur ou encore l'arrêt d'urgence en cas de charge batterie très faible.

    Divers outils ont été mis à jour:

    • OpenSSH 6.7p1
    • file 5.22
    • ftp 1.205 depuis NetBSD
    • sh a été synchronisé avec FreeBSD
    • mdocml 1.13.1
    • byacc 2014-10-06
    • less 471
    • bmake 2014-11-11
    • OpenSSL 1.0.1o

    Divers

    Chargeur d'amorçage en couleur

    La représentation artistique de Fred, la libellule du menu de démarrage, a été améliorée. La ligne entre Fred et le menu a été supprimée et le dessin amélioré. Fred est maintenant affiché en couleur par défaut, avec un thème bleu.

    Un système de détection de console série a été ajouté afin de laisser le bootloader en noir et blanc et de ne pas polluer la console avec des codes couleur ansi dans ce cas.

    /usr intégré dans la racine

    L'installeur ne crée plus de système de fichier /usr séparé.

    Utiliser un système de fichier /usr distinct de / n'a plus vraiment de sens à notre époque: les binaires de / et /usr sont tous dynamiquement liés et font tous partie du même système DragonFly de base.

    C'est en plus dangereux: avec un système de fichier /usr séparé, les binaires statiques de secours de /usr/share/initrd ne peuvent pas être utilisés sans monter /usr en premier lieu.
    Et comme mount(8) est un binaire dynamique, /usr ne pouvait plus être monté dans certaines situations…

    Slider, un outil pour naviguer dans l'historique de HAMMER

    Slider est un logiciel développé par John Marino. Il dispose d’une interface curses et est écrit en Ada. Sa première version a été annoncée sur la liste de diffusion en décembre.

    Slider permet de :

    • naviguer parmi toutes les versions disponibles d’un fichier stocké dans l’historique d’HAMMER ;
    • de visualiser les différences entre deux versions (si c’est un fichier texte) ;
    • de restaurer une ancienne version du fichier ;
    • de récupérer un fichier effacé.

    S’il est lancé sur un répertoire existant, tous les fichiers supprimés et sous-répertoires restaurables seront recherchés dans l'historique de ce répertoire et il sera possible de les restaurer.

    Slider est disponible via dports, avec une documentation.

    Suppression des page info

    Les outils GNU texinfo ainsi que toutes les pages de documentation au format texinfo ont été supprimées. Ces pages n'étaient disponibles que pour les outils GNU et la majorité des informations est accessible via les pages de manuel.

    Gestionnaire de service svc

    Un gestionnaire de service, svc(8) a été créé. Il permet de lancer et gérer des services de façon robuste, d'obtenir le statut, loguer les messages récents etc…

    svc(8) permet de gérer des listes de groupes, des uid, de construire et faire tourner le programme voulu dans un environnement chroot ou jail. Il permet également de nettoyer les descripteurs de fichier, les sockets et les fichiers pid utilisés lorsque le processus fils prend fin.

    svc(8) utilise pour cela le nouvel appel système procctl(), permettant de gérer les sous-processus lancés par un processus donné et de s'assurer qu'ils sont tous tués correctement. Le programme parent se comporte ainsi de la même façon qu'init(8) mais pour un sous-ensemble limité de processus et non pas tous les programmes tournant sur la machine.

    procctl(2) a été conçu pour être compatible avec l'appel système de même nom de FreeBSD, en discussion avec des développeurs FreeBSD. Il est prévu que FreeBSD implémente un gestionnaire de service compatible dans l'avenir.

    Notes de mise à jour

    La mise à jour vers DragonFly BSD 4.2 se fait de la manière habituelle :

    cd /usr/src
    git fetch origin
    git branch DragonFly_RELEASE_4_2 origin/DragonFly_RELEASE_4_2
    git checkout DragonFly_RELEASE_4_2
    make buildworld && make buildkernel && make installkernel && make installworld

    À noter toutefois qu'avec la suppression de sendmail de base, une étape supplémentaire est nécessaire pour configurer le MTA avant de lancer make upgrade. Si aucun MTA avancé n'est nécessaire, ce qui devrait être le cas pour la plupart des utilisateurs, DMA est recommandé et cette commande suffit à la configuration de base:

    cp /usr/src/libexec/dma/mailer-conf/mailer.conf.dma /etc/mail/mailer.conf

    Suite à quoi, il convient encore de lancer:

    make upgrade

    et enfin:

    reboot

    Si le système a redémarré correctement, il est conseillé de faire une sauvegarde de l'initrd de secours via :

    make rescue

    Lire les commentaires

  • ECMAScript 2015 est approuvé (Dépêches LinuxFR)

    La spécification ECMAScript 6e édition a été approuvée le 17 juin 2015 sous le nom ECMAScript 2015.

    Parmi les nouveautés, il faut noter l'arrivée des classes, des modules, des fonctions fléchées, des boucles for-of, des générateurs, des proxies et de plusieurs nouvelles méthodes.

    Sommaire

    Cette nouvelle édition permet de rattraper le retard face au JavaScript déjà implémenté dans les navigateurs. De ce fait, l'arrivée des mots clés const et let n'est pas si nouvelle. Par contre, la spécification ne correspond pas toujours aux implémentations, et certaines fonctionnalités devront être revues.

    Constante et variable

    La déclaration const permet de créer une constante nommée accessible uniquement en lecture.

    const PI = 3.141593;
    PI > 3.0;

    L'instruction let permet de déclarer une variable dont la portée est celle du bloc courant, éventuellement en initialisant sa valeur.

    function letTest() {
        let x = 31;
        if (true) {
            let x = 71;  // c'est une variable différente
            console.log(x);  // 71
        }
        console.log(x);  // 31
    }

    Classe

    Durant le développement de la spécification, plusieurs propositions ont été élaborées pour la gestion des classes. La solution retenue est plutôt minimale. La classe contient un constructeur et des méthodes. L'héritage simple est géré. À cela s'ajoutent des méthodes get et set, et des membres statiques.

    class Fruit {
        constructor (couleur) {
            this.couleur = couleur;
        }
        static choisirCouleur() {
            return ['rouge', 'jaune', 'bleu', 'vert', 'orange', 'mauve'];
        }
        toString () { 
            return "fruit";
        }
    }
    
    class Pomme extends Fruit {
        constructor (couleur, sorte) {
            super(couleur);
            this.sorte = sorte;
        }
        get saveur() {
            return this.sorte + " " + this.couleur;
        }
        toString () { 
            return super.toString() + " : pomme";
        }
    }
    
    let maPomme = new Pomme('jaune', 'Délicieuse');

    Fonction fléchée

    Une expression de fonction fléchée (arrow function en anglais) permet d'avoir une syntaxe plus courte que les expressions de fonction et permet de lier la valeur this de façon lexicale. Les fonctions fléchées sont obligatoirement anonymes.

    Les fonction fléchées peuvent être utilisées suivant deux syntaxes différentes :

    param => expression

    qui est équivalente à

    function(param) {return param.expression}

    ou sous la forme

    ([param] [, param]) => {instructions}

    qui est équivalente à

    function([param] [, param]) {
       instructions
    }

    Bien que la fonction fléchée soit nécessairement anonyme elle-même, elle peut néanmoins être mappée sur une variable.

    var simple = a => a > 15 ? 15 : a;
    var complexe = (a, b) => {
        if (a > b) {
            return a;
        } else {
            return b;
        }
    }

    Une fonction fléchée ne définit pas son propre this. Elle utilise celui disponible dans son contexte.

    var robert = {
        _nom: "Robert",
        _amis: [],
        imprimerAmis() {
            this._amis.forEach(f =>
            console.log(this._nom + " connaît " + f));
        }
    }

    Affecter par décomposition

    L'affectation par décomposition (destructuring en anglais) est une expression qui permet d'extraire des données d'un tableau ou d'un objet grâce à une syntaxe dont la forme ressemble à la structure du tableau ou de l'objet. La syntaxe est semblable à ce qu'offre Perl ou Python.

    Décomposition d'un tableau

    var list = [ 1, 2, 3 ];
    var [ a, , b ] = list;
    [ b, a ] = [ a, b ];

    Décomposition d'un objet

    var o = {p: 42, q: true};
    var {p, q} = o;
    
    console.log(p); // 42
    console.log(q); // true 
    
    var {p: toto, q: truc} = o;
    
    console.log(toto); // 42
    console.log(truc); // true

    Opérateur de décomposition

    L'opérateur de décomposition permet de développer une expression lorsque plusieurs arguments ou plusieurs éléments sont nécessaires.

    var params = [ "salut", true, 7 ];
    var other = [ 1, 2, ...params ]; // [ 1, 2, "salut", true, 7 ]
    f(1, 2, ...params) === 9;
    
    var str = "foo";
    var chars = [ ...str ]; // [ "f", "o", "o" ]

    Paramètres

    Un paramètre du reste permet de représenter un nombre indéfini d'arguments sous forme d'un tableau.

    function f (x, y, ...a) {
        return (x + y) * a.length;
    }
    f(1, 2, "salut", true, 7) === 9;

    Un paramètre par défaut permet d'initialiser des paramètres lors de l'appel de la fonction si la valeur passée est nulle (au sens où il n'y a aucune valeur de passée) ou undefined.

    function f (x, y = 7, z = 42) {
        return x + y + z;
    }
    f(1) === 50;

    Décomposition

    Les valeurs des tableaux et les propriétés des objets passés en paramètre à une fonction seront décomposées.

    function f ([ name, val ]) {
        console.log(name, val);
    }
    function g ({ name: n, val: v }) { 
        console.log(n, v);
    }
    function h ({ name, val }) {
        console.log(name, val);
    }
    f([ "bar", 42 ]);
    g({ name: "foo", val: 7 });
    h({ name: "bar", val: 42 });

    Nouvelles notations

    Raccourcis pour les noms de propriétés

    Une notation raccourcie permet de créer une propriété qui porte le nom de sa variable d'origine.

    var a = "toto", b = 42, c = {};
    var o = { a, b, c };

    Raccourcis pour les noms de méthodes

    Une notation raccourcie permet de ne plus utiliser le mot-clé function.

    var o = {
        property([parameters]) {},
        get property() {},
        set property(value) {},
        * generator() {}
    };

    Noms calculés pour les propriétés

    Une expression entre crochets [] peut être calculée en tant que nom d'une propriété.

    var prop = "toto";
    var o = {
        [prop]: "hey",
        ["tr" + "uc"]: "ho"
    };

    Itérateur

    L'instruction for-of permet de créer une boucle qui parcourt un objet itérable.

    let fibonacci = {
        [Symbol.iterator]() {
            let pre = 0, cur = 1;
            return {
                next () {
                    [ pre, cur ] = [ cur, pre + cur ];
                    return { done: false, value: cur };
                }
            };
        }
    }
    
    for (let n of fibonacci) {
        if (n > 1000)
            break;
        console.log(n);
    }

    Générateur

    Un générateur est une fonction qu'il est possible de quitter puis de reprendre. Le contexte d'un générateur (les liaisons avec ses variables) est sauvegardé entre les reprises successives.

    function* range (start, end, step) {
        while (start < end) {
            yield start;
            start += step;
        }
    }
    
    for (let i of range(0, 10, 2)) {
        console.log(i); // 0, 2, 4, 6, 8
    }

    Promise

    L'objet Promise (pour « promesse ») est utilisé pour réaliser des opérations de façon asynchrone. Une promesse est dans un de ces états :

    • en attente : état initial, la promesse n'est ni remplie, ni rompue ;
    • tenue : l'opération a réussi ;
    • rompue : l'opération a échoué ;
    • acquittée : la promesse est tenue ou rompue mais elle n'est plus en attente.

    Le constructeur de l'objet Promise prend en argument une fonction avec deux paramètres : resolve et reject. Si la promesse est tenue, on appelle la fonction resolve() avec le résultat. Si elle est rompue, on appelle la fonction reject() avec la raison.

    var p1 = new Promise((resolve, reject) => {
        setTimeout(() => resolve(1), 1000);
    });

    La méthode then() prend deux arguments qui sont deux fonctions callback à utiliser en cas de complétion ou d'échec de la Promise. Elle renvoie une Promise, on peut donc facilement enchaîner plusieurs appels à cette méthode.

    p1.then((valeur) => {
        console.log(valeur); // 1
        return valeur + 1;
    }).then((valeur) => {
        console.log(valeur); // 2
    });

    Module

    Les modules permettent de créer de nouveaux espaces de noms, et ainsi limiter la pollution de l'espace de nom global.

    Import

    // someApp.js
    import * as math from "lib/math";
    console.log("2π = " + math.sum(math.pi, math.pi));

    Export

    // lib/math.js
    export function sum (x, y) { return x + y };
    export var pi = 3.141593;

    Réflexion

    Proxy

    L'objet Proxy est utilisé afin de définir un comportement sur mesure pour certaines opérations fondamentales (par exemple, l'accès aux propriétés, les affectations, les énumérations, les appels de fonctions, etc.).

    var handler = {
        get: function(cible, nom){
            return nom in cible ? cible[nom] : 37;
        }
    };
    
    var p = new Proxy({}, handler);
    p.a = 1;
    p.b = undefined;
    
    p.a === 1;
    p.b === undefined;
    'c' in p === false;
    p.c === 37;

    Reflect

    Reflect est un objet natif qui fournit des méthodes pour les opérations qui peuvent être interceptées (via les proxies). Reflect n'est pas une fonction (y compris pour construire un objet).

    let obj = { a: 1 };
    Object.defineProperty(obj, "b", { value: 2 });
    obj[Symbol("c")] = 3;
    Reflect.ownKeys(obj); // [ "a", "b", Symbol(c) ]

    Nouvelles méthodes

    Voici quelques exemples de nouvelles méthodes qui ont été ajoutées aux objets standards.

    Object

    La méthode Object.assign() est utilisée afin de copier les valeurs de toutes les propriétés directes (non héritées) d'un objet qui sont énumérables sur un autre objet cible.

    var dst = { quux: 0 };
    var src1 = { foo: 1, bar: 2 };
    var src2 = { foo: 3, baz: 4 };
    Object.assign(dst, src1, src2);

    La méthode Object.setPrototypeOf() définit le prototype d'un objet donné avec un autre objet ou null.

    function Parent(){}
    function Child(){}
    Object.setPrototypeOf(Child.prototype, Parent.prototype);
    new Child instanceof Child;  // true
    new Child instanceof Parent; // true

    Array

    La méthode find() renvoie une valeur contenue dans le tableau si un élément du tableau respecte une condition donnée par la fonction de test passée en argument.

    [ 1, 3, 4, 2 ].find(x => x > 3); // 4

    String

    Les méthodes startsWith(), endsWith() et includes() renvoient un booléen indiquant, respectivement, si la chaîne de caractères commence par, se termine par ou contient la deuxième chaîne de caractères fournie en argument.

    "hello".startsWith("ello", 1); // true
    "hello".endsWith("hell", 4); // true
    "hello".includes("ell"); // true
    "hello".includes("ell", 1); // true
    "hello".includes("ell", 2); // false

    La méthode repeat() construit et renvoie une nouvelle chaîne de caractères qui contient le nombre de copies demandées de la chaîne de caractères sur laquelle la méthode a été appelée, concaténées les unes aux autres.

    " ".repeat(4 * depth);
    "foo".repeat(3);

    Number

    La méthode Number.isSafeInteger() permet de déterminer si la valeur, passée en argument, est un entier représentable correctement en ECMAScript (c'est-à-dire un nombre compris entre -(253 -1) et 253 -1).

    Number.isSafeInteger(42) === true;
    Number.isSafeInteger(9007199254740992) === false;

    Autres fonctionnalités

    • Les nombres octaux et binaires sous une forme littérale
    • Les tableaux typés
    • Les gabarits de chaînes de caractères
    • Les objets Map et Set et leurs équivalents avec références faibles
    • Amélioration de la gestion de l'Unicode pour les chaînes de caractères et les expressions rationnelles

    Il ne reste plus qu'à attendre que toutes ces nouveautés arrivent jusqu'à votre navigateur préféré.

    Conversion

    La conversion des nouveautés du ECMAScript 2015 vers le langage compris par les précédentes implémentations peut se faire à l'aide d'outils. Plusieurs nouveautés peuvent être implémentées par ECMAScript lui-même.

    Compilateur

    Il est possible de faire appel à un compilateur pour convertir les nouvelles fonctionnalités du langage vers du code compatible avec les anciennes implémentations. Il est plus facile de compiler le code depuis le serveur et envoyer seulement le résultat au client.

    Babel est un de ces compilateurs. Tous les exemples proposés ici compilent avec Babel. Une application Web permet de tester ses connaissances depuis un navigateur sans installer quoi que ce soit. Par contre, elle ne traduit pas les nouvelles méthodes. Il faut faire appel à d'autres outils pour avoir une application fonctionnelle.

    API

    Des bibliothèques sont disponibles pour l'implémentation des nouvelles API.

    core-js implémente les nouveaux objets et les nouvelles méthodes du langage. Elle s'utilise en complément d'un compilateur comme Babel.

    Lire les commentaires

  • Apéro du libre à Rennes le jeudi 2 juillet 2015 (Dépêches LinuxFR)

    L'association Actux vous invite à un nouvel Apéro du Libre, jeudi 2 juillet 2015 à partir de 19h au Papier Timbré, au 39 rue de Dinan à Rennes.

    L'apéro du libre est une rencontre conviviale autour d'un verre, pour discuter et faire connaissance entre utilisateurs de Logiciels Libres, débutants ou confirmés. L'apéro est traditionnellement ponctué d'un quizz autour du Libre.

    Pour rappel, cet évènement a lieu habituellement tous les premiers jeudis du mois, même endroit, même heure, et est ouvert à tous !

    Lire les commentaires

  • LinuxFr.org fête aujourd'hui ses 17 ans (Dépêches LinuxFR)

    LinuxFr.org fête aujourd'hui 28 juin ses 17 ans : bon anniversaire LinuxFr.org ! Merci à tous ceux qui ont contribué et contribuent au succès du site : administration système, animation de l'espace de rédaction, développement, modération, dons, écriture de contenus, etc. Le meilleur moyen de nous dire merci est de proposer une dépêche ou d'en rédiger collaborativement dans l'espace de rédaction pour faire vivre le site.

    Party Balloons

    Et en 17 ans, ça donne quoi ?

    Côté chiffres, le site comporte plus de 93 500 contenus publiés (environ 35 000 journaux, 32 000 entrées de forum, 23 000 dépêches, 340 sondages, 70 pages de wiki), et plus de 1,59 million de commentaires.

    On ne présente plus LinuxFr.org…

    On le célèbre

    Lire les commentaires

  • Premiers pas avec Saru, outil de suivi commercial (Journaux LinuxFR)

    Sommaire

    Introduction

    En me lançant comme indépendant l'année passée, j'ai soupçonné qu'il n'était peut-être pas nécessaire de commencer par installer OpenERP/Odoo/OFBiz. J'ai donc opté pour LibreOffice et un fichier historique.odt se présentant sous la forme d'un tableau avec deux colonnes : date et événement associé. Quelques événements étaient assortis d'une ligne ou deux de choses « à faire » et cela fonctionnait sans trop de souci.

    Cependant il devient vite fastidieux de garder une trace des différentes échanges avec les prospects/clients/partenaires, et il est facile de perdre de vue les différentes actions à entreprendre, même en les reportant sur un agenda à part.

    C'est l'heure de passer à un ERP qui fait le café ? Pas vraiment, voire vraiment pas. ;)

    En arrivant dans les associations Alliance Libre (Nantes) / CapLibre (Rennes), j'ai découvert Saru, développé par Lézard Rouge, qui fait une chose : le suivi commercial.

    En quelques mots, cela permet d'avoir un carnet d'adresses d'entreprises et de contacts attachés à ces entreprises, complété par un historique des échanges. Enfin, pour éviter de laisser passer des opportunités/impayés/autres, des alertes peuvent être définies, ce qui permet d'avoir un tableau de bord « choses à faire » avec différentes parties : celles en retard, celles du jour, mais aussi celles à plus long terme.

    Installation

    N'ayant pas trop l'habitude de déployer des applications web, j'ai pris quelques notes, que je reproduis ci-dessous. J'ai opté pour un déploiement à l'intérieur d'un conteneur LXC en partant d'une Debian Jessie standard mais cela devrait fonctionner sur d'autres plateformes similaires.

    # serveur web/cgi :
    apt-get install apache2 mysql-server libapache2-mod-php5 php5-mysql
    a2enmod cgi
    service apache2 restart
    
    # mise en place de l'appli, la racine web étant /var/www/html par défaut :
    chown www-data: -R /var/www
    su -s /bin/bash www-data
    cd /var/www
    wget http://www.saru.fr/wp-content/uploads/2014/12/saru_v1.4.1.zip
    unzip saru_v1.4.1.zip
    mv sources saru
    rm -r html
    ln -s saru html
    
    # configuration de l'appli :
    #   DB_HOST → localhost
    #   DB_PORT → (vide)
    #   DB_NAME, DB_USER, DB_PWD → saru
    editor saru/inc/config.php
    
    # correction du dump SQL : ajuster les ‘é’ « double-encodés »
    editor sql/dump_saru.sql
    
    # mise en place de la base de données :
    (root) mysql -p
      create user saru identified by "saru";
      create database saru;
      grant all on saru.* to saru;
    (www-data) mysql -u saru saru -p < sql/dump_saru.sql
    

    Et c'est parti !

    Premiers retours

    Tout d'abord, je suis très content du tableau de bord que je mentionnais en introduction. Cela évite de devoir vérifier les choses à faire à intervalle régulier, les alertes passent automatiquement en mode « en retard » si elles ne sont pas traitées à temps. Sortir du sac de nœuds qui commençait à se dessiner dans mon fichier historique.odt permet d'avoir une vision claire et organisée des choses passées/en cours/à venir. → :)

    Maintenant, dans les axes d'amélioration :

    • Instructions d'installation. Cela faisait très longtemps que je n'avais pas touché MySQL, j'ai dû tâtonner un peu, n'ayant pas trouvé d'instructions me prenant par la main. Il est probable que le contenu de ce journal soit réutilisé pour corriger ce point.

    • Correction des problèmes d'encodage. J'ai remonté le souci que j'ai eu avec le dump, il semblerait qu'être multiplateforme (Linux/Windows/Mac OS) reste compliqué même en 2015, et « utf-8 partout » ne semble pas être une réponse acceptable.

    • Avoir un dépôt de code public. À l'heure actuelle il y a juste un zip à récupérer, et c'est assez embêtant pour un tas de raisons que je ne vais pas énumérer. Il est prévu de publier le dépôt, il faut juste qu'un peu de temps soit alloué à cette tâche.

    • Avoir un bug tracking system. Je ne détaille pas non plus pourquoi cela est une bonne idée, je vais juste mentionner qu'il semblerait qu'il y ait un certain nombre d'évolutions prévues, ce serait donc sympa que tout ceci soit public. En tout cas, la roadmap existe et devrait être publiée prochainement. En fonction de la solution choisie pour l'hébergement du code source, le système de suivi pourrait arriver en bonus.

    • Support i18n/l10n. L'application est uniquement en français à l'heure actuelle, et ne semble pas utiliser de framework permettant l'internationalisation/la localisation. Ne parlant pas vraiment PHP, je peux me tromper. Je n'ai pas encore remonté ce point qui pourrait être un frein à l'adoption par un plus grand nombre d'utilisateurs, mais la page comment participer semble indiquer que Saru est prévu pour être multilingue. Affaire à suivre, donc.

    Le dernier point est aussi une des raisons m'ayant poussé à proposer ce journal en français sur LinuxFr plutôt qu'à publier quelque chose de similaire en anglais sur mon blog. ;)

    Cette installation étant relativement récente, je n'ai malheureusement pas beaucoup plus de choses à vous raconter pour le moment. Il me reste à voir comment cela se passe quelques contacts, prospects, clients de plus.

    Lire les commentaires

  • Entretien avec Jehan, développeur GIMP (Dépêches LinuxFR)

    Nous avons la chance d’avoir quelques développeurs qui fréquentent LinuxFR.org, dont Jehan Pagès (Jehan) qui contribue à GIMP, le logiciel de retouche d’images que l’on ne présente plus et qui est en train de se faire beau en vue de la sortie de la version 2.10 (je parle du logiciel, pas de Jehan — quoique je ne sache pas précisément ce qu’est en train de faire Jehan à l’heure où je couche ces quelques lignes).

    Jehan a accepté de répondre à quelques questions pour LinuxFr.org ; nous le remercions chaleureusement à la fois pour le temps consacré à cet entretien et pour son implication dans GIMP !

    Bonjour, peux-tu te présenter en quelques mots ?

    Je m’appelle Jehan. Ces dernières années, je me suis principalement défini comme un « vagabond » mais depuis environ un an, ce n’est plus vrai. Donc je ne sais plus trop comment me présenter autrement. Je suis un être humain. :-)
    Mongolie

    Comment définirais-tu ton rapport au logiciel libre, et comment es-tu entré en contact avec lui ?

    J’étais dans une famille d’artistes, pour qui l’usage de l'ordinateur est très basique. À l’opposé donc du stéréotype du geek dont les parents sont eux-mêmes ingénieurs et qui a développé son premier logiciel à 7 ans en BASIC.
    Mon premier contact avec un ordinateur fut en squattant l'Amiga de mon grand frère qui nous servait essentiellement de console de jeu, jusqu’à ce que l’alimentation crame (facilement réparable, mais on n’y connaissait rien, le vendeur de grande surface non plus et c’en est resté là : l’horreur de la société de consommation dans toute sa splendeur).

    J’ai eu mon premier ordi au milieu du lycée, avec Windows, des logiciels crackés, et des jeux vidéos. En prépa j’ai rencontré un gars qui a contribué à changer ma vision de l’informatique. Il s’appelle Samuel (et fréquente LinuxFr.org sans commenter beaucoup, je crois qu’il en a marre des trolls !). Il me bassinait avec ce truc : « Linux ». Je pense que c’est la première fois que j’en entendais parler. Je ne devais même pas avoir idée qu’il existait autre chose que Windows sur PC (et Mac était juste une « autre sorte » d'ordi). Pendant un an, il m’a fait chier, mais j’ai tenu et lui disais d’arrêter de m’emmerder avec ça.
    Plus tard, en fac d’info, tout était sous Linux. J’appelle Sam, je lui demande donc « un Linux ». Il me file un CD de Mandrake. J’avais le même vieil ordi depuis le lycée avec un petit disque, donc je vire Win et mets Mandrake en simple démarrage. Depuis je n’en suis pas revenu (enfin de GNU/Linux, pas de Mandrake bien sûr !). Et franchement je ne souhaite revenir à Windows comme OS principal pour rien au monde.
    Avec le temps, j’ai découvert la philosophie derrière les Logiciels Libres. Et je pense que c’est ce qui m’a réellement conquis.

    Au début, j’ai essayé de participer à quelques projets, avec plus ou moins de succès.

    De nos jours mon rapport au LL est : si quelque chose ne me plaît pas ou est buggué, je fais un rapport de bug ; si mon rapport de bug n’a pas assez de priorité pour les développeurs, mais qu’il en a pour moi, je n’attends plus que quelqu’un le corrige. Je corrige moi-même et envoie upstream.

    Quelles sont tes contributions à la future version 2.10 de GIMP  ?

    Déjà des contributions tierces, c’est-à-dire sur d'autres projets utilisés par GIMP (dépendances), qui ne sont pas aussi visibles, mais tout aussi importantes. En effet, des fois, les bugs qui sont rapportés viennent d’une bibliothèque tierce. Donc, on ouvre un rapport de bug sur l’autre projet. Or, suivant ma philosophie "je corrige quand j’en ai assez d’attendre les autres", il m’est régulièrement arrivé de faire un patch par-ci, par-là. J’ai ainsi contribué sur glib, GTK+, Pango, Exiv2, GExiv2, poppler, libmypaint, gettext, fontconfig, même autoconf et, bien sûr, à babl et GEGL. Et pour tous ces projets, mes patchs sont dûs au fait que je développe sur GIMP.

    Pas forcément grand-chose, des fois juste des améliorations sur leurs systèmes de build. Par exemple, quand nous avons intégré GExiv2 dans GIMP, ce dernier avait un Makefile fait main et un pkg-config cassé. Je leur ai donc proposé un système de compilation à base d'autotools, ce qui a notamment permis de compiler GExiv2 pour Windows, sans même toucher à une seule ligne de code (un des développeurs m'a dit avoir été étonné, car il n’avait jamais vraiment pensé à Windows en développant jusque-là et n’avait pas la moindre idée que ce serait aussi simple de cross-compiler leur code).

    Et puis l'une des corrections tierces dont je suis le plus content est dans GTK+. Jusqu'en 2013, quand on déconnectait sa tablette graphique, GIMP plantait. C'est tout con, mais c'est horripilant. La tablette est branchée en USB, et on sait tous qu'avec le câble qui se balade, ou un coup de main malencontreux, déconnecter un périphérique USB (même une micro-coupure pour un centième de seconde) n'est pas rare. Cela faisait planter tout logiciel qui gérait des tablettes sous GTK+ 2.0, car la prise en charge du branchement à chaud de périphérique n'est disponible qu'a partir de la version 3.0 de GTK+. Or, avec GIMP ou MyPaint (tous deux logiciels de dessin en GTK+2) les gens qui utilisent une tablette sont légions. Et je vous parle pas de l'horreur de perte de travail pour un peintre numérique qui ne pense pas à sauver régulièrement !

    Je n'ai pas ajouté la prise en charge du branchement à chaud sous GTK+ 2 (qui n'accepte pas de nouvelles fonctionnalités, juste des correctifs), mais j'ai au moins permis de contourner le problème. Maintenant ça ne plante plus !

    Ensuite GIMP à proprement parler, ce serait assez dur de lister toutes mes contributions. L'une d'elle est que je suis désormais le mainteneur du greffon de prévisualisation d'animation. Mon but est d'en faire un greffon et une UI bien plus élaborée qui permettra de faire autre chose que des GIF de chatons, mais même aussi d'utiliser GIMP pour faire de la vraie animation professionnelle. C'est un travail en cours que j'espère pouvoir présenter bientôt.

    Sinon j'ai aussi fait passer GIMP aux normes des répertoires XDG, j'ai amélioré le système de migration d'une version de GIMP à l'autre, ainsi que plusieurs problèmes de localisation (l'ordre des menus pour suivre les normes d'un langage RTL, la détection du langage sous Windows, la localisation des noms de langage dans leur propre langage…), des améliorations des onglets (leur permettre d'être réordonnés, de les avoir à gauche, droite, en bas…), j'ai intégré le code d'un contributeur externe permettant d'avoir une boîte de recherche contextuelle d'action (similaire au « menu-espace » de Blender), aidé à l'intégration des brosses MyPaint comme outil GIMP, ajouté une compression zlib (plutôt que RLE jusque-là) interne dans le format XCF, etc.
    Recherche d'action

    Je suis aussi l'un des rares développeurs qui va parfois corriger des bugs pour Windows (j'utilise ma licence en vente-liée essentiellement pour GIMP, avec un Windows en VM). Donc j'ai corrigé plusieurs bugs spécifiques à GIMP sous win.

    Et puis, bien sûr, pas mal de corrections de bugs, dont des crashs/plantages. C'est pour moi un des points les plus importants et pourtant des plus ingrats. Ingrat, car tout le monde se plaint des bugs, mais personne ne remercie jamais un développeur pour une correction de bug. Combien d'utilisateurs m'ont félicité pour la fonctionnalité de peinture en miroir ! Par contre, très peu pour la correction des crashs lors du débranchement de tablette. :/

    Et pourtant, je pense que j'ai contribué à améliorer la vie de bien plus d'utilisateurs par cette correction que je ne le ferai jamais par la peinture en miroir !

    Un logiciel instable (c'est-à-dire qui plante très souvent. Tout logiciel peut avoir des plantages inattendus tant qu'ils sont rares), aussi bien soit-il au niveau fonctionnalités, est mauvais. Aussi simple que ça.

    Comment es-tu devenu développeur sur ce projet ?

    Je suis arrivé en cours de 2.8. La première fois que j'ai montré GIMP à Aryeom, qui l'utilise maintenant quotidiennement, il n'était pas rare du tout de le voir se planter lamentablement. Donc j'ai décidé de corriger. Ce que j'ai fait.

    Assez rapidement on m'a donné les droits en écriture car j'ai fourni plusieurs correctifs que Mitch, le mainteneur, a estimé de bonne qualité. Un jour, en juste 1 ou 2 mois, il m'a dit en substance : "tu me donnes trop de boulot, je te donne les droits sur le dépôt". Et c'est ainsi que je suis devenu un développeur GIMP.

    Tu as fait une demande de financement par les utilisateurs pour développer la fonctionnalité « Peinture en miroir », quelle a été ta démarche ?

    J'aimerais pouvoir développer plus de Logiciel Libre, c'est-à-dire être payé pour cela. Au LGM à Madrid, j'ai vu la fonctionnalité "peinture en miroir" sur Krita, et me suis dit que ce ne devait pas être trop compliqué. J'ai fait un prototype vite fait, puis un peu plus tard j'ai fait une vidéo, me disant que cela me motiverait pour la développer vraiment. En vrai je crois avoir choisi la mauvaise fonctionnalité (elle ne m'intéresse pas tant que ça. Je l'avais juste sous la main), et surtout ne pas avoir visé assez haut pour me donner envie de la faire rapidement.
    Au final j'ai pris plusieurs jours sur 2/3 semaines vers mars pour l'implémenter. J'aime vraiment faire du beau code, le plus générique possible, avec une architecture solide. J'ai donc transformé le cœur logique pour la peinture dans GIMP pour qu'il soit "multi-point". Bien que par défaut, il n'y ait qu'un seul point (sous le pointeur), il est maintenant possible de peindre plusieurs points simultanément, selon toute transformation mathématique qui passe par la tête (permettant de transformer les coordonnées, mais aussi la brosse). Sur la base de ce nouveau cœur, j'ai ajouté un module de peinture en mirroir (par rapport à des axes), ainsi qu'une peinture en rotation (par rapport à un point), et une peinture en tuiles (par translations multiples).

    Image mirroir

    Quelles sont les autres personnes derrière GIMP ?

    GIMP est un des fanions du Libre, à n'en pas douter. Néanmoins contrairement (quoique…) à d'autres gros projets Libres, le projet GIMP a un problème de sous-effectif et une organisation bien plus informelle. Ainsi, là où beaucoup de projets se regroupent sous une fondation, une association, voire une société, GIMP n'a aucune entité officielle. Il n'y a pas non plus de marque GIMP. C'est un projet à la structure totalement informelle, comme le sont en général les projets libres de petite taille.

    Pour tout ce qui nécessite un nom plus officiel, par exemple afin de recevoir des dons aisément, le projet GIMP est sous le parapluie de la fondation GNOME. Ainsi GNOME gère les finances de GIMP et héberge plusieurs de ses serveurs, ainsi que ses sources et son suivi de bugs. Néanmoins, le projet GIMP ne peut pas vraiment être considéré comme un projet GNOME. Il s'agit davantage d'une relation symbiotique où GNOME fait une faveur à un plus petit projet frère qui partage de nombreuses briques de base. Notamment, il est à rappeler que GTK+, le toolkit graphique à la base de GNOME, vient originellement du projet GIMP (GTK+ signifie « GIMP ToolKit »). Bien sûr, avec tant en commun, le projet GIMP suit de près les recommandations et évolutions GNOME, si possible, et les standards des bureaux Libres, tout en restant séparé. Ainsi GIMP n'a aucune dépendance à l'infrastructure GNOME (installer GIMP ne requiert pas l'environnement et le bureau GNOME) et est considéré comme indépendant.

    GIMP a extrêmement peu de contributeurs actifs, en particulier pour un projet de cette taille. Ainsi, si on regarde les statistiques de contributions, on se rend compte qu'un unique contributeur, Michael Natterer (Mitch), a fait plus de 60 % des commits sur la dernière année, suivi de quelques contributeurs actifs mais bien moins productifs (comme moi, avec pourtant seulement 4% des commits, je suis le second développeur C si on regarde sur un an!) et enfin énormément de contributeurs avec des patchs uniques. Mitch est bien entendu le mainteneur du projet GIMP.
    Néanmoins quand on considère GIMP, il faut dorénavant aussi prendre en compte GEGL et babl, briques désormais essentielles, dont Øyvind Kolås (Pippin) et Daniel Sabo sont les mainteneurs. Les trois projets ont bien entendu beaucoup de développeurs en commun, bien que certains se concentrent clairement plus d'un côté ou l'autre.

    Beaucoup de contributeurs beaucoup moins actifs dorénavant au niveau du code restent impliqués pour les décisions ou communautairement. Michael Schumacher par exemple est clairement l'administrateur de GIMP, s'occupant de toute tâche administrative (comme la gestion financière, les relations publiques ou notre relation avec GNOME).

    Il est aussi à noter qu'à l'heure actuelle, aucun développeur n'est payé pour améliorer GIMP, à notre connaissance, pas même indirectement (je ne parle pas de mini-financements ponctuels, mais de développeurs à temps plein ou partiel sur du long terme).

    Les développeurs GIMP ont très peu de rencontres physiques (le principal point de rencontre est le canal irc #gimp sur irc.gimp.org). Néanmoins, l'un des évènements désormais phare du projet est le Libre Graphics Meeting, chaque année, pour lequel GIMP est un sponsor majeur (sponsoriser l'évènement et défrayer les contributeurs est quasiment la seule grande dépense annuelle du projet). C'est l'occasion pour les contributeurs principaux de GIMP de pouvoir se rencontrer chaque année, et discuter du projet de vive voix. GIMP fait venir des contributeurs du monde entier, pour certains depuis des zones aussi lointaines que le Brésil, Israël et la Nouvelle-Zélande.
    Ci-dessous un aperçu d'une réunion de développeurs à l'université de Leipzig, en Allemagne, en mars 2014, lors de LGM 2014.

    Réunion de développeurs GIMP, à l'université de Leipzig, mars 2014, lors du Libre Graphics Meeting 2014
    Puis à Montréal à l'université de Toronto, au Canada, pour LGM 2015:
    GIMP BOF LGM 2015

    Comment GIMP tire-t-il parti du Google Summer of Code ?

    GIMP a été régulièrement un projet mentor du Google Summer of Code, mais l'an dernier, le projet n'a pas été accepté et cette année, je crois qu'on n'a même pas essayé (sauf erreur, puisque je n'ai pas suivi).

    Je pense que GSoC est une contribution intéressante et, en même temps, il faut relativiser l'apport. En général les résultats ne sont pas de qualité adéquate pour finir immédiatement dans l'arbre de développement de GIMP et ce même si le projet étudiant est qualifié de « succès » (l'étudiant a bien travaillé et il serait injuste de le faire échouer, mais le résultat final n'est pas pour autant d'une qualité suffisante pour intégration immédiate). Dans tous les cas, il reste beaucoup de travail d'intégration, de revue et d'assurance qualité une fois les projets achevés, ce qui est surtout un problème quand les étudiants disparaissent une fois la récompense empochée, ce qui n'est pas si rare (ce n'est pas non plus un reproche. Les étudiants ne promettent pas de rester, même si c'est bien sûr le secret espoir d'un projet Libre).
    Ainsi même les projets GSoC les plus éblouissants en démo vont prendre des mois, voire des années à être intégrés, pour atteindre le seuil de qualité adéquate.
    Ensuite cela serait moins un problème s'il y avait beaucoup de développeurs permanents, ce qui permettrait de faire beaucoup plus de revues de code, mais comme je le disais, on est au final très peu sur GIMP.

    Néanmoins, le Google Summer of Code reste un apport intéressant pour les projets. Cela apporte du sang frais et des fonctionnalités inédites. J'espère personnellement que nous serons de nouveau dans la liste des organisations mentor un jour.

    GIMP n’a pas été retenu parmi les projets participants au GSoC cette année : sait-on comment s’opère la sélection ?

    J'ai demandé aux autres développeurs, un jour, et ils savaient pas non plus a priori. Les critères de sélection sont non divulgués par Google, il me semble. Donc non, je sais pas. Si je devais m'aventurer à deviner, je dirais que GIMP perd un peu de son aura ces dernières années car on n'a pas assez de sorties (trop espacées). Donc de l'extérieur, le projet peut avoir l'air mort, ce qui n'est pas du tout le cas. Une autre raison possible serait que notre propre intérêt pour le GSoC s'est affaibli. Comme je disais plus haut, plusieurs développeurs ont vu les limites du programme Google, et aussi ont peut-être estimé que leur temps pouvait être mieux utilisé plutôt qu'encadrer des étudiants pour du code qu'on n'est pas sûr d'utiliser. En tous les cas, au final, on n'avait que deux mentors intéressés l'an dernier (moi notamment car je n'y avais jamais participé et que ça m'intéressait de voir l'envers du décor) et — sauf erreur — seulement un cette année (pas moi cette fois, je n'avais pas le temps).
    Peut-être que Google a vu cela (nos listes de diffusion et discussions étant publiques), et a préféré donner du financement pour des projets plus à fond sur le programme ?

    Depuis des années, GIMP possède un système de greffons (plug-ins) ayant permis de nombreuses contributions extérieures au projet. Avec l’arrivée de GEGL, comment vois-tu ce système de greffon évoluer ? Risque-t-on de perdre l’immense base de greffons existants ?

    Dans GIMP 2.10, tout greffon qui marche en 2.8 est censé continuer à marcher. On reste dans la lignée de GIMP 2, donc la compatibilité est assurée. Si ce n'est pas le cas, alors il y a un bug, et dans ce cas faites-vous plaisir : remplissez des rapports de bug !

    GIMP 3 par contre (future version majeure de GIMP qui suivra 2.10) pourra entraîner des changements d'API. Je ne suis pas certain lesquels, mais globalement je pense que les fonctions “dépréciées” à l'heure actuelle pourraient alors être retirées.

    GEGL deviendra alors le moteur de GIMP pour tout ce qui touche aux données bitmap. Il est donc possible que certaines fonctions qui donnaient accès aux données bitmap à un autre niveau disparaissent dans GIMP 3.0. Mais ça ne voudra absolument pas dire que le développeur de greffons devra absolument passer par des nœuds GEGL pour modifier les images. Développer une opération GEGL est la voie préférée et conseillée dans lequel le projet GIMP se dirige à la place de greffons de type "filtres", mais les buffers GEGL ne sont pas des structures opaques, et sont accessibles aux greffons. Un développeur de greffons pourra tout à fait récupérer les données bitmap bruts, les modifier comme il faisait avant, puis les remettre dans le buffer. Il pourrait donc y avoir un peu de réécriture de code, mais rien d'insurmontable, et rien d'anormal pour un passage de version 2 à 3 ! Simplement ils ne pourront alors pas profiter de toutes les supers fonctionnalités permises par GEGL (visualisation directe sur le canvas, même partielle, édition non destructrice, création de graphes d'effets qui pourraient être réutilisés sur de multiples d'images sources, etc.).

    Ensuite je ne suis pas le plus grand expert de GEGL chez GIMP (donc je peux dire des erreurs aussi), mais c'est ce qui ressort de ma petite expérience à manipuler l'API GEGL et parce que ce sont des choses que j'ai aussi demandées au mainteneur.

    Par contre les thèmes qui utilisent des icônes fait-maison directement risquent d'être cassés car on utilise maintenant le standard des thèmes d’icônes. Mais bon ce n'est pas le pire des cassages.

    Personnellement ce qui m'intéresse bien plus serait d'avoir une vraie plateforme de diffusion et de gestion des greffons. À l'heure actuelle, installer un greffon est manuel : on trouve un bout de code ou une archive sur le net, on l'installe dans le bon répertoire, éventuellement on se heurte à des problèmes de droit, etc. Sans compter que l'on ne sait en général pas quelle version on a installée, donc les mises à jour sont inexistantes. Au final, comme tu dis, on a une immense base de greffons, mais les gens en utilisent très peu. Il y en a quelques uns qui sont très connus comme G'MIC, grâce à une équipe de développement active, aussi bien pour le développement que la communication du projet.
    Mais tous ces petits greffons de quelques lignes, adaptés à certains cas d'usage très particuliers et qui pourraient vraiment sauver la vie (du moins la simplifier grandement) à certaines catégories d'utilisateurs ? Ceux-là sont perdus dans le grand internet, quelque part sur un serveur qui peut disparaître demain sans que personne s'en rende compte.
    Le projet GIMP a un dépôt où les gens peuvent déposer des plugins, mais totalement envahi par le spam et le flood, donc l'enregistrement de nouveaux comptes est fermé depuis plus d'un an, sans compter que l'UI générale laisse clairement à désirer. J'aimerais qu'on ait une vraie plateforme de greffons, avec laquelle les utilisateurs pourraient installer, retirer et mettre à jour un greffon depuis GIMP même, avec de la sécurité (vérifications de code automatique et par des humains si nécessaire), un système de versionnement et de mise à jour des greffons, une spécification, etc.
    De mon expérience en tant qu'utilisateur, Firefox et WordPress sont de très bons exemples avec une vraie plateforme de gestion et téléchargement des greffons, et j'aimerais qu'on y pioche des idées.

    J'ai en fait le projet de travailler sur une telle plateforme (et ai même déjà des bouts de code "stashed" quelque part sur mon ordi) et ça pourrait être mon prochain gros projet. Mais j'attends déjà de voir comment mon projet actuel (film d'animation 2D libre "ZeMarmot") se passe. Si ça ne marche pas bien, je ne sais pas si je continuerai longtemps. Si ZeMarmot marche par contre, on pourrait voir une nouvelle proposition de financement pour cette plateforme dans quelques mois.

    Comment vois-tu les interactions entre GIMP et les autres projets libres ?

    Je pense personnellement que GIMP est un projet moteur du mouvement Libre, dont le but n'est pas uniquement de créer un logiciel, mais a suscité de nombreux autres projets. Il est ainsi à l'origine de briques essentielles comme GTK+ (qui est la base de nombreux programmes, que l'on aime ou non ce toolkit et son état actuel), et maintenant babl et GEGL, qui eux-mêmes seront à l'avenir — je pense — des briques majeures de nombreux autres projets. GIMP aussi participe activement aux discussions avec d'autres projets, et tente de suivre les standards pour un bureau de travail sain. Plutôt que de bosser dans son coin, la collaboration est clairement un créneau majeur, comme le montre l'intégration des brosses MyPaint, qui inaugure une ère nouvelle où les divers projets majeurs de l'image raster souhaitent collaborer et créer ensemble un format de partage des brosses entre applications.

    Ceci sans parler du format OpenRaster, encore balbutiant et dont le développement est peu actif, mais qui pourrait être très important s'il va au bout des espérances, et dont GIMP est aussi un contributeur majeur pour la spécification.

    C'est pourquoi, si vous avez le moindre problème avec GIMP, je conseillerai de faire un pas en avant et d'aider le projet, avec du code, du design ou de l'aide communautaire. Nous manquons de mains !

    À ce propos, quel est ton avis sur GTK+ comme boite à outils pour interface graphique et ses évolutions ?

    Personnellement je suis très peu intéressé par les guerres et trolls, etc. En fait je suis anti-spécialisé. Je m'intéresse à un peu tout, et le fait que je fais plus souvent du GTK+ dernièrement est essentiellement dû au fait que le hasard a voulu que les logiciels auxquels je me suis intéressé étaient en GTK+.
    Hors cela, je n'aurais aucun problème à développer en Qt demain si le prochain programme qui me faisait de l'œil devait être en Qt, ou en quoi que ce soit d'autre.
    Au final je fais avec ce que j'ai. Ce qui m'intéresse, c'est de faire quelque chose de bien. Le reste, c'est de la perte de temps.

    Ensuite oui c'est pas parfait, et je m'y connais pas assez pour savoir comment c'est à côté, mais je doute qu'on change le toolkit de GIMP (surtout qu'il vient de GIMP !), donc bon. Plutôt que brasser du vent à rouspéter contre quelque chose qui ne changera pas, je fais avec; et franchement ce toolkit n'est pas si mal. :-)

    Tout ça pour dire : GTK+, je m'en balance. C'est ce que je fais avec qui m'intéresse.

    Qu'est-ce que tu aimerais (voir) changer/améliorer dans GIMP ou son développement, quels sont les prochains sujets et même les futurs enjeux pour GIMP ?

    Au niveau fonctionnalité, mon gros chantier à l'heure actuelle, c'est l'animation, la peinture numérique et la consolidation de GIMP.
    Mon prochain gros projet, c'est les plugins. Je l'ai déjà dit plus haut. Je pense que c'est vraiment important qu'on ait une plateforme saine et cela devrait vraiment apporter un renouveau.

    Ensuite il y a toute la partie "édition non destructrice" qui sera un bond majeur dans la manière dont les gens travaillent l'image avec les logiciels Libres.

    Un autre point majeur est le design et l'interface utilisateur de GIMP qui souffre de sa vieillesse. GIMP se traîne des casseroles dues essentiellement à son âge (20 ans cette année !) et ce serait vraiment un projet très important, non seulement pour l'image du logiciel, mais surtout pour améliorer la simplicité d'utilisation. À vrai dire on a un tel projet avec Aryeom, et elle pense démarrer un groupe de design et UI pour GIMP dans l'année à venir.

    Enfin un dernier gros point qui me chagrine est le cycle de sortie du projet : il est trop long. Ceci est aussi dû à l'âge du projet, d'une époque où on laissait les choses mûrir des années et où les utilisateurs compilaient eux-mêmes quand ils souhaitaient le logiciel plus vite. Mais de nos jours, il faut sortir plus vite, et passer à un cycle de sortie rapide. On devrait être capable de faire une sortie rapidement pour juste quelques corrections de bug, mais aussi pour des fonctionnalités. C'est quand même triste qu'on doive attendre des années pour utiliser des fonctionnalités qui sont déjà implémentées dans l'arbre de développement.

    Comment s'établit la feuille de route ?

    La feuille de route s'établit essentiellement par discussion. Les divers développeurs discutent, que ce soit sur IRC ou physiquement (sans sortir les poings !) lors de rencontres telles que Libre Graphics Meeting, et choisissent de ce qui est prioritaire ou non.
    Ensuite le reste, c'est aussi l'intérêt personnel. Si quelque chose est prioritaire pour moi, je le développe, le soumet à revue et c'est intégré même si c'était une basse priorité dans notre feuille de route.

    Contribues-tu également à d'autres logiciels ? As-tu des projets en rapport avec le logiciel libre dans un futur proche ?

    Oui, comme j'expliquais, quand je rencontre un problème ou un manque, mon premier réflexe est de chercher s'il n'existe déjà pas une solution, puis d'ouvrir un rapport de bug (ou demande de fonctionnalité) et enfin de corriger/implémenter moi-même s'il le faut (en estimant bien entendu le temps que j'y passerai comparativement avec mon désir d'avoir le bug corrigé ou la fonctionnalité disponible).
    Donc j'ai déjà des patchs dans une trentaine de projets d'après OpenHub, et encore ce site ne compte pas tous les projets auxquels j'ai contribué sans le nom en auteur, notamment parce qu'ils utilisaient un dépôt de source qui n'a pas de concept d'auteur vs. committer, comme le vieillissant SVN. Ainsi j'ai par exemple deux patchs dans Blender (qui utilise git maintenant mais utilisait svn à l'époque où j'ai fourni ces patchs) et dans de nombreux autres logiciels dont je ne me souviens probablement même plus avoir fourni un patch.

    Sinon j'ai créé l'outil crossroad, initialement justement pour cross-compiler GIMP pour Windows depuis GNU/Linux (c'est tellement horrible d'essayer de compiler des logiciels sous environnement Windows alors que c'est si simple sous GNU/Linux !).

    Enfin, je pense que vous avez tous entendu parler ici de ZeMarmot, un film d'animation Libre (Creative Commons BY-SA) en 2D, dessiné avec GIMP, édité avec Blender et Ardour. Dans ce contexte, je vais continuer à développer pour GIMP, mais aussi je vais travailler sur un nouveau logiciel pour la gestion d'un projet de film d'animation. Et ce sera cool. :-)
    D'ailleurs notre financement n'est pas terminé puisqu'on a eu droit à une prolongation de la plateforme. Donc si quelqu'un lit cet entretien, et souhaiterait contribuer, ce qui aidera à améliorer GIMP et d'autres logiciels Libres, vous êtes les bienvenus!.
    Contribue à ZeMarmot

    Pour ZeMarmot justement, tu utiliseras certainement beaucoup GIMP. GIMP est souvent vu comme un logiciel de retouche alors que Krita est présenté comme adapté à la peinture numérique… Quelle est ton opinion au sujet de ces deux logiciels et des outils de travail proposés ?

    Oui c'est une image de GIMP qui est selon moi totalement erronée. GIMP est très générique (le 'G' signifiait d'ailleurs "General" avant d'être renommé pour signifier "GNU" à la place) et est fait notamment pour de la retouche photographique en effet, aussi bien que pour de la composition d'image, et de la création d'image, c'est-à-dire dessin, peinture… Cf. la description officielle:

    GIMP is the GNU Image Manipulation Program. It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring.

    Bien sûr, d'autres logiciels ont décidé de se spécialiser dans le dessin numérique, comme Krita ou MyPaint, tous deux de très bons logiciels d'ailleurs. C'est un choix totalement valide, mais au final on voit que ces derniers se mettent à recouper des utilisations de retouche photo et autre, avec des filtres, etc. Comme quoi tout est lié dans l'image et vouloir être mono-utilisation seulement a peut-être ses limites ?

    Pour moi, aussi bien MyPaint, que Krita ou GIMP sont valables pour la peinture numérique. D'ailleurs je pense que les dessins d'Aryeom en sont la preuve, non ? Et elle n'est pas seule. Sur le web, on trouve de nombreuses perles, des dessins sous GIMP vraiment superbes techniquement. Maintenant c'est sûr que GIMP est 1000 fois moins fort en marketing que Krita, surtout ces dernières années où son mainteneur a décidé d'en vivre et fait donc très fort pour promouvoir ce dernier (ce qui lui a valu une bonne accélération, et c'est vraiment cool). Clairement GIMP a des progrès à faire du côté "marketing".
    Au final il est juste dommage que certaines personnes veuillent absolument reléguer GIMP à une partie seulement de ces capacités, et certains exprès, j'ai l'impression malheureusement. Des fois j'ai l'impression de voir les fans de Krita cracher sur GIMP et je ne comprends vraiment pas le but. Deux logiciels Libres ne peuvent-ils pas vivre en paix côte à côte?

    En conclusion: GIMP est un très bon logiciel de dessin/peinture numérique, qu'on se le dise!

    Je conclus donc avec l'affiche de notre film ci-dessous (que vous connaissez déjà ici) comme exemple, dessinée entièrement avec GIMP; désolé si vous vous dites que j'en fais trop! :p
    Affiche de ZeMarmot

    Quels distribution et environnement graphique utilises‐tu ?

    J'ai été longtemps utilisateur Mandrake, puis Mandriva, puis Mageia. J'ai abandonné Mageia car j'avais trop de petits problèmes (petits, mais à force, ça devient majeur) qui rendaient mon utilisation quotidienne de plus en plus désagréable et malheureusement mes rapports de bug n'étaient quasiment jamais traités et simplement fermés lors d'une montée de version (j'aurais pu chercher pour corriger moi-même mais comme je disais plus haut, il faut quand même estimer le temps qu'on y passera et la priorité. Or là, c'était beaucoup plus simple de passer sur une autre distribution, donc priorité basse. Désolé aux contributeurs de Mageia du coin !). Dernièrement j'ai surtout utilisé Linux Mint (depuis plus d'un an), et globalement cela se passe bien. C'est tout de même une distribution bien maintenue et ficelée. Je n'ai plus aucun des problèmes que j'avais sous Mageia notamment. Ensuite elle manque de trucs excitants à mon goût. Je voudrais au moins tester GNOME 3 (et sous Mint, installer GNOME 3 tient du parcours du combattant à priori), donc je suis en train de considérer le passage à Fedora pour la première fois. Aucune idée si j'y resterai.

    Sinon j'ai testé un peu Ubuntu à une époque, pas accroché du tout. Mon grand amour au niveau stabilité et fonctionnalité fut Gentoo. La seule raison pour laquelle je n'y reviens pas est le temps que cela prend à mettre en place, à compiler chaque paquet, à peaufiner les détails, etc. En même temps, c'est peut-être grâce à cela que c'est une si bonne distribution. Mais je n'ai plus le courage de passer des heures juste pour avoir mon environnement (même s'il est super). Maintenant je préfère que tout marche direct, même si c'est moins marrant et avec moins de fonctionnalités dernier cri.

    Environnement graphique : j'ai pas mal testé, du KDE, du GNOME (2), WindowMaker, ion3 pendant un bon moment aussi. Mon environnement graphique préféré fut Openbox, puis Openbox+Cairo-dock. Malheureusement là aussi je n'y suis pas resté à cause de détails ici ou là. C'est vraiment dommage, je pense que ce sont vraiment les détails qui changent tout dans l'utilisabilité d'une solution informatique.
    À l'heure actuelle, je suis sur le Cinnammon par défaut de ma Linux Mint. Je n'y ai pas grand chose à redire, mais je n'en suis pas non plus fou et n'aurai pas de regret à le quitter.

    Merci pour l’entretien et pour ta contribution à GIMP !

    Et merci à vous pour les questions ! :-)

    Lire les commentaires

  • Émissions "Symbiose" de l'APRIL sur "Ici et Maintenant" (Journaux LinuxFR)

    Salut,

    On va encore passer un peu dans l'émission Symbiose sur la radio "Ici et Maintenant", aujourd'hui de 14h à 15h30, cette fois-ci en direct.
    On va un peu parler de ZeMarmot et de là où en sont le financement et nos plans, mais aussi on va me poser quelques questions sur GIMP (en tant que dév), à ce que j'ai compris.
    Je sais pas trop si y aura d'autres invités cette fois, ou s'ils discuteront juste d'autres sujets entre animateurs.

    Je remets le lien qu'avait mis quelqu'un sur le sujet précédent et qui devrait permettre encore — je pense — d'écouter en direct sans avoir Flash installé: http://radio.rim952.fr:8000/stream.mp3

    Y aura aussi un podcast uploadé sur le site d'un des présentateurs (un administrateur de l'APRIL, Luc Fievet. Les autres présentateurs aussi sont de l'APRIL: Aéris et Manu) après coup, normalement. Je mettrai le lien en commentaires quand ce sera mis à jour.

    Lire les commentaires

  • PICOSCOPE : Oscilloscopes numériques sous Linux (Journaux LinuxFR)

    La société britannique Pico Technology produit des oscilloscopes numériques, data logger et autres accessoires de mesure. Dans leur catalogue d'entrée de gamme, on trouve quelques petits oscilloscopes alimentés par USB à des tarifs très abordables et aux performances suffisantes pour le passionné.

    Picoscope

    Ce qui les distingue de la concurrence est que cette société annonce le support de Linux pour leur produit. C'était d'ailleurs ce qui avait guidé mon choix il a quelques années de cela. Mais j'avais vite déchanté, car en guise de support je n'avais eu que les drivers et un fichier d’entête h !

    Leur logiciel de visualisation PicoScope n'était disponible que pour les plate-formes Windows et Mac OS. Certes, cela aurait pu être le début d'un projet de développement logiciel, mais c'est un peu contrariant pour un usage immédiat du produit.

    Je viens de refaire un tour sur le site et, ô surprise, sur la page des téléchargements pour Linux on trouve désormais un lien vers les versions Linux de PicoScope.

    Et on peut y lire :

    Demand for Linux applications is growing steadily in the networking and scientific communities. Linux offers powerful networking and internet facilities, is very robust and there are no licence fees.

    Certes ce n'est pas du logiciel libre et encore moins du matériel libre, mais c'est une bonne nouvelle pour la communauté.

    PicoScope pour Linux est distribué sous forme de dépot deb, zypper et yum. Le logiciel est encore en version en version Bêta, et j'ai pu constaté quelques régressions par rapport à la versions Windows. Gageons que tout n'a pas encore été porté. Mais l'essentiel y est. Vous pouvez vous faire une idée des fonctionnalités en installant le logiciel (gratuit) sur votre machine. Il simulera l'oscilloscope en son absence.

    Lire les commentaires

  • chaintools, outils unix avec syntaxe pythonique (Journaux LinuxFR)

    Ce qui suit est une traduction des points les plus important du README du projet que l'on peut retrouver sur https://github.com/xcombelle/chaintools. Vous pouvez jouer avec (attention, c'est en pre-0.1 donc la bibliothèque est susceptible d'évoluer

    Présentation

    Le but de cette bibliothèque est de créer des outils type unix avec une syntaxe pythonique. Le seul mécanisme disponible est le pipeline

    Un exemple d'utilisation

    chain(cat(),
          filter(lambda s: s and s[0] != '#'),
          map(float),
          sort(),
          head(n=10),
          output())

    Le secret d'utilisation est d'une part la fonction chain qui fait un pipeline de générateur et les générateurs qui sont créés par des usines à générateur (que j'appelle outil). Plusieurs outils sont disponibles. Il est facile de créer sont propre outil.

    Statut

    Cette bibliothèque est en pre-0.1. Il y aura donc probablement des changements.

    Pourquoi cette syntaxe

    J'ai l'espoir d'avoir tous le pouvoir des outils unix d'une manière pythonique

    Pourquoi tous les générateurs utilisent une notation de type fonction:

    • une notation uniforme: pas de question sur les quels ont besoin de parenthèse ou pas
    • les générateurs font quelque chose

    Je crois que les usine à générateur ont des caractéristiques correspondant aux outils unix comme les options (en utilisant les paramètre) les code d'erreur (en utilisant les exception). La seule partie manquante est la sortie d'erreur standard.

    La principale différence est qu'il n'y a pas un processus par outil (sauf quand on lance un programme externe):
    * Il n'y a pas de parallélisation native des outils
    * Il n'y a pas besoin de créer un processus pour chaque outil

    Un grand avantage des chaintools est que les type ne sont pas limités à des
    flux d'octet. Par exemple les outil join et split n'ont pas d'équivalent (à ma
    connaissance) parmi les outils unix.

    Qu'est-ce qu'on peut importer ?

    On peut importer

    from chaintools import (
        chain,
        grep,
        run,
        cat,
        output,
        split,
        sort,
        join,
        map,
        filter,
        head,
        tail,
        null,
    )

    attention, cet import remplace les builtins map et filter.

    Lire les commentaires

  • Appel à contributions pour le Paris Open Source Summit #OSSParis15 (Dépêches LinuxFR)

    Pour rappel, le Paris Open Source Summit est né de la fusion de deux grands événements bien connus des libristes que sont l'Open World Forum et Solutions Linux. Il se tiendra les 18 et 19 novembre prochains.

    Il y aura donc une grande partie exposition, dans laquelle nous retrouverons toutes les entreprises du secteur ainsi que le village des associations, mais aussi un grand cycle de conférences sur les deux jours. Et justement, l'équipe programme, dirigée cette année par Véronique Torner, vient de lancer son appel à contributions (ou CFP / Call for Paper) dont le thème cette année est Open for Innovation. Il est ouvert jusqu'au 17 juillet prochain.

    Détails sur l'appel à contribution Open for Innovation

    L’appel à contributions sera donc ouvert jusqu'au 17 juillet. Pour déposer une contribution, c'est sur le site dédié. Ceux qui ont l'habitude de Solutions Linux ne seront pas dépaysés.

    Pour information, le comité de programme privilégiera les contributions qui mettent en avant des expériences d'utilisateurs et les innovations dans les domaines comme l'usine du futur, l'Internet des objets, l'eSanté, les transports, les collectivités locales, les systèmes d'information d'entreprise, la gestion de l'énergie et de l'environnement, l'agriculture, les médias et l'éducation.

    Déclinaison de l'événement en 3 itinéraires

    Cette édition proposera 3 itinéraires sous forme de conférences et de stands afin de s’Informer (Learn), découvrir (Discover), évaluer (Evaluate) et adopter (Adopt) les solutions, les tendances de fond et les révolutions proposées par les Logiciels Libres et Open Source et toute l’économie du monde Ouvert (l’Open Data, l’Open Innovation…) :

    • L’itinéraire Tech présentera les solutions du marché sous un angle technique : présentation des concepts, des produits, des technologies et des outils. Il s’adresse aux équipes techniques (directeur technique, architecte, expert, chef de projet, développeur ou exploitant…). Les intervenants sont les entreprises (offreurs ou sociétés utilisatrices), les communautés et les écoles ;
    • L’itinéraire Enterprise présentera les apports des Logiciels Libres et Open Source, sous un angle non technique. Il s’adresse aux décideurs du secteur privé ou public quelle que soit la taille ou le secteur d’activité. Les intervenants sont principalement les entreprises (offreurs ou sociétés utilisatrices), les associations et les syndicats professionnels.
    • L’itinéraire Society présentera les bénéfices et innovations non directement économiques. Il offre une tribune aux politiques, actions et pratiques (disruptives ou culturelles) représentatives de cette société ouverte et innovante (Open Data, Open Innovation, Privacy, Interoperability, Decentralization, Ethics). Les intervenants sont les politiques, les associations et les entreprises (offreurs ou sociétés utilisatrices).

    Le comité de programme

    Le comité de programme est présidé pour sa première édition par une des trop rares femmes (qui plus entrepreneur) du milieu du Libre, Véronique Torner, co-présidente d'Alter Way, qui sera entourée d’une équipe de cinq vice-présidents :

    • Pierre Baudracco, VP Tech, président de la société Bluemind ;
    • Gregory Bécue, VP Enterprise, directeur associé et membre du comité exécutif de la société Smile ;
    • Noël Cavaliere, VP User, Expert et responsable IT Technical Architecture and Data Management de PSA ;
    • Benjamin Jean, VP Society, président de la société inno3 ;
    • Cédric Thomas, VP International, directeur général d’OW2.

    Format des contributions

    Les contributions sont attendues sous 4 formats :

    • Learn : conférences sur l'état de l'art
    • Discover : ateliers pratiques
    • Evaluate : tables rondes
    • Adopt : retours d'expériences

    Et le village associatif ?

    Beaucoup d'entre-vous posent la question du village associatif. Oui, il sera bien présent et une place lui est d'ores et déjà réservée (ainsi qu'à Pinpin, à condition qu'il y rentre et en reparte sur ses 2 pieds).

    L'appel à stand se fera tout début septembre. Nous ferons aussi une place aux associations internationales. Cependant, il ne sera pas forcément plus grand que les autres années. Sachez que plus il y a d'entreprises exposantes, plus le village pourra prendre de l'ampleur. Si votre association est liée à (ou sponsorisée par) une ou plusieurs entreprises, incitez-les à venir exposer et/ou être sponsor. Pareil si vous travaillez dans une entreprise qui a un lien avec le Libre ! C'est le meilleur moyen de pérenniser l'événement et son sympathique village.

    Lire les commentaires

  • parlons XMPP - épisode 2 - le cœur et les extensions (Journaux LinuxFR)

    Maintenant qu'on sait de quoi on parle, voyons à quoi ressemble le cœur du protocole.

    À la base XMPP c'est 3 (anciennement 2) RFCs: la 6120, la 6121, et la 6122 (il y en a d'autres, mais ces 3 là sont les principales). Elles expliquent tout le cœur comme l'envoi de messages, les informations de présence, les statuts, etc.

    Sans trop entrer dans les détails qui vont concerner surtout les développeurs, on peut rapidement expliquer que XMPP se base sur 3 types d'éléments, ou « stanzas »:

    • <presence/> pour indiquer principalement… notre information de présence (parfois on y accroche aussi d'autres choses comme des infos sur notre avatar ou nos capacités, mais ne nous égarons pas). La présence est relayée par votre serveur à toutes les personnes à qui vous avez donné l'accès (voir plus bas).
      On peut associer un état et un message à notre présence. L'état peut être un des suivants (les noms peuvent changer selon votre client):

      • disponible (par défaut): vous êtes en ligne normalement
      • away (absent): vous êtes absent pour une courte période
      • chat (discussion): vous avez particulièrement envie de parler
      • dnd (do not disturb – ne pas déranger): vous êtes occupé (souvent appelé « busy » aussi dans les clients)
      • xa (eXtended Away – durablement absent): vous êtes absent pour une longue période

    Le message de statut permet spécifier en langage clair votre disponibilité (par exemple « je regarde un film, ne pas déranger »), même si en pratique c'est utilisé pour tout type de message (beaucoup de gens mettent une citation par exemple).

    • <message/> un envoi de message de type j'envoie et j'oublie. Il existe 5 types de messages :

      • chat (discussion): le plus connu, celui qui sert à la messagerie instantanée simple
      • error (erreur): celui-là est normalement géré par les logiciels directement, il se traduit souvent par une fenêtre vous indiquant dans votre client que quelque chose s'est mal passé
      • groupchat (discussion de groupe): comme « chat », mais pour les discussions à plusieurs. En pratique la différence ne concerne que les développeurs et cela devrait être transparent dans le client
      • headline (manchette): un message important, une annonce. Normalement, ces messages ne sont pas gardés hors ligne, aussi si vous n'êtes pas connecté au moment du message, vous ne devriez pas l'avoir. Ces messages ne sont pas faits pour y répondre. Un exemple typique est une annonce de maintenance du serveur imminente
      • normal : un type méconnu et pourtant intéressant. Il s'agit d'un message ayant généralement un sujet, et en dehors d'une conversation instantanée. Oui oui, exactement comme un courriel ! C'est plus ou moins son équivalent XMPP.

      À cela s'ajoute la gestion des « thread » (fils de discussion), mais nous en parlerons une autre fois.

    • <IQ/> (Info/Query – information/requête): utilisé pour tout ce qui est de type question/réponse (il est obligatoire de répondre à une requête , au pire par une erreur). Son utilisation concerne plutôt les développeurs, c'est la base de la plupart des fonctionnalités que vous utilisez : cet élément sert à dire « je veux connaître ou modifier telle information »

    Je ne veux pas trop entrer dans les détails techniques, mais il me semble essentiel de connaître les différents types de messages et de présences pour bien comprendre son client.

    À noter un point excellent avec XMPP, et largement sous exploité : XMPP sait nativement gérer les différentes langues, grâce à son héritage de XML (xml:lang). Autrement dit, vous pouvez spécifier un message normal ou de statut à la fois en français, en allemand et en slovaque. C'est un atout majeur que nous comptons bien exploiter dans Libervia.

    Passons maintenant à une autre partie essentielle : la liste de contacts.

    Dans le monde XMPP, on l'appelle « roster » (qui se traduit par « liste » ou « tableau de service »). À chaque contact que vous y ajoutez, vous pouvez associer 0, 1 ou plusieurs groupes (« famille », « amis », etc), un nom (donné par l'utilisateur et non le contact), ainsi qu'une information d'abonnement (« subscription »).

    L'abonnement permet de savoir si vous avez autorisé votre contact à avoir votre information de présence, et si le contact vous a autorisé à voir la sienne. C'est pour cela que quand quelqu'un vous ajoute dans sa liste de contacts, votre client, par exemple Gajim, vous demande si vous l'autorisez à connaître votre information de présence. Il est tout à fait possible d'avoir autorisé un contact à vous voir sans qu'il ne vous autorise à le voir (et inversement évidemment), voir qu'aucun des deux ne soit autorisé à voir la présence de l'autre (mais je pense que la plupart des clients suppriment le contact du roster dans ce cas).

    Les groupes sont associés aux contacts, et non l'inverse (ce n'est pas une liste de groupes qui contiennent des contacts), c'est la raison pour laquelle il est impossible d'avoir un groupe sans contact associé (c.-à-d. vide).Là encore les groupes sont à mon sens sous-exploités dans le monde XMPP, nous y reviendrons.

    Voilà pour aujourd'hui. J'ai finalement préféré couper la partie extensions pour le prochain article, pour éviter de trop charger.

    Lire les commentaires

  • Hackathon en ligne CodinGame les 27 et 28 juin 2015 (Dépêches LinuxFR)

    Visuel

    CodinGame organise un Hackathon en ligne "Code of The Rings" qui aura lieu du samedi 27 juin 2015 à 18h (heure de Paris) au dimanche 28 juin (18h).

    Gratuite et ouverte aux développeurs du monde entier, la compétition se déroulera sur 24 heures.

    Objectif : coder une solution à un problème donné et optimiser son programme le plus possible pour grimper dans le classement. Dans l'intervalle, il sera possible de jouer et soumettre son code autant que souhaité (pas de limitations, pas d'obligations).

    Les participants pourront tenter de décrocher les lots offerts aux meilleurs du classement, et candidater pour des emplois ou des stages auprès des sociétés sponsors de l'évènement.

    Les modalités de participation sont les suivantes :

    • Participation en ligne et gratuite
    • 23 langages de programmation disponibles (C/C++, C#, Java, Javascript, PHP, Python, Python 3, Perl, Go, Dart, Scala, Haskell, Objective-C, Pascal, Ruby, Bash, Groovy, Clojure, VB.NET, Lua, OCaml, F#)
    • Possibilité d'utiliser l'IDE en ligne de la plate-forme ou de coder dans son environnement de code favori
    • Prix à gagner pour le Top 10 du classement et pour les premiers dans chacun des 23 langages
    • 10+ sponsors proposant des postes en CDI

    Lire les commentaires

  • Parlons XMPP - épisode 1 - les bases (Journaux LinuxFR)

    Salut à Vous,

    Bon, comme je trouve vraiment dommage que XMPP soit mal connu ou compris, j'ai décidé de commencer une série d'articles pour vous expliquer ce que c'est.

    Ces articles sont destinés à un public averti, mais pas forcément de développeurs, et j'espère qu'il vous aidera à comprendre les intérêts de ce protocole et à mieux utiliser vos logiciels.

    Étant développeur du projet Salut à Toi, je donnerai probablement souvent des exemples avec.

    Donc commençons par les bases.

    XMPP c'est quoi ? C'est un protocole de messagerie et de présence standard, et extensible (XMPP signifie « eXtensible Message and Presence Protocol », soit « protocole de présence et messagerie extensible »), c'est à dire qu'il est documenté et utilisé comme une référence (ici validée par un organisme de standardisation : l'IETF). Ceci permet à tous les logiciels qui l'utilisent de parler la même langue, et d'être interopérables. Il s'agit d'un protocole libre, c'est à dire que vous pouvez obtenir la documentation et l'utiliser gratuitement, sans restriction légale ou technique, et que vous pouvez l'améliorer ou le modifier (mais si vous déviez et que vous ne proposez pas vos modifications, vous risquez de perdre la compatibilité avec les autres logiciels).

    XMPP est décentralisé et fédéré, c'est à dire que vous pouvez avoir des serveurs un peu partout, ils pourront (s'ils ne l'interdisent pas explicitement dans leur configuration) communiquer entre eux.

    C'est un protocole populaire, de nombreux logiciels permettent de l'utiliser : en serveurs on peut citer Prosody, Ejabberd, Openfire, Tigase, MongooseIm, Metronome, etc. En client: Gajim, Poezio, Pidgin, Psi, Swift, Jappix, Movim, et bien sûr Libervia/Salut à Toi (je vous laisse chercher les sites officiels vous-même). Une liste plus complète (serveurs, clients et bibliothèques) est disponible ici: https://xmpp.org/xmpp-software/ .

    Si vous ne voulez pas installer un serveur chez vous, de nombreux serveurs publics sont disponibles: en France on peut citer ceux de l'APINC (jabber.fr, im.apinc.org, etc), de La quadrature de Net, etc. Une petite liste (la page n'est pas à jour, n'hésitez pas à contribuer !) est disponible ici en français, sinon vous pouvez regarder sur https://xmpp.net/directory.php ou http://www.jabberes.org/servers/ (oui il y en a beaucoup !). Mais je vous recommande très fortement d'installer votre propre serveur ou de vous approcher d'une association locale avec qui vous pouvez communiquer facilement : d'une part si vous installez vous-même, ça vous permet de mieux maîtriser vos données, et d'autre part si vous voulez une fonctionnalité en particulier, il vaut mieux pouvoir demander facilement aux administrateurs une mise à jour.

    Bon maintenant qu'on sait tout ça, essayons de créer un compte.

    Une fois un serveur installé ou un serveur public choisi, vous pouvez créer un compte. Vous aurez alors une adresse, un « jid » (pour Jabber ID, « Jabber » est l'ancien nom du protocole, ce nom appartient désormais à une société privée, il est juste gardé ici pour des raisons historiques).

    Cette adresse est de la forme nom_local@domaine.tld/ressource, ou en forme canonique (ce qu'on appelle le « bare jid ») nom_local@domaine.ext. Par exemple la mienne est goffi@jabber.fr . Cela ne vous rappelle rien ? Et oui ça ressemble beaucoup aux adresses de courrier électronique !

    Mais alors c'est quoi la ressource ? La ressource est liée au logiciel client que vous utilisez pour vous connecter : XMPP a été pensé dès l'origine pour permettre à plusieurs clients de se connecter en même temps (il y a 10 ans, peu de protocoles de messagerie le permettaient, et se reconnecter ailleurs signifiait souvent la déconnexion du premier client), et cette ressource permet de les identifier. Autrement dit, vous n'avez une ressource que quand vous êtes connectés, et elle est différente pour chaque client que vous utilisez : si je me connecte avec Libervia, Gajim et Movim, j'aurais 3 ressources différentes.

    Il y a eu plusieurs écoles pour nommer la ressource, parfois on s'en servait pour indiquer le lieu de connexion (« maison », « bureau »), les clients mettaient souvent leur nom par défaut (« gajim », « psi »). Aujourd'hui, il est admis qu'il vaut mieux avoir une ressource non prédictible, car sinon quelqu'un peut savoir si vous êtes connectés ou pas (même si vous ne souhaitez pas que ça se sache) en faisant une requête à cette ressource. Il vaut donc mieux laisser le serveur choisir la ressource pour nous.

    Enfin, votre ressource est associée à une priorité: elle permet de déterminer, si plusieurs ressources sont connectées, laquelle va recevoir le message. Mais nous y reviendrons plus tard.

    Dans le prochain épisode je vous parlerai des extensions et de la découverte de fonctionnalités.

    Voilà, dites-moi si vous êtes intéressés par cette série, si cela vous semble trop technique, ou si vous avez des remarques ou des corrections à faire. Je ne sais pas encore si je vais tout publier sur DLFP ou sur mon blog, je pense a priori faire sur les 2 en même temps.

    Lire les commentaires

  • Nous les intellectuels autoproclamés du numérique (Journaux LinuxFR)

    Hello.

    Le président de Afdel (Association française des éditeurs de logiciels) ainsi que celui du Syntec numérique ont réagit aux nouvelles recommandation du Conseil National du Numérique.

    Le CNN a remis que Premier Ministre un rapport dans lequel le CNN préconise d’utiliser « le levier de la commande publique pour mettre en avant des exigences d’interopérabilité, de standards ouverts et d’accès au code source »
    Et également de « renforcer le droit pour les développeurs d’effectuer la rétro-ingénierie d’un logiciel existant afin de pouvoir créer un logiciel capable de s’interopérer, et prévenir plus efficacement les abus de position dominante liés au secret des formats de données et des protocoles d’échange d’informations »

    Et la, outrage, hérésie, viol en réunion, ketchup sur les tagliatelles !

    Les présidents de l'Afdel et du Syntec numérique réagissent vivement, prophétisant des pluies de grenouilles acides en cas d'adoption des préconisions du rapport du CNN.

    Et le président de l'Afdel de s'étonner également que lors de la consultation lancée par le CNN, de "simple citoyens" et des "intellectuels autoproclamés du numériques" aient eu autant de pouvoir que des "professionnels travaillant depuis 10 ans sur ces sujets".

    Du lourd !
    Open Source dans l'administration, le CNN rallume l'incendie

    Hop…comme ça vous savez et ils savent que nous savons qu'ils ne savent pas de quoi ils parlent.
    Merci à Silicon.fr.

    Lire les commentaires

  • Repas du Libre le 9 juillet 2015 aux RMLL de Beauvais (Dépêches LinuxFR)

    Lors de chaque édition des RMLL un « repas du Libre » est organisé. L'édition de Beauvais respectera la tradition et est heureuse de pouvoir vous le proposer dans une salle prestigieuse.

    Ce repas, moment convivial, festif et communautaire, se tiendra le jeudi 09 juillet au soir, dans la salle des mariages de la Mairie de Beauvais. Et bien que nous n'irons pas décrocher les magnifiques tapisseries historiques d'autres salles pour décorer celle-ci, vous ne regretterez pas ce cadre particulier, ni le menu proposé par un traiteur de qualité, au tarif doux de 20€.

    Il vaut mieux réserver ! Pour cela, rendez vous sur la page adéquate. Entrez vos dates de séjour, l'interface vous proposera les choix possibles pour vos dates (hébergement et restauration ) Sélectionnez alors « Le Repas du Libre ».

    Le menu est en seconde partie…

    Le menu sera préparé par une entreprise d'insertion qui respecte les circuits courts, le traiteur Seson, et sera composé de :

    • entrées, assortiment de flamiques :
      • aux tomates fraîches au basilic et chèvre ;
      • à la tomme au foin et lardons ;
      • à la truite fumée et cresson du Valois ;
    • plat principal :
      • vannerie de charcuterie (jambon persillé, pâté en croûte picard, terrine de lapin, rôti de porc, rillettes) ;
      • assortiment de poissons fumés aux salicornes (truite, hareng, anguille) ;
    • accompagnements :
      • salade picarde au cresson (cresson, frisée, chicons, croûtons, lardons grillés, œufs durs, cerneaux de noix et petits dés de betterave) ;
      • rémoulade de céleri, pomme granny et chou rouge aux noisettes ;
      • salade de pommes de terre aux harengs, sauce à l’aneth ;
    • plateau de fromages de Picardie :
      • Bray picard, Fleur de Picardie, Maroilles de Thiérache, Rollot, Tomme picarde au foin, fromage de chèvre frais ou sec en fonction de la saison ;
    • desserts :
      • assortiment de 3 tartes de saison au choix : aux pommes et noix, au fromage frais à la menthe, aux fruits de saison.

    Lire les commentaires

  • Le réseau Tor a besoin de vous ! (Journaux LinuxFR)

    L'association "Nos oignons" lance un appel aux dons pour continuer son soutien au réseau Tor.
    Il s'agit d'une association loi 1901 à but non lucratif, créée il y a deux ans dans le but de faire fonctionner des noeuds de sortie rapides en France. Actuellement les trois noeuds de sortie mis en place représentent environ 2% des connexions totales du réseau.

    Afin de continuer à payer pour ces machines, et peut-être à augmenter le nombre de relais, l'association lance un appel aux dons.

    Inutile de vous informer du contexte législatif français et des menaces que cela représente pour votre anonymat et votre vie privée en ligne. Dans l'attente d'un retournement d'opinion à l'assemblée (on peut toujours rêver) l'un des bons moyens de combattre cette insanité est d'aider à la bonne marche de Tor.
    Faire un don à l'association "Nos oignons" est un moyen facile et rapide pour concrétiser cette aide. Donc n'hésitez pas et donnez !

    Rappel : même les grands débutants peuvent facilement protéger leur vie privée en utilisant Tor. Il suffit de télécharger Tor Browser (une version de Firefox customisée) et hop ça roule !

    Lire les commentaires

  • Atelier FreeCAD Interactif (Journaux LinuxFR)

    Formation FreeCAD Interactive

    Depuis quelques mois je propose régulièrement des formations web pour FreeCAD. Il s'agit d'un cours proposer en direct via visio conférence qui dure entre 30 et 60 minutes.

    La prochaine session est programmée le Samedi 27 Juin 2015 à 14h.

    Cette fois, il n'y a pas vraiment de thème. Il s'agit plutôt d'un TP (tavail pratique) que l'on réalisera ensemble. L'objet à modéliser est un pot à crayon, il sera modélisé de manière paramétrique, ainsi chacun pourra modifier les paramètre à sa convenance pour réaliser le pot de ses rêves.
    Pot a crayon
    Ce TP est très facile d'accès, il ne nécessite même aucune connaissance de FreeCAD ou de la CAO 3D. Assurez vous juste d'avoir installer la version 0.15.4671 de FreeCAD.

    La formation est libre d'accès et gratuite. J'incite tout de même les participants à me soutenir financièrement via la plateforme Tipeee Tipeee. En contrepartie je m'engage à monter la vidéo et la mettre en ligne afin de la rendre accessible à tous.

    De plus j'ai mis en place un bonus, si le montant de 50€ est dépassé, j'aborde un sujet supplémentaire et souvent complémentaire. Ici il s'agit d'affiner son export de type maillage en vue de l'imprimer en 3D.

    Le cours se passe sur la plateforme Meet de Jitsi à cette adresse :
    https://meet.jit.si
    Pour savoir de quoi vous avez besoin comme matériel, navigateur etc…Lisez cet article : http://www.freecad-france.com/post/formations-freecad-videoconference-meet-jitsi

    Si vous souhaitez découvrir FreeCAD de façon simple et ludique, c'est le moment.

    A bientôt

    Lire les commentaires

  • Scan de fichiers automatique (Journaux LinuxFR)

    Sommaire

    Bonjour Nal!

    Cette semaine j'ai fait la bêtise d'exécuter un .jar en root sans l'avoir scanné auparavant… et voilà que j'ai lancé dans ma Debian un logiciel qui m'affiche de la pub et qui en plus paraît suspicieux pour clamav (pour Windows, heureusement…):

    /home/adrien/Téléchargements/JOdin3CASUAL-r1035-dist.jar: Win.Worm.Chir-1370 FOUND

    Je me suis donc dit que je ne me ferais plus avoir et que je scannerai dès aujourd'hui tous les fichiers provenant d'Internet (oui, parfois je fais des téléchargements par FTP ou P2P…).

    Une première étape est de pouvoir scanner tout ce qui provient de Firefox^W Iceweasel (comme c'est un client HTTP et FTP, c'est de lui que proviennent la plupart de mes fichiers).

    ClamAV pour Firefox: Fireclam

    Très vite dans ma recherche je suis tombé sur l'extension qu'il me fallait: Fireclam. Elle permet en effet de scanner tous les fichiers téléchargés depuis Iceweasel.
    Cette solution ne suffira évidemment pas, puisque parfois j'utilise Gnome Web^W^W Epiphany (le browser, pas le Double Dash like :)) ou Chromium.

    Bien que ça pouvait convenir dans un premier temps, cette solution a malheureusement un gros désavantage: scanner un fichier n'est pas rapide et Iceweasel est principalement mono processus, alors le navigateur reste figé pendant quelques instants et ça se ressent très vite.

    En attendant que le projet Electrolysis avance et en croisant les doigts pour que cette partie soit aussi dans un processus séparé du principal, il me fallait trouver une autre solution.

    Système de fichier ClamAV: ClamFS

    Une deuxième solution est apparue durant ma quête: le projet ClamFS propose de scanner automatiquement les fichiers accédés depuis un répertoire monté avec ce logiciel.

    Ce logiciel fonctionne bien et a en plus la bonne idée de garder un cache des fichiers déjà scannés, ce qui permet de ne scanner le fichier qu'une fois, même si l'accès se fait dix fois.

    Un premier soucis est que le message d'erreur lors de l'ouverture d'un fichier infecté est un message du style "Permission non accordée" ce qui fait d'abord penser à un fichier sans accès de lecture plutôt qu'un fichier malveillant. Ce problème est lié à FUSE et n'est pas trop dérangeant pour moi, il faut juste s'y habituer.

    Par contre un point plus dérangeant est qu'il n'est pas possible de monter le dossier ~/Téléchargements sur ~/Téléchargements. Bien que l'on puisse faire pointer le téléchargement des navigateurs sur un dossier caché comme ~/.downloads et laisser ClamFS créer le dossier ~/Téléchargements (ou celui définit dans votre fichier ~/.config/user-dirs.dirs), il reste le problème que si l'on accède au fichier depuis le navigateur, aucun scanne ne sera effectué, puisque le navigateur accédera par ~/.downloads au lieu de ~/Téléchargements.

    Malgré ces deux désavantages, je pense garder cette solution pour l'installer sur mon serveur (typiquement pour le dossier /opt), car le code FUSE est bien écrit et claire (disponible par SVN chez SourceForge et, vu les déboirs récent de SourceForge, cloné en GIT chez moi).

    En plus, un contributeur a proposé de faire les scans lors de l'écriture des fichiers (au lieu de l'ouverture): c'est donc implémentable et l'auteur de ClamFS n'y semble pas opposé bien que la proposition dorme depuis quelques temps.

    Pour moi, le top serait de pouvoir faire ceci lorsqu'un fichier est écrit :

    1. lancer le scan du fichier
    2. s'il est bon, le laisser ainsi (pas besoin de cache ici, il y a peu de chance que l'on écrive plusieurs fois le même fichier [excepté lors d'un renommage])
    3. s'il est mauvais:
      • le renommer en fichier.extension.VIRUS
      • créer un fichier avec le nom original (donc fichier.extension) et y placer le rapport de ClamAV.

    Pour éviter de scanner une deuxième fois le fichier renommé et de scanner le fichier de rapport crée, il faut faire les deux dernières étapes dans le dossier source du montage.

    Cette solution permettrait de résoudre mes problèmes avec les navigateurs: je peux ouvrir le fichier depuis le navigateur et lorsqu'il est infecté, je me retrouve avec un texte m'expliquant quel type de virus a été détecté (en plus, si je pense que c'est un faux positif, je peux toujours retrouver le fichier original facilement).

    À long terme, je pense faire cette proposition au développeur de ClamFS et peut-être même tenter moi-même une implémentation.

    inotify à travers systemd.path

    En essayant ClamFS, je me suis souvenu que tu m'avais déjà parlé d'inotify et que tes commentaires proposait même d'utiliser systemd pour automatiser le lancement de services suite aux changements de fichier.

    J'ai essayé, ça marche. Ma solution fait un peu bricolage, mais à l'avantage d'être extensible (entendre, il est facile de surveiller plusieurs dossiers en même temps).

    Elle se compose de 4 fichiers systemd utilisateur (donc à placer dans ~/.local/share/systemd/user):

    • filestoscan.path
    [Unit]
    Description=Exécute ClamAV lors d'écriture dans le fichier ~/.files.toscan
    
    [Path]
    PathChanged=/home/adrien/.files.toscan
    Unit=clamscan.service
    
    • clamscan.service
    [Unit]
    Description=Scanne les fichiers listés dans ~/.files.toscan
    Require=clamd.socket
    
    [Service]
    ExecStart=/bin/sh -c 'mkdir -p /tmp/virus && \
    if [ -e /home/adrien/.files.toscan ]; \
    then clamscan -l /tmp/virus/clamscan.log -i -o -z -f /home/adrien/.files.toscan --move=/tmp/virus/ \
    && rm /home/adrien/.files.toscan ;\
    fi'
    
    • downloads.path
    [Unit]
    Description=Controle les modifications de ~/Téléchargements
    
    [Path]
    PathChanged=/home/adrien/Téléchargements
    Unit=listDownloads.service
    
    • listDownloads.service
    [Unit]
    Description=Créer une liste de fichier à scanner
    
    [Service]
    ExecStart=/bin/sh -c "ls -t1d /home/adrien/Téléchargements/* | head >> /home/adrien/.files.toscan"
    

    Ensuite il faut activer les unités .path avec:

    systemctl --user start downloads.path filestoscan.path
    

    Il faut penser à l'ajouter dans ~/.xsessionrc pour que tout soit en route lors du démarrage de ta session.

    Ça fonctionne ainsi:

    1. Firefox écrit un fichier dans ~/Téléchargements
    2. downloads.path voit l'écriture du fichier et exécute listDownloads.service
    3. listDownloads.service écrit la liste des 10 derniers fichiers téléchargés dans ~/.files.toscan
    4. filestoscan.path remarque que ce fichier est rempli et exécute clamscan.service
    5. clamscan.service scanne les fichiers listés dans ~/.files.toscan

    Cette solution est un peu alambiquée, mais elle me permet d'ajouter facilement de nouveaux répertoires à vérifier (p.ex. le ~/.cache) sans devoir recréer le code de clamscan.service.

    Le top serait que systemd.path puisse passer en paramètre quels fichiers ont été écrit dans ~/Téléchargements, mais man n'est pas très bavard à ce sujet et le web non plus… Ça m'éviterait de prendre arbitrairement les 10 derniers fichiers écrits dans le dossier ~/Téléchargements.

    Conclusion

    Je ne sais pas ce que la solution de systemd va donner sur le long terme, mais je l'aime bien, parce que les fichiers de configuration de systemd sont assez claire pour moi.

    J'ai déjà remarqué quelques points à améliorer dans mes services: parfois Firefox crée des fichiers .part durant le téléchargement, il faudrait les exclure. À cause de ça, il m'est arrivé d'avoir des doublons dans le fichier ~/.files.toscan (ça ne perturbe pas trop clamscan, il y a juste quelques warnings écrits dans le log, mais rien de grave). D'ailleurs il faudrait idéalement éviter de créer des doublons dans le fichier ~/.files.toscan .

    Et toi Nal ? Comment fais-tu avec les dossiers téléchargés ?
    Est-ce que tu ne télécharges que les iso de ta distribution préférée, vérifie la somme sha1 et coupe la connexion internet jusqu'à la prochaine mise à jour ? Est-ce que tu refuses toute exécution de fichier dans ton /home ? Est-ce que tu as une solution beaucoup plus simple que je n'ai pas vu ?

    Lire les commentaires

  • Revue de presse de l'April pour la semaine 25 de l'année 2015 (Dépêches LinuxFR)

    La revue de presse de l'April est régulièrement éditée par les membres de l'association. Elle couvre l'actualité de la presse en ligne, liée au logiciel libre. Il s'agit donc d'une sélection d'articles de presse et non de prises de position de l'association de promotion et de défense du logiciel libre.

    Sommaire

    [ZDNet France] Descente dans les forges des "makers"

    Par Frédéric Charles, le samedi 20 juin 2015. Extrait:

    Cette semaine GreenSI a visité un des lieux des "makers", Usine IO, une forge de l'ère numérique, où on réinvente la fabrication.

    Lien vers l'article original: http://www.zdnet.fr/actualites/descente-dans-les-forges-des-makers-39821154.htm

    [Silicon.fr] Open Source et administration: le CCNum rallume l’incendie

    Par Reynald Fléchaux, le vendredi 19 juin 2015. Extrait:

    Dans son rapport Ambition Numérique, le Conseil national du numérique préconise de donner la priorité au logiciel libre dans l’administration. Syntec Numérique et Afdel sont vent debout contre une proposition qui, à leurs yeux, sent un peu la naphtaline.

    Lien vers l'article original: http://www.silicon.fr/open-source-administration-ccnum-rallume-incendie-119578.html

    [madmoiZelle] «Faut-il apprendre à coder aux enfants?», une conférence pertinente sur une problématique d’actualité

    Par Sarah Bocelli, le jeudi 18 juin 2015. Extrait:

    À l’occasion de la sortie de Scratch pour les Kids, un manuel d’initiation informatique, les éditions Eyrolles et Mozilla ont organisé une conférence autour d’un thème d’actualité: faut-il apprendre à coder aux enfants?

    Lien vers l'article original: http://www.madmoizelle.com/apprendre-coder-enfants-conference-382905

    [UP] Ordis partagés, ordis libérés!

    Par Jeanne La Prairie, le jeudi 18 juin 2015. Extrait:

    Les logiciels libres, gratuits, créés par des communautés de chercheurs et de passionnés, permettent à certains d'accéder à l'informatique. Rencontre avec les geeks activistes qui luttent contre le gâchis et la précarité numérique en redonnant vie aux vieilles machines.

    Lien vers l'article original: http://www.up-inspirer.fr/magazine/150618401-ordis-partages-ordis-liberes

    [Contrepoints] Le mouvement du logiciel libre: sentinelle des libertés en ligne

    Par Farid Gueham, le mercredi 17 juin 2015. Extrait:

    «Il faut alerter vos sénateurs contre le flicage généralisé!» Richard Stallman

    Lien vers l'article original: http://www.contrepoints.org/2015/06/17/211181-le-mouvement-du-logiciel-libre-sentinelle-des-libertes-en-ligne

    [L'OBS] Axelle ma sœur Axelle, ou la lente gestation de la loi sur le numérique

    Par Andréa Fradin et Rémi Noyon, le mercredi 17 juin 2015. Extrait:

    Manuel Valls présente ce jeudi la «stratégie numérique» de la France. L’un des aspects devrait être la loi Lemaire. Cela fait des mois qu’on l’attend. Why darling?

    Lien vers l'article original: http://rue89.nouvelobs.com/2015/06/17/axelle-soeur-axelle-lente-gestation-loi-numerique-259787

    Et aussi:

    [ITespresso] Futur en Seine 2015: carrefour du crowdfunding et des monnaies virtuelles

    Par Clément Bohic, le mercredi 17 juin 2015. Extrait:

    Quels sont les marqueurs de Futur en Seine 2015? Finance 2.0, robotique, impression 3D, crypto-monnaies, objets connectés…Petite visite sur place.

    Lien vers l'article original: http://www.itespresso.fr/futur-en-seine-2015-carrefour-crowdfunding-monnaies-virtuelles-98958.html

    Lire les commentaires

  • Atelier CLI : CryptoParty mardi 23 juin ⌚ 20h ⌘ Bègles (~Bordeaux) (Dépêches LinuxFR)

    Les Crypto-Party (ou chiffro-fêtes) consistent en l'organisation d'ateliers gratuits à destination de tous, pour découvrir, comprendre et utiliser les principes de base de la cryptographie et de la protection de sa vie privée sur les réseaux (web, chat, email).

    Programme

    Mardi 23 juin, c'est cryptoparty toute la soirée / nuit au L@Bx. Entrée libre et gratuite. Amenez à manger, à boire et sac de couchage pour les plus courageux.

    Tous les détails en seconde partie.

    Quelques idées d'ateliers :

    • Créations / échanges de clés GPG ;
    • Gérer et protéger ses mots de passe avec Keepass/KeepassX ;
    • Chiffrement de disque dur avec LVM+LUKS, encfs, etc. ;
    • Mise en place d'un serveur de courriel OpenSMTPd ;
    • Traduction du handbook cryptoparty en se basant sur le travail du Tetalab ;

    Infos pratiques

    Pour rappel, le L@Bx est un Hackerspace à Bègles (Bordeaux Métropole). Il ouvre ses portes tous les mardis et vendredis soir.

    Lire les commentaires

Ce qui nous empêche souvent de nous abandonner
à un seul vice est que nous en avons plusieurs.
-+- François de La Rochefoucauld (1613-1680), Maximes 195 -+-