Blog entries by Nicolas Chauvat [3]

Réseau social ouvert et distribué avec CubicWeb

2012/07/18 by Nicolas Chauvat

Qu'est-ce qu'un réseau social ?

  • descriptions de personnes (profil, histoire, etc)
  • liens avec les autres membres (carnet adresses, etc)
  • création de groupes
  • partage de contenu (photos, vidéos, présentations, etc)
  • discussion (blog, commentaires, forums, messages, microblog)
  • mise en relation (boulot, ludo, dodo, etc)
  • recommandation (lien, livre, achat, film, music, etc)
  • présence (fait quoi, avec qui, où, etc)

Et l'interopérabilité ?

  • nombreuses applications / plate-formes
  • en majorité centralisées et fermées
  • ouverture progressive: protocoles et API en cours de dév
  • réseaux ouverts et distribués: appleseed, diaspora, onesocialweb, etc.
  • pourrait-on faire autrement ?

API: openstack

  • découverte / discovery = xrd
  • identité / identity = openid
  • contrôle d'accès / access control = oauth
  • activités / streams = activity streams
  • personnes / people = portable contacts
  • applications = opensocial

Et en utilisant les standards du Web ?

Architecture ouverte et distribuée

  • vocabulaires RDF et protocole HTTP + REST
  • chacun son serveur
  • GET et éventuellement copie locale
  • abonnement si nécessaire (pubsub, xmpp, atom ?)
  • permissions gérées localement

=> social semantic network

Pourquoi CubicWeb ?

  • plate-forme pour web sémantique (semantic web framework)
  • conçu pour avoir composants à assembler
  • chacun peut définir son application sur mesure
  • fait pour publier html et rdf en parallèle
  • fait pour exporter et importer données
  • déjà foaf, skos, sioc, doap, rss, atom, etc.

Exemple

  • (micro)blog + book + link + file
  • pourrait ajouter: musique, photos, etc.
  • mais aussi: journal, recherche appartement, etc.

Et ensuite ?

Il y a bien longtemps...

  • découverte = who et cat /etc/passwd | cut -d: -f1
  • identité = login
  • contrôle accès = chmod, chgrp, su
  • activités = .plan
  • personnes = .addressbook
  • applications = vim ~/public_html/me.html

Note

Ce texte a été présenté en août 2010, lors de la conférence française des utilisateurs de Python (PyCon-Fr 2010)


12 ans de l'April: bilan et objectifs

2009/04/05 by Nicolas Chauvat
http://www.april.org/themes/zen/zen_april/images/logo.png

L'April fête cette année ses douze ans. L'association de promotion et de défense du logiciel libre approche maintenant les 5000 membres, toutes catégories confondues: personnes physiques, entreprises commerciales, collectivités, associations. Elle vient de publier son rapport moral 2008 et sa feuille de route 2014 qui fixe des objectis pour les cinq années à venir. On notera en particulier la lutte contre les quatre dangers que sont les brevets sur les algorithmes, les dispositifs de contrôle d'usage, la vente liée et l'informatique déloyale. Consultez le site de l'April pour en savoir plus sur ses actions et n'hésitez pas à adhérer ou à donner quelques heures de votre temps.


Fusionner dans le bon sens avec mercurial

2008/11/27 by Nicolas Chauvat
http://www.selenic.com/hg-logo/logo-droplets-50.png

Contrairement à ce que l'on pourrait penser a priori, il y a un bon et un mauvais sens pour fusionner deux têtes dans en entrepôt mercurial.

Prenons un exemple et admettons que l'on parte d'une révision 123. Alfred, Barnabé et Coruscant font des changements qui produisent l'arbre suivant:

123 -> 124 -> 125 ---> 126 -> 129 --> 130
                   \-> 127 -> 128 /

Si dans le même temps, Zoé part de la révision 123 et produit l'arbre:

123 -> 131

quand Zoé va vouloir faire son hg push sur l'entrepôt partagé, elle va avoir le message "ça crée des têtes, est-ce que vous êtes sûr de vouloir faire ce push". Zoé va se dire qu'il vaut mieux commencer par un 'pull' et un 'merge', mais c'est là qu'il faut se méfier.

En effet, si Zoé est sur la révision 131 et qu'elle fusionne avec 130, le changeset sera énorme car il contiendra tous les changements qui permettent de passer de 123 à 130. En revanche, si Zoé passe sur la 130 et fusionne avec la 131, elle n'aura que les changements qu'elle vient d'apporter. Dans le premier cas, le 'merge' sera difficile à comprendre, alors qu'il sera bien plus simple dans le second.

Au final, comment faire la fusion dans le "bon" sens ?

1/ hg push -> ah tient, ça crée des têtes, donc je ne le fais pas

2/ hg pull -u ou hg pull suivi de hg merge -> y'a eu un merge

3/ hg status -> beaucoup de fichiers modifiés... oulàlà, c'est bizarre je vais regarder

4/ hgview -> ah oui, sur l'autre tête y'a beaucoup plus de changements, donc je vais plutôt faire le 'merge' dans l'autre sens

5/ hg up -C ab123_autre_tete -> je me retrouve sur l'autre tête

6/ hg merge cd456_ma_tete -> un joli 'merge'

7/ hg status -> seulement quelques fichiers modifés, voilà qui est mieux

8/ hg ci -m merge -> youpi, je valide cette fusion

9/ hg push -> tagada, je partage avec mes voisins

Moralité: faites des hg status et des hgview aussi souvent que nécessaire pour préparer vos commits et parvenir à un historique facile à comprendre.

Remarque: on peut aussi remplacer les étapes 5, 6 et 7 par hg diff -r ab123_autre_tete -r cd456_ma_tete pour afficher le diff de ma_tete par rapport à autre_tete, car l'opération de fusion doit être symétrique et donner le même résultat qu'on la lance depuis l'une ou l'autre tête, même si l'affichage par défaut de hg status et hg diff dépend de la tête qui constitue le premier parent (l'étape 5 ayant justement pour effet de changer ce premier parent).