Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons :
+
+
Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des sujets de fond, pour progressivement changer l’équilibre dans mon métier ;
+
J’ai désormais quelqu’une avec qui échanger sur les problématiques techniques du métier de livreur / commercial ;
+
+
Mais cela me fait aussi peur : cela va nécessairement bousculer l’équilibre — parfois fragile — en place entre les associés actuels. Même si je vois cette évolution d’un bon œil, les transitions sont parfois difficiles.
+
Ça me donne donc envie de construire une relation de confiance, et de donner les moyens à cette nouvelle arrivante de s’y retrouver.
+
Transmission
+
Cela me pose donc de nouvelles questions, autour de l’accueil et de la transmission.
+
Il me semble que l’enjeu est de laisser une liberté d’action progressive pour mettre la personne en confiance, puis de réussir à « lâcher le bébé ».
+
Mais il s’agit aussi de réussir à juger si la communication est aisée, et de ne pas nécessairement partir du principe que tout sera génial. C’est une relation de travail, pas une amitié.
+
De son côté également il doit y avoir des questionnements. Je mets une attention particulière à les accueillir : les questionnement sont bienvenus, voir même attendus.
+
Le pire pour moi serait d’avoir quelqu’un qui à peur de ne pas savoir, et qui dit qu’elle sait plutôt que de laisser la place pour l’apprentissage.
+
Faire confiance
+
Il me semble qu’il peut exister deux types de confiance :
+
+
+
Laisser la possibilité de se tromper : il est possible de faire confiance à l’autre dans son apprentissage, pour qu’iel se sente légitime à faire ses choix, ceux qu’il⋅elle estimera les bons, et qui seront donc les bons — par définition ;
+
+
+
La confiance relationnelle, de l’ordre des relations inter-personnelles, de la relation à l’autre. Parce que c’est aussi une rencontre, et que je cherche à créer des relations de travail où l’on peut se dire les choses sans se blesser, en confiance donc.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/archives.html b/archives.html
index c37db5d..976d9fd 100644
--- a/archives.html
+++ b/archives.html
@@ -19,6 +19,10 @@
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
-
-
-
- En Février, il y a 29 Jours, et avec un ami on s’est dit qu’on aimerait bien utiliser chacun d’entre eux pour créer — de manière intensive et sans jugement — hors de notre zone de confort, et avec...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
-
-
-
- En Février, il y a 29 Jours, et avec un ami on s’est dit qu’on aimerait bien utiliser chacun d’entre eux pour créer — de manière intensive et sans jugement — hors de notre zone de confort, et avec...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
-
-
-
- En Février, il y a 29 Jours, et avec un ami on s’est dit qu’on aimerait bien utiliser chacun d’entre eux pour créer — de manière intensive et sans jugement — hors de notre zone de confort, et avec...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
-
-
-
- En Février, il y a 29 Jours, et avec un ami on s’est dit qu’on aimerait bien utiliser chacun d’entre eux pour créer — de manière intensive et sans jugement — hors de notre zone de confort, et avec...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
-
-
-
- En Février, il y a 29 Jours, et avec un ami on s’est dit qu’on aimerait bien utiliser chacun d’entre eux pour créer — de manière intensive et sans jugement — hors de notre zone de confort, et avec...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
-
-
-
- En Février, il y a 29 Jours, et avec un ami on s’est dit qu’on aimerait bien utiliser chacun d’entre eux pour créer — de manière intensive et sans jugement — hors de notre zone de confort, et avec...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
-
-
-
- En Février, il y a 29 Jours, et avec un ami on s’est dit qu’on aimerait bien utiliser chacun d’entre eux pour créer — de manière intensive et sans jugement — hors de notre zone de confort, et avec...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
-
-
-
- En Février, il y a 29 Jours, et avec un ami on s’est dit qu’on aimerait bien utiliser chacun d’entre eux pour créer — de manière intensive et sans jugement — hors de notre zone de confort, et avec...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
-
-
-
- En Février, il y a 29 Jours, et avec un ami on s’est dit qu’on aimerait bien utiliser chacun d’entre eux pour créer — de manière intensive et sans jugement — hors de notre zone de confort, et avec...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
-
-
-
- En Février, il y a 29 Jours, et avec un ami on s’est dit qu’on aimerait bien utiliser chacun d’entre eux pour créer — de manière intensive et sans jugement — hors de notre zone de confort, et avec...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
-
-
-
- En Février, il y a 29 Jours, et avec un ami on s’est dit qu’on aimerait bien utiliser chacun d’entre eux pour créer — de manière intensive et sans jugement — hors de notre zone de confort, et avec...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
-
-
-
- En Février, il y a 29 Jours, et avec un ami on s’est dit qu’on aimerait bien utiliser chacun d’entre eux pour créer — de manière intensive et sans jugement — hors de notre zone de confort, et avec...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
-
-
-
- En Février, il y a 29 Jours, et avec un ami on s’est dit qu’on aimerait bien utiliser chacun d’entre eux pour créer — de manière intensive et sans jugement — hors de notre zone de confort, et avec...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
-
-
-
- En Février, il y a 29 Jours, et avec un ami on s’est dit qu’on aimerait bien utiliser chacun d’entre eux pour créer — de manière intensive et sans jugement — hors de notre zone de confort, et avec...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Headline : De l’importance des rôles informels et de leur partage au sein d’un groupe. Un […] dispositif consiste à tenter de faire bouger les rôles (pré)acquis ou qui se fixent dans le groupe,...
-
-
-
- Un enfant demande à son père : Dis papa, quel est le secret pour être heureux ? Sans dire un mot, le père demande à son fils de le suivre ; Ils sortent de la maison, le père sur leur vieil âne et...
-
-
-
-
- Aujourd’hui, mon métier est d’être développeur d’applications. Imaginer des solutions techniques pour faire marcher des logiciels, puis écrire les lignes de code nécessaires. Être Développeur...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Headline : De l’importance des rôles informels et de leur partage au sein d’un groupe. Un […] dispositif consiste à tenter de faire bouger les rôles (pré)acquis ou qui se fixent dans le groupe,...
-
-
-
- Un enfant demande à son père : Dis papa, quel est le secret pour être heureux ? Sans dire un mot, le père demande à son fils de le suivre ; Ils sortent de la maison, le père sur leur vieil âne et...
-
-
-
-
- Aujourd’hui, mon métier est d’être développeur d’applications. Imaginer des solutions techniques pour faire marcher des logiciels, puis écrire les lignes de code nécessaires. Être Développeur...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
+
+
+
+ J’ai pensé durant de nombreuses années que je savais gérer le conflit, alors que c’était en fait impensé. Ne pas être en conflit signifie parfois s’adapter aux autres, parfois ne pas (assez)...
+
+
+
+
+ Je parle souvent de coopération, que j’imagine comme « un fonctionnement collectif, dans lequel chacun⋅e y trouve son compte ». Or je me rends aujourd’hui compte que cette définition mets de côté...
+
+
+
+
+ Trois semaines de vacances m’ont fait le plus grand bien. Je suis toujours autant étonné par ma capacité à repousser mes limites quand je suis la tête dans le guidon, ce qui était le cas...
+
+
+
+
+ Je m’intéresse un peu tardivement a la question des différents vaccins, pour pouvoir mieux comprendre comment ceux cis fonctionnent et quels sont les risques liés. Cette réflexion n’est en aucun...
+
+
+
+
+ En créant la brasserie du Vieux Singe, le fait de créer une page facebook s’est posé comme une évidence. Il s’agit de l’outil de facto pour communiquer avec son « audience ». J’ai donc créé une...
+
+
+
+
+ Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
+
+
+
+
+ Ces derniers temps, je me suis retrouvé à questionner mon rapport a la pratique du développement personnel. À quel point le celui ci, et la « psychologie positive » peuvent-elles jouer un rôle de...
+
+
+
+
+ Headline : De l’importance des rôles informels et de leur partage au sein d’un groupe. Un […] dispositif consiste à tenter de faire bouger les rôles (pré)acquis ou qui se fixent dans le groupe,...
+
+
+
J’ai l’impression d’avoir vécu une accélération assez incroyable ces dernières années. J’ai maintenant 36 ans et ces 5 dernières années sont passées à une vitesse folle.
+
J’ai vécu plein de choses chouettes, rencontré des personnes extraordinaires et fait progresser ma vision des choses sur beaucoup d’aspects, mais j’ai aussi cette impression de vivre les choses avec une intensité moins importante.
+
Je me demande si quelque part ce n’est pas une conséquence du fait de conscientiser mes privilèges (d’homme, de blanc, de classe aisée). Je me pose plus de questions et donc celles-ci viennent quelque part « parasiter » mon habitude précédente de « prendre les choses à la légère » (tout en écrasant les autres).
+
Je trouve cette piste intéressante parce qu’elle vient visibiliser ces privilèges. C’est donc un privilège de ne pas se soucier de son impact sur les autres, par exemple (beurk).
+
A noter aussi que je travaille trop (pour moi toujours est-il) et que je n’ai pas assez de temps libre pour prendre soin de mes passions/ami⋅es.
+
C’est en cours d’évolution mais je dois bien dire que je commence à tirer la langue, et je me demande si les changement que j’ai vécu à travers ce « trop de travail » ne m’ont pas endommagé de manière irréversible.
+
L’avenir dira :-)
+
+
+
+
\ No newline at end of file
diff --git a/dynamically-change-your-gnome-desktop-wallpaper.html b/dynamically-change-your-gnome-desktop-wallpaper.html
index 5bedcca..d613550 100644
--- a/dynamically-change-your-gnome-desktop-wallpaper.html
+++ b/dynamically-change-your-gnome-desktop-wallpaper.html
@@ -46,35 +46,35 @@ $ gnome-background-generator -p ~/Images/walls -s
diff --git a/eco-systeme-et-stockage-generique.html b/eco-systeme-et-stockage-generique.html
index 192b44b..aba1af8 100644
--- a/eco-systeme-et-stockage-generique.html
+++ b/eco-systeme-et-stockage-generique.html
@@ -122,16 +122,16 @@ terme, et que Remote Storage devienne une facette de notre solutio
PouchDB est une bibliothèque JavaScript qui
permet de manipuler des enregistrements en local et de les synchroniser
vers une base distante.
Le projet a le vent en poupe, bénéficie de nombreux contributeurs,
diff --git a/fatigue-relationnelle.html b/fatigue-relationnelle.html
new file mode 100644
index 0000000..bd71a6e
--- /dev/null
+++ b/fatigue-relationnelle.html
@@ -0,0 +1,39 @@
+
+
+
Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années.
+
Je ne sais pas exactement d’où cela vient : si c’est un des nombreux effets psychologiques que le COVID à eu sur moi, si j’accorde trop de place aux collectifs dans ma vie (travail, habitation, ami⋅es), ou si simplement mes envies ne sont plus les mêmes qu’il y a quelques années, mais le résultat est bel et bien là.
+
Malgré tout j’ai envie d’être disponible pour les personnes qui comptent pour moi, et je réfléchis donc à différentes solutions : déménager et habiter en solo, faire moins d’activités extérieures ou bien m’isoler plus souvent dans les espaces collectifs.
+
Le fait de retourner potentiellement habiter en solo vient questionner mon rapport au collectif omniprésent dans ma vie, et qui jouit d’un statut particulier pour moi. Le collectif semble être quasiment un objectif en soi, et donc quelque-part partir de ces espaces collectifs serait une sorte d’échec.
+
Entrouvrir cette possibilité me plaît parce-que ça me pousse à accepter mes limites et à mettre en balance ma qualité de relation aux autres avec mes valeurs collectivistes. Du collectif, oui, mais peut-être avec un mix différent ?
+
Ça fait également écho à ma gestion du conflit. Je me rends compte que j’ai besoin d’évoluer dans des collectifs qui partagent cette culture de la gestion du conflit (plutôt que de son évitement).
+
+
+
+
\ No newline at end of file
diff --git a/feeds/.atom.xml b/feeds/.atom.xml
index 336a197..0d063e3 100644
--- a/feeds/.atom.xml
+++ b/feeds/.atom.xml
@@ -1,5 +1,40 @@
-Alexis Métaireauhttps://blog.notmyidea.org/2021-11-11T00:00:00+01:00Conflit2021-11-11T00:00:00+01:002021-11-11T00:00:00+01:00tag:blog.notmyidea.org,2021-11-11:/conflit.html
+Alexis Métaireauhttps://blog.notmyidea.org/2022-05-06T00:00:00+02:00Fatigue relationnelle2022-05-06T00:00:00+02:002022-05-06T00:00:00+02:00tag:blog.notmyidea.org,2022-05-06:/fatigue-relationnelle.html
+<p>Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années.</p>
+<p>Je ne sais pas exactement d’où cela vient : si c’est un des nombreux effets …</p>
+<p>Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années.</p>
+<p>Je ne sais pas exactement d’où cela vient : si c’est un des nombreux effets psychologiques que le <span class="caps">COVID</span> à eu sur moi, si j’accorde trop de place aux collectifs dans ma vie (travail, habitation, ami⋅es), ou si simplement mes envies ne sont plus les mêmes qu’il y a quelques années, mais le résultat est bel et bien là.</p>
+<p>Malgré tout j’ai envie d’être disponible pour les personnes qui comptent pour moi, et je réfléchis donc à différentes solutions : déménager et habiter en solo, faire moins d’activités extérieures ou bien m’isoler plus souvent dans les espaces collectifs.</p>
+<p>Le fait de retourner potentiellement habiter en solo vient questionner mon rapport au collectif omniprésent dans ma vie, et qui jouit d’un statut particulier pour moi. Le collectif semble être quasiment un <em>objectif en soi</em>, et donc quelque-part partir de ces espaces collectifs serait une sorte d’échec.</p>
+<p>Entrouvrir cette possibilité me plaît parce-que ça me pousse à accepter mes limites et à mettre en balance ma qualité de relation aux autres avec mes valeurs collectivistes. Du collectif, oui, mais peut-être avec un mix différent ?</p>
+<p>Ça fait également écho à ma <a href="conflit.html">gestion du conflit</a>. Je me rends compte que j’ai besoin d’évoluer dans des collectifs qui partagent cette culture de la gestion du conflit (plutôt que de son évitement).</p>Accueil, transmission et confiance2022-05-01T00:00:00+02:002022-05-01T00:00:00+02:00tag:blog.notmyidea.org,2022-05-01:/accueil-transmission-et-confiance.html
+<p>Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons :</p>
+<ul>
+<li>Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des sujets de fond, pour progressivement changer l’équilibre dans mon métier ;</li>
+<li>J’ai désormais quelqu’une avec …</li></ul>
+<p>Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons :</p>
+<ul>
+<li>Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des sujets de fond, pour progressivement changer l’équilibre dans mon métier ;</li>
+<li>J’ai désormais quelqu’une avec qui échanger sur les problématiques techniques du métier de livreur / commercial ;</li>
+</ul>
+<p>Mais cela me fait aussi peur : cela va nécessairement bousculer l’équilibre — parfois fragile — en place entre les associés actuels. Même si je vois cette évolution d’un bon œil, les transitions sont parfois difficiles.</p>
+<p>Ça me donne donc envie de construire une relation de confiance, et de donner les moyens à cette nouvelle arrivante de s’y retrouver.</p>
+<h2 id="transmission">Transmission</h2>
+<p>Cela me pose donc de nouvelles questions, autour de l’accueil et de la transmission.</p>
+<p>Il me semble que l’enjeu est de laisser une liberté d’action progressive pour mettre la personne en confiance, puis de réussir à « lâcher le bébé ».</p>
+<p>Mais il s’agit aussi de réussir à juger si la communication est aisée, et de ne pas nécessairement partir du principe que tout sera génial. C’est une relation de travail, pas une amitié.</p>
+<p>De son côté également il doit y avoir des questionnements. Je mets une attention particulière à les accueillir : les questionnement sont bienvenus, voir même attendus.</p>
+<p>Le pire pour moi serait d’avoir quelqu’un qui à peur de ne pas savoir, et qui dit qu’elle sait plutôt que de laisser la place pour l’apprentissage.</p>
+<h2 id="faire-confiance">Faire confiance</h2>
+<p>Il me semble qu’il peut exister deux types de confiance :</p>
+<ol>
+<li>
+<p><em>Laisser la possibilité de se tromper</em> : il est possible de faire confiance à l’autre dans son apprentissage, pour qu’iel se sente légitime à faire <em>ses</em> choix, ceux qu’il⋅elle estimera les bons, et qui seront donc les bons — par définition ;</p>
+</li>
+<li>
+<p>La <em>confiance relationnelle</em>, de l’ordre des relations inter-personnelles, de la relation à l’autre. Parce que c’est aussi une rencontre, et que je cherche à créer des relations de travail où l’on peut se dire les choses sans se blesser, en confiance donc.</p>
+</li>
+</ol>Conflit2021-11-11T00:00:00+01:002021-11-11T00:00:00+01:00tag:blog.notmyidea.org,2021-11-11:/conflit.html
<p>J’ai pensé durant de nombreuses années que je savais gérer le conflit, alors que c’était en fait impensé.</p>
<p>Ne pas être en conflit signifie parfois s’adapter aux autres, parfois ne pas (assez) s’écouter, et ne pas se faire entendre. </p>
<p><strong>Alors que je pensais gérer le conflit …</strong></p>
@@ -1842,8 +1877,8 @@ obtenir le même résultat à partir de la même entrée.</p>
une collection <span class="caps">JSON</span>. Chaque élément contient un identifiant unique généré sur
le client.</p>
<p>Par exemple, un enregistrement peut ressembler à :</p>
-<div class="highlight"><pre><span></span><span class="p">{</span><span class="s2">"id"</span><span class="o">:</span> <span class="s2">"b7dded96-8df0-8af8-449a-8bc47f71b4c4"</span><span class="p">,</span>
- <span class="s2">"fingerprint"</span><span class="o">:</span> <span class="s2">"11:D5:D2:0A:9A:F8:D9:FC:23:6E:5C:5C:30:EC:AF:68:F5:68:FB:A3"</span><span class="p">}</span>
+<div class="highlight"><pre><span></span><span class="p">{</span><span class="s2">"id"</span><span class="o">:</span><span class="w"> </span><span class="s2">"b7dded96-8df0-8af8-449a-8bc47f71b4c4"</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s2">"fingerprint"</span><span class="o">:</span><span class="w"> </span><span class="s2">"11:D5:D2:0A:9A:F8:D9:FC:23:6E:5C:5C:30:EC:AF:68:F5:68:FB:A3"</span><span class="p">}</span><span class="w"></span>
</pre></div>
<p>Le <em>hash</em> de la collection est ensuite calculé, signé puis envoyé au serveur
(voir plus bas pour les détails).</p>
@@ -2291,7 +2326,7 @@ des tests souvent !</p>
</div>
<p>Speaker: serge_sans_paille.</p>
<p>Retour sur le passé des boucles: <span class="caps">ASM</span>, fortran, C. Avec <span class="caps">APL</span>, la boucle est
-cachée au fur et à mesure des évolutions. Écrire une boucle ne devrait pas etre …</p><div class="admonition note">
+cachée au fur et à mesure des évolutions. Écrire une boucle ne devrait …</p><div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Voici quelques notes prises durant la PyconFR 2015, à Pau. N’hésitez pas
à les completer si besoin.</p>
@@ -3013,7 +3048,7 @@ d’écriture sur une collection d’enregistrements.&l
<li><strong>La synchronisation</strong> : une série de leviers pour récupérer et renvoyer des
changements sur les données, sans perte ni collision, en utilisant les timestamps.</li>
<li><strong>Les permissions</strong> : les droits d’un utilisateur sur une collection ou un enregistrement
-(<em>encore frais et sur le point d’être documenté</em>) <a class="footnote-reference" href="#id3" id="id1">[1]</a>.</li>
+(<em>encore frais et sur le point d’être documenté</em>) <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a>.</li>
<li><strong>Opérations par lot</strong>: une <span class="caps">URL</span> qui permet d’envoyer une série de requêtes
décrites en <span class="caps">JSON</span> et d’obtenir les réponses respectives.</li>
</ul>
@@ -3035,17 +3070,17 @@ de <em>Firefox Sync</em> pour la gestion de la concurrence et de&
<p>Il est <a class="reference external" href="http://cliquet.readthedocs.org/en/latest/api/index.html">documenté en détail</a>.</p>
<p>Dans un monde idéal, ce protocole serait versionné, et formalisé dans une <span class="caps">RFC</span>.
En rêve, il existerait même plusieurs implémentations avec des technologies différentes
-(Python, Go, Node, etc.). <a class="footnote-reference" href="#id4" id="id2">[2]</a></p>
-<table class="docutils footnote" frame="void" id="id3" rules="none">
+(Python, Go, Node, etc.). <a class="footnote-reference" href="#footnote-2" id="footnote-reference-2">[2]</a></p>
+<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>Voir notre <a class="reference external" href="https://blog.notmyidea.org/service-de-nuages-la-gestion-des-permissions-fr.html">article dédié sur les permissions</a></td></tr>
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>Voir notre <a class="reference external" href="https://blog.notmyidea.org/service-de-nuages-la-gestion-des-permissions-fr.html">article dédié sur les permissions</a></td></tr>
</tbody>
</table>
-<table class="docutils footnote" frame="void" id="id4" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td>Rappel: nous sommes une toute petite équipe !</td></tr>
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-2">[2]</a></td><td>Rappel: nous sommes une toute petite équipe !</td></tr>
</tbody>
</table>
</div>
@@ -3053,7 +3088,7 @@ En rêve, il existerait même plusieurs implémentations avec des technologies d
<h2>Le toolkit</h2>
<div class="section" id="choix-techniques">
<h3>Choix techniques</h3>
-<p><em>Cliquet</em> implémente le protocole en Python (<em>2.7, 3.4+, pypy</em>), avec <a class="reference external" href="http://trypyramid.com/">Pyramid</a> <a class="footnote-reference" href="#id6" id="id5">[3]</a>.</p>
+<p><em>Cliquet</em> implémente le protocole en Python (<em>2.7, 3.4+, pypy</em>), avec <a class="reference external" href="http://trypyramid.com/">Pyramid</a> <a class="footnote-reference" href="#footnote-3" id="footnote-reference-3">[3]</a>.</p>
<p><strong>Pyramid</strong> est un framework Web qui va prendre en charge tout la partie <span class="caps">HTTP</span>,
et qui s’avère pertinent aussi bien pour des petits projets que des plus ambitieux.</p>
<p><strong>Cornice</strong> est une extension de <em>Pyramid</em>, écrite en partie par Alexis et Tarek,
@@ -3066,10 +3101,10 @@ rigoureux, gérer les entêtes <span class="caps">CORS</span>, fourn
<p><strong>Cliquet</strong> utilise les deux précédents pour implémenter le protocole et fournir
des abstractions, mais on a toujours <em>Pyramid</em> et <em>Cornice</em> sous la main pour
aller au delà de ce qui est proposé !</p>
-<table class="docutils footnote" frame="void" id="id6" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-3" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id5">[3]</a></td><td>Au tout début nous avons commencé une implémentation avec <em>Python-Eve</em>
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-3">[3]</a></td><td>Au tout début nous avons commencé une implémentation avec <em>Python-Eve</em>
(Flask), mais n’étions pas satisfaits de l’approche pour la configuration
de l’<span class="caps">API</span>. En particulier du côté magique.</td></tr>
</tbody>
@@ -3161,18 +3196,18 @@ avec <em>Colander</em>, et ensuite déclarer une resource:&
<p>Désormais, la resource <span class="caps">CRUD</span> est disponible sur <tt class="docutils literal">/v1/bookmarks</tt>, avec toutes
les fonctionnalités de synchronisation, filtrage, tri, pagination, timestamp, etc.
De base les enregistrements sont privés, par utilisateur.</p>
-<div class="highlight"><pre><span></span><span class="err">$</span> <span class="err">h</span><span class="kc">tt</span><span class="err">p</span> <span class="err">GET</span> <span class="s2">"http://localhost:8000/v1/bookmarks"</span>
-<span class="err">HTTP/</span><span class="mf">1.1</span> <span class="mi">200</span> <span class="err">OK</span>
-<span class="err">...</span>
-<span class="p">{</span>
- <span class="nt">"data"</span><span class="p">:</span> <span class="p">[</span>
- <span class="p">{</span>
- <span class="nt">"url"</span><span class="p">:</span> <span class="s2">"http://cliquet.readthedocs.org"</span><span class="p">,</span>
- <span class="nt">"id"</span><span class="p">:</span> <span class="s2">"cc103eb5-0c80-40ec-b6f5-dad12e7d975e"</span><span class="p">,</span>
- <span class="nt">"last_modified"</span><span class="p">:</span> <span class="mi">1437034418940</span><span class="p">,</span>
- <span class="p">}</span>
- <span class="p">]</span>
-<span class="p">}</span>
+<div class="highlight"><pre><span></span><span class="err">$</span><span class="w"> </span><span class="err">h</span><span class="kc">tt</span><span class="err">p</span><span class="w"> </span><span class="err">GET</span><span class="w"> </span><span class="s2">"http://localhost:8000/v1/bookmarks"</span><span class="w"></span>
+<span class="err">HTTP/</span><span class="mf">1.1</span><span class="w"> </span><span class="mi">200</span><span class="w"> </span><span class="err">OK</span><span class="w"></span>
+<span class="err">...</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="nt">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"></span>
+<span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="nt">"url"</span><span class="p">:</span><span class="w"> </span><span class="s2">"http://cliquet.readthedocs.org"</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"cc103eb5-0c80-40ec-b6f5-dad12e7d975e"</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="nt">"last_modified"</span><span class="p">:</span><span class="w"> </span><span class="mi">1437034418940</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
+<span class="w"> </span><span class="p">]</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
</pre></div>
</div>
<div class="section" id="etape-3">
@@ -3463,7 +3498,7 @@ concept repose sur <a class="reference external" href="https://fr.wikipedia.o
<a class="reference external" href="https://tools.ietf.org/html/draft-dejong-remotestorage-05">*Remote Storage*</a>,
mais pour l’instant les cas d’utilisations ne se sont pas encore présentés officiellement.</p>
</div>
-<div class="section" id="id2">
+<div class="section" id="a-venir-1">
<h3>À venir</h3>
<p>Nous serons probablement amenés à introduire la gestion de la concurrence dans
le client <span class="caps">JS</span>, en complément de ce qui a été fait sur le serveur, pour permettre
@@ -3478,17 +3513,17 @@ que <a class="reference external" href="https://github.com/mozilla-services/k
<h2>Contenus applicatifs de Firefox</h2>
<p>Aujourd’hui Firefox a un cycle de release de six semaines. Un des objectifs
consiste à désolidariser certains contenus applicatifs de ces cycles
-relativement longs (ex. <em>règles de securité, dictionnaires, traductions, …</em>) <a class="footnote-reference" href="#id4" id="id3">[1]</a>.</p>
+relativement longs (ex. <em>règles de securité, dictionnaires, traductions, …</em>) <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a>.</p>
<p>Il s’agit de données <span class="caps">JSON</span> et binaire qui doivent être versionnées et synchronisées par
les navigateurs (<em>lecture seule</em>).</p>
<p>Il y a plusieurs outils officiels qui existent pour gérer ça (<em>Balrog</em>, <em>Shavar</em>, …),
et pour l’instant, aucun choix n’a été fait. Mais lors des conversations avec
l’équipe en charge du projet, ce fût vraiment motivant de voir que même pour
ce genre de besoins internes, <em>Kinto</em> est tout aussi pertinent !</p>
-<table class="docutils footnote" frame="void" id="id4" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id3">[1]</a></td><td>La bonne nouvelle c’est que toutes les fonctionnalités <em>third-party</em> qui ont
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>La bonne nouvelle c’est que toutes les fonctionnalités <em>third-party</em> qui ont
été intégrées récemment vont redevenir des <em>add-ons</em> \o/.</td></tr>
</tbody>
</table>
@@ -3502,7 +3537,7 @@ un prototype pour améliorer <em>Awesome bar</em>, qui fusionnerait
<p>Nous ne pouvons pas en dire beaucoup plus pour l’instant, mais les fonctionnalités
de collections d’enregistrements partagées entre utilisateurs de <em>Kinto</em>
correspondent parfaitement à ce qui est envisagé pour le futur du navigateur :)</p>
-<div class="section" id="id5">
+<div class="section" id="a-venir-2">
<h3>À venir</h3>
<p>Nous serons donc probablement amenés, avant de la fin de l’année, à introduire des
fonctionnalités d’indexation et de recherche <em>full-text</em> (comprendre <em>ElasticSearch</em>).
@@ -3524,7 +3559,7 @@ ou un équivalent à <em>Alexa.com Top 500</em> pour fournir la comp
interroger le moteur de recherche.</p>
<p>L’exercice pourrait être poussé jusqu’à la synchronisation d’états <em>React</em>
entre périphériques (par exemple pour les onglets).</p>
-<div class="section" id="id7">
+<div class="section" id="a-venir-3">
<h3>À venir</h3>
<p>Si <em>browser.html</em> doit stocker des données de navigation, il faudra ajouter
des fonctionnalités de chiffrement sur le client <span class="caps">JS</span>. Ça tombe bien, c’est un
@@ -3685,7 +3720,7 @@ du sens.</p>
et Kinto 1.0 !</p>
<p><em>Cet article est repris depuis le blog « Service de Nuages » de mon équipe à Mozilla</em></p>
<p>Aujourd’hui, c’est jour de fête : nous venons de publier Cliquet <strong>2.0</strong>
-<a class="footnote-reference" href="#id5" id="id1">[1]</a> et Kinto <strong>1.0</strong> <a class="footnote-reference" href="#id6" id="id2">[2]</a>.</p>
+<a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a> et Kinto <strong>1.0</strong> <a class="footnote-reference" href="#footnote-2" id="footnote-reference-2">[2]</a>.</p>
<blockquote class="epigraph">
<p>L’aboutissement de 3 années de R&D !</p>
<p class="attribution">—Rémy</p>
@@ -3706,7 +3741,7 @@ fonctionnalités que l’on attendait depuis longtemps, comme la gestion
s’empêcher de voir toutes les choses qui doivent toujours être améliorées,
notamment sur la documentation et les performances.</p>
<p>On peut déjà entrevoir à quoi l’écosystème va ressembler, et c’est prometteur.
-Il y a déjà un client JavaScript <a class="footnote-reference" href="#id7" id="id3">[3]</a> dont l’objectif est de synchroniser les
+Il y a déjà un client JavaScript <a class="footnote-reference" href="#footnote-3" id="footnote-reference-3">[3]</a> dont l’objectif est de synchroniser les
données locales du navigateur avec une instance de Kinto.</p>
<p>N’hésitez vraiment pas à nous solliciter pour discuter avec vous si vous avez
des problématiques proches : nous accueillons avec plaisir toutes sortes de
@@ -3715,34 +3750,34 @@ la solution ou de la manière de communiquer avec le monde extérieur. Si vous
souhaitez nous contacter, vous pouvez laisser un commentaire ici ou nous
contacter sur le canal <a class="reference external" href="irc://irc.mozilla.org/#storage">#storage</a> sur le réseau <span class="caps">IRC</span> de Mozilla.</p>
<p>Et ce n’est que le début ! Le futur se dessine dans notre feuille de route
-<a class="footnote-reference" href="#id8" id="id4">[4]</a>.</p>
-<table class="docutils footnote" frame="void" id="id5" rules="none">
+<a class="footnote-reference" href="#footnote-4" id="footnote-reference-4">[4]</a>.</p>
+<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td><strong>Cliquet</strong> est une boite à outils pour faciliter l’implémentation de
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td><strong>Cliquet</strong> est une boite à outils pour faciliter l’implémentation de
microservices <span class="caps">HTTP</span> tels que les APIs <em><span class="caps">REST</span></em> ayant des besoins de
synchronisation.</td></tr>
</tbody>
</table>
-<table class="docutils footnote" frame="void" id="id6" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td><strong>Kinto</strong> est un service pour stocker, synchroniser et partager des données
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-2">[2]</a></td><td><strong>Kinto</strong> est un service pour stocker, synchroniser et partager des données
arbitraires, attachées à un compte Firefox (mais le système d’authentification
est <em>pluggable</em>).</td></tr>
</tbody>
</table>
-<table class="docutils footnote" frame="void" id="id7" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-3" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id3">[3]</a></td><td>Cliquetis, la bibliothèque JavaScript pour consommer l’<span class="caps">API</span> <span class="caps">HTTP</span> de Kinto —
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-3">[3]</a></td><td>Cliquetis, la bibliothèque JavaScript pour consommer l’<span class="caps">API</span> <span class="caps">HTTP</span> de Kinto —
<a class="reference external" href="https://github.com/mozilla-services/cliquetis">https://github.com/mozilla-services/cliquetis</a></td></tr>
</tbody>
</table>
-<table class="docutils footnote" frame="void" id="id8" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-4" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id4">[4]</a></td><td>La feuille de route de Kinto: <a class="reference external" href="https://github.com/mozilla-services/kinto/wiki/roadmap">https://github.com/mozilla-services/kinto/wiki/roadmap</a></td></tr>
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-4">[4]</a></td><td>La feuille de route de Kinto: <a class="reference external" href="https://github.com/mozilla-services/kinto/wiki/roadmap">https://github.com/mozilla-services/kinto/wiki/roadmap</a></td></tr>
</tbody>
</table>
Service de nuages : Stocker et interroger les permissions avec Kinto2015-05-26T00:00:00+02:002015-05-26T00:00:00+02:00tag:blog.notmyidea.org,2015-05-26:/service-de-nuages-stocker-et-interroger-les-permissions-avec-kinto-fr.html<p class="first last">Comment faire pour stocker et interroger la base de données au sujet des permissions avec Kinto ?</p>
@@ -3858,13 +3893,13 @@ avantages (lisibilité, unicité, cohérence avec les URLs)</p>
<div class="section" id="les-tables">
<h3>Les tables</h3>
<p>Pour le stockage des principals et des permissions:</p>
-<div class="highlight"><pre><span></span><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="k">user</span><span class="p">(</span><span class="n">id</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="n">principals</span> <span class="nb">TEXT</span><span class="p">[]);</span>
-<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">perms</span><span class="p">(</span><span class="n">ace</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="n">principals</span> <span class="nb">TEXT</span><span class="p">[]);</span>
+<div class="highlight"><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="k">user</span><span class="p">(</span><span class="n">id</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="n">principals</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">[]);</span><span class="w"></span>
+<span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">perms</span><span class="p">(</span><span class="n">ace</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="n">principals</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">[]);</span><span class="w"></span>
</pre></div>
<p>La table <em>perms</em> va associer des <em>principals</em> à chaque <em><span class="caps">ACE</span></em> (e.g.“/buckets/blog:write“).</p>
<p>Pour le stockage des données:</p>
-<div class="highlight"><pre><span></span><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="k">object</span><span class="p">(</span><span class="n">id</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="k">type</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="n">parent_id</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="k">data</span> <span class="n">JSONB</span><span class="p">,</span>
- <span class="n">write_principals</span> <span class="nb">TEXT</span><span class="p">[],</span> <span class="n">read_principals</span> <span class="nb">TEXT</span><span class="p">[]);</span>
+<div class="highlight"><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="k">object</span><span class="p">(</span><span class="n">id</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="w"> </span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">write_principals</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">[],</span><span class="w"> </span><span class="n">read_principals</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">[]);</span><span class="w"></span>
</pre></div>
<p>La colonne <em>parent_id</em> permet de savoir à qui appartient l’objet
(e.g. groupe d’un <em>bucket</em>, collection d’un <em>bucket</em>, <em>record</em> d’une
@@ -3872,53 +3907,53 @@ collection, …).</p>
</div>
<div class="section" id="exemple-d-utilisateur">
<h3>Exemple d’utilisateur</h3>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">user</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="n">principals</span><span class="p">)</span>
- <span class="k">VALUES</span> <span class="p">(</span><span class="s1">'fxa:alexis'</span><span class="p">,</span> <span class="s1">'{}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">user</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">principals</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'fxa:alexis'</span><span class="p">,</span><span class="w"> </span><span class="s1">'{}'</span><span class="p">);</span><span class="w"></span>
-<span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">user</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="n">principals</span><span class="p">)</span>
- <span class="k">VALUES</span> <span class="p">(</span><span class="s1">'fxa:natim'</span><span class="p">,</span>
- <span class="s1">'{"/buckets/blog/groups/moderators"}'</span><span class="p">);</span>
+<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">user</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">principals</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'fxa:natim'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"/buckets/blog/groups/moderators"}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
</div>
<div class="section" id="exemple-d-objets">
<h3>Exemple d’objets</h3>
<div class="section" id="bucket">
<h4>Bucket</h4>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">object</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="k">type</span><span class="p">,</span> <span class="n">parent_id</span><span class="p">,</span> <span class="k">data</span><span class="p">,</span>
- <span class="n">read_principals</span><span class="p">,</span> <span class="n">write_principals</span><span class="p">)</span>
-<span class="k">VALUES</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog'</span><span class="p">,</span>
- <span class="s1">'bucket'</span><span class="p">,</span>
- <span class="k">NULL</span><span class="p">,</span>
- <span class="s1">'{"name": "blog"}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span>
- <span class="s1">'{}'</span><span class="p">,</span> <span class="s1">'{"fxa:alexis"}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">read_principals</span><span class="p">,</span><span class="w"> </span><span class="n">write_principals</span><span class="p">)</span><span class="w"></span>
+<span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'bucket'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="k">NULL</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"name": "blog"}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{}'</span><span class="p">,</span><span class="w"> </span><span class="s1">'{"fxa:alexis"}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
</div>
<div class="section" id="group">
<h4>Group</h4>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">object</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="k">type</span><span class="p">,</span> <span class="n">parent_id</span><span class="p">,</span> <span class="k">data</span><span class="p">,</span>
- <span class="n">read_principals</span><span class="p">,</span> <span class="n">write_principals</span><span class="p">)</span>
-<span class="k">VALUES</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog/groups/moderators'</span><span class="p">,</span>
- <span class="s1">'group'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog'</span><span class="p">,</span>
- <span class="s1">'{"name": "moderators", "members": ['</span><span class="n">fxa</span><span class="p">:</span><span class="n">natim</span><span class="s1">']}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span>
- <span class="s1">'{}'</span><span class="p">,</span> <span class="s1">'{}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">read_principals</span><span class="p">,</span><span class="w"> </span><span class="n">write_principals</span><span class="p">)</span><span class="w"></span>
+<span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/groups/moderators'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'group'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"name": "moderators", "members": ['</span><span class="n">fxa</span><span class="p">:</span><span class="n">natim</span><span class="s1">']}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{}'</span><span class="p">,</span><span class="w"> </span><span class="s1">'{}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
<p>Ce groupe peut être gére par <tt class="docutils literal">fxa:alexis</tt> puisqu’il a la permission
<tt class="docutils literal">write</tt> dans le <em>bucket</em> parent.</p>
</div>
<div class="section" id="collection">
<h4>Collection</h4>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">object</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="k">type</span><span class="p">,</span> <span class="n">parent_id</span><span class="p">,</span> <span class="k">data</span><span class="p">,</span>
- <span class="n">read_principals</span><span class="p">,</span> <span class="n">write_principals</span><span class="p">)</span>
-<span class="k">VALUES</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog/collections/articles'</span><span class="p">,</span>
- <span class="s1">'collection'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog'</span><span class="p">,</span>
- <span class="s1">'{"name": "article"}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span>
- <span class="s1">'{"system.Everyone"}'</span><span class="p">,</span>
- <span class="s1">'{"/buckets/blog/groups/moderators"}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">read_principals</span><span class="p">,</span><span class="w"> </span><span class="n">write_principals</span><span class="p">)</span><span class="w"></span>
+<span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/articles'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'collection'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"name": "article"}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"system.Everyone"}'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"/buckets/blog/groups/moderators"}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
<p>Cette collection d’articles peut être lue par tout le monde,
et gérée par les membres du groupe <tt class="docutils literal">moderators</tt>, ainsi que
@@ -3926,56 +3961,56 @@ et gérée par les membres du groupe <tt class="docutils literal">moderato
</div>
<div class="section" id="records">
<h4>Records</h4>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">object</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="k">type</span><span class="p">,</span> <span class="n">parent_id</span><span class="p">,</span> <span class="k">data</span><span class="p">,</span>
- <span class="n">read_principals</span><span class="p">,</span> <span class="n">write_principals</span><span class="p">)</span>
-<span class="k">VALUES</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog/collections/articles/records/02f3f76f-7059-4ae4-888f-2ac9824e9200'</span><span class="p">,</span>
- <span class="s1">'record'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog/collections/articles'</span><span class="p">,</span>
- <span class="s1">'{"name": "02f3f76f-7059-4ae4-888f-2ac9824e9200",</span>
-<span class="s1"> "title": "Stocker les permissions", ...}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span>
- <span class="s1">'{}'</span><span class="p">,</span> <span class="s1">'{}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">read_principals</span><span class="p">,</span><span class="w"> </span><span class="n">write_principals</span><span class="p">)</span><span class="w"></span>
+<span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/articles/records/02f3f76f-7059-4ae4-888f-2ac9824e9200'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'record'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/articles'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"name": "02f3f76f-7059-4ae4-888f-2ac9824e9200",</span>
+<span class="s1"> "title": "Stocker les permissions", ...}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{}'</span><span class="p">,</span><span class="w"> </span><span class="s1">'{}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
</div>
</div>
<div class="section" id="interroger-les-permissions">
<h3>Interroger les permissions</h3>
-<div class="section" id="id1">
+<div class="section" id="obtenir-la-liste-des-principals-d-un-ace-1">
<h4>Obtenir la liste des “principals” d’un <span class="caps">ACE</span></h4>
<p>Comme vu plus haut, pour vérifier une permission, on fait l’union des
<em>principals</em> requis par les objets hérités, et on teste leur
intersection avec ceux de l’utilisateur:</p>
-<div class="highlight"><pre><span></span><span class="k">WITH</span> <span class="n">required_principals</span> <span class="k">AS</span> <span class="p">(</span>
- <span class="k">SELECT</span> <span class="k">unnest</span><span class="p">(</span><span class="n">principals</span><span class="p">)</span> <span class="k">AS</span> <span class="n">p</span>
- <span class="k">FROM</span> <span class="n">perms</span>
- <span class="k">WHERE</span> <span class="n">ace</span> <span class="k">IN</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog:write'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog:read'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog/collections/article:write'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog/collections/article:read'</span><span class="p">)</span>
- <span class="p">),</span>
- <span class="n">user_principals</span> <span class="k">AS</span> <span class="p">(</span>
- <span class="k">SELECT</span> <span class="k">unnest</span><span class="p">(</span><span class="n">principals</span><span class="p">)</span>
- <span class="k">FROM</span> <span class="k">user</span>
- <span class="k">WHERE</span> <span class="n">id</span> <span class="o">=</span> <span class="s1">'fxa:natim'</span>
- <span class="p">)</span>
- <span class="k">SELECT</span> <span class="k">COUNT</span><span class="p">(</span><span class="o">*</span><span class="p">)</span>
- <span class="k">FROM</span> <span class="n">user_principals</span> <span class="n">a</span>
- <span class="k">INNER</span> <span class="k">JOIN</span> <span class="n">required_principals</span> <span class="n">b</span>
- <span class="k">ON</span> <span class="n">a</span><span class="p">.</span><span class="n">p</span> <span class="o">=</span> <span class="n">b</span><span class="p">.</span><span class="n">p</span><span class="p">;</span>
+<div class="highlight"><pre><span></span><span class="k">WITH</span><span class="w"> </span><span class="n">required_principals</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">unnest</span><span class="p">(</span><span class="n">principals</span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">p</span><span class="w"></span>
+<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">perms</span><span class="w"></span>
+<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">ace</span><span class="w"> </span><span class="k">IN</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog:write'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog:read'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/article:write'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/article:read'</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="p">),</span><span class="w"></span>
+<span class="w"> </span><span class="n">user_principals</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">unnest</span><span class="p">(</span><span class="n">principals</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="k">user</span><span class="w"></span>
+<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'fxa:natim'</span><span class="w"></span>
+<span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">COUNT</span><span class="p">(</span><span class="o">*</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">user_principals</span><span class="w"> </span><span class="n">a</span><span class="w"></span>
+<span class="w"> </span><span class="k">INNER</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">required_principals</span><span class="w"> </span><span class="n">b</span><span class="w"></span>
+<span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">a</span><span class="p">.</span><span class="n">p</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">b</span><span class="p">.</span><span class="n">p</span><span class="p">;</span><span class="w"></span>
</pre></div>
</div>
<div class="section" id="filtrer-les-objets-en-fonction-des-permissions">
<h4>Filtrer les objets en fonction des permissions</h4>
<p>Pour filtrer les objets, on fait une simple intersection de liste
(<em>merci PostgreSQL</em>):</p>
-<div class="highlight"><pre><span></span><span class="k">SELECT</span> <span class="k">data</span>
- <span class="k">FROM</span> <span class="k">object</span> <span class="n">o</span><span class="p">,</span> <span class="k">user</span> <span class="n">u</span>
- <span class="k">WHERE</span> <span class="n">o</span><span class="p">.</span><span class="k">type</span> <span class="o">=</span> <span class="s1">'record'</span>
- <span class="k">AND</span> <span class="n">o</span><span class="p">.</span><span class="n">parent_id</span> <span class="o">=</span> <span class="s1">'/buckets/blog/collections/article'</span>
- <span class="k">AND</span> <span class="p">(</span><span class="n">o</span><span class="p">.</span><span class="n">read_principals</span> <span class="o">&&</span> <span class="n">u</span><span class="p">.</span><span class="n">principals</span> <span class="k">OR</span>
- <span class="n">o</span><span class="p">.</span><span class="n">write_principals</span> <span class="o">&&</span> <span class="n">u</span><span class="p">.</span><span class="n">principals</span><span class="p">)</span>
- <span class="k">AND</span> <span class="n">u</span><span class="p">.</span><span class="n">id</span> <span class="o">=</span> <span class="s1">'fxa:natim'</span><span class="p">;</span>
+<div class="highlight"><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="k">data</span><span class="w"></span>
+<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="n">o</span><span class="p">,</span><span class="w"> </span><span class="k">user</span><span class="w"> </span><span class="n">u</span><span class="w"></span>
+<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">o</span><span class="p">.</span><span class="k">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'record'</span><span class="w"></span>
+<span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">o</span><span class="p">.</span><span class="n">parent_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'/buckets/blog/collections/article'</span><span class="w"></span>
+<span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="p">(</span><span class="n">o</span><span class="p">.</span><span class="n">read_principals</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">u</span><span class="p">.</span><span class="n">principals</span><span class="w"> </span><span class="k">OR</span><span class="w"></span>
+<span class="w"> </span><span class="n">o</span><span class="p">.</span><span class="n">write_principals</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">u</span><span class="p">.</span><span class="n">principals</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">u</span><span class="p">.</span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'fxa:natim'</span><span class="p">;</span><span class="w"></span>
</pre></div>
<p>Les listes s’indexent bien, notamment grâce aux <a class="reference external" href="http://www.postgresql.org/docs/current/static/indexes-types.html">index <span class="caps">GIN</span></a>.</p>
</div>
@@ -4421,7 +4456,7 @@ une réponse satisfaisante à ces besoins.</p>
<div class="section" id="le-concept-de-principal">
<h3>Le concept de « principal »</h3>
<p>Un <em>principal</em>, en sécurité informatique, est une entité qui peut être
-authentifiée par un système informatique. <a class="footnote-reference" href="#id2" id="id1">[1]</a> En Français il s’agit
+authentifiée par un système informatique. <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a> En Français il s’agit
du « commettant », l’acteur qui commet l’action (oui, le terme est conceptuel !)</p>
<p>Il peut s’agir aussi bien d’un individu, d’un ordinateur, d’un
service ou d’un groupe regroupant l’une de ces entités, ce qui
@@ -4430,10 +4465,10 @@ est plus large que le classique « <em>user id</em> ».<
<p>Par exemple, un utilisateur est identifié de manière unique lors de la
connexion par le système d’authentification dont le rôle est de
définir une liste de <em>principals</em> pour l’utilisateur se connectant.</p>
-<table class="docutils footnote" frame="void" id="id2" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>Pour en savoir plus sur les <em>principals</em> :
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>Pour en savoir plus sur les <em>principals</em> :
<a class="reference external" href="https://en.wikipedia.org/wiki/Principal_%28computer_security%29">https://en.wikipedia.org/wiki/Principal_%28computer_security%29</a></td></tr>
</tbody>
</table>
@@ -4442,17 +4477,17 @@ définir une liste de <em>principals</em> pour l’utilisate
<h3>La différence entre rôle et groupe</h3>
<p>De but en blanc, il n’est pas évident de définir précisément la
différence entre ces deux concepts qui permettent d’associer
-des permissions à un groupe de <em>principals</em>. <a class="footnote-reference" href="#id4" id="id3">[2]</a></p>
+des permissions à un groupe de <em>principals</em>. <a class="footnote-reference" href="#footnote-2" id="footnote-reference-2">[2]</a></p>
<p>La différence est principalement sémantique. Mais on peut y voir une
différence dans la « direction » de la relation entre les deux concepts.</p>
<ul class="simple">
<li>Un rôle est une liste de permissions que l’on associe à un <em>principal</em>.</li>
<li>Un groupe est une liste de <em>principals</em> que l’on peut associer à une permission.</li>
</ul>
-<table class="docutils footnote" frame="void" id="id4" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id3">[2]</a></td><td>Plus d’informations :
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-2">[2]</a></td><td>Plus d’informations :
<a class="reference external" href="http://stackoverflow.com/questions/7770728/group-vs-role-any-real-difference">http://stackoverflow.com/questions/7770728/group-vs-role-any-real-difference</a></td></tr>
</tbody>
</table>
@@ -5099,16 +5134,16 @@ terme, et que <em>Remote Storage</em> devienne une facette de notre&
<p><a href="http://pouchdb.com/">PouchDB</a> est une bibliothèque JavaScript qui
permet de manipuler des enregistrements en local et de les synchroniser
vers une base distante.</p>
-<div class="highlight"><pre><span></span><code><span class="n">javascript</span>
-<span class="k">var</span> <span class="n">db</span> <span class="o">=</span> <span class="n">new</span> <span class="n">PouchDB</span><span class="p">(</span><span class="s1">'dbname'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><code><span class="n">javascript</span><span class="w"></span>
+<span class="k">var</span><span class="w"> </span><span class="n">db</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">PouchDB</span><span class="p">(</span><span class="s1">'dbname'</span><span class="p">);</span><span class="w"></span>
-<span class="n">db</span><span class="o">.</span><span class="n">put</span><span class="p">({</span>
- <span class="n">_id</span><span class="p">:</span> <span class="s1">'dave@gmail.com'</span><span class="p">,</span>
- <span class="n">name</span><span class="p">:</span> <span class="s1">'David'</span><span class="p">,</span>
- <span class="n">age</span><span class="p">:</span> <span class="mi">68</span>
-<span class="p">});</span>
+<span class="n">db</span><span class="o">.</span><span class="n">put</span><span class="p">({</span><span class="w"></span>
+<span class="w"> </span><span class="n">_id</span><span class="p">:</span><span class="w"> </span><span class="s1">'dave@gmail.com'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="s1">'David'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">age</span><span class="p">:</span><span class="w"> </span><span class="mi">68</span><span class="w"></span>
+<span class="p">});</span><span class="w"></span>
-<span class="n">db</span><span class="o">.</span><span class="n">replicate</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="s1">'http://example.com/mydb'</span><span class="p">);</span>
+<span class="n">db</span><span class="o">.</span><span class="n">replicate</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="s1">'http://example.com/mydb'</span><span class="p">);</span><span class="w"></span>
</code></pre></div>
<p>Le projet a le vent en poupe, bénéficie de nombreux contributeurs,
@@ -5575,33 +5610,33 @@ on the server (so you don’t need to store anything).</p>
finally came up factorizing everything in a library for express, named
<a href="https://github.com/mozilla-services/express-hawkauth">express-hawkauth</a>.</p>
<p>In order to plug it in your application, you’ll need to use it as a middleware:</p>
-<div class="highlight"><pre><span></span><code><span class="n">javascript</span>
-<span class="k">var</span> <span class="n">express</span> <span class="o">=</span> <span class="n">require</span><span class="p">(</span><span class="s2">"express"</span><span class="p">);</span>
-<span class="k">var</span> <span class="n">hawk</span> <span class="o">=</span> <span class="n">require</span><span class="p">(</span><span class="s2">"express-hawkauth"</span><span class="p">);</span>
-<span class="n">app</span> <span class="o">=</span> <span class="n">express</span><span class="p">();</span>
+<div class="highlight"><pre><span></span><code><span class="n">javascript</span><span class="w"></span>
+<span class="k">var</span><span class="w"> </span><span class="n">express</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">require</span><span class="p">(</span><span class="s2">"express"</span><span class="p">);</span><span class="w"></span>
+<span class="k">var</span><span class="w"> </span><span class="n">hawk</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">require</span><span class="p">(</span><span class="s2">"express-hawkauth"</span><span class="p">);</span><span class="w"></span>
+<span class="n">app</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">express</span><span class="p">();</span><span class="w"></span>
-<span class="k">var</span> <span class="n">hawkMiddleware</span> <span class="o">=</span> <span class="n">hawk</span><span class="o">.</span><span class="n">getMiddleware</span><span class="p">({</span>
- <span class="n">hawkOptions</span><span class="p">:</span> <span class="p">{},</span>
- <span class="n">getSession</span><span class="p">:</span> <span class="n">function</span><span class="p">(</span><span class="n">tokenId</span><span class="p">,</span> <span class="n">cb</span><span class="p">)</span> <span class="p">{</span>
- <span class="o">//</span> <span class="n">A</span> <span class="n">function</span> <span class="n">which</span> <span class="k">pass</span> <span class="n">to</span> <span class="n">the</span> <span class="n">cb</span> <span class="n">the</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">algorithm</span> <span class="k">for</span> <span class="n">the</span>
- <span class="o">//</span> <span class="n">given</span> <span class="n">token</span> <span class="n">id</span><span class="o">.</span> <span class="n">First</span> <span class="n">argument</span> <span class="n">of</span> <span class="n">the</span> <span class="n">callback</span> <span class="k">is</span> <span class="n">a</span> <span class="n">potential</span>
- <span class="o">//</span> <span class="n">error</span><span class="o">.</span>
- <span class="n">cb</span><span class="p">(</span><span class="nb nb-Type">null</span><span class="p">,</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="s2">"key"</span><span class="p">,</span> <span class="n">algorithm</span><span class="p">:</span> <span class="s2">"sha256"</span><span class="p">});</span>
- <span class="p">},</span>
- <span class="n">createSession</span><span class="p">:</span> <span class="n">function</span><span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">cb</span><span class="p">)</span> <span class="p">{</span>
- <span class="o">//</span> <span class="n">A</span> <span class="n">function</span> <span class="n">which</span> <span class="n">stores</span> <span class="n">a</span> <span class="n">session</span> <span class="k">for</span> <span class="n">the</span> <span class="n">given</span> <span class="n">id</span> <span class="ow">and</span> <span class="n">key</span><span class="o">.</span>
- <span class="o">//</span> <span class="n">Argument</span> <span class="n">returned</span> <span class="k">is</span> <span class="n">a</span> <span class="n">potential</span> <span class="n">error</span><span class="o">.</span>
- <span class="n">cb</span><span class="p">(</span><span class="nb nb-Type">null</span><span class="p">);</span>
- <span class="p">},</span>
- <span class="n">setUser</span><span class="p">:</span> <span class="n">function</span><span class="p">(</span><span class="n">req</span><span class="p">,</span> <span class="n">res</span><span class="p">,</span> <span class="n">tokenId</span><span class="p">,</span> <span class="n">cb</span><span class="p">)</span> <span class="p">{</span>
- <span class="o">//</span> <span class="n">A</span> <span class="n">function</span> <span class="n">that</span> <span class="n">uses</span> <span class="n">req</span> <span class="ow">and</span> <span class="n">res</span><span class="p">,</span> <span class="n">the</span> <span class="n">hawkId</span> <span class="n">when</span> <span class="n">they</span><span class="s1">'re known so</span>
- <span class="o">//</span> <span class="n">that</span> <span class="n">it</span> <span class="n">can</span> <span class="n">tweak</span> <span class="n">it</span><span class="o">.</span> <span class="n">For</span> <span class="n">instance</span><span class="p">,</span> <span class="n">you</span> <span class="n">can</span> <span class="n">store</span> <span class="n">the</span> <span class="n">tokenId</span> <span class="k">as</span> <span class="n">the</span>
- <span class="o">//</span> <span class="n">user</span><span class="o">.</span>
- <span class="n">req</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="n">tokenId</span><span class="p">;</span>
- <span class="p">}</span>
-<span class="p">});</span>
+<span class="k">var</span><span class="w"> </span><span class="n">hawkMiddleware</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hawk</span><span class="o">.</span><span class="n">getMiddleware</span><span class="p">({</span><span class="w"></span>
+<span class="w"> </span><span class="n">hawkOptions</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span><span class="w"></span>
+<span class="w"> </span><span class="n">getSession</span><span class="p">:</span><span class="w"> </span><span class="n">function</span><span class="p">(</span><span class="n">tokenId</span><span class="p">,</span><span class="w"> </span><span class="n">cb</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">A</span><span class="w"> </span><span class="n">function</span><span class="w"> </span><span class="n">which</span><span class="w"> </span><span class="k">pass</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">cb</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">key</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">algorithm</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">the</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">given</span><span class="w"> </span><span class="n">token</span><span class="w"> </span><span class="n">id</span><span class="o">.</span><span class="w"> </span><span class="n">First</span><span class="w"> </span><span class="n">argument</span><span class="w"> </span><span class="n">of</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">callback</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">potential</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">error</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="n">cb</span><span class="p">(</span><span class="nb nb-Type">null</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="n">key</span><span class="p">:</span><span class="w"> </span><span class="s2">"key"</span><span class="p">,</span><span class="w"> </span><span class="n">algorithm</span><span class="p">:</span><span class="w"> </span><span class="s2">"sha256"</span><span class="p">});</span><span class="w"></span>
+<span class="w"> </span><span class="p">},</span><span class="w"></span>
+<span class="w"> </span><span class="n">createSession</span><span class="p">:</span><span class="w"> </span><span class="n">function</span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="p">,</span><span class="w"> </span><span class="n">cb</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">A</span><span class="w"> </span><span class="n">function</span><span class="w"> </span><span class="n">which</span><span class="w"> </span><span class="n">stores</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">session</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">given</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">key</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">Argument</span><span class="w"> </span><span class="n">returned</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">potential</span><span class="w"> </span><span class="n">error</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="n">cb</span><span class="p">(</span><span class="nb nb-Type">null</span><span class="p">);</span><span class="w"></span>
+<span class="w"> </span><span class="p">},</span><span class="w"></span>
+<span class="w"> </span><span class="n">setUser</span><span class="p">:</span><span class="w"> </span><span class="n">function</span><span class="p">(</span><span class="n">req</span><span class="p">,</span><span class="w"> </span><span class="n">res</span><span class="p">,</span><span class="w"> </span><span class="n">tokenId</span><span class="p">,</span><span class="w"> </span><span class="n">cb</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">A</span><span class="w"> </span><span class="n">function</span><span class="w"> </span><span class="n">that</span><span class="w"> </span><span class="n">uses</span><span class="w"> </span><span class="n">req</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">res</span><span class="p">,</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">hawkId</span><span class="w"> </span><span class="n">when</span><span class="w"> </span><span class="n">they</span><span class="s1">'re known so</span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">that</span><span class="w"> </span><span class="n">it</span><span class="w"> </span><span class="n">can</span><span class="w"> </span><span class="n">tweak</span><span class="w"> </span><span class="n">it</span><span class="o">.</span><span class="w"> </span><span class="n">For</span><span class="w"> </span><span class="n">instance</span><span class="p">,</span><span class="w"> </span><span class="n">you</span><span class="w"> </span><span class="n">can</span><span class="w"> </span><span class="n">store</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">tokenId</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">the</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">user</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="n">req</span><span class="o">.</span><span class="n">user</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tokenId</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
+<span class="p">});</span><span class="w"></span>
-<span class="n">app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/hawk-enabled-endpoint"</span><span class="p">,</span> <span class="n">hawkMiddleware</span><span class="p">);</span>
+<span class="n">app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/hawk-enabled-endpoint"</span><span class="p">,</span><span class="w"> </span><span class="n">hawkMiddleware</span><span class="p">);</span><span class="w"></span>
</code></pre></div>
<p>If you pass the createSession parameter, all non-authenticated requests
@@ -6622,8 +6657,8 @@ ailleurs, pour finalement déployer la chose chez
<p>Après quelques péripéties, j’ai réussi à faire tourner le tout, ça à été
un peu la bataille au départ pour installer virtualenv (j’ai du faire
des changements dans mon <span class="caps">PATH</span> pour que ça puisse marcher), voici mon `.bash_profile`:</p>
-<div class="highlight"><pre><span></span><code><span class="k">export</span> <span class="n">PYTHONPATH</span><span class="o">=~/</span><span class="n">modules</span><span class="o">/</span>
-<span class="k">export</span> <span class="n">PATH</span><span class="o">=$</span><span class="n">HOME</span><span class="o">/</span><span class="n">modules</span><span class="o">/</span><span class="n">bin</span><span class="p">:</span><span class="o">$</span><span class="n">HOME</span><span class="o">/</span><span class="n">modules</span><span class="o">/</span><span class="p">:</span><span class="o">$</span><span class="n">PATH</span>
+<div class="highlight"><pre><span></span><code><span class="k">export</span><span class="w"> </span><span class="n">PYTHONPATH</span><span class="o">=~/</span><span class="n">modules</span><span class="o">/</span><span class="w"></span>
+<span class="k">export</span><span class="w"> </span><span class="n">PATH</span><span class="o">=$</span><span class="n">HOME</span><span class="o">/</span><span class="n">modules</span><span class="o">/</span><span class="n">bin</span><span class="p">:</span><span class="o">$</span><span class="n">HOME</span><span class="o">/</span><span class="n">modules</span><span class="o">/</span><span class="p">:</span><span class="o">$</span><span class="n">PATH</span><span class="w"></span>
</code></pre></div>
<p>Et après y’a plus qu’à installer avec `easy_install`:</p>
@@ -6723,7 +6758,7 @@ PATH=.:\$PATH nc -w1 $(echo %h | sed 's/^.*+//;/:/!s/$/ %p/;s/:/ /&#
</code></pre></div>
<p>On peut donc spécifier des “sauts” ssh du style:</p>
-<div class="highlight"><pre><span></span><code><span class="n">ssh</span> <span class="n">root</span><span class="mf">@91.25.25.25</span><span class="o">+</span><span class="mf">192.168.1.1</span>
+<div class="highlight"><pre><span></span><code><span class="n">ssh</span><span class="w"> </span><span class="n">root</span><span class="mf">@91.25.25.25</span><span class="o">+</span><span class="mf">192.168.1.1</span><span class="w"></span>
</code></pre></div>
<p>Ensuite on peut essayer de rajouter:</p>
@@ -6808,7 +6843,7 @@ décembre 2012:</p>
<p>A l’heure actuelle, il est interdit pour deux agriculteurs de
s’échangers des semences dans le but d’en revendre la production.</p>
<p>Les états ont crée la propriété interellectuelle pour relancer
-l’industrie après les dégats de la guerre et les …</p>
+l’industrie après les dégats de la guerre …</p>
<p><a href="http://www.dailymotion.com/video/x5nhq0_les-semences-paysannes_news#from=embed">http://www.dailymotion.com/video/x5nhq0_les-semences-paysannes_news#from=embed</a></p>
<p>A l’heure actuelle, il est interdit pour deux agriculteurs de
s’échangers des semences dans le but d’en revendre la production.</p>
@@ -8657,16 +8692,16 @@ $ ant
</code></pre></div>
<p>Here is a simple example of how to use boilerpipe in Java, from their sources</p>
-<div class="highlight"><pre><span></span><code><span class="kn">package</span> <span class="nn">de.l3s.boilerpipe.demo</span><span class="p">;</span>
-<span class="kn">import</span> <span class="nn">java.net.URL</span><span class="p">;</span>
-<span class="kn">import</span> <span class="nn">de.l3s.boilerpipe.extractors.ArticleExtractor</span><span class="p">;</span>
+<div class="highlight"><pre><span></span><code><span class="kn">package</span><span class="w"> </span><span class="nn">de.l3s.boilerpipe.demo</span><span class="p">;</span><span class="w"></span>
+<span class="kn">import</span><span class="w"> </span><span class="nn">java.net.URL</span><span class="p">;</span><span class="w"></span>
+<span class="kn">import</span><span class="w"> </span><span class="nn">de.l3s.boilerpipe.extractors.ArticleExtractor</span><span class="p">;</span><span class="w"></span>
-<span class="kd">public</span> <span class="kd">class</span> <span class="nc">Oneliner</span> <span class="p">{</span>
- <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="p">(</span><span class="kd">final</span> <span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="p">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="p">{</span>
- <span class="kd">final</span> <span class="n">URL</span> <span class="n">url</span> <span class="o">=</span> <span class="k">new</span> <span class="n">URL</span><span class="p">(</span><span class="s">"http://notmyidea.org"</span><span class="p">);</span>
- <span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">ArticleExtractor</span><span class="p">.</span><span class="na">INSTANCE</span><span class="p">.</span><span class="na">getText</span><span class="p">(</span><span class="n">url</span><span class="p">));</span>
- <span class="p">}</span>
-<span class="p">}</span>
+<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Oneliner</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">Exception</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">URL</span><span class="w"> </span><span class="n">url</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">URL</span><span class="p">(</span><span class="s">"http://notmyidea.org"</span><span class="p">);</span><span class="w"></span>
+<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">ArticleExtractor</span><span class="p">.</span><span class="na">INSTANCE</span><span class="p">.</span><span class="na">getText</span><span class="p">(</span><span class="n">url</span><span class="p">));</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
</code></pre></div>
<p>To run it:</p>
@@ -9030,14 +9065,14 @@ unison .vimrc ssh://notmyidea.org:20006/.vimrc
<p>It is also possible to put all the informations in a config file, and
then to only run unison. (fire up vim \~/.unison/default.prf.</p>
<p>Here is my config:</p>
-<div class="highlight"><pre><span></span><code> <span class="na">root</span> <span class="o">=</span> <span class="s">/home/alexis</span>
- <span class="na">root</span> <span class="o">=</span> <span class="s">ssh://notmyidea.org:20006</span>
+<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="na">root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">/home/alexis</span><span class="w"></span>
+<span class="w"> </span><span class="na">root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">ssh://notmyidea.org:20006</span><span class="w"></span>
- <span class="na">path</span> <span class="o">=</span> <span class="s">.vimrc</span>
- <span class="na">path</span> <span class="o">=</span> <span class="s">dotfiles</span>
- <span class="na">path</span> <span class="o">=</span> <span class="s">dev</span>
+<span class="w"> </span><span class="na">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">.vimrc</span><span class="w"></span>
+<span class="w"> </span><span class="na">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">dotfiles</span><span class="w"></span>
+<span class="w"> </span><span class="na">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">dev</span><span class="w"></span>
- <span class="na">follow</span> <span class="o">=</span> <span class="s">Name *</span>
+<span class="w"> </span><span class="na">follow</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">Name *</span><span class="w"></span>
</code></pre></div>
<p>My vimrc is in fact a symbolic link on my laptop, but I don’t want to
@@ -9465,35 +9500,35 @@ $ gnome-background-generator -p ~/Images/walls -s
</code></pre></div>
<p>Here is a extract of the `—help`:</p>
-<div class="highlight"><pre><span></span><code><span class="n">shell</span>
-<span class="o">$</span> <span class="n">gnome</span><span class="o">-</span><span class="n">background</span><span class="o">-</span><span class="n">generator</span> <span class="o">--</span><span class="n">help</span>
-<span class="n">usage</span><span class="p">:</span> <span class="n">gnome</span><span class="o">-</span><span class="n">background</span><span class="o">-</span><span class="n">generator</span> <span class="p">[</span><span class="o">-</span><span class="n">h</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">p</span> <span class="n">PATH</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">o</span> <span class="n">OUTPUT</span><span class="p">]</span>
- <span class="p">[</span><span class="o">-</span><span class="n">t</span> <span class="n">TRANSITION_TIME</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">d</span> <span class="n">DISPLAY_TIME</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">s</span><span class="p">]</span>
- <span class="p">[</span><span class="o">-</span><span class="n">b</span><span class="p">]</span>
+<div class="highlight"><pre><span></span><code><span class="n">shell</span><span class="w"></span>
+<span class="o">$</span><span class="w"> </span><span class="n">gnome</span><span class="o">-</span><span class="n">background</span><span class="o">-</span><span class="n">generator</span><span class="w"> </span><span class="o">--</span><span class="n">help</span><span class="w"></span>
+<span class="n">usage</span><span class="p">:</span><span class="w"> </span><span class="n">gnome</span><span class="o">-</span><span class="n">background</span><span class="o">-</span><span class="n">generator</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">h</span><span class="p">]</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">p</span><span class="w"> </span><span class="n">PATH</span><span class="p">]</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">o</span><span class="w"> </span><span class="n">OUTPUT</span><span class="p">]</span><span class="w"></span>
+<span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">t</span><span class="w"> </span><span class="n">TRANSITION_TIME</span><span class="p">]</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">d</span><span class="w"> </span><span class="n">DISPLAY_TIME</span><span class="p">]</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">s</span><span class="p">]</span><span class="w"></span>
+<span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">b</span><span class="p">]</span><span class="w"></span>
-<span class="n">A</span> <span class="n">simple</span> <span class="n">command</span> <span class="n">line</span> <span class="k">tool</span> <span class="n">to</span> <span class="n">generate</span> <span class="n">an</span> <span class="n">XML</span> <span class="n">file</span> <span class="n">to</span> <span class="n">use</span> <span class="k">for</span> <span class="n">gnome</span>
-<span class="n">wallpapers</span><span class="p">,</span> <span class="n">to</span> <span class="n">have</span> <span class="n">dynamic</span> <span class="n">walls</span>
+<span class="n">A</span><span class="w"> </span><span class="n">simple</span><span class="w"> </span><span class="n">command</span><span class="w"> </span><span class="n">line</span><span class="w"> </span><span class="k">tool</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">generate</span><span class="w"> </span><span class="n">an</span><span class="w"> </span><span class="n">XML</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">use</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">gnome</span><span class="w"></span>
+<span class="n">wallpapers</span><span class="p">,</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">have</span><span class="w"> </span><span class="n">dynamic</span><span class="w"> </span><span class="n">walls</span><span class="w"></span>
-<span class="n">optional</span> <span class="n">arguments</span><span class="p">:</span>
- <span class="o">-</span><span class="n">h</span><span class="p">,</span> <span class="o">--</span><span class="n">help</span> <span class="n">show</span> <span class="n">this</span> <span class="n">help</span> <span class="n">message</span> <span class="ow">and</span> <span class="n">exit</span>
- <span class="o">-</span><span class="n">p</span> <span class="n">PATH</span><span class="p">,</span> <span class="o">--</span><span class="n">path</span> <span class="n">PATH</span> <span class="n">Path</span> <span class="n">to</span> <span class="n">look</span> <span class="k">for</span> <span class="n">the</span> <span class="n">pictures</span><span class="o">.</span> <span class="n">If</span> <span class="n">no</span> <span class="n">output</span> <span class="k">is</span>
- <span class="n">specified</span><span class="p">,</span> <span class="n">will</span> <span class="n">be</span> <span class="n">used</span> <span class="n">too</span> <span class="k">for</span> <span class="n">outputing</span> <span class="n">the</span> <span class="n">dynamic</span><span class="o">-</span>
- <span class="n">wallpaper</span><span class="o">.</span><span class="n">xml</span> <span class="n">file</span><span class="o">.</span> <span class="n">Default</span> <span class="n">value</span> <span class="k">is</span> <span class="n">the</span> <span class="n">current</span>
- <span class="n">directory</span> <span class="p">(</span><span class="o">.</span><span class="p">)</span>
- <span class="o">-</span><span class="n">o</span> <span class="n">OUTPUT</span><span class="p">,</span> <span class="o">--</span><span class="n">output</span> <span class="n">OUTPUT</span>
- <span class="n">Output</span> <span class="n">filename</span><span class="o">.</span> <span class="n">If</span> <span class="n">no</span> <span class="n">filename</span> <span class="k">is</span> <span class="n">specified</span><span class="p">,</span> <span class="n">a</span>
- <span class="n">dynamic</span><span class="o">-</span><span class="n">wallpaper</span><span class="o">.</span><span class="n">xml</span> <span class="n">file</span> <span class="n">will</span> <span class="n">be</span> <span class="n">generated</span> <span class="ow">in</span> <span class="n">the</span>
- <span class="n">path</span> <span class="n">containing</span> <span class="n">the</span> <span class="n">pictures</span><span class="o">.</span> <span class="n">You</span> <span class="n">can</span> <span class="n">also</span> <span class="n">use</span> <span class="s2">"-"</span> <span class="n">to</span>
- <span class="n">display</span> <span class="n">the</span> <span class="n">xml</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">stdout</span><span class="o">.</span>
- <span class="o">-</span><span class="n">t</span> <span class="n">TRANSITION_TIME</span><span class="p">,</span> <span class="o">--</span><span class="n">transition</span><span class="o">-</span><span class="n">time</span> <span class="n">TRANSITION_TIME</span>
- <span class="n">Time</span> <span class="p">(</span><span class="ow">in</span> <span class="n">seconds</span><span class="p">)</span> <span class="n">transitions</span> <span class="n">must</span> <span class="n">last</span> <span class="p">(</span><span class="n">default</span> <span class="n">value</span>
- <span class="k">is</span> <span class="mi">2</span> <span class="n">seconds</span><span class="p">)</span>
- <span class="o">-</span><span class="n">d</span> <span class="n">DISPLAY_TIME</span><span class="p">,</span> <span class="o">--</span><span class="n">display</span><span class="o">-</span><span class="n">time</span> <span class="n">DISPLAY_TIME</span>
- <span class="n">Time</span> <span class="p">(</span><span class="ow">in</span> <span class="n">seconds</span><span class="p">)</span> <span class="n">a</span> <span class="n">picture</span> <span class="n">must</span> <span class="n">be</span> <span class="n">displayed</span><span class="o">.</span> <span class="n">Default</span>
- <span class="n">value</span> <span class="k">is</span> <span class="mi">900</span> <span class="p">(</span><span class="mi">15</span><span class="n">mn</span><span class="p">)</span>
- <span class="o">-</span><span class="n">s</span><span class="p">,</span> <span class="o">--</span><span class="n">set</span><span class="o">-</span><span class="n">background</span> <span class="s1">'''try to set the background using gnome-appearance-</span>
-<span class="s1"> properties</span>
-<span class="s1"> -b, --debug</span>
+<span class="n">optional</span><span class="w"> </span><span class="n">arguments</span><span class="p">:</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">h</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">help</span><span class="w"> </span><span class="n">show</span><span class="w"> </span><span class="n">this</span><span class="w"> </span><span class="n">help</span><span class="w"> </span><span class="n">message</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">exit</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">p</span><span class="w"> </span><span class="n">PATH</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">path</span><span class="w"> </span><span class="n">PATH</span><span class="w"> </span><span class="n">Path</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">look</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">pictures</span><span class="o">.</span><span class="w"> </span><span class="n">If</span><span class="w"> </span><span class="n">no</span><span class="w"> </span><span class="n">output</span><span class="w"> </span><span class="k">is</span><span class="w"></span>
+<span class="w"> </span><span class="n">specified</span><span class="p">,</span><span class="w"> </span><span class="n">will</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">used</span><span class="w"> </span><span class="n">too</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">outputing</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">dynamic</span><span class="o">-</span><span class="w"></span>
+<span class="w"> </span><span class="n">wallpaper</span><span class="o">.</span><span class="n">xml</span><span class="w"> </span><span class="n">file</span><span class="o">.</span><span class="w"> </span><span class="n">Default</span><span class="w"> </span><span class="n">value</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">current</span><span class="w"></span>
+<span class="w"> </span><span class="n">directory</span><span class="w"> </span><span class="p">(</span><span class="o">.</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">o</span><span class="w"> </span><span class="n">OUTPUT</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">output</span><span class="w"> </span><span class="n">OUTPUT</span><span class="w"></span>
+<span class="w"> </span><span class="n">Output</span><span class="w"> </span><span class="n">filename</span><span class="o">.</span><span class="w"> </span><span class="n">If</span><span class="w"> </span><span class="n">no</span><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">specified</span><span class="p">,</span><span class="w"> </span><span class="n">a</span><span class="w"></span>
+<span class="w"> </span><span class="n">dynamic</span><span class="o">-</span><span class="n">wallpaper</span><span class="o">.</span><span class="n">xml</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="n">will</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">generated</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">the</span><span class="w"></span>
+<span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="n">containing</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">pictures</span><span class="o">.</span><span class="w"> </span><span class="n">You</span><span class="w"> </span><span class="n">can</span><span class="w"> </span><span class="n">also</span><span class="w"> </span><span class="n">use</span><span class="w"> </span><span class="s2">"-"</span><span class="w"> </span><span class="n">to</span><span class="w"></span>
+<span class="w"> </span><span class="n">display</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">xml</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">stdout</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">t</span><span class="w"> </span><span class="n">TRANSITION_TIME</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">transition</span><span class="o">-</span><span class="n">time</span><span class="w"> </span><span class="n">TRANSITION_TIME</span><span class="w"></span>
+<span class="w"> </span><span class="n">Time</span><span class="w"> </span><span class="p">(</span><span class="ow">in</span><span class="w"> </span><span class="n">seconds</span><span class="p">)</span><span class="w"> </span><span class="n">transitions</span><span class="w"> </span><span class="n">must</span><span class="w"> </span><span class="n">last</span><span class="w"> </span><span class="p">(</span><span class="n">default</span><span class="w"> </span><span class="n">value</span><span class="w"></span>
+<span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="n">seconds</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">d</span><span class="w"> </span><span class="n">DISPLAY_TIME</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">display</span><span class="o">-</span><span class="n">time</span><span class="w"> </span><span class="n">DISPLAY_TIME</span><span class="w"></span>
+<span class="w"> </span><span class="n">Time</span><span class="w"> </span><span class="p">(</span><span class="ow">in</span><span class="w"> </span><span class="n">seconds</span><span class="p">)</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">picture</span><span class="w"> </span><span class="n">must</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">displayed</span><span class="o">.</span><span class="w"> </span><span class="n">Default</span><span class="w"></span>
+<span class="w"> </span><span class="n">value</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="mi">900</span><span class="w"> </span><span class="p">(</span><span class="mi">15</span><span class="n">mn</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">s</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">set</span><span class="o">-</span><span class="n">background</span><span class="w"> </span><span class="s1">'''try to set the background using gnome-appearance-</span><span class="w"></span>
+<span class="s1"> properties</span><span class="w"></span>
+<span class="s1"> -b, --debug</span><span class="w"></span>
</code></pre></div>How to install NGINX + PHP 5.3 on FreeBSD.2010-10-10T00:00:00+02:002010-10-10T00:00:00+02:00tag:blog.notmyidea.org,2010-10-10:/how-to-install-nginx-php-53-on-freebsd.html
<ul>
<li>
@@ -9536,30 +9571,30 @@ the server.</p>
<p>That’s a simple thing in fact, but it could be good to have something
that will work without effort over time.</p>
<p>Here’s a sample of my configuration:</p>
-<div class="highlight"><pre><span></span><code><span class="nt">server</span> <span class="p">{</span>
- <span class="err">server_name</span> <span class="err">ndd</span><span class="p">;</span>
- <span class="err">set</span> <span class="err">$path</span> <span class="err">/path/to/your/files</span><span class="p">;</span>
- <span class="err">root</span> <span class="err">$path</span><span class="p">;</span>
+<div class="highlight"><pre><span></span><code><span class="nt">server</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">server_name</span><span class="w"> </span><span class="err">ndd</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">set</span><span class="w"> </span><span class="err">$path</span><span class="w"> </span><span class="err">/path/to/your/files</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">root</span><span class="w"> </span><span class="err">$path</span><span class="p">;</span><span class="w"></span>
- <span class="err">location</span> <span class="err">/</span> <span class="err">{</span>
- <span class="err">index</span> <span class="err">index.php</span><span class="p">;</span>
- <span class="p">}</span>
+<span class="w"> </span><span class="err">location</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="err">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">index</span><span class="w"> </span><span class="err">index.php</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
- <span class="nt">location</span> <span class="o">~*</span> <span class="o">^.+.(</span><span class="nt">jpg</span><span class="o">|</span><span class="nt">jpeg</span><span class="o">|</span><span class="nt">gif</span><span class="o">|</span><span class="nt">css</span><span class="o">|</span><span class="nt">png</span><span class="o">|</span><span class="nt">js</span><span class="o">|</span><span class="nt">ico</span><span class="o">|</span><span class="nt">xml</span><span class="o">)$</span> <span class="p">{</span>
- <span class="err">access_log</span> <span class="err">off</span><span class="p">;</span>
- <span class="err">expires</span> <span class="err">30d</span><span class="p">;</span>
- <span class="p">}</span>
+<span class="w"> </span><span class="nt">location</span><span class="w"> </span><span class="o">~*</span><span class="w"> </span><span class="o">^.+.(</span><span class="nt">jpg</span><span class="o">|</span><span class="nt">jpeg</span><span class="o">|</span><span class="nt">gif</span><span class="o">|</span><span class="nt">css</span><span class="o">|</span><span class="nt">png</span><span class="o">|</span><span class="nt">js</span><span class="o">|</span><span class="nt">ico</span><span class="o">|</span><span class="nt">xml</span><span class="o">)$</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">access_log</span><span class="w"> </span><span class="err">off</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">expires</span><span class="w"> </span><span class="err">30d</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
- <span class="nt">location</span> <span class="o">~</span> <span class="p">.</span><span class="nc">php</span><span class="o">$</span> <span class="p">{</span>
- <span class="err">fastcgi_param</span> <span class="err">SCRIPT_FILENAME</span> <span class="err">$path$fastcgi_script_name</span><span class="p">;</span>
- <span class="err">fastcgi_pass</span> <span class="err">backend</span><span class="p">;</span>
- <span class="err">include</span> <span class="err">fastcgi_params</span><span class="p">;</span>
- <span class="p">}</span>
-<span class="err">}</span>
+<span class="w"> </span><span class="nt">location</span><span class="w"> </span><span class="o">~</span><span class="w"> </span><span class="p">.</span><span class="nc">php</span><span class="o">$</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">fastcgi_param</span><span class="w"> </span><span class="err">SCRIPT_FILENAME</span><span class="w"> </span><span class="err">$path$fastcgi_script_name</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">fastcgi_pass</span><span class="w"> </span><span class="err">backend</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">include</span><span class="w"> </span><span class="err">fastcgi_params</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
+<span class="err">}</span><span class="w"></span>
-<span class="nt">upstream</span> <span class="nt">backend</span> <span class="p">{</span>
- <span class="err">server</span> <span class="err">127.0.0.1:9000</span><span class="p">;</span>
-<span class="p">}</span>
+<span class="nt">upstream</span><span class="w"> </span><span class="nt">backend</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">server</span><span class="w"> </span><span class="err">127.0.0.1:9000</span><span class="p">;</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
</code></pre></div>
<p>And that’s it !</p>Pelican, a simple static blog generator in python2010-10-06T00:00:00+02:002010-10-06T00:00:00+02:00tag:blog.notmyidea.org,2010-10-06:/pelican-a-simple-static-blog-generator-in-python.html
diff --git a/feeds/.rss.xml b/feeds/.rss.xml
index d94bd94..e0a310d 100644
--- a/feeds/.rss.xml
+++ b/feeds/.rss.xml
@@ -1,5 +1,11 @@
-Alexis Métaireauhttps://blog.notmyidea.org/Thu, 11 Nov 2021 00:00:00 +0100Conflithttps://blog.notmyidea.org/conflit.html
+Alexis Métaireauhttps://blog.notmyidea.org/Fri, 06 May 2022 00:00:00 +0200Fatigue relationnellehttps://blog.notmyidea.org/fatigue-relationnelle.html
+<p>Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années.</p>
+<p>Je ne sais pas exactement d’où cela vient : si c’est un des nombreux effets …</p>Fri, 06 May 2022 00:00:00 +0200tag:blog.notmyidea.org,2022-05-06:/fatigue-relationnelle.htmlRéfléxionsAccueil, transmission et confiancehttps://blog.notmyidea.org/accueil-transmission-et-confiance.html
+<p>Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons :</p>
+<ul>
+<li>Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des sujets de fond, pour progressivement changer l’équilibre dans mon métier ;</li>
+<li>J’ai désormais quelqu’une avec …</li></ul>Sun, 01 May 2022 00:00:00 +0200tag:blog.notmyidea.org,2022-05-01:/accueil-transmission-et-confiance.htmlRéfléxionsConflithttps://blog.notmyidea.org/conflit.html
<p>J’ai pensé durant de nombreuses années que je savais gérer le conflit, alors que c’était en fait impensé.</p>
<p>Ne pas être en conflit signifie parfois s’adapter aux autres, parfois ne pas (assez) s’écouter, et ne pas se faire entendre. </p>
<p><strong>Alors que je pensais gérer le conflit …</strong></p>Thu, 11 Nov 2021 00:00:00 +0100tag:blog.notmyidea.org,2021-11-11:/conflit.htmlRéfléxionsCoopération et travailhttps://blog.notmyidea.org/cooperation-et-travail.html
@@ -146,7 +152,7 @@ une fois que tout est dépoyé ? Si on a une application très simple …</p&
</div>
<p>Speaker: serge_sans_paille.</p>
<p>Retour sur le passé des boucles: <span class="caps">ASM</span>, fortran, C. Avec <span class="caps">APL</span>, la boucle est
-cachée au fur et à mesure des évolutions. Écrire une boucle ne devrait pas etre …</p>Sun, 18 Oct 2015 00:00:00 +0200tag:blog.notmyidea.org,2015-10-18:/pyconfr-2015-we-dont-need-your-loop.htmlpyconfr2015PyconFR 2015 — Cliquethttps://blog.notmyidea.org/pyconfr-2015-cliquet.html<div class="admonition note">
+cachée au fur et à mesure des évolutions. Écrire une boucle ne devrait …</p>Sun, 18 Oct 2015 00:00:00 +0200tag:blog.notmyidea.org,2015-10-18:/pyconfr-2015-we-dont-need-your-loop.htmlpyconfr2015PyconFR 2015 — Cliquethttps://blog.notmyidea.org/pyconfr-2015-cliquet.html<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Voici quelques notes prises durant la PyconFR 2015, à Pau. N’hésitez pas
à les completer si besoin.</p>
@@ -380,7 +386,7 @@ récemment, depuis que <span class="caps">JM</span> Ayrault s
<p>A l’heure actuelle, il est interdit pour deux agriculteurs de
s’échangers des semences dans le but d’en revendre la production.</p>
<p>Les états ont crée la propriété interellectuelle pour relancer
-l’industrie après les dégats de la guerre et les …</p>Thu, 20 Dec 2012 00:00:00 +0100tag:blog.notmyidea.org,2012-12-20:/semences-paysannes.htmlNotesLanguageshttps://blog.notmyidea.org/languages.html
+l’industrie après les dégats de la guerre …</p>Thu, 20 Dec 2012 00:00:00 +0100tag:blog.notmyidea.org,2012-12-20:/semences-paysannes.htmlNotesLanguageshttps://blog.notmyidea.org/languages.html
<p>Ouriel Ellert ” Languages” avec Anthony Jambon <span class="amp">&</span> Natascha Rogers, c’est enregistré par le <a href="http://www.studiomezzanine.fr">Studio Mezzanine</a> qui
comme d’hab font un travail impeccable.</p>
<p>Plus d’infos sur Natasha Rogers et son groupe ici:
diff --git a/feeds/all-en.atom.xml b/feeds/all-en.atom.xml
index 631b437..2e242d1 100644
--- a/feeds/all-en.atom.xml
+++ b/feeds/all-en.atom.xml
@@ -1,5 +1,40 @@
-Alexis Métaireauhttps://blog.notmyidea.org/2021-11-11T00:00:00+01:00Conflit2021-11-11T00:00:00+01:002021-11-11T00:00:00+01:00tag:blog.notmyidea.org,2021-11-11:/conflit.html
+Alexis Métaireauhttps://blog.notmyidea.org/2022-05-06T00:00:00+02:00Fatigue relationnelle2022-05-06T00:00:00+02:002022-05-06T00:00:00+02:00tag:blog.notmyidea.org,2022-05-06:/fatigue-relationnelle.html
+<p>Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années.</p>
+<p>Je ne sais pas exactement d’où cela vient : si c’est un des nombreux effets …</p>
+<p>Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années.</p>
+<p>Je ne sais pas exactement d’où cela vient : si c’est un des nombreux effets psychologiques que le <span class="caps">COVID</span> à eu sur moi, si j’accorde trop de place aux collectifs dans ma vie (travail, habitation, ami⋅es), ou si simplement mes envies ne sont plus les mêmes qu’il y a quelques années, mais le résultat est bel et bien là.</p>
+<p>Malgré tout j’ai envie d’être disponible pour les personnes qui comptent pour moi, et je réfléchis donc à différentes solutions : déménager et habiter en solo, faire moins d’activités extérieures ou bien m’isoler plus souvent dans les espaces collectifs.</p>
+<p>Le fait de retourner potentiellement habiter en solo vient questionner mon rapport au collectif omniprésent dans ma vie, et qui jouit d’un statut particulier pour moi. Le collectif semble être quasiment un <em>objectif en soi</em>, et donc quelque-part partir de ces espaces collectifs serait une sorte d’échec.</p>
+<p>Entrouvrir cette possibilité me plaît parce-que ça me pousse à accepter mes limites et à mettre en balance ma qualité de relation aux autres avec mes valeurs collectivistes. Du collectif, oui, mais peut-être avec un mix différent ?</p>
+<p>Ça fait également écho à ma <a href="conflit.html">gestion du conflit</a>. Je me rends compte que j’ai besoin d’évoluer dans des collectifs qui partagent cette culture de la gestion du conflit (plutôt que de son évitement).</p>Accueil, transmission et confiance2022-05-01T00:00:00+02:002022-05-01T00:00:00+02:00tag:blog.notmyidea.org,2022-05-01:/accueil-transmission-et-confiance.html
+<p>Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons :</p>
+<ul>
+<li>Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des sujets de fond, pour progressivement changer l’équilibre dans mon métier ;</li>
+<li>J’ai désormais quelqu’une avec …</li></ul>
+<p>Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons :</p>
+<ul>
+<li>Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des sujets de fond, pour progressivement changer l’équilibre dans mon métier ;</li>
+<li>J’ai désormais quelqu’une avec qui échanger sur les problématiques techniques du métier de livreur / commercial ;</li>
+</ul>
+<p>Mais cela me fait aussi peur : cela va nécessairement bousculer l’équilibre — parfois fragile — en place entre les associés actuels. Même si je vois cette évolution d’un bon œil, les transitions sont parfois difficiles.</p>
+<p>Ça me donne donc envie de construire une relation de confiance, et de donner les moyens à cette nouvelle arrivante de s’y retrouver.</p>
+<h2 id="transmission">Transmission</h2>
+<p>Cela me pose donc de nouvelles questions, autour de l’accueil et de la transmission.</p>
+<p>Il me semble que l’enjeu est de laisser une liberté d’action progressive pour mettre la personne en confiance, puis de réussir à « lâcher le bébé ».</p>
+<p>Mais il s’agit aussi de réussir à juger si la communication est aisée, et de ne pas nécessairement partir du principe que tout sera génial. C’est une relation de travail, pas une amitié.</p>
+<p>De son côté également il doit y avoir des questionnements. Je mets une attention particulière à les accueillir : les questionnement sont bienvenus, voir même attendus.</p>
+<p>Le pire pour moi serait d’avoir quelqu’un qui à peur de ne pas savoir, et qui dit qu’elle sait plutôt que de laisser la place pour l’apprentissage.</p>
+<h2 id="faire-confiance">Faire confiance</h2>
+<p>Il me semble qu’il peut exister deux types de confiance :</p>
+<ol>
+<li>
+<p><em>Laisser la possibilité de se tromper</em> : il est possible de faire confiance à l’autre dans son apprentissage, pour qu’iel se sente légitime à faire <em>ses</em> choix, ceux qu’il⋅elle estimera les bons, et qui seront donc les bons — par définition ;</p>
+</li>
+<li>
+<p>La <em>confiance relationnelle</em>, de l’ordre des relations inter-personnelles, de la relation à l’autre. Parce que c’est aussi une rencontre, et que je cherche à créer des relations de travail où l’on peut se dire les choses sans se blesser, en confiance donc.</p>
+</li>
+</ol>Conflit2021-11-11T00:00:00+01:002021-11-11T00:00:00+01:00tag:blog.notmyidea.org,2021-11-11:/conflit.html
<p>J’ai pensé durant de nombreuses années que je savais gérer le conflit, alors que c’était en fait impensé.</p>
<p>Ne pas être en conflit signifie parfois s’adapter aux autres, parfois ne pas (assez) s’écouter, et ne pas se faire entendre. </p>
<p><strong>Alors que je pensais gérer le conflit …</strong></p>
@@ -2417,7 +2452,7 @@ des tests souvent !</p>
</div>
<p>Speaker: serge_sans_paille.</p>
<p>Retour sur le passé des boucles: <span class="caps">ASM</span>, fortran, C. Avec <span class="caps">APL</span>, la boucle est
-cachée au fur et à mesure des évolutions. Écrire une boucle ne devrait pas etre …</p><div class="admonition note">
+cachée au fur et à mesure des évolutions. Écrire une boucle ne devrait …</p><div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Voici quelques notes prises durant la PyconFR 2015, à Pau. N’hésitez pas
à les completer si besoin.</p>
@@ -3139,7 +3174,7 @@ d’écriture sur une collection d’enregistrements.&l
<li><strong>La synchronisation</strong> : une série de leviers pour récupérer et renvoyer des
changements sur les données, sans perte ni collision, en utilisant les timestamps.</li>
<li><strong>Les permissions</strong> : les droits d’un utilisateur sur une collection ou un enregistrement
-(<em>encore frais et sur le point d’être documenté</em>) <a class="footnote-reference" href="#id3" id="id1">[1]</a>.</li>
+(<em>encore frais et sur le point d’être documenté</em>) <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a>.</li>
<li><strong>Opérations par lot</strong>: une <span class="caps">URL</span> qui permet d’envoyer une série de requêtes
décrites en <span class="caps">JSON</span> et d’obtenir les réponses respectives.</li>
</ul>
@@ -3161,17 +3196,17 @@ de <em>Firefox Sync</em> pour la gestion de la concurrence et de&
<p>Il est <a class="reference external" href="http://cliquet.readthedocs.org/en/latest/api/index.html">documenté en détail</a>.</p>
<p>Dans un monde idéal, ce protocole serait versionné, et formalisé dans une <span class="caps">RFC</span>.
En rêve, il existerait même plusieurs implémentations avec des technologies différentes
-(Python, Go, Node, etc.). <a class="footnote-reference" href="#id4" id="id2">[2]</a></p>
-<table class="docutils footnote" frame="void" id="id3" rules="none">
+(Python, Go, Node, etc.). <a class="footnote-reference" href="#footnote-2" id="footnote-reference-2">[2]</a></p>
+<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>Voir notre <a class="reference external" href="https://blog.notmyidea.org/service-de-nuages-la-gestion-des-permissions-fr.html">article dédié sur les permissions</a></td></tr>
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>Voir notre <a class="reference external" href="https://blog.notmyidea.org/service-de-nuages-la-gestion-des-permissions-fr.html">article dédié sur les permissions</a></td></tr>
</tbody>
</table>
-<table class="docutils footnote" frame="void" id="id4" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td>Rappel: nous sommes une toute petite équipe !</td></tr>
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-2">[2]</a></td><td>Rappel: nous sommes une toute petite équipe !</td></tr>
</tbody>
</table>
</div>
@@ -3179,7 +3214,7 @@ En rêve, il existerait même plusieurs implémentations avec des technologies d
<h2>Le toolkit</h2>
<div class="section" id="choix-techniques">
<h3>Choix techniques</h3>
-<p><em>Cliquet</em> implémente le protocole en Python (<em>2.7, 3.4+, pypy</em>), avec <a class="reference external" href="http://trypyramid.com/">Pyramid</a> <a class="footnote-reference" href="#id6" id="id5">[3]</a>.</p>
+<p><em>Cliquet</em> implémente le protocole en Python (<em>2.7, 3.4+, pypy</em>), avec <a class="reference external" href="http://trypyramid.com/">Pyramid</a> <a class="footnote-reference" href="#footnote-3" id="footnote-reference-3">[3]</a>.</p>
<p><strong>Pyramid</strong> est un framework Web qui va prendre en charge tout la partie <span class="caps">HTTP</span>,
et qui s’avère pertinent aussi bien pour des petits projets que des plus ambitieux.</p>
<p><strong>Cornice</strong> est une extension de <em>Pyramid</em>, écrite en partie par Alexis et Tarek,
@@ -3192,10 +3227,10 @@ rigoureux, gérer les entêtes <span class="caps">CORS</span>, fourn
<p><strong>Cliquet</strong> utilise les deux précédents pour implémenter le protocole et fournir
des abstractions, mais on a toujours <em>Pyramid</em> et <em>Cornice</em> sous la main pour
aller au delà de ce qui est proposé !</p>
-<table class="docutils footnote" frame="void" id="id6" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-3" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id5">[3]</a></td><td>Au tout début nous avons commencé une implémentation avec <em>Python-Eve</em>
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-3">[3]</a></td><td>Au tout début nous avons commencé une implémentation avec <em>Python-Eve</em>
(Flask), mais n’étions pas satisfaits de l’approche pour la configuration
de l’<span class="caps">API</span>. En particulier du côté magique.</td></tr>
</tbody>
@@ -3287,18 +3322,18 @@ avec <em>Colander</em>, et ensuite déclarer une resource:&
<p>Désormais, la resource <span class="caps">CRUD</span> est disponible sur <tt class="docutils literal">/v1/bookmarks</tt>, avec toutes
les fonctionnalités de synchronisation, filtrage, tri, pagination, timestamp, etc.
De base les enregistrements sont privés, par utilisateur.</p>
-<div class="highlight"><pre><span></span><span class="err">$</span> <span class="err">h</span><span class="kc">tt</span><span class="err">p</span> <span class="err">GET</span> <span class="s2">"http://localhost:8000/v1/bookmarks"</span>
-<span class="err">HTTP/</span><span class="mf">1.1</span> <span class="mi">200</span> <span class="err">OK</span>
-<span class="err">...</span>
-<span class="p">{</span>
- <span class="nt">"data"</span><span class="p">:</span> <span class="p">[</span>
- <span class="p">{</span>
- <span class="nt">"url"</span><span class="p">:</span> <span class="s2">"http://cliquet.readthedocs.org"</span><span class="p">,</span>
- <span class="nt">"id"</span><span class="p">:</span> <span class="s2">"cc103eb5-0c80-40ec-b6f5-dad12e7d975e"</span><span class="p">,</span>
- <span class="nt">"last_modified"</span><span class="p">:</span> <span class="mi">1437034418940</span><span class="p">,</span>
- <span class="p">}</span>
- <span class="p">]</span>
-<span class="p">}</span>
+<div class="highlight"><pre><span></span><span class="err">$</span><span class="w"> </span><span class="err">h</span><span class="kc">tt</span><span class="err">p</span><span class="w"> </span><span class="err">GET</span><span class="w"> </span><span class="s2">"http://localhost:8000/v1/bookmarks"</span><span class="w"></span>
+<span class="err">HTTP/</span><span class="mf">1.1</span><span class="w"> </span><span class="mi">200</span><span class="w"> </span><span class="err">OK</span><span class="w"></span>
+<span class="err">...</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="nt">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"></span>
+<span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="nt">"url"</span><span class="p">:</span><span class="w"> </span><span class="s2">"http://cliquet.readthedocs.org"</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"cc103eb5-0c80-40ec-b6f5-dad12e7d975e"</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="nt">"last_modified"</span><span class="p">:</span><span class="w"> </span><span class="mi">1437034418940</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
+<span class="w"> </span><span class="p">]</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
</pre></div>
</div>
<div class="section" id="etape-3">
@@ -4108,16 +4143,16 @@ terme, et que <em>Remote Storage</em> devienne une facette de notre&
<p><a href="http://pouchdb.com/">PouchDB</a> est une bibliothèque JavaScript qui
permet de manipuler des enregistrements en local et de les synchroniser
vers une base distante.</p>
-<div class="highlight"><pre><span></span><code><span class="n">javascript</span>
-<span class="k">var</span> <span class="n">db</span> <span class="o">=</span> <span class="n">new</span> <span class="n">PouchDB</span><span class="p">(</span><span class="s1">'dbname'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><code><span class="n">javascript</span><span class="w"></span>
+<span class="k">var</span><span class="w"> </span><span class="n">db</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">PouchDB</span><span class="p">(</span><span class="s1">'dbname'</span><span class="p">);</span><span class="w"></span>
-<span class="n">db</span><span class="o">.</span><span class="n">put</span><span class="p">({</span>
- <span class="n">_id</span><span class="p">:</span> <span class="s1">'dave@gmail.com'</span><span class="p">,</span>
- <span class="n">name</span><span class="p">:</span> <span class="s1">'David'</span><span class="p">,</span>
- <span class="n">age</span><span class="p">:</span> <span class="mi">68</span>
-<span class="p">});</span>
+<span class="n">db</span><span class="o">.</span><span class="n">put</span><span class="p">({</span><span class="w"></span>
+<span class="w"> </span><span class="n">_id</span><span class="p">:</span><span class="w"> </span><span class="s1">'dave@gmail.com'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="s1">'David'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">age</span><span class="p">:</span><span class="w"> </span><span class="mi">68</span><span class="w"></span>
+<span class="p">});</span><span class="w"></span>
-<span class="n">db</span><span class="o">.</span><span class="n">replicate</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="s1">'http://example.com/mydb'</span><span class="p">);</span>
+<span class="n">db</span><span class="o">.</span><span class="n">replicate</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="s1">'http://example.com/mydb'</span><span class="p">);</span><span class="w"></span>
</code></pre></div>
<p>Le projet a le vent en poupe, bénéficie de nombreux contributeurs,
@@ -4513,33 +4548,33 @@ on the server (so you don’t need to store anything).</p>
finally came up factorizing everything in a library for express, named
<a href="https://github.com/mozilla-services/express-hawkauth">express-hawkauth</a>.</p>
<p>In order to plug it in your application, you’ll need to use it as a middleware:</p>
-<div class="highlight"><pre><span></span><code><span class="n">javascript</span>
-<span class="k">var</span> <span class="n">express</span> <span class="o">=</span> <span class="n">require</span><span class="p">(</span><span class="s2">"express"</span><span class="p">);</span>
-<span class="k">var</span> <span class="n">hawk</span> <span class="o">=</span> <span class="n">require</span><span class="p">(</span><span class="s2">"express-hawkauth"</span><span class="p">);</span>
-<span class="n">app</span> <span class="o">=</span> <span class="n">express</span><span class="p">();</span>
+<div class="highlight"><pre><span></span><code><span class="n">javascript</span><span class="w"></span>
+<span class="k">var</span><span class="w"> </span><span class="n">express</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">require</span><span class="p">(</span><span class="s2">"express"</span><span class="p">);</span><span class="w"></span>
+<span class="k">var</span><span class="w"> </span><span class="n">hawk</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">require</span><span class="p">(</span><span class="s2">"express-hawkauth"</span><span class="p">);</span><span class="w"></span>
+<span class="n">app</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">express</span><span class="p">();</span><span class="w"></span>
-<span class="k">var</span> <span class="n">hawkMiddleware</span> <span class="o">=</span> <span class="n">hawk</span><span class="o">.</span><span class="n">getMiddleware</span><span class="p">({</span>
- <span class="n">hawkOptions</span><span class="p">:</span> <span class="p">{},</span>
- <span class="n">getSession</span><span class="p">:</span> <span class="n">function</span><span class="p">(</span><span class="n">tokenId</span><span class="p">,</span> <span class="n">cb</span><span class="p">)</span> <span class="p">{</span>
- <span class="o">//</span> <span class="n">A</span> <span class="n">function</span> <span class="n">which</span> <span class="k">pass</span> <span class="n">to</span> <span class="n">the</span> <span class="n">cb</span> <span class="n">the</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">algorithm</span> <span class="k">for</span> <span class="n">the</span>
- <span class="o">//</span> <span class="n">given</span> <span class="n">token</span> <span class="n">id</span><span class="o">.</span> <span class="n">First</span> <span class="n">argument</span> <span class="n">of</span> <span class="n">the</span> <span class="n">callback</span> <span class="k">is</span> <span class="n">a</span> <span class="n">potential</span>
- <span class="o">//</span> <span class="n">error</span><span class="o">.</span>
- <span class="n">cb</span><span class="p">(</span><span class="nb nb-Type">null</span><span class="p">,</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="s2">"key"</span><span class="p">,</span> <span class="n">algorithm</span><span class="p">:</span> <span class="s2">"sha256"</span><span class="p">});</span>
- <span class="p">},</span>
- <span class="n">createSession</span><span class="p">:</span> <span class="n">function</span><span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">cb</span><span class="p">)</span> <span class="p">{</span>
- <span class="o">//</span> <span class="n">A</span> <span class="n">function</span> <span class="n">which</span> <span class="n">stores</span> <span class="n">a</span> <span class="n">session</span> <span class="k">for</span> <span class="n">the</span> <span class="n">given</span> <span class="n">id</span> <span class="ow">and</span> <span class="n">key</span><span class="o">.</span>
- <span class="o">//</span> <span class="n">Argument</span> <span class="n">returned</span> <span class="k">is</span> <span class="n">a</span> <span class="n">potential</span> <span class="n">error</span><span class="o">.</span>
- <span class="n">cb</span><span class="p">(</span><span class="nb nb-Type">null</span><span class="p">);</span>
- <span class="p">},</span>
- <span class="n">setUser</span><span class="p">:</span> <span class="n">function</span><span class="p">(</span><span class="n">req</span><span class="p">,</span> <span class="n">res</span><span class="p">,</span> <span class="n">tokenId</span><span class="p">,</span> <span class="n">cb</span><span class="p">)</span> <span class="p">{</span>
- <span class="o">//</span> <span class="n">A</span> <span class="n">function</span> <span class="n">that</span> <span class="n">uses</span> <span class="n">req</span> <span class="ow">and</span> <span class="n">res</span><span class="p">,</span> <span class="n">the</span> <span class="n">hawkId</span> <span class="n">when</span> <span class="n">they</span><span class="s1">'re known so</span>
- <span class="o">//</span> <span class="n">that</span> <span class="n">it</span> <span class="n">can</span> <span class="n">tweak</span> <span class="n">it</span><span class="o">.</span> <span class="n">For</span> <span class="n">instance</span><span class="p">,</span> <span class="n">you</span> <span class="n">can</span> <span class="n">store</span> <span class="n">the</span> <span class="n">tokenId</span> <span class="k">as</span> <span class="n">the</span>
- <span class="o">//</span> <span class="n">user</span><span class="o">.</span>
- <span class="n">req</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="n">tokenId</span><span class="p">;</span>
- <span class="p">}</span>
-<span class="p">});</span>
+<span class="k">var</span><span class="w"> </span><span class="n">hawkMiddleware</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hawk</span><span class="o">.</span><span class="n">getMiddleware</span><span class="p">({</span><span class="w"></span>
+<span class="w"> </span><span class="n">hawkOptions</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span><span class="w"></span>
+<span class="w"> </span><span class="n">getSession</span><span class="p">:</span><span class="w"> </span><span class="n">function</span><span class="p">(</span><span class="n">tokenId</span><span class="p">,</span><span class="w"> </span><span class="n">cb</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">A</span><span class="w"> </span><span class="n">function</span><span class="w"> </span><span class="n">which</span><span class="w"> </span><span class="k">pass</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">cb</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">key</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">algorithm</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">the</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">given</span><span class="w"> </span><span class="n">token</span><span class="w"> </span><span class="n">id</span><span class="o">.</span><span class="w"> </span><span class="n">First</span><span class="w"> </span><span class="n">argument</span><span class="w"> </span><span class="n">of</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">callback</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">potential</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">error</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="n">cb</span><span class="p">(</span><span class="nb nb-Type">null</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="n">key</span><span class="p">:</span><span class="w"> </span><span class="s2">"key"</span><span class="p">,</span><span class="w"> </span><span class="n">algorithm</span><span class="p">:</span><span class="w"> </span><span class="s2">"sha256"</span><span class="p">});</span><span class="w"></span>
+<span class="w"> </span><span class="p">},</span><span class="w"></span>
+<span class="w"> </span><span class="n">createSession</span><span class="p">:</span><span class="w"> </span><span class="n">function</span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="p">,</span><span class="w"> </span><span class="n">cb</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">A</span><span class="w"> </span><span class="n">function</span><span class="w"> </span><span class="n">which</span><span class="w"> </span><span class="n">stores</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">session</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">given</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">key</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">Argument</span><span class="w"> </span><span class="n">returned</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">potential</span><span class="w"> </span><span class="n">error</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="n">cb</span><span class="p">(</span><span class="nb nb-Type">null</span><span class="p">);</span><span class="w"></span>
+<span class="w"> </span><span class="p">},</span><span class="w"></span>
+<span class="w"> </span><span class="n">setUser</span><span class="p">:</span><span class="w"> </span><span class="n">function</span><span class="p">(</span><span class="n">req</span><span class="p">,</span><span class="w"> </span><span class="n">res</span><span class="p">,</span><span class="w"> </span><span class="n">tokenId</span><span class="p">,</span><span class="w"> </span><span class="n">cb</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">A</span><span class="w"> </span><span class="n">function</span><span class="w"> </span><span class="n">that</span><span class="w"> </span><span class="n">uses</span><span class="w"> </span><span class="n">req</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">res</span><span class="p">,</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">hawkId</span><span class="w"> </span><span class="n">when</span><span class="w"> </span><span class="n">they</span><span class="s1">'re known so</span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">that</span><span class="w"> </span><span class="n">it</span><span class="w"> </span><span class="n">can</span><span class="w"> </span><span class="n">tweak</span><span class="w"> </span><span class="n">it</span><span class="o">.</span><span class="w"> </span><span class="n">For</span><span class="w"> </span><span class="n">instance</span><span class="p">,</span><span class="w"> </span><span class="n">you</span><span class="w"> </span><span class="n">can</span><span class="w"> </span><span class="n">store</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">tokenId</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">the</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">user</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="n">req</span><span class="o">.</span><span class="n">user</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tokenId</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
+<span class="p">});</span><span class="w"></span>
-<span class="n">app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/hawk-enabled-endpoint"</span><span class="p">,</span> <span class="n">hawkMiddleware</span><span class="p">);</span>
+<span class="n">app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/hawk-enabled-endpoint"</span><span class="p">,</span><span class="w"> </span><span class="n">hawkMiddleware</span><span class="p">);</span><span class="w"></span>
</code></pre></div>
<p>If you pass the createSession parameter, all non-authenticated requests
@@ -5560,8 +5595,8 @@ ailleurs, pour finalement déployer la chose chez
<p>Après quelques péripéties, j’ai réussi à faire tourner le tout, ça à été
un peu la bataille au départ pour installer virtualenv (j’ai du faire
des changements dans mon <span class="caps">PATH</span> pour que ça puisse marcher), voici mon `.bash_profile`:</p>
-<div class="highlight"><pre><span></span><code><span class="k">export</span> <span class="n">PYTHONPATH</span><span class="o">=~/</span><span class="n">modules</span><span class="o">/</span>
-<span class="k">export</span> <span class="n">PATH</span><span class="o">=$</span><span class="n">HOME</span><span class="o">/</span><span class="n">modules</span><span class="o">/</span><span class="n">bin</span><span class="p">:</span><span class="o">$</span><span class="n">HOME</span><span class="o">/</span><span class="n">modules</span><span class="o">/</span><span class="p">:</span><span class="o">$</span><span class="n">PATH</span>
+<div class="highlight"><pre><span></span><code><span class="k">export</span><span class="w"> </span><span class="n">PYTHONPATH</span><span class="o">=~/</span><span class="n">modules</span><span class="o">/</span><span class="w"></span>
+<span class="k">export</span><span class="w"> </span><span class="n">PATH</span><span class="o">=$</span><span class="n">HOME</span><span class="o">/</span><span class="n">modules</span><span class="o">/</span><span class="n">bin</span><span class="p">:</span><span class="o">$</span><span class="n">HOME</span><span class="o">/</span><span class="n">modules</span><span class="o">/</span><span class="p">:</span><span class="o">$</span><span class="n">PATH</span><span class="w"></span>
</code></pre></div>
<p>Et après y’a plus qu’à installer avec `easy_install`:</p>
@@ -5661,7 +5696,7 @@ PATH=.:\$PATH nc -w1 $(echo %h | sed 's/^.*+//;/:/!s/$/ %p/;s/:/ /&#
</code></pre></div>
<p>On peut donc spécifier des “sauts” ssh du style:</p>
-<div class="highlight"><pre><span></span><code><span class="n">ssh</span> <span class="n">root</span><span class="mf">@91.25.25.25</span><span class="o">+</span><span class="mf">192.168.1.1</span>
+<div class="highlight"><pre><span></span><code><span class="n">ssh</span><span class="w"> </span><span class="n">root</span><span class="mf">@91.25.25.25</span><span class="o">+</span><span class="mf">192.168.1.1</span><span class="w"></span>
</code></pre></div>
<p>Ensuite on peut essayer de rajouter:</p>
@@ -5746,7 +5781,7 @@ décembre 2012:</p>
<p>A l’heure actuelle, il est interdit pour deux agriculteurs de
s’échangers des semences dans le but d’en revendre la production.</p>
<p>Les états ont crée la propriété interellectuelle pour relancer
-l’industrie après les dégats de la guerre et les …</p>
+l’industrie après les dégats de la guerre …</p>
<p><a href="http://www.dailymotion.com/video/x5nhq0_les-semences-paysannes_news#from=embed">http://www.dailymotion.com/video/x5nhq0_les-semences-paysannes_news#from=embed</a></p>
<p>A l’heure actuelle, il est interdit pour deux agriculteurs de
s’échangers des semences dans le but d’en revendre la production.</p>
@@ -7595,16 +7630,16 @@ $ ant
</code></pre></div>
<p>Here is a simple example of how to use boilerpipe in Java, from their sources</p>
-<div class="highlight"><pre><span></span><code><span class="kn">package</span> <span class="nn">de.l3s.boilerpipe.demo</span><span class="p">;</span>
-<span class="kn">import</span> <span class="nn">java.net.URL</span><span class="p">;</span>
-<span class="kn">import</span> <span class="nn">de.l3s.boilerpipe.extractors.ArticleExtractor</span><span class="p">;</span>
+<div class="highlight"><pre><span></span><code><span class="kn">package</span><span class="w"> </span><span class="nn">de.l3s.boilerpipe.demo</span><span class="p">;</span><span class="w"></span>
+<span class="kn">import</span><span class="w"> </span><span class="nn">java.net.URL</span><span class="p">;</span><span class="w"></span>
+<span class="kn">import</span><span class="w"> </span><span class="nn">de.l3s.boilerpipe.extractors.ArticleExtractor</span><span class="p">;</span><span class="w"></span>
-<span class="kd">public</span> <span class="kd">class</span> <span class="nc">Oneliner</span> <span class="p">{</span>
- <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="p">(</span><span class="kd">final</span> <span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="p">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="p">{</span>
- <span class="kd">final</span> <span class="n">URL</span> <span class="n">url</span> <span class="o">=</span> <span class="k">new</span> <span class="n">URL</span><span class="p">(</span><span class="s">"http://notmyidea.org"</span><span class="p">);</span>
- <span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">ArticleExtractor</span><span class="p">.</span><span class="na">INSTANCE</span><span class="p">.</span><span class="na">getText</span><span class="p">(</span><span class="n">url</span><span class="p">));</span>
- <span class="p">}</span>
-<span class="p">}</span>
+<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Oneliner</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">Exception</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">URL</span><span class="w"> </span><span class="n">url</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">URL</span><span class="p">(</span><span class="s">"http://notmyidea.org"</span><span class="p">);</span><span class="w"></span>
+<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">ArticleExtractor</span><span class="p">.</span><span class="na">INSTANCE</span><span class="p">.</span><span class="na">getText</span><span class="p">(</span><span class="n">url</span><span class="p">));</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
</code></pre></div>
<p>To run it:</p>
@@ -7968,14 +8003,14 @@ unison .vimrc ssh://notmyidea.org:20006/.vimrc
<p>It is also possible to put all the informations in a config file, and
then to only run unison. (fire up vim \~/.unison/default.prf.</p>
<p>Here is my config:</p>
-<div class="highlight"><pre><span></span><code> <span class="na">root</span> <span class="o">=</span> <span class="s">/home/alexis</span>
- <span class="na">root</span> <span class="o">=</span> <span class="s">ssh://notmyidea.org:20006</span>
+<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="na">root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">/home/alexis</span><span class="w"></span>
+<span class="w"> </span><span class="na">root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">ssh://notmyidea.org:20006</span><span class="w"></span>
- <span class="na">path</span> <span class="o">=</span> <span class="s">.vimrc</span>
- <span class="na">path</span> <span class="o">=</span> <span class="s">dotfiles</span>
- <span class="na">path</span> <span class="o">=</span> <span class="s">dev</span>
+<span class="w"> </span><span class="na">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">.vimrc</span><span class="w"></span>
+<span class="w"> </span><span class="na">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">dotfiles</span><span class="w"></span>
+<span class="w"> </span><span class="na">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">dev</span><span class="w"></span>
- <span class="na">follow</span> <span class="o">=</span> <span class="s">Name *</span>
+<span class="w"> </span><span class="na">follow</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">Name *</span><span class="w"></span>
</code></pre></div>
<p>My vimrc is in fact a symbolic link on my laptop, but I don’t want to
@@ -8403,35 +8438,35 @@ $ gnome-background-generator -p ~/Images/walls -s
</code></pre></div>
<p>Here is a extract of the `—help`:</p>
-<div class="highlight"><pre><span></span><code><span class="n">shell</span>
-<span class="o">$</span> <span class="n">gnome</span><span class="o">-</span><span class="n">background</span><span class="o">-</span><span class="n">generator</span> <span class="o">--</span><span class="n">help</span>
-<span class="n">usage</span><span class="p">:</span> <span class="n">gnome</span><span class="o">-</span><span class="n">background</span><span class="o">-</span><span class="n">generator</span> <span class="p">[</span><span class="o">-</span><span class="n">h</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">p</span> <span class="n">PATH</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">o</span> <span class="n">OUTPUT</span><span class="p">]</span>
- <span class="p">[</span><span class="o">-</span><span class="n">t</span> <span class="n">TRANSITION_TIME</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">d</span> <span class="n">DISPLAY_TIME</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">s</span><span class="p">]</span>
- <span class="p">[</span><span class="o">-</span><span class="n">b</span><span class="p">]</span>
+<div class="highlight"><pre><span></span><code><span class="n">shell</span><span class="w"></span>
+<span class="o">$</span><span class="w"> </span><span class="n">gnome</span><span class="o">-</span><span class="n">background</span><span class="o">-</span><span class="n">generator</span><span class="w"> </span><span class="o">--</span><span class="n">help</span><span class="w"></span>
+<span class="n">usage</span><span class="p">:</span><span class="w"> </span><span class="n">gnome</span><span class="o">-</span><span class="n">background</span><span class="o">-</span><span class="n">generator</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">h</span><span class="p">]</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">p</span><span class="w"> </span><span class="n">PATH</span><span class="p">]</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">o</span><span class="w"> </span><span class="n">OUTPUT</span><span class="p">]</span><span class="w"></span>
+<span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">t</span><span class="w"> </span><span class="n">TRANSITION_TIME</span><span class="p">]</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">d</span><span class="w"> </span><span class="n">DISPLAY_TIME</span><span class="p">]</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">s</span><span class="p">]</span><span class="w"></span>
+<span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">b</span><span class="p">]</span><span class="w"></span>
-<span class="n">A</span> <span class="n">simple</span> <span class="n">command</span> <span class="n">line</span> <span class="k">tool</span> <span class="n">to</span> <span class="n">generate</span> <span class="n">an</span> <span class="n">XML</span> <span class="n">file</span> <span class="n">to</span> <span class="n">use</span> <span class="k">for</span> <span class="n">gnome</span>
-<span class="n">wallpapers</span><span class="p">,</span> <span class="n">to</span> <span class="n">have</span> <span class="n">dynamic</span> <span class="n">walls</span>
+<span class="n">A</span><span class="w"> </span><span class="n">simple</span><span class="w"> </span><span class="n">command</span><span class="w"> </span><span class="n">line</span><span class="w"> </span><span class="k">tool</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">generate</span><span class="w"> </span><span class="n">an</span><span class="w"> </span><span class="n">XML</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">use</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">gnome</span><span class="w"></span>
+<span class="n">wallpapers</span><span class="p">,</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">have</span><span class="w"> </span><span class="n">dynamic</span><span class="w"> </span><span class="n">walls</span><span class="w"></span>
-<span class="n">optional</span> <span class="n">arguments</span><span class="p">:</span>
- <span class="o">-</span><span class="n">h</span><span class="p">,</span> <span class="o">--</span><span class="n">help</span> <span class="n">show</span> <span class="n">this</span> <span class="n">help</span> <span class="n">message</span> <span class="ow">and</span> <span class="n">exit</span>
- <span class="o">-</span><span class="n">p</span> <span class="n">PATH</span><span class="p">,</span> <span class="o">--</span><span class="n">path</span> <span class="n">PATH</span> <span class="n">Path</span> <span class="n">to</span> <span class="n">look</span> <span class="k">for</span> <span class="n">the</span> <span class="n">pictures</span><span class="o">.</span> <span class="n">If</span> <span class="n">no</span> <span class="n">output</span> <span class="k">is</span>
- <span class="n">specified</span><span class="p">,</span> <span class="n">will</span> <span class="n">be</span> <span class="n">used</span> <span class="n">too</span> <span class="k">for</span> <span class="n">outputing</span> <span class="n">the</span> <span class="n">dynamic</span><span class="o">-</span>
- <span class="n">wallpaper</span><span class="o">.</span><span class="n">xml</span> <span class="n">file</span><span class="o">.</span> <span class="n">Default</span> <span class="n">value</span> <span class="k">is</span> <span class="n">the</span> <span class="n">current</span>
- <span class="n">directory</span> <span class="p">(</span><span class="o">.</span><span class="p">)</span>
- <span class="o">-</span><span class="n">o</span> <span class="n">OUTPUT</span><span class="p">,</span> <span class="o">--</span><span class="n">output</span> <span class="n">OUTPUT</span>
- <span class="n">Output</span> <span class="n">filename</span><span class="o">.</span> <span class="n">If</span> <span class="n">no</span> <span class="n">filename</span> <span class="k">is</span> <span class="n">specified</span><span class="p">,</span> <span class="n">a</span>
- <span class="n">dynamic</span><span class="o">-</span><span class="n">wallpaper</span><span class="o">.</span><span class="n">xml</span> <span class="n">file</span> <span class="n">will</span> <span class="n">be</span> <span class="n">generated</span> <span class="ow">in</span> <span class="n">the</span>
- <span class="n">path</span> <span class="n">containing</span> <span class="n">the</span> <span class="n">pictures</span><span class="o">.</span> <span class="n">You</span> <span class="n">can</span> <span class="n">also</span> <span class="n">use</span> <span class="s2">"-"</span> <span class="n">to</span>
- <span class="n">display</span> <span class="n">the</span> <span class="n">xml</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">stdout</span><span class="o">.</span>
- <span class="o">-</span><span class="n">t</span> <span class="n">TRANSITION_TIME</span><span class="p">,</span> <span class="o">--</span><span class="n">transition</span><span class="o">-</span><span class="n">time</span> <span class="n">TRANSITION_TIME</span>
- <span class="n">Time</span> <span class="p">(</span><span class="ow">in</span> <span class="n">seconds</span><span class="p">)</span> <span class="n">transitions</span> <span class="n">must</span> <span class="n">last</span> <span class="p">(</span><span class="n">default</span> <span class="n">value</span>
- <span class="k">is</span> <span class="mi">2</span> <span class="n">seconds</span><span class="p">)</span>
- <span class="o">-</span><span class="n">d</span> <span class="n">DISPLAY_TIME</span><span class="p">,</span> <span class="o">--</span><span class="n">display</span><span class="o">-</span><span class="n">time</span> <span class="n">DISPLAY_TIME</span>
- <span class="n">Time</span> <span class="p">(</span><span class="ow">in</span> <span class="n">seconds</span><span class="p">)</span> <span class="n">a</span> <span class="n">picture</span> <span class="n">must</span> <span class="n">be</span> <span class="n">displayed</span><span class="o">.</span> <span class="n">Default</span>
- <span class="n">value</span> <span class="k">is</span> <span class="mi">900</span> <span class="p">(</span><span class="mi">15</span><span class="n">mn</span><span class="p">)</span>
- <span class="o">-</span><span class="n">s</span><span class="p">,</span> <span class="o">--</span><span class="n">set</span><span class="o">-</span><span class="n">background</span> <span class="s1">'''try to set the background using gnome-appearance-</span>
-<span class="s1"> properties</span>
-<span class="s1"> -b, --debug</span>
+<span class="n">optional</span><span class="w"> </span><span class="n">arguments</span><span class="p">:</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">h</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">help</span><span class="w"> </span><span class="n">show</span><span class="w"> </span><span class="n">this</span><span class="w"> </span><span class="n">help</span><span class="w"> </span><span class="n">message</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">exit</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">p</span><span class="w"> </span><span class="n">PATH</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">path</span><span class="w"> </span><span class="n">PATH</span><span class="w"> </span><span class="n">Path</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">look</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">pictures</span><span class="o">.</span><span class="w"> </span><span class="n">If</span><span class="w"> </span><span class="n">no</span><span class="w"> </span><span class="n">output</span><span class="w"> </span><span class="k">is</span><span class="w"></span>
+<span class="w"> </span><span class="n">specified</span><span class="p">,</span><span class="w"> </span><span class="n">will</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">used</span><span class="w"> </span><span class="n">too</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">outputing</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">dynamic</span><span class="o">-</span><span class="w"></span>
+<span class="w"> </span><span class="n">wallpaper</span><span class="o">.</span><span class="n">xml</span><span class="w"> </span><span class="n">file</span><span class="o">.</span><span class="w"> </span><span class="n">Default</span><span class="w"> </span><span class="n">value</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">current</span><span class="w"></span>
+<span class="w"> </span><span class="n">directory</span><span class="w"> </span><span class="p">(</span><span class="o">.</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">o</span><span class="w"> </span><span class="n">OUTPUT</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">output</span><span class="w"> </span><span class="n">OUTPUT</span><span class="w"></span>
+<span class="w"> </span><span class="n">Output</span><span class="w"> </span><span class="n">filename</span><span class="o">.</span><span class="w"> </span><span class="n">If</span><span class="w"> </span><span class="n">no</span><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">specified</span><span class="p">,</span><span class="w"> </span><span class="n">a</span><span class="w"></span>
+<span class="w"> </span><span class="n">dynamic</span><span class="o">-</span><span class="n">wallpaper</span><span class="o">.</span><span class="n">xml</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="n">will</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">generated</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">the</span><span class="w"></span>
+<span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="n">containing</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">pictures</span><span class="o">.</span><span class="w"> </span><span class="n">You</span><span class="w"> </span><span class="n">can</span><span class="w"> </span><span class="n">also</span><span class="w"> </span><span class="n">use</span><span class="w"> </span><span class="s2">"-"</span><span class="w"> </span><span class="n">to</span><span class="w"></span>
+<span class="w"> </span><span class="n">display</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">xml</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">stdout</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">t</span><span class="w"> </span><span class="n">TRANSITION_TIME</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">transition</span><span class="o">-</span><span class="n">time</span><span class="w"> </span><span class="n">TRANSITION_TIME</span><span class="w"></span>
+<span class="w"> </span><span class="n">Time</span><span class="w"> </span><span class="p">(</span><span class="ow">in</span><span class="w"> </span><span class="n">seconds</span><span class="p">)</span><span class="w"> </span><span class="n">transitions</span><span class="w"> </span><span class="n">must</span><span class="w"> </span><span class="n">last</span><span class="w"> </span><span class="p">(</span><span class="n">default</span><span class="w"> </span><span class="n">value</span><span class="w"></span>
+<span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="n">seconds</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">d</span><span class="w"> </span><span class="n">DISPLAY_TIME</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">display</span><span class="o">-</span><span class="n">time</span><span class="w"> </span><span class="n">DISPLAY_TIME</span><span class="w"></span>
+<span class="w"> </span><span class="n">Time</span><span class="w"> </span><span class="p">(</span><span class="ow">in</span><span class="w"> </span><span class="n">seconds</span><span class="p">)</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">picture</span><span class="w"> </span><span class="n">must</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">displayed</span><span class="o">.</span><span class="w"> </span><span class="n">Default</span><span class="w"></span>
+<span class="w"> </span><span class="n">value</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="mi">900</span><span class="w"> </span><span class="p">(</span><span class="mi">15</span><span class="n">mn</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">s</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">set</span><span class="o">-</span><span class="n">background</span><span class="w"> </span><span class="s1">'''try to set the background using gnome-appearance-</span><span class="w"></span>
+<span class="s1"> properties</span><span class="w"></span>
+<span class="s1"> -b, --debug</span><span class="w"></span>
</code></pre></div>How to install NGINX + PHP 5.3 on FreeBSD.2010-10-10T00:00:00+02:002010-10-10T00:00:00+02:00tag:blog.notmyidea.org,2010-10-10:/how-to-install-nginx-php-53-on-freebsd.html
<ul>
<li>
@@ -8474,30 +8509,30 @@ the server.</p>
<p>That’s a simple thing in fact, but it could be good to have something
that will work without effort over time.</p>
<p>Here’s a sample of my configuration:</p>
-<div class="highlight"><pre><span></span><code><span class="nt">server</span> <span class="p">{</span>
- <span class="err">server_name</span> <span class="err">ndd</span><span class="p">;</span>
- <span class="err">set</span> <span class="err">$path</span> <span class="err">/path/to/your/files</span><span class="p">;</span>
- <span class="err">root</span> <span class="err">$path</span><span class="p">;</span>
+<div class="highlight"><pre><span></span><code><span class="nt">server</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">server_name</span><span class="w"> </span><span class="err">ndd</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">set</span><span class="w"> </span><span class="err">$path</span><span class="w"> </span><span class="err">/path/to/your/files</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">root</span><span class="w"> </span><span class="err">$path</span><span class="p">;</span><span class="w"></span>
- <span class="err">location</span> <span class="err">/</span> <span class="err">{</span>
- <span class="err">index</span> <span class="err">index.php</span><span class="p">;</span>
- <span class="p">}</span>
+<span class="w"> </span><span class="err">location</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="err">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">index</span><span class="w"> </span><span class="err">index.php</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
- <span class="nt">location</span> <span class="o">~*</span> <span class="o">^.+.(</span><span class="nt">jpg</span><span class="o">|</span><span class="nt">jpeg</span><span class="o">|</span><span class="nt">gif</span><span class="o">|</span><span class="nt">css</span><span class="o">|</span><span class="nt">png</span><span class="o">|</span><span class="nt">js</span><span class="o">|</span><span class="nt">ico</span><span class="o">|</span><span class="nt">xml</span><span class="o">)$</span> <span class="p">{</span>
- <span class="err">access_log</span> <span class="err">off</span><span class="p">;</span>
- <span class="err">expires</span> <span class="err">30d</span><span class="p">;</span>
- <span class="p">}</span>
+<span class="w"> </span><span class="nt">location</span><span class="w"> </span><span class="o">~*</span><span class="w"> </span><span class="o">^.+.(</span><span class="nt">jpg</span><span class="o">|</span><span class="nt">jpeg</span><span class="o">|</span><span class="nt">gif</span><span class="o">|</span><span class="nt">css</span><span class="o">|</span><span class="nt">png</span><span class="o">|</span><span class="nt">js</span><span class="o">|</span><span class="nt">ico</span><span class="o">|</span><span class="nt">xml</span><span class="o">)$</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">access_log</span><span class="w"> </span><span class="err">off</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">expires</span><span class="w"> </span><span class="err">30d</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
- <span class="nt">location</span> <span class="o">~</span> <span class="p">.</span><span class="nc">php</span><span class="o">$</span> <span class="p">{</span>
- <span class="err">fastcgi_param</span> <span class="err">SCRIPT_FILENAME</span> <span class="err">$path$fastcgi_script_name</span><span class="p">;</span>
- <span class="err">fastcgi_pass</span> <span class="err">backend</span><span class="p">;</span>
- <span class="err">include</span> <span class="err">fastcgi_params</span><span class="p">;</span>
- <span class="p">}</span>
-<span class="err">}</span>
+<span class="w"> </span><span class="nt">location</span><span class="w"> </span><span class="o">~</span><span class="w"> </span><span class="p">.</span><span class="nc">php</span><span class="o">$</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">fastcgi_param</span><span class="w"> </span><span class="err">SCRIPT_FILENAME</span><span class="w"> </span><span class="err">$path$fastcgi_script_name</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">fastcgi_pass</span><span class="w"> </span><span class="err">backend</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">include</span><span class="w"> </span><span class="err">fastcgi_params</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
+<span class="err">}</span><span class="w"></span>
-<span class="nt">upstream</span> <span class="nt">backend</span> <span class="p">{</span>
- <span class="err">server</span> <span class="err">127.0.0.1:9000</span><span class="p">;</span>
-<span class="p">}</span>
+<span class="nt">upstream</span><span class="w"> </span><span class="nt">backend</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">server</span><span class="w"> </span><span class="err">127.0.0.1:9000</span><span class="p">;</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
</code></pre></div>
<p>And that’s it !</p>Pelican, a simple static blog generator in python2010-10-06T00:00:00+02:002010-10-06T00:00:00+02:00tag:blog.notmyidea.org,2010-10-06:/pelican-a-simple-static-blog-generator-in-python.html
diff --git a/feeds/all-fr.atom.xml b/feeds/all-fr.atom.xml
index 7ea587e..1225e5b 100644
--- a/feeds/all-fr.atom.xml
+++ b/feeds/all-fr.atom.xml
@@ -43,8 +43,8 @@ obtenir le même résultat à partir de la même entrée.</p>
une collection <span class="caps">JSON</span>. Chaque élément contient un identifiant unique généré sur
le client.</p>
<p>Par exemple, un enregistrement peut ressembler à :</p>
-<div class="highlight"><pre><span></span><span class="p">{</span><span class="s2">"id"</span><span class="o">:</span> <span class="s2">"b7dded96-8df0-8af8-449a-8bc47f71b4c4"</span><span class="p">,</span>
- <span class="s2">"fingerprint"</span><span class="o">:</span> <span class="s2">"11:D5:D2:0A:9A:F8:D9:FC:23:6E:5C:5C:30:EC:AF:68:F5:68:FB:A3"</span><span class="p">}</span>
+<div class="highlight"><pre><span></span><span class="p">{</span><span class="s2">"id"</span><span class="o">:</span><span class="w"> </span><span class="s2">"b7dded96-8df0-8af8-449a-8bc47f71b4c4"</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s2">"fingerprint"</span><span class="o">:</span><span class="w"> </span><span class="s2">"11:D5:D2:0A:9A:F8:D9:FC:23:6E:5C:5C:30:EC:AF:68:F5:68:FB:A3"</span><span class="p">}</span><span class="w"></span>
</pre></div>
<p>Le <em>hash</em> de la collection est ensuite calculé, signé puis envoyé au serveur
(voir plus bas pour les détails).</p>
@@ -173,7 +173,7 @@ concept repose sur <a class="reference external" href="https://fr.wikipedia.o
<a class="reference external" href="https://tools.ietf.org/html/draft-dejong-remotestorage-05">*Remote Storage*</a>,
mais pour l’instant les cas d’utilisations ne se sont pas encore présentés officiellement.</p>
</div>
-<div class="section" id="id2">
+<div class="section" id="a-venir-1">
<h3>À venir</h3>
<p>Nous serons probablement amenés à introduire la gestion de la concurrence dans
le client <span class="caps">JS</span>, en complément de ce qui a été fait sur le serveur, pour permettre
@@ -188,17 +188,17 @@ que <a class="reference external" href="https://github.com/mozilla-services/k
<h2>Contenus applicatifs de Firefox</h2>
<p>Aujourd’hui Firefox a un cycle de release de six semaines. Un des objectifs
consiste à désolidariser certains contenus applicatifs de ces cycles
-relativement longs (ex. <em>règles de securité, dictionnaires, traductions, …</em>) <a class="footnote-reference" href="#id4" id="id3">[1]</a>.</p>
+relativement longs (ex. <em>règles de securité, dictionnaires, traductions, …</em>) <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a>.</p>
<p>Il s’agit de données <span class="caps">JSON</span> et binaire qui doivent être versionnées et synchronisées par
les navigateurs (<em>lecture seule</em>).</p>
<p>Il y a plusieurs outils officiels qui existent pour gérer ça (<em>Balrog</em>, <em>Shavar</em>, …),
et pour l’instant, aucun choix n’a été fait. Mais lors des conversations avec
l’équipe en charge du projet, ce fût vraiment motivant de voir que même pour
ce genre de besoins internes, <em>Kinto</em> est tout aussi pertinent !</p>
-<table class="docutils footnote" frame="void" id="id4" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id3">[1]</a></td><td>La bonne nouvelle c’est que toutes les fonctionnalités <em>third-party</em> qui ont
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>La bonne nouvelle c’est que toutes les fonctionnalités <em>third-party</em> qui ont
été intégrées récemment vont redevenir des <em>add-ons</em> \o/.</td></tr>
</tbody>
</table>
@@ -212,7 +212,7 @@ un prototype pour améliorer <em>Awesome bar</em>, qui fusionnerait
<p>Nous ne pouvons pas en dire beaucoup plus pour l’instant, mais les fonctionnalités
de collections d’enregistrements partagées entre utilisateurs de <em>Kinto</em>
correspondent parfaitement à ce qui est envisagé pour le futur du navigateur :)</p>
-<div class="section" id="id5">
+<div class="section" id="a-venir-2">
<h3>À venir</h3>
<p>Nous serons donc probablement amenés, avant de la fin de l’année, à introduire des
fonctionnalités d’indexation et de recherche <em>full-text</em> (comprendre <em>ElasticSearch</em>).
@@ -234,7 +234,7 @@ ou un équivalent à <em>Alexa.com Top 500</em> pour fournir la comp
interroger le moteur de recherche.</p>
<p>L’exercice pourrait être poussé jusqu’à la synchronisation d’états <em>React</em>
entre périphériques (par exemple pour les onglets).</p>
-<div class="section" id="id7">
+<div class="section" id="a-venir-3">
<h3>À venir</h3>
<p>Si <em>browser.html</em> doit stocker des données de navigation, il faudra ajouter
des fonctionnalités de chiffrement sur le client <span class="caps">JS</span>. Ça tombe bien, c’est un
@@ -262,7 +262,7 @@ de données sur le Web :)</p>
et Kinto 1.0 !</p>
<p><em>Cet article est repris depuis le blog « Service de Nuages » de mon équipe à Mozilla</em></p>
<p>Aujourd’hui, c’est jour de fête : nous venons de publier Cliquet <strong>2.0</strong>
-<a class="footnote-reference" href="#id5" id="id1">[1]</a> et Kinto <strong>1.0</strong> <a class="footnote-reference" href="#id6" id="id2">[2]</a>.</p>
+<a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a> et Kinto <strong>1.0</strong> <a class="footnote-reference" href="#footnote-2" id="footnote-reference-2">[2]</a>.</p>
<blockquote class="epigraph">
<p>L’aboutissement de 3 années de R&D !</p>
<p class="attribution">—Rémy</p>
@@ -283,7 +283,7 @@ fonctionnalités que l’on attendait depuis longtemps, comme la gestion
s’empêcher de voir toutes les choses qui doivent toujours être améliorées,
notamment sur la documentation et les performances.</p>
<p>On peut déjà entrevoir à quoi l’écosystème va ressembler, et c’est prometteur.
-Il y a déjà un client JavaScript <a class="footnote-reference" href="#id7" id="id3">[3]</a> dont l’objectif est de synchroniser les
+Il y a déjà un client JavaScript <a class="footnote-reference" href="#footnote-3" id="footnote-reference-3">[3]</a> dont l’objectif est de synchroniser les
données locales du navigateur avec une instance de Kinto.</p>
<p>N’hésitez vraiment pas à nous solliciter pour discuter avec vous si vous avez
des problématiques proches : nous accueillons avec plaisir toutes sortes de
@@ -292,34 +292,34 @@ la solution ou de la manière de communiquer avec le monde extérieur. Si vous
souhaitez nous contacter, vous pouvez laisser un commentaire ici ou nous
contacter sur le canal <a class="reference external" href="irc://irc.mozilla.org/#storage">#storage</a> sur le réseau <span class="caps">IRC</span> de Mozilla.</p>
<p>Et ce n’est que le début ! Le futur se dessine dans notre feuille de route
-<a class="footnote-reference" href="#id8" id="id4">[4]</a>.</p>
-<table class="docutils footnote" frame="void" id="id5" rules="none">
+<a class="footnote-reference" href="#footnote-4" id="footnote-reference-4">[4]</a>.</p>
+<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td><strong>Cliquet</strong> est une boite à outils pour faciliter l’implémentation de
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td><strong>Cliquet</strong> est une boite à outils pour faciliter l’implémentation de
microservices <span class="caps">HTTP</span> tels que les APIs <em><span class="caps">REST</span></em> ayant des besoins de
synchronisation.</td></tr>
</tbody>
</table>
-<table class="docutils footnote" frame="void" id="id6" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td><strong>Kinto</strong> est un service pour stocker, synchroniser et partager des données
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-2">[2]</a></td><td><strong>Kinto</strong> est un service pour stocker, synchroniser et partager des données
arbitraires, attachées à un compte Firefox (mais le système d’authentification
est <em>pluggable</em>).</td></tr>
</tbody>
</table>
-<table class="docutils footnote" frame="void" id="id7" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-3" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id3">[3]</a></td><td>Cliquetis, la bibliothèque JavaScript pour consommer l’<span class="caps">API</span> <span class="caps">HTTP</span> de Kinto —
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-3">[3]</a></td><td>Cliquetis, la bibliothèque JavaScript pour consommer l’<span class="caps">API</span> <span class="caps">HTTP</span> de Kinto —
<a class="reference external" href="https://github.com/mozilla-services/cliquetis">https://github.com/mozilla-services/cliquetis</a></td></tr>
</tbody>
</table>
-<table class="docutils footnote" frame="void" id="id8" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-4" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id4">[4]</a></td><td>La feuille de route de Kinto: <a class="reference external" href="https://github.com/mozilla-services/kinto/wiki/roadmap">https://github.com/mozilla-services/kinto/wiki/roadmap</a></td></tr>
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-4">[4]</a></td><td>La feuille de route de Kinto: <a class="reference external" href="https://github.com/mozilla-services/kinto/wiki/roadmap">https://github.com/mozilla-services/kinto/wiki/roadmap</a></td></tr>
</tbody>
</table>
Service de nuages : Stocker et interroger les permissions avec Kinto2015-05-26T00:00:00+02:002015-05-26T00:00:00+02:00tag:blog.notmyidea.org,2015-05-26:/service-de-nuages-stocker-et-interroger-les-permissions-avec-kinto-fr.html<p class="first last">Comment faire pour stocker et interroger la base de données au sujet des permissions avec Kinto ?</p>
@@ -435,13 +435,13 @@ avantages (lisibilité, unicité, cohérence avec les URLs)</p>
<div class="section" id="les-tables">
<h3>Les tables</h3>
<p>Pour le stockage des principals et des permissions:</p>
-<div class="highlight"><pre><span></span><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="k">user</span><span class="p">(</span><span class="n">id</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="n">principals</span> <span class="nb">TEXT</span><span class="p">[]);</span>
-<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">perms</span><span class="p">(</span><span class="n">ace</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="n">principals</span> <span class="nb">TEXT</span><span class="p">[]);</span>
+<div class="highlight"><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="k">user</span><span class="p">(</span><span class="n">id</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="n">principals</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">[]);</span><span class="w"></span>
+<span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">perms</span><span class="p">(</span><span class="n">ace</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="n">principals</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">[]);</span><span class="w"></span>
</pre></div>
<p>La table <em>perms</em> va associer des <em>principals</em> à chaque <em><span class="caps">ACE</span></em> (e.g.“/buckets/blog:write“).</p>
<p>Pour le stockage des données:</p>
-<div class="highlight"><pre><span></span><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="k">object</span><span class="p">(</span><span class="n">id</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="k">type</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="n">parent_id</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="k">data</span> <span class="n">JSONB</span><span class="p">,</span>
- <span class="n">write_principals</span> <span class="nb">TEXT</span><span class="p">[],</span> <span class="n">read_principals</span> <span class="nb">TEXT</span><span class="p">[]);</span>
+<div class="highlight"><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="k">object</span><span class="p">(</span><span class="n">id</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="w"> </span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">write_principals</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">[],</span><span class="w"> </span><span class="n">read_principals</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">[]);</span><span class="w"></span>
</pre></div>
<p>La colonne <em>parent_id</em> permet de savoir à qui appartient l’objet
(e.g. groupe d’un <em>bucket</em>, collection d’un <em>bucket</em>, <em>record</em> d’une
@@ -449,53 +449,53 @@ collection, …).</p>
</div>
<div class="section" id="exemple-d-utilisateur">
<h3>Exemple d’utilisateur</h3>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">user</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="n">principals</span><span class="p">)</span>
- <span class="k">VALUES</span> <span class="p">(</span><span class="s1">'fxa:alexis'</span><span class="p">,</span> <span class="s1">'{}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">user</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">principals</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'fxa:alexis'</span><span class="p">,</span><span class="w"> </span><span class="s1">'{}'</span><span class="p">);</span><span class="w"></span>
-<span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">user</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="n">principals</span><span class="p">)</span>
- <span class="k">VALUES</span> <span class="p">(</span><span class="s1">'fxa:natim'</span><span class="p">,</span>
- <span class="s1">'{"/buckets/blog/groups/moderators"}'</span><span class="p">);</span>
+<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">user</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">principals</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'fxa:natim'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"/buckets/blog/groups/moderators"}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
</div>
<div class="section" id="exemple-d-objets">
<h3>Exemple d’objets</h3>
<div class="section" id="bucket">
<h4>Bucket</h4>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">object</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="k">type</span><span class="p">,</span> <span class="n">parent_id</span><span class="p">,</span> <span class="k">data</span><span class="p">,</span>
- <span class="n">read_principals</span><span class="p">,</span> <span class="n">write_principals</span><span class="p">)</span>
-<span class="k">VALUES</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog'</span><span class="p">,</span>
- <span class="s1">'bucket'</span><span class="p">,</span>
- <span class="k">NULL</span><span class="p">,</span>
- <span class="s1">'{"name": "blog"}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span>
- <span class="s1">'{}'</span><span class="p">,</span> <span class="s1">'{"fxa:alexis"}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">read_principals</span><span class="p">,</span><span class="w"> </span><span class="n">write_principals</span><span class="p">)</span><span class="w"></span>
+<span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'bucket'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="k">NULL</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"name": "blog"}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{}'</span><span class="p">,</span><span class="w"> </span><span class="s1">'{"fxa:alexis"}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
</div>
<div class="section" id="group">
<h4>Group</h4>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">object</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="k">type</span><span class="p">,</span> <span class="n">parent_id</span><span class="p">,</span> <span class="k">data</span><span class="p">,</span>
- <span class="n">read_principals</span><span class="p">,</span> <span class="n">write_principals</span><span class="p">)</span>
-<span class="k">VALUES</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog/groups/moderators'</span><span class="p">,</span>
- <span class="s1">'group'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog'</span><span class="p">,</span>
- <span class="s1">'{"name": "moderators", "members": ['</span><span class="n">fxa</span><span class="p">:</span><span class="n">natim</span><span class="s1">']}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span>
- <span class="s1">'{}'</span><span class="p">,</span> <span class="s1">'{}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">read_principals</span><span class="p">,</span><span class="w"> </span><span class="n">write_principals</span><span class="p">)</span><span class="w"></span>
+<span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/groups/moderators'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'group'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"name": "moderators", "members": ['</span><span class="n">fxa</span><span class="p">:</span><span class="n">natim</span><span class="s1">']}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{}'</span><span class="p">,</span><span class="w"> </span><span class="s1">'{}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
<p>Ce groupe peut être gére par <tt class="docutils literal">fxa:alexis</tt> puisqu’il a la permission
<tt class="docutils literal">write</tt> dans le <em>bucket</em> parent.</p>
</div>
<div class="section" id="collection">
<h4>Collection</h4>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">object</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="k">type</span><span class="p">,</span> <span class="n">parent_id</span><span class="p">,</span> <span class="k">data</span><span class="p">,</span>
- <span class="n">read_principals</span><span class="p">,</span> <span class="n">write_principals</span><span class="p">)</span>
-<span class="k">VALUES</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog/collections/articles'</span><span class="p">,</span>
- <span class="s1">'collection'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog'</span><span class="p">,</span>
- <span class="s1">'{"name": "article"}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span>
- <span class="s1">'{"system.Everyone"}'</span><span class="p">,</span>
- <span class="s1">'{"/buckets/blog/groups/moderators"}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">read_principals</span><span class="p">,</span><span class="w"> </span><span class="n">write_principals</span><span class="p">)</span><span class="w"></span>
+<span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/articles'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'collection'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"name": "article"}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"system.Everyone"}'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"/buckets/blog/groups/moderators"}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
<p>Cette collection d’articles peut être lue par tout le monde,
et gérée par les membres du groupe <tt class="docutils literal">moderators</tt>, ainsi que
@@ -503,56 +503,56 @@ et gérée par les membres du groupe <tt class="docutils literal">moderato
</div>
<div class="section" id="records">
<h4>Records</h4>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">object</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="k">type</span><span class="p">,</span> <span class="n">parent_id</span><span class="p">,</span> <span class="k">data</span><span class="p">,</span>
- <span class="n">read_principals</span><span class="p">,</span> <span class="n">write_principals</span><span class="p">)</span>
-<span class="k">VALUES</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog/collections/articles/records/02f3f76f-7059-4ae4-888f-2ac9824e9200'</span><span class="p">,</span>
- <span class="s1">'record'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog/collections/articles'</span><span class="p">,</span>
- <span class="s1">'{"name": "02f3f76f-7059-4ae4-888f-2ac9824e9200",</span>
-<span class="s1"> "title": "Stocker les permissions", ...}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span>
- <span class="s1">'{}'</span><span class="p">,</span> <span class="s1">'{}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">read_principals</span><span class="p">,</span><span class="w"> </span><span class="n">write_principals</span><span class="p">)</span><span class="w"></span>
+<span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/articles/records/02f3f76f-7059-4ae4-888f-2ac9824e9200'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'record'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/articles'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"name": "02f3f76f-7059-4ae4-888f-2ac9824e9200",</span>
+<span class="s1"> "title": "Stocker les permissions", ...}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{}'</span><span class="p">,</span><span class="w"> </span><span class="s1">'{}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
</div>
</div>
<div class="section" id="interroger-les-permissions">
<h3>Interroger les permissions</h3>
-<div class="section" id="id1">
+<div class="section" id="obtenir-la-liste-des-principals-d-un-ace-1">
<h4>Obtenir la liste des “principals” d’un <span class="caps">ACE</span></h4>
<p>Comme vu plus haut, pour vérifier une permission, on fait l’union des
<em>principals</em> requis par les objets hérités, et on teste leur
intersection avec ceux de l’utilisateur:</p>
-<div class="highlight"><pre><span></span><span class="k">WITH</span> <span class="n">required_principals</span> <span class="k">AS</span> <span class="p">(</span>
- <span class="k">SELECT</span> <span class="k">unnest</span><span class="p">(</span><span class="n">principals</span><span class="p">)</span> <span class="k">AS</span> <span class="n">p</span>
- <span class="k">FROM</span> <span class="n">perms</span>
- <span class="k">WHERE</span> <span class="n">ace</span> <span class="k">IN</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog:write'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog:read'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog/collections/article:write'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog/collections/article:read'</span><span class="p">)</span>
- <span class="p">),</span>
- <span class="n">user_principals</span> <span class="k">AS</span> <span class="p">(</span>
- <span class="k">SELECT</span> <span class="k">unnest</span><span class="p">(</span><span class="n">principals</span><span class="p">)</span>
- <span class="k">FROM</span> <span class="k">user</span>
- <span class="k">WHERE</span> <span class="n">id</span> <span class="o">=</span> <span class="s1">'fxa:natim'</span>
- <span class="p">)</span>
- <span class="k">SELECT</span> <span class="k">COUNT</span><span class="p">(</span><span class="o">*</span><span class="p">)</span>
- <span class="k">FROM</span> <span class="n">user_principals</span> <span class="n">a</span>
- <span class="k">INNER</span> <span class="k">JOIN</span> <span class="n">required_principals</span> <span class="n">b</span>
- <span class="k">ON</span> <span class="n">a</span><span class="p">.</span><span class="n">p</span> <span class="o">=</span> <span class="n">b</span><span class="p">.</span><span class="n">p</span><span class="p">;</span>
+<div class="highlight"><pre><span></span><span class="k">WITH</span><span class="w"> </span><span class="n">required_principals</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">unnest</span><span class="p">(</span><span class="n">principals</span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">p</span><span class="w"></span>
+<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">perms</span><span class="w"></span>
+<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">ace</span><span class="w"> </span><span class="k">IN</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog:write'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog:read'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/article:write'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/article:read'</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="p">),</span><span class="w"></span>
+<span class="w"> </span><span class="n">user_principals</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">unnest</span><span class="p">(</span><span class="n">principals</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="k">user</span><span class="w"></span>
+<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'fxa:natim'</span><span class="w"></span>
+<span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">COUNT</span><span class="p">(</span><span class="o">*</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">user_principals</span><span class="w"> </span><span class="n">a</span><span class="w"></span>
+<span class="w"> </span><span class="k">INNER</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">required_principals</span><span class="w"> </span><span class="n">b</span><span class="w"></span>
+<span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">a</span><span class="p">.</span><span class="n">p</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">b</span><span class="p">.</span><span class="n">p</span><span class="p">;</span><span class="w"></span>
</pre></div>
</div>
<div class="section" id="filtrer-les-objets-en-fonction-des-permissions">
<h4>Filtrer les objets en fonction des permissions</h4>
<p>Pour filtrer les objets, on fait une simple intersection de liste
(<em>merci PostgreSQL</em>):</p>
-<div class="highlight"><pre><span></span><span class="k">SELECT</span> <span class="k">data</span>
- <span class="k">FROM</span> <span class="k">object</span> <span class="n">o</span><span class="p">,</span> <span class="k">user</span> <span class="n">u</span>
- <span class="k">WHERE</span> <span class="n">o</span><span class="p">.</span><span class="k">type</span> <span class="o">=</span> <span class="s1">'record'</span>
- <span class="k">AND</span> <span class="n">o</span><span class="p">.</span><span class="n">parent_id</span> <span class="o">=</span> <span class="s1">'/buckets/blog/collections/article'</span>
- <span class="k">AND</span> <span class="p">(</span><span class="n">o</span><span class="p">.</span><span class="n">read_principals</span> <span class="o">&&</span> <span class="n">u</span><span class="p">.</span><span class="n">principals</span> <span class="k">OR</span>
- <span class="n">o</span><span class="p">.</span><span class="n">write_principals</span> <span class="o">&&</span> <span class="n">u</span><span class="p">.</span><span class="n">principals</span><span class="p">)</span>
- <span class="k">AND</span> <span class="n">u</span><span class="p">.</span><span class="n">id</span> <span class="o">=</span> <span class="s1">'fxa:natim'</span><span class="p">;</span>
+<div class="highlight"><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="k">data</span><span class="w"></span>
+<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="n">o</span><span class="p">,</span><span class="w"> </span><span class="k">user</span><span class="w"> </span><span class="n">u</span><span class="w"></span>
+<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">o</span><span class="p">.</span><span class="k">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'record'</span><span class="w"></span>
+<span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">o</span><span class="p">.</span><span class="n">parent_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'/buckets/blog/collections/article'</span><span class="w"></span>
+<span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="p">(</span><span class="n">o</span><span class="p">.</span><span class="n">read_principals</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">u</span><span class="p">.</span><span class="n">principals</span><span class="w"> </span><span class="k">OR</span><span class="w"></span>
+<span class="w"> </span><span class="n">o</span><span class="p">.</span><span class="n">write_principals</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">u</span><span class="p">.</span><span class="n">principals</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">u</span><span class="p">.</span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'fxa:natim'</span><span class="p">;</span><span class="w"></span>
</pre></div>
<p>Les listes s’indexent bien, notamment grâce aux <a class="reference external" href="http://www.postgresql.org/docs/current/static/indexes-types.html">index <span class="caps">GIN</span></a>.</p>
</div>
@@ -635,7 +635,7 @@ une réponse satisfaisante à ces besoins.</p>
<div class="section" id="le-concept-de-principal">
<h3>Le concept de « principal »</h3>
<p>Un <em>principal</em>, en sécurité informatique, est une entité qui peut être
-authentifiée par un système informatique. <a class="footnote-reference" href="#id2" id="id1">[1]</a> En Français il s’agit
+authentifiée par un système informatique. <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a> En Français il s’agit
du « commettant », l’acteur qui commet l’action (oui, le terme est conceptuel !)</p>
<p>Il peut s’agir aussi bien d’un individu, d’un ordinateur, d’un
service ou d’un groupe regroupant l’une de ces entités, ce qui
@@ -644,10 +644,10 @@ est plus large que le classique « <em>user id</em> ».<
<p>Par exemple, un utilisateur est identifié de manière unique lors de la
connexion par le système d’authentification dont le rôle est de
définir une liste de <em>principals</em> pour l’utilisateur se connectant.</p>
-<table class="docutils footnote" frame="void" id="id2" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>Pour en savoir plus sur les <em>principals</em> :
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>Pour en savoir plus sur les <em>principals</em> :
<a class="reference external" href="https://en.wikipedia.org/wiki/Principal_%28computer_security%29">https://en.wikipedia.org/wiki/Principal_%28computer_security%29</a></td></tr>
</tbody>
</table>
@@ -656,17 +656,17 @@ définir une liste de <em>principals</em> pour l’utilisate
<h3>La différence entre rôle et groupe</h3>
<p>De but en blanc, il n’est pas évident de définir précisément la
différence entre ces deux concepts qui permettent d’associer
-des permissions à un groupe de <em>principals</em>. <a class="footnote-reference" href="#id4" id="id3">[2]</a></p>
+des permissions à un groupe de <em>principals</em>. <a class="footnote-reference" href="#footnote-2" id="footnote-reference-2">[2]</a></p>
<p>La différence est principalement sémantique. Mais on peut y voir une
différence dans la « direction » de la relation entre les deux concepts.</p>
<ul class="simple">
<li>Un rôle est une liste de permissions que l’on associe à un <em>principal</em>.</li>
<li>Un groupe est une liste de <em>principals</em> que l’on peut associer à une permission.</li>
</ul>
-<table class="docutils footnote" frame="void" id="id4" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id3">[2]</a></td><td>Plus d’informations :
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-2">[2]</a></td><td>Plus d’informations :
<a class="reference external" href="http://stackoverflow.com/questions/7770728/group-vs-role-any-real-difference">http://stackoverflow.com/questions/7770728/group-vs-role-any-real-difference</a></td></tr>
</tbody>
</table>
diff --git a/feeds/all.atom.xml b/feeds/all.atom.xml
index bbde523..5d4feab 100644
--- a/feeds/all.atom.xml
+++ b/feeds/all.atom.xml
@@ -1,5 +1,40 @@
-Alexis Métaireauhttps://blog.notmyidea.org/2021-11-11T00:00:00+01:00Conflit2021-11-11T00:00:00+01:002021-11-11T00:00:00+01:00tag:blog.notmyidea.org,2021-11-11:/conflit.html
+Alexis Métaireauhttps://blog.notmyidea.org/2022-05-06T00:00:00+02:00Fatigue relationnelle2022-05-06T00:00:00+02:002022-05-06T00:00:00+02:00tag:blog.notmyidea.org,2022-05-06:/fatigue-relationnelle.html
+<p>Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années.</p>
+<p>Je ne sais pas exactement d’où cela vient : si c’est un des nombreux effets …</p>
+<p>Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années.</p>
+<p>Je ne sais pas exactement d’où cela vient : si c’est un des nombreux effets psychologiques que le <span class="caps">COVID</span> à eu sur moi, si j’accorde trop de place aux collectifs dans ma vie (travail, habitation, ami⋅es), ou si simplement mes envies ne sont plus les mêmes qu’il y a quelques années, mais le résultat est bel et bien là.</p>
+<p>Malgré tout j’ai envie d’être disponible pour les personnes qui comptent pour moi, et je réfléchis donc à différentes solutions : déménager et habiter en solo, faire moins d’activités extérieures ou bien m’isoler plus souvent dans les espaces collectifs.</p>
+<p>Le fait de retourner potentiellement habiter en solo vient questionner mon rapport au collectif omniprésent dans ma vie, et qui jouit d’un statut particulier pour moi. Le collectif semble être quasiment un <em>objectif en soi</em>, et donc quelque-part partir de ces espaces collectifs serait une sorte d’échec.</p>
+<p>Entrouvrir cette possibilité me plaît parce-que ça me pousse à accepter mes limites et à mettre en balance ma qualité de relation aux autres avec mes valeurs collectivistes. Du collectif, oui, mais peut-être avec un mix différent ?</p>
+<p>Ça fait également écho à ma <a href="conflit.html">gestion du conflit</a>. Je me rends compte que j’ai besoin d’évoluer dans des collectifs qui partagent cette culture de la gestion du conflit (plutôt que de son évitement).</p>Accueil, transmission et confiance2022-05-01T00:00:00+02:002022-05-01T00:00:00+02:00tag:blog.notmyidea.org,2022-05-01:/accueil-transmission-et-confiance.html
+<p>Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons :</p>
+<ul>
+<li>Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des sujets de fond, pour progressivement changer l’équilibre dans mon métier ;</li>
+<li>J’ai désormais quelqu’une avec …</li></ul>
+<p>Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons :</p>
+<ul>
+<li>Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des sujets de fond, pour progressivement changer l’équilibre dans mon métier ;</li>
+<li>J’ai désormais quelqu’une avec qui échanger sur les problématiques techniques du métier de livreur / commercial ;</li>
+</ul>
+<p>Mais cela me fait aussi peur : cela va nécessairement bousculer l’équilibre — parfois fragile — en place entre les associés actuels. Même si je vois cette évolution d’un bon œil, les transitions sont parfois difficiles.</p>
+<p>Ça me donne donc envie de construire une relation de confiance, et de donner les moyens à cette nouvelle arrivante de s’y retrouver.</p>
+<h2 id="transmission">Transmission</h2>
+<p>Cela me pose donc de nouvelles questions, autour de l’accueil et de la transmission.</p>
+<p>Il me semble que l’enjeu est de laisser une liberté d’action progressive pour mettre la personne en confiance, puis de réussir à « lâcher le bébé ».</p>
+<p>Mais il s’agit aussi de réussir à juger si la communication est aisée, et de ne pas nécessairement partir du principe que tout sera génial. C’est une relation de travail, pas une amitié.</p>
+<p>De son côté également il doit y avoir des questionnements. Je mets une attention particulière à les accueillir : les questionnement sont bienvenus, voir même attendus.</p>
+<p>Le pire pour moi serait d’avoir quelqu’un qui à peur de ne pas savoir, et qui dit qu’elle sait plutôt que de laisser la place pour l’apprentissage.</p>
+<h2 id="faire-confiance">Faire confiance</h2>
+<p>Il me semble qu’il peut exister deux types de confiance :</p>
+<ol>
+<li>
+<p><em>Laisser la possibilité de se tromper</em> : il est possible de faire confiance à l’autre dans son apprentissage, pour qu’iel se sente légitime à faire <em>ses</em> choix, ceux qu’il⋅elle estimera les bons, et qui seront donc les bons — par définition ;</p>
+</li>
+<li>
+<p>La <em>confiance relationnelle</em>, de l’ordre des relations inter-personnelles, de la relation à l’autre. Parce que c’est aussi une rencontre, et que je cherche à créer des relations de travail où l’on peut se dire les choses sans se blesser, en confiance donc.</p>
+</li>
+</ol>Conflit2021-11-11T00:00:00+01:002021-11-11T00:00:00+01:00tag:blog.notmyidea.org,2021-11-11:/conflit.html
<p>J’ai pensé durant de nombreuses années que je savais gérer le conflit, alors que c’était en fait impensé.</p>
<p>Ne pas être en conflit signifie parfois s’adapter aux autres, parfois ne pas (assez) s’écouter, et ne pas se faire entendre. </p>
<p><strong>Alors que je pensais gérer le conflit …</strong></p>
@@ -2062,8 +2097,8 @@ obtenir le même résultat à partir de la même entrée.</p>
une collection <span class="caps">JSON</span>. Chaque élément contient un identifiant unique généré sur
le client.</p>
<p>Par exemple, un enregistrement peut ressembler à :</p>
-<div class="highlight"><pre><span></span><span class="p">{</span><span class="s2">"id"</span><span class="o">:</span> <span class="s2">"b7dded96-8df0-8af8-449a-8bc47f71b4c4"</span><span class="p">,</span>
- <span class="s2">"fingerprint"</span><span class="o">:</span> <span class="s2">"11:D5:D2:0A:9A:F8:D9:FC:23:6E:5C:5C:30:EC:AF:68:F5:68:FB:A3"</span><span class="p">}</span>
+<div class="highlight"><pre><span></span><span class="p">{</span><span class="s2">"id"</span><span class="o">:</span><span class="w"> </span><span class="s2">"b7dded96-8df0-8af8-449a-8bc47f71b4c4"</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s2">"fingerprint"</span><span class="o">:</span><span class="w"> </span><span class="s2">"11:D5:D2:0A:9A:F8:D9:FC:23:6E:5C:5C:30:EC:AF:68:F5:68:FB:A3"</span><span class="p">}</span><span class="w"></span>
</pre></div>
<p>Le <em>hash</em> de la collection est ensuite calculé, signé puis envoyé au serveur
(voir plus bas pour les détails).</p>
@@ -2511,7 +2546,7 @@ des tests souvent !</p>
</div>
<p>Speaker: serge_sans_paille.</p>
<p>Retour sur le passé des boucles: <span class="caps">ASM</span>, fortran, C. Avec <span class="caps">APL</span>, la boucle est
-cachée au fur et à mesure des évolutions. Écrire une boucle ne devrait pas etre …</p><div class="admonition note">
+cachée au fur et à mesure des évolutions. Écrire une boucle ne devrait …</p><div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Voici quelques notes prises durant la PyconFR 2015, à Pau. N’hésitez pas
à les completer si besoin.</p>
@@ -3233,7 +3268,7 @@ d’écriture sur une collection d’enregistrements.&l
<li><strong>La synchronisation</strong> : une série de leviers pour récupérer et renvoyer des
changements sur les données, sans perte ni collision, en utilisant les timestamps.</li>
<li><strong>Les permissions</strong> : les droits d’un utilisateur sur une collection ou un enregistrement
-(<em>encore frais et sur le point d’être documenté</em>) <a class="footnote-reference" href="#id3" id="id1">[1]</a>.</li>
+(<em>encore frais et sur le point d’être documenté</em>) <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a>.</li>
<li><strong>Opérations par lot</strong>: une <span class="caps">URL</span> qui permet d’envoyer une série de requêtes
décrites en <span class="caps">JSON</span> et d’obtenir les réponses respectives.</li>
</ul>
@@ -3255,17 +3290,17 @@ de <em>Firefox Sync</em> pour la gestion de la concurrence et de&
<p>Il est <a class="reference external" href="http://cliquet.readthedocs.org/en/latest/api/index.html">documenté en détail</a>.</p>
<p>Dans un monde idéal, ce protocole serait versionné, et formalisé dans une <span class="caps">RFC</span>.
En rêve, il existerait même plusieurs implémentations avec des technologies différentes
-(Python, Go, Node, etc.). <a class="footnote-reference" href="#id4" id="id2">[2]</a></p>
-<table class="docutils footnote" frame="void" id="id3" rules="none">
+(Python, Go, Node, etc.). <a class="footnote-reference" href="#footnote-2" id="footnote-reference-2">[2]</a></p>
+<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>Voir notre <a class="reference external" href="https://blog.notmyidea.org/service-de-nuages-la-gestion-des-permissions-fr.html">article dédié sur les permissions</a></td></tr>
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>Voir notre <a class="reference external" href="https://blog.notmyidea.org/service-de-nuages-la-gestion-des-permissions-fr.html">article dédié sur les permissions</a></td></tr>
</tbody>
</table>
-<table class="docutils footnote" frame="void" id="id4" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td>Rappel: nous sommes une toute petite équipe !</td></tr>
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-2">[2]</a></td><td>Rappel: nous sommes une toute petite équipe !</td></tr>
</tbody>
</table>
</div>
@@ -3273,7 +3308,7 @@ En rêve, il existerait même plusieurs implémentations avec des technologies d
<h2>Le toolkit</h2>
<div class="section" id="choix-techniques">
<h3>Choix techniques</h3>
-<p><em>Cliquet</em> implémente le protocole en Python (<em>2.7, 3.4+, pypy</em>), avec <a class="reference external" href="http://trypyramid.com/">Pyramid</a> <a class="footnote-reference" href="#id6" id="id5">[3]</a>.</p>
+<p><em>Cliquet</em> implémente le protocole en Python (<em>2.7, 3.4+, pypy</em>), avec <a class="reference external" href="http://trypyramid.com/">Pyramid</a> <a class="footnote-reference" href="#footnote-3" id="footnote-reference-3">[3]</a>.</p>
<p><strong>Pyramid</strong> est un framework Web qui va prendre en charge tout la partie <span class="caps">HTTP</span>,
et qui s’avère pertinent aussi bien pour des petits projets que des plus ambitieux.</p>
<p><strong>Cornice</strong> est une extension de <em>Pyramid</em>, écrite en partie par Alexis et Tarek,
@@ -3286,10 +3321,10 @@ rigoureux, gérer les entêtes <span class="caps">CORS</span>, fourn
<p><strong>Cliquet</strong> utilise les deux précédents pour implémenter le protocole et fournir
des abstractions, mais on a toujours <em>Pyramid</em> et <em>Cornice</em> sous la main pour
aller au delà de ce qui est proposé !</p>
-<table class="docutils footnote" frame="void" id="id6" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-3" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id5">[3]</a></td><td>Au tout début nous avons commencé une implémentation avec <em>Python-Eve</em>
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-3">[3]</a></td><td>Au tout début nous avons commencé une implémentation avec <em>Python-Eve</em>
(Flask), mais n’étions pas satisfaits de l’approche pour la configuration
de l’<span class="caps">API</span>. En particulier du côté magique.</td></tr>
</tbody>
@@ -3381,18 +3416,18 @@ avec <em>Colander</em>, et ensuite déclarer une resource:&
<p>Désormais, la resource <span class="caps">CRUD</span> est disponible sur <tt class="docutils literal">/v1/bookmarks</tt>, avec toutes
les fonctionnalités de synchronisation, filtrage, tri, pagination, timestamp, etc.
De base les enregistrements sont privés, par utilisateur.</p>
-<div class="highlight"><pre><span></span><span class="err">$</span> <span class="err">h</span><span class="kc">tt</span><span class="err">p</span> <span class="err">GET</span> <span class="s2">"http://localhost:8000/v1/bookmarks"</span>
-<span class="err">HTTP/</span><span class="mf">1.1</span> <span class="mi">200</span> <span class="err">OK</span>
-<span class="err">...</span>
-<span class="p">{</span>
- <span class="nt">"data"</span><span class="p">:</span> <span class="p">[</span>
- <span class="p">{</span>
- <span class="nt">"url"</span><span class="p">:</span> <span class="s2">"http://cliquet.readthedocs.org"</span><span class="p">,</span>
- <span class="nt">"id"</span><span class="p">:</span> <span class="s2">"cc103eb5-0c80-40ec-b6f5-dad12e7d975e"</span><span class="p">,</span>
- <span class="nt">"last_modified"</span><span class="p">:</span> <span class="mi">1437034418940</span><span class="p">,</span>
- <span class="p">}</span>
- <span class="p">]</span>
-<span class="p">}</span>
+<div class="highlight"><pre><span></span><span class="err">$</span><span class="w"> </span><span class="err">h</span><span class="kc">tt</span><span class="err">p</span><span class="w"> </span><span class="err">GET</span><span class="w"> </span><span class="s2">"http://localhost:8000/v1/bookmarks"</span><span class="w"></span>
+<span class="err">HTTP/</span><span class="mf">1.1</span><span class="w"> </span><span class="mi">200</span><span class="w"> </span><span class="err">OK</span><span class="w"></span>
+<span class="err">...</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="nt">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"></span>
+<span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="nt">"url"</span><span class="p">:</span><span class="w"> </span><span class="s2">"http://cliquet.readthedocs.org"</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"cc103eb5-0c80-40ec-b6f5-dad12e7d975e"</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="nt">"last_modified"</span><span class="p">:</span><span class="w"> </span><span class="mi">1437034418940</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
+<span class="w"> </span><span class="p">]</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
</pre></div>
</div>
<div class="section" id="etape-3">
@@ -3683,7 +3718,7 @@ concept repose sur <a class="reference external" href="https://fr.wikipedia.o
<a class="reference external" href="https://tools.ietf.org/html/draft-dejong-remotestorage-05">*Remote Storage*</a>,
mais pour l’instant les cas d’utilisations ne se sont pas encore présentés officiellement.</p>
</div>
-<div class="section" id="id2">
+<div class="section" id="a-venir-1">
<h3>À venir</h3>
<p>Nous serons probablement amenés à introduire la gestion de la concurrence dans
le client <span class="caps">JS</span>, en complément de ce qui a été fait sur le serveur, pour permettre
@@ -3698,17 +3733,17 @@ que <a class="reference external" href="https://github.com/mozilla-services/k
<h2>Contenus applicatifs de Firefox</h2>
<p>Aujourd’hui Firefox a un cycle de release de six semaines. Un des objectifs
consiste à désolidariser certains contenus applicatifs de ces cycles
-relativement longs (ex. <em>règles de securité, dictionnaires, traductions, …</em>) <a class="footnote-reference" href="#id4" id="id3">[1]</a>.</p>
+relativement longs (ex. <em>règles de securité, dictionnaires, traductions, …</em>) <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a>.</p>
<p>Il s’agit de données <span class="caps">JSON</span> et binaire qui doivent être versionnées et synchronisées par
les navigateurs (<em>lecture seule</em>).</p>
<p>Il y a plusieurs outils officiels qui existent pour gérer ça (<em>Balrog</em>, <em>Shavar</em>, …),
et pour l’instant, aucun choix n’a été fait. Mais lors des conversations avec
l’équipe en charge du projet, ce fût vraiment motivant de voir que même pour
ce genre de besoins internes, <em>Kinto</em> est tout aussi pertinent !</p>
-<table class="docutils footnote" frame="void" id="id4" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id3">[1]</a></td><td>La bonne nouvelle c’est que toutes les fonctionnalités <em>third-party</em> qui ont
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>La bonne nouvelle c’est que toutes les fonctionnalités <em>third-party</em> qui ont
été intégrées récemment vont redevenir des <em>add-ons</em> \o/.</td></tr>
</tbody>
</table>
@@ -3722,7 +3757,7 @@ un prototype pour améliorer <em>Awesome bar</em>, qui fusionnerait
<p>Nous ne pouvons pas en dire beaucoup plus pour l’instant, mais les fonctionnalités
de collections d’enregistrements partagées entre utilisateurs de <em>Kinto</em>
correspondent parfaitement à ce qui est envisagé pour le futur du navigateur :)</p>
-<div class="section" id="id5">
+<div class="section" id="a-venir-2">
<h3>À venir</h3>
<p>Nous serons donc probablement amenés, avant de la fin de l’année, à introduire des
fonctionnalités d’indexation et de recherche <em>full-text</em> (comprendre <em>ElasticSearch</em>).
@@ -3744,7 +3779,7 @@ ou un équivalent à <em>Alexa.com Top 500</em> pour fournir la comp
interroger le moteur de recherche.</p>
<p>L’exercice pourrait être poussé jusqu’à la synchronisation d’états <em>React</em>
entre périphériques (par exemple pour les onglets).</p>
-<div class="section" id="id7">
+<div class="section" id="a-venir-3">
<h3>À venir</h3>
<p>Si <em>browser.html</em> doit stocker des données de navigation, il faudra ajouter
des fonctionnalités de chiffrement sur le client <span class="caps">JS</span>. Ça tombe bien, c’est un
@@ -3905,7 +3940,7 @@ du sens.</p>
et Kinto 1.0 !</p>
<p><em>Cet article est repris depuis le blog « Service de Nuages » de mon équipe à Mozilla</em></p>
<p>Aujourd’hui, c’est jour de fête : nous venons de publier Cliquet <strong>2.0</strong>
-<a class="footnote-reference" href="#id5" id="id1">[1]</a> et Kinto <strong>1.0</strong> <a class="footnote-reference" href="#id6" id="id2">[2]</a>.</p>
+<a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a> et Kinto <strong>1.0</strong> <a class="footnote-reference" href="#footnote-2" id="footnote-reference-2">[2]</a>.</p>
<blockquote class="epigraph">
<p>L’aboutissement de 3 années de R&D !</p>
<p class="attribution">—Rémy</p>
@@ -3926,7 +3961,7 @@ fonctionnalités que l’on attendait depuis longtemps, comme la gestion
s’empêcher de voir toutes les choses qui doivent toujours être améliorées,
notamment sur la documentation et les performances.</p>
<p>On peut déjà entrevoir à quoi l’écosystème va ressembler, et c’est prometteur.
-Il y a déjà un client JavaScript <a class="footnote-reference" href="#id7" id="id3">[3]</a> dont l’objectif est de synchroniser les
+Il y a déjà un client JavaScript <a class="footnote-reference" href="#footnote-3" id="footnote-reference-3">[3]</a> dont l’objectif est de synchroniser les
données locales du navigateur avec une instance de Kinto.</p>
<p>N’hésitez vraiment pas à nous solliciter pour discuter avec vous si vous avez
des problématiques proches : nous accueillons avec plaisir toutes sortes de
@@ -3935,34 +3970,34 @@ la solution ou de la manière de communiquer avec le monde extérieur. Si vous
souhaitez nous contacter, vous pouvez laisser un commentaire ici ou nous
contacter sur le canal <a class="reference external" href="irc://irc.mozilla.org/#storage">#storage</a> sur le réseau <span class="caps">IRC</span> de Mozilla.</p>
<p>Et ce n’est que le début ! Le futur se dessine dans notre feuille de route
-<a class="footnote-reference" href="#id8" id="id4">[4]</a>.</p>
-<table class="docutils footnote" frame="void" id="id5" rules="none">
+<a class="footnote-reference" href="#footnote-4" id="footnote-reference-4">[4]</a>.</p>
+<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td><strong>Cliquet</strong> est une boite à outils pour faciliter l’implémentation de
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td><strong>Cliquet</strong> est une boite à outils pour faciliter l’implémentation de
microservices <span class="caps">HTTP</span> tels que les APIs <em><span class="caps">REST</span></em> ayant des besoins de
synchronisation.</td></tr>
</tbody>
</table>
-<table class="docutils footnote" frame="void" id="id6" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td><strong>Kinto</strong> est un service pour stocker, synchroniser et partager des données
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-2">[2]</a></td><td><strong>Kinto</strong> est un service pour stocker, synchroniser et partager des données
arbitraires, attachées à un compte Firefox (mais le système d’authentification
est <em>pluggable</em>).</td></tr>
</tbody>
</table>
-<table class="docutils footnote" frame="void" id="id7" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-3" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id3">[3]</a></td><td>Cliquetis, la bibliothèque JavaScript pour consommer l’<span class="caps">API</span> <span class="caps">HTTP</span> de Kinto —
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-3">[3]</a></td><td>Cliquetis, la bibliothèque JavaScript pour consommer l’<span class="caps">API</span> <span class="caps">HTTP</span> de Kinto —
<a class="reference external" href="https://github.com/mozilla-services/cliquetis">https://github.com/mozilla-services/cliquetis</a></td></tr>
</tbody>
</table>
-<table class="docutils footnote" frame="void" id="id8" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-4" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id4">[4]</a></td><td>La feuille de route de Kinto: <a class="reference external" href="https://github.com/mozilla-services/kinto/wiki/roadmap">https://github.com/mozilla-services/kinto/wiki/roadmap</a></td></tr>
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-4">[4]</a></td><td>La feuille de route de Kinto: <a class="reference external" href="https://github.com/mozilla-services/kinto/wiki/roadmap">https://github.com/mozilla-services/kinto/wiki/roadmap</a></td></tr>
</tbody>
</table>
Service de nuages : Stocker et interroger les permissions avec Kinto2015-05-26T00:00:00+02:002015-05-26T00:00:00+02:00tag:blog.notmyidea.org,2015-05-26:/service-de-nuages-stocker-et-interroger-les-permissions-avec-kinto-fr.html<p class="first last">Comment faire pour stocker et interroger la base de données au sujet des permissions avec Kinto ?</p>
@@ -4078,13 +4113,13 @@ avantages (lisibilité, unicité, cohérence avec les URLs)</p>
<div class="section" id="les-tables">
<h3>Les tables</h3>
<p>Pour le stockage des principals et des permissions:</p>
-<div class="highlight"><pre><span></span><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="k">user</span><span class="p">(</span><span class="n">id</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="n">principals</span> <span class="nb">TEXT</span><span class="p">[]);</span>
-<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">perms</span><span class="p">(</span><span class="n">ace</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="n">principals</span> <span class="nb">TEXT</span><span class="p">[]);</span>
+<div class="highlight"><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="k">user</span><span class="p">(</span><span class="n">id</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="n">principals</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">[]);</span><span class="w"></span>
+<span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">perms</span><span class="p">(</span><span class="n">ace</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="n">principals</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">[]);</span><span class="w"></span>
</pre></div>
<p>La table <em>perms</em> va associer des <em>principals</em> à chaque <em><span class="caps">ACE</span></em> (e.g.“/buckets/blog:write“).</p>
<p>Pour le stockage des données:</p>
-<div class="highlight"><pre><span></span><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="k">object</span><span class="p">(</span><span class="n">id</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="k">type</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="n">parent_id</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="k">data</span> <span class="n">JSONB</span><span class="p">,</span>
- <span class="n">write_principals</span> <span class="nb">TEXT</span><span class="p">[],</span> <span class="n">read_principals</span> <span class="nb">TEXT</span><span class="p">[]);</span>
+<div class="highlight"><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="k">object</span><span class="p">(</span><span class="n">id</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="w"> </span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">write_principals</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">[],</span><span class="w"> </span><span class="n">read_principals</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">[]);</span><span class="w"></span>
</pre></div>
<p>La colonne <em>parent_id</em> permet de savoir à qui appartient l’objet
(e.g. groupe d’un <em>bucket</em>, collection d’un <em>bucket</em>, <em>record</em> d’une
@@ -4092,53 +4127,53 @@ collection, …).</p>
</div>
<div class="section" id="exemple-d-utilisateur">
<h3>Exemple d’utilisateur</h3>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">user</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="n">principals</span><span class="p">)</span>
- <span class="k">VALUES</span> <span class="p">(</span><span class="s1">'fxa:alexis'</span><span class="p">,</span> <span class="s1">'{}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">user</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">principals</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'fxa:alexis'</span><span class="p">,</span><span class="w"> </span><span class="s1">'{}'</span><span class="p">);</span><span class="w"></span>
-<span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">user</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="n">principals</span><span class="p">)</span>
- <span class="k">VALUES</span> <span class="p">(</span><span class="s1">'fxa:natim'</span><span class="p">,</span>
- <span class="s1">'{"/buckets/blog/groups/moderators"}'</span><span class="p">);</span>
+<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">user</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">principals</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'fxa:natim'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"/buckets/blog/groups/moderators"}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
</div>
<div class="section" id="exemple-d-objets">
<h3>Exemple d’objets</h3>
<div class="section" id="bucket">
<h4>Bucket</h4>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">object</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="k">type</span><span class="p">,</span> <span class="n">parent_id</span><span class="p">,</span> <span class="k">data</span><span class="p">,</span>
- <span class="n">read_principals</span><span class="p">,</span> <span class="n">write_principals</span><span class="p">)</span>
-<span class="k">VALUES</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog'</span><span class="p">,</span>
- <span class="s1">'bucket'</span><span class="p">,</span>
- <span class="k">NULL</span><span class="p">,</span>
- <span class="s1">'{"name": "blog"}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span>
- <span class="s1">'{}'</span><span class="p">,</span> <span class="s1">'{"fxa:alexis"}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">read_principals</span><span class="p">,</span><span class="w"> </span><span class="n">write_principals</span><span class="p">)</span><span class="w"></span>
+<span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'bucket'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="k">NULL</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"name": "blog"}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{}'</span><span class="p">,</span><span class="w"> </span><span class="s1">'{"fxa:alexis"}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
</div>
<div class="section" id="group">
<h4>Group</h4>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">object</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="k">type</span><span class="p">,</span> <span class="n">parent_id</span><span class="p">,</span> <span class="k">data</span><span class="p">,</span>
- <span class="n">read_principals</span><span class="p">,</span> <span class="n">write_principals</span><span class="p">)</span>
-<span class="k">VALUES</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog/groups/moderators'</span><span class="p">,</span>
- <span class="s1">'group'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog'</span><span class="p">,</span>
- <span class="s1">'{"name": "moderators", "members": ['</span><span class="n">fxa</span><span class="p">:</span><span class="n">natim</span><span class="s1">']}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span>
- <span class="s1">'{}'</span><span class="p">,</span> <span class="s1">'{}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">read_principals</span><span class="p">,</span><span class="w"> </span><span class="n">write_principals</span><span class="p">)</span><span class="w"></span>
+<span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/groups/moderators'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'group'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"name": "moderators", "members": ['</span><span class="n">fxa</span><span class="p">:</span><span class="n">natim</span><span class="s1">']}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{}'</span><span class="p">,</span><span class="w"> </span><span class="s1">'{}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
<p>Ce groupe peut être gére par <tt class="docutils literal">fxa:alexis</tt> puisqu’il a la permission
<tt class="docutils literal">write</tt> dans le <em>bucket</em> parent.</p>
</div>
<div class="section" id="collection">
<h4>Collection</h4>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">object</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="k">type</span><span class="p">,</span> <span class="n">parent_id</span><span class="p">,</span> <span class="k">data</span><span class="p">,</span>
- <span class="n">read_principals</span><span class="p">,</span> <span class="n">write_principals</span><span class="p">)</span>
-<span class="k">VALUES</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog/collections/articles'</span><span class="p">,</span>
- <span class="s1">'collection'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog'</span><span class="p">,</span>
- <span class="s1">'{"name": "article"}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span>
- <span class="s1">'{"system.Everyone"}'</span><span class="p">,</span>
- <span class="s1">'{"/buckets/blog/groups/moderators"}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">read_principals</span><span class="p">,</span><span class="w"> </span><span class="n">write_principals</span><span class="p">)</span><span class="w"></span>
+<span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/articles'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'collection'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"name": "article"}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"system.Everyone"}'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"/buckets/blog/groups/moderators"}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
<p>Cette collection d’articles peut être lue par tout le monde,
et gérée par les membres du groupe <tt class="docutils literal">moderators</tt>, ainsi que
@@ -4146,56 +4181,56 @@ et gérée par les membres du groupe <tt class="docutils literal">moderato
</div>
<div class="section" id="records">
<h4>Records</h4>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">object</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="k">type</span><span class="p">,</span> <span class="n">parent_id</span><span class="p">,</span> <span class="k">data</span><span class="p">,</span>
- <span class="n">read_principals</span><span class="p">,</span> <span class="n">write_principals</span><span class="p">)</span>
-<span class="k">VALUES</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog/collections/articles/records/02f3f76f-7059-4ae4-888f-2ac9824e9200'</span><span class="p">,</span>
- <span class="s1">'record'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog/collections/articles'</span><span class="p">,</span>
- <span class="s1">'{"name": "02f3f76f-7059-4ae4-888f-2ac9824e9200",</span>
-<span class="s1"> "title": "Stocker les permissions", ...}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span>
- <span class="s1">'{}'</span><span class="p">,</span> <span class="s1">'{}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">read_principals</span><span class="p">,</span><span class="w"> </span><span class="n">write_principals</span><span class="p">)</span><span class="w"></span>
+<span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/articles/records/02f3f76f-7059-4ae4-888f-2ac9824e9200'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'record'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/articles'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"name": "02f3f76f-7059-4ae4-888f-2ac9824e9200",</span>
+<span class="s1"> "title": "Stocker les permissions", ...}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{}'</span><span class="p">,</span><span class="w"> </span><span class="s1">'{}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
</div>
</div>
<div class="section" id="interroger-les-permissions">
<h3>Interroger les permissions</h3>
-<div class="section" id="id1">
+<div class="section" id="obtenir-la-liste-des-principals-d-un-ace-1">
<h4>Obtenir la liste des “principals” d’un <span class="caps">ACE</span></h4>
<p>Comme vu plus haut, pour vérifier une permission, on fait l’union des
<em>principals</em> requis par les objets hérités, et on teste leur
intersection avec ceux de l’utilisateur:</p>
-<div class="highlight"><pre><span></span><span class="k">WITH</span> <span class="n">required_principals</span> <span class="k">AS</span> <span class="p">(</span>
- <span class="k">SELECT</span> <span class="k">unnest</span><span class="p">(</span><span class="n">principals</span><span class="p">)</span> <span class="k">AS</span> <span class="n">p</span>
- <span class="k">FROM</span> <span class="n">perms</span>
- <span class="k">WHERE</span> <span class="n">ace</span> <span class="k">IN</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog:write'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog:read'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog/collections/article:write'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog/collections/article:read'</span><span class="p">)</span>
- <span class="p">),</span>
- <span class="n">user_principals</span> <span class="k">AS</span> <span class="p">(</span>
- <span class="k">SELECT</span> <span class="k">unnest</span><span class="p">(</span><span class="n">principals</span><span class="p">)</span>
- <span class="k">FROM</span> <span class="k">user</span>
- <span class="k">WHERE</span> <span class="n">id</span> <span class="o">=</span> <span class="s1">'fxa:natim'</span>
- <span class="p">)</span>
- <span class="k">SELECT</span> <span class="k">COUNT</span><span class="p">(</span><span class="o">*</span><span class="p">)</span>
- <span class="k">FROM</span> <span class="n">user_principals</span> <span class="n">a</span>
- <span class="k">INNER</span> <span class="k">JOIN</span> <span class="n">required_principals</span> <span class="n">b</span>
- <span class="k">ON</span> <span class="n">a</span><span class="p">.</span><span class="n">p</span> <span class="o">=</span> <span class="n">b</span><span class="p">.</span><span class="n">p</span><span class="p">;</span>
+<div class="highlight"><pre><span></span><span class="k">WITH</span><span class="w"> </span><span class="n">required_principals</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">unnest</span><span class="p">(</span><span class="n">principals</span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">p</span><span class="w"></span>
+<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">perms</span><span class="w"></span>
+<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">ace</span><span class="w"> </span><span class="k">IN</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog:write'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog:read'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/article:write'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/article:read'</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="p">),</span><span class="w"></span>
+<span class="w"> </span><span class="n">user_principals</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">unnest</span><span class="p">(</span><span class="n">principals</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="k">user</span><span class="w"></span>
+<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'fxa:natim'</span><span class="w"></span>
+<span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">COUNT</span><span class="p">(</span><span class="o">*</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">user_principals</span><span class="w"> </span><span class="n">a</span><span class="w"></span>
+<span class="w"> </span><span class="k">INNER</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">required_principals</span><span class="w"> </span><span class="n">b</span><span class="w"></span>
+<span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">a</span><span class="p">.</span><span class="n">p</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">b</span><span class="p">.</span><span class="n">p</span><span class="p">;</span><span class="w"></span>
</pre></div>
</div>
<div class="section" id="filtrer-les-objets-en-fonction-des-permissions">
<h4>Filtrer les objets en fonction des permissions</h4>
<p>Pour filtrer les objets, on fait une simple intersection de liste
(<em>merci PostgreSQL</em>):</p>
-<div class="highlight"><pre><span></span><span class="k">SELECT</span> <span class="k">data</span>
- <span class="k">FROM</span> <span class="k">object</span> <span class="n">o</span><span class="p">,</span> <span class="k">user</span> <span class="n">u</span>
- <span class="k">WHERE</span> <span class="n">o</span><span class="p">.</span><span class="k">type</span> <span class="o">=</span> <span class="s1">'record'</span>
- <span class="k">AND</span> <span class="n">o</span><span class="p">.</span><span class="n">parent_id</span> <span class="o">=</span> <span class="s1">'/buckets/blog/collections/article'</span>
- <span class="k">AND</span> <span class="p">(</span><span class="n">o</span><span class="p">.</span><span class="n">read_principals</span> <span class="o">&&</span> <span class="n">u</span><span class="p">.</span><span class="n">principals</span> <span class="k">OR</span>
- <span class="n">o</span><span class="p">.</span><span class="n">write_principals</span> <span class="o">&&</span> <span class="n">u</span><span class="p">.</span><span class="n">principals</span><span class="p">)</span>
- <span class="k">AND</span> <span class="n">u</span><span class="p">.</span><span class="n">id</span> <span class="o">=</span> <span class="s1">'fxa:natim'</span><span class="p">;</span>
+<div class="highlight"><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="k">data</span><span class="w"></span>
+<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="n">o</span><span class="p">,</span><span class="w"> </span><span class="k">user</span><span class="w"> </span><span class="n">u</span><span class="w"></span>
+<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">o</span><span class="p">.</span><span class="k">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'record'</span><span class="w"></span>
+<span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">o</span><span class="p">.</span><span class="n">parent_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'/buckets/blog/collections/article'</span><span class="w"></span>
+<span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="p">(</span><span class="n">o</span><span class="p">.</span><span class="n">read_principals</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">u</span><span class="p">.</span><span class="n">principals</span><span class="w"> </span><span class="k">OR</span><span class="w"></span>
+<span class="w"> </span><span class="n">o</span><span class="p">.</span><span class="n">write_principals</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">u</span><span class="p">.</span><span class="n">principals</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">u</span><span class="p">.</span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'fxa:natim'</span><span class="p">;</span><span class="w"></span>
</pre></div>
<p>Les listes s’indexent bien, notamment grâce aux <a class="reference external" href="http://www.postgresql.org/docs/current/static/indexes-types.html">index <span class="caps">GIN</span></a>.</p>
</div>
@@ -4641,7 +4676,7 @@ une réponse satisfaisante à ces besoins.</p>
<div class="section" id="le-concept-de-principal">
<h3>Le concept de « principal »</h3>
<p>Un <em>principal</em>, en sécurité informatique, est une entité qui peut être
-authentifiée par un système informatique. <a class="footnote-reference" href="#id2" id="id1">[1]</a> En Français il s’agit
+authentifiée par un système informatique. <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a> En Français il s’agit
du « commettant », l’acteur qui commet l’action (oui, le terme est conceptuel !)</p>
<p>Il peut s’agir aussi bien d’un individu, d’un ordinateur, d’un
service ou d’un groupe regroupant l’une de ces entités, ce qui
@@ -4650,10 +4685,10 @@ est plus large que le classique « <em>user id</em> ».<
<p>Par exemple, un utilisateur est identifié de manière unique lors de la
connexion par le système d’authentification dont le rôle est de
définir une liste de <em>principals</em> pour l’utilisateur se connectant.</p>
-<table class="docutils footnote" frame="void" id="id2" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>Pour en savoir plus sur les <em>principals</em> :
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>Pour en savoir plus sur les <em>principals</em> :
<a class="reference external" href="https://en.wikipedia.org/wiki/Principal_%28computer_security%29">https://en.wikipedia.org/wiki/Principal_%28computer_security%29</a></td></tr>
</tbody>
</table>
@@ -4662,17 +4697,17 @@ définir une liste de <em>principals</em> pour l’utilisate
<h3>La différence entre rôle et groupe</h3>
<p>De but en blanc, il n’est pas évident de définir précisément la
différence entre ces deux concepts qui permettent d’associer
-des permissions à un groupe de <em>principals</em>. <a class="footnote-reference" href="#id4" id="id3">[2]</a></p>
+des permissions à un groupe de <em>principals</em>. <a class="footnote-reference" href="#footnote-2" id="footnote-reference-2">[2]</a></p>
<p>La différence est principalement sémantique. Mais on peut y voir une
différence dans la « direction » de la relation entre les deux concepts.</p>
<ul class="simple">
<li>Un rôle est une liste de permissions que l’on associe à un <em>principal</em>.</li>
<li>Un groupe est une liste de <em>principals</em> que l’on peut associer à une permission.</li>
</ul>
-<table class="docutils footnote" frame="void" id="id4" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id3">[2]</a></td><td>Plus d’informations :
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-2">[2]</a></td><td>Plus d’informations :
<a class="reference external" href="http://stackoverflow.com/questions/7770728/group-vs-role-any-real-difference">http://stackoverflow.com/questions/7770728/group-vs-role-any-real-difference</a></td></tr>
</tbody>
</table>
@@ -5319,16 +5354,16 @@ terme, et que <em>Remote Storage</em> devienne une facette de notre&
<p><a href="http://pouchdb.com/">PouchDB</a> est une bibliothèque JavaScript qui
permet de manipuler des enregistrements en local et de les synchroniser
vers une base distante.</p>
-<div class="highlight"><pre><span></span><code><span class="n">javascript</span>
-<span class="k">var</span> <span class="n">db</span> <span class="o">=</span> <span class="n">new</span> <span class="n">PouchDB</span><span class="p">(</span><span class="s1">'dbname'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><code><span class="n">javascript</span><span class="w"></span>
+<span class="k">var</span><span class="w"> </span><span class="n">db</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">PouchDB</span><span class="p">(</span><span class="s1">'dbname'</span><span class="p">);</span><span class="w"></span>
-<span class="n">db</span><span class="o">.</span><span class="n">put</span><span class="p">({</span>
- <span class="n">_id</span><span class="p">:</span> <span class="s1">'dave@gmail.com'</span><span class="p">,</span>
- <span class="n">name</span><span class="p">:</span> <span class="s1">'David'</span><span class="p">,</span>
- <span class="n">age</span><span class="p">:</span> <span class="mi">68</span>
-<span class="p">});</span>
+<span class="n">db</span><span class="o">.</span><span class="n">put</span><span class="p">({</span><span class="w"></span>
+<span class="w"> </span><span class="n">_id</span><span class="p">:</span><span class="w"> </span><span class="s1">'dave@gmail.com'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="s1">'David'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">age</span><span class="p">:</span><span class="w"> </span><span class="mi">68</span><span class="w"></span>
+<span class="p">});</span><span class="w"></span>
-<span class="n">db</span><span class="o">.</span><span class="n">replicate</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="s1">'http://example.com/mydb'</span><span class="p">);</span>
+<span class="n">db</span><span class="o">.</span><span class="n">replicate</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="s1">'http://example.com/mydb'</span><span class="p">);</span><span class="w"></span>
</code></pre></div>
<p>Le projet a le vent en poupe, bénéficie de nombreux contributeurs,
@@ -5795,33 +5830,33 @@ on the server (so you don’t need to store anything).</p>
finally came up factorizing everything in a library for express, named
<a href="https://github.com/mozilla-services/express-hawkauth">express-hawkauth</a>.</p>
<p>In order to plug it in your application, you’ll need to use it as a middleware:</p>
-<div class="highlight"><pre><span></span><code><span class="n">javascript</span>
-<span class="k">var</span> <span class="n">express</span> <span class="o">=</span> <span class="n">require</span><span class="p">(</span><span class="s2">"express"</span><span class="p">);</span>
-<span class="k">var</span> <span class="n">hawk</span> <span class="o">=</span> <span class="n">require</span><span class="p">(</span><span class="s2">"express-hawkauth"</span><span class="p">);</span>
-<span class="n">app</span> <span class="o">=</span> <span class="n">express</span><span class="p">();</span>
+<div class="highlight"><pre><span></span><code><span class="n">javascript</span><span class="w"></span>
+<span class="k">var</span><span class="w"> </span><span class="n">express</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">require</span><span class="p">(</span><span class="s2">"express"</span><span class="p">);</span><span class="w"></span>
+<span class="k">var</span><span class="w"> </span><span class="n">hawk</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">require</span><span class="p">(</span><span class="s2">"express-hawkauth"</span><span class="p">);</span><span class="w"></span>
+<span class="n">app</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">express</span><span class="p">();</span><span class="w"></span>
-<span class="k">var</span> <span class="n">hawkMiddleware</span> <span class="o">=</span> <span class="n">hawk</span><span class="o">.</span><span class="n">getMiddleware</span><span class="p">({</span>
- <span class="n">hawkOptions</span><span class="p">:</span> <span class="p">{},</span>
- <span class="n">getSession</span><span class="p">:</span> <span class="n">function</span><span class="p">(</span><span class="n">tokenId</span><span class="p">,</span> <span class="n">cb</span><span class="p">)</span> <span class="p">{</span>
- <span class="o">//</span> <span class="n">A</span> <span class="n">function</span> <span class="n">which</span> <span class="k">pass</span> <span class="n">to</span> <span class="n">the</span> <span class="n">cb</span> <span class="n">the</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">algorithm</span> <span class="k">for</span> <span class="n">the</span>
- <span class="o">//</span> <span class="n">given</span> <span class="n">token</span> <span class="n">id</span><span class="o">.</span> <span class="n">First</span> <span class="n">argument</span> <span class="n">of</span> <span class="n">the</span> <span class="n">callback</span> <span class="k">is</span> <span class="n">a</span> <span class="n">potential</span>
- <span class="o">//</span> <span class="n">error</span><span class="o">.</span>
- <span class="n">cb</span><span class="p">(</span><span class="nb nb-Type">null</span><span class="p">,</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="s2">"key"</span><span class="p">,</span> <span class="n">algorithm</span><span class="p">:</span> <span class="s2">"sha256"</span><span class="p">});</span>
- <span class="p">},</span>
- <span class="n">createSession</span><span class="p">:</span> <span class="n">function</span><span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">cb</span><span class="p">)</span> <span class="p">{</span>
- <span class="o">//</span> <span class="n">A</span> <span class="n">function</span> <span class="n">which</span> <span class="n">stores</span> <span class="n">a</span> <span class="n">session</span> <span class="k">for</span> <span class="n">the</span> <span class="n">given</span> <span class="n">id</span> <span class="ow">and</span> <span class="n">key</span><span class="o">.</span>
- <span class="o">//</span> <span class="n">Argument</span> <span class="n">returned</span> <span class="k">is</span> <span class="n">a</span> <span class="n">potential</span> <span class="n">error</span><span class="o">.</span>
- <span class="n">cb</span><span class="p">(</span><span class="nb nb-Type">null</span><span class="p">);</span>
- <span class="p">},</span>
- <span class="n">setUser</span><span class="p">:</span> <span class="n">function</span><span class="p">(</span><span class="n">req</span><span class="p">,</span> <span class="n">res</span><span class="p">,</span> <span class="n">tokenId</span><span class="p">,</span> <span class="n">cb</span><span class="p">)</span> <span class="p">{</span>
- <span class="o">//</span> <span class="n">A</span> <span class="n">function</span> <span class="n">that</span> <span class="n">uses</span> <span class="n">req</span> <span class="ow">and</span> <span class="n">res</span><span class="p">,</span> <span class="n">the</span> <span class="n">hawkId</span> <span class="n">when</span> <span class="n">they</span><span class="s1">'re known so</span>
- <span class="o">//</span> <span class="n">that</span> <span class="n">it</span> <span class="n">can</span> <span class="n">tweak</span> <span class="n">it</span><span class="o">.</span> <span class="n">For</span> <span class="n">instance</span><span class="p">,</span> <span class="n">you</span> <span class="n">can</span> <span class="n">store</span> <span class="n">the</span> <span class="n">tokenId</span> <span class="k">as</span> <span class="n">the</span>
- <span class="o">//</span> <span class="n">user</span><span class="o">.</span>
- <span class="n">req</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="n">tokenId</span><span class="p">;</span>
- <span class="p">}</span>
-<span class="p">});</span>
+<span class="k">var</span><span class="w"> </span><span class="n">hawkMiddleware</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hawk</span><span class="o">.</span><span class="n">getMiddleware</span><span class="p">({</span><span class="w"></span>
+<span class="w"> </span><span class="n">hawkOptions</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span><span class="w"></span>
+<span class="w"> </span><span class="n">getSession</span><span class="p">:</span><span class="w"> </span><span class="n">function</span><span class="p">(</span><span class="n">tokenId</span><span class="p">,</span><span class="w"> </span><span class="n">cb</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">A</span><span class="w"> </span><span class="n">function</span><span class="w"> </span><span class="n">which</span><span class="w"> </span><span class="k">pass</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">cb</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">key</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">algorithm</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">the</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">given</span><span class="w"> </span><span class="n">token</span><span class="w"> </span><span class="n">id</span><span class="o">.</span><span class="w"> </span><span class="n">First</span><span class="w"> </span><span class="n">argument</span><span class="w"> </span><span class="n">of</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">callback</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">potential</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">error</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="n">cb</span><span class="p">(</span><span class="nb nb-Type">null</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="n">key</span><span class="p">:</span><span class="w"> </span><span class="s2">"key"</span><span class="p">,</span><span class="w"> </span><span class="n">algorithm</span><span class="p">:</span><span class="w"> </span><span class="s2">"sha256"</span><span class="p">});</span><span class="w"></span>
+<span class="w"> </span><span class="p">},</span><span class="w"></span>
+<span class="w"> </span><span class="n">createSession</span><span class="p">:</span><span class="w"> </span><span class="n">function</span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="p">,</span><span class="w"> </span><span class="n">cb</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">A</span><span class="w"> </span><span class="n">function</span><span class="w"> </span><span class="n">which</span><span class="w"> </span><span class="n">stores</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">session</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">given</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">key</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">Argument</span><span class="w"> </span><span class="n">returned</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">potential</span><span class="w"> </span><span class="n">error</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="n">cb</span><span class="p">(</span><span class="nb nb-Type">null</span><span class="p">);</span><span class="w"></span>
+<span class="w"> </span><span class="p">},</span><span class="w"></span>
+<span class="w"> </span><span class="n">setUser</span><span class="p">:</span><span class="w"> </span><span class="n">function</span><span class="p">(</span><span class="n">req</span><span class="p">,</span><span class="w"> </span><span class="n">res</span><span class="p">,</span><span class="w"> </span><span class="n">tokenId</span><span class="p">,</span><span class="w"> </span><span class="n">cb</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">A</span><span class="w"> </span><span class="n">function</span><span class="w"> </span><span class="n">that</span><span class="w"> </span><span class="n">uses</span><span class="w"> </span><span class="n">req</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">res</span><span class="p">,</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">hawkId</span><span class="w"> </span><span class="n">when</span><span class="w"> </span><span class="n">they</span><span class="s1">'re known so</span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">that</span><span class="w"> </span><span class="n">it</span><span class="w"> </span><span class="n">can</span><span class="w"> </span><span class="n">tweak</span><span class="w"> </span><span class="n">it</span><span class="o">.</span><span class="w"> </span><span class="n">For</span><span class="w"> </span><span class="n">instance</span><span class="p">,</span><span class="w"> </span><span class="n">you</span><span class="w"> </span><span class="n">can</span><span class="w"> </span><span class="n">store</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">tokenId</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">the</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">user</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="n">req</span><span class="o">.</span><span class="n">user</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tokenId</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
+<span class="p">});</span><span class="w"></span>
-<span class="n">app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/hawk-enabled-endpoint"</span><span class="p">,</span> <span class="n">hawkMiddleware</span><span class="p">);</span>
+<span class="n">app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/hawk-enabled-endpoint"</span><span class="p">,</span><span class="w"> </span><span class="n">hawkMiddleware</span><span class="p">);</span><span class="w"></span>
</code></pre></div>
<p>If you pass the createSession parameter, all non-authenticated requests
@@ -6842,8 +6877,8 @@ ailleurs, pour finalement déployer la chose chez
<p>Après quelques péripéties, j’ai réussi à faire tourner le tout, ça à été
un peu la bataille au départ pour installer virtualenv (j’ai du faire
des changements dans mon <span class="caps">PATH</span> pour que ça puisse marcher), voici mon `.bash_profile`:</p>
-<div class="highlight"><pre><span></span><code><span class="k">export</span> <span class="n">PYTHONPATH</span><span class="o">=~/</span><span class="n">modules</span><span class="o">/</span>
-<span class="k">export</span> <span class="n">PATH</span><span class="o">=$</span><span class="n">HOME</span><span class="o">/</span><span class="n">modules</span><span class="o">/</span><span class="n">bin</span><span class="p">:</span><span class="o">$</span><span class="n">HOME</span><span class="o">/</span><span class="n">modules</span><span class="o">/</span><span class="p">:</span><span class="o">$</span><span class="n">PATH</span>
+<div class="highlight"><pre><span></span><code><span class="k">export</span><span class="w"> </span><span class="n">PYTHONPATH</span><span class="o">=~/</span><span class="n">modules</span><span class="o">/</span><span class="w"></span>
+<span class="k">export</span><span class="w"> </span><span class="n">PATH</span><span class="o">=$</span><span class="n">HOME</span><span class="o">/</span><span class="n">modules</span><span class="o">/</span><span class="n">bin</span><span class="p">:</span><span class="o">$</span><span class="n">HOME</span><span class="o">/</span><span class="n">modules</span><span class="o">/</span><span class="p">:</span><span class="o">$</span><span class="n">PATH</span><span class="w"></span>
</code></pre></div>
<p>Et après y’a plus qu’à installer avec `easy_install`:</p>
@@ -6943,7 +6978,7 @@ PATH=.:\$PATH nc -w1 $(echo %h | sed 's/^.*+//;/:/!s/$/ %p/;s/:/ /&#
</code></pre></div>
<p>On peut donc spécifier des “sauts” ssh du style:</p>
-<div class="highlight"><pre><span></span><code><span class="n">ssh</span> <span class="n">root</span><span class="mf">@91.25.25.25</span><span class="o">+</span><span class="mf">192.168.1.1</span>
+<div class="highlight"><pre><span></span><code><span class="n">ssh</span><span class="w"> </span><span class="n">root</span><span class="mf">@91.25.25.25</span><span class="o">+</span><span class="mf">192.168.1.1</span><span class="w"></span>
</code></pre></div>
<p>Ensuite on peut essayer de rajouter:</p>
@@ -7028,7 +7063,7 @@ décembre 2012:</p>
<p>A l’heure actuelle, il est interdit pour deux agriculteurs de
s’échangers des semences dans le but d’en revendre la production.</p>
<p>Les états ont crée la propriété interellectuelle pour relancer
-l’industrie après les dégats de la guerre et les …</p>
+l’industrie après les dégats de la guerre …</p>
<p><a href="http://www.dailymotion.com/video/x5nhq0_les-semences-paysannes_news#from=embed">http://www.dailymotion.com/video/x5nhq0_les-semences-paysannes_news#from=embed</a></p>
<p>A l’heure actuelle, il est interdit pour deux agriculteurs de
s’échangers des semences dans le but d’en revendre la production.</p>
@@ -8877,16 +8912,16 @@ $ ant
</code></pre></div>
<p>Here is a simple example of how to use boilerpipe in Java, from their sources</p>
-<div class="highlight"><pre><span></span><code><span class="kn">package</span> <span class="nn">de.l3s.boilerpipe.demo</span><span class="p">;</span>
-<span class="kn">import</span> <span class="nn">java.net.URL</span><span class="p">;</span>
-<span class="kn">import</span> <span class="nn">de.l3s.boilerpipe.extractors.ArticleExtractor</span><span class="p">;</span>
+<div class="highlight"><pre><span></span><code><span class="kn">package</span><span class="w"> </span><span class="nn">de.l3s.boilerpipe.demo</span><span class="p">;</span><span class="w"></span>
+<span class="kn">import</span><span class="w"> </span><span class="nn">java.net.URL</span><span class="p">;</span><span class="w"></span>
+<span class="kn">import</span><span class="w"> </span><span class="nn">de.l3s.boilerpipe.extractors.ArticleExtractor</span><span class="p">;</span><span class="w"></span>
-<span class="kd">public</span> <span class="kd">class</span> <span class="nc">Oneliner</span> <span class="p">{</span>
- <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="p">(</span><span class="kd">final</span> <span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="p">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="p">{</span>
- <span class="kd">final</span> <span class="n">URL</span> <span class="n">url</span> <span class="o">=</span> <span class="k">new</span> <span class="n">URL</span><span class="p">(</span><span class="s">"http://notmyidea.org"</span><span class="p">);</span>
- <span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">ArticleExtractor</span><span class="p">.</span><span class="na">INSTANCE</span><span class="p">.</span><span class="na">getText</span><span class="p">(</span><span class="n">url</span><span class="p">));</span>
- <span class="p">}</span>
-<span class="p">}</span>
+<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Oneliner</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">Exception</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">URL</span><span class="w"> </span><span class="n">url</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">URL</span><span class="p">(</span><span class="s">"http://notmyidea.org"</span><span class="p">);</span><span class="w"></span>
+<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">ArticleExtractor</span><span class="p">.</span><span class="na">INSTANCE</span><span class="p">.</span><span class="na">getText</span><span class="p">(</span><span class="n">url</span><span class="p">));</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
</code></pre></div>
<p>To run it:</p>
@@ -9250,14 +9285,14 @@ unison .vimrc ssh://notmyidea.org:20006/.vimrc
<p>It is also possible to put all the informations in a config file, and
then to only run unison. (fire up vim \~/.unison/default.prf.</p>
<p>Here is my config:</p>
-<div class="highlight"><pre><span></span><code> <span class="na">root</span> <span class="o">=</span> <span class="s">/home/alexis</span>
- <span class="na">root</span> <span class="o">=</span> <span class="s">ssh://notmyidea.org:20006</span>
+<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="na">root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">/home/alexis</span><span class="w"></span>
+<span class="w"> </span><span class="na">root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">ssh://notmyidea.org:20006</span><span class="w"></span>
- <span class="na">path</span> <span class="o">=</span> <span class="s">.vimrc</span>
- <span class="na">path</span> <span class="o">=</span> <span class="s">dotfiles</span>
- <span class="na">path</span> <span class="o">=</span> <span class="s">dev</span>
+<span class="w"> </span><span class="na">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">.vimrc</span><span class="w"></span>
+<span class="w"> </span><span class="na">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">dotfiles</span><span class="w"></span>
+<span class="w"> </span><span class="na">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">dev</span><span class="w"></span>
- <span class="na">follow</span> <span class="o">=</span> <span class="s">Name *</span>
+<span class="w"> </span><span class="na">follow</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">Name *</span><span class="w"></span>
</code></pre></div>
<p>My vimrc is in fact a symbolic link on my laptop, but I don’t want to
@@ -9685,35 +9720,35 @@ $ gnome-background-generator -p ~/Images/walls -s
</code></pre></div>
<p>Here is a extract of the `—help`:</p>
-<div class="highlight"><pre><span></span><code><span class="n">shell</span>
-<span class="o">$</span> <span class="n">gnome</span><span class="o">-</span><span class="n">background</span><span class="o">-</span><span class="n">generator</span> <span class="o">--</span><span class="n">help</span>
-<span class="n">usage</span><span class="p">:</span> <span class="n">gnome</span><span class="o">-</span><span class="n">background</span><span class="o">-</span><span class="n">generator</span> <span class="p">[</span><span class="o">-</span><span class="n">h</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">p</span> <span class="n">PATH</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">o</span> <span class="n">OUTPUT</span><span class="p">]</span>
- <span class="p">[</span><span class="o">-</span><span class="n">t</span> <span class="n">TRANSITION_TIME</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">d</span> <span class="n">DISPLAY_TIME</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">s</span><span class="p">]</span>
- <span class="p">[</span><span class="o">-</span><span class="n">b</span><span class="p">]</span>
+<div class="highlight"><pre><span></span><code><span class="n">shell</span><span class="w"></span>
+<span class="o">$</span><span class="w"> </span><span class="n">gnome</span><span class="o">-</span><span class="n">background</span><span class="o">-</span><span class="n">generator</span><span class="w"> </span><span class="o">--</span><span class="n">help</span><span class="w"></span>
+<span class="n">usage</span><span class="p">:</span><span class="w"> </span><span class="n">gnome</span><span class="o">-</span><span class="n">background</span><span class="o">-</span><span class="n">generator</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">h</span><span class="p">]</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">p</span><span class="w"> </span><span class="n">PATH</span><span class="p">]</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">o</span><span class="w"> </span><span class="n">OUTPUT</span><span class="p">]</span><span class="w"></span>
+<span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">t</span><span class="w"> </span><span class="n">TRANSITION_TIME</span><span class="p">]</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">d</span><span class="w"> </span><span class="n">DISPLAY_TIME</span><span class="p">]</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">s</span><span class="p">]</span><span class="w"></span>
+<span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">b</span><span class="p">]</span><span class="w"></span>
-<span class="n">A</span> <span class="n">simple</span> <span class="n">command</span> <span class="n">line</span> <span class="k">tool</span> <span class="n">to</span> <span class="n">generate</span> <span class="n">an</span> <span class="n">XML</span> <span class="n">file</span> <span class="n">to</span> <span class="n">use</span> <span class="k">for</span> <span class="n">gnome</span>
-<span class="n">wallpapers</span><span class="p">,</span> <span class="n">to</span> <span class="n">have</span> <span class="n">dynamic</span> <span class="n">walls</span>
+<span class="n">A</span><span class="w"> </span><span class="n">simple</span><span class="w"> </span><span class="n">command</span><span class="w"> </span><span class="n">line</span><span class="w"> </span><span class="k">tool</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">generate</span><span class="w"> </span><span class="n">an</span><span class="w"> </span><span class="n">XML</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">use</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">gnome</span><span class="w"></span>
+<span class="n">wallpapers</span><span class="p">,</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">have</span><span class="w"> </span><span class="n">dynamic</span><span class="w"> </span><span class="n">walls</span><span class="w"></span>
-<span class="n">optional</span> <span class="n">arguments</span><span class="p">:</span>
- <span class="o">-</span><span class="n">h</span><span class="p">,</span> <span class="o">--</span><span class="n">help</span> <span class="n">show</span> <span class="n">this</span> <span class="n">help</span> <span class="n">message</span> <span class="ow">and</span> <span class="n">exit</span>
- <span class="o">-</span><span class="n">p</span> <span class="n">PATH</span><span class="p">,</span> <span class="o">--</span><span class="n">path</span> <span class="n">PATH</span> <span class="n">Path</span> <span class="n">to</span> <span class="n">look</span> <span class="k">for</span> <span class="n">the</span> <span class="n">pictures</span><span class="o">.</span> <span class="n">If</span> <span class="n">no</span> <span class="n">output</span> <span class="k">is</span>
- <span class="n">specified</span><span class="p">,</span> <span class="n">will</span> <span class="n">be</span> <span class="n">used</span> <span class="n">too</span> <span class="k">for</span> <span class="n">outputing</span> <span class="n">the</span> <span class="n">dynamic</span><span class="o">-</span>
- <span class="n">wallpaper</span><span class="o">.</span><span class="n">xml</span> <span class="n">file</span><span class="o">.</span> <span class="n">Default</span> <span class="n">value</span> <span class="k">is</span> <span class="n">the</span> <span class="n">current</span>
- <span class="n">directory</span> <span class="p">(</span><span class="o">.</span><span class="p">)</span>
- <span class="o">-</span><span class="n">o</span> <span class="n">OUTPUT</span><span class="p">,</span> <span class="o">--</span><span class="n">output</span> <span class="n">OUTPUT</span>
- <span class="n">Output</span> <span class="n">filename</span><span class="o">.</span> <span class="n">If</span> <span class="n">no</span> <span class="n">filename</span> <span class="k">is</span> <span class="n">specified</span><span class="p">,</span> <span class="n">a</span>
- <span class="n">dynamic</span><span class="o">-</span><span class="n">wallpaper</span><span class="o">.</span><span class="n">xml</span> <span class="n">file</span> <span class="n">will</span> <span class="n">be</span> <span class="n">generated</span> <span class="ow">in</span> <span class="n">the</span>
- <span class="n">path</span> <span class="n">containing</span> <span class="n">the</span> <span class="n">pictures</span><span class="o">.</span> <span class="n">You</span> <span class="n">can</span> <span class="n">also</span> <span class="n">use</span> <span class="s2">"-"</span> <span class="n">to</span>
- <span class="n">display</span> <span class="n">the</span> <span class="n">xml</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">stdout</span><span class="o">.</span>
- <span class="o">-</span><span class="n">t</span> <span class="n">TRANSITION_TIME</span><span class="p">,</span> <span class="o">--</span><span class="n">transition</span><span class="o">-</span><span class="n">time</span> <span class="n">TRANSITION_TIME</span>
- <span class="n">Time</span> <span class="p">(</span><span class="ow">in</span> <span class="n">seconds</span><span class="p">)</span> <span class="n">transitions</span> <span class="n">must</span> <span class="n">last</span> <span class="p">(</span><span class="n">default</span> <span class="n">value</span>
- <span class="k">is</span> <span class="mi">2</span> <span class="n">seconds</span><span class="p">)</span>
- <span class="o">-</span><span class="n">d</span> <span class="n">DISPLAY_TIME</span><span class="p">,</span> <span class="o">--</span><span class="n">display</span><span class="o">-</span><span class="n">time</span> <span class="n">DISPLAY_TIME</span>
- <span class="n">Time</span> <span class="p">(</span><span class="ow">in</span> <span class="n">seconds</span><span class="p">)</span> <span class="n">a</span> <span class="n">picture</span> <span class="n">must</span> <span class="n">be</span> <span class="n">displayed</span><span class="o">.</span> <span class="n">Default</span>
- <span class="n">value</span> <span class="k">is</span> <span class="mi">900</span> <span class="p">(</span><span class="mi">15</span><span class="n">mn</span><span class="p">)</span>
- <span class="o">-</span><span class="n">s</span><span class="p">,</span> <span class="o">--</span><span class="n">set</span><span class="o">-</span><span class="n">background</span> <span class="s1">'''try to set the background using gnome-appearance-</span>
-<span class="s1"> properties</span>
-<span class="s1"> -b, --debug</span>
+<span class="n">optional</span><span class="w"> </span><span class="n">arguments</span><span class="p">:</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">h</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">help</span><span class="w"> </span><span class="n">show</span><span class="w"> </span><span class="n">this</span><span class="w"> </span><span class="n">help</span><span class="w"> </span><span class="n">message</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">exit</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">p</span><span class="w"> </span><span class="n">PATH</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">path</span><span class="w"> </span><span class="n">PATH</span><span class="w"> </span><span class="n">Path</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">look</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">pictures</span><span class="o">.</span><span class="w"> </span><span class="n">If</span><span class="w"> </span><span class="n">no</span><span class="w"> </span><span class="n">output</span><span class="w"> </span><span class="k">is</span><span class="w"></span>
+<span class="w"> </span><span class="n">specified</span><span class="p">,</span><span class="w"> </span><span class="n">will</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">used</span><span class="w"> </span><span class="n">too</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">outputing</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">dynamic</span><span class="o">-</span><span class="w"></span>
+<span class="w"> </span><span class="n">wallpaper</span><span class="o">.</span><span class="n">xml</span><span class="w"> </span><span class="n">file</span><span class="o">.</span><span class="w"> </span><span class="n">Default</span><span class="w"> </span><span class="n">value</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">current</span><span class="w"></span>
+<span class="w"> </span><span class="n">directory</span><span class="w"> </span><span class="p">(</span><span class="o">.</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">o</span><span class="w"> </span><span class="n">OUTPUT</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">output</span><span class="w"> </span><span class="n">OUTPUT</span><span class="w"></span>
+<span class="w"> </span><span class="n">Output</span><span class="w"> </span><span class="n">filename</span><span class="o">.</span><span class="w"> </span><span class="n">If</span><span class="w"> </span><span class="n">no</span><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">specified</span><span class="p">,</span><span class="w"> </span><span class="n">a</span><span class="w"></span>
+<span class="w"> </span><span class="n">dynamic</span><span class="o">-</span><span class="n">wallpaper</span><span class="o">.</span><span class="n">xml</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="n">will</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">generated</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">the</span><span class="w"></span>
+<span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="n">containing</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">pictures</span><span class="o">.</span><span class="w"> </span><span class="n">You</span><span class="w"> </span><span class="n">can</span><span class="w"> </span><span class="n">also</span><span class="w"> </span><span class="n">use</span><span class="w"> </span><span class="s2">"-"</span><span class="w"> </span><span class="n">to</span><span class="w"></span>
+<span class="w"> </span><span class="n">display</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">xml</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">stdout</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">t</span><span class="w"> </span><span class="n">TRANSITION_TIME</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">transition</span><span class="o">-</span><span class="n">time</span><span class="w"> </span><span class="n">TRANSITION_TIME</span><span class="w"></span>
+<span class="w"> </span><span class="n">Time</span><span class="w"> </span><span class="p">(</span><span class="ow">in</span><span class="w"> </span><span class="n">seconds</span><span class="p">)</span><span class="w"> </span><span class="n">transitions</span><span class="w"> </span><span class="n">must</span><span class="w"> </span><span class="n">last</span><span class="w"> </span><span class="p">(</span><span class="n">default</span><span class="w"> </span><span class="n">value</span><span class="w"></span>
+<span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="n">seconds</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">d</span><span class="w"> </span><span class="n">DISPLAY_TIME</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">display</span><span class="o">-</span><span class="n">time</span><span class="w"> </span><span class="n">DISPLAY_TIME</span><span class="w"></span>
+<span class="w"> </span><span class="n">Time</span><span class="w"> </span><span class="p">(</span><span class="ow">in</span><span class="w"> </span><span class="n">seconds</span><span class="p">)</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">picture</span><span class="w"> </span><span class="n">must</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">displayed</span><span class="o">.</span><span class="w"> </span><span class="n">Default</span><span class="w"></span>
+<span class="w"> </span><span class="n">value</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="mi">900</span><span class="w"> </span><span class="p">(</span><span class="mi">15</span><span class="n">mn</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">s</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">set</span><span class="o">-</span><span class="n">background</span><span class="w"> </span><span class="s1">'''try to set the background using gnome-appearance-</span><span class="w"></span>
+<span class="s1"> properties</span><span class="w"></span>
+<span class="s1"> -b, --debug</span><span class="w"></span>
</code></pre></div>How to install NGINX + PHP 5.3 on FreeBSD.2010-10-10T00:00:00+02:002010-10-10T00:00:00+02:00tag:blog.notmyidea.org,2010-10-10:/how-to-install-nginx-php-53-on-freebsd.html
<ul>
<li>
@@ -9756,30 +9791,30 @@ the server.</p>
<p>That’s a simple thing in fact, but it could be good to have something
that will work without effort over time.</p>
<p>Here’s a sample of my configuration:</p>
-<div class="highlight"><pre><span></span><code><span class="nt">server</span> <span class="p">{</span>
- <span class="err">server_name</span> <span class="err">ndd</span><span class="p">;</span>
- <span class="err">set</span> <span class="err">$path</span> <span class="err">/path/to/your/files</span><span class="p">;</span>
- <span class="err">root</span> <span class="err">$path</span><span class="p">;</span>
+<div class="highlight"><pre><span></span><code><span class="nt">server</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">server_name</span><span class="w"> </span><span class="err">ndd</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">set</span><span class="w"> </span><span class="err">$path</span><span class="w"> </span><span class="err">/path/to/your/files</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">root</span><span class="w"> </span><span class="err">$path</span><span class="p">;</span><span class="w"></span>
- <span class="err">location</span> <span class="err">/</span> <span class="err">{</span>
- <span class="err">index</span> <span class="err">index.php</span><span class="p">;</span>
- <span class="p">}</span>
+<span class="w"> </span><span class="err">location</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="err">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">index</span><span class="w"> </span><span class="err">index.php</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
- <span class="nt">location</span> <span class="o">~*</span> <span class="o">^.+.(</span><span class="nt">jpg</span><span class="o">|</span><span class="nt">jpeg</span><span class="o">|</span><span class="nt">gif</span><span class="o">|</span><span class="nt">css</span><span class="o">|</span><span class="nt">png</span><span class="o">|</span><span class="nt">js</span><span class="o">|</span><span class="nt">ico</span><span class="o">|</span><span class="nt">xml</span><span class="o">)$</span> <span class="p">{</span>
- <span class="err">access_log</span> <span class="err">off</span><span class="p">;</span>
- <span class="err">expires</span> <span class="err">30d</span><span class="p">;</span>
- <span class="p">}</span>
+<span class="w"> </span><span class="nt">location</span><span class="w"> </span><span class="o">~*</span><span class="w"> </span><span class="o">^.+.(</span><span class="nt">jpg</span><span class="o">|</span><span class="nt">jpeg</span><span class="o">|</span><span class="nt">gif</span><span class="o">|</span><span class="nt">css</span><span class="o">|</span><span class="nt">png</span><span class="o">|</span><span class="nt">js</span><span class="o">|</span><span class="nt">ico</span><span class="o">|</span><span class="nt">xml</span><span class="o">)$</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">access_log</span><span class="w"> </span><span class="err">off</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">expires</span><span class="w"> </span><span class="err">30d</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
- <span class="nt">location</span> <span class="o">~</span> <span class="p">.</span><span class="nc">php</span><span class="o">$</span> <span class="p">{</span>
- <span class="err">fastcgi_param</span> <span class="err">SCRIPT_FILENAME</span> <span class="err">$path$fastcgi_script_name</span><span class="p">;</span>
- <span class="err">fastcgi_pass</span> <span class="err">backend</span><span class="p">;</span>
- <span class="err">include</span> <span class="err">fastcgi_params</span><span class="p">;</span>
- <span class="p">}</span>
-<span class="err">}</span>
+<span class="w"> </span><span class="nt">location</span><span class="w"> </span><span class="o">~</span><span class="w"> </span><span class="p">.</span><span class="nc">php</span><span class="o">$</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">fastcgi_param</span><span class="w"> </span><span class="err">SCRIPT_FILENAME</span><span class="w"> </span><span class="err">$path$fastcgi_script_name</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">fastcgi_pass</span><span class="w"> </span><span class="err">backend</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">include</span><span class="w"> </span><span class="err">fastcgi_params</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
+<span class="err">}</span><span class="w"></span>
-<span class="nt">upstream</span> <span class="nt">backend</span> <span class="p">{</span>
- <span class="err">server</span> <span class="err">127.0.0.1:9000</span><span class="p">;</span>
-<span class="p">}</span>
+<span class="nt">upstream</span><span class="w"> </span><span class="nt">backend</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">server</span><span class="w"> </span><span class="err">127.0.0.1:9000</span><span class="p">;</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
</code></pre></div>
<p>And that’s it !</p>Pelican, a simple static blog generator in python2010-10-06T00:00:00+02:002010-10-06T00:00:00+02:00tag:blog.notmyidea.org,2010-10-06:/pelican-a-simple-static-blog-generator-in-python.html
diff --git a/feeds/notes.atom.xml b/feeds/notes.atom.xml
index 7140a01..5292784 100644
--- a/feeds/notes.atom.xml
+++ b/feeds/notes.atom.xml
@@ -651,7 +651,7 @@ décembre 2012:</p>
<p>A l’heure actuelle, il est interdit pour deux agriculteurs de
s’échangers des semences dans le but d’en revendre la production.</p>
<p>Les états ont crée la propriété interellectuelle pour relancer
-l’industrie après les dégats de la guerre et les …</p>
+l’industrie après les dégats de la guerre …</p>
<p><a href="http://www.dailymotion.com/video/x5nhq0_les-semences-paysannes_news#from=embed">http://www.dailymotion.com/video/x5nhq0_les-semences-paysannes_news#from=embed</a></p>
<p>A l’heure actuelle, il est interdit pour deux agriculteurs de
s’échangers des semences dans le but d’en revendre la production.</p>
diff --git a/feeds/pyconfr2015.atom.xml b/feeds/pyconfr2015.atom.xml
index 4b42711..0985122 100644
--- a/feeds/pyconfr2015.atom.xml
+++ b/feeds/pyconfr2015.atom.xml
@@ -120,7 +120,7 @@ des tests souvent !</p>
</div>
<p>Speaker: serge_sans_paille.</p>
<p>Retour sur le passé des boucles: <span class="caps">ASM</span>, fortran, C. Avec <span class="caps">APL</span>, la boucle est
-cachée au fur et à mesure des évolutions. Écrire une boucle ne devrait pas etre …</p><div class="admonition note">
+cachée au fur et à mesure des évolutions. Écrire une boucle ne devrait …</p><div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Voici quelques notes prises durant la PyconFR 2015, à Pau. N’hésitez pas
à les completer si besoin.</p>
diff --git a/feeds/reflexions.atom.xml b/feeds/reflexions.atom.xml
index dcc5c41..6cbf27c 100644
--- a/feeds/reflexions.atom.xml
+++ b/feeds/reflexions.atom.xml
@@ -1,5 +1,40 @@
-Alexis Métaireau - Réfléxionshttps://blog.notmyidea.org/2021-11-11T00:00:00+01:00Conflit2021-11-11T00:00:00+01:002021-11-11T00:00:00+01:00tag:blog.notmyidea.org,2021-11-11:/conflit.html
+Alexis Métaireau - Réfléxionshttps://blog.notmyidea.org/2022-05-06T00:00:00+02:00Fatigue relationnelle2022-05-06T00:00:00+02:002022-05-06T00:00:00+02:00tag:blog.notmyidea.org,2022-05-06:/fatigue-relationnelle.html
+<p>Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années.</p>
+<p>Je ne sais pas exactement d’où cela vient : si c’est un des nombreux effets …</p>
+<p>Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années.</p>
+<p>Je ne sais pas exactement d’où cela vient : si c’est un des nombreux effets psychologiques que le <span class="caps">COVID</span> à eu sur moi, si j’accorde trop de place aux collectifs dans ma vie (travail, habitation, ami⋅es), ou si simplement mes envies ne sont plus les mêmes qu’il y a quelques années, mais le résultat est bel et bien là.</p>
+<p>Malgré tout j’ai envie d’être disponible pour les personnes qui comptent pour moi, et je réfléchis donc à différentes solutions : déménager et habiter en solo, faire moins d’activités extérieures ou bien m’isoler plus souvent dans les espaces collectifs.</p>
+<p>Le fait de retourner potentiellement habiter en solo vient questionner mon rapport au collectif omniprésent dans ma vie, et qui jouit d’un statut particulier pour moi. Le collectif semble être quasiment un <em>objectif en soi</em>, et donc quelque-part partir de ces espaces collectifs serait une sorte d’échec.</p>
+<p>Entrouvrir cette possibilité me plaît parce-que ça me pousse à accepter mes limites et à mettre en balance ma qualité de relation aux autres avec mes valeurs collectivistes. Du collectif, oui, mais peut-être avec un mix différent ?</p>
+<p>Ça fait également écho à ma <a href="conflit.html">gestion du conflit</a>. Je me rends compte que j’ai besoin d’évoluer dans des collectifs qui partagent cette culture de la gestion du conflit (plutôt que de son évitement).</p>Accueil, transmission et confiance2022-05-01T00:00:00+02:002022-05-01T00:00:00+02:00tag:blog.notmyidea.org,2022-05-01:/accueil-transmission-et-confiance.html
+<p>Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons :</p>
+<ul>
+<li>Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des sujets de fond, pour progressivement changer l’équilibre dans mon métier ;</li>
+<li>J’ai désormais quelqu’une avec …</li></ul>
+<p>Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons :</p>
+<ul>
+<li>Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des sujets de fond, pour progressivement changer l’équilibre dans mon métier ;</li>
+<li>J’ai désormais quelqu’une avec qui échanger sur les problématiques techniques du métier de livreur / commercial ;</li>
+</ul>
+<p>Mais cela me fait aussi peur : cela va nécessairement bousculer l’équilibre — parfois fragile — en place entre les associés actuels. Même si je vois cette évolution d’un bon œil, les transitions sont parfois difficiles.</p>
+<p>Ça me donne donc envie de construire une relation de confiance, et de donner les moyens à cette nouvelle arrivante de s’y retrouver.</p>
+<h2 id="transmission">Transmission</h2>
+<p>Cela me pose donc de nouvelles questions, autour de l’accueil et de la transmission.</p>
+<p>Il me semble que l’enjeu est de laisser une liberté d’action progressive pour mettre la personne en confiance, puis de réussir à « lâcher le bébé ».</p>
+<p>Mais il s’agit aussi de réussir à juger si la communication est aisée, et de ne pas nécessairement partir du principe que tout sera génial. C’est une relation de travail, pas une amitié.</p>
+<p>De son côté également il doit y avoir des questionnements. Je mets une attention particulière à les accueillir : les questionnement sont bienvenus, voir même attendus.</p>
+<p>Le pire pour moi serait d’avoir quelqu’un qui à peur de ne pas savoir, et qui dit qu’elle sait plutôt que de laisser la place pour l’apprentissage.</p>
+<h2 id="faire-confiance">Faire confiance</h2>
+<p>Il me semble qu’il peut exister deux types de confiance :</p>
+<ol>
+<li>
+<p><em>Laisser la possibilité de se tromper</em> : il est possible de faire confiance à l’autre dans son apprentissage, pour qu’iel se sente légitime à faire <em>ses</em> choix, ceux qu’il⋅elle estimera les bons, et qui seront donc les bons — par définition ;</p>
+</li>
+<li>
+<p>La <em>confiance relationnelle</em>, de l’ordre des relations inter-personnelles, de la relation à l’autre. Parce que c’est aussi une rencontre, et que je cherche à créer des relations de travail où l’on peut se dire les choses sans se blesser, en confiance donc.</p>
+</li>
+</ol>Conflit2021-11-11T00:00:00+01:002021-11-11T00:00:00+01:00tag:blog.notmyidea.org,2021-11-11:/conflit.html
<p>J’ai pensé durant de nombreuses années que je savais gérer le conflit, alors que c’était en fait impensé.</p>
<p>Ne pas être en conflit signifie parfois s’adapter aux autres, parfois ne pas (assez) s’écouter, et ne pas se faire entendre. </p>
<p><strong>Alors que je pensais gérer le conflit …</strong></p>
diff --git a/feeds/technologie.atom.xml b/feeds/technologie.atom.xml
index e459e26..12d85c5 100644
--- a/feeds/technologie.atom.xml
+++ b/feeds/technologie.atom.xml
@@ -468,8 +468,8 @@ obtenir le même résultat à partir de la même entrée.</p>
une collection <span class="caps">JSON</span>. Chaque élément contient un identifiant unique généré sur
le client.</p>
<p>Par exemple, un enregistrement peut ressembler à :</p>
-<div class="highlight"><pre><span></span><span class="p">{</span><span class="s2">"id"</span><span class="o">:</span> <span class="s2">"b7dded96-8df0-8af8-449a-8bc47f71b4c4"</span><span class="p">,</span>
- <span class="s2">"fingerprint"</span><span class="o">:</span> <span class="s2">"11:D5:D2:0A:9A:F8:D9:FC:23:6E:5C:5C:30:EC:AF:68:F5:68:FB:A3"</span><span class="p">}</span>
+<div class="highlight"><pre><span></span><span class="p">{</span><span class="s2">"id"</span><span class="o">:</span><span class="w"> </span><span class="s2">"b7dded96-8df0-8af8-449a-8bc47f71b4c4"</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s2">"fingerprint"</span><span class="o">:</span><span class="w"> </span><span class="s2">"11:D5:D2:0A:9A:F8:D9:FC:23:6E:5C:5C:30:EC:AF:68:F5:68:FB:A3"</span><span class="p">}</span><span class="w"></span>
</pre></div>
<p>Le <em>hash</em> de la collection est ensuite calculé, signé puis envoyé au serveur
(voir plus bas pour les détails).</p>
@@ -950,7 +950,7 @@ d’écriture sur une collection d’enregistrements.&l
<li><strong>La synchronisation</strong> : une série de leviers pour récupérer et renvoyer des
changements sur les données, sans perte ni collision, en utilisant les timestamps.</li>
<li><strong>Les permissions</strong> : les droits d’un utilisateur sur une collection ou un enregistrement
-(<em>encore frais et sur le point d’être documenté</em>) <a class="footnote-reference" href="#id3" id="id1">[1]</a>.</li>
+(<em>encore frais et sur le point d’être documenté</em>) <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a>.</li>
<li><strong>Opérations par lot</strong>: une <span class="caps">URL</span> qui permet d’envoyer une série de requêtes
décrites en <span class="caps">JSON</span> et d’obtenir les réponses respectives.</li>
</ul>
@@ -972,17 +972,17 @@ de <em>Firefox Sync</em> pour la gestion de la concurrence et de&
<p>Il est <a class="reference external" href="http://cliquet.readthedocs.org/en/latest/api/index.html">documenté en détail</a>.</p>
<p>Dans un monde idéal, ce protocole serait versionné, et formalisé dans une <span class="caps">RFC</span>.
En rêve, il existerait même plusieurs implémentations avec des technologies différentes
-(Python, Go, Node, etc.). <a class="footnote-reference" href="#id4" id="id2">[2]</a></p>
-<table class="docutils footnote" frame="void" id="id3" rules="none">
+(Python, Go, Node, etc.). <a class="footnote-reference" href="#footnote-2" id="footnote-reference-2">[2]</a></p>
+<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>Voir notre <a class="reference external" href="https://blog.notmyidea.org/service-de-nuages-la-gestion-des-permissions-fr.html">article dédié sur les permissions</a></td></tr>
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>Voir notre <a class="reference external" href="https://blog.notmyidea.org/service-de-nuages-la-gestion-des-permissions-fr.html">article dédié sur les permissions</a></td></tr>
</tbody>
</table>
-<table class="docutils footnote" frame="void" id="id4" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td>Rappel: nous sommes une toute petite équipe !</td></tr>
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-2">[2]</a></td><td>Rappel: nous sommes une toute petite équipe !</td></tr>
</tbody>
</table>
</div>
@@ -990,7 +990,7 @@ En rêve, il existerait même plusieurs implémentations avec des technologies d
<h2>Le toolkit</h2>
<div class="section" id="choix-techniques">
<h3>Choix techniques</h3>
-<p><em>Cliquet</em> implémente le protocole en Python (<em>2.7, 3.4+, pypy</em>), avec <a class="reference external" href="http://trypyramid.com/">Pyramid</a> <a class="footnote-reference" href="#id6" id="id5">[3]</a>.</p>
+<p><em>Cliquet</em> implémente le protocole en Python (<em>2.7, 3.4+, pypy</em>), avec <a class="reference external" href="http://trypyramid.com/">Pyramid</a> <a class="footnote-reference" href="#footnote-3" id="footnote-reference-3">[3]</a>.</p>
<p><strong>Pyramid</strong> est un framework Web qui va prendre en charge tout la partie <span class="caps">HTTP</span>,
et qui s’avère pertinent aussi bien pour des petits projets que des plus ambitieux.</p>
<p><strong>Cornice</strong> est une extension de <em>Pyramid</em>, écrite en partie par Alexis et Tarek,
@@ -1003,10 +1003,10 @@ rigoureux, gérer les entêtes <span class="caps">CORS</span>, fourn
<p><strong>Cliquet</strong> utilise les deux précédents pour implémenter le protocole et fournir
des abstractions, mais on a toujours <em>Pyramid</em> et <em>Cornice</em> sous la main pour
aller au delà de ce qui est proposé !</p>
-<table class="docutils footnote" frame="void" id="id6" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-3" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id5">[3]</a></td><td>Au tout début nous avons commencé une implémentation avec <em>Python-Eve</em>
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-3">[3]</a></td><td>Au tout début nous avons commencé une implémentation avec <em>Python-Eve</em>
(Flask), mais n’étions pas satisfaits de l’approche pour la configuration
de l’<span class="caps">API</span>. En particulier du côté magique.</td></tr>
</tbody>
@@ -1098,18 +1098,18 @@ avec <em>Colander</em>, et ensuite déclarer une resource:&
<p>Désormais, la resource <span class="caps">CRUD</span> est disponible sur <tt class="docutils literal">/v1/bookmarks</tt>, avec toutes
les fonctionnalités de synchronisation, filtrage, tri, pagination, timestamp, etc.
De base les enregistrements sont privés, par utilisateur.</p>
-<div class="highlight"><pre><span></span><span class="err">$</span> <span class="err">h</span><span class="kc">tt</span><span class="err">p</span> <span class="err">GET</span> <span class="s2">"http://localhost:8000/v1/bookmarks"</span>
-<span class="err">HTTP/</span><span class="mf">1.1</span> <span class="mi">200</span> <span class="err">OK</span>
-<span class="err">...</span>
-<span class="p">{</span>
- <span class="nt">"data"</span><span class="p">:</span> <span class="p">[</span>
- <span class="p">{</span>
- <span class="nt">"url"</span><span class="p">:</span> <span class="s2">"http://cliquet.readthedocs.org"</span><span class="p">,</span>
- <span class="nt">"id"</span><span class="p">:</span> <span class="s2">"cc103eb5-0c80-40ec-b6f5-dad12e7d975e"</span><span class="p">,</span>
- <span class="nt">"last_modified"</span><span class="p">:</span> <span class="mi">1437034418940</span><span class="p">,</span>
- <span class="p">}</span>
- <span class="p">]</span>
-<span class="p">}</span>
+<div class="highlight"><pre><span></span><span class="err">$</span><span class="w"> </span><span class="err">h</span><span class="kc">tt</span><span class="err">p</span><span class="w"> </span><span class="err">GET</span><span class="w"> </span><span class="s2">"http://localhost:8000/v1/bookmarks"</span><span class="w"></span>
+<span class="err">HTTP/</span><span class="mf">1.1</span><span class="w"> </span><span class="mi">200</span><span class="w"> </span><span class="err">OK</span><span class="w"></span>
+<span class="err">...</span><span class="w"></span>
+<span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="nt">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"></span>
+<span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="nt">"url"</span><span class="p">:</span><span class="w"> </span><span class="s2">"http://cliquet.readthedocs.org"</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"cc103eb5-0c80-40ec-b6f5-dad12e7d975e"</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="nt">"last_modified"</span><span class="p">:</span><span class="w"> </span><span class="mi">1437034418940</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
+<span class="w"> </span><span class="p">]</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
</pre></div>
</div>
<div class="section" id="etape-3">
@@ -1344,7 +1344,7 @@ concept repose sur <a class="reference external" href="https://fr.wikipedia.o
<a class="reference external" href="https://tools.ietf.org/html/draft-dejong-remotestorage-05">*Remote Storage*</a>,
mais pour l’instant les cas d’utilisations ne se sont pas encore présentés officiellement.</p>
</div>
-<div class="section" id="id2">
+<div class="section" id="a-venir-1">
<h3>À venir</h3>
<p>Nous serons probablement amenés à introduire la gestion de la concurrence dans
le client <span class="caps">JS</span>, en complément de ce qui a été fait sur le serveur, pour permettre
@@ -1359,17 +1359,17 @@ que <a class="reference external" href="https://github.com/mozilla-services/k
<h2>Contenus applicatifs de Firefox</h2>
<p>Aujourd’hui Firefox a un cycle de release de six semaines. Un des objectifs
consiste à désolidariser certains contenus applicatifs de ces cycles
-relativement longs (ex. <em>règles de securité, dictionnaires, traductions, …</em>) <a class="footnote-reference" href="#id4" id="id3">[1]</a>.</p>
+relativement longs (ex. <em>règles de securité, dictionnaires, traductions, …</em>) <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a>.</p>
<p>Il s’agit de données <span class="caps">JSON</span> et binaire qui doivent être versionnées et synchronisées par
les navigateurs (<em>lecture seule</em>).</p>
<p>Il y a plusieurs outils officiels qui existent pour gérer ça (<em>Balrog</em>, <em>Shavar</em>, …),
et pour l’instant, aucun choix n’a été fait. Mais lors des conversations avec
l’équipe en charge du projet, ce fût vraiment motivant de voir que même pour
ce genre de besoins internes, <em>Kinto</em> est tout aussi pertinent !</p>
-<table class="docutils footnote" frame="void" id="id4" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id3">[1]</a></td><td>La bonne nouvelle c’est que toutes les fonctionnalités <em>third-party</em> qui ont
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>La bonne nouvelle c’est que toutes les fonctionnalités <em>third-party</em> qui ont
été intégrées récemment vont redevenir des <em>add-ons</em> \o/.</td></tr>
</tbody>
</table>
@@ -1383,7 +1383,7 @@ un prototype pour améliorer <em>Awesome bar</em>, qui fusionnerait
<p>Nous ne pouvons pas en dire beaucoup plus pour l’instant, mais les fonctionnalités
de collections d’enregistrements partagées entre utilisateurs de <em>Kinto</em>
correspondent parfaitement à ce qui est envisagé pour le futur du navigateur :)</p>
-<div class="section" id="id5">
+<div class="section" id="a-venir-2">
<h3>À venir</h3>
<p>Nous serons donc probablement amenés, avant de la fin de l’année, à introduire des
fonctionnalités d’indexation et de recherche <em>full-text</em> (comprendre <em>ElasticSearch</em>).
@@ -1405,7 +1405,7 @@ ou un équivalent à <em>Alexa.com Top 500</em> pour fournir la comp
interroger le moteur de recherche.</p>
<p>L’exercice pourrait être poussé jusqu’à la synchronisation d’états <em>React</em>
entre périphériques (par exemple pour les onglets).</p>
-<div class="section" id="id7">
+<div class="section" id="a-venir-3">
<h3>À venir</h3>
<p>Si <em>browser.html</em> doit stocker des données de navigation, il faudra ajouter
des fonctionnalités de chiffrement sur le client <span class="caps">JS</span>. Ça tombe bien, c’est un
@@ -1433,7 +1433,7 @@ de données sur le Web :)</p>
et Kinto 1.0 !</p>
<p><em>Cet article est repris depuis le blog « Service de Nuages » de mon équipe à Mozilla</em></p>
<p>Aujourd’hui, c’est jour de fête : nous venons de publier Cliquet <strong>2.0</strong>
-<a class="footnote-reference" href="#id5" id="id1">[1]</a> et Kinto <strong>1.0</strong> <a class="footnote-reference" href="#id6" id="id2">[2]</a>.</p>
+<a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a> et Kinto <strong>1.0</strong> <a class="footnote-reference" href="#footnote-2" id="footnote-reference-2">[2]</a>.</p>
<blockquote class="epigraph">
<p>L’aboutissement de 3 années de R&D !</p>
<p class="attribution">—Rémy</p>
@@ -1454,7 +1454,7 @@ fonctionnalités que l’on attendait depuis longtemps, comme la gestion
s’empêcher de voir toutes les choses qui doivent toujours être améliorées,
notamment sur la documentation et les performances.</p>
<p>On peut déjà entrevoir à quoi l’écosystème va ressembler, et c’est prometteur.
-Il y a déjà un client JavaScript <a class="footnote-reference" href="#id7" id="id3">[3]</a> dont l’objectif est de synchroniser les
+Il y a déjà un client JavaScript <a class="footnote-reference" href="#footnote-3" id="footnote-reference-3">[3]</a> dont l’objectif est de synchroniser les
données locales du navigateur avec une instance de Kinto.</p>
<p>N’hésitez vraiment pas à nous solliciter pour discuter avec vous si vous avez
des problématiques proches : nous accueillons avec plaisir toutes sortes de
@@ -1463,34 +1463,34 @@ la solution ou de la manière de communiquer avec le monde extérieur. Si vous
souhaitez nous contacter, vous pouvez laisser un commentaire ici ou nous
contacter sur le canal <a class="reference external" href="irc://irc.mozilla.org/#storage">#storage</a> sur le réseau <span class="caps">IRC</span> de Mozilla.</p>
<p>Et ce n’est que le début ! Le futur se dessine dans notre feuille de route
-<a class="footnote-reference" href="#id8" id="id4">[4]</a>.</p>
-<table class="docutils footnote" frame="void" id="id5" rules="none">
+<a class="footnote-reference" href="#footnote-4" id="footnote-reference-4">[4]</a>.</p>
+<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td><strong>Cliquet</strong> est une boite à outils pour faciliter l’implémentation de
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td><strong>Cliquet</strong> est une boite à outils pour faciliter l’implémentation de
microservices <span class="caps">HTTP</span> tels que les APIs <em><span class="caps">REST</span></em> ayant des besoins de
synchronisation.</td></tr>
</tbody>
</table>
-<table class="docutils footnote" frame="void" id="id6" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td><strong>Kinto</strong> est un service pour stocker, synchroniser et partager des données
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-2">[2]</a></td><td><strong>Kinto</strong> est un service pour stocker, synchroniser et partager des données
arbitraires, attachées à un compte Firefox (mais le système d’authentification
est <em>pluggable</em>).</td></tr>
</tbody>
</table>
-<table class="docutils footnote" frame="void" id="id7" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-3" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id3">[3]</a></td><td>Cliquetis, la bibliothèque JavaScript pour consommer l’<span class="caps">API</span> <span class="caps">HTTP</span> de Kinto —
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-3">[3]</a></td><td>Cliquetis, la bibliothèque JavaScript pour consommer l’<span class="caps">API</span> <span class="caps">HTTP</span> de Kinto —
<a class="reference external" href="https://github.com/mozilla-services/cliquetis">https://github.com/mozilla-services/cliquetis</a></td></tr>
</tbody>
</table>
-<table class="docutils footnote" frame="void" id="id8" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-4" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id4">[4]</a></td><td>La feuille de route de Kinto: <a class="reference external" href="https://github.com/mozilla-services/kinto/wiki/roadmap">https://github.com/mozilla-services/kinto/wiki/roadmap</a></td></tr>
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-4">[4]</a></td><td>La feuille de route de Kinto: <a class="reference external" href="https://github.com/mozilla-services/kinto/wiki/roadmap">https://github.com/mozilla-services/kinto/wiki/roadmap</a></td></tr>
</tbody>
</table>
Service de nuages : Stocker et interroger les permissions avec Kinto2015-05-26T00:00:00+02:002015-05-26T00:00:00+02:00tag:blog.notmyidea.org,2015-05-26:/service-de-nuages-stocker-et-interroger-les-permissions-avec-kinto-fr.html<p class="first last">Comment faire pour stocker et interroger la base de données au sujet des permissions avec Kinto ?</p>
@@ -1606,13 +1606,13 @@ avantages (lisibilité, unicité, cohérence avec les URLs)</p>
<div class="section" id="les-tables">
<h3>Les tables</h3>
<p>Pour le stockage des principals et des permissions:</p>
-<div class="highlight"><pre><span></span><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="k">user</span><span class="p">(</span><span class="n">id</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="n">principals</span> <span class="nb">TEXT</span><span class="p">[]);</span>
-<span class="k">CREATE</span> <span class="k">TABLE</span> <span class="n">perms</span><span class="p">(</span><span class="n">ace</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="n">principals</span> <span class="nb">TEXT</span><span class="p">[]);</span>
+<div class="highlight"><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="k">user</span><span class="p">(</span><span class="n">id</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="n">principals</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">[]);</span><span class="w"></span>
+<span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">perms</span><span class="p">(</span><span class="n">ace</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="n">principals</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">[]);</span><span class="w"></span>
</pre></div>
<p>La table <em>perms</em> va associer des <em>principals</em> à chaque <em><span class="caps">ACE</span></em> (e.g.“/buckets/blog:write“).</p>
<p>Pour le stockage des données:</p>
-<div class="highlight"><pre><span></span><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="k">object</span><span class="p">(</span><span class="n">id</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="k">type</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="n">parent_id</span> <span class="nb">TEXT</span><span class="p">,</span> <span class="k">data</span> <span class="n">JSONB</span><span class="p">,</span>
- <span class="n">write_principals</span> <span class="nb">TEXT</span><span class="p">[],</span> <span class="n">read_principals</span> <span class="nb">TEXT</span><span class="p">[]);</span>
+<div class="highlight"><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="k">object</span><span class="p">(</span><span class="n">id</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="w"> </span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">write_principals</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">[],</span><span class="w"> </span><span class="n">read_principals</span><span class="w"> </span><span class="nb">TEXT</span><span class="p">[]);</span><span class="w"></span>
</pre></div>
<p>La colonne <em>parent_id</em> permet de savoir à qui appartient l’objet
(e.g. groupe d’un <em>bucket</em>, collection d’un <em>bucket</em>, <em>record</em> d’une
@@ -1620,53 +1620,53 @@ collection, …).</p>
</div>
<div class="section" id="exemple-d-utilisateur">
<h3>Exemple d’utilisateur</h3>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">user</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="n">principals</span><span class="p">)</span>
- <span class="k">VALUES</span> <span class="p">(</span><span class="s1">'fxa:alexis'</span><span class="p">,</span> <span class="s1">'{}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">user</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">principals</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'fxa:alexis'</span><span class="p">,</span><span class="w"> </span><span class="s1">'{}'</span><span class="p">);</span><span class="w"></span>
-<span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">user</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="n">principals</span><span class="p">)</span>
- <span class="k">VALUES</span> <span class="p">(</span><span class="s1">'fxa:natim'</span><span class="p">,</span>
- <span class="s1">'{"/buckets/blog/groups/moderators"}'</span><span class="p">);</span>
+<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">user</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">principals</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="s1">'fxa:natim'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"/buckets/blog/groups/moderators"}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
</div>
<div class="section" id="exemple-d-objets">
<h3>Exemple d’objets</h3>
<div class="section" id="bucket">
<h4>Bucket</h4>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">object</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="k">type</span><span class="p">,</span> <span class="n">parent_id</span><span class="p">,</span> <span class="k">data</span><span class="p">,</span>
- <span class="n">read_principals</span><span class="p">,</span> <span class="n">write_principals</span><span class="p">)</span>
-<span class="k">VALUES</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog'</span><span class="p">,</span>
- <span class="s1">'bucket'</span><span class="p">,</span>
- <span class="k">NULL</span><span class="p">,</span>
- <span class="s1">'{"name": "blog"}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span>
- <span class="s1">'{}'</span><span class="p">,</span> <span class="s1">'{"fxa:alexis"}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">read_principals</span><span class="p">,</span><span class="w"> </span><span class="n">write_principals</span><span class="p">)</span><span class="w"></span>
+<span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'bucket'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="k">NULL</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"name": "blog"}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{}'</span><span class="p">,</span><span class="w"> </span><span class="s1">'{"fxa:alexis"}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
</div>
<div class="section" id="group">
<h4>Group</h4>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">object</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="k">type</span><span class="p">,</span> <span class="n">parent_id</span><span class="p">,</span> <span class="k">data</span><span class="p">,</span>
- <span class="n">read_principals</span><span class="p">,</span> <span class="n">write_principals</span><span class="p">)</span>
-<span class="k">VALUES</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog/groups/moderators'</span><span class="p">,</span>
- <span class="s1">'group'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog'</span><span class="p">,</span>
- <span class="s1">'{"name": "moderators", "members": ['</span><span class="n">fxa</span><span class="p">:</span><span class="n">natim</span><span class="s1">']}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span>
- <span class="s1">'{}'</span><span class="p">,</span> <span class="s1">'{}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">read_principals</span><span class="p">,</span><span class="w"> </span><span class="n">write_principals</span><span class="p">)</span><span class="w"></span>
+<span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/groups/moderators'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'group'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"name": "moderators", "members": ['</span><span class="n">fxa</span><span class="p">:</span><span class="n">natim</span><span class="s1">']}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{}'</span><span class="p">,</span><span class="w"> </span><span class="s1">'{}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
<p>Ce groupe peut être gére par <tt class="docutils literal">fxa:alexis</tt> puisqu’il a la permission
<tt class="docutils literal">write</tt> dans le <em>bucket</em> parent.</p>
</div>
<div class="section" id="collection">
<h4>Collection</h4>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">object</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="k">type</span><span class="p">,</span> <span class="n">parent_id</span><span class="p">,</span> <span class="k">data</span><span class="p">,</span>
- <span class="n">read_principals</span><span class="p">,</span> <span class="n">write_principals</span><span class="p">)</span>
-<span class="k">VALUES</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog/collections/articles'</span><span class="p">,</span>
- <span class="s1">'collection'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog'</span><span class="p">,</span>
- <span class="s1">'{"name": "article"}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span>
- <span class="s1">'{"system.Everyone"}'</span><span class="p">,</span>
- <span class="s1">'{"/buckets/blog/groups/moderators"}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">read_principals</span><span class="p">,</span><span class="w"> </span><span class="n">write_principals</span><span class="p">)</span><span class="w"></span>
+<span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/articles'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'collection'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"name": "article"}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"system.Everyone"}'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"/buckets/blog/groups/moderators"}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
<p>Cette collection d’articles peut être lue par tout le monde,
et gérée par les membres du groupe <tt class="docutils literal">moderators</tt>, ainsi que
@@ -1674,56 +1674,56 @@ et gérée par les membres du groupe <tt class="docutils literal">moderato
</div>
<div class="section" id="records">
<h4>Records</h4>
-<div class="highlight"><pre><span></span><span class="k">INSERT</span> <span class="k">INTO</span> <span class="k">object</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="k">type</span><span class="p">,</span> <span class="n">parent_id</span><span class="p">,</span> <span class="k">data</span><span class="p">,</span>
- <span class="n">read_principals</span><span class="p">,</span> <span class="n">write_principals</span><span class="p">)</span>
-<span class="k">VALUES</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog/collections/articles/records/02f3f76f-7059-4ae4-888f-2ac9824e9200'</span><span class="p">,</span>
- <span class="s1">'record'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog/collections/articles'</span><span class="p">,</span>
- <span class="s1">'{"name": "02f3f76f-7059-4ae4-888f-2ac9824e9200",</span>
-<span class="s1"> "title": "Stocker les permissions", ...}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span>
- <span class="s1">'{}'</span><span class="p">,</span> <span class="s1">'{}'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="k">type</span><span class="p">,</span><span class="w"> </span><span class="n">parent_id</span><span class="p">,</span><span class="w"> </span><span class="k">data</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">read_principals</span><span class="p">,</span><span class="w"> </span><span class="n">write_principals</span><span class="p">)</span><span class="w"></span>
+<span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/articles/records/02f3f76f-7059-4ae4-888f-2ac9824e9200'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'record'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/articles'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{"name": "02f3f76f-7059-4ae4-888f-2ac9824e9200",</span>
+<span class="s1"> "title": "Stocker les permissions", ...}'</span><span class="p">::</span><span class="n">JSONB</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'{}'</span><span class="p">,</span><span class="w"> </span><span class="s1">'{}'</span><span class="p">);</span><span class="w"></span>
</pre></div>
</div>
</div>
<div class="section" id="interroger-les-permissions">
<h3>Interroger les permissions</h3>
-<div class="section" id="id1">
+<div class="section" id="obtenir-la-liste-des-principals-d-un-ace-1">
<h4>Obtenir la liste des “principals” d’un <span class="caps">ACE</span></h4>
<p>Comme vu plus haut, pour vérifier une permission, on fait l’union des
<em>principals</em> requis par les objets hérités, et on teste leur
intersection avec ceux de l’utilisateur:</p>
-<div class="highlight"><pre><span></span><span class="k">WITH</span> <span class="n">required_principals</span> <span class="k">AS</span> <span class="p">(</span>
- <span class="k">SELECT</span> <span class="k">unnest</span><span class="p">(</span><span class="n">principals</span><span class="p">)</span> <span class="k">AS</span> <span class="n">p</span>
- <span class="k">FROM</span> <span class="n">perms</span>
- <span class="k">WHERE</span> <span class="n">ace</span> <span class="k">IN</span> <span class="p">(</span>
- <span class="s1">'/buckets/blog:write'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog:read'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog/collections/article:write'</span><span class="p">,</span>
- <span class="s1">'/buckets/blog/collections/article:read'</span><span class="p">)</span>
- <span class="p">),</span>
- <span class="n">user_principals</span> <span class="k">AS</span> <span class="p">(</span>
- <span class="k">SELECT</span> <span class="k">unnest</span><span class="p">(</span><span class="n">principals</span><span class="p">)</span>
- <span class="k">FROM</span> <span class="k">user</span>
- <span class="k">WHERE</span> <span class="n">id</span> <span class="o">=</span> <span class="s1">'fxa:natim'</span>
- <span class="p">)</span>
- <span class="k">SELECT</span> <span class="k">COUNT</span><span class="p">(</span><span class="o">*</span><span class="p">)</span>
- <span class="k">FROM</span> <span class="n">user_principals</span> <span class="n">a</span>
- <span class="k">INNER</span> <span class="k">JOIN</span> <span class="n">required_principals</span> <span class="n">b</span>
- <span class="k">ON</span> <span class="n">a</span><span class="p">.</span><span class="n">p</span> <span class="o">=</span> <span class="n">b</span><span class="p">.</span><span class="n">p</span><span class="p">;</span>
+<div class="highlight"><pre><span></span><span class="k">WITH</span><span class="w"> </span><span class="n">required_principals</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">unnest</span><span class="p">(</span><span class="n">principals</span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">p</span><span class="w"></span>
+<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">perms</span><span class="w"></span>
+<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">ace</span><span class="w"> </span><span class="k">IN</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog:write'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog:read'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/article:write'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="s1">'/buckets/blog/collections/article:read'</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="p">),</span><span class="w"></span>
+<span class="w"> </span><span class="n">user_principals</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="p">(</span><span class="w"></span>
+<span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">unnest</span><span class="p">(</span><span class="n">principals</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="k">user</span><span class="w"></span>
+<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'fxa:natim'</span><span class="w"></span>
+<span class="w"> </span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">COUNT</span><span class="p">(</span><span class="o">*</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">user_principals</span><span class="w"> </span><span class="n">a</span><span class="w"></span>
+<span class="w"> </span><span class="k">INNER</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">required_principals</span><span class="w"> </span><span class="n">b</span><span class="w"></span>
+<span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">a</span><span class="p">.</span><span class="n">p</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">b</span><span class="p">.</span><span class="n">p</span><span class="p">;</span><span class="w"></span>
</pre></div>
</div>
<div class="section" id="filtrer-les-objets-en-fonction-des-permissions">
<h4>Filtrer les objets en fonction des permissions</h4>
<p>Pour filtrer les objets, on fait une simple intersection de liste
(<em>merci PostgreSQL</em>):</p>
-<div class="highlight"><pre><span></span><span class="k">SELECT</span> <span class="k">data</span>
- <span class="k">FROM</span> <span class="k">object</span> <span class="n">o</span><span class="p">,</span> <span class="k">user</span> <span class="n">u</span>
- <span class="k">WHERE</span> <span class="n">o</span><span class="p">.</span><span class="k">type</span> <span class="o">=</span> <span class="s1">'record'</span>
- <span class="k">AND</span> <span class="n">o</span><span class="p">.</span><span class="n">parent_id</span> <span class="o">=</span> <span class="s1">'/buckets/blog/collections/article'</span>
- <span class="k">AND</span> <span class="p">(</span><span class="n">o</span><span class="p">.</span><span class="n">read_principals</span> <span class="o">&&</span> <span class="n">u</span><span class="p">.</span><span class="n">principals</span> <span class="k">OR</span>
- <span class="n">o</span><span class="p">.</span><span class="n">write_principals</span> <span class="o">&&</span> <span class="n">u</span><span class="p">.</span><span class="n">principals</span><span class="p">)</span>
- <span class="k">AND</span> <span class="n">u</span><span class="p">.</span><span class="n">id</span> <span class="o">=</span> <span class="s1">'fxa:natim'</span><span class="p">;</span>
+<div class="highlight"><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="k">data</span><span class="w"></span>
+<span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="n">o</span><span class="p">,</span><span class="w"> </span><span class="k">user</span><span class="w"> </span><span class="n">u</span><span class="w"></span>
+<span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">o</span><span class="p">.</span><span class="k">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'record'</span><span class="w"></span>
+<span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">o</span><span class="p">.</span><span class="n">parent_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'/buckets/blog/collections/article'</span><span class="w"></span>
+<span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="p">(</span><span class="n">o</span><span class="p">.</span><span class="n">read_principals</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">u</span><span class="p">.</span><span class="n">principals</span><span class="w"> </span><span class="k">OR</span><span class="w"></span>
+<span class="w"> </span><span class="n">o</span><span class="p">.</span><span class="n">write_principals</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">u</span><span class="p">.</span><span class="n">principals</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">u</span><span class="p">.</span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'fxa:natim'</span><span class="p">;</span><span class="w"></span>
</pre></div>
<p>Les listes s’indexent bien, notamment grâce aux <a class="reference external" href="http://www.postgresql.org/docs/current/static/indexes-types.html">index <span class="caps">GIN</span></a>.</p>
</div>
@@ -2021,7 +2021,7 @@ une réponse satisfaisante à ces besoins.</p>
<div class="section" id="le-concept-de-principal">
<h3>Le concept de « principal »</h3>
<p>Un <em>principal</em>, en sécurité informatique, est une entité qui peut être
-authentifiée par un système informatique. <a class="footnote-reference" href="#id2" id="id1">[1]</a> En Français il s’agit
+authentifiée par un système informatique. <a class="footnote-reference" href="#footnote-1" id="footnote-reference-1">[1]</a> En Français il s’agit
du « commettant », l’acteur qui commet l’action (oui, le terme est conceptuel !)</p>
<p>Il peut s’agir aussi bien d’un individu, d’un ordinateur, d’un
service ou d’un groupe regroupant l’une de ces entités, ce qui
@@ -2030,10 +2030,10 @@ est plus large que le classique « <em>user id</em> ».<
<p>Par exemple, un utilisateur est identifié de manière unique lors de la
connexion par le système d’authentification dont le rôle est de
définir une liste de <em>principals</em> pour l’utilisateur se connectant.</p>
-<table class="docutils footnote" frame="void" id="id2" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-1" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>Pour en savoir plus sur les <em>principals</em> :
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-1">[1]</a></td><td>Pour en savoir plus sur les <em>principals</em> :
<a class="reference external" href="https://en.wikipedia.org/wiki/Principal_%28computer_security%29">https://en.wikipedia.org/wiki/Principal_%28computer_security%29</a></td></tr>
</tbody>
</table>
@@ -2042,17 +2042,17 @@ définir une liste de <em>principals</em> pour l’utilisate
<h3>La différence entre rôle et groupe</h3>
<p>De but en blanc, il n’est pas évident de définir précisément la
différence entre ces deux concepts qui permettent d’associer
-des permissions à un groupe de <em>principals</em>. <a class="footnote-reference" href="#id4" id="id3">[2]</a></p>
+des permissions à un groupe de <em>principals</em>. <a class="footnote-reference" href="#footnote-2" id="footnote-reference-2">[2]</a></p>
<p>La différence est principalement sémantique. Mais on peut y voir une
différence dans la « direction » de la relation entre les deux concepts.</p>
<ul class="simple">
<li>Un rôle est une liste de permissions que l’on associe à un <em>principal</em>.</li>
<li>Un groupe est une liste de <em>principals</em> que l’on peut associer à une permission.</li>
</ul>
-<table class="docutils footnote" frame="void" id="id4" rules="none">
+<table class="docutils footnote" frame="void" id="footnote-2" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id3">[2]</a></td><td>Plus d’informations :
+<tr><td class="label"><a class="fn-backref" href="#footnote-reference-2">[2]</a></td><td>Plus d’informations :
<a class="reference external" href="http://stackoverflow.com/questions/7770728/group-vs-role-any-real-difference">http://stackoverflow.com/questions/7770728/group-vs-role-any-real-difference</a></td></tr>
</tbody>
</table>
@@ -2699,16 +2699,16 @@ terme, et que <em>Remote Storage</em> devienne une facette de notre&
<p><a href="http://pouchdb.com/">PouchDB</a> est une bibliothèque JavaScript qui
permet de manipuler des enregistrements en local et de les synchroniser
vers une base distante.</p>
-<div class="highlight"><pre><span></span><code><span class="n">javascript</span>
-<span class="k">var</span> <span class="n">db</span> <span class="o">=</span> <span class="n">new</span> <span class="n">PouchDB</span><span class="p">(</span><span class="s1">'dbname'</span><span class="p">);</span>
+<div class="highlight"><pre><span></span><code><span class="n">javascript</span><span class="w"></span>
+<span class="k">var</span><span class="w"> </span><span class="n">db</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">PouchDB</span><span class="p">(</span><span class="s1">'dbname'</span><span class="p">);</span><span class="w"></span>
-<span class="n">db</span><span class="o">.</span><span class="n">put</span><span class="p">({</span>
- <span class="n">_id</span><span class="p">:</span> <span class="s1">'dave@gmail.com'</span><span class="p">,</span>
- <span class="n">name</span><span class="p">:</span> <span class="s1">'David'</span><span class="p">,</span>
- <span class="n">age</span><span class="p">:</span> <span class="mi">68</span>
-<span class="p">});</span>
+<span class="n">db</span><span class="o">.</span><span class="n">put</span><span class="p">({</span><span class="w"></span>
+<span class="w"> </span><span class="n">_id</span><span class="p">:</span><span class="w"> </span><span class="s1">'dave@gmail.com'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="s1">'David'</span><span class="p">,</span><span class="w"></span>
+<span class="w"> </span><span class="n">age</span><span class="p">:</span><span class="w"> </span><span class="mi">68</span><span class="w"></span>
+<span class="p">});</span><span class="w"></span>
-<span class="n">db</span><span class="o">.</span><span class="n">replicate</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="s1">'http://example.com/mydb'</span><span class="p">);</span>
+<span class="n">db</span><span class="o">.</span><span class="n">replicate</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="s1">'http://example.com/mydb'</span><span class="p">);</span><span class="w"></span>
</code></pre></div>
<p>Le projet a le vent en poupe, bénéficie de nombreux contributeurs,
@@ -3133,33 +3133,33 @@ on the server (so you don’t need to store anything).</p>
finally came up factorizing everything in a library for express, named
<a href="https://github.com/mozilla-services/express-hawkauth">express-hawkauth</a>.</p>
<p>In order to plug it in your application, you’ll need to use it as a middleware:</p>
-<div class="highlight"><pre><span></span><code><span class="n">javascript</span>
-<span class="k">var</span> <span class="n">express</span> <span class="o">=</span> <span class="n">require</span><span class="p">(</span><span class="s2">"express"</span><span class="p">);</span>
-<span class="k">var</span> <span class="n">hawk</span> <span class="o">=</span> <span class="n">require</span><span class="p">(</span><span class="s2">"express-hawkauth"</span><span class="p">);</span>
-<span class="n">app</span> <span class="o">=</span> <span class="n">express</span><span class="p">();</span>
+<div class="highlight"><pre><span></span><code><span class="n">javascript</span><span class="w"></span>
+<span class="k">var</span><span class="w"> </span><span class="n">express</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">require</span><span class="p">(</span><span class="s2">"express"</span><span class="p">);</span><span class="w"></span>
+<span class="k">var</span><span class="w"> </span><span class="n">hawk</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">require</span><span class="p">(</span><span class="s2">"express-hawkauth"</span><span class="p">);</span><span class="w"></span>
+<span class="n">app</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">express</span><span class="p">();</span><span class="w"></span>
-<span class="k">var</span> <span class="n">hawkMiddleware</span> <span class="o">=</span> <span class="n">hawk</span><span class="o">.</span><span class="n">getMiddleware</span><span class="p">({</span>
- <span class="n">hawkOptions</span><span class="p">:</span> <span class="p">{},</span>
- <span class="n">getSession</span><span class="p">:</span> <span class="n">function</span><span class="p">(</span><span class="n">tokenId</span><span class="p">,</span> <span class="n">cb</span><span class="p">)</span> <span class="p">{</span>
- <span class="o">//</span> <span class="n">A</span> <span class="n">function</span> <span class="n">which</span> <span class="k">pass</span> <span class="n">to</span> <span class="n">the</span> <span class="n">cb</span> <span class="n">the</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">algorithm</span> <span class="k">for</span> <span class="n">the</span>
- <span class="o">//</span> <span class="n">given</span> <span class="n">token</span> <span class="n">id</span><span class="o">.</span> <span class="n">First</span> <span class="n">argument</span> <span class="n">of</span> <span class="n">the</span> <span class="n">callback</span> <span class="k">is</span> <span class="n">a</span> <span class="n">potential</span>
- <span class="o">//</span> <span class="n">error</span><span class="o">.</span>
- <span class="n">cb</span><span class="p">(</span><span class="nb nb-Type">null</span><span class="p">,</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="s2">"key"</span><span class="p">,</span> <span class="n">algorithm</span><span class="p">:</span> <span class="s2">"sha256"</span><span class="p">});</span>
- <span class="p">},</span>
- <span class="n">createSession</span><span class="p">:</span> <span class="n">function</span><span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">cb</span><span class="p">)</span> <span class="p">{</span>
- <span class="o">//</span> <span class="n">A</span> <span class="n">function</span> <span class="n">which</span> <span class="n">stores</span> <span class="n">a</span> <span class="n">session</span> <span class="k">for</span> <span class="n">the</span> <span class="n">given</span> <span class="n">id</span> <span class="ow">and</span> <span class="n">key</span><span class="o">.</span>
- <span class="o">//</span> <span class="n">Argument</span> <span class="n">returned</span> <span class="k">is</span> <span class="n">a</span> <span class="n">potential</span> <span class="n">error</span><span class="o">.</span>
- <span class="n">cb</span><span class="p">(</span><span class="nb nb-Type">null</span><span class="p">);</span>
- <span class="p">},</span>
- <span class="n">setUser</span><span class="p">:</span> <span class="n">function</span><span class="p">(</span><span class="n">req</span><span class="p">,</span> <span class="n">res</span><span class="p">,</span> <span class="n">tokenId</span><span class="p">,</span> <span class="n">cb</span><span class="p">)</span> <span class="p">{</span>
- <span class="o">//</span> <span class="n">A</span> <span class="n">function</span> <span class="n">that</span> <span class="n">uses</span> <span class="n">req</span> <span class="ow">and</span> <span class="n">res</span><span class="p">,</span> <span class="n">the</span> <span class="n">hawkId</span> <span class="n">when</span> <span class="n">they</span><span class="s1">'re known so</span>
- <span class="o">//</span> <span class="n">that</span> <span class="n">it</span> <span class="n">can</span> <span class="n">tweak</span> <span class="n">it</span><span class="o">.</span> <span class="n">For</span> <span class="n">instance</span><span class="p">,</span> <span class="n">you</span> <span class="n">can</span> <span class="n">store</span> <span class="n">the</span> <span class="n">tokenId</span> <span class="k">as</span> <span class="n">the</span>
- <span class="o">//</span> <span class="n">user</span><span class="o">.</span>
- <span class="n">req</span><span class="o">.</span><span class="n">user</span> <span class="o">=</span> <span class="n">tokenId</span><span class="p">;</span>
- <span class="p">}</span>
-<span class="p">});</span>
+<span class="k">var</span><span class="w"> </span><span class="n">hawkMiddleware</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hawk</span><span class="o">.</span><span class="n">getMiddleware</span><span class="p">({</span><span class="w"></span>
+<span class="w"> </span><span class="n">hawkOptions</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span><span class="w"></span>
+<span class="w"> </span><span class="n">getSession</span><span class="p">:</span><span class="w"> </span><span class="n">function</span><span class="p">(</span><span class="n">tokenId</span><span class="p">,</span><span class="w"> </span><span class="n">cb</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">A</span><span class="w"> </span><span class="n">function</span><span class="w"> </span><span class="n">which</span><span class="w"> </span><span class="k">pass</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">cb</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">key</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">algorithm</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">the</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">given</span><span class="w"> </span><span class="n">token</span><span class="w"> </span><span class="n">id</span><span class="o">.</span><span class="w"> </span><span class="n">First</span><span class="w"> </span><span class="n">argument</span><span class="w"> </span><span class="n">of</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">callback</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">potential</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">error</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="n">cb</span><span class="p">(</span><span class="nb nb-Type">null</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="n">key</span><span class="p">:</span><span class="w"> </span><span class="s2">"key"</span><span class="p">,</span><span class="w"> </span><span class="n">algorithm</span><span class="p">:</span><span class="w"> </span><span class="s2">"sha256"</span><span class="p">});</span><span class="w"></span>
+<span class="w"> </span><span class="p">},</span><span class="w"></span>
+<span class="w"> </span><span class="n">createSession</span><span class="p">:</span><span class="w"> </span><span class="n">function</span><span class="p">(</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">key</span><span class="p">,</span><span class="w"> </span><span class="n">cb</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">A</span><span class="w"> </span><span class="n">function</span><span class="w"> </span><span class="n">which</span><span class="w"> </span><span class="n">stores</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">session</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">given</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">key</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">Argument</span><span class="w"> </span><span class="n">returned</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">potential</span><span class="w"> </span><span class="n">error</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="n">cb</span><span class="p">(</span><span class="nb nb-Type">null</span><span class="p">);</span><span class="w"></span>
+<span class="w"> </span><span class="p">},</span><span class="w"></span>
+<span class="w"> </span><span class="n">setUser</span><span class="p">:</span><span class="w"> </span><span class="n">function</span><span class="p">(</span><span class="n">req</span><span class="p">,</span><span class="w"> </span><span class="n">res</span><span class="p">,</span><span class="w"> </span><span class="n">tokenId</span><span class="p">,</span><span class="w"> </span><span class="n">cb</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">A</span><span class="w"> </span><span class="n">function</span><span class="w"> </span><span class="n">that</span><span class="w"> </span><span class="n">uses</span><span class="w"> </span><span class="n">req</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">res</span><span class="p">,</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">hawkId</span><span class="w"> </span><span class="n">when</span><span class="w"> </span><span class="n">they</span><span class="s1">'re known so</span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">that</span><span class="w"> </span><span class="n">it</span><span class="w"> </span><span class="n">can</span><span class="w"> </span><span class="n">tweak</span><span class="w"> </span><span class="n">it</span><span class="o">.</span><span class="w"> </span><span class="n">For</span><span class="w"> </span><span class="n">instance</span><span class="p">,</span><span class="w"> </span><span class="n">you</span><span class="w"> </span><span class="n">can</span><span class="w"> </span><span class="n">store</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">tokenId</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">the</span><span class="w"></span>
+<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">user</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="n">req</span><span class="o">.</span><span class="n">user</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tokenId</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
+<span class="p">});</span><span class="w"></span>
-<span class="n">app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/hawk-enabled-endpoint"</span><span class="p">,</span> <span class="n">hawkMiddleware</span><span class="p">);</span>
+<span class="n">app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/hawk-enabled-endpoint"</span><span class="p">,</span><span class="w"> </span><span class="n">hawkMiddleware</span><span class="p">);</span><span class="w"></span>
</code></pre></div>
<p>If you pass the createSession parameter, all non-authenticated requests
@@ -3463,8 +3463,8 @@ ailleurs, pour finalement déployer la chose chez
<p>Après quelques péripéties, j’ai réussi à faire tourner le tout, ça à été
un peu la bataille au départ pour installer virtualenv (j’ai du faire
des changements dans mon <span class="caps">PATH</span> pour que ça puisse marcher), voici mon `.bash_profile`:</p>
-<div class="highlight"><pre><span></span><code><span class="k">export</span> <span class="n">PYTHONPATH</span><span class="o">=~/</span><span class="n">modules</span><span class="o">/</span>
-<span class="k">export</span> <span class="n">PATH</span><span class="o">=$</span><span class="n">HOME</span><span class="o">/</span><span class="n">modules</span><span class="o">/</span><span class="n">bin</span><span class="p">:</span><span class="o">$</span><span class="n">HOME</span><span class="o">/</span><span class="n">modules</span><span class="o">/</span><span class="p">:</span><span class="o">$</span><span class="n">PATH</span>
+<div class="highlight"><pre><span></span><code><span class="k">export</span><span class="w"> </span><span class="n">PYTHONPATH</span><span class="o">=~/</span><span class="n">modules</span><span class="o">/</span><span class="w"></span>
+<span class="k">export</span><span class="w"> </span><span class="n">PATH</span><span class="o">=$</span><span class="n">HOME</span><span class="o">/</span><span class="n">modules</span><span class="o">/</span><span class="n">bin</span><span class="p">:</span><span class="o">$</span><span class="n">HOME</span><span class="o">/</span><span class="n">modules</span><span class="o">/</span><span class="p">:</span><span class="o">$</span><span class="n">PATH</span><span class="w"></span>
</code></pre></div>
<p>Et après y’a plus qu’à installer avec `easy_install`:</p>
@@ -3527,7 +3527,7 @@ PATH=.:\$PATH nc -w1 $(echo %h | sed 's/^.*+//;/:/!s/$/ %p/;s/:/ /&#
</code></pre></div>
<p>On peut donc spécifier des “sauts” ssh du style:</p>
-<div class="highlight"><pre><span></span><code><span class="n">ssh</span> <span class="n">root</span><span class="mf">@91.25.25.25</span><span class="o">+</span><span class="mf">192.168.1.1</span>
+<div class="highlight"><pre><span></span><code><span class="n">ssh</span><span class="w"> </span><span class="n">root</span><span class="mf">@91.25.25.25</span><span class="o">+</span><span class="mf">192.168.1.1</span><span class="w"></span>
</code></pre></div>
<p>Ensuite on peut essayer de rajouter:</p>
@@ -4698,16 +4698,16 @@ $ ant
</code></pre></div>
<p>Here is a simple example of how to use boilerpipe in Java, from their sources</p>
-<div class="highlight"><pre><span></span><code><span class="kn">package</span> <span class="nn">de.l3s.boilerpipe.demo</span><span class="p">;</span>
-<span class="kn">import</span> <span class="nn">java.net.URL</span><span class="p">;</span>
-<span class="kn">import</span> <span class="nn">de.l3s.boilerpipe.extractors.ArticleExtractor</span><span class="p">;</span>
+<div class="highlight"><pre><span></span><code><span class="kn">package</span><span class="w"> </span><span class="nn">de.l3s.boilerpipe.demo</span><span class="p">;</span><span class="w"></span>
+<span class="kn">import</span><span class="w"> </span><span class="nn">java.net.URL</span><span class="p">;</span><span class="w"></span>
+<span class="kn">import</span><span class="w"> </span><span class="nn">de.l3s.boilerpipe.extractors.ArticleExtractor</span><span class="p">;</span><span class="w"></span>
-<span class="kd">public</span> <span class="kd">class</span> <span class="nc">Oneliner</span> <span class="p">{</span>
- <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="p">(</span><span class="kd">final</span> <span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="p">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="p">{</span>
- <span class="kd">final</span> <span class="n">URL</span> <span class="n">url</span> <span class="o">=</span> <span class="k">new</span> <span class="n">URL</span><span class="p">(</span><span class="s">"http://notmyidea.org"</span><span class="p">);</span>
- <span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">ArticleExtractor</span><span class="p">.</span><span class="na">INSTANCE</span><span class="p">.</span><span class="na">getText</span><span class="p">(</span><span class="n">url</span><span class="p">));</span>
- <span class="p">}</span>
-<span class="p">}</span>
+<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Oneliner</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">Exception</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">URL</span><span class="w"> </span><span class="n">url</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">URL</span><span class="p">(</span><span class="s">"http://notmyidea.org"</span><span class="p">);</span><span class="w"></span>
+<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">ArticleExtractor</span><span class="p">.</span><span class="na">INSTANCE</span><span class="p">.</span><span class="na">getText</span><span class="p">(</span><span class="n">url</span><span class="p">));</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
</code></pre></div>
<p>To run it:</p>
@@ -5021,14 +5021,14 @@ unison .vimrc ssh://notmyidea.org:20006/.vimrc
<p>It is also possible to put all the informations in a config file, and
then to only run unison. (fire up vim \~/.unison/default.prf.</p>
<p>Here is my config:</p>
-<div class="highlight"><pre><span></span><code> <span class="na">root</span> <span class="o">=</span> <span class="s">/home/alexis</span>
- <span class="na">root</span> <span class="o">=</span> <span class="s">ssh://notmyidea.org:20006</span>
+<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="na">root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">/home/alexis</span><span class="w"></span>
+<span class="w"> </span><span class="na">root</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">ssh://notmyidea.org:20006</span><span class="w"></span>
- <span class="na">path</span> <span class="o">=</span> <span class="s">.vimrc</span>
- <span class="na">path</span> <span class="o">=</span> <span class="s">dotfiles</span>
- <span class="na">path</span> <span class="o">=</span> <span class="s">dev</span>
+<span class="w"> </span><span class="na">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">.vimrc</span><span class="w"></span>
+<span class="w"> </span><span class="na">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">dotfiles</span><span class="w"></span>
+<span class="w"> </span><span class="na">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">dev</span><span class="w"></span>
- <span class="na">follow</span> <span class="o">=</span> <span class="s">Name *</span>
+<span class="w"> </span><span class="na">follow</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">Name *</span><span class="w"></span>
</code></pre></div>
<p>My vimrc is in fact a symbolic link on my laptop, but I don’t want to
@@ -5344,35 +5344,35 @@ $ gnome-background-generator -p ~/Images/walls -s
</code></pre></div>
<p>Here is a extract of the `—help`:</p>
-<div class="highlight"><pre><span></span><code><span class="n">shell</span>
-<span class="o">$</span> <span class="n">gnome</span><span class="o">-</span><span class="n">background</span><span class="o">-</span><span class="n">generator</span> <span class="o">--</span><span class="n">help</span>
-<span class="n">usage</span><span class="p">:</span> <span class="n">gnome</span><span class="o">-</span><span class="n">background</span><span class="o">-</span><span class="n">generator</span> <span class="p">[</span><span class="o">-</span><span class="n">h</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">p</span> <span class="n">PATH</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">o</span> <span class="n">OUTPUT</span><span class="p">]</span>
- <span class="p">[</span><span class="o">-</span><span class="n">t</span> <span class="n">TRANSITION_TIME</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">d</span> <span class="n">DISPLAY_TIME</span><span class="p">]</span> <span class="p">[</span><span class="o">-</span><span class="n">s</span><span class="p">]</span>
- <span class="p">[</span><span class="o">-</span><span class="n">b</span><span class="p">]</span>
+<div class="highlight"><pre><span></span><code><span class="n">shell</span><span class="w"></span>
+<span class="o">$</span><span class="w"> </span><span class="n">gnome</span><span class="o">-</span><span class="n">background</span><span class="o">-</span><span class="n">generator</span><span class="w"> </span><span class="o">--</span><span class="n">help</span><span class="w"></span>
+<span class="n">usage</span><span class="p">:</span><span class="w"> </span><span class="n">gnome</span><span class="o">-</span><span class="n">background</span><span class="o">-</span><span class="n">generator</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">h</span><span class="p">]</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">p</span><span class="w"> </span><span class="n">PATH</span><span class="p">]</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">o</span><span class="w"> </span><span class="n">OUTPUT</span><span class="p">]</span><span class="w"></span>
+<span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">t</span><span class="w"> </span><span class="n">TRANSITION_TIME</span><span class="p">]</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">d</span><span class="w"> </span><span class="n">DISPLAY_TIME</span><span class="p">]</span><span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">s</span><span class="p">]</span><span class="w"></span>
+<span class="w"> </span><span class="p">[</span><span class="o">-</span><span class="n">b</span><span class="p">]</span><span class="w"></span>
-<span class="n">A</span> <span class="n">simple</span> <span class="n">command</span> <span class="n">line</span> <span class="k">tool</span> <span class="n">to</span> <span class="n">generate</span> <span class="n">an</span> <span class="n">XML</span> <span class="n">file</span> <span class="n">to</span> <span class="n">use</span> <span class="k">for</span> <span class="n">gnome</span>
-<span class="n">wallpapers</span><span class="p">,</span> <span class="n">to</span> <span class="n">have</span> <span class="n">dynamic</span> <span class="n">walls</span>
+<span class="n">A</span><span class="w"> </span><span class="n">simple</span><span class="w"> </span><span class="n">command</span><span class="w"> </span><span class="n">line</span><span class="w"> </span><span class="k">tool</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">generate</span><span class="w"> </span><span class="n">an</span><span class="w"> </span><span class="n">XML</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">use</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">gnome</span><span class="w"></span>
+<span class="n">wallpapers</span><span class="p">,</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">have</span><span class="w"> </span><span class="n">dynamic</span><span class="w"> </span><span class="n">walls</span><span class="w"></span>
-<span class="n">optional</span> <span class="n">arguments</span><span class="p">:</span>
- <span class="o">-</span><span class="n">h</span><span class="p">,</span> <span class="o">--</span><span class="n">help</span> <span class="n">show</span> <span class="n">this</span> <span class="n">help</span> <span class="n">message</span> <span class="ow">and</span> <span class="n">exit</span>
- <span class="o">-</span><span class="n">p</span> <span class="n">PATH</span><span class="p">,</span> <span class="o">--</span><span class="n">path</span> <span class="n">PATH</span> <span class="n">Path</span> <span class="n">to</span> <span class="n">look</span> <span class="k">for</span> <span class="n">the</span> <span class="n">pictures</span><span class="o">.</span> <span class="n">If</span> <span class="n">no</span> <span class="n">output</span> <span class="k">is</span>
- <span class="n">specified</span><span class="p">,</span> <span class="n">will</span> <span class="n">be</span> <span class="n">used</span> <span class="n">too</span> <span class="k">for</span> <span class="n">outputing</span> <span class="n">the</span> <span class="n">dynamic</span><span class="o">-</span>
- <span class="n">wallpaper</span><span class="o">.</span><span class="n">xml</span> <span class="n">file</span><span class="o">.</span> <span class="n">Default</span> <span class="n">value</span> <span class="k">is</span> <span class="n">the</span> <span class="n">current</span>
- <span class="n">directory</span> <span class="p">(</span><span class="o">.</span><span class="p">)</span>
- <span class="o">-</span><span class="n">o</span> <span class="n">OUTPUT</span><span class="p">,</span> <span class="o">--</span><span class="n">output</span> <span class="n">OUTPUT</span>
- <span class="n">Output</span> <span class="n">filename</span><span class="o">.</span> <span class="n">If</span> <span class="n">no</span> <span class="n">filename</span> <span class="k">is</span> <span class="n">specified</span><span class="p">,</span> <span class="n">a</span>
- <span class="n">dynamic</span><span class="o">-</span><span class="n">wallpaper</span><span class="o">.</span><span class="n">xml</span> <span class="n">file</span> <span class="n">will</span> <span class="n">be</span> <span class="n">generated</span> <span class="ow">in</span> <span class="n">the</span>
- <span class="n">path</span> <span class="n">containing</span> <span class="n">the</span> <span class="n">pictures</span><span class="o">.</span> <span class="n">You</span> <span class="n">can</span> <span class="n">also</span> <span class="n">use</span> <span class="s2">"-"</span> <span class="n">to</span>
- <span class="n">display</span> <span class="n">the</span> <span class="n">xml</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">stdout</span><span class="o">.</span>
- <span class="o">-</span><span class="n">t</span> <span class="n">TRANSITION_TIME</span><span class="p">,</span> <span class="o">--</span><span class="n">transition</span><span class="o">-</span><span class="n">time</span> <span class="n">TRANSITION_TIME</span>
- <span class="n">Time</span> <span class="p">(</span><span class="ow">in</span> <span class="n">seconds</span><span class="p">)</span> <span class="n">transitions</span> <span class="n">must</span> <span class="n">last</span> <span class="p">(</span><span class="n">default</span> <span class="n">value</span>
- <span class="k">is</span> <span class="mi">2</span> <span class="n">seconds</span><span class="p">)</span>
- <span class="o">-</span><span class="n">d</span> <span class="n">DISPLAY_TIME</span><span class="p">,</span> <span class="o">--</span><span class="n">display</span><span class="o">-</span><span class="n">time</span> <span class="n">DISPLAY_TIME</span>
- <span class="n">Time</span> <span class="p">(</span><span class="ow">in</span> <span class="n">seconds</span><span class="p">)</span> <span class="n">a</span> <span class="n">picture</span> <span class="n">must</span> <span class="n">be</span> <span class="n">displayed</span><span class="o">.</span> <span class="n">Default</span>
- <span class="n">value</span> <span class="k">is</span> <span class="mi">900</span> <span class="p">(</span><span class="mi">15</span><span class="n">mn</span><span class="p">)</span>
- <span class="o">-</span><span class="n">s</span><span class="p">,</span> <span class="o">--</span><span class="n">set</span><span class="o">-</span><span class="n">background</span> <span class="s1">'''try to set the background using gnome-appearance-</span>
-<span class="s1"> properties</span>
-<span class="s1"> -b, --debug</span>
+<span class="n">optional</span><span class="w"> </span><span class="n">arguments</span><span class="p">:</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">h</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">help</span><span class="w"> </span><span class="n">show</span><span class="w"> </span><span class="n">this</span><span class="w"> </span><span class="n">help</span><span class="w"> </span><span class="n">message</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">exit</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">p</span><span class="w"> </span><span class="n">PATH</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">path</span><span class="w"> </span><span class="n">PATH</span><span class="w"> </span><span class="n">Path</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">look</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">pictures</span><span class="o">.</span><span class="w"> </span><span class="n">If</span><span class="w"> </span><span class="n">no</span><span class="w"> </span><span class="n">output</span><span class="w"> </span><span class="k">is</span><span class="w"></span>
+<span class="w"> </span><span class="n">specified</span><span class="p">,</span><span class="w"> </span><span class="n">will</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">used</span><span class="w"> </span><span class="n">too</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">outputing</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">dynamic</span><span class="o">-</span><span class="w"></span>
+<span class="w"> </span><span class="n">wallpaper</span><span class="o">.</span><span class="n">xml</span><span class="w"> </span><span class="n">file</span><span class="o">.</span><span class="w"> </span><span class="n">Default</span><span class="w"> </span><span class="n">value</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">current</span><span class="w"></span>
+<span class="w"> </span><span class="n">directory</span><span class="w"> </span><span class="p">(</span><span class="o">.</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">o</span><span class="w"> </span><span class="n">OUTPUT</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">output</span><span class="w"> </span><span class="n">OUTPUT</span><span class="w"></span>
+<span class="w"> </span><span class="n">Output</span><span class="w"> </span><span class="n">filename</span><span class="o">.</span><span class="w"> </span><span class="n">If</span><span class="w"> </span><span class="n">no</span><span class="w"> </span><span class="n">filename</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">specified</span><span class="p">,</span><span class="w"> </span><span class="n">a</span><span class="w"></span>
+<span class="w"> </span><span class="n">dynamic</span><span class="o">-</span><span class="n">wallpaper</span><span class="o">.</span><span class="n">xml</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="n">will</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">generated</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">the</span><span class="w"></span>
+<span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="n">containing</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">pictures</span><span class="o">.</span><span class="w"> </span><span class="n">You</span><span class="w"> </span><span class="n">can</span><span class="w"> </span><span class="n">also</span><span class="w"> </span><span class="n">use</span><span class="w"> </span><span class="s2">"-"</span><span class="w"> </span><span class="n">to</span><span class="w"></span>
+<span class="w"> </span><span class="n">display</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">xml</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">stdout</span><span class="o">.</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">t</span><span class="w"> </span><span class="n">TRANSITION_TIME</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">transition</span><span class="o">-</span><span class="n">time</span><span class="w"> </span><span class="n">TRANSITION_TIME</span><span class="w"></span>
+<span class="w"> </span><span class="n">Time</span><span class="w"> </span><span class="p">(</span><span class="ow">in</span><span class="w"> </span><span class="n">seconds</span><span class="p">)</span><span class="w"> </span><span class="n">transitions</span><span class="w"> </span><span class="n">must</span><span class="w"> </span><span class="n">last</span><span class="w"> </span><span class="p">(</span><span class="n">default</span><span class="w"> </span><span class="n">value</span><span class="w"></span>
+<span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="n">seconds</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">d</span><span class="w"> </span><span class="n">DISPLAY_TIME</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">display</span><span class="o">-</span><span class="n">time</span><span class="w"> </span><span class="n">DISPLAY_TIME</span><span class="w"></span>
+<span class="w"> </span><span class="n">Time</span><span class="w"> </span><span class="p">(</span><span class="ow">in</span><span class="w"> </span><span class="n">seconds</span><span class="p">)</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">picture</span><span class="w"> </span><span class="n">must</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">displayed</span><span class="o">.</span><span class="w"> </span><span class="n">Default</span><span class="w"></span>
+<span class="w"> </span><span class="n">value</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="mi">900</span><span class="w"> </span><span class="p">(</span><span class="mi">15</span><span class="n">mn</span><span class="p">)</span><span class="w"></span>
+<span class="w"> </span><span class="o">-</span><span class="n">s</span><span class="p">,</span><span class="w"> </span><span class="o">--</span><span class="n">set</span><span class="o">-</span><span class="n">background</span><span class="w"> </span><span class="s1">'''try to set the background using gnome-appearance-</span><span class="w"></span>
+<span class="s1"> properties</span><span class="w"></span>
+<span class="s1"> -b, --debug</span><span class="w"></span>
</code></pre></div>How to install NGINX + PHP 5.3 on FreeBSD.2010-10-10T00:00:00+02:002010-10-10T00:00:00+02:00tag:blog.notmyidea.org,2010-10-10:/how-to-install-nginx-php-53-on-freebsd.html
<ul>
<li>
@@ -5415,30 +5415,30 @@ the server.</p>
<p>That’s a simple thing in fact, but it could be good to have something
that will work without effort over time.</p>
<p>Here’s a sample of my configuration:</p>
-<div class="highlight"><pre><span></span><code><span class="nt">server</span> <span class="p">{</span>
- <span class="err">server_name</span> <span class="err">ndd</span><span class="p">;</span>
- <span class="err">set</span> <span class="err">$path</span> <span class="err">/path/to/your/files</span><span class="p">;</span>
- <span class="err">root</span> <span class="err">$path</span><span class="p">;</span>
+<div class="highlight"><pre><span></span><code><span class="nt">server</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">server_name</span><span class="w"> </span><span class="err">ndd</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">set</span><span class="w"> </span><span class="err">$path</span><span class="w"> </span><span class="err">/path/to/your/files</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">root</span><span class="w"> </span><span class="err">$path</span><span class="p">;</span><span class="w"></span>
- <span class="err">location</span> <span class="err">/</span> <span class="err">{</span>
- <span class="err">index</span> <span class="err">index.php</span><span class="p">;</span>
- <span class="p">}</span>
+<span class="w"> </span><span class="err">location</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="err">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">index</span><span class="w"> </span><span class="err">index.php</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
- <span class="nt">location</span> <span class="o">~*</span> <span class="o">^.+.(</span><span class="nt">jpg</span><span class="o">|</span><span class="nt">jpeg</span><span class="o">|</span><span class="nt">gif</span><span class="o">|</span><span class="nt">css</span><span class="o">|</span><span class="nt">png</span><span class="o">|</span><span class="nt">js</span><span class="o">|</span><span class="nt">ico</span><span class="o">|</span><span class="nt">xml</span><span class="o">)$</span> <span class="p">{</span>
- <span class="err">access_log</span> <span class="err">off</span><span class="p">;</span>
- <span class="err">expires</span> <span class="err">30d</span><span class="p">;</span>
- <span class="p">}</span>
+<span class="w"> </span><span class="nt">location</span><span class="w"> </span><span class="o">~*</span><span class="w"> </span><span class="o">^.+.(</span><span class="nt">jpg</span><span class="o">|</span><span class="nt">jpeg</span><span class="o">|</span><span class="nt">gif</span><span class="o">|</span><span class="nt">css</span><span class="o">|</span><span class="nt">png</span><span class="o">|</span><span class="nt">js</span><span class="o">|</span><span class="nt">ico</span><span class="o">|</span><span class="nt">xml</span><span class="o">)$</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">access_log</span><span class="w"> </span><span class="err">off</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">expires</span><span class="w"> </span><span class="err">30d</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
- <span class="nt">location</span> <span class="o">~</span> <span class="p">.</span><span class="nc">php</span><span class="o">$</span> <span class="p">{</span>
- <span class="err">fastcgi_param</span> <span class="err">SCRIPT_FILENAME</span> <span class="err">$path$fastcgi_script_name</span><span class="p">;</span>
- <span class="err">fastcgi_pass</span> <span class="err">backend</span><span class="p">;</span>
- <span class="err">include</span> <span class="err">fastcgi_params</span><span class="p">;</span>
- <span class="p">}</span>
-<span class="err">}</span>
+<span class="w"> </span><span class="nt">location</span><span class="w"> </span><span class="o">~</span><span class="w"> </span><span class="p">.</span><span class="nc">php</span><span class="o">$</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">fastcgi_param</span><span class="w"> </span><span class="err">SCRIPT_FILENAME</span><span class="w"> </span><span class="err">$path$fastcgi_script_name</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">fastcgi_pass</span><span class="w"> </span><span class="err">backend</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="err">include</span><span class="w"> </span><span class="err">fastcgi_params</span><span class="p">;</span><span class="w"></span>
+<span class="w"> </span><span class="p">}</span><span class="w"></span>
+<span class="err">}</span><span class="w"></span>
-<span class="nt">upstream</span> <span class="nt">backend</span> <span class="p">{</span>
- <span class="err">server</span> <span class="err">127.0.0.1:9000</span><span class="p">;</span>
-<span class="p">}</span>
+<span class="nt">upstream</span><span class="w"> </span><span class="nt">backend</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
+<span class="w"> </span><span class="err">server</span><span class="w"> </span><span class="err">127.0.0.1:9000</span><span class="p">;</span><span class="w"></span>
+<span class="p">}</span><span class="w"></span>
</code></pre></div>
<p>And that’s it !</p>Pelican, a simple static blog generator in python2010-10-06T00:00:00+02:002010-10-06T00:00:00+02:00tag:blog.notmyidea.org,2010-10-06:/pelican-a-simple-static-blog-generator-in-python.html
diff --git a/how-to-install-nginx-php-53-on-freebsd.html b/how-to-install-nginx-php-53-on-freebsd.html
index d9c6d3c..213ac14 100644
--- a/how-to-install-nginx-php-53-on-freebsd.html
+++ b/how-to-install-nginx-php-53-on-freebsd.html
@@ -55,30 +55,30 @@ the server.
That’s a simple thing in fact, but it could be good to have something
that will work without effort over time.
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- J’ai aussi appris très tôt que si l’État veut écraser un mouvement ,il a recours à tous les moyens, à toutes les ressources qui sont à sa disposition d’une part pour réprimer, d’autre part pour...
-
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- J’ai aussi appris très tôt que si l’État veut écraser un mouvement ,il a recours à tous les moyens, à toutes les ressources qui sont à sa disposition d’une part pour réprimer, d’autre part pour...
-
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- J’ai aussi appris très tôt que si l’État veut écraser un mouvement ,il a recours à tous les moyens, à toutes les ressources qui sont à sa disposition d’une part pour réprimer, d’autre part pour...
-
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- J’ai aussi appris très tôt que si l’État veut écraser un mouvement ,il a recours à tous les moyens, à toutes les ressources qui sont à sa disposition d’une part pour réprimer, d’autre part pour...
-
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- J’ai aussi appris très tôt que si l’État veut écraser un mouvement ,il a recours à tous les moyens, à toutes les ressources qui sont à sa disposition d’une part pour réprimer, d’autre part pour...
-
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- J’ai aussi appris très tôt que si l’État veut écraser un mouvement ,il a recours à tous les moyens, à toutes les ressources qui sont à sa disposition d’une part pour réprimer, d’autre part pour...
-
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- J’ai aussi appris très tôt que si l’État veut écraser un mouvement ,il a recours à tous les moyens, à toutes les ressources qui sont à sa disposition d’une part pour réprimer, d’autre part pour...
-
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
+
+
+
+ J’ai pensé durant de nombreuses années que je savais gérer le conflit, alors que c’était en fait impensé. Ne pas être en conflit signifie parfois s’adapter aux autres, parfois ne pas (assez)...
+
+
+
+
+ Je parle souvent de coopération, que j’imagine comme « un fonctionnement collectif, dans lequel chacun⋅e y trouve son compte ». Or je me rends aujourd’hui compte que cette définition mets de côté...
+
+
+
+
+ Trois semaines de vacances m’ont fait le plus grand bien. Je suis toujours autant étonné par ma capacité à repousser mes limites quand je suis la tête dans le guidon, ce qui était le cas...
+
+
+
+
+ Update du 07/08 : ajout des infos sur le noyau temps réel Faire de la musique electronique à été pour moi l’occasion de réinstaller Windows pour pouvoir utiliser Ableton Live, un des logiciels les...
+
+
+
+
+ Je m’intéresse un peu tardivement a la question des différents vaccins, pour pouvoir mieux comprendre comment ceux cis fonctionnent et quels sont les risques liés. Cette réflexion n’est en aucun...
+
+
+
+
+ En créant la brasserie du Vieux Singe, le fait de créer une page facebook s’est posé comme une évidence. Il s’agit de l’outil de facto pour communiquer avec son « audience ». J’ai donc créé une...
+
+
+
+
+ Si vous pensez que l’aventure est dangereuse, je vous propose d’essayer la routine…. Elle est mortelle ! — Paulo Coelho J’ai toujours attaché une connotation négative à la routine. La routine,...
+
+
+
+
+ Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
+
+
+
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- J’ai aussi appris très tôt que si l’État veut écraser un mouvement ,il a recours à tous les moyens, à toutes les ressources qui sont à sa disposition d’une part pour réprimer, d’autre part pour...
-
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- J’ai aussi appris très tôt que si l’État veut écraser un mouvement ,il a recours à tous les moyens, à toutes les ressources qui sont à sa disposition d’une part pour réprimer, d’autre part pour...
-
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- J’ai aussi appris très tôt que si l’État veut écraser un mouvement ,il a recours à tous les moyens, à toutes les ressources qui sont à sa disposition d’une part pour réprimer, d’autre part pour...
-
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- J’ai aussi appris très tôt que si l’État veut écraser un mouvement ,il a recours à tous les moyens, à toutes les ressources qui sont à sa disposition d’une part pour réprimer, d’autre part pour...
-
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- J’ai aussi appris très tôt que si l’État veut écraser un mouvement ,il a recours à tous les moyens, à toutes les ressources qui sont à sa disposition d’une part pour réprimer, d’autre part pour...
-
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- J’ai aussi appris très tôt que si l’État veut écraser un mouvement ,il a recours à tous les moyens, à toutes les ressources qui sont à sa disposition d’une part pour réprimer, d’autre part pour...
-
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- J’ai aussi appris très tôt que si l’État veut écraser un mouvement ,il a recours à tous les moyens, à toutes les ressources qui sont à sa disposition d’une part pour réprimer, d’autre part pour...
-
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
+ Depuis peu, je me retrouve confronté à mon manque d’envie d’être avec d’autres personnes. Comme si mon quota d’interactions sociales était plus rapidement atteint qu’il y a quelques années. Je ne...
+
+
+
+
+ Nous avons depuis peu une nouvelle recrue à la brasserie. Je m’en réjouis pour plusieurs raisons : Ma charge de travail devrait baisser de manière considérable et me permettre d’avancer sur des...
+
Cela fait un an que j’ai décidé de me déconnecter pour laisser plus de place à d’autres projets. Me détacher de la maintenance de ihatemoney ; Supprimer la plupart des applications sur mes...
-
-
-
- J’ai aussi appris très tôt que si l’État veut écraser un mouvement ,il a recours à tous les moyens, à toutes les ressources qui sont à sa disposition d’une part pour réprimer, d’autre part pour...
-
-
-
-
- Début Février j’ai participé à un Forum Ouvert. Il s’agit de la troisième fois, et cette fois ci j’étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais...
-
@@ -49,7 +49,7 @@ fonctionnalités que l’on attendait depuis longtemps, comme la gestion des
s’empêcher de voir toutes les choses qui doivent toujours être améliorées,
notamment sur la documentation et les performances.
On peut déjà entrevoir à quoi l’écosystème va ressembler, et c’est prometteur.
-Il y a déjà un client JavaScript [3] dont l’objectif est de synchroniser les
+Il y a déjà un client JavaScript [3] dont l’objectif est de synchroniser les
données locales du navigateur avec une instance de Kinto.
N’hésitez vraiment pas à nous solliciter pour discuter avec vous si vous avez
des problématiques proches : nous accueillons avec plaisir toutes sortes de
@@ -58,34 +58,34 @@ la solution ou de la manière de communiquer avec le monde extérieur. Si vous
souhaitez nous contacter, vous pouvez laisser un commentaire ici ou nous
contacter sur le canal #storage sur le réseau IRC de Mozilla.
Et ce n’est que le début ! Le futur se dessine dans notre feuille de route
-[4].
Kinto est un service pour stocker, synchroniser et partager des données
arbitraires, attachées à un compte Firefox (mais le système d’authentification
est pluggable).
diff --git a/service-de-nuages-garantir-lintegrite-des-donnees-via-des-signatures-fr.html b/service-de-nuages-garantir-lintegrite-des-donnees-via-des-signatures-fr.html
index 64c4898..23dd36a 100644
--- a/service-de-nuages-garantir-lintegrite-des-donnees-via-des-signatures-fr.html
+++ b/service-de-nuages-garantir-lintegrite-des-donnees-via-des-signatures-fr.html
@@ -69,8 +69,8 @@ obtenir le même résultat à partir de la même entrée.
une collection JSON. Chaque élément contient un identifiant unique généré sur
le client.
Par exemple, un enregistrement peut ressembler à :
Le hash de la collection est ensuite calculé, signé puis envoyé au serveur
(voir plus bas pour les détails).
diff --git a/service-de-nuages-la-gestion-des-permissions-fr.html b/service-de-nuages-la-gestion-des-permissions-fr.html
index 9ed0513..c408454 100644
--- a/service-de-nuages-la-gestion-des-permissions-fr.html
+++ b/service-de-nuages-la-gestion-des-permissions-fr.html
@@ -55,7 +55,7 @@ une réponse satisfaisante à ces besoins.
Le concept de « principal »
Un principal, en sécurité informatique, est une entité qui peut être
-authentifiée par un système informatique. [1] En Français il s’agit
+authentifiée par un système informatique. [1] En Français il s’agit
du « commettant », l’acteur qui commet l’action (oui, le terme est conceptuel !)
Il peut s’agir aussi bien d’un individu, d’un ordinateur, d’un
service ou d’un groupe regroupant l’une de ces entités, ce qui
@@ -64,10 +64,10 @@ est plus large que le classique « user id ».
Par exemple, un utilisateur est identifié de manière unique lors de la
connexion par le système d’authentification dont le rôle est de
définir une liste de principals pour l’utilisateur se connectant.
@@ -76,17 +76,17 @@ définir une liste de principals pour l’utilisateur se conne
La différence entre rôle et groupe
De but en blanc, il n’est pas évident de définir précisément la
différence entre ces deux concepts qui permettent d’associer
-des permissions à un groupe de principals. [2]
diff --git a/service-de-nuages-perspectives-pour-lete-fr.html b/service-de-nuages-perspectives-pour-lete-fr.html
index 2e334ad..ffebacf 100644
--- a/service-de-nuages-perspectives-pour-lete-fr.html
+++ b/service-de-nuages-perspectives-pour-lete-fr.html
@@ -105,7 +105,7 @@ concept repose sur *Remote Storage*,
mais pour l’instant les cas d’utilisations ne se sont pas encore présentés officiellement.
-
+
À venir
Nous serons probablement amenés à introduire la gestion de la concurrence dans
le client JS, en complément de ce qui a été fait sur le serveur, pour permettre
@@ -120,17 +120,17 @@ que [1].
+relativement longs (ex. règles de securité, dictionnaires, traductions, …) [1].
Il s’agit de données JSON et binaire qui doivent être versionnées et synchronisées par
les navigateurs (lecture seule).
Il y a plusieurs outils officiels qui existent pour gérer ça (Balrog, Shavar, …),
et pour l’instant, aucun choix n’a été fait. Mais lors des conversations avec
l’équipe en charge du projet, ce fût vraiment motivant de voir que même pour
ce genre de besoins internes, Kinto est tout aussi pertinent !
La bonne nouvelle c’est que toutes les fonctionnalités third-party qui ont
été intégrées récemment vont redevenir des add-ons \o/.
@@ -144,7 +144,7 @@ un prototype pour améliorer Awesome bar, qui fusionnerait Nous ne pouvons pas en dire beaucoup plus pour l’instant, mais les fonctionnalités
de collections d’enregistrements partagées entre utilisateurs de Kinto
correspondent parfaitement à ce qui est envisagé pour le futur du navigateur :)
-
+
À venir
Nous serons donc probablement amenés, avant de la fin de l’année, à introduire des
fonctionnalités d’indexation et de recherche full-text (comprendre ElasticSearch).
@@ -166,7 +166,7 @@ ou un équivalent à Alexa.com Top 500 pour fournir la complétion d
interroger le moteur de recherche.
L’exercice pourrait être poussé jusqu’à la synchronisation d’états React
entre périphériques (par exemple pour les onglets).
-
+
À venir
Si browser.html doit stocker des données de navigation, il faudra ajouter
des fonctionnalités de chiffrement sur le client JS. Ça tombe bien, c’est un
diff --git a/service-de-nuages-pourquoi-avons-nous-fait-cliquet.html b/service-de-nuages-pourquoi-avons-nous-fait-cliquet.html
index 8d9450a..d902881 100644
--- a/service-de-nuages-pourquoi-avons-nous-fait-cliquet.html
+++ b/service-de-nuages-pourquoi-avons-nous-fait-cliquet.html
@@ -104,7 +104,7 @@ d’écriture sur une collection d’enregistrements.
La synchronisation : une série de leviers pour récupérer et renvoyer des
changements sur les données, sans perte ni collision, en utilisant les timestamps.
Les permissions : les droits d’un utilisateur sur une collection ou un enregistrement
-(encore frais et sur le point d’être documenté) [1].
+(encore frais et sur le point d’être documenté) [1].
Opérations par lot: une URL qui permet d’envoyer une série de requêtes
décrites en JSON et d’obtenir les réponses respectives.
@@ -126,17 +126,17 @@ de Firefox Sync pour la gestion de la concurrence et de l’«
Dans un monde idéal, ce protocole serait versionné, et formalisé dans une RFC.
En rêve, il existerait même plusieurs implémentations avec des technologies différentes
-(Python, Go, Node, etc.). [2]
@@ -144,7 +144,7 @@ En rêve, il existerait même plusieurs implémentations avec des technologies d
Le toolkit
Choix techniques
-
Cliquet implémente le protocole en Python (2.7, 3.4+, pypy), avec Pyramid[3].
+
Cliquet implémente le protocole en Python (2.7, 3.4+, pypy), avec Pyramid[3].
Pyramid est un framework Web qui va prendre en charge tout la partie HTTP,
et qui s’avère pertinent aussi bien pour des petits projets que des plus ambitieux.
Cornice est une extension de Pyramid, écrite en partie par Alexis et Tarek,
@@ -157,10 +157,10 @@ rigoureux, gérer les entêtes CORS, fournir la valida
Cliquet utilise les deux précédents pour implémenter le protocole et fournir
des abstractions, mais on a toujours Pyramid et Cornice sous la main pour
aller au delà de ce qui est proposé !
Au tout début nous avons commencé une implémentation avec Python-Eve
(Flask), mais n’étions pas satisfaits de l’approche pour la configuration
de l’API. En particulier du côté magique.
@@ -252,18 +252,18 @@ avec Colander, et ensuite déclarer une resource:
Désormais, la resource CRUD est disponible sur /v1/bookmarks, avec toutes
les fonctionnalités de synchronisation, filtrage, tri, pagination, timestamp, etc.
De base les enregistrements sont privés, par utilisateur.
La colonne parent_id permet de savoir à qui appartient l’objet
(e.g. groupe d’un bucket, collection d’un bucket, record d’une
@@ -152,53 +152,53 @@ collection, …).
Cette collection d’articles peut être lue par tout le monde,
et gérée par les membres du groupe moderators, ainsi que
@@ -206,56 +206,56 @@ et gérée par les membres du groupe moderators
Comme vu plus haut, pour vérifier une permission, on fait l’union des
principals requis par les objets hérités, et on teste leur
intersection avec ceux de l’utilisateur:
Les listes s’indexent bien, notamment grâce aux index GIN.
diff --git a/status-board.html b/status-board.html
index 71731f1..e3f54c8 100644
--- a/status-board.html
+++ b/status-board.html
@@ -67,8 +67,8 @@ ailleurs, pour finalement déployer la chose chez
Après quelques péripéties, j’ai réussi à faire tourner le tout, ça à été
un peu la bataille au départ pour installer virtualenv (j’ai du faire
des changements dans mon PATH pour que ça puisse marcher), voici mon `.bash_profile`:
diff --git a/whats-hawk-and-how-to-use-it.html b/whats-hawk-and-how-to-use-it.html
index 70e56c3..316ef34 100644
--- a/whats-hawk-and-how-to-use-it.html
+++ b/whats-hawk-and-how-to-use-it.html
@@ -160,33 +160,33 @@ on the server (so you don’t need to store anything).
finally came up factorizing everything in a library for express, named
express-hawkauth.
In order to plug it in your application, you’ll need to use it as a middleware: