Blog entries by Arthur Lutz [19]

Lancement du blog de la communauté salt francaise

2014/09/25 by Arthur Lutz

La communauté salt est bien vivante. Suite au meetup de septembre, elle s'est doté d'un petit site web :

http://salt-fr.afpy.org
http://www.logilab.org/file/266455/raw/Screenshot%20from%202014-09-25%2014%3A32%3A27.png

Nous éspérons pouvoir continuer à rassembler les enthousiasmes autour de salt lors de ces rendez-vous tous les 2 mois. J'ai donc publié le compte rendu du meetup sur ce site.


Compte rendu présentation Salt à Solution Linux

2014/05/21 by Arthur Lutz

Logilab était à l'édition 2014 de Solutions Linux qui se déroulait au CNIT à Paris. David Douard participait à la table ronde sur les outils libres pour la supervision lors de la session Administration Système, Devops, au cours de laquelle un certain nombre de projets libres ont été mentionnés : nagios, shinken, graphite, ElasticSearch, logstash, munin, saltstack, kibana, centreon, rsyslog.

http://www.logilab.org/file/248048/raw/solutionlinux.png

Suite à des présentations sur OpenLDAP, LXC, btrfs et ElasticSearch David Douard a présenté notre approche agile de l'administration système articulée autour de Salt et en particulier le principe de l'administration système pilotée par les tests (diapos) (Test-Driven Infrastructure).

https://www.logilab.org/file/248098/raw/Screenshot%20from%202014-05-21%2017%3A55%3A35.png

Merci aux organisateurs de Solutions Linux pour cette édition 2014.


Quelques pointeurs présentés lors d'un atelier sur le web sémantique à Nantes

2014/05/14 by Arthur Lutz

À l'appel du DataLab Pays de la Loire, nous avons co-animé (avec Hala Skaf-Molli) un atelier sur le web sémantique à la Cantine Numérique de Nantes.

Voici quelques diapos avec essentiellement des pointeurs pour donner des exemples de réalisations web sémantique mais aussi pour appuyer les concepts présentés. Vous trouverez les diapos de Hala Skaf sur sa page web (dans les prochains jours).

Si vous avez raté cette session et êtes intéressé par le sujet, n'hésitez pas à le faire savoir au DataLab.

http://www.datalab-paysdelaloire.org/auth/public/images/datalab.png

Mini compte rendu Meetup Debian à Nantes

2014/03/13 by Arthur Lutz

Hier soir, je suis allé au premier meetup Debian à Nantes. C'était bien sympatique, une vingtaine de personnes ont répondu présent à l'appel de Damien Raude-Morvan et Thomas Vincent. Merci à eux d'avoir lancé l'initiative (le pad d'organisation).

//www.logilab.org/file/228927/raw/debian-france.jpg

Après un tour de table des participants, et de quelques discussions sur debian en général (et une explication par Damien de l'état de Java dans Debian), Damien a présenté l'association Debian France ainsi que le concours du nouveau contributeur Debian. La liste d'idées est longue et sympatique n'hésitez pas à aller jeter un oeil et faire une contribution.

Ensuite Thomas nous a présenté l'équipe de traduction francaise de debian et ses principles de fonctionnement (qualité avant quantité, listes de discussion, IRC, processus de traduction, etc.).

//www.logilab.org/file/228931/raw/saltstack_logo.jpg

Finalement, j'ai rapidement présenté Salt et sa place dans Debian. Pour l'archive publique : les diapos de la présentation.

À la prochaine !

Pour faire un commentaire, il faut s'authentifier ou s'enregistrer.


Retour sur MiniDebConf Paris 2014

2014/03/05 by Arthur Lutz
http://www.logilab.org/file/226609/raw/200px-Mini-debconf-paris.png

Nous sommes heureux d'avoir participé à la MiniDebConf Paris.

Nous avons sponsorisé l'évenement mais aussi effectué deux présentations :

Avec une cinquantaine de participants sur les deux jours, c'est toujours agréable de rencontrer la communauté francaise autour de Debian. Merci donc à l'association Debian France d'avoir organisé cette conférence.


InfoLab Rennes - 17 décembre

2013/12/18 by Arthur Lutz

InfoLab Rennes - 17 décembre

Le mardi 17 décembre, nous avons participé à la 4ème rencontre du groupe national infolab à Rennes. Voici quelques notes et reflexions prises à cette occasion. La journée a été dense, donc vous ne trouverez que des bribes des sujets dans ce compte rendu.

http://www.fing.org/local/cache-vignettes/L680xH165/_info_lab_V3_logo_petit-d6f63.jpg

Présentation générale le matin

Une présentation générale de la mission "infolab" menée par le Fing a permis d'initier la réflexion et la discussion sur ce qu'est un infolab. Sarah Labelle (Université Paris XIII), Amandine Brugières (Poitiers), Claire Gallon (Nantes, Libertic), Simon Chignard (Rennes), Charles Nepote (Marseille), et Thierry Marcou (Paris) se sont succédé pour expliquer les réflexions et outils en cours d'élaboration. Nous avons noté :

  • une liste de 150 outils répertoriés pour aider à manipuler les données,
  • un prototype de méthodologie,
  • des documents récapitulatifs sur les différents métiers autour de la donnée.

L'assemblée se pose la question de comment rendre accessible les technologies, les données, les outils. Il nous semble qe cette démarche n'est possible qu'en ayant des mécanismes transparents, reproductibles et collaboratifs. Nous y voyons donc les principes de "logiciel libre", des "standards" et des "outils collaboratifs". Comment rendre le traitement de la donnée reproductible et transparent ?

À Logilab, nous avons adoptés les outils suivants pour traiter la données :

  • CubicWeb (en python) avec un certain nombre de cubes (modules type plugins)
  • les standards du web sémantique pour faire de la publication et de l'échange de données (publication de dumps, negociation de contenu et sparql endpoints),
  • les outils de versionning et de collaboration (en logiciel libre) : mercurial qui permettent une co-construction décentralisée sur du code source, mais aussi sur certaines données (voir par exemple les jeux de données publié sur github).

Au sujet de l'annuaire des outils : comporte-t-il une évaluation de l'accessibilité ? D'un outil WYSIWYG à un outil de programmation... quelle grille de notation ? Faut-il faire son propre graphisme ou est-ce "configurable" sans compétence... Grille d'évaluation aussi sur l'autonomie de l'outil ? Par exemple utiliser Google Drive pose des questions des droits sur les données (exemple récent sur la propriété des données lorsqu'elles sont affichées sur une carte google à travers l'API). Dans le domaine du logiciel libre, avec lequel nous pouvons établir un bon nombre de parallèles, il existe des méthodes formelles d'évaluation.

D'autres questions ont été abordées :

  • stockage et pérennité des démarches et des données : dans l'industrie logicielle une formalisation pertinente en rapport avec cette question est le semantic versionning qui permet d'établir une traçabilité. Sur l'archivage, de nombreuses solutions sont envisageables mais pas forcément formalisées (stockage P2P, hébergement mutualisé, etc).
  • le contrôle d'accès : qui accède comment, comment partage-t-on de manière sécurisée ? Ceci nous fait penser aux études menées par le MIT sur leur projet OpenPDS.
  • comment rendre le crowdsourcing efficace ? Des outils comme CrowdCarfting (PyBossa en Python) permettraient de "simplement" définir une application de crowdsourcing (eg. cartographie, annotation d'image, classement d'image, OCR collaboratif, etc.) mais comment faire le lien avec les données "officielles" ?

Atelier l'après-midi

Suite à une visite du labfab de Rennes, nous avons participé aux ateliers, étant deux personnes de chez Logilab, nous avons pu participer à trois ateliers :

  • travail sur la charte des infolabs,
  • datavisualisation et réflexions autour des données,
  • comment mener une campagne de crowdsourcing et sur quels types de données.

Dans l'atelier sur le crowdsourcing, nous avons parlé rapidement de CKAN et http://datahub.io/ qui sont des moteurs de recherche sur les jeux de données ouverts.

La suite

Nous avons participé à DataPride (à Nantes) et comptons participer dans le futur à DataLab (à Nantes) et DataShacker (à Paris), s'agit-il d'initiatives "compatibles" avec les principes des infolabs ? Sont-ce des infolabs ? La suite de l'initiative nous le dira sûrement.

Les prochaines rencontres Infolab auront probablement lieu à Bordeaux en janvier et à Paris lors de Futur en Seine (du 12 au 15 juin : au CNAM, à la Gaité Lyrique, au Square Emile Chautemps).


Rencontre autour de SaltStack lors de l'OpenWorldForum

2013/09/25 by Arthur Lutz

Suite à l'organisation du sprint français autour de SaltStack, nous continuons d'essayer de fédérer la communauté française utilisatrice (ou tout simplement curieuse) de solutions de gestion centralisées autour de la technologie Salt (qui est écrit en Python et que nous pouvons donc facilement adapter à nos besoins en contribuant au projet).

http://openworldforum.org/static/pictures/Calque1.pnghttp://saltstack.com/images/SaltStack-Logo.png

Au sein de l'OpenWorldForum nous animons un SaltStack meetup / BOF le jeudi 3 octobre de 18h30 à 20h30 avec Thomas Hatch fondateur de SaltStack. La totalité de l’événement (dont le meetup) est gratuit, il suffit de s'inscrire.

Logilab tiendra un stand le jeudi et le vendredi lors du forum, n'hésitez pas à venir discuter avec nous. Le TDI (Test-Driven Infrastructure), qui consiste à appliquer le TDD (Test-driven development) (développement piloté par les tests) à l'administration système sera un des thèmes de notre présence.


Compte rendu PGDay France 2013 (Nantes) - partie 2/2

2013/07/01 by Arthur Lutz

Ora2Pg: Migration à Grande Vitesse par Gilles Darold

L'outil ora2pg permet de jouer une migration d'Oracle à Postgresql. Malgré notre absence de besoin de ce type de migration, cette présentation fut l'occasion de parler d'optimisation diverses qui peuvent être appliqué à des imports massifs tel que nous pouvons en pratiquer à Logilab.

Par exemple :

  • utilisation prioritaire de COPY plutôt que INSERT,
  • supprimer les indexes/contraintes/triggers/sequences (les créer en fin d'import),
  • maintenir un _work_mem_ élevé (pour la création des index et contraintes),
  • augmenter les checkpoin_segments (>64/1Gb).

Quelques réglages systèmes peuvent être mis en place le temps du chargement (on les rebranche une fois que le serveur passe en "production") :

  • fsync=off
  • full_page_writes=off
  • synchronous_commit=off
  • WAL (Write Ahead Log) sur des disques SSD
  • kernel : vm.dirty_background_ratio = 1
  • kernel : vm.dirty_ratio = 2

Coté Postresql, les paramètres suivants sont probablement à modifier (les chiffres sont à titre d'exemple, la configuration matérielle est bien particulière, par exemple 64G de RAM, voir les diapos pour le détail):

  • shared_buffers = 10G
  • maintenacen_work_mem = 2G
  • checkpoint_segments = 61
  • checkpoint_completion_target = 0.9
  • wal_level = minimal
  • archive_mode = off
  • wal_buffer = 32 Mo
  • désactiver les logs
http://ora2pg.darold.net/ora2pg-logo.png

Pour aller plus loin voir le support de présentation (5).

Vers le Peta Byte avec PostgreSQL par Dimitri Fontaine

Dimitri Fontaine a admirablement bien traité cette question complexe qu'est la montée à l'échelle en terme de volume de données. Son approche fut très didactique, avec, à chaque concept, un rappel de ce dont il s'agisait. Par exemple, parlant du MVCC, il explique qu'il s'agit de plusieurs définitions en parallèle d'une même ligne. Ensuite on décide avec VACUUM quelle version doit être visible par tout le monde. Par défaut AUTOVACCUM se déclenche quand 20% des données ont changé.

Face aux difficultés et aux inconvénients de stocker la totalité d'une PetaByte sur un seul serveur, Dimitri Fontaine a évoqué les solutions possible en terme d'architecture distribuée pour permettre de stocker ce PetaByte sur plusieurs serveurs répartis. La "Bi-Directional Replication" (qui sera dispo dans le futur) permetterait d'avoir plusieurs bases SQL qui séparément stockent une partie des données (cf EVENT TRIGGERS). Un approche complémentaire serait d'utiliser plproxy qui par des procédures stockées permet de répartir les requêtes sur plusieurs serveurs.

http://www.logilab.org/file/150419/raw/Screenshot%20from%202013-07-01%2010%3A25%3A46.png

Finalement, un point qui nous a paru pertinent : il a parlé de haute disponibilité et des flous techniques qui entourent le sujet. Il faut bien faire la différence entre la disponibilité des données et du service. Par exemple, en WARM STANDBY les données sont disponibles mais il faut redémarrer Postgresql pour fournir le service alors que en HOT STANDBY les données sont disponibles et le serveur peut fournir les services.

Pour aller plus loin voir le support de présentation (6).

Comprendre EXPLAIN par Guillaume Lelarge

Utiliser EXPLAIN permet de débugger l’exécution d'une requête SQL ou de l'optimiser. On touche assez rapidement au fonctionnement interne de Postgresql qui est relativement bien documentés. Guillaume Lelarge a donc, à l'aide de nombreux exemples, présenté des mécanismes plutôt bas niveau de Postgresql.

Notons entre autres les différents types de scans dont les noms sont relativement explicites :

Dans la même veine, les types de tris :

  • external sort (sur disque),
  • quicksort (en mémoire).

Mais aussi, prenez le temps de lire les exemples sur son support de présentation (7)

Conclusion

https://www.pgday.fr/_media/pgfr2.png

PGDay.fr est une conférence que nous pouvons vivement vous recommander, proposant un savant mélange des différentes questions auxquelles nous sommes confrontées lorsque nous travaillons avec des bases de données. Aussi bien en tant qu'administrateur système, développeur, ou utilisateur de SQL. Il va sans dire que le niveau technique était très pointu. Les présentations restaient pourtant accessibles. Les orateurs et organisateurs étaient disponibles pour des interactions, permettant de prolonger la réflexion et les discussions au delà des présentations.

Nous envisageons d'ores et déjà d'aller à l'édition 2014! À l'année prochaine...

http://www.logilab.org/file/150100/raw/2e1ax_default_entry_postgresql.jpg

Compte rendu PGDay France 2013 (Nantes) - partie 1/2

2013/07/01 by Arthur Lutz

Quelques personnes de Logilab ont assisté aux PGDay 2013 à Nantes. Voici quelques points qui nous ont marqués.

http://www.cubicweb.org/file/2932005/raw/hdr_left.png

Gestion de la capacité des ressources mémoire d'un serveur PostgreSQL par Cédric Villemain

Cédric Villemain nous a exposé plusieurs pistes d'investigation de la gestion mémoire de Postgresql.

On peut employer des outils Linux tels que vmstat, pmap, meminfo, numactl, mais aussi des outils spécifiques à Postgresql, tels que pg_stat (hit ratio), pg_buffercache (audit de la mémoire cache), pgfincore (audit du cache de l'OS).

Il faut mettre des sondes sur les tables et indexes critiques de manière à avoir une idée du fonctionnement "normal" pour ensuite détecter le fonctionnement "anormal". À Logilab, nous utilisons beaucoup munin, pour lequel plusieurs greffons Postgresql sont disponibles : munin pg plugins et pymunin.

Pour aller plus loin voir le support de présentation (1).

Les nouveautés de PostgreSQL 9.3 par Damien Clochard

Damien Clochard a fait une très synthétique présentation des fonctionnalités de la nouvelle version de PostgreSQL 9.3. Le cycle de release de Postgresql dure 1 an, donc la periode de beta est courte, il faut que la communauté soit impliquée pour tester rapidement. Damien en profite pour chanter les louanges de PostgreSQL, qui est, selon lui, le SGBD le plus dynamique au monde: 1 version majeure par an, 4-5 versions mineures par an, et un support de 5 ans des versions majeures.

Actuellement, cela signifie que 5 versions majeures sont maintenues (notamment en terme de sécurité) en parallèle : 8.4, 9.0, 9.1, 9.2, 9.3beta1. Notons donc que la version 9.3 qui sort bientôt sera donc supportée jusqu'à 2018.

http://www.logilab.org/file/150442/raw/elephant.png

Pour les nouveautés, difficiles à résumer, notons néanmoins :

  • des gains de performance,
  • des verrous possibles sur les clés étrangères,
  • une gestion mémoire plus fine,
  • la possibilité de faire des pg_dump en parallèle (--jobs),
  • scénarios supplémentaires de réplication,
  • possibilité de "bascule rapide" en architecture répliquée,
  • facilitation de mise en place d'un serveur clone (génération automatique du fichier recovery.conf),
  • vue matérialisées,
  • opérateurs supplémentaires pour JSON (citation "MongoDB avec la tranquilité (ACID)"),
  • les requètes LATERAL
  • extensibilité avec des processus supplémentaires permettant des opérations de maintenance, de supervision ou d'optimisation,
  • des backends supplémentaires pour les "Foreign Data Wrappers" (introduits en 9.1),
  • possibilité de séparer le fichier de configuration en plusieurs sous-fichiers (utile pour une pilotage par SaltStack par exemple).

Damien en a profité pour parler un peu des points forts prévus pour la version 9.4 :

  • simplification de la montée en charge,
  • réplication logique (répliquer une seule table par exemple),
  • parallélisation des requêtes (multi-coeurs),
  • stockages internes

En bref, concis et alléchant. Vivement qu'on ait cette version en production.

En attendant on a profité pour l'installer à partir des entrepôts Debian gérés par la communauté Postgresql.

Pour aller plus loin voir le support de présentation (2).

"Ma base de données tiendrait-elle la charge ?" par Philippe Beaudouin

Philippe Beaudoin a utilisé pour cette analyse une combinaison de pgbench (injection), et la table pg_stat_statements qui collecte les statistiques sur l'utilisation mémoire des requêtes : produit une table avec les query, nombre d'appels, temps passé, nombre de lignes, etc.

L'idée générale est d'établir un profil de charge transactionnel sur la production pour pouvoir comparer avec la pré-production ou la future plateforme.

Pour éviter de devoir copier les données de production (lent, problème de confidentialité, etc), il est conseillé d'utiliser "generate_series" pour remplir la base de données de données de test.

pgbench utilise des scenario TPC-B (Transaction Processing Performance Council Benchmarks) Pour chaque scénario (4 scénarios dans son exemple) on a une cible TPS (transaction par secondes). Il recommande de faire attention à ne pas modifier considérablement la taille de la base avec les scénarios (ex. trop de DELETE, ou trop d'INSERTs).

Un astuce pour charger le cache linux

find <files> -exec dd if='{}' of=/dev/null\;

Si on ne sait pas quels fichiers charger, on peut utiliser pg_relation_filepath(oid) FROM pg_class where relname like 'tbl%' pour trouver en SQL quels fichiers contiennent les données.

Nous avons demandé si un outil de type GOR (flux UDP de la production vers la pre-production ou le serveur de développement pour les requêtes HTTP) existait pour Postgresql.

http://www.logilab.org/file/150448/raw/gor.png

Réponse : Tsung contient un mode proxy qui permet d'enregistrer la production, ensuite de la rejouer en pre-prod, mais pas en mode live. À priori il serait possible de combiner plusieurs outils existant pour faire cela (pgShark ?). La problématique n'est pas simple notamment lorsque les bases de données divergent (index, series, etc).

Pour aller plus loin voir le support de présentation (3).

PostGIS 2.x et au delà par Hugo Mercier

Nous avons trouvé la présentation réussie. Elle introduisait les concepts et les nouveautés de PostGIS 2.x. Ayant intégré des fonctionnalités de PostGIS à CubicWeb et travaillant un peu sur la visualisation en WebGL de données stockées dans CubicWeb+Postgresql, nous avons pu réfléchir à des possibilités de délégation de traitement à la base de donnée.

http://www.logilab.org/file/150441/raw/Screenshot%20from%202013-07-01%2010%3A30%3A00.png

Nous nous sommes aussi interrogés sur le passage à l'échelle d'applications web qui font de l'affichage de données géographiques, pour éviter d'envoyer au navigateurs un volume de données trop important (geoJSON ou autre). Il y aurait des architectures possible avec une délégation à Postgresql du travail de niveaux de zoom sur des données géographiques.

Pour aller plus loin voir le support de présentation.


Retour Agile Tour Nantes 2012 - présentation et pistes à explorer

2012/12/04 by Arthur Lutz

Nous utilisons les méthodes agiles depuis la création de Logilab. Nous avons parfois pris des libertés avec le formalisme des méthodes connues, en adaptant nos pratiques à nos clients et nos particularités. Nous avons en chemin développé nos propres outils orientés vers notre activité de développement logiciel (gestion de version, processus sur les tickets, intégration continue, etc).

https://www.logilab.org/file/113044?vid=download

Il est parfois bon de se replonger dans la théorie et d'échanger les bonnes pratiques en terme d'agilité. C'est pour cette raison que nous avons participé à l'étape nantaise de l'Agile Tour.

Logiciels libres et agilité

Plutôt que d'être simples spectateurs, nous avons présenté nos pratiques agiles, fortement liées au logiciel libre, dont un avantage indéniable est la possibilité offerte à chacun de le modifier pour l'adapter à ses besoins.

Premièrement, en utilisant la plate-forme web CubicWeb, nous avons pu construire une forge dont nous contrôlons le modèle de données. Les processus de gestion peuvent donc être spécifiques et les données des applications peuvent être étroitement intégrées. Par exemple, bien que la base logicielle soit la même, le circuit de validation des tickets sur l'extranet n'est pas identique à celui de nos forges publiques. Autre exemple, les versions livrées sur l'extranet apparaissent directement dans l'outil intranet de suivi des affaires et de décompte du temps (CRM/ERP).

Deuxièmement, nous avons choisi mercurial (hg) en grande partie car il est écrit en python ce qui nous a permis de l'intégrer à nos autres outils, mais aussi d'y contribuer (cf evolve).

Notre présentation est visible sur slideshare :

http://www.logilab.org/file/113040?vid=download

ou à télécharger en PDF.

Behaviour Driven Development

Le BDD (Behaviour Driven Development) se combine avec des tests fonctionnels haut niveau qui peuvent être décrits grâce à un formalisme syntaxique souvent associé au langage Gherkin. Ces scénarios de test peuvent ensuite être convertis en code et exécutés. Coté Python, nous avons trouvé behave et lettuce. De manière similaire à Selenium (scénarios de test de navigation Web), la difficulté de ce genre de tests est plutôt leur maintenance que l'écriture initiale.

https://www.logilab.org/file/113042?vid=download

Ce langage haut niveau peut néanmoins être un canal de communication avec un client écrivant des tests. À ce jour, nous avons eu plusieurs clients prenant le temps de faire des fiches de tests que nous "traduisons" ensuite en tests unitaires. Si le client n'est pas forcément prêt à apprendre le Python et leurs tests unitaires, il serait peut-être prêt à écrire des tests selon ce formalisme.


OpenData à Nantes: agrégateur des événements culturels

2011/12/12 by Arthur Lutz

Jeudi 8 décembre 2011 nous avons participé à la réunion de travail sur l'ouverture des données événementielles.

Problématique des licences

Un premier problème est que la licence proposée par LiberTIC est la CreativeCommons CC-BY, alors que les producteurs de données n'ont souvent pas les droits sur toutes les données qu'ils diffusent (par exemple la photo d'illustration d'un concert). Ils auront donc du mal à les publier en totalité sous licence CC-BY. Espérons que la licence Creative Commons rentre dans les habitudes et que cela ne va pas trop freiner le projet.

Aujourd'hui, l'utilisation ressemble à du Fair Use: on tolère la ré-utilisation de contenus protégés par le droit d'auteur car cela sert la diffusion de l'information.

Nous nous sommes demandé s'il est possible de mélanger deux licences dans un flux de données ou s'il faut faire deux flux séparés mais liés.

https://creativecommons.org/images/license-layers.png

Problématique d'utilisation

Un deuxième problème est que les réutilisateurs ne seront pas intéréssés si les données sont trop pauvres et qu'elles n'incluent pas d'image ou de vidéo. Il faut donc trouver un socle commun qui satisfasse les producteurs et les réutilisateurs.

Import ou gros formulaires qui tâchent ?

Vu la complexité du modèle de données qui a émergé des discussions (beaucoup de cas particuliers), il a été proposé de fournir un formulaire de saisie d'un événement. A notre avis, la saisie "manuelle" doit rester un cas exceptionnel (un acteur culturel n'ayant pas de site pour publier par exemple), au risque de n'être pour les producteurs qu'un enième site à renseigner lors de la publication de son agenda.

Un exemple de bonnes pratiques est le très populaire GoodRelations qui offre un formulaire pour qu'un utilisateur qui n'a pas intégré le format à sa boutique en ligne puisse facilement générer son fichier et l'héberger chez lui, favorisant ainsi un modèle décentralisé calqué sur celui des moteurs de recherche.

Formats

Il nous semble donc important de se concentrer sur les formats standards qui pourraient être importés et exportés par la plateforme.

En voici une liste non exhaustive:

Lectures supplémentaires

Cherchant à combiner des vocabulaires existants (afin de ne pas réinventer un format qui devra être traduit dans un autre vocabulaire pour être réutilisable) nous sommes tombés sur les articles suivants :

http://cdn1.iconfinder.com/data/icons/transformers/network-connections.pnghttp://cdn1.iconfinder.com/data/icons/transformers/Internet-Explorer.pnghttp://cdn1.iconfinder.com/data/icons/transformers/entire-network.png

Conclusion

Il nous paraît important de ne pas se tromper dans les orientations choisies:

  • utiliser des formats standards et combiner l'utilisation de namespaces existants plutôt que d'inventer un nouveau format
  • proposer plusieurs formats d'export pour différentes utilisations (json, ical, etc) quitte à ne pas inclure tout le contenu disponible si le format ne s'y prête pas
  • ne pas créer une API de plus et choisir de privilégier les standards du web sémantique en publiant du RDF et si possible en fournissant un accès SPARQL
  • préférer la publication distribuée des données par leurs producteurs et leur agrégation par la plate-forme plutôt que d'attendre des producteurs qu'ils remplissent un formulaire de plus.

Nous attendons avec impatience la suite des travaux. Selon LiberTIC la plateforme sera developpée en logiciel libre avec des outils collaboratifs pour piloter le projet.

CubicWeb est une plateforme disponible en logiciel libre qui a déjà fait ses preuves et a été conçue pour développer des applications du type de l'aggrégateur décrit ci-dessus: import et export des données sous différents formats, utilisation des technologies standards du web sémantique. Nous espérons que ceux qui auront à réaliser l'agrégateur choisiront CubicWeb comme base technique pour ce projet.


Rencontre Open Data à Nantes: Enjeux et opportunités pour le secteur culturel

2011/11/17 by Arthur Lutz

Nous étions présents à l'évenement organisé par Stereolux et Libertic consacré à l'OpenData dans le domaine de la culture à Nantes. Voici un court compte rendu des points que nous avons retenus de ces présentations.

Présentation générale de l'OpenData par Libertic

Il existe sur la toile assez d'articles sur l'Opendata pour qu'il ne nous semble pas nécessaire d'en donner une description, mais nous tenons à souligner que l'OpenData n'est pas simplement une mise à disposition des informations. Pour que des données puissent être qualifiées d'ouvertes, il faut qu'elles respectent une dizaine de principes parmi lesquels l'accessiblité, l'exploitabilité (données brutes), et la la réutilisablitié (licence).

https://libertic.files.wordpress.com/2010/02/logo-libertic.png?w=300&h=180

Claire Gallon a cité plusieurs exemples d'OpenData dans le domaine culturel :

  • la mise à disposition de données sur la fréquentation d'un musée permet de développer un service qui donnera la meilleure heure pour visiter ce musée. Voir When Should I visit Tate Modern
  • Marseille-Provence 2013 (capitale culturelle européenne) ouvre ses données et attend que les acteurs écrivent des applications (mobiles notamment).

Un idée importante est que le service public doit s'adresser au plus grand nombre et ne peut pas consacrer ses ressources à la mise en place de services de niche. La mise à disposition des données permet à des tiers d'occuper ces niches.

En conclusion, Claire Gallon insiste sur la nécessité d'inclure la gestion de la communauté dans les démarches d'ouverture des données. La prochaine priorité des acteurs de l'OpenData sera la coproduction, à la fois pour l'écriture des applications et pour l'amélioration des données.

Présentation du projet data.bnf.fr par Romain Wenz

http://data.bnf.fr/data/logo-bnf.gifhttp://data.bnf.fr/data/logo-data.gif

Romain Wenz de la Bibliothèque nationale de France a présenté http://data.bnf.fr sous l'angle de l'ouverture : l'ouverture à un public différent, l'ouverture à un mode de recherche différent (on cherche sur internet avant d'aller en bibliothèque) et l'ouverture sur les reseaux sociaux où le public partage des références à des contenus qu'il apprécie (twitter, facebook, etc.). Cette ouverture passe forcément par un web indexable, où l'on peut communiquer facilement une URL d'un contenu (exit les portails de recherche avec des sessions et variable http). Si un site n'est pas indexable, son contenu pourra être trouvé en s'y connectant directement, mais celui-ci restera dans le web "invisible" ou "profond".

Romain Wenz a insisté sur l'Importance des technologies utilisées : d'un coté les strandards ouverts et formalisés par le W3C, notamment en terme de web sémantique (RDF, RDFa, opengraph, schema.org, etc.) et de l'autre l'utilité de s'appuyer sur du logiciel libre. Dans le cas de http://data.bnf.fr il s'agit de CubicWeb.

Présentation des collaborations entre Wikimedia France et des institutions publiques à Toulouse

https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Commons-logo-en.svg/75px-Commons-logo-en.svg.png

La transition entre la BnF et Wikimedia est facile : Wikisource (bibliothèque de livres libres de droits) a signé un partenariat avec Gallica qui lui a fourni des numérisations de livres tombés dans le domaine public.

Wikimedia France a présenté deux projets réussis en coproduction avec des institutions Toulousaines :

  • le projet Phoebus a donné accès aux archives du Muséum de Toulouse à des bénévoles
  • la communauté Wikimedia Commons a participé à l'enrichissement des metadonnées du fond consacré au photographe Eugène Trutat.

Présentation OpenData par la mairie de Nantes Métropole

http://nantes.fr/webdav/site/nantesfr/shared/fileadmin/images/Puces/autrespuces/logo64_queue.png

Frédéric Vasse a briévement présenté la démarche de la Ville de Nantes en matière d'OpenData. Le lancement de la plateforme aura lieu lundi prochain à la Cantine Numérique de Nantes. Selon lui, l'objectif de Nantes est de réussir la coproduction avec les acteurs du territoire.

Conclusion et ouverture sur un projet concret d'OpenData pour les acteurs culturels

Libertic a conclu en proposant aux acteurs culturels un projet d'aggrégateur d'informations sur les événements culturels à Nantes. Nous espérons pouvoir vous donner prochainement plus d'informations sur ce projet.

Autre compte rendu (prises de notes) : http://www.scribd.com/doc/72810587/Opendata-Culture


Pourquoi il faudrait faire du Javascript coté serveur

2010/10/20 by Arthur Lutz

Description de la présentation sur le site de Paris Web 2010: ici.

Quentin Adam voudrait que l'on fasse plus de javascript coté serveur. Un des principaux avantages du javascript server side est que il n'est pas nécessaire de traduire ces structures de données entre plusieurs languages de programmation.

http://www.bewebmaster.com/bewebmaster/icons/JavaScript.pnghttp://a3.twimg.com/profile_images/90410047/clouds2_normal.jpg

Une des limites à cette adoption est que les moteurs de javascripts ne font pas de DOM (ca c'est le boulot du navigateur), du coup pas de jquery, mootools ou dojo (high level javascript)>. Par conséquent les développeurs javascript vont avoir des difficultés pour coder en server side. Certaines librairies sont en train de prendre en compte cet environnement limité.

Quand on fait du javascript coté serveur, on peut considérer les requêtes comme des websockets, ce qui va être avantageux en terme de performances (par exemple lorsque le serveur reçoit deux requêtes identiques, quand la réponse est prête on renvoie deux fois la même chose).

Voici quelques outils que Quentin Adam recommande ou mentionne :

  • Ape - Ajax Push Engine - http://www.ape-project.org Mettre du javascript dans un module apache. Coté client on a du mootols pour faire du développement.
  • Node.js http://www.nodejs.org très adopté par la communauté ruby. Node.js es apparu au moment de l'émergence de v8. Par contre celui-ci n'est pas très stable, la documentation n'est pas très complète, mais il y a beaucoup de "recettes" sur le web.
  • CommonJS http://www.commonjs.org/ est une librairie qui a l'avantage d'être en cours de standardisation.
  • Jaxer http://jaxer.org/ est une sorte de firefox embarqué dans un module apache, ce qui est un peu trop lourd mais son existence mérite d'être mentionnée.

À Logilab, pour le développement de CubicWeb, nous penchons plutôt pour les développements des mécanismes asyncrones dans Twisted, mais cette présentation a le mérite de mettre en avant que d'utiliser javascript ne concerne pas uniquement les tweaks dans le navigateur.

http://twistedmatrix.com/trac/chrome/common/trac_banner.png

MiniDebConf Paris 2010

2010/09/09 by Arthur Lutz
http://france.debian.net/debian-france.png

Debian France organise le 30 et 31 octobre prochain une minidebconf à Paris. Le wiki de la conférence est en train de s'étoffer, et pour le moment c'est là qu'il faut s'inscrire. À Logilab nous sommes utilisateurs et contributeurs de Debian, c'est donc naturellement que nous allons essayer d'aller participer à cette conférence. Alexandre Fayolle, développeur Debian ira assister (entre autres) à la présentation de Carl Chenet sur l'état de Python dans Debian.


Une mise en place de l’eXtreme Programming - ce que j'en retiens

2010/05/20 by Arthur Lutz
http://rubyonrails.org/images/rails.png

Je suis allé à la présentation de "Une mise en place de l’eXtreme Programming" présenté par Karine Sabatier dans le cadre d'Agile Nantes. On y a parlé plutôt Ruby on Rails que python, mais surtout de méthodes agiles et XP.

Voici quelques points que j'ai retenu de cette présentation tout à fait pragmatique d'une mise en pratique des principes XP :

  • Le principe de "Convention over configuration" : préférer la convention (notamment pour la programmation) plutôt que la contrainte par la configuration. Dans Ruby On Rails, les conventions sont très fortes, pour faire une application on ne peut pas s'éloigner du modèle MVC : les modèles sont dans "model", les views sont dans "views" etc... À ce sujet, la conférencière a fait référence à deux types de designs que je ne connaissait pas : le DDD Domain-driven Design et Behavior Driven Development.
  • Utilisation de métaphores : trouver un langage commun avec le client mais aussi avec les utilisateurs
  • Application de déploiement ruby on rails : Capistrano, bien qu'à Logilab nous privilégions le déploiement par paquets et dépôts debian, en python on pourra jeter un coup d'œil à Fabric.
http://retrospectiva.org/extensions/overview/images/product_backlog.png?1265550417
  • Leur projet XP utilisait le logiciel de gestion de projet Retrospectiva. Celui-ci ressemble sur bien des points à JPL (Jeux de Planification Logiciel) disponible sur le framework CubicWeb (http://www.cubicweb.org). Coté intégration continue : CruiseControl , en python nous privilégions apycot.
  • Ce projet a essayé l'utilisation de Selenium pour ces tests web. Le constat est le même que chez Logilab : la première fois que ca marche c'est utile et apporte une grande satisfaction, dans un deuxième temps ca reste très difficile à maintenir. Nous regardons à présent plutôt du coté de Windmill qui a été intégré à la version 3.9 de cubicweb.
  • Une mention a été fait d'une société fonctionnement uniquement en mode agile Pyxis.

Sprint CubicWeb chez Logilab - annonce de dernière minute

2010/04/29 by Arthur Lutz

Logilab est en ce moment en train d'acceuillir un sprint autour de la plateforme CubicWeb. L'objectif principal de ce sprint de 5 jours est d'améliorer l'usage de javascript et des css dans CubicWeb :

http://www.logilab.org/image/28586?vid=downloadhttp://codesnip.net/wp-content/uploads/javascript.png
  • avoir une API javascript propre, testée et documentée
  • pouvoir facilement changer le style d'une application cubicweb
  • gestion de bundle pour javascript et CSS
  • une documentation sur les standards d'écriture des fichiers JS et CSS pour cubicweb

Ce sprint aura lieu du jeudi 29 avril 2010 au 5 mai 2010 (weekend exlus - les bureaux seront fermés). Vous êtes les bienvenus pour contribuer, filer un coup de main, faire du pair programming... ou simplement rencontrer des développeurs cubicweb. Vous pouvez même venir une après-midi ou une seule journée. Pour ceux avec des portables, il y aura du réseau disponible pour être connecté.

Adresse : 104 Boulevard Auguste-Blanqui, Paris. Sonnez à "Logilab".

Métro : St Jacques or Corvisart (Glacière est la station la plus proche mais sera fermée à partir de lundi)

Contact : http://www.logilab.fr/contact

Dates : du 29/04/2010 au 30/04/2010 et du 03/05/2010 au 05/05/2010


L'intégration continue présenté par Agiles Nantes

2010/03/18 by Arthur Lutz

Hier, Logilab était à nouveau présent aux rencontres organisées par Agiles Nantes, il s'agissait d'une présentation très fournie sur l'intégration continue (présenté par la société Netapsys). Malheureusement, la principale technologie utilisée était Java dont nous ne sommes pas des grands fans, préférant python. Néanmoins cela donne une bonne idée des possibilités qu'offrent les outils autour du développement java, notamment en terme d'intégration continue (voir Maven, Hudson, Sonar, etc.).

http://hudson-ci.org/images/butler.png

On retrouve donc un certain nombre de similarités avec le monde python, notamment avec Artifactory qui reproduit en partie les fonctionnalités de pypi avec easy_install ou buildout ou apt-cacher-ng dans son coté proxy. A Logilab, nous privilégions l'utilisation de paquets debian pour distribuer nos logiciels, ce qui permet, notamment, de ne pas réinventer la roue pour chaque langage de programmation.

Voici quelques une des notions avancées lors de la présentation qui nous semblent intéressantes sur l'intégration continue :

  • celle-ci permet de mettre en place des environnements de test mis à disposition du client tout le long du projet.
  • cette notion de prototype utilisable en continu doit être présente le plus tôt possible dans un projet.
  • idéalement, un serveur de déploiement/intégration doit être quasiment à l'identique de l'environnement client (utilisation de machines virtuelles)
  • l'intégration continue est souvent plus utilisées par les développeurs et les chefs de projets que par les clients. Mettre en place des rapports utiles au client requiert un soin particulier
  • pour une émulation collective, certaines notations des développeurs sont possible. Par exemple un plugin Hudson donne un point par build réussi, un point par test ajouté, moins dix points pour un build cassé.
  • la visualisation des données peut motiver les développeurs, l'outil Sonar semble être très complet et propose des visualisation assez léchées. A noter, des graphes sur la complexité du code, par classe, par méthode etc. Voir aussi la visualisation de l'arbre des dépendances des librairies avec Radiator.
http://sonar.codehaus.org/wp-content/themes/sonar/images/dashboard.png

J'y ai mentionné apycot et buildbot qui sont tous les deux des outils plutôt orientés python (mais pas seulement).

Pour conclure, tout ça m'a fait penser au concept plus poussé de "Continuous Delivery - BlueGreenDelivery" développé par Martin Fowler, une lecture recommandée pour ceux qui ont déjà pris le pas de l'intégration continue.

http://www.martinfowler.com/bliki/images/blueGreenDeployment/blue_green_deployments.png

On a fait un tour au Coding Dojo à Nantes

2010/02/18 by Arthur Lutz

L'association de promotion des méthodes Agiles sur Nantes et sa région [1] organisait hier soir un "Coding Dojo". C'est une session de codage en public avec des créneaux de 15 minutes par codeur (explication sur codingdojo.org). Le focus de la session était le TDD (Test Driven Developpement).

http://farm3.static.flickr.com/2509/3947717979_34e5a68d3d_m.jpg

Annonce de l'événement sur leur site : http://www.agilenantes.org/2010/01/25/coding-dojo-mercredi-17-fevrier-2010/

Photo par yepyep sous licence creative commons


Nous allons à PyConFr 2009

2009/05/25 by Arthur Lutz

Le 30 et 31 mai prochain (samedi et dimanche prochain) nous allons être présents à PyConFr édition 2009, nous sommes partenaire de l'évènement et allons y parler de CubicWeb. Pour être plus précis, Nicolas Chauvat y présentera "CubicWeb pour publier DBpedia et OpenLibrary". Il avait déjà évoqué ces sujets sur ce site : Fetching book descriptions and covers et DBpedia 3.2 released.

Si vous comptez y aller, n'hésitez pas à venir nous dire bonjour.

http://pycon.fr/images/logo_pyconfr_small.png

Venez nous rendre visite à Solution Linux 2009

2009/03/31 by Arthur Lutz
http://www.solutionslinux.fr/images/index_07.jpg

Nous sommes dès ce matin, pendant 3 jours, présents au salon Solutions Linux 2009 au stand du pôle de compétition System@tic dont nous faisons parti. C'est le stand B4/B8, assez prêt de l'entrée sur la gauche (détails).

Nous allons présenter CubicWeb à plusieurs reprises sur le stand, ainsi que lors des conférences sur le Web2 ce mardi 31 mars de 14h à 17h30 :

  • Adrien présentera "Simile Widgets, des composants de haut niveau pour IHM web"
  • Sylvain présentera "Cubic 3.0 - une plateforme pour les applications web sémantique"

pour plus de détails consultez le programme.


Belier - le ssh par hops

2009/02/17 by Arthur Lutz

On vient de découvrir belier qui permet de se connecter facilement à des machines auquelles on doit accéder par des machines ssh intermédiaires. Ca peut s'avérer utile. En plus, c'est en python. En plus, il a fait des paquets debian... et en plus il mentionne pylint. Du coup il mérite mention ici.

http://www.ohmytux.com/belier/images/schema_belier.png

Semantic Roundup - infos glanées au NextMediaCamp

2008/11/12 by Arthur Lutz
http://barcamp.org/f/NMC.PNG

Par manque de temps voici les infos en brut glanées jeudi soir dernier au NextMediaBarCamp :

Un BarCamp c'est assez rigolo, un peu trop de jeune cadres dynamiques en cravate à mon goût, mais bon. Parmi les trois mini-conférences auxquelles j'ai participé, il y avait une sur le web sémantique. Animée en partie par Fabrice Epelboin qui écrit pour la version française de ReadWriteWeb, j'ai appris des choses. Pour résumer ce que j'y ai compris : le web sémantique il y a deux approches :

  1. soit on pompe le contenu existant et on le transforme en contenu lisible par les machines avec des algorithmes de la mort, comme opencalais le fait (top-down)
  2. soit on écrit nous même en web sémantique avec des microformats ensuite les machines liront de plus en plus le web (bottom-up)
http://microformats.org/wordpress/wp-content/themes/microformats/img/logo.gif

Dans le deuxième cas la difficulté est de faciliter la tache des rédacteurs du web pour qu'ils puissent facilement publier du contenu en web sémantique. Pour cela ces outils sont mentionnés : Zemanta, Glue (de la société AdaptiveBlue).

Tout ça m'a fait penser au fait que si CubicWeb publie déjà en microformats, il lui manque une interface d'édition à la hauteur des enjeux. Par exemple lorsque l'on tape un article et que l'application a les coordonnées d'une personne metionnée, il fait automagiquement une relation à cet élément. A creuser...

Sinon sur les autres confs et le futur des médias, selon les personnes présentes, c'est assez glauque : des medias publicitaires, custom-made pour le bonheur de l'individu, où l'on met des sous dans les agrégateurs de contenu plutôt sur des journalistes de terrain. Pour ceux que ça intéresse, j'ai aussi découvert lors de ce BarCamp un petit film "rigolo" qui traite ce sujet préoccupant.


SciLab passe en logiciel libre

2008/06/16 by Arthur Lutz
http://www.scilab.org/images/homepage/scilab_logo.png

Bienvenue à SciLab version 5.0 dans le monde du logiciel libre. SciLab 5.0, plateforme open source de calcul scientifique sous licence CeCill, est une alternative crédible et maintenant reconnue comme telle à Matlab. Pour assurer le développement pérenne de Scilab, le consortium Scilab rejoint DIGITEO, parc de recherche d'envergure mondiale dans le domaine des sciences et technologies de l'information en Île-de-France.


Nouvelle version de LAX - Logilab Appengine eXtension

2008/06/09 by Arthur Lutz
http://code.google.com/appengine/images/appengine_lowres.jpg

La version 0.3.0 de LAX est sortie aujourd'hui voir : http://lax.logilab.org/

Il suffit de 10 petites minutes pour avoir une application qui tourne, suivez le guide :

Mise à jour: LAX est maintenant inclus dans CubicWeb.


Profiter pleinement des CPUs avec Zope/Zeo/Debian

2008/05/27 by Arthur Lutz

Voici vite fait comment on profite du quad-core bi-proc multicoeurs avec zope/zeo/pound ... le tout en commandes debian.

Inspiré de : http://plone.org/documentation/how-to/simple-zope-clustering-with-squid-and-pound

http://plone.org/documentation/tutorial/introduction-to-the-zodb/zeo%20diagram.png
  • apt-get -uVf install plone-site pound

  • dzhandle -z 2.10 make-zeoinstance sgel_zeo

  • dzhandle -z 2.10 make-instance sgel2 --zeo-server=localhost:8100 -m all

  • dzhandle -z 2.10 make-instance sgel3 --zeo-server=localhost:8100 -m all

  • dzhandle -z 2.10 make-instance sgel1 --zeo-server=localhost:8100 -m all

  • dzhandle -z 2.10 make-instance sgel4 --zeo-server=localhost:8100 -m all

  • modifiez les ports de chaque instance (par exemple 9673, 9674, 9675, 9676)

  • vim ~/zope/instances/sgel*/etc/zope.conf

  • dzhandle add-product sgel1 CMFPlone

  • dzhandle add-product sgel2 CMFPlone

  • dzhandle add-product sgel3 CMFPlone

  • dzhandle add-product sgel4 CMFPlone

  • dzhandle zeoctl sgel_zeo start

  • dzhandle zopectl sgel1 start

  • dzhandle zopectl sgel2 start

  • dzhandle zopectl sgel3 start

  • dzhandle zopectl sgel4 start

  • vim /etc/pound/pound.cfg pour remplacer

    BackEnd
            Address 127.0.0.1
            Port    8080
    End
    

    par

    Service
            BackEnd
                    Address 127.0.0.1
                    Port    9673
            End
            BackEnd
                    Address 127.0.0.1
                    Port    9674
            End
            BackEnd
                    Address 127.0.0.1
                    Port    9675
            End
            BackEnd
                    Address 127.0.0.1
                    Port    9676
            End
    End
    
  • /etc/init.d/pound restart

  • tapez sur http://localhost:8080

  • ajoutez un site plone

pour tester, lancez htop pour voir l'activité et regardez la différence entre :

  • apt-get -uVf install apache2-utils
  • /usr/sbin/ab -n 100 -c 100 localhost:8080/plone

et

  • /usr/sbin/ab -n 100 -c 100 localhost:9673/plone

nice!


Reinteract: un outil intéressant pour faire du numpy/scipy

2008/05/27 by Arthur Lutz

Il existe un outil, Reinteract, qui permet d'avoir une sorte de d'éditeur/shell Python, où l'on peut aisément modifier et réinterpreter une ligne de code.

Sachant qu'il sait aussi afficher des plots, etc, il est possible de s'en servir avantageusement pour faire des sessions Matlab-like.

Je pense donc que c'est un outil à présenter à nos chers apprenants qui sont intéressés par le couple python/numpy comme substitut à Matlab ©®.

Ex:

http://fishsoup.net/software/reinteract/reinteract-demo.png

écrit par David Douard


Petit raccourci pratique avec ion3

2008/05/27 by Arthur Lutz

Un petit raccourci pratique pour ion3, qui permet, sur la combinaison de touches de son choix, de prendre le texte actuellement sélectionné (surligné) dans sa session X11, et, en fonction de son contenu :

  • d'ouvrir un onglet Firefox avec l'url sélectionnée,
  • d'ouvrir un xpdf si c'est une URL de fichier PDF,
  • lancer OpenOffice.org si c'est un fichier OOo,
  • ouvrir le fichier dans emacs si c'est un .py, .po, etc.
  • etc.

Pour cela, il faut le script magique ci-dessous, et configurer ion pour appeler ce script sur la bonne combinaison de touches. Par ex. ajouter dans votre ~/.ion3/cfg_ion.lua les lignes

defbindings("WMPlex.toplevel", {
  bdoc("Automagically view the selected string"),
  kpress(META.."F7",
         "ioncore.exec_on(_, '/home/user/bin/view')"),
})

Ici, j'ai mappé "Meta+F7", et le script est /home/user/bin/view

#!/usr/bin/env python

from mimetypes import guess_type
import sys
from os.path import abspath
from os import system, popen

import re
RGX = re.compile

EMACS = 'emacsclient --no-wait %(uri)s'
EMACS_WITH_LINE = 'emacsclient --no-wait +%(lineno)s %(uri)s'
FIREFOX = 'firefox -remote "openURL(%(uri)s, new-tab)"'
WGET = 'cd /home/adim/tmp && wget %(uri)s & '

commands = [
    ('text/html', FIREFOX),
    ('application/xml', EMACS),
    ('text', EMACS),
    ('image', 'display %(uri)s &'),
    ('application/pdf', 'xpdf %(uri)s &'),
    ('application/postcript', 'gv %(uri)s &'),
    ('application/vnd.sun.xml', 'ooffice %(uri)s &'), # matches writer, impress, etc.
    ('application/vnd.oasis.opendocument', 'ooffice %(uri)s &'),
    ('application/msword', 'ooffice %(uri)s &'),
    ('application/vnd.ms-', 'ooffice %(uri)s &'),
    ]

patterns = [
    (RGX(r'https?://.*?(zip|gz|pdf|ods|doc|odt|ppt|sxw|sxi)$'), WGET),
    (RGX(r'.*(?P<uri>https?://[^ ()]*)( .*)?'), FIREFOX),
    (RGX('.*?\.conf$'), EMACS),
    (RGX('.*?\.po$'), EMACS),
    (RGX('.*?\.xslt$'), EMACS),
    (RGX('.*?\.pot$'), EMACS),
    (RGX(r'\s*F?i?l?e? ?"?(?P<uri>.*?\.py)", line (?P<lineno>\d+)[a-zA-Z_:-]*'), EMACS_WITH_LINE),
    (RGX('.*?(readme|changelog|depends|manifest|makefile)(\.in|\.gz|\.bz2)?$', re.I), EMACS),
    # others might come here ...
    ]

def find_command(selection):
    for rgx, cmd in patterns:
        m = rgx.match(selection)
        if m:
            args = m.groupdict() or {'uri' : selection}
            return cmd, args
    mimetype, encoding = guess_type(selection)
    # XXX: encodings like zip, or gz could be handled
    if mimetype is not None:
        selection = abspath(selection)
        for registered_type, cmd in commands:
            if mimetype.startswith(registered_type):
                return cmd, {'uri' : selection}
    raise ValueError('nothing matched')

if len(sys.argv)>1:
    selected = ' '.join(sys.argv[1:])
else:
    selected = popen('xclip -o').read()

if selected:
    try:
        cmd, args = find_command(selected)
    except ValueError:
        # system('wmiijabber error viewing %s' % ' '.join(sys.argv[1:]))
        # XXX print a message in wmii status bar ?
        pass
    else:
        #print "yooo =>", repr(cmd), repr(args)
        system(cmd % args)

Pour que cela fonctionne, il ne faut pas oublier d'installer xclip (sous debian, apt-get install xclip).

-- écrit par David Douard sur un script de Adrien diMascio


Petites astuces de vim

2008/05/27 by Arthur Lutz

J'ai découvert vim-addons (qui est apparu dans debian récement) et ce petit outil permet de faire d'etendre les fonctionnalités de vim assez facilement. Voici une utilisation parmi tant d'autres :

mode gnupg

pour installer le mode gnupg faites

vim-addons install gnupg

Ensuite vim pourra ouvrir directement des fichiers encryptés et les réncrypter lorsque vous sauvez. Donc simplement

vim mot-de-passe-envoyé-par-client.gpg

Voilà, le tour est joué.

J'avoue que je reste avec emacs pour le code, mais ce genre de petit raccourcis est bien pratique.