Dynamically querying external (sub) projects properties with RDF in FusionForge

I’ve been working recently on two plugins for FusionForge. The work is somehow a POC for some COCLICO dynamic interoperability work-package, but some outcomes may actually be of use someday in real life, who knows 😉

The first plugin is called extsubproj, and allows the definition of links to external subprojects (i.e. hosted on another forge), in the properties of a FusionForge project. It’s basically managing a set of stored URLs and displaying them in the top project’s summary page. Nothing fancy, so far, and the code is not yet finished, nor pushed to FusionForge’s trunk yet.

The second plugin, called doaprdf, allows the publication, by the forge, on the same URL as the project summary page (those URLs are standardized in FusionForge in the form : http://.../projects/projname), of a RDF+XML description of some of the project’s metadata, using the DOAP dialect. This works with content-negotiation, following principles of the Linked Data paradigm, so that the same URL, when requested for HTML, renders a Web page (the forge project’s summary page) meant for humans^geeks, and when queried with a special content type Accept HTTP header (Accept: application/rdf+xml), meant for machines.

Now, when you combine these two, you gain the possibility of having extsubproj display not only the suprojects’ URLs, but also some of their meta-data, for instance a link in the form of <a href="http://.../projects/projname">fetched doap:name</a>.

The POC illustrates how one may then construct a hierarchy of (public so far) projects and sub-projects accross the buondaries for different forges databases, and display them in a similar manner as local projects (for instance, what the FusionForge plugin projects-hierarchy provides), through dynamic query of the remote project’s properties fetched on demand and modeled in a generic dialect (RDF with common ontologies such as DOAP).

Note that a similar FusionForge plugin “foafprofile" is being developped too for users profiles, using RDF and FOAF.

Stay tuned for more content in the same vein.

Migrating mail from Evolution local storage to Evolution + local Imap (dovecot with Maildir) 2/X

See previous post for the rationale.

I’ve then started migrating my mail using evolution.

First I’ve installed dovecot and set it up so as to store my mail inside my $HOME/Maildir/ dir. Evolution will run dovecot on demand through a pipe, instead of through network access like with regular remote IMAP servers. So dovecot won’t be started as a daemon. I’ve been inspired by Roland’s setup for this (even though I’not using offlineimap).

Inside Evolution, I’ve configured a second mail profile, for this local IMAP server, using the custom command to connect to server :
"MAIL=maildir:$HOME/Maildir /usr/lib/dovecot/imap"

I’ve migrated my existing mail folders using “copy to” function on all top-level mail folders from the local evolution storage, to copy them to the IMAP folders. Note that some folders that include a dot (‘.’) need to be renamed, as the dot is a path separator for IMAP.

I’ve adapted Evolution’s vfolders definitions so as to take into account the “active remote folders” instead of the local ones, and that’s it, the mail is migrated.

I’m using fetchmail + procmail to fetch mail from remote servers and to deliver it to the Maildirs, using dovecot’s deliver program, with something like :

DELIVER="/usr/lib/dovecot/deliver"

:0: w
| $DELIVER

I’ve migrated the filters of evolution to “server-side” Sieve rules so that dovecot’s deliver sorts incoming mail in the right Maildirs. The dovecot config needs to be adapted to activate the sieve plugin (dovecot-sieve Debian package), in /etc/dovecot/conf.d/15-lda.conf :

protocol lda {
# Space separated list of plugins to load (default is global mail_plugins).
mail_plugins = $mail_plugins sieve
log_path = /tmp/dovecot-deliver-errors.log
info_log_path = /tmp/dovecot-deliver.log
}

The original Evolution filters rules were stored in $HOME/.config/evolution/mail/filters.xml, so I wrote a quick python DOM parsing tool to extract the (long) list of definitions and generate Sieve rules for the $HOME/.dovecot.sieve config file (in which folder hierarchy uses a ‘.’ path separator instead of a ‘/’).

The sieve-test program can be used to check is sieve rules function as you want.

Now this is all setup, I only need to configure notmuch to index all the Maildirs. But this is left to another post.

Migrating mail from Evolution local storage to Evolution + local Imap (dovecot with Maildir) 1/X

I’ve been fed up with Evolution being so buggy and slow, which was making managing my mail ever more painful as time passes. Still, one of the advantages of Evolution over other MUAs is the vfolders feature, which I’ve been using intensively for years. Would there be some alternate way of managing my mail ?

I’ve been reading about notmuch‘s progress in becoming a very powerful mail management / retrieval tool (it could very well replace the vfolder feature of Evolution), but unfortunately, it is not (yet) integrated with Evolution.

Others have documented their mail setup, and it seems that I could achieve a middle ground solution by migrating all my mail folders, currently stored inside Evolution’s local storage, into Maildir folders managed by a local dovecot IMAP server. Evolution would still be my MUA, but it would store my mail inside Maildirs through dovecot. I’ve been told that Evolution may be less buggy with IMAP than with local folders, which could solve my main annoyances. Also, it would make it possible to index mail with notmuch, as it supports the Maildir storage format.

I’ve then decided to take the opportunity of a holiday period to start the migration attempt.

I’ll document it in another post.

Forges mutualisées, dans le rapport “L’industrie du logiciel”

Je viens de parcourir l’excellent rapport sur “L’Industrie du Logiciel” (en France : une analyse et des propositions pour l’enseignement et la recherche).

Il contient, entre autres sujets de réflexion et propositions, une analyse des modes de financement des forges de développement de logiciel du monde académique.

Je vous livre l’extrait en question (ai replacé les liens en notes de bas de page comme des liens dans le texte):

6.3 Des modes de financement des infrastructures de recherche peu adaptés au logiciel

Dans l’effort actuel de financement de la recherche, certains instruments ont été conçus pour soutenir des investissements importants dans des infrastructures collectives en se basant sur le modèle issu des grandes installations de la physique ou de l’astrophysique. L’État alloue des crédits exceptionnels, parfois considérables pour financer la construction d’un grand équipement de recherche (un accélérateur de particules, un télescope, …) laissant aux “opérateurs de la recherche” (CNRS notamment) le soin de recruter et d’affecter le personnel qui va l’utiliser.

Ce modèle d’intervention de l’État est inadapté pour financer les “forges à logiciel” modernes qui sont indispensables aux grands développements collaboratifs des technologies logicielles de demain. En effet, la part principale de coût de ces infrastructures est le coût des personnels. En particulier, elles ne trouvent leur pleine efficacité que si des ingénieurs de recherche en nombre suffisant y sont affectés, permettant de finaliser et professionnaliser les prototypes logiciels, de maintenir les outils et plateformes logicielles de développement et de former les utilisateurs nouveaux entrants.

L’essor du Cloud Computing permettrait par exemple de construire des forges ou des centres de données mutualisés qui réduiraient énormément les couts et augmenteraient l’efficacité du développement, mais des initiatives de ce genre n’entrent pas dans la définition des infrastructures de recherche actuellement financées, les montants d’investissement étant trop faible, et la part de fonctionnement trop importante.

Les forges existantes fonctionnent plus ou moins en vase clos. La forge du CRU accepte par exemple la création de projets venant de l’ensemble des universités, mais elle refuse les projets étudiants et fonctionne à l’intérieur du monde universitaire, sans ouverture réelle sur le monde des entreprises. La forge de l’INRIA est une des plus significatives de France, et elle rend un service appréciable aux équipes propres ou associées à cet institut.

Le besoin de créer une forge au niveau du CNRS a été exprimé formellement et une proposition de réfléchir à une forge au niveau enseignement supérieur et recherche existe aussi .

Ces outils existants et ces projets ne prennent pas (ou imparfaitement) en compte les besoins d’articulation entre le monde académique et celui des entreprises pour faire éclore les innovations technologiques logicielles ; ils ont aussi tendance à oublier que le développement collaboratif est un besoin qui ne se limite pas au code, mais se retrouve aussi dans l’écriture de documents techniques.

L’innovation logicielle prenant place dans des “écosystèmes” décloisonnés, ces forges doivent être accessibles à tous les acteurs d’un développement innovant, chercheurs d’organismes différents, PME partenaires, pôles de compétitivité, etc.

Laisser le soin aux opérateurs (CNRS, INRIA, CEA, universités) de déployer séparément de telles infrastructures sans que celles-ci ne soient mutualisées est donc contre-productif.

Il serait très préférable d’avoir une structure mutualisée offrant des « vues » spécialisées par types de développements (par ex.: mondes virtuels 3D et jeux, internet d’objets, etc.) ayant des besoins différents, mais ouvertes à tous les acteurs concernés, et qui puissent :

  • héberger non seulement le développement collaboratif du code, mais aussi de la documentation technique associée, voire même l’écriture collaborative d’articles scientifiques dans le domaine ;
  • prévoir explicitement l’hébergement de projets étudiants, et leur possible évolution dans le temps vers un cadre plus institutionnel ou international ;
  • prévoir explicitement un lien et un échange de métadonnées avec les autres forges, notamment industrielles ou internationales ;
  • permettre de suivre l’activité des contributeurs dans le temps, ce qui peut aider les étudiants à constituer facilement un bilan objectif de leurs compétences logicielles pour leur curriculum.

La mutualisation ne vise pas seulement à partager les coûts des investissements matériels (assez modestes si l’on utilise des serveurs virtualisés), mais surtout à mutualiser ces compétences qui à terme forment une part essentielle de la valeur de ces plateformes communes. Dans cet esprit, il nous parait souhaitable que l’alliance ALLISTENE, en liaison avec les pôles de compétitivité, organise une réflexion sur la création et le fonctionnement d’une ou plusieurs forges nationales, fédératives et ouvertes à tous les acteurs concernés, et la mise en place, indispensable, d’un programme de recherche multidisciplinaire sur les environnements collaboratifs qui guide l’évolution dans le temps de ces forges.

Proposition n°12 : Confier à ALLISTENE, en liaison avec les pôles de compétitivité, une mission de préfiguration d’infrastructures de développement collaboratif, adaptées à un type de développement particulier, et dotées des moyens nécessaires en personnel pour mener leurs activités de manière pérenne.

Bien évidamment, l’analyse me semble très pertinente, et la proposition me semble aller dans le bon sens, même si je ne sais pas si ALLISTENE est le meilleur porteur pour cela.

Migrating from Evolution to Gnus + NotMuch (part 1)

I’ve gotten fed up with Evolution‘s bugs and slowness. Even though I experience less problems than some weeks ago since I’ve applied a patch related to locks in e-d-s, Evolution has now become really too slow… and given that my mail flow is not really diminishing, I’ve come to the point when I think about migrating.

I’ve been a user of Gnus for years also (at home, with much satisfaction, as it runs fine inside a GNU Screen), so I could switch to it with moderate damage. Also, as I’m using org-mode, it would be quite complementary of course, staying more in Emacs 😉

One nice (and even priceless) feature of Evolution is the vfolders, that allow me to manage the tons of emails in different contexts, wherever that may be located. AFAIK, Gnus doesn’t offer any comparable feature. But it seems that the most interesting way to have it is to integrate Gnus with NotMuch. Fortunately, my colleague Roland has written a nice howto explaining (among other details of his mail system setup) how to integrate these together.

Now, if I’m able to setup a similar NotMuch + Gnus setup for newly received mail, I’m left with migrating all my piles of old mail, currently stored in Evolution.

It seems that one possible way to do so is through copying Evolution mail folders into a newly setup local IMAP server’s Maildir storage. The copy is supposed to preserve some flags like the read/unread status of the “important” flag.

From the first tests I’ve made, it’s possible to install a local Dovecot IMAPd server, configure it so that the mail is stored in the user’s ~/Maildir/ maildir directory, which can then be recognized by Evolution as a target for copying mail. It seems that nomuch can then be configured so that it doesn’t flag all new mails as unread, and understangs the imap server flags accordingly (unread, important, and such). Needless to say, I’m glad all these useful programs are packaged in Debian 😉

I need to make further tests and also test Gnus + Notmuch integration, but having a possible solution to migrate my existing mail looks like a relief.

I’d be curious to read your alternative ideas for such a migration.

Stay tuned for next iterations.