Syndiquer le contenu
Mis à jour : il y a 19 semaines 1 jour

Le Translathon 2014, session de traduction de GNOME à Paris

11 mars, 2014 - 22:43

Dix jours avant la sortie de GNOME 3.12, l'équipe de traduction francophone de GNOME se retrouve le temps d'un week-end (15/16 mars) pour en assurer la meilleure des traductions. Cela se passe à Paris et c'est l'occasion pour toute personne intéressée de venir découvrir le travail d'internationalisation et de localisation, ainsi que les outils utilisés, et de prêter main-forte à cette importante œuvre.

Contexte
  • Quand ? Le week-end du 15 et 16 mars 2014
  • Qui ? Ouvert à tout le monde, aucune connaissance préalable requise.
  • Où ? Les bureaux de Mozilla, à Paris
Objectifs

Assurer la traduction de l'interface et de la documentation de GNOME 3.12, traduire de nouvelles applications, commencer à traduire les notes de publication, réduire la liste de relectures en attente, corriger des bugs de localisation et d'internationalisation, montrer aux nouveaux venus comment tout cela fonctionne et documenter cela par la même occasion.

Comment participer

Il suffit de venir frapper à la porte, à partir de 10h (et pas après 18h), c'est au 16b boulevard Montmartre et nos amis de Mozilla fournissent les instructions pour y arriver.

Vous pouvez également vous inscrire sur la page correspondante du wiki de GNOME, ça aidera un tout petit peu l'organisation.

Télécharger ce contenu au format Epub

Lire les commentaires

Nouveau site communautaire de la forge libre Tuleap

11 mars, 2014 - 18:10

Tuleap est une forge logicielle libre publiée sous licence GPL, proposée par la société Enalean.
Depuis une plateforme centralisée, Tuleap permet aux équipes de développement de planifier et gérer leurs projets logiciels (agile ou non agile) avec une palette d'outils : un système de suivi de tickets (bugs, tâches, et.) personnalisable par projet, une intégration poussée avec Git et SVN pour le code source, Jenkins-Hudson pour l’intégration continue, Gerrit pour la revue de code, un plugin avec Mylyn pour suivre les tâches depuis Eclipse, ainsi qu'un gestionnaire de document par projet et des outils de collaboration.

Le projet Tuleap a mis en ligne un nouveau site communautaire www.tuleap.org qui présente les fonctionnalités de la forge et explique l’état d’esprit de la communauté qui promeut les principes agiles, la transparence des développements en cours et les livraisons continues.

Sur tuleap.org, vous trouverez notamment :

En parallèle de tuleap.org qui a un caractère informatif, la forge tuleap.net est l’environnement de développement du projet Tuleap proprement dit. Sur tuleap.net, vous trouverez :

Télécharger ce contenu au format Epub

Lire les commentaires

FOSS4G-fr 2014 - appel à propositions

11 mars, 2014 - 16:52

Le FOSS4G-fr 2014, événement dédié à la géomatique libre et aux données, se déroulera du 20 au 22 mai 2014 à Marne-la-Vallée.

Au programme : trois jours de conférences et ateliers, abordant des sujets techniques mais aussi des retours d'expériences, permettant de découvrir les dernières tendances et technologies du domaine, ainsi que leurs applications concrètes.

Suite au succès de la conférence FROG 2013, ces nouvelles rencontres seront l'occasion pour la communauté de se rencontrer, d'échanger et de partager projets et expériences.

Vous êtes expert sur un domaine lié aux SIG libres ? Vous avez utilisé les outils de l'OSGeo dans un contexte spécifique (projet d'envergure, données très volumineuses, client reconnu, projet innovant, etc.) ? Vous participez à un projet libre lié à l'OSGeo ? Alors venez présenter les dernières tendances et technologies Open Source pour les Systèmes d'Information Géographique, et proposez une conférence, avant le 15 mars 2014 minuit (heure de Paris) : http://foss4g.osgeo.fr/Programme

Pour toute information ou question, vous pouvez contacter les responsables à l'OSGeo-fr : conferences CHEZ osgeo.asso.fr

À propos de l'OSGeo-fr :

L’association OSGeo.fr est la représentation Francophone de la fondation Open Source Geospatial dont la mission est d’aider et de promouvoir le développement collaboratif des données et des technologies géospatiales ouvertes. L’association est une entité légale grâce à laquelle les membres de la communauté peuvent contribuer au code, aux finances et aux autres ressources, et s’assurer que leurs contributions seront maintenues au bénéfice du public.

L’OSGeo.fr sert également d’organisation de référence et d’assistance pour la communauté géospatiale libre, et fournit un forum commun et une infrastructure partagée pour améliorer la collaboration entre les projets.

La participation est ouverte à l’ensemble de la communauté open source. Tous les travaux de l’association sont publiés sur des forums publics au sein desquels peut s’investir une communauté libre de participants. Les projets de la Fondation OSGeo sont tous librement disponibles et utilisables sous une licence open source certifiée par l’OSI.

Télécharger ce contenu au format Epub

Lire les commentaires

Apéro Python/PHP à Lyon le mardi 25 mars

11 mars, 2014 - 16:14

Les antennes lyonnaises de l’AFPy et de l’AFUP organisent ensemble un apéro le mardi 25 mars à partir de 19h à l'Antre-Autre (11 rue Terme, Lyon 1er).

Une présentation sera donnée sur la sécurité web. Après un aperçu des principales failles présentes dans les applications web, une réflexion sur les failles XSS sera exposée et une méthode de protection efficace contre une partie de celles-ci sera présentée. Enfin, le thème de la sécurité sera abordé de façon plus générale (politique de sécurité, bonnes pratiques…).

À l’issue de cette présentation, nous pourrons échanger librement sur ces deux langages de programmation, autour d’un verre et/ou d’une assiette.

Télécharger ce contenu au format Epub

Lire les commentaires

Quelques nouveautés sur votre site web préféré

11 mars, 2014 - 14:29

Pour fêter ma millième entrée de suivi fermée sur LinuxFr.org, j'ai décidé de faire une petite dépêche mettant en avant quelques nouveautés récentes.

Premier changement, la feuille de style par défaut a été un peu revue. La largeur maximale est maintenant limitée pour les grands écrans afin de rendre la lecture plus confortable.

La version personnalisée de Markdown utilisée pour saisir du contenu sur le site permet maintenant d'inclure des formules mathématiques, en ligne à l'intérieur d'un paragraphe ou dans un bloc séparé. Par exemple, ou, pour la version longue :

Autre nouveauté, il est possible de récupérer une version markdown des contenus du site, grâce à un lien « Markdown » en bas de ceux-ci. Vous pouvez notamment essayer sur cette dépêche pour voir à quoi ressemblent les formules mathématiques :p

Enfin, le moteur de recherche du site a été revu. Il fonctionne désormais avec ElasticSearch 1.0. Il devrait être un peu plus pertinent et propose maintenant le filtrage par tags.

NdM: Pour fêter cela, Nono a décidé d'envoyer une coupe de champagne aux 1000 premiers lecteurs qui en feront la demande.

Télécharger ce contenu au format Epub

Lire les commentaires

Revue de presse de l'April pour la semaine 10 de l'année 2014

10 mars, 2014 - 17:07

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

[Le Monde.fr] Et si les implants médicaux étaient sous licence libre?

Par Alexandre Léchenet, le samedi 8 mars 2014. Extrait:

Lors d'une présentation à «South by Southwest», Karen Sandler a expliqué comment la pose d'un pacemaker l'avait poussé à s'interroger sur le logiciel le faisant fonctionner.

Lien vers l'article original: http://www.lemonde.fr/technologies/article/2014/03/08/et-si-les-implants-medicaux-etaient-sous-licence-libre_4379783_651865.html

[lepopulaire.fr] Un mois consacré au logiciel libre à la BFM de Limoges

Par Marion Buzy, le vendredi 7 mars 2014. Extrait:

Si vous souhaitez avoir un minimum de main mise sur ce que fait votre ordinateur, le mois du logiciel libre, qui commence le 8 mars à la BFM, est fait pour vous.

Lien vers l'article original: http://www.lepopulaire.fr/limousin/actualite/2014/03/07/un-mois-consacre-au-logiciel-libre-a-la-bfm-de-limoges_1903834.html

[Les Echos] Agitation à Bruxelles autour de la réforme du droit d'auteur

Par Renaud Honoré, le jeudi 6 mars 2014. Extrait:

La Commission avait lancé une consultation auprès de toutes les parties intéressées par une réforme d'un régime du droit d'auteur que remet en question le développement de l'économie numérique. La procédure s'est achevée hier, avec plus de 8.000 réponses, ce qui fait partie des records en la matière

Lien vers l'article original: http://www.lesechos.fr/entreprises-secteurs/tech-medias/actu/0203353817280-agitation-a-bruxelles-autour-de-la-reforme-du-droit-d-auteur-654919.php

Et aussi:

Voir aussi:

[PC INpact] Mozilla enquête sur une installation de Firefox facturée 20 euros chez Dell

Par Vincent Hermann, le jeudi 6 mars 2014. Extrait:

Récemment, une option sur le site anglais de Dell permettait pour au moins une machine d’installer Firefox contre la modique somme de 16,25 livres, soit 19,65 euros environ. Or, il apparaît que Mozilla et Dell n’ont aucun contrat de ce type, ce qui a conduit l’éditeur à démarrer une enquête.

Lien vers l'article original: http://www.pcinpact.com/news/86326-mozilla-enquete-sur-installation-firefox-facturee-20-euros-chez-dell.htm

[Silicon.fr] Les experts de l’open source s’affichent contre les brevets logiciels

Par David Feugey, le jeudi 6 mars 2014. Extrait:

L’affaire qui oppose Alice Corp. à CLS Bank ouvre la voie à une possible réforme des brevets logiciels outre-Atlantique. Les acteurs de l’open source affichent leur soutien auprès de la Cour suprême des États-Unis.

Lien vers l'article original: http://www.silicon.fr/les-experts-americains-de-lopen-source-montent-au-front-contre-les-brevets-logiciels-93100.html

Et aussi:

[cio-online.com] Entretiens avec les DSI et les dirigeants du secteur informatique

Par Bertrand Lemaire, le mardi 4 mars 2014. Extrait:

Autant il est impossible d'imposer un logiciel propriétaire dans un appel d'offres, autant cela ne pose pas de problème pour un logiciel libre qui peut être intégré par qui le souhaite. Le Conseil d'Etat a donné raison à une structure publique qui avait fait le choix explicite a priori d'un logiciel libre.

Lien vers l'article original: http://www.cio-online.com/entretiens/lire-le-sill-vise-a-harmoniser-le-recours-au-logiciel-libre-par-l-etat-521.html

[Numerama] Des DRM sur les capsules de café

Par Guillaume Champeau, le mardi 4 mars 2014. Extrait:

En Amérique du Nord, un concurrent de Nespresso a décidé d'ajouter un DRM à ses cafetières, pour qu'elles n'acceptent que les capsules officielles.

Lien vers l'article original: http://www.numerama.com/magazine/28647-des-drm-sur-les-capsules-de-cafe.html

Télécharger ce contenu au format Epub

Lire les commentaires

Sortie de Reqflow pour tracer vos exigences

10 mars, 2014 - 15:08

Reqflow est un outil open-source, sous licence GPL v2+, de traçabilité d'exigences entre documents. Ce genre de traçabilité s'avère utile dès que la taille d'un projet devient conséquente : plusieurs centaines d'exigences.

J'avais plusieurs fois cherché et mentionné le besoin d'un tel outil open-source et, ne trouvant rien, je l'ai réalisé.

NdM : merci à goeb pour son journal.

Sommaire Reqflow Le concept d'exigence

Pour résumer le concept d'exigence à ceux qui n'en ont pas l'habitude, une exigence (requirement en anglais) est typiquement une fonctionnalité, décrite en quelques lignes. De cette exigence peuvent découler :

  • des exigences plus fines, décrivant comment on va réaliser la fonctionnalité
  • des tests, qui décrivent comment la vérifier sur le produit fini.

On dit que les exigences en aval couvrent les exigences en amont.

L'intérêt de décrire un système par exigences est de fragmenter la complexité en portions de dimensions réduites, plus faciles à maîtriser humainement (comprendre, discuter, vérifier, tester). Cela oblige également à synthétiser les documents de spécifications. On a trop souvent vu des documents de plusieurs centaines de pages verbeux, imprécis, et confus. Pour bien travailler avec les exigences, il faut que ceux qui écrivent les spécifications aient dès le début une approche par exigence, ce qui n'est malheureusement pas toujours le cas.

La manière de travailler ensuite peut grossièrement se résumer ainsi : on vérifie qu'on n'a oublié aucune exigence en réalisant le système.

Les entreprises industrielles qui conçoivent de gros systèmes (véhicules, avions, etc.) utilisent la fragmentation en exigences pour définir et réaliser leurs systèmes.

Exemple de spécification

Prenons l'exemple d'un logiciel de navigation Internet qui souhaite se conformer à la norme CSS2 (dans la vraie vie, les navigateurs web ne s'encombrent pas de traçabilité d'exigences, car c'est un procédé coûteux qui n'est pas justifié pour ce genre de logiciel non critique).

Le document de spécification est donc la norme CSS2, extrait :

15.6 Font boldness: the 'font-weight' property 'font-weight' Value: normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit The 'font-weight' property selects the weight of the font. The values '100' to '900' form an ordered sequence, where each number indicates a weight that is at least as dark as its predecessor. The keyword 'normal' is synonymous with '400', and 'bold' is synonymous with '700'.

Ici, il n'y a pas de marqueur d'exigence dédié. Donc, on prend le numéro du paragraphe "15.6" pour cet exemple (mais ce n'est pas une manière très rigoureuse de procéder et il va être difficile pour l'outil de traçabilité de capturer les exigences).

Et on code le navigateur web, avec ses petites mains. Pendant ce temps un testeur va écrire le plan de test, comme ceci :

Exemple de plan de test T_FONT_01 1. écrire une page HTML utilisant un mot avec font-weight 'normal' 2. vérifier que le navigateur affiche ce mot avec un poids 400. Ref: 15.6 Font boldness: the 'font-weight' property T_FONT_02 1. écrire une page HTML utilisant un mot avec font-weight 'bold' 2. vérifier que le navigateur affiche ce mot avec un poids 700. Ref: 15.6 Font boldness: the 'font-weight' property

Ensuite la méthode va consister à dérouler les activités suivantes :

  • on exécute le logiciel de traçabilité :
    • pour vérifier si aucune exigence de la spécification n'a été oubliée;
    • pour générer la matrice de traçabilité (utile aux étapes suivantes).
  • quelqu'un va ensuite vérifier pour chaque exigence de la spécification, si les tests indiqués par la matrice de traçabilité, couvrent effectivement l'exigence dans son intégralité. C'est une étape manuelle et fastidieuse pendant laquelle la matrice de traçabilité générée est une aide précieuse car elle sert de support au suivi de l'avancement (on coche les exigences que l'on vérifie au fur et à mesure, jour après jour.
  • ensuite quelqu'un effectue les tests à partir du plan de test. Mais ce n'est plus du domaine de la traçabilité des exigences.
  • si tous les tests sont OK, alors le logiciel est conforme à la spécification.
Principe de Reqflow

Reqflow est un outil en ligne de commande. Il analyse les fichiers d'entrée (au format Open XML, Open Document, etc.), capture les exigences, capture les liens entre exigences, et génère un rapport (format texte, CSV ou HTML), indiquant si toutes les exigences en amont sont couvertes par des exigences en aval.

Pour fonctionner, on a besoin de placer dans les documents des marqueurs d'exigence, comme dans l'exemple CSS ci-dessus. Et via des expressions régulières on indique comment capturer les exigences :

-req [1-9][0-9]*\..*

Et pour le plan de test :

-req T_.* -ref "Ref: .*"

Reqflow indique ensuite :

  • les exigences de la spécification qui ont été oubliées dans les tests
  • les erreurs (exigences en double, références vers des exigences inexistantes, etc.)
  • les matrices de traçabilité entre exigences et documents

Exemple de rapport HTML : http://goeb.github.io/reqflow/reqReport.html

Analyse des PDF

Pour analyser les fichiers d'entrée au format PDF, Reqflow utilise la bibliothèque Poppler, que l'on retrouve dans plusieurs lecteurs PDF open-source.

Autant pour analyser les fichiers HTML, texte, ODT, DOCX, c'est relativement simple (bibliothèque libxml2 et analyse manuelle), autant pour le PDF c'est compliqué.

Car le format PDF, s'il est bien pour transférer un document en gardant le rendu visuel, n'est pas du tout adapté pour être traité informatiquement. En effet les mots que l'on voit se suivre sur l'écran ne sont pas toujours consécutifs dans le fichier. Et ils peuvent même être inversés.

Je crois (mais ne suis pas certain) que Poppler est capable de remettre les mots dans l'ordre en se basant sur leur emplacement dans la page.

Expressions Régulières

J'avais commencé avec la bibliothèque POSIX regex. Puis je me suis réorienté vers la bibliothèque PCRE car elle me paraissait plus conviviale (pas besoin d'échapper les parenthèses notamment). Heureusement, la bibliothèque PCRE fournit une interface identique à la lib regex (libpcreposix), donc je n'ai pas eu à changer mon code source.

Autres outils du marché

D'autres outils propriétaires dominent sur le marché.

Reqtify, outil graphique et qualifié selon certaines normes de développement aéronautique (DO178-B je crois), présente une interface graphique assez pratique.
Reqtify capture les exigences des documents par des expressions régulières, ou par les styles Word.
Il a une fonctionnalité intéressante : cliquer sur une exigence, dans son interface graphique, provoque l'ouverture du document Word ou Excel associé et le positionnement au paragraphe de cette même exigence.

DOORS (IBM® Rational® DOORS®) ne capture pas les exigences à partir des documents, mais possède les exigences dans une base de données et a une interface graphique. Il peut toutefois importer des documents externes dans sa base de données. Ensuite DOORS peut génèrer les matrices de traçabilité et éventuellement les documents (au format Word par exemple) pour échanger avec d'autres parties prenantes qui ne possèderaient pas DOORS.

En comparaison de ces outils, Reqflow est très petit, très rustique car il a moins de convivialité, moins d'ergonomie, moins de fonctionnalités. Mais Reqflow a les atouts suivants :

  • il est simple
  • il est possible de générer les matrices de traçabilité par un bête script shell ou batch
  • il est gratuit et open-source et a tout le temps devant lui pour s'améliorer
  • il est en ligne de commande, et greffer une interface graphique au-dessus est possible
Conclusion

J'utilise Reqflow dans mon travail, pour tracer 750 exigences de 8 documents de spécifications en amont, et il me rend bien service.

Page web de Reqflow: http://goeb.github.io/reqflow
Code source sur Github: http://github.com/goeb/reqflow

Télécharger ce contenu au format Epub

Lire les commentaires

Romaine Lubrique sur OxyRadio

9 mars, 2014 - 14:21

Véronique Boukali et Alexis Kauffmann (Framasoft), du projet « Romaine Lubrique », animent depuis janvier dernier sur OxyRadio une émission radio mensuelle d'une heure dédiée au domaine public.

Il s'agit de valoriser culturellement le domaine public mais également de s'interroger sur le partage à l'ère du numérique. Ici toute œuvre évoquée se trouve être immédiatement et légalement disponible sur Internet.

Chaque émission propose un dossier ponctué d'un point d'actualité et d'une question juridique. Elle est également rythmée par une lecture, une respiration musicale et la présentation d'un film, tous dans le domaine public.

Le dossier de la première émission était consacré à Apollinaire, celui de la deuxième à Courteline et la troisième à Camille Claudel, récemment entrée dans le domaine public. Quant à la chronique cinématographique, il s'agissait du film noir Detour, de la comédie musicale Mariage royal et de la Nuit des morts-vivants. Ils présentent la particularité d'être entrés rapidement dans le domaine public américain pour défaut ou non renouvellement du copyright.

OxyRadio est une webradio associative basée à Cergy. Elle a été souvent évoquée par le passé sur Linuxfr.org parce qu'elle diffuse majoritairement de la musique sous licences libres et ouvertes mais aussi parce qu'il était souvent question de logiciels libres dans l'émission Les Enfants du Web animée par Mathieu Pasquini (InLibroVeritas). À noter qu'après une longue période d'hibernation, l'émission a repris du service.

P.-S. Les animateurs étant novices en radio, ils sont preneurs de tout conseils et critiques dans les commentaires pour améliorer les prochaines émissions.

Télécharger ce contenu au format Epub

Lire les commentaires

Badges VIP pour le prochain salon Solutions Libres & Open Source 2014

9 mars, 2014 - 10:43

Le prochain salon Solutions Libres & Open Source (ex Solutions Linux) se tiendra sur deux jours comme l'année passée : les 20 et 21 mai prochains, toujours au Centre des Nouvelles Industries et Technologies de Paris - La Défense, plus connu sous son acronyme CNIT. Et cette année, LinuxFr.org sera encore présent au sein du village associatif, stand C39. Comme les autres années, nous essayons de vous réserver quelques surprises à gagner directement sur le stand. Nous travaillons dessus et nous vous en dirons plus le moment venu.

Comme tout exposant, LinuxFr.org a un quota de badges VIP pour le salon. Comme vous, chers contributeurs et lecteurs, êtes nos VIP à nous (si, si), nous vous proposons donc de vous faire parvenir un badge VIP. Selon l'organisateur, cela donne accès au Club VIP, vestiaire gratuit, accueil spécifique, accès prioritaire aux conférences… Pour ce faire, rien de plus simple, il suffit de remplir ce petit formulaire de demande avant le mardi 6 mai prochain à 16h00.

Seules les 300 premières demandes seront honorées. Nous nous engageons juste à transmettre, (sous format libre OpenDocument !) les formulaires complétés à Tarsus (l'organisateur du salon)… ou pas. Toute demande manifestement farfelue ne sera pas prise en compte.

Données personnelles

Concernant les informations personnelles demandées, il y en a moins que pour un badge classique. Quant à la politique d'utilisation des données personnelles transmises, merci de consulter les sites web de Tarsus et du salon Solutions Libres & Open Source. LinuxFr.org ne conservera pas ces données une fois envoyées à Tarsus.

Informations pratiques

Le salon sera ouvert les

  • mardi 20 mai de 9h00 à 19h00 ;
  • mercredi 21 mai de 9h00 à 18h00.

Il se tiendra dans le hall Marie Curie du CNIT à Paris la Défense. Les moyens d'accès pour ceux qui ne connaissent pas la Défense (on peut vite s'y perdre) :

  • Métro : ligne 1, station La Défense - Grande Arche
  • RER : ligne A, station la Défense – Accès Parvis
  • Voiture : boulevard circulaire (Parking central sortie la Défense 4 / Parking CNIT sortie la Défense 6)
  • Tramway : T2 - arrêt Esplanade de la Défense
Télécharger ce contenu au format Epub

Lire les commentaires

IEUFI - prochaine conférence (et vidéos des dernières) + nouveau site

9 mars, 2014 - 00:51

La prochaine conférence aura lieu le vendredi 11 avril à l'Institut Mines-Telecom (46 rue Barrault - Paris, 13ème arrondissement). Elle portera sur comment devenir un FAI, résoudre (facilement) le problème des zones blanches, et bien plus encore. L'intervenant pour cette conférence est Bruno Spiquel, aussi connu sous le pseudo de turblog et/ou Spyou.

Elle fait partie du cycle de conférences «  Il Etait Une Fois Internet » (IEUFI), qui a déjà vu passer les personnes suivantes :

  • Stéphane Bortzmeyer sur le DNS,
  • Benjamin Sonntag sur le SSL/TLS,
  • Joël Mau sur l’infrastructure physique d’Internet,
  • Benjamin Bayart sur Internet et ses enjeux,
  • Philippe Aigrain et Lionel Maurel sur la création, le partage et le droit d'auteur,
  • Benjamin Sonntag sur le courriel.

L’entrée est, bien entendu, libre, les conférences sont enregistrées et (normalement) disponibles en direct. Les transparents et les vidéos sont disponibles sur http://iletaitunefoisinternet.fr http://data.confs.fr/ peu de temps après chaque conférence, le tout sous licence Creative Commons By-SA.

Si vous voulez plus d’informations, proposer des idées, faire une conférence, ou dénoncer quelqu’un qui pourrait en faire une : contact (a) iletaitunefoisinternet.fr.

Ah, et comme vous pouvez le voir, il y a un nouveau nom de domaine, et même un twitter !

Télécharger ce contenu au format Epub

Lire les commentaires

LUTIm 0.2 : le retour

9 mars, 2014 - 00:50

18 jours après la version 0.1 présentée dans une dépèche précédente, voici venir une nouvelle version de LUTIm !

Pour rappel, LUTIm (à prononcer comme lutin) est un service web d'hébergement d'images, gratuit, libre et anonyme. Il est écrit en Perl, est utilisable avec ou sans JavaScript et possède une API, permettant son usage depuis d'autres logiciels comme par exemple Shutter, un logiciel de capture d'écran (rappelons qu'une des principales raisons du développement initial de LUTIm est le partage simple de captures d'écran).

Les trolls discussions ont été âpres sur certains aspects de LUTIm mais fort enrichissantes, aidant LUTIm à évoluer pour le meilleur (tout du moins, je l'espère).

Les changements ont été nombreux, comme en témoigne le Changelog mais les deux principaux changements, vraiment visibles de tout un chacun sont la possibilité de chiffrer les images et les miniatures des images dans la réponse.

L'instance officielle, https://lut.im, bénéficie bien évidemment des derniers développements, éventuellement avant les releases officielles quand il s'agit de bugs graves.

Sommaire Les nouveautés Chiffrement

Pour avoir un service d'hébergement d'images garantissant la vie privée, outre la question des logs, il y a la question de qui peut voir ce que l'on a déposé et bien souvent les administrateurs des services le peuvent (All your base are belong to us comme dit le dicton). C'est pourquoi LUTIm propose désormais la possibilité de chiffrer ses images (l'administrateur peut forcer l'usage systèmatique du chiffrement).

À propos du chiffrement, deux écoles s'opposent : le chiffrement côté serveur ou côté client. Chacune d'entre elles possède des avantages et inconvénients dont voici les principaux :

  • côté client, le JavaScript est obligatoire, mais le serveur ne peut pas connaître la clé ;
  • côté serveur, il faut faire confiance au serveur pour ne pas stocker la clé, mais l'interface peut se passer de JavaScript.

LUTIm utilise un chiffrement côté serveur pour plusieurs raisons :

  • LUTIm est codé de façon à être utilisable même sans JavaScript. Cela n'a pas toujours été simple, mais c'est un point essentiel de ce logiciel, donc renoncer à cette fonctionnalité était exclu ;
  • les images déposées sur LUTIm sont utilisables directement : vous pouvez déposer des images sur LUTIm et les inclure sur LinuxFR comme c'est le cas dans cette dépèche. Un chiffrement JavaScript aurait empêché une telle utilisation ;
  • Le développeur principal (moi :p) préfère de loin le Perl au JavaScript.

L'algorithme de chiffrement est Blowfish et les clés sont générées aléatoirement par le serveur. Les clés font 8 caractères de long et les caractères sont choisis dans [a-zA-Z0-9], ce qui représente 2 821 109 907 456 combinaisons possibles. La longueur de la clé sera paramètrable (par l'admin) dans un futur proche.

La clé n'est bien évidemment jamais stockée sur le serveur, de même que l'image non chiffrée. Elles ne font que transiter en mémoire le temps du chiffrement pour l'image et jusqu'à l'affichage de la réponse pour la clé.

L'instance officielle chiffre désormais systématiquement toutes les images (les anciennes images non chiffrées étant toujours accessibles).

Et si vous avez toujours peur d'un serveur malveillant, installez votre propre instance, c'est si simple :)

Miniatures

Un des reproches gentiment fait à LUTIm était qu'il était difficile de savoir à quelle image correspondait telle URL lors de l'envoi simultané de plusieurs images. Si le module Perl Image::Magick est installé, une miniature de l'image est générée (avant un éventuel chiffrement) et renvoyée encodée en base64, prête à être utilisée en tant que source dans une balise img. L'absence d'Image::Magick ne pose aucun problème à LUTIm qui fonctionnera normalement, juste sans les miniatures.

L'encodage en base64 permet de ne pas garder la miniature sur disque pour garantir la confidentialité de l'image (si l'image est chiffrée et pas la miniature, quel intérêt ?) ainsi que pour éviter l'encombrement de l'espace disque.

La création de la miniature et son encodage en base64 ne nécessitent à aucun moment d'enregistrer l'image dans un fichier.

Statistiques

Stocker les images des autres est fort gentil, mais il est bon de garder un œil sur l'évolution du service. Aussi une page de statistiques a fait son apparition. Si elle ne fournit pas la taille du répertoire des fichiers, elle permet toutefois d'appréhender d'un coup d'œil le nombre total d'images déposées, le nombre d'images déposées par jour et l'évolution du nombre total d'images.

La période de statistiques est paramètrable par l'administrateur et il faut mettre en place une tâche cron pour générer les statistiques.

Si le JavaScript n'est pas activé, l'utilisateur verra apparaître un tableau des données utilisées pour la génération des graphiques.

Les graphiques sont générées avec le plugin jquery SimpleGraph et la bibliothèque Raphael mais d'autres modules sont actuellement à l'étude.

Vous pouvez voir les graphiques de l'instance officielle.

Tâches cron

Outre la génération des statistiques, d'autres actions peuvent être activées via cron :

  • suppression des IPs des envoyeurs dans la base de données après un délai paramètrable ;
  • suppression des images expirées (les images étaient auparavant supprimées lors d'une tentative d'accès) ;
  • surveillance de la taille du répertoire des images avec 3 actions possibles si la taille maximale configurée est dépassée :
    • émission d'un message sur la sortie standard (cron enverra ce message par mail) ;
    • création d'un fichier bloquant tout nouvel envoi d'images (avec avertissement aux utilisateurs. Le fichier est supprimé si on repasse sous la limite lors de l'exécution de la tâche) et émission d'un message ;
    • suppression des images les plus anciennes par paquet de 50 jusqu'à avoir une taille de répertoire en dessous de la limite et émission d'un message (non recommandé) ;
Autres ajouts

Un peu en vrac, voici d'autres nouvelles fonctionnalités :

  • possibilité de diffuser un message sur les pages d'accueil, d'informations et de statistiques ;
  • possibilité de bloquer manuellement l'envoi d'images en créant un fichier spécifique à la racine du répertoire de LUTIm (ce n'est pas le même fichier que celui posé par la tâche cron de surveillance du dossier d'images) ;
  • meilleure détection des types MIME ;
  • barre de progression des envois d'images ;
  • autorisation de requêtes cross-domain (la liste des domaines autorisés est configurable ou désactivable) ;
  • documentation de l'API (celle-ci doit encore être mise à jour, mais l'essentiel est décrit) ;
  • Ajout d'en-têtes HTTP pour les images en cohérence avec leur durée de vie ;
  • possibilité d'envoi d'images en donnant leur URL. L'image est alors téléchargée sur le serveur.
Le futur

Si LUTIm est jeune, il n'en a pas moins déjà démontré sa robustesse face à l'effet Korben (le pic de plus de 2 000 images envoyées sur la page des statistiques) et les retours sont encourageants, que ce soit par les utilisateurs, par les administrateurs désireux d'installer leur propre instance, ou par la communauté Perl francophone (coucou les Mongueurs) voire anglophone (via la liste de diffusion du framework Mojolicious).

Le développement de LUTIm ne s'arrêtera donc pas là. Des demandes de fonctionnalités sont toujours en attente sur github et il ne tient qu'à vous d'en ajouter d'autres !

Entre autres choses, la priorité de la version 0.3 sera l'écriture de tests (non, il n'y a pas encore de suite de tests, et c'est mal, je sais) ainsi que l'ajout de la possibilité d'utiliser une base MongoDB plutôt que SQLite (ça sera une possibilité, pas une obligation, SQLite sera toujours supporté).

Divers

L'instance officielle est disponible en connexion sécurisée, avec un vrai certificat, permettant d'embarquer les images provenant de LUTIm sans soulever le problème de Mixed Content.

LUTIm est disponible en français et en anglais. Le choix de la langue est fait par les préférences de langue du navigateur (en-tête HTTP Accept-Language). Si vous voulez proposer une nouvelle langue, toutes les contributions sont les bienvenues ! Voir ici pour les fichiers de langue.

La concurrence est là (https://img.bi/, libre et écrit en node.js.) mais un LUTIm sait se montrer courageux et résister à l'adversité !

Maintenant que le chiffrement est de la partie, le petit frère de LUTIm, Lufi pourrait faire son apparition relativement vite. Lufi sera un service d'hébergement de fichiers basé sur ±90% du code de LUTIm.

Vous pouvez soutenir LUTIm avec flattr, bitcoin (1K3n4MXNRSMHk28oTfXEvDunWFthePvd8v) ou encore dogecoin (DFDpahcHFBf2rGMGe49H7m3USw6JMhmwGo).
Vous pouvez aussi simplement parler de LUTIm autour de vous et utiliser le hashtag #Lutim lorsque vous en parlez sur les réseaux (a)sociaux.

Télécharger ce contenu au format Epub

Lire les commentaires

Sortie de Perfwatcher 2.0

8 mars, 2014 - 15:57

La nouvelle version majeure de l'outil de métrologie Perfwatcher vient de sortir, Perfwatcher 2.0. Perfwatcher est un frontend pour Collectd (un outil de mesure de performances du système) écrit en PHP, HTML, JavaScript et C.

Présenté sur LinuxFr.org lors de sa sortie en version 1.2, le fonctionnement interne de Perfwatcher a subi un profond remaniement amenant une modularité permettant aujourd'hui son déploiement sur des grilles de calculs de plus de 20000 nœuds.

Pour rappel, Perfwatcher est une interface utilisateur pour Collectd, il permet d'afficher les graphes RRD générés par ce dernier et étend ses fonctionnalités par l'apport de nombreux modules et patchs.

Parmi ceux-ci, le module Top permet l'affichage de la totalité de la liste des processus à la façon de la commande top et ce, à la date et heure de son choix ainsi que l'affichage des processus sous la forme d'une frise chronologique (timeline).

Perfwatcher permet, en outre et ce fut son premier but, d’agréger les données de Collectd par groupes de serveurs afin de, par exemple, visualiser la charge moyenne de parties d'une grille de calcul.

À ce remaniement et la traditionnelle correction de bogues, s'ajoute un lot de nouveautés parmi lesquelles nous pouvons trouver :

  • l'accès à distance à Collectd rendant l'installation encore plus modulaire,
  • la possibilité d'accéder à plusieurs instances de Collectd,
  • un système de presse-papier permettant de sélectionner des graphes puis de les comparer,
  • des onglets éditables via l'utilisation d'un langage de balisage (Markdown),
  • un zoom des graphes amélioré.

Télécharger ce contenu au format Epub

Lire les commentaires

Les femmes dans l'informatique

8 mars, 2014 - 13:57

Le 8 mars est la journée internationale des droits des femmes. Le rouge à lèvre cadeau-bonus du marchand de cosmétique, les cartes de crédit rosifiées du banquier (ou le fleurissement inopiné de blagues sexistes) n'ont pas vocation à faire partie des droits fondamentaux des femmes.

C'est l'occasion de faire un tour d'horizon de leur place dans le monde de l'informatique, notamment dans le logiciel libre. En effet, elles sont sous-représentées parmi les acteurs de l'informatique: étudiants, salariés, enseignants, etc. Si on écarte l'hypothèse qu'il existe une essence (masculine ou féminine) prédisposant les individus à choisir un domaine professionnel en fonction de leur sexe, on peut se demander pourquoi un tel déséquilibre existe, depuis quand, et quels sont ses effets au sein du milieu de travail et dans les relations professionnelles?

Sommaire Contexte et situation Historique des femmes en informatique Avant l'info…

La méfiance voire l'opposition radicale à l'égard de l'instruction des filles a fait l'objet de théories philosophiques aussi diverses que celles d'Aristote à Proudhon en passant par Saint-Paul ou par Rousseau, pour qui « toute l'éducation des femmes doit être relative aux hommes. Leur plaire, leur être utile (…) voilà les devoirs des femmes (…). » Malgré ces réticences, de tous temps, quelques femmes se sont distinguées en sciences ; on peut mentionner Hypatie, Ada Lovelace inévitable à citer, Sophie Germain, Sofia Kovalevskaïa, Marie Curie.

La croyance qui associe la femme à la nature, la rendant incapable de transcender et de dépasser son corps tandis que l'homme est un être de culture tourné vers la réflexion, se retrouve sous diverses formes dans toute la philosophie occidentale. Elle est encore vivace aujourd'hui, en attestent les déclarations régulières d'Aldo Naouri par exemple. Sa critique a été entreprise en premier lieu par Simone de Beauvoir, et trouve son prolongement dans les études de genre, qui visent à montrer comment se construit l'identité sexuée des individus à travers les interactions sociales et les rapports de forces qui les structurent.

La transmutation des maths en info…

À ses débuts, dans les années 50, l'informatique et ses différents métiers étaient plutôt considérés comme féminins car peu qualifiés (par exemple, programmer n'était pas considéré comme une tâche intellectuelle ; c'était la continuation du métier de calculatrices, femmes qui effectuaient les calculs entre autres dans les observatoires astronomiques). Par ailleurs, sa proximité avec les mathématiques permettait à des mathématiciennes de s'y intégrer : à ce titre, le cas de Grace Hopper est emblématique. La progression des femmes dans l'informatique a été sensible jusque dans les années 80, puis s'est inversée, jusqu'au taux de féminisation très faible que l'on connaît aujourd'hui.

Cela s'explique de différentes façons. D'après l'ouvrage Gender Codes dirigé par Thomas J. Misa, les métiers ont connu une très forte demande de main-d'œuvre. Pour y répondre, une solution a été de revaloriser ces métiers, ce qui a eu pour conséquence d'augmenter la proportion d'hommes. Isabelle Collet met aussi en évidence l'émergence d'une culture propre à l'informatique dans les années 1980, très masculine, qui a fortement contribué à écarter les filles dans ces filières. Ce mouvement est indissociable des représentations scolaires, qui poussent les garçons dans des métiers techniques et scientifiques, et les filles dans des filières littéraires et médico-sociales.

La situation présente Un marché du travail français qui reflète les inégalités de genre

Des études, comme celles de la Direction de l'Animation de la Recherche, des Études et des Statistiques, DARES, mettent en lumière la forte concentration des femmes dans certains métiers. Aujourd'hui, près de la moitié des femmes (47%) exerce dans une dizaine de métiers comme infirmières (87,7% de femmes), aides à domicile ou assistantes maternelles (97,7%), agents d’entretien, secrétaires ou enseignantes.

Du côté des hommes, la répartition est plus dispersée, les 10 professions les plus répandues parmi les hommes n’employant que 31% d’entre eux. Les professions les plus masculines sont: conducteurs de véhicules (près de 90% d’hommes), l’armée, la police ou les pompiers (environ 75%), ouvriers du bâtiment, manutentionnaires, ainsi que l'ingénierie informatique. (source)

En outre, les secteurs les plus féminisés sont souvent les plus précarisés, les moins valorisés et conséquemment les moins bien payés, comme le montre les études du marché du travail genré conduites par Margaret Maruani. (source, source)

Tout cela a des conséquences sur les inégalités salariales comme le montre cette étude récente de l'Institut National de la Statistique et des Études Économiques, INSEE.

Ceci se répercute dans les métiers de l'informatique; les chiffres donnés plus bas en rendent compte.

Quelques chiffres

En France :

  • école / enseignement supérieur
    • 11% d'étudiantes dans les écoles d'ingénieur en informatique
    • 20% en Licence professionnelle Métiers de l'Informatique, du Traitement de l'Information et des Réseaux

La raréfaction des étudiantes dans les filières universitaires d'informatique est telle que des groupes entiers sans filles, rares avant 2005, sont de plus en plus courants. La tendance se confirme depuis lors.

  • professionnelles (dans des entreprises info et non info)
    • 30% dans les SSII

D'après une étude du Cigref, elles sont moins représentées dans le développement, mais aussi dans les directions et dans le conseil, positions les plus intéressantes financièrement. La proportion de femmes dans ces métiers va vraisemblablement diminuer dans les prochaines années, faute de jeunes diplômées.

  • logiciel libre

La participation des femmes dans le logiciel libre est plus difficile à évaluer précisément, faute de statistiques officielles. En recoupant diverses sources, on constate que leur part a atteint 10% depuis 2010 environ, alors qu'elle était de l'ordre de 1% ou 2% dix ans plus tôt.

Cette tendance se retrouve dans d'autres pays occidentaux, notamment aux États-Unis.
Ce phénomène ne se retrouve pas dans les pays asiatiques, par exemple en Malaisie où l'on retrouve à peu près autant d'hommes que de femmes dans les départements d'informatique.

Organisations et initiatives Pourquoi des initiatives spécifiques / non-mixtes ?

Lorsqu'on parcourt les différentes interventions qui traitent de la façon d'inciter plus de femmes à collaborer au libre, des lignes de force apparaissent et notamment :

  • l'ambiance exclusive générée par l'entre-soi qui rend peu propice l'arrivée d'une femme dans la communauté
  • les contraintes sur le rythme de travail différencié entre femmes et hommes qui empêchent les femmes de mener un projet sur le long terme de façon continue ; ceci fait écho à la répartition sexuée des rôles dans le couple
  • la préférence des femmes pour un travail étroitement collaboratif, ainsi que pour une organisation moins hiérarchisée et moins imprégnée de compétition.

Liens :

Cette liste n'est pas exhaustive mais permet de mettre en évidence quelques-uns des obstacles à la participations des femmes dans le libre. Ceux-ci sont de natures diverses et tiennent tout autant à une organisation du travail qu'à des mentalités, des comportements, une culture.

Toutes ces raisons amènent à former des groupes non-mixtes et/ou avec des règles de conduites qui garantissent une ambiance de travail plus sereine.

Recensement d'organisations et d'initiatives visant à promouvoir la participation des femmes dans les domaines scientifiques et l'ingénierie En sciences

Diverses initiatives ont pour but de :

  • rendre visibles les disparités des situations dans le milieu scientifique selon le genre (par exemple, le Centre National de la Recherche Scientifique, CNRS publie des statistiques genrées montrant la répartition hommes/femmes selon les métiers, les hiérarchies ainsi que les différences de salaires. Il organise également des journées thématiques)
  • encourager les jeunes filles à poursuivre des études scientifiques ( Nota : la contraposée n'est pas vraie: à ce jour, il n'y a pas ou peu d'incitation à masculiniser les métiers féminisés. Pourtant des secteurs comme les métiers liés à la petite enfance auraient beaucoup à gagner à une égale représentation des genres: cela donnerait aux enfants un modèle d'éducation et de soin plus diversifié et améliorerait les conditions de travail des hommes y travaillant, car les préjugés et les réticences à leur encontre sont forts.)

Il existe ainsi des bourses d'études ou de projets dédiées aux femmes scientifiques.

Parmi ces initiatives :

En info

Parmi les initiatives concernant l'informatique, on notera l'Ada Lovelace Day lancé par Suw Charman-Anderson. Il s'agit, par un hommage notamment à Ada Lovelace, de faire reconnaître la place des femmes dans l'histoire et l'actualité de la discipline. En effet, depuis la masculinisation de l'informatique, les femmes n'y sont même pas visibles à hauteur de leur participation.

Systers, actif depuis 1987, est un forum regroupant les informaticiennes impliquées dans les aspects techniques de l'informatique, leur permettant de s'entraider. Il compte 4000 membres, de tous âges et tous niveaux; elles y organisent une entraide technique, mais aussi professionnelle, sur les relations dans le milieu de travail, ou la meilleure façon de conduire sa carrière.

On trouve désormais dans les principaux projets libres des groupes féminins. Debian women par exemple est une initiative relativement ancienne pour le libre (c'est-à-dire récente). Elle date de mai 2004 et « cherch[e] à équilibrer et diversifier le projet Debian en contactant les femmes intéressées et en les encourageant à s'impliquer davantage dans Debian ». On retrouve aussi PyLadies, Fedora women ou encore KDE women. Les activités de ces divers groupes prennent différents aspects.

Face aux difficultés que rencontrent les femmes dans ce milieu, ces groupes ont mis en place plusieurs types d'actions :

  • codes de conduite mis en place avec les communautés pour les rendre moins hostiles aux femmes,
  • lobbying pour la présence de femmes dans les conférences et actions publiques
  • interventions dans des conférences, et sensibilisation à la place des femmes dans le monde du logiciel libre: ainsi, la proportion d'oratrices à pyCon, la conférence Python la plus importante est passée de 1% en 2011 à 33% en 2014,
  • accueil des contributrices débutantes, orientation et aide technique,
  • gratifications financières pour les contributrices, par exemple avec le programme Gnome Outreach for Women.
Conclusion : quels enjeux?

Les enjeux sont importants et variés. La liste qui vient est subjective et partielle, il ne tient qu'à vous de la compléter.

  • stratégiques: accueillir plus de femmes dans le libre c'est agrandir la communauté, donc mieux diffuser ses idées et lui donner plus de poids
  • éthiques: la communauté a vocation à accueillir tout le monde, ou plutôt de n'exclure personne
  • sociaux: la mixité a un impact sur l'ambiance dans les collectifs de travail, elle permet d'apporter des éclairages différents sur les sujets et sur la méthodologie comme le soulignent les différents blogs à ce propos.

On peut également lire le deuxième chapitre de cette publication de l’Agence nationale pour l'amélioration des conditions de travail (ANACT) à ce sujet.

  • La faible représentation des femmes dans le logiciel libre et plus largement dans l'informatique pérennise les stéréotypes sexistes qui sont à la fois une cause et une conséquence de la désaffection des femmes pour ce domaine.

On retrouve une observation faite par Françoise Héritier au cours de ses travaux en anthropologie : dans toutes les sociétés observées, l'outil est exclusivement fabriqué par les hommes, même s'il est utilisé par les femmes. C'est aussi un enjeu de pouvoir et on comprend qu'il soit difficile d'y renoncer : ce mécanisme est symétriquement à l'œuvre dans les métiers liés à la petite enfance, comme en témoignent les travaux de Nicolas Murcier et de Yves Meunier et Daniel Chetoui

  • démocratiques : cela rejoint le premier point. Minorer les femmes dans un domaine, c'est non seulement se priver de points de vue originaux, mais aussi les priver de la possibilité de prendre la parole sur des sujets qui concernent la société dans son ensemble ; c'est donc ne pas prendre en compte les attentes particulières qu'elles pourraient avoir. Si les idées défendues par le libre ne leur sont pas connues, comment pourraient-elles se former une opinion éclairée sur les enjeux qui traversent tout le secteur du numérique?

À ce propos : ce sera le 70ème anniversaire du droit de vote des femmes en France en avril 2014, utilisé effectivement le 29 avril 1945.

Quelques chiffres :

  • 5,6% de femmes à l'assemblée nationale française en 1947, 5,7% en 1993, ce qui motive la mise en place des quotas.
  • En 1997 il y a 90% d'hommes parmi les députés et en 2014 ils représentent 75% des députés.
Bibliographie Sur l'informatique et le genre
  • Isabelle Collet: l'informatique a-t-elle un sexe?
  • Thomas J Misa: Gender Codes
Ouvrages plus généraux Télécharger ce contenu au format Epub

Lire les commentaires

Je crée mon jeu vidéo E10 : génération procédurale de carte (partie 1)

7 mars, 2014 - 09:55

«Je crée mon jeu vidéo» est une série d'articles sur la création d'un jeu vidéo, depuis la feuille blanche jusqu'au résultat final. On y parlera de tout : de la technique, du contenu, de la joie de voir bouger des sprites, de la lassitude du développement solitaire, etc. Vous pourrez suivre cette série grâce au tag gamedev.

Dans l'épisode 09, on a vu comment C++11 procurait des constructions bien pensées qu'on pouvait utiliser dans les systèmes à entités. Cette fois, on attaque dans le dur à travers un double épisode qui va nous permettre de générer une carte pour du RPG. Dans la première partie, on va voir comment générer une «carte d'altitude» (heightmap). On va passer en revue plein de techniques qui permettent d'arriver à ce résultat. Avec tout plein d'images pour illustrer. Attention les yeux !

Sommaire Généralités sur les cartes d'altitude

Une carte d'altitude est une image en niveaux de gris qui indique la hauteur d'une surface virtuelle représentant un terrain de jeu. Généralement, le noir indique une altitude basse et le blanc indique une altitude haute. En pratique, on utilise une matrice où chaque case de la matrice représente un pixel de la carte. La matrice contient généralement un flottant, normalisé entre 0 et 1, ou entre -1 et 1. Chez moi, ça sera entre 0 et 1.

Les cartes en niveaux de gris, c'est marrant mais pour vous en mettre vraiment plein les yeux, je vais plutôt générer des cartes en couleur en utilisant le gradient suivant (0 à gauche, 1 à droite, le niveau de la mer étant à 0,5) :

Trouver un gradient correct est assez difficile. Et ce n'est pas mon sens du graphisme inné qui m'aide beaucoup. J'ai récupéré ce gradient sur un site, j'aurais pu en choisir d'autres mais je les trouvais moins jolis. Si vous avez des talents pour améliorer ce gradient, n'hésitez pas à apporter votre aide.

L'idéal quand on génère ce genre de carte, c'est de pouvoir l'affiner à l'envie. En pratique, on essaie de générer un terrain fractal, c'est-à-dire un terrain qui présente un comportement fractal. Affiner le terrain (en pratique, avoir une carte de plus grande taille) ne va pas changer la physionomie générale du terrain, juste sa précision.

Ensuite, une fois que le processus de génération est en place, on cherche à avoir des cartes intéressantes, c'est-à-dire avec du relief mais qu'on puisse jouer. Pour cela, on va définir deux scores pour nos cartes, le score d'érosion et le score de jouabilité. Ces deux définitions sont issues de l'article Realtime Procedural Terrain Generation de Jacob Olsen, écrit en 2004. C'est un excellent article qui m'a beaucoup servi, notamment pour les algorithmes d'érosion décrits plus loin.

Comment mesurer l'importance du relief ?

Pour mesurer le relief, on utilise le score d'érosion. Le principe est, pour chaque case, de calculer la pente maximale, c'est-à-dire la différence d'altitude en valeur absolue, par rapport aux voisins. On ne considère que les voisins parallèles aux axes, c'est-à-dire les voisins du haut, de droite, du bas et de gauche. Ensuite, on calcule la moyenne de ces pentes et l'écart-type, puis enfin, le coefficient de variation, c'est-à-dire le rapport entre l'écart-type et la moyenne. C'est ce coefficient de variation qu'on appelle score d'érosion.

Un score d'érosion de 0 indique une carte plate. Plus le score est élevé, plus il y a de relief. En pratique, dès qu'on atteint 1, on constate des cartes avec pas mal de relief. Tout au long de cet article, j'essaierai de donner les scores d'érosion des différentes cartes générées pour vous donner un ordre d'idée.

Par exemple, pour la carte du début, le score d'érosion est de 0,970156. On constate qu'elle présente pas mal de relief, avec de grands plateaux qui permettent de délimiter des zones intéressantes.

Comment mesurer la pertinence d'une carte ?

Pour mesurer la pertinence d'une carte, c'est-à-dire sa jouabilité, l'idée est de regarder si les unités peuvent se déplacer et les bâtiments peuvent être placés sans encombre. En effet, on va considérer qu'une pente trop importante ne permet pas aux unités de passer ou aux bâtiments d'être placés. En plus, on considère qu'une unité a une certaine taille, de même que les bâtiments.

En pratique, on va d'abord calculer une carte binaire qui indique les cases qui ont une pente inférieure à Tu, la pente maximale franchissable par les unités, puis on va enlever de cette carte binaire toutes les cases qui ne peuvent pas contenir un carré de côté Nu, la taille des unités. Enfin, on calcule la plus grande zone connectée dans cette carte ce qui donne une carte d'unités. Pour la suite, on a pris Nu=1.

Ensuite, on fait de même avec les bâtiments, on prend une pente Tb maximum (généralement inférieure à Tu parce qu'un bâtiment supporte moins bien la pente) et une taille Nb (généralement supérieure à Nu parce qu'un bâtiment prend plus de place qu'une unité) et on calcule la carte binaire de la même manière, sauf pour la plus grande zone connectée (les bâtiments ne se déplacent pas). Enfin, on garde dans cette deuxième carte les zones accessibles dans la carte d'unité, ce qui donne la carte de bâtiments. Pour la suite, on a pris Nb=9.

Pour calculer le score de jouabilité, on va calculer la proportion de cases accessibles dans la carte d'unités, ainsi que la proportion de cases disponibles dans la carte de bâtiments. Et on va les multiplier par le score d'érosion pour obtenir le score de jouabilité. On comprend alors qu'une carte plate donnera des cartes d'unités et de bâtiments excellente mais un score d'érosion nul. Inversement, si on a trop de pente partout, on aura des cartes d'unités et de bâtiments mauvaises, voire très mauvaises, mais un score d'érosion excellent. Dans les deux cas, le score de jouabilité est mauvais. Il faut donc trouver un compromis entre les deux.

Voici la carte d'unités associée à la carte de début.

Voici la carte de bâtiments associée à la carte du début.

Le score de jouabilité pour cette carte est de 0,233147. Avec un score d'unité de 0,834806 (ce qui signifie que 83% des terres émergées sont accessibles aux unités (NdM : capables de voler ou d'y accéder par la mer, les terrains n'étant pas forcément tous accessibles uniquement par la terre) et un score de bâtiment de 0,287874 (ce qui signifie qu'on peut placer des bâtiments sur 28% des terres émergées), on a une carte tout à fait jouable.

Comment afficher une carte avec du relief ?

Avant de continuer, il faut expliquer que les cartes que je vais présenter sont représentées avec un relief ombré. Ça a l'air simple mais ça ne l'est pas. Sans relief ombré, la carte ressemblerait à ça.

Après beaucoup de recherches, j'ai utilisé l'algorithme simple utilisé dans le tutorial de génération de cartes polygonales d'Amit Patel (Red Blog Games). J'ai juste modifié un peu les couleurs. Plutôt que d'utiliser du gris, j'ai utilisé un jaune très léger pour le côté soleil et un violet très sombre pour le côté ombre. J'ai aussi conservé la convention de la lumière venant du nord-ouest (ce qui est impossible en réalité mais aide à discerner les trous des bosses).

Pourquoi est-ce difficile d'avoir un bon relief ombré ? Parce que sur les cartes réelles, cet ombrage est fait à la main, c'est un art en tant que tel chez les cartographes. Il existe des algorithmes pour le faire automatiquement mais il est difficile de les trouver écrits de manière claire, et leur résultat est souvent moins bon que les tracés à la main. Dans ma longue route à la recherche d'informations, voici quelques liens intéressants sur lesquels je suis tombé.

Tout d'abord, deux sites avec plein d'informations : Shaded Relief et Relief Shading. On y voit plein d'exemples de cartes ombrées à la main. On a également accès à tout un tas d'articles sur les techniques à utiliser, dont beaucoup utilisent le logiciel propriétaire de traitement d'image leader du marché. Pour les allergiques au logiciel propriétaire, Wikipédia francophone propose un tutoriel pour créer un relief ombré avec des outils libres.

Cette petite digression étant finie, passons aux choses sérieuses.

Bruit cohérent

Une carte d'altitude est par nature constituée de bruit cohérent. On peut définir le bruit cohérent comme une fonction (informatique) de Rn dans R avec les propriétés suivantes :

  • les mêmes valeurs d'entrée produisent la même valeur de sortie
  • un petit changement dans les valeurs d'entrée produit un petit changement dans la valeur de sortie
  • un gros changement dans les valeurs d'entrée produit un changement aléatoire dans la valeur de sortie

Dans notre cas, nous voulons produire une carte en deux dimensions (n=2), donc nous nous intéresserons uniquement aux techniques pour produire du bruit en deux dimensions. Beaucoup de ces techniques s'adaptent à des dimensions supérieures.

Parmi les algorithmes de génération de bruit qu'on rencontre souvent, il y a deux grandes classes d'algorithmes :

  • les générateurs à base de bruit de Perlin (au sens large)
  • les générateurs à base de placement de point
Bruit de Perlin

Dans la catégorie bruit de Perlin, je classe toute une série de bruits qui ne sont généralement pas mis sous ce vocable mais qui utilisent globalement une même procédure. Le vrai bruit de Perlin utilise le bruit à base de gradient, comme on le verra par la suite.

La procédure dont je parle est parfois appelée fractional brownian motion, ou fBm pour les intimes. Je l'ai nommée plus simplement fractal.

Elle consiste, à partir d'une fonction de bruit «simple» à combiner plusieurs octaves de différentes amplitudes et de différentes fréquences. Plus précisément, pour chaque octave supplémentaire, on divise par deux l'amplitude, on multiplie par deux la fréquence, et on additionne toutes ces octaves.

On peut appliquer cette technique à plusieurs types de bruit que nous allons détailler.

Bruit à base de valeur (value noise)

Le principe du bruit à base de valeur est simple. On génère une grille dont les coordonnées entières contiennent une valeur aléatoire fixe. Ensuite, pour un point (x,y), on regarde dans quelle case de la grille se trouve le point (éventuellement en répétant la grille de valeurs), puis on détermine les coordonnées (rx,ry) de ce point dans la case (c'est-à-dire qu'on enlève la partie entière de chaque coordonnée).

Ensuite, on effectue plusieurs interpolations avec les quatre points situés aux coins de la case de la grille correspondante. On fait d'abord une interpolation entre la valeur en A et la valeur en B avec comme coefficient rx, puis entre la valeur en D et la valeur en C avec la valeur rx, puis enfin entre les deux valeurs obtenues avec la valeur ry.

Comment interpoler deux valeurs ? Généralement, on utilise une interpolation linéaire. On utilise une fonction appelée traditionnellement lerp, définie de la manière suivante :

double lerp(double v0, double v1, double t) { return v0*(1-t)+v1*t; }

Pour t=0, on aura v0 et pour t=1, on aura v1. Et entre les deux, on aura une valeur intermédaire. Mais dans le cas de bruit, ça ne donne pas de beaux résultats. On va donc lisser la courbe d'interpolation et utiliser une fonction qu'on va appliquer à t :

double lerp(double v0, double v1, double t) { t = g(t); return v0*(1-t)+v1*t; }

On va choisir la fonction g pour qu'elle ait de bonnes propriétés. En particulier, si on ne veut pas d'angles, on va plutôt choisir une fonction dont la dérivée en 0 et en 1 est nulle. Si on prend une fonction polynômiale alors, on tombe sur un polynôme de degré 3 : -2 x3 + 3 x2. Si on veut en plus que la dérivée seconde soit nulle en 0 et en 1, on tombe sur un polynôme de degré 5 : 6 x5 - 15 x4 + 10 x3. On peut aussi choisir une fonction trigonométrique comme (1 - cos(pi * x)) * 0.5 mais cette fonction se rapproche beaucoup de notre polynôme de degré 3. Voici l'ensemble de ces fonctions dessinées sur un même graphe :

Voici le résultat sur les mêmes valeurs :

linear cubic quintic cosine

Généralement, le polynôme de degré 3 donne des résultats satisfaisants. On garde donc celui-ci :

Et avec 10 octaves, on obtient une carte tout à fait convenable (score d'érosion : 0,429078) :

Voir l'implémentation du bruit à base de valeur.

Bruit à base de gradient (gradient noise)

Le buit à base de gradient est le vrai bruit de Perlin, décrit dans Making Noise, que Ken Perlin a inventé pour le film Tron et qu'il a par la suite décrit en 1985. C'est une amélioration du bruit à base de valeur. L'idée au départ n'est pas de créer des cartes d'altitude mais des textures. Et de manière générale, on peut appliquer beaucoup des techniques vues ici pour créer des textures procédurales assez bluffantes.

Mais revenons à notre bruit à base de gradient. Par rapport au bruit à base de valeur, on ne définit pas des valeurs (aux coordonnées entières de la grille) mais des vecteurs, également appelés gradients. Ensuite, pour déterminer une valeur aux quatre coins de la case, on calcule un produit scalaire. Pour le point A, on calcule le produit scalaire entre le gradient défini au point A et le vecteur PA. Et pareil pour les trois autres. Enfin, on interpole ces quatre valeurs comme pour le bruit à base de valeurs.

Le résultat est meilleur qu'avec le bruit à base de valeur, où on distinguait bien les contributions des quatre coins. Maintenant, on a des formes plus variées :

Le résultat avec 10 octaves n'est pas mal du tout (score d'érosion : 0,433705) :

Voir l'implémentation du bruit à base de gradient.

Bruit à base de simplexe (simplex noise)

Le bruit à base de simplexe est une évolution du bruit à base de gradient et proposé par le même Ken Perlin. Le problème du bruit à base de gradient est qu'il requiert O(2n) interpolation pour un bruit à n dimensions. Ceci vient du fait qu'on utilise un hypercube qui a 2n sommets. Pour avoir moins de points, on va utiliser un objet à n dimensions qui possède le moins de points possible : c'est ce qu'on appelle un simplexe. En dimension 2, c'est un triangle. En dimension 3, c'est un tétraèdre. Et ainsi de suite. De manière générale, c'est un objet à n+1 points.

Ensuite, l'implémentation proposé par Ken Perlin est assez complexe. La difficulté consiste à calculer le triangle dans lequel on se situe. L'idée est d'appliquer une sorte de transvection qui va transformer nos triangles en demi-carrés. De cette manière, savoir si on est dans le demi-carré du dessus ou du dessous revient à savoir si rx est plus grand ou plus petit que ry. Dernière subtilité, c'est qu'on ne va pas avoir d'interpolations, ni de gradients tirés au hasard. Chaque coin va apporter une contribution qu'on va ajouter les unes aux autres. Ceci est fait pour accélérer la génération.

Au final, le résultat est plutôt convaincant :

Et avec 10 octaves, on observe des artefacts obliques. Je ne sais pas si c'est une erreur dans l'implémentation, mais ça se pourrait parce que ce type de bruit est supposé donner de bons résultats (score d'érosion : 0,452591) :

Voir l'implémentation du bruit à base de simplexe.

Bruit à base de cellule (cell noise)

Dernier bruit de la série, le bruit à base de cellule. Il porte aussi le nom de bruit de Worley (du nom de son inventeur, Steven Worley) ou de bruit de Voronoï (parce que visuellement, on observe un diagramme de Voronoï). L'algorithme général est bien différent de ce qu'on a pu voir jusqu'ici.

L'idée est de générer n points Qi dans l'espace, puis pour un point P, on définit les fonctions Fi qui représentent la distance au i-ème point le plus proche parmi Qi. Ensuite, le bruit est défini par la somme C1 * F1(P) + C2 * F2(P) + … + Cn * Fn(P) où les Ci sont des constantes prédéfinies.

Suivant les constantes qu'on choisit et la fonction utilisée pour la distance, on obtient des résultats assez différents les uns des autres. On a le choix entre prendre la distance euclidienne (distance associée à la norme 2), la distance de Manhattan (distance associée à la norme 1) ou la distance de Tchebychev ou Chebyshev (distance associée à la norme infini).

Examinons d'abord quelques ensembles de constantes classiques. On va utiliser dans ce cas une représentation en niveau de gris, parce que la représentation en couleurs ne rend pas bien. Le choix le plus logique est C1=1 et tout le reste à zéro, c'est là qu'on distingue le mieux le diagramme de Voronoï. Et en fait, on prend plutôt C1=-1 histoire d'avoir des bosses plutôt que des creux. On peut ensuite penser à C2=1 et tout le reste à zéro, ou C3=1 et tout le reste à zéro, et on voit apparaître des formes assez originales. Mais en fait, on obtient de bons résultats avec C1=-1 et C2=1 où on a l'impression d'avoir des collines les unes à côtés des autres. La distance utilisée est la distance euclidienne.

C1=-1 C2=1 C3=1 C1=-1, C2=1

Pour la suite, nous prendrons C1=-1 et C2=1. Et nous allons voir l'influence de la distance.

euclidean manhattan chebyshev

On constate que les distances de Manhattan et de Tchebychev produisent des formes très géométriques, avec des artefacts horizontaux et verticaux très présents.

Si on représente la combinaison gagnante en grand, ça donne :

Et on peut évidemment appliquer une fractale (score d'érosion : 0,386916). À noter que pour ces deux cartes, j'ai placé le niveau de l'eau à 0,1 plutôt que 0,5, et j'ai ajusté l'échelle présentée au début, sinon la majorité de la carte est sous l'eau.

Il faut faire attention à l'implémentation pour que la fractale marche bien et ne donne pas des trucs horribles. Il faut en fait répéter nos points à l'infini de manière virtuelle de manière à avoir une continuité dans le bruit, sinon les discontinuités apparaissent et on n'a pas un bruit cohérent. La conséquence, c'est que notre texture peut se répéter également (le haut joint avec le bas et la gauche joint avec la droite) et ça se voit assez clairement.

Voir l'implémentation du bruit à base de cellule.

Méthodes à base de placement de point

Voilà pour les méthodes à base de bruit de Perlin. Passons maintenant aux méthodes à base de placement de point. Il y en a deux, et la seconde est une amélioration de la première. La particularité de ces méthodes est qu'elles génèrent des cartes de tailles 2k+1. Pour avoir des tailles arbitraires, on génère une carte plus grande de la bonne taille et on prend une sous-partie de ce qui a été généré.

Déplacement du point médian (Midpoint displacement)

La première méthode s'appelle le déplacement du point médian. Elle est assez simple à décrire. On part d'un carré pour lequel on a défini quatre valeurs aux coins. Puis, on fait la moyenne des quatre coins, à laquelle on ajoute une petite variation proportionnelle au côté du carré, et cela définit la valeur du centre du carré. Reste alors à compléter les quatre carrés par quatre points, chaque point étant entre deux points du carré initial pour lesquels on va faire la moyenne et ajouter à nouveau une petite variation. Puis on recommence récursivement sur ces quatre carrés jusqu'à arriver à un pixel.

On obtient ce genre de carte (score d'érosion : 0,385764)

Le résultat montre des artefacts horizontaux et verticaux bien visibles. C'est la raison d'être de la méthode suivante.

Voir l'implémentation du déplacement du point médian.

Diamant-Carré (Diamond-Square)

La seconde méthode s'appelle l'algorithme du diamant-carré. Elle ressemble à la précédente mais elle est partagée en deux phases : la phase diamant et la phase carré. Pendant la phase diamant, on procède comme précédemment, on fait la moyenne des quatre coins, à laquelle on ajoute une petite variation proportionnelle au côté du carré, et cela définit la valeur du centre du carré. Puis on passe à la phase carré pour définir les quatre derniers points. La différence par rapport à précédemment, c'est qu'on utilise pas seulement les points du carré initial mais aussi les points des centres des carrés adjacents. La phase diamant a créé des diamants et chacun des points restants est donc au centre d'un de ces diamants, donc on utilise les quatre coins du diamant pour recréer des carrés en faisant la moyenne, à laquelle on ajoute une petite variation proportionnelle au côté du carré. Ainsi, on a partagé notre carré initial en quatre carrés et on peut appliquer la même méthode récursivement.

Et voici le résultat (score d'érosion : 0,382071)

L'impression visuelle est bien meilleure. Les artefacts ont complètement disparu. Cette carte servira de base pour la section suivante de cet épisode.

Voir l'implémentation de l'algorithme diamant-carré.

Autres méthodes

À côté de toutes les méthodes décrites précédemment et qui sont assez standard, il existe d'autres méthodes qu'on arrive à débusquer au hasard de la navigation. En voici une qui construit une carte à base collines. L'idée est de générer des collines, c'est-à-dire des demi-sphères de manière aléatoire. On les accumule et ça donne des formes assez sympas même s'il y a des artefacts visibles (score d'érosion : 0,480934).

Voir l'implémentation de l'algorithme des collines.

Modification de la carte

Maintenant qu'on a de jolies cartes, on va les modifier. En effet, ces cartes rendent bien mais elles n'ont pas forcément les bonnes caractéristiques. En particulier, aucune des cartes présentées précédemment n'a un score de bâtiments non-nul, ce qui signifie qu'elles ont toutes des pentes beaucoup trop importantes. Si on veut qu'elles s'approchent d'un relief réel ou qu'elles soient plus lisses, on peut appliquer divers filtres que je vais vous présenter.

Érosion

Pour rendre une carte plus réaliste, la première technique est de simuler de l'érosion. Voici trois techniques, présentées dans l'article Realtime Procedural Terrain Generation.

Érosion thermique

La première technique permet de simuler une érosion thermique. L'érosion thermique est celle qui provoque des éboulements. À cause de l'action des températures, le sol va se fissurer, puis s'effriter puis s'effondrer et va glisser si la pente le permet. On simule cette érosion de la manière suivante : pour toutes les cases, on regarde si la pente est supérieure à une limite fixée, puis si c'est le cas, on enlève une fraction de matière de la case qui va s'accumuler sur les cases adjacentes les moins élevées. On répète ce processus un certain nombre de fois et voilà ce qu'on obtient (score d'érosion : 0,475935).

On observe le tassement surtout sur les côtes qui ont pris un peu d'embonpoint.

Voir l'implémentation de l'érosion thermique.

Érosion hydraulique

La seconde technique permet de simuler une érosion hydraulique. L'érosion hydraulique est dûe à l'action de la pluie et du phénomène de sédimentation. On le simule avec quatre étapes. Première étape, de l'eau tombe du ciel uniformément sur le terrain. Deuxième étape, une partie du matériel présent sur le terrain se dissout dans l'eau. Troisième étape, l'eau ruisselle sur les pentes. Quatrième étape, l'eau s'évapore et le matériel qu'elle transportait se dépose au sol. De la même manière qu'avant, on répète ce processus un certain nombre de fois et voilà ce qu'on obtient (score d'érosion : 0,446365).

Malgré un temps de calcul bien plus élevé que pour l'érosion thermique, les différences sont assez imperceptibles visuellement. L'article montre qu'en fait, l'érosion thermique aplanit les zones à peu près plates et renforce les pentes, ce qui accroît le score d'érosion.

Voir l'implémentation de l'érosion hydraulique.

Érosion rapide

On a donc une technique rapide mais qui aplanit les pentes, et une technique lente qui renforce les pentes. Et on aimerait bien un mélange, c'est-à-dire une technique rapide qui renforce les pentes. Pour ça, un nouvel algorithme, appelé fast erosion, a été développé par l'auteur de l'article. Il reprend le principe de l'érosion thermique mais plutôt que de considérer des éboulements quand la pente est forte, il considère des éboulements quand la pente est faible. Et le résultat est conforme à celui qui était voulu. Voici le résultat (score d'érosion : 1,271748).

On constate bien que le résultat diffère vraiment de l'original. On voit bien de grandes zones planes apparaître. Et pour la première fois depuis le début, on a un score de bâtiment non nul sans être démentiel (score de bâtiment : 0,032020).

Voir l'implémentation de l'érosion rapide.

Transformation en île

Une des caractéristiques voulues pour un jeu vidéo est que l'univers de jeu doit être limité. Et pour cela, la méthode la plus courante, en particulier dans les RPG, est de jouer sur une île. Jusqu'à présent, notre terrain n'était pas une île. Nous allons voir deux techniques pour transformer un terrain quelconque en île.

Par les bords

La première technique, que j'ai imaginée moi-même (pour une fois), consiste à replier les bords de la carte. Mais pas n'importe comment. Si on applique un facteur linéaire en fonction de la distance au bord, on obtient des côtes droites. Sans compter que ça peut créer une discontinuité là où on a commencé à appliquer le repliement. J'ai donc essayé plusieurs fonctions.

J'ai commencé par la racine carré qui donnait des résultats plutôt satisfaisants mais on observait toujours cette discontinuité à la limite du repliement. Il me fallait donc une fonction qui ait une dérivée nulle en 1 (ce n'est pas obligatoire en 0, puisque c'est le bord de la carte donc la discontinuité ne se voit pas). Et là, on pense de suite à une fonction trigonométrique et en l'occurrence, sinus qui présente le bon profil. Le résultat commençait à devenir intéressant même si on observait des côtes droites. Cela vient du fait que la pente de la courbe sinus est supérieure à 1, ce qui fait que de petits changements sur la carte d'origine sont complètement occultés. L'idéal est donc d'avoir une pente inférieure à 1 mais un truc genre sinus. Et donc, j'ai combiné le sinus et la racine carrée pour obtenir le résultat que je souhaitais.

Voir l'implémentation de la transformation en île par les bords.

Par le milieu

La seconde technique, qui m'a été inspirée, consiste à multiplier notre carte par une fonction gaussienne en deux dimensions, la fameuse cloche. Simple, efficace, on peut également régler l'écartement pour ajuster l'île comme on le souhaite. Le principal inconvénient est que ça force quand même les îles à avoir une forme… de cloche.

Voir l'implémentation de la transformation en île par le milieu.

MapMaker

MapMaker est un logiciel que j'ai concocté pour expérimenter toutes ces techniques. Il permet à partir d'un fichier YAML de décrire un pipeline d'algorithmes, en partant d'un générateur puis en appliquant des modificateurs et enfin éventuellement un finaliseur.

Actuellement

Actuellement, toutes les techniques décrites ici ont été implémentées et fonctionnent (enfin, j'espère). MapMaker produit des fichiers au format portable pixmap qui a l'avantage d'être facile à générer même s'il n'est pas très optimal. Ensuite, convert est votre ami. Vous pouvez d'ailleurs voir les fichiers correspondant à tous les exemples présentés dans cet épisode si vous voulez une idée de comment ça se présente en vrai.

Pour la carte du tout début, j'ai commencé par la carte issue du diamant-carré. Puis j'ai appliqué une érosion rapide, puis un léger aplatissement (flatten) qui a tendance à creuser les vallées et que j'ai piqué ailleurs. Ensuite, j'ai appliqué un peu d'érosion thermique, histoire de créer des passages entre les plateaux créé par l'érosion rapide. Puis un petit lissage (smooth) qui est le lissage trivial que l'on fait en traitement d'image. Enfin, j'ai transformé mon terrain en île, en utilisant l'algorithme par les bords. Bon, on peut sans doute faire mieux, et j'ai tâtonné pour arriver à ce résultat, mais ça me convient.

Je n'ai pas cherché à optimiser la vitesse de génération ou la taille des cartes. Quand on manipule des cartes de 512x512, composé de double, ça fait la carte à 2Mio. On peut considérer que c'est beaucoup, ou que c'est peu, suivant le contexte. Pour avoir un ordre d'idée, en utilisant mon laptop de développement (Dell latitude E5530), voici quelques chiffres pour la génération de la carte du début. Pour le temps de génération :

generator: 'diamond-square' size: 513 x 513 duration: 43 ms modifier: 'fast-erosion' duration: 1064 ms modifier: 'flatten' duration: 21 ms modifier: 'thermal-erosion' duration: 19 ms modifier: 'smooth' duration: 6 ms modifier: 'islandize' duration: 11 ms

Ce qui est tout à fait raisonnable. Valgrind me dit que j'utilise un peu moins de 158Mio de mémoire (en cumulé). Là en revanche, ça pourrait être mieux.

Sur la même carte mais en version 8193x8193, c'est-à-dire 256 fois plus grande :

generator: 'diamond-square' size: 8193 x 8193 duration: 8772 ms modifier: 'fast-erosion' duration: 324826 ms modifier: 'flatten' duration: 5662 ms modifier: 'thermal-erosion' duration: 5691 ms modifier: 'smooth' duration: 1920 ms modifier: 'islandize' duration: 3143 ms

Il faudrait faire plus de tests mais ça a l'air de passer à l'échelle de manière linéaire. Je n'ai pas fait de Valgrind mais je pense que en mémoire ça passe à l'échelle également de manière linéaire, ce qui nous ferait dans les 40Gio (en cumulé). Bon d'accord, pour la prochaine version, je vais m'occuper de cet aspect.

Possibilités

Les possibilités d'extension sont nombreuses. Je ne sais pas si je vais les implémenter, mais je les mets ici pour mémoire.

Tout d'abord, on peut expérimenter des bruits plus récents, tel que le wavelet noise (qui a quand même l'air assez difficile à implémenter). On peut aussi expérimenter des méthodes alternatives de génération ou de modification si on a beaucoup d'idées.

La limite la plus visible, c'est le pipeline. En vrai, on aimerait bien avoir un graphe d'opérateurs qu'on pourrait manipuler et brancher à travers une interface graphique. Et bien, bonne nouvelle, ce genre d'outil existe ! Ça s'appelle World Machine mais malheureusement, c'est propriétaire. Mais ça permet de faire des choses assez complexes. Je dois avouer que je n'ai pas les capacités pour faire ce genre de choses, je suis parfaitement inexpérimenté en interface graphique, mais, il existe des tutoriaux pour Qt5 qui pourraient servir de base.

Bon, mais c'est bien gentil ces cartes d'altitude, mais pour l'instant, ce n'est pas très exploitable en l'état. C'est l'objet de la deuxième partie de cet épisode : voir comment transformer une carte d'altitude en un truc jouable. Et du coup, je pourrai remplacer ma vieille île toute pas belle en quelque chose de plus joli. Mais ça, ça sera la prochaine fois (et ça sera sans doute moins long) !

Pour aller plus loin

Pour finir, voici quelques liens pour ceux qui veulent aller plus loin.

Tout d'abord, je ne saurais trop vous conseiller d'aller voir la libnoise. La bibliothèque en elle-même est un peu vieille et l'implémentation est faite pour du bruit 3D, ce qui n'est pas toujours adapté pour du bruit 2D (ça complexifie et ça alourdit les calculs). Mais les tutoriaux sont très pédagogiques pour bien comprendre ce qu'est le bruit cohérent. De même que l'exemple d'une planète complète construite avec de multiples générateurs et modificateurs.

Pour ceux qui ne maîtrisent pas la langue de la perfide albion, il y a le tutoriel de Jérémy Cochoy qui est très bien fait. Il décortique le bruit de Perlin mais aussi le bruit à base de simplexe. C'est très progressif, il y a beaucoup d'illustrations, bref, un bon point d'entrée.

Notons aussi le projet Fractal Terrain Generation sur Google code qui, à défaut de fournir beaucoup de code, a un excellent wiki avec des explications sur comment implémenter divers types de bruit ainsi que les méthodes à base de placement de point.

Enfin, pour tout savoir sur la notion de bruit, il y a toujours le tutoriel du Red Blog Games qui vous fera voir du bruit de toutes les couleurs. Le même Red Blog Games fournit également un tutoriel pour la création de cartes polygonales dont j'ai déjà parlé mais qui est un véritable délice.

Télécharger ce contenu au format Epub

Lire les commentaires

Retrouvez « Les Ateliers Python » de l'AFPy, au NUMA de Paris, lundi 24 mars à 19h

6 mars, 2014 - 22:09

Le lundi 24 mars 2014, de 19h00 à 22h00, l'AFPy organise un évènement au NUMA (39 rue du Caire, 75002 Paris, https://www.numaparis.com/). Cette première édition consiste en 4 présentations de 20 minutes chacune autour du thème :

Python pour DevOps : Ansible & SaltStack

Au programme :

19:00 — Présentation #1 (20 minutes + questions)

« Commencer petit : Ansible et Vagrant, une recette simple. »
par Mathieu Lecarme

19:30 — Présentation #2 (20 minutes + questions)

« Scaler avec Ansible : Faire évoluer son architecture. »
par Mathieu Lecarme

20:00 — Pause et annonces de l'Afpy

20:15 — Présentation #3 (20 minutes + questions)

« Notre boîte à outils Saltstack : déploiements, compilations et tests automatisés, clefs privées, réseau. »
par Feth Arezki, avec Julien et Gaston

20:45 — Présentation #4 (20 minutes + questions)

« Utilisations avancées de Salt: QA, supervision, Test-Driven Infrastructure. »
par Nicolas Chauvat

21:15 — Mise en pratique et discussions autours d'un apéro

22:00 — Fin

Inscriptions sur le site du NUMA :
https://www.numaparis.com/Evenements/Python-pour-DevOps-Ansible-SaltStack

Ansible est une plate-forme logicielle libre pour la configuration et la gestion des ordinateurs, qui combine le déploiement de logiciels multi-nœuds, l'exécution des tâches ad-hoc et la gestion de configuration. Ansible gère les différents nœuds par SSH et ne nécessite l'installation d'aucun logiciel supplémentaire. Les modules communiquent avec JSON et la sortie standard et peuvent être écrits dans n'importe quel langage de programmation. Les descriptions réutilisables de systèmes sont exprimées en YAML (via wikipedia)
En savoir plus : http://www.ansible.com/

Saltstack est un environnement libre d'exécution distribué et asynchrone, qui fonctionne sur toutes les plateformes (Unix, MacOS, Windows, embarqué, etc.) avec une empreinte mémoire réduite. Qu'il s'agisse d'exécuter une commande sur plusieurs machines, de définir puis appliquer une configuration système, de récolter les mesures faites par des sondes, de lancer des machines virtuelles ou de gérer un "cloud": Salt a une solution.
En savoir plus : http://www.saltstack.com/

Python est un langage de programmation. Il favorise la programmation impérative structurée et orientée objet. Il est doté d'un typage dynamique fort, d'une gestion automatique de la mémoire par ramasse-miettes et d'un système de gestion d'exceptions. Le langage Python est placé sous une licence libre proche de la licence BSD1 et fonctionne sur la plupart des plates-formes informatiques, des supercalculateurs aux ordinateurs centraux, de Windows à Unix en passant par Linux et Mac OS, avec Java ou encore .NET. Il est conçu pour optimiser la productivité des programmeurs en offrant des outils de haut niveau et une syntaxe simple à utiliser. Il est également apprécié par les pédagogues qui y trouvent un langage où la syntaxe, clairement séparée des mécanismes de bas niveau, permet une initiation plus aisée aux concepts de base de la programmation. (via wikipedia)
En savoir plus : http://python.org

L’AFPy (Association Francophone Python) est une association à but non lucratif dont les objectifs sont la promotion du langage Python et la création d'une communauté autour de cet outil, dans l'esprit des logiciels libres. Cette association est née du regroupement de personnes de la communauté Python et Zope francophone. Elle a pour vocation de s'adresser à tous les utilisateurs francophones.
La promotion du langage Python est faite à travers :
* L'animation d'un site web communautaire ;
* Le soutien aux projets de logiciels libres développés en Python ;
* L'organisation d'évènements nationaux et régionaux ;
* La participation des membres à diverses conférences ;
* La traduction de la littérature Python en français ;
* La création de documentations techniques ;
* Ce que vous y apporterez.
En savoir plus : http://www.afpy.org

Télécharger ce contenu au format Epub

Lire les commentaires

Accès libre à la bibliothèque numérique d'ENI pendant 3 jours

10 février, 2014 - 19:21

Vous le savez sûrement, les éditions ENI font partie des amis de LinuxFr.org qui permettent de motiver et récompenser chaque mois les meilleurs contributeurs du site, accompagnés en cela par les éditions Eyrolles et Diamond (GNU/Linux Mag aka, GLMF). D'ailleurs, chacun de ces éditeurs a déjà mis en place des solutions d'accès numérique à leurs livres et/ou revues que ce soient des ebooks au format ePub, HTML, PDF ou des bases documentaires accessibles en ligne sous forme d'abonnement., pour essayer de s'adapter aux nouveaux usages et nouveaux supports.

Afin de mieux faire connaître leur bibliothèque numérique, les éditions ENI mettent en libre accès pendant trois jours l'ensemble de leur catalogue de livres numériques, au format HTML, du 11 février 00h01 au 13 février 23h59. Comme il y en a pour tous les goûts (ou presque), vous devriez trouver votre bonheur, même si vous êtes contre votre gré dans un environnement propriétaire. On rappelle que parmi les auteurs, certains sont des lecteurs ou contributeurs de LinuxFr.org, comme Sébastien Rohaut par exemple. Ce qui fait que leur catalogue ne manque pas d'ouvrages sur les technologies libres et Open Source, que ce soit, en vrac, sur

  • GNU/Linux, principalement Debian, Ubuntu et RedHat ;
  • la stack LAMP et les CMS qui tournent dessus : WordPress, Joomla, Drupal, etc. ;
  • les SGBD (MySQL, PostgreSQL, etc.),
  • le courriel : Zimbra, Postfix, Amavis, etc.
  • ou encore des outils dédiés : Alfresco, Talend, Squid, Piwik, Nagios (à quand un ouvrage sur Shinken ? ;-)

Bref, vous avez trois jours (sur vos pauses de boulot !) pour vous faire une idée sur le fond de leurs ouvrages, la forme de la bibliothèque numérique, voire choisir votre récompense pour votre prochaine contribution sur LinuxFr.org !

  • Capture d'écran d'une recherche du terme Linux

  • Extrait d'un ouvrage

Télécharger ce contenu au format Epub

Lire les commentaires

Revue de presse de l'April pour la semaine 6 de l'année 2014

10 février, 2014 - 19:21

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

[Techno-Car] Linux devrait s'imposer en voiture d'ici 2020

Par Benoît Solivellas, le vendredi 7 février 2014. Extrait:

Une étude du cabinet IHS affirme que Linux sera le premier système d’exploitation utilisé par les les systèmes multimédia embarqués, à partir de 2020. Un domaine dominé aujourd’hui par QNX.

Lien vers l'article original: http://techno-car.fr/linux-devrait-simposer-en-voiture-dici-2020

[Les Numeriques] Interview: tout savoir sur VLC, le logiciel français le plus utilisé

Par Vincent Alzieu, le vendredi 7 février 2014. Extrait:

VLC est le logiciel français le plus utilisé au monde. Il a été téléchargé 1,6 milliards de fois. Interview en 10 questions d'un des responsables du projet: Jean-Baptiste Kempf.

Lien vers l'article original: http://www.lesnumeriques.com/appli-logiciel/interview-tout-savoir-sur-vlc-logiciel-francais-plus-utilise-a1777.html

[Le Petit Courrier du Val de Loir] Des ordinateurs financés par la Région pour 25 lycéens

Par Maxime Davoust, le jeudi 6 février 2014. Extrait:

L'opération Ordipass mise en oeuvre par la Région Pays de la Loire, permet à des lycéens de bénéficier d'un ordinateur à prix réduit.

Lien vers l'article original: http://www.lecourrier-lecho.fr/2014/02/08/des-ordinateurs-finances-par-la-region-pour-25-lyceens

[Le Matin] Quand les hackers piratent le vivant

Par Simon Koch, le jeudi 6 février 2014. Extrait:

Le génie génétique se pratique aussi en hobby, dans des laboratoires communautaires et indépendants. Thomas Landrain, figure du mouvement «DIY bio» en France, a plaidé sa cause lors de la conférence Lift à Genève.

Lien vers l'article original: http://www.lematin.ch/high-tech/hackers-piratent-vivant/story/30454173

[Silicon.fr] La DARPA publie un catalogue de projets open source

Par David Feugey, le jeudi 6 février 2014. Extrait:

Le DARPA Open Catalog regroupe les logiciels que cette agence de la défense américaine est en droit de publier. Un vaste ensemble d’outils open source qui devrait vivement intéresser la communauté.

Lien vers l'article original: http://www.silicon.fr/darpa-publie-catalogue-projets-open-source-92540.html

[JDN] La fondation Eclipse fête ses 10 ans

Par Antoine Crochet-Damais, le jeudi 6 février 2014. Extrait:

Lancée par IBM pour développer une infrastructure Java Open Source, la fondation Eclipse orchestre 10 ans après sa création près de 250 projets et compte plus de 200 membres.

Lien vers l'article original: http://www.journaldunet.com/developpeur/java-j2ee/eclipse-10e-anniversaire-0214.shtml

[PC INpact] Jacques Sauret, de Terra Nova, nous parle d’e-administration

Par Xavier Berne, le lundi 3 février 2014. Extrait:

Alors que Matignon a présenté il y a plusieurs semaines différentes mesures en faveur de la modernisation de l’action publique (sur l'Open Data, la mutualisation au sein des systèmes d’information de l’État, l'e-administration,…), PC INpact a pu interroger Jacques Sauret, l’ancien président de l'Agence pour le développement de l'administration électronique (ADAE). Et pour cause: l’intéressé a travaillé pendant plusieurs mois sur la rédaction d'un rapport à ce sujet pour la fondation Terra Nova, traditionnellement située sur la gauche de l’échiquier politique.

Lien vers l'article original: http://www.pcinpact.com/news/85468-interview-jacques-sauret-terra-nova-nous-parle-d-e-administration.htm

[InformatiqueNews.fr] Qui fabrique Linux?

Par Guy Hervier, le lundi 3 février 2014. Extrait:

Depuis 1991 suite à l’appel de Linus Torvald, Linux a fait bien du chemin. Il est au cœur de presque tous les systèmes informatiques, à l’exception des PC sur lesquels Windows règne encore en maître.

Lien vers l'article original: http://www.informatiquenews.fr/qui-fabrique-linux-9717

Télécharger ce contenu au format Epub

Lire les commentaires

L'April lance une campagne d'adhésion « Donnons la priorité au logiciel libre »

10 février, 2014 - 17:25

L'April lance une campagne d'adhésion. Elle trouve dans ses nombreux adhérents à la fois les moyens de ses actions et la légitimité nécessaire pour mener le travail institutionnel qui est le sien. La formidable mobilisation de la campagne d'adhésion de 2008 a permis à l'April de mener un important travail de défense et de promotion, particulièrement au niveau institutionnel.

L'année 2013 a été marquée au niveau national par le travail de sensibilisation effectué par l'April auprès des responsables politiques, notamment les députés et sénateurs, lors de plusieurs projets de loi (éducation, enseignement supérieur et recherche, consommation, etc.) pour faire connaître les enjeux du logiciel libre. À noter également le travail d'enquête et d'information sur le dossier Open Bar Microsoft/Défense. Cela a notamment débouché sur l'adoption, pour la première fois, d'une disposition législative donnant la priorité au logiciel libre. Notre activité de sensibilisation au logiciel libre s'est également portée vers un large public avec notamment la présence de l'association à de nombreux événements. Suivant également l'exemple italien, le thème de cette campagne est "Donnons la priorité au logiciel libre".

Cette priorité est aujourd'hui particulièrement pertinente au regard des métamorphoses de l'informatique de ces dernières années.

Les services hébergés, qui même s'ils s'appuient souvent sur des logiciels à code ouvert, dépouillent les utilisateurs de la maîtrise de leur informatique. Les plate-formes mobiles proposant une informatique plus verrouillée que jamais, implémentent pleinement les principes de l'informatique déloyale identifiés comme un danger par l'association depuis 2002. Les révélations d'Edward Snowden sur PRISM ont illustré de façon spectaculaire que les principes d'ouverture et de vérification par la communauté du code source sont une nécessité. Les principes de liberté de l'utilisateur et de contrôle de son informatique sont donc plus pertinents que jamais. Le logiciel libre n'est certainement pas la solution ultime et unique à ces problématiques, mais il constitue une brique essentielle et nécessaire dans le combat pour les libertés.

L'April, avec le soutien de Richard Stallman , appelle donc tout à chacun à adhérer ou à ré-adhérer pour soutenir son action avec l'objectif à minima de péréniser ses moyens d'action ou de les renforcer et de contribuer à construire une société plus libre, plus égalitaire et plus fraternelle.

Télécharger ce contenu au format Epub

Lire les commentaires

Mons, le 20 février : Comprendre les licences de logiciels libres

10 février, 2014 - 11:56

Ce jeudi 20 février 2014 à 19h se déroulera la 26ème séance montoise des Jeudis du Libre de Belgique.

Le sujet de cette séance : Comprendre les licences de logiciels libres

Thématique : Licences logicielles

Public : Project managers|entreprises|développeurs|étudiants

L’animateur conférencier : Robert Viseur est Docteur en Sciences Appliquées, Assistant dans le service d’Économie et de Management de l’Innovation à la Faculté Polytechnique de l’Université de Mons (UMONS) et Ingénieur de recherche Expert au Centre d’Excellence en Technologie de l’Information et de la Communication (CETIC) à Charleroi. Ses domaines d’expertise sont le management de l’Innovation, le logiciel libre et les technologies d’indexation (moteurs de recherche).

Description : Les logiciels libres sont progressivement devenus d’utilisation courante dans les développements de logiciels. Les utilisateurs ne disposent cependant pas toujours de la connaissance des droits et des obligations découlant de l’utilisation de logiciels couverts par des licences libres et open source. Nous proposons, à l’occasion de cette conférence, d’aborder:

  • les différents types de licences libres et open source,
  • les risques et bénéfices associés à l’utilisation de ces licences,
  • les effets de ces licences dans le contexte du cloud computing et du Web mobile,
  • les outils pour l’audit juridique de codes sources,
  • l’impact de ces licences sur les modèles d’affaires des entreprises.

Par ailleurs, le modèle juridique élaboré pour les logiciels tend aujourd’hui à essaimer dans d’autres domaines. Les données, les œuvres culturelles ou le matériel peuvent aujourd’hui être couverts par des licences inspirées par celles des logiciels libres et open source. Un rapide panorama de ces licences sera dès lors présenté.

Lieu de cette séance : Microsoft Innovation Center, Boulevard Initialis, 1 à 7000 Mons, 1er étage (cf. le plan).

La participation sera gratuite et ne nécessitera que votre inscription nominative, de préférence préalable, ou à l’entrée de la séance. Merci d’indiquer votre intention (même incertaine) en vous inscrivant via la page d'inscription.

Cette séance sera suivie d’un verre de l’amitié, offert par le Microsoft Innovation Center.

Si vous êtes intéressé(e) par ce cycle mensuel, n’hésitez pas à consulter l’agenda et à vous inscrire sur la liste de diffusion afin de recevoir systématiquement les annonces.

Pour rappel, les Jeudis du Libre se veulent des rencontres autour de thématiques des Logiciels Libres. Les rencontres montoises se déroulent chaque troisième jeudi du mois, et sont organisées dans des locaux et en collaboration avec des Hautes Écoles et Facultés Universitaires du Pôle Hainuyer d’enseignement supérieur impliquées dans les formations d’informaticiens (UMONS, HEH et Condorcet), et avec le concours de l’A.S.B.L. LoLiGrUB, active dans la promotion des logiciels libres.

Télécharger ce contenu au format Epub

Lire les commentaires

Et si la meilleure des cartes RAID était libre ?

10 février, 2014 - 00:16

ZFS comme son nom ne l'indique pas n'est pas juste un système de fichiers. Plus je l'utilise plus je dirais même que le système de fichiers n'est qu'une des fonctionnalités sympa de ZFS. ZFS est avant tout un moyen d'organiser de façon efficace ses ressources de stockage, une sorte de carte RAID surpuissante.

NDA : merci à Nicolas Casanova, Tonton Th, NeoX, Jiehong, jcr83 et ZeroHeure pour leur relecture attentive

Sommaire Histoire d'une libération

L'histoire dit que Jeff Bonwick aurait commencé à développer ZFS en 2001, mais il faudra attendre le début de l'année 2005 et Solaris 10 pour pouvoir en profiter.

Solaris 10, c'est aussi la libération du code sous licence CDDL et l'écosystème OpenSolaris qui, depuis le rachat de Sun par Oracle, se fédère autour du projet Illumos avec des distributions comme OpenIndiana, SmartOS ou NexentaStor.

La licence CDDL est un dérivé de la licence MPL reconnue comme libre par la FSF et OpenSource par l'OSI. Hélas elle est à la fois incompatible avec la GPL et la licence BSD. C'est pour cela entre autre que ZFS ne peut pas être compilé en dur dans le noyau FreeBSD mais doit être chargé sous forme d'un module externe.

Oracle ne publiant plus de versions OpenSource, des développeurs d'Illumos, de FreeBSD, de ZFS on Linux et de ZFS OSX, mais également de nombreuses entreprises ont fondé en septembre 2013 le projet OpenZFS, visant à poursuivre et coordonner le développement du système de fichier.

Le premier changement fut que les numéros de version furent abandonnés au profit des feature flags (masque permettant de savoir si telle ou telle fonctionnalité est supportée). Ainsi sous FreeBSD on est passé de la version 28 à la version 5000 !

Le projet travaille sur la qualité du code et en particulier les tests, la portabilité ainsi que les futures fonctionnalités.

Autre fait marquant dans l'actualité de ZFS, le 28 mars 2013 le projet ZFS on Linux a publié sa première version stable, ce qui semble faire de ZFS le système de fichier le plus largement géré depuis le vFAT (ou presque).

ZFS est en effet aujourd'hui porté sous :

  • Solaris
  • IllumOS et ses dérivés
  • FreeBSD
  • NetBSD
  • Linux
  • Mac OSX

À noter que son architecture d'origine (Solaris Sparc / Solaris x86), lui a permis d'être insensible aux problèmes de boutisme (Endianness).

Zpool

Un zpool est une entité qui regroupe des ressources matérielles telles que des disques, de la mémoire, des périphériques d'échange rapide (SSD entre autres). La commande homonyme sert à contrôler le tout.

Des disques

Les disques servent au stockage des données. Ils peuvent être configurés en miroir (raid 1) en stripe (raid 0) ou en raid Z{2,3} (variante autour du raid5/6) comportant un nombre plus ou moins grand de disques de parité (1 pour le raidZ, 2 pour le raidZ2, 3 pour le raidZ3).

Par exemple, pour créer l'équivalent d'un raid10, on agrège deux miroirs :

root@host:~# zpool create storage mirror da0 da1 mirror da2 da3 root@host:~# zpool status storage pool: storage state: ONLINE scan: resilvered 481G in 7h50m with 0 errors on Mon Oct 14 19:07:10 2013 config: NAME STATE READ WRITE CKSUM storage ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 da0 ONLINE 0 0 0 da1 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 da2 ONLINE 0 0 0 da3 ONLINE 0 0 0

On notera que le stripe est implicite. Autre exemple, un raidZ3 :

root@host:~# zpool create nfs raidz3 c4t0d0 c4t1d0 c4t2d0 c4t3d0 c4t4d0 c4t5d0 c4t6d0 c4t7d0 c4t8d0 c4t9d0 c4t10d0 c4t11d0 c4t12d0 c4t13d0 c4t14d0 c4t15d0 c4t16d0 c4t17d0 c4t18d0 c4t19d0 c4t20d0 c4t21d0 c4t22d0 root@host:~# zpool status nfs pool: nfs state: ONLINE scan: resilvered 314G in 34h30m with 0 errors on Thu Dec 12 22:50:17 2013 config: NAME STATE READ WRITE CKSUM nfs ONLINE 0 0 0 raidz3-0 ONLINE 0 0 0 c4t0d0 ONLINE 0 0 0 c4t1d0 ONLINE 0 0 0 c4t2d0 ONLINE 0 0 0 c4t3d0 ONLINE 0 0 0 c4t4d0 ONLINE 0 0 0 c4t5d0 ONLINE 0 0 0 c4t6d0 ONLINE 0 0 0 c4t7d0 ONLINE 0 0 0 c4t8d0 ONLINE 0 0 0 c4t9d0 ONLINE 0 0 0 c4t10d0 ONLINE 0 0 0 c4t11d0 ONLINE 0 0 0 c4t12d0 ONLINE 0 0 0 c4t13d0 ONLINE 0 0 0 c4t14d0 ONLINE 0 0 0 c4t15d0 ONLINE 0 0 0 c4t16d0 ONLINE 0 0 0 c4t17d0 ONLINE 0 0 0 c4t18d0 ONLINE 0 0 0 c4t19d0 ONLINE 0 0 0 c4t20d0 ONLINE 0 0 0 c4t21d0 ONLINE 0 0 0 c4t22d0 ONLINE 0 0 0

Un disque peut également être configuré en HotSpare pour remplacer à la volée un disque défaillant :

zpool add tank spare ada12

Il est déconseillé d'utiliser ZFS au dessus d'un RAID matériel. Autant que faire se peut, on configurera ses disques en JBOD ou idéalement pass-through. Il y a deux raisons à cela.

Tout d'abord ZFS est conçu pour utiliser le cache des disques. En empilant une autre couche de cache (celle du contrôleur RAID) on risque de dégrader fortement les performances.

Mais surtout, le RAID matériel étant vu comme un disque unique, on risque de priver ZFS de toute redondance au niveau des données et donc de le priver de tout moyen de se réparer en cas d'incohérence.

Un RAID matériel sera donc dans la plupart des cas au mieux nuisible et au pire dangereux. En production, un zpool a besoin de redondance. Sinon, il n'offre aucune sécurité.

Le seul point pour lequel un contrôleur RAID est intéressant est la présence d'une BBU (batterie de secours permettant d'éteindre les disques proprement en cas de crash) qui permet d'avoir une stratégie d'IO plus agressive. Nous y reviendrons.

Dans la plupart des cas, un contrôleur SATA ou SAS basique fera très bien l'affaire, voire, si on souhaite un grand nombre de disques, un HBA standard couplé à des boîtiers JBOD.

Toujours au niveau performance, penser à activer la commande TRIM lorsqu'elle est disponible — comme par exemple sous FreeBSD avec le pilote ada — car elle permet d'indiquer aux périphériques de type SSD quels blocs ne sont plus utilisés et ainsi d'optimiser leurs performances.

Enfin, sachez que si vos disques présentent quasiment tout le temps des secteurs de 512 octets, ils gèrent en réalité 4k ou 8k. Aligner le zpool sur cette taille permet d'éviter beaucoup d'opérations de copie en mémoire et donc d'accélérer considérablement les performances. Généralement, avec des disques récents, on ne se pose pas de questions et on part sur 4k.

Pour ce faire, il faut positionner correctement la propriété ashift au moment de la création du zpool. Il s'agit du logarithme en base 2 de la taille des secteurs. Ainsi 2ashift est la plus petite IO possible sur le périphérique.

Il faudra utiliser :

  • le pseudo device gnop sous FreeBSD ;
  • sd.conf sous Illumos ;
  • Et l'option -o ashift=12 à la commande zpool sous Linux.

Cette dernière méthode devrait se généraliser.

Pour retrouver l'ashift utilisé, on utilise la commande zdb :

zdb tank | grep ashift Commandes pour survivre

Maintenant que nous avons un zpool avec de beaux disques, il faut le garder en vie.

Configuration

A l'image des cartes RAID, ZFS stocke sa configuration directement sur les disques sous formes de métadonnées y compris les points de montage.

Il est toutefois possible de la sauvegarder en copiant le fichier défini par la propriété cachefile. Ce fichier contient une image de la configuration trouvée sur les disques et détectée par ZFS à l'initialisation.

Cette configuration est portable. Ainsi un zpool créé depuis un liveCD peut très bien être réutilisé par la suite par un autre système. C'est ce qu'on fait généralement lorsqu'on veut utiliser ZFS pour sa partition racine.

On marque le pool comme libéré :

zpool export pool

On peut ensuite le réimporter :

zpool import pool

Si on a sauvegardé le cachefile :

zpool import pool -c /path/to/cachefile Maintenance

Au niveau des diagnostics, la commandes de base est zpool status, qui affiche l'état des différents périphériques ainsi que l'état de cohérence du pool, et un résumé des dernières erreurs.

zpool iostat permet de monitorer l'activité en live :

zpool iostat nfs 1 10 capacity operations bandwidth pool alloc free read write read write ---------- ----- ----- ----- ----- ----- ----- nfs 6,24T 14,6T 145 91 2,39M 4,15M nfs 6,24T 14,6T 108 43 13,6M 115K nfs 6,24T 14,6T 334 0 41,8M 0 nfs 6,24T 14,6T 526 0 65,5M 0 nfs 6,24T 14,6T 510 233 63,8M 28,3M nfs 6,24T 14,6T 511 718 63,9M 69,7M nfs 6,24T 14,6T 579 0 72,5M 0 nfs 6,24T 14,6T 698 0 87,3M 0 nfs 6,24T 14,6T 443 0 55,3M 0 nfs 6,24T 14,6T 579 0 72,5M 0

zpool scrub permet de lancer une vérification exhaustive des données. Contrairement au fsck, le scrub peut être effectué à chaud.

On peut bien entendu remplacer un disque, le mettre offline ou online :

zpool replace tank sda sdb zpool offline tank c1t3d0 zpool online tank c1t3d0 zpool replace tank c1t3d0

L'ensemble des propriétés du pool s'obtient avec zpool get all, zdb donne des informations de debug et de cohérence et enfin zpool history retrace les événements survenus.

zpool history 2013-12-11.10:36:15 zpool offline nfs c4t22d0 2013-12-11.12:17:25 zpool replace -f nfs c4t22d0 c4t22d0 2012-09-19.16:05:03 zpool create -f rpool c3t0d0s0 2012-09-19.16:09:57 zpool set bootfs=rpool/ROOT/openindiana rpool 2012-09-19.17:31:58 zpool upgrade rpool Le cache

Si on cherche des performances, il est important de donner à notre zpool de quoi gérer du cache, autrement dit de la mémoire et des SSD.

Le premier niveau de cache réside en mémoire. Il utilise une variante de l'algorithme Adaptive Replacement Cache développé et breveté par IBM.

Par défaut, ZFS va utiliser jusqu'à 75% de la mémoire pour les systèmes ayant moins de 4 Gio et toute la mémoire moins 1 Gio pour les autres. Il est conseillé de limiter cet usage si on a besoin de mémoire par ailleurs (par exemple pour un SGBD). Il faut en particulier faire attention avec l'hyperviseur Xen à bien limiter le arc_max_size à 80% de la mémoire de l'hyperviseur et non à celle de la machine.

Cela se fait via sysctl sous FreeBSD, dans /etc/system sous Solaris, dans /etc/modprobe.d/zfs.conf sous Linux.

Lorsqu'on vise les performances, une bonne formule est 8 Gio + 1 à 2 Gio par Tio. Ceci dit on peut être bien plus modeste suivant le contexte. Pour de l'archivage de log ou des backups par exemple inutile de mettre autant de RAM. Dans tous les cas avec moins de 4 Gio de RAM votre machine ne sera pas taillée pour les performances. ZFS désactive un tas de choses dans ce cas et en particulier le prefetch.

Bien évidemment 1 Gio par Tio c'est bien jusqu'à une certaine limite et suivant les volumes à stocker, cela peut rapidement devenir irréaliste. Heureusement ZFS possède un second niveau de cache, le L2ARC, qui utilise du stockage rapide comme par exemple des SSD.

zpool add storage cache ada1

Pour connaître l'état de fonctionnement du cache ARC il faut regarder les variables du noyau avec l'outil approprié (kstat, sysctl, /proc fu), soit par le biais d'un script tel que arcstat.pl (Solaris) ou sysutils/zfs-stats (FreeBSD).

Il existe trois types de cache (tout, rien, uniquement les métadonnées). Mais cette configuration se fait plutôt suivant l'usage par volume.

Gestion des écritures synchrones

Les développeurs sont des gens bien gentils, mais s'ils pouvaient arrêter d'ouvrir leurs fichiers avec le flag O_FSYNC à tout bout de champ, cela arrangerait tout le monde. Ce flag indique en effet que les écritures ayant lieu sur ce descripteur de fichier ne doivent être acquittées que lorsque l'ensemble des données sont effectivement écrites sur le disque, ce qui est globalement lent.

Pour pallier ce problème, on peut ajouter au zpool un périphérique tampon chargé d'accélérer les écritures synchrones. Le ZFS Intent Log (ZIL) stockera de façon temporaire et sécurisée les données à écrire, permettant un acquittement précoce sans pour autant sacrifier la cohérence et la sécurité. Par exemple on peut utiliser deux disques SSD en miroir :

zpool tank add log mirror ada12 ada13

Il est également possible d'utiliser le ZIL pour toutes les écritures en désactivant le mécanisme d'écriture asynchrone (writeback). À moins d'avoir un périphérique magique, cela devrait être plus lent mais peut toutefois être une option si on ne veut pas perdre de transactions lors d'un arrêt brutal. On peut également faire plus rapide et moins sûr à condition d'avoir du matériel secouru par BBU (battery backup unit). Mais cela se configure alors volume par volume et non plus au niveau du zpool.

Les volumes

Une fois notre pool opérationnel, on peut l'utiliser pour créer des volumes. Il en existe deux sortes :

  • les zvols, qu'on peut utiliser comme un périphérique de bloc quelconque ;
  • les datasets, qui contiennent un système de fichier ZFS et qu'on peut monter où bon nous semble.

En fait ce sont les mêmes, à quelques propriétés près.

Pour un dataset :

zfs create -o mountpoint=/var tank/var

On peut ensuite créer des sous volumes :

for i in log spool tmp empty lib; do zfs create tank/var/$i done

Enfin, on peut donner les propriétés qu'on souhaite :

zfs set exec=off tank/var/tmp zfs set refquota=10G tank/var/log zfs set sharenfs=on tank/isos

Pour un volume, il suffit de spécifier la propriété volumesize :

zfs create -V 8G tank/swap

Le volume est alors accessible dans /dev/zvol/tank/swap :

mkswap /dev/zvol/tank/swap swapon /dev/zvol/tank/swap

On peut aussi faire du thin-provisionning :

zfs create -s -V 100G tank/vm-01-data zfs set shareiscsi=on tank/vm-01-data

Comme on le voit, il est très simple de manipuler tout cela.

Propriétés

La commande zfs permet de manipuler les propriétés des zvols et des datasets telles que :

  • la gestion des ACL POSIX :
aclinherit=discard | noallow | restricted | passthrough aclmode=discard | groupmask | passthrough | restricted
  • les options de montage traditionnelles :
canmount=on | off | noauto mountpoint=path | none | legacy exec=on | off readonly=on | off setuid=on | off atime=on | off
  • un certain nombre d'options concernant la façon de stocker les données :
checksum=on | off | fletcher2 | fletcher4 | sha256 | noparity compression=on | off | lzjb | gzip | gzip-N | zle | lz4 dedup=on | off | verify | sha256[,verify]

Il est à noter que la déduplication a un effet certain sur les performances. Pour l'heure, l'utilisation des clones reste la meilleure façon de partager les mêmes données entre différents utilisateurs.

Le taux de compression est donné par la propriété compressratio du dataset ou du volume. Le taux de déduplication apparaîtra lui dans les propriétés du zpool.

Ici, l'outil zdb est également très utile. zdb -c vérifiera l'ensemble des sommes de contrôle, zdb -D donnera des informations détaillées sur la déduplication, la compression et notamment le ratio dedup x compress / copies qui correspond au taux effectif de place gagné. On y trouvera notamment :

  • le type de cache :
primarycache=all | none | metadata secondarycache=all | none | metadata

Le cache metadata est particulièrement utile pour les systèmes de backup qui comparent les métadonnées des fichiers sources et destination (rsync : building filelist). Désactiver complètement le cache ne présente pas à ma connaissance d’intérêt si ce n'est celui d'éviter dans certains cas précis les effets de double cache.

  • les quotas utilisateurs :
userquota@user=size | none groupquota@group=size | none
  • la taille du volume.

Si pour un zvol la taille est fixée une fois pour toute à la création (volsize), celle d'un dataset peut être décidée de façon plus flexible. Par défaut, un dataset n'est limité que par la taille du zpool.

On peut toutefois très bien fixer sa taille maximale avec la propriété quota (qui inclut les descendants et les snapshots) ou refquota (qui n'inclut aucun descendant). On peut également lui réserver de l'espace (reservation et refreservation). Enfin — et ce peut être intéressant en particulier avec des SGBD — on pourra modifier la taille des enregistrements (recordsize).

  • méthode de synchronisation :
sync=standard | always | disabled

standard correspond au mécanisme de writeback par défaut, always traite toutes les écritures comme synchrones (utilisation massive du ZIL s'il existe). disabled nécessite un matériel secours par des batteries (BBU) mais augmente considérablement les performances. À ce propos, il est à noter qu'il ne suffit pas qu'il y ait une BBU pour qu'elle fonctionne. Il s'agit d'un dispositif chimique globalement aussi fiable qu'une batterie de téléphone. sync=disable signifiant qu'en cas d'arrêt brutal votre système de fichiers sera tout simplement mort, la supervision des BBU et des tests de fonctionnement réguliers sont le moindre des préalables.

  • et d'autres.

Les nostalgiques pourront créer des systèmes de fichiers insensibles à la casse (casesensitivity=insensitive), ou plus intéressant : s'assurer que tous les noms de fichiers sont écrits en UTF-8 (utf8only=on). La propriété copies placée à 2 ou 3 (1 par défaut) assurera qu'il existe plusieurs copies des données, indépendamment du raid sous-jacent. snapdir=visible permettra de naviguer dans les snapshots à partir d'un dossier .snap à la racine du dataset et jailed/zoned de savoir si le dataset a été délégué à un container de type jail ou zone. Enfin, la commande zfs permet aussi de paramétrer les partages réseaux :

sharesmb=on | off | opts sharenfs=on | off | opts shareiscsi=on | off | opts

Mais soyons francs, on ne choisit pas un FS parce qu'il nous évite l'édition de /etc/exports.

Les captures

Nous avons vu que dans un zpool on peut créer deux types de ressources : des volumes et des datasets. Il en existe une troisième, les snapshots. Un snapshot correspond à l'état figé d'un volume ou un dataset à un instant t. Leur prise est très rapide et aussi simple qu’utile :

  • sauvegarde à chaud ;
  • rollback après une mise à jour ;
  • clonage ;
  • rotation des backups ;
zfs snapshot pool/volume@nom_du_snapshot

L'espace utilisé sur un zpool par les différents éléments est souvent un peu complexe à déterminer :

zfs list -o space NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD tank 111G 322G 0 151G 0 171G tank/apache 111G 32K 0 32K 0 0 tank/joris 111G 165G 0 165G 0 0 tank/local 111G 4,44G 0 4,44G 0 0 tank/poudriere 111G 1,60G 0 33K 0 1,60G ...

L'usage global est la somme de quatre valeurs :

  • l'espace utilisé par les snapshots ;
  • l'espace utilisé par le dataset ;
  • l'espace réservé ;
  • et enfin l'espace utilisé par les sous-volumes.

Pour comprendre le poids des snapshots, prenons un exemple. Créons un dataset et deux fichiers de 20Mio :

zfs create tank/linuxfr dd if=/dev/zero of=/home/linuxfr/1 bs=1M count=20 20+0 records in 20+0 records out 20971520 bytes transferred in 0.028457 secs (736950437 bytes/sec) dd if=/dev/zero of=/home/linuxfr/2 bs=1M count=20 20+0 records in 20+0 records out 20971520 bytes transferred in 0.028432 secs (737599308 bytes/sec)

Cela nous donne :

zfs list -o space tank/linuxfr NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD tank/linuxfr 111G 40,0M 0 40,0M 0 0

Si maintenant on prend un snapshot :

zfs snapshot tank/linuxfr@1 zfs list -o space -t all | egrep 'linuxfr|USED' NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD tank/linuxfr 111G 40,0M 0 40,0M 0 0 tank/linuxfr@1 - 0 - - - -

Le snapshot ne fait aucun poids dans la mesure où les données sont les mêmes dans le snapshot et dans le dataset.

Si on supprime mon fichier 1 :

zfs list -o space -t all | egrep 'linuxfr|USED' NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD tank/linuxfr 111G 40,1M 20,0M 20,0M 0 0 tank/linuxfr@1 - 20,0M - - - - -

20 Mio ont basculé du USEDDS vers USEDSNAP. La taille d'un snapshot est égale au différentiel de données entre le dataset et le snapshot. Plus le snapshot sera ancien, plus l'espace qu'il occupe sera significatif.

Maintenant, imaginons qu'on ait détruit le fichier 1. On peut le retrouver simplement :

zfs rollback tank/linuxfr@1

Mais dans ce cas, tout autre modification sera perdue. Il est possible de remonter le snapshot ailleurs en faisant un clone :

zfs clone tank/linuxfr@1 tank/linuxfr_rescue zfs list -t all | grep linuxfr tank/linuxfr 40,1M 111G 20,0M /home/linuxfr tank/linuxfr@1 20,0M - 40,0M - tank/linuxfr_rescue 1K 111G 40,0M /home/linuxfr_rescue

On peut maintenant récupérer notre fichier dans /home/linuxfr_rescue sans écraser /home/linuxfr. Si maintenant on décide de remplacer tank/linuxfr par son clone, il nous faudra promouvoir celui-ci.

Observons :

zfs destroy tank/linuxfr cannot destroy 'tank/linuxfr': filesystem has children use '-r' to destroy the following datasets: tank/linuxfr@1

tank/linuxfr ne peut être détruit sans détruire tank/linuxfr@1 :

zfs destroy tank/linuxfr@1 cannot destroy 'tank/linuxfr@1': snapshot has dépendent clones use '-R' to destroy the following datasets: tank/linuxfr_rescue

tank/linuxfr@1 ne peut être détruit sans détruire tank/linuxfr_rescue :

Promouvons …

zfs promote tank/linuxfr_rescue zfs list -t all | grep linuxfr tank/linuxfr 20K 111G 20,0M /home/linuxfr tank/linuxfr_rescue 40,0M 111G 40,0M /home/linuxfr_rescue tank/linuxfr_rescue@1 1K - 40,0M

Le snapshot tank/linuxfr@1 est devenu tank/linuxfr_rescue@1. En général la suite logique est :

zfs destroy tank/linuxfr zfs rename tank/linuxfr_rescue tank/linuxfr zfs list -t all | grep linuxfr tank/linuxfr 40,0M 111G 40,0M /home/linuxfr tank/linuxfr@1 1K - 40,0M -

Un clone n'est pas un système de fichier indépendant. Il hérite de la même lignée de snapshot que le volume dont il est issu.

Savoir recevoir

Pour dupliquer réellement un volume, il faut utiliser send/receive

zfs snapshot tank/linuxfr@1 zfs send tank/linuxfr@1 | zfs receive tank/linuxfr2 zfs list -t all | grep linuxfr tank/linuxfr 20,0M 111G 20,0M /home/linuxfr tank/linuxfr@1 0 - 20,0M - tank/linuxfr2 20,0M 111G 20,0M /home/linuxfr2 tank/linuxfr2@1 0 - 20,0M -

ici contrairement au clone, tank/linuxfr et tank/linuxfr2 sont deux dataset totalement indépendants .

On peut vouloir les garder synchronisés. Pour cela on peut faire des send incrémentaux.

dd if=/dev/zero of=/home/linuxfr/3 bs=1M count=20 zfs snapshot tank/linuxfr@2 zfs send -i tank/linuxfr@1 tank/linuxfr@2 | zfs receive tank/linuxfr2

On n'envoie que la différence entre les deux snapshots soit 20 Mio. Pour savoir si un dataset a besoin d'être resynchronisé, on peut regarder la propriété written

zfs get written tank/linuxfr NAME PROPERTY VALUE SOURCE tank/linuxfr written 0 dd if=/dev/zero of=/home/linuxfr/4 bs=1M count=20 20+0 records in 20+0 records out 20971520 bytes transferred in 0.028963 secs (724077463 bytes/sec) zfs get written tank/linuxfr NAME PROPERTY VALUE SOURCE tank/linuxfr written 20,0M - zfs snapshot tank/linuxfr@3 zfs send -v -i tank/linuxfr@2 tank/linuxfr@3 | zfs receive tank/linuxfr2 send from @2 to tank/linuxfr@3 estimated size is 20,0M total estimated size is 20,0M TIME SENT SNAPSHOT

Bien évidemment, vu qu'on passe par un pipe on peut faire des trucs sympas, comme synchroniser une machine distante :

zfs send -v -i tank/linuxfr@2 tank/linuxfr@3 | ssh machine2 zfs receive tank/linuxfr

Ou dans une version plus élaborée

zfs send -i tank/linuxfr@2 tank/linuxfr@3 | pv -L 1m --quiet | ssh -c blowfish -i .ssh/replication_dsa zfs receive tank/linuxfr

Et là, on tient le Graal :) ou presque… En effet, souvent lorsqu'on cherche à répliquer un volume sur une machine distante, c'est que la machine principale va mal. Pour l'heure l'opération peut être laborieuse, puisqu'en cas de plantage il faudra tout reprendre depuis le début. Heureusement la possibilité de reprendre un send / receive interrompu est dans les objectifs du projet OpenZFS.

Réplication et haute dispo

Utiliser Send / Receive pour assurer la disponibilité des données lors du crash d'une machine est une idée tentante ; c'est par exemple ce que fait hybridcluster.com avec une plate-forme certes propriétaire mais largement documentée. Il s'agit de mettre en place un démon monitorant l'état des datasets au travers par exemple de l'interface dtrace et de déclencher la réplication afin de maintenir un jeu de datasets passifs aussi proche que possible de l'original. Il faut toutefois bien comprendre que ce type de réplication est forcément asynchrone et que sur une plate-forme à forte densité d'écriture la perte de données en cas de bascule est inévitable.

Pour l'heure les logiciels gérant la synchronisation de volumes au sein d'un parc sont souvent des scripts shells manquant de robustesse ou d'intelligence. L'un des obstacles à l'écriture de logiciels plus avancés est l'obligation de passer par l’exécution de commandes shell. Il existe bien une libzfs et une libzpool, mais ce sont des bibliothèques privées sans interface fixe. La libzfs_core devrait résoudre se problème.

En pratique la consolidation des données au travers du réseau à base de Send / Receive fonctionne plutôt bien à condition d'en accepter les limites.

Si on cherche une vraie solution de haute disponibilité libre, il faudra se tourner vers les outils classiques tels que les couches de réplication temps réel en mode bloc des systèmes sous-jacents (DRBD pour Linux, HAST, pour FreeBSD) couplé par exemple à du VRRP ou encore un système de fichier distribué comme GlusterFS.

Si par contre on tolère du propriétaire, on pourra faire appel à RSF-1. C'est la solution généralement retenue par les marchands d'appliances.

Tout cela pour dire que finalement ZFS n'est pas un système de fichier distribué et n'a pas la prétention de l'être. Ceci dit, vu ses capacités de redondance et sa flexibilité, on peut parier que la question devrait en exciter plus d'un.

Conclusion

Pour conclure, un peu de poésie dans ce monde de brutes :

wget http://archive.zfsonlinux.org/debian/pool/main/z/zfsonlinux/zfsonlinux_2%7Ewheezy_all.deb dpkg -i zfsonlinux_2~wheezy_all.deb apt-get update apt-get install debian-zfs

Et hop ! zfs dans ta Debian :-)

Télécharger ce contenu au format Epub

Lire les commentaires