PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Politique du Netz : Deleuze pour les développeurs : mixtes et agencements

lundi 10 décembre 2012 à 23:56

Si vous voulez vraiment comprendre la technologie actuelle, vous devriez vous familariser avec la philosophie de Gilles Deleuze. Malheureusement pour les technophiles, elle est ancrée dans une tradition et un style d’écriture probablement opaque pour eux. Dans cette série de billets, j’essaie l’auteur essaie d’expliquer Deleuze dans des termes compréhensibles par des  programmeurs. Voici le premier de la série.

Des philosophes grecs, comme Démocrite, soutenaient qu’il existait des ἄτομος. Des « insécables ».« ἄ »  signifiant « ne peut » et « τέμνω » « couper ».

C’était la plus petite chose existante. Vous ne pouviez les couper en deux. Tout était fait entièrement d’atomes.

Et devinez quoi ? La science moderne a trouvé des choses plus petites que les atomes tels que Démocrite les concevait.

Sacrebleu ! En tout cas, ce qui est sûr, c’est que certaines choses sont constituées d’autres choses, plus petites. Ça c’est certain. Nous ne savons toujours pas quels sont les composants élémentaires, mais parler de mixtes est un pari assez sûr. Même si les atomes sont constitués de plus petits éléments, nous savons qu’en tout cas ils forment des molécules et des corps plus grands. Ils sont entre deux, mixtes.

Alors comment peut-on parler de mixtes ? Un des outils fondamentaux du programmeur, c’est l’abstraction. Donc on peut décider q’un mixte est une boîte noire, et le traiter comme une entité, sans se soucier de ce qu’on a mis dedans.

C’est bien, c’est pratique mais il y a un problème : quand on commence à penser à une collection de choses comme juste une chose, on manque alors beaucoup de détails importants. Comme nous le savons, toutes les abstractions sont faillibles, alors en quoi une boîte noire est-elle faillible ?

Pensez à votre corps : c’est un dispositif complexe. Il est fait d’organes et d’une peau qui les enveloppe. Le tout est une boîte noire si on ne l’ouvre pas. Si nous avions vécu il y a quelques centaines d’années, parler de boîte noire pour le corps aurait vraiment été approprié. Après tout, si vous enlevez son cœur à quelqu’un, il meurt, sans que vous sachiez exactement pourquoi. La boîte a besoin de toutes ses parties. Aujourd’hui, les choses ont un peu changé. On peut transplanter un cœur, et il existe même des cœurs artificiels. Quelqu’un avec un cœur artificiel n’est pas exactement la même personne qu’avant, mais ça reste une personne. Penser un corps comme un tout n’est plus aujourd’hui une abstraction pertinente.

Éloignons-nous  de la biologie et considérons à présent les applications web. Voici le diagramme d’architecture d’un service web typique:

Agencement d'un serveur web typique

Agencement d’un serveur web typique

Ça a l’air normal, non ? Modifions-le un peu.

Agencement de ce même serveur, légèrement modifié

Agencement de ce même serveur, légèrement modifié

C’est le même service, n’est-ce pas ? Nous avons introduit quelques esclaves de base de données et un reverse proxy, qui nous permet d’enlever un des serveurs d’applis. D’un certain point de vue, ce service est équivalent au premier ; d’un autre, c’est différent : Il y a un composant supplémentaire, et ce composant crée plus de complexité. Nous aurons peut-être besoin de recruter un DBA et quelqu’un de talentueux pour blinder les confs. En d’autres termes, de nouvelles compétences sont nécessaires.

Alors comment appelle-t-on cette chose ? Un agencement. C’est constitué de plus petits agencements ; après tout, notre application peut utiliser le pattern Reactor, le modèle du worker Unicorn ou le modèle de threads de la JVM.

Selon le philosophe Levi Bryant, « Les agencements sont composés d’éléments ou d’objets hétérogènes qui entrent en relation les uns avec les autres »

Dans la métaphore du corps, ce sont les organes, et dans le diagramme système, ce sont les serveurs d’application, bases de données et files d’attente de tâches. Les agencements sont aussi des «objets» dans ce contexte, donc vous pouvez penser n’importe lequel de ces objets comme étant fait d’autres objets. Mais penser que tous ces objets forment un tout, comme une boîte noire, est pour nous incorrect, ou au mieux une abstraction erronée. Ces mixtes sont fait d’autres éléments que nous savons décomposer.

Regardons cet autre excellent exemple d’agencement : Internet. Les ordinateurs s’y connectent, déconnectent, reconnectent. Ils peuvent apparaître par intermittence ou bien rester là pour longtemps. Internet reste Internet même quand votre ordinateur est éteint. Mais nous en parlons comme d’un tout. C’est ce que Deleuze désigne par le terme d’agencement.

Il y a une bonne raison pour l’utilisation du terme générique d’« objet » ou « élément » par Bryant quand vous parlez d’agencement : les objets peuvent être des gens, des idées ou des parties corporelles. C’est là où l’idée informatique de système se distingue de celle d’agencement : vous pouvez intégrer vos utilisateurs dans la notion flexible d’agencement, c’est plus difficile quand vous parlez d’un système.

Et alors ? Et bien je voulais introduire ces termes élémentaires de mixtes et d’agencements et cette manière de raisonner. Ce sont des patrons de raisonnement. Des diagrammes. Dans les billets à venir, je vais utiliser ce patron de raisonnement pour m’intéresser à des problèmes particuliers, mais il vous fallait d’abord comprendre les termes de base.

Article original de Steve Klabnik

Vous pouvez aimer la page Facebook du blog, suivre ses rédacteurs Paul Neitse et Loïc Grobol sur Twitter et vous abonner à son flux RSS.

Mais surtout, n'hésitez pas à commenter ci-dessous et participer aux traductions ou à faire un don pour remercier celles déjà faites ! Toute aide est la bienvenue :)

Gravatar de Politique du Netz
Original post of Politique du Netz.Votez pour ce billet sur Planet Libre.

François : Format d’écriture pour petites quantités de données

lundi 10 décembre 2012 à 17:07

Il est fréquent d’avoir à manipuler des données qui sont trop nombreuses pour être traitées à la calculatrice, et pas assez pour mettre en place des fichiers binaires complexes. A vrai dire, c’est 99% des cas chez moi. Le big data est à la mode, les petites quantités sont mon quotidien. Je n’ai rien contre netcdf, mais c’est franchement sur dimensionné, sans compter que les formats binaires, ce n’est jamais pratique pour les petits usages.

Il y a les gens qui utilisent des tableurs, et il y a les autres comme moi qui n’aiment pas ce genre d’outil trop étriqué. Alors, les premières fois (il y a toujours une première fois), j’ai écris mes données dans un fichier texte, j’ai écris un parseur qui lit ligne par ligne, et je stockais ça dans un tableau. Je travaillais avec les données pour ensuite écrire les résultats dans stdout ou un fichier. C’est bien, mais trop long et trop fastidieux.

Ensuite, j’ai découvert les fichiers .ini. C’est normalement destiné à la configuration, mais ça peut faire son job. Pour ceux qui voudraient essayer : non, je n’écrierai pas de l’xml à la main.

Entre temps, j’ai découvert YAML pour yet another markup language. C’est lisible par tout un tas de langage dont python, ce qui est bien quand on veut faire du calcul scientifique rapide et efficace. Il y a sans doute tout un tas d’autres usages qui ne sont pas les miens.

Voici un fichier avec des données :

lame1:
    epaisseur: 3
    largeur: 10
    longueur: 100
    masse: 50
lame2:
    epaisseur: 4
    largeur: 20
    longueur: 300
    masse: 200

Le problème est simple : j’ai des lames au labo, je dois les caractériser. J’ai pris les dimensions et les poids. Je commence par deux, mais je serai amené à en ajouter d’autre au fur et à mesure de mes pérégrinations. Disons que je veux connaitre la densité.

import yaml
with open('data.ml', 'r') as data:
    doc =  yaml.load(data)
    for lame in doc:
        masse = (doc[lame]['masse'])
        epaisseur = (doc[lame]['epaisseur'])
        largeur = (doc[lame]['largeur'])
        longueur = (doc[lame]['longueur'])

        densite = masse/(epaisseur*largeur*longueur)

        print("Densité de la {0}: {1}".format(lame, densite))
 

Je vois pas mal d’avantage. Mon fichier est bien structuré, donc lisible. C’est du texte, donc versionable, facilement éditable, interopérable, durable, mangeable

L’exemple est ici simplet, le format yaml et son utilisation avec python sont illustrés ici.


Gravatar de François
Original post of François.Votez pour ce billet sur Planet Libre.

Articles similaires

Ploum : Le monde selon Google

lundi 10 décembre 2012 à 10:52

This post is also available in English.

Que feriez-vous si vous aviez à votre disposition des ressources et une richesse pratiquement illimitée ? La possibilité d'embaucher les plus grands génies de votre temps, de disposer de toute la technologie imaginable ?

Pour une majorité des grandes entreprises de la fin de la période industrielle, la réponse fut « faire encore plus d'argent, accumuler encore plus de richesses ». Quand on y pense, c'était un peu balot. Pas étonnant que les puissants de cette époque aient été sur le point de foutre le monde en l'air.

Google fut l'exception qui se dégagea. Chez Google, on se contentait de dépenser l'argent pour faire les trucs les plus chouettes possibles, ceux que les patrons avaient envie d'avoir. Forcément, une petite fraction des projets finissaient toujours par rapporter de l'argent. Mais ce n'était pas le but premier.

Logo Google

À son commencement, alors que toutes les entreprises essayaient de créer un site web et d'y garder le plus de visiteurs, Google lança le sien où les utilisateurs devaient passer le moins de temps possible et trouver, ailleurs, ce qu'ils cherchaient. Cela ne pouvait pas être rentable.

Lorsque l'email atteignit son apogée et que les logiciels rivalisèrent en fonctions et en ingéniosité, Google décida de faire une interface simplifiée et uniquement accessible dans un navigateur. Mais avec, gratuitement, un espace virtuellement illimité. Cela ne pouvait pas être rentable.

Vous avez sans doute visité le musée de la technologie. Vous y avez vu le premier véritable smartphone, l'Apple Iphone de 2007. À cette époque, les documents attestent d'une rumeur misant sur une réaction de Google et le lancement d'un Google phone.

Surprise et déception : Google se contenta de publier, gratuitement et sous licence open source, un système d'exploitation pour smartphones : Android. Pourtant ce sont les ventes de téléphones qui faisaient de l'argent. L'idée de Google ne pouvait pas être rentable.

Pourtant, Android devint en moins de dix ans le standard de facto de l'informatique individuelle, sur tous les types d'équipement depuis la télévision géante à l'oreillette. Des fabricants de téléphone qui se pavanaient, il ne reste à présent que quelques constructeurs se faisant concurrence avec des marges de plus en plus serrées.

Google récidiva avec Google Wallet. Plutôt que de rentrer en guerre avec les grands noms comme VISA ou Master Card, il se contenta de proposer un moyen de paiement en ligne qui utilisait justement les cartes de crédit existantes. VISA et les autres y virent une coopération plutôt que de la concurrence.

Mais les échanges de Google Wallet à Google Wallet devinrent bientôt tellement simples que les cartes de crédit périclitèrent. Il suffisait en effet de mettre deux téléphones en contact pour initier une transaction, pour se prêter quelques euros ou pour régler l'addition dans un bar.

Lorsque certaines entreprises offrirent de payer directement les employés sur les comptes Google Wallet, les gouvernements tentèrent d'intervenir. Google se plia à toutes leurs exigences mais commença au même moment à accepter les paiements en bitcoin. Petit à petit, l'économie se passa des états, s'affranchit des frontières, rendant obsolètes des concepts tels que le PIB ou la banque centrale.

Des sites et des services web virent le jour. Il y eu Flattr pour les micros dons, KissKissBankBank pour le microfinancement et d'autres pour les micros crédits. On a appelé cela le P2P banking. Vous vouliez construire une maison ou lancer une entreprise ? Vous empruntiez à des amis et des amis d'amis, chacun fixant son propre taux en fonction de son affinité avec votre projet ou de manière générique. Tout étant géré de manière automatique, la plupart ne savaient même pas à qui ils prêtaient. Tout au plus avaient-ils fixé le montant d'intérêt et la liquidité qu'ils exigeaient de ce qu'ils avaient entreposé sur tel ou tel service.

Comme l'industrie musicale avant lui, le secteur bancaire ne s'est pas laissé faire face à cette concurrence déloyale. À force de lobbying, de corruption, de lois iniques et de procès scandaleux, ils réussirent à prolonger leur agonie pendant près de vingt ans avant de disparaître dans l'opprobre la plus totale. À peine moins rapidement que les états.

En effet, voyant la plupart des transactions financières leur échapper, les gouvernements ne surent plus quoi taxer et firent dans un premier temps front commun avec les banques. Ils durent néanmoins réduirent leur train de vie. Les administrations fondirent comme neige au soleil au gré des crises, se simplifiant de plus en plus, coupant dans le superflu.

Mais les états finirent par s'adapter, se transformant en fédérations de régions et de villes, elles mêmes fédérations de bourgs et de quartiers. La fameuse taxe de propriété fut instaurée. Que vous soyez propriétaire d'une maison, d'une œuvre d'art, d'un cheval, d'une voiture de sport, d'un bijou ou d'une société, vous êtes taxé à l'échelle de sa valeur déclarée aux assurances.

Vous pouvez bien entendu sous-estimer votre bien voire ne pas prendre d'assurance du tout. Mais en cas de sinistre, aucune aide à espérer. Les resquilleurs sont donc rares. De toutes façons, si vous êtes propriétaire d'un bien qui vaut la peine d'être assuré, c'est que vous avez déjà un certain confort. Et la taxe sera intrinsèquement juste vu que proportionnelle à votre richesse.

Aujourd'hui, je vois directement dans mes lunettes la route à suivre pour aller chez un ami, mon agenda, mes nouveaux messages, mon flux de nouvelles, mes livres et quelques jeux auxquels je joue en courant dans le parc. Je dois sauter pour attraper des bonus que je suis le seul à voir, faire des pointes de vitesse quand un monstre me poursuit : c'est excellent pour ma condition physique.

Google Glass

Lorsque j'ai un rendez-vous, mon agenda calcule automatiquement la meilleure manière de s'y rendre en fonction de mon temps libre et de la météo. Si la voiture se révèle la meilleure option, je sais qu'elle m'attendra devant ma porte à l'heure optimale. La voiture conduira seule selon l'itinéraire idéal et retournera à la station de recharge la plus proche après m'avoir débarqué. Inutile de dire que les bus ont complètement disparu. Les trains ne sont utilisés que pour les moyennes ou longues distances Et posséder sa voiture personnelle relève d'un snobisme démodé.

Mais de toutes façons, je ne m’occupe de rien, ce sont des détails d’implémentation qui ne m’intéressent pas. Je dis juste où je veux être et à quelle heure, je choisis mon hôtel parmi plusieurs propositions si c’est nécessaire et je suis les instructions de mes lunettes. Je sors de la voiture, j’embarque dans un train grande vitesse ou un avion, je ressors, prends un métro et marche un quart d’heure. Je fais confiance à Google pour trouver le plus rapide et le moins cher entre toutes les alternatives. D’ailleurs, le système a bien compris que j’aimais la marche à pieds et favorise ce mode de déplacement si le temps le permet. Et si une ondée soudaine apparait, je sais qu’une voiture passera automatiquement me prendre.

Parfois, quand je monte dans la voiture, j'y trouve l'une ou l'autre personne. Le système optimise en effet les déplacements de tous les utilisateurs et je n'ai pas pris l'abonnement « exclusif » de Cambio car il est fort cher. Mais c'est sympa, cela me permet de discuter, de rencontrer des gens de la région. J'ai déjà ajouté de cette manière plusieurs personnes à mon cerle « Gens du quartier ».

Cela me plait de consulter le flux et d'y trouver, de temps en temps, des nouvelles de personnes avec qui j'ai partagé quelques trajets. Grâce à ce cercle, j'ai organisé l'année passée une fête de quartier. Je me suis contenté de créer l'évènement sans date particulière et avec une brève description, invitant toutes les personnes à proximité. Les suggestions ont fusé, certains se sont dévoués pour le matériel, d'autres pour la nourriture. La date s'est fixée automatiquement de manière à satisfaire le plus grand nombre. Même la participation aux frais a été automatiquement calculée équitablement et s’est versée automatiquement, après un clic d’acceptation, aux personnes qui avaient avancé l’argent.

Le montant m'a d'ailleurs paru dérisoire. Mais il faut avouer que les fins de mois difficiles sont un mauvais souvenir, la taxe sur la propriété dissuadant des achats inconsidérés. Faisant partie d'un site d'échange de matériel, je sais qu'en prêtant ma tondeuse de temps en temps, j'ai accès à tous les autres accessoires nécessaires quand j'en ai besoin dans ma maison. Du coup, je préfère investir dans des places de concerts, le visionnage d'un film en famille ou la lecture d'un livre. Bref, des achats qui m'offrent des souvenirs et ne prennent pas une place inutile.

De temps en temps, je me fais plaisir et achète une œuvre d'art pour la murale du salon. J'aime la changer régulièrement même si cela coûte cher. Et si ma femme n'apprécie pas, je reviens en un clic à l'ancienne, profitant de ma nouvelle acquisition en son absence. Il faut avouer que, dans notre salon, tout un mur est peint à l'encre électronique. Une folie ! Je dois d'ailleurs le déclarer à l'assurance sans tarder.

Étant féru d'histoire, je ne peux qu'admirer l'influence de Google sur notre monde. En moins d'un siècle, nous avons connu la réduction des états et une diminution conséquente des conflits, la disparition de la finance sauvage et avec elle d'une grande partie de la pauvreté, une limitation drastique de la pollution et de la consommation à outrance.

Bref, à lui seul Google nous a sortis de la période industrielle, de ce monde qui ne vivait que pour l'absurde croissance et le rendement. Nous sommes dans une nouvelle ère, l'ère Google.

Quand j'y réfléchis, je vois une ombre au tableau. Une petite chose qui me chiffonne et dont, jusqu'à présent, je n'ai pas trouvé d'équivalent historique. Un petit nuage qui est présent dans le subconscient de chacun mais qu'on préfère ne pas voir.

Toute ma vie est sur Google. Mon argent, mon histoire, mes photos, mes souvenirs, mes livres, mon identité, mes relations. Même un simple déplacement ou un accès à mon dossier administratif nécessite mon compte Google.

Et depuis ce soir, quand j'essaie de me connecter, je vois un message « Votre compte a été désactivé ».

Ce n'est sans doute qu'une simple erreur temporaire mais, honnêtement, je ne sais pas trop quoi en penser. J'attends que cela soit résolu pour appeler mes amis et en discuter.



Images par Robert Scoble et Antonio Zugaldia
This post is also available in English.


Flattr our API Documentation

Gravatar de Ploum
Original post of Ploum.Votez pour ce billet sur Planet Libre.

Articles similaires

crowd42 : WCIT 2012, un sommet pour réguler Internet et instaurer la censure

lundi 10 décembre 2012 à 03:00

Que pensez-vous d’une install party dans les locaux de Microsoft ? D’une conférence sur la lutte contre les paradis fiscaux au Luxembourg ? Ça vous parait absurde ce que je raconte ? Et pourtant, dans une certaine mesure, c’est ce qui vient de se produire avec le Congrès mondial sur les technologies de l’information (WCIT) qui se tient à Dubaï dans les Émirats Arabes Unis. Organiser une conférence dans un bled qui a légiféré les pires lois liberticides sur Internet (le chiffrement des messages est interdit par exemple), c’est limite de la provocation.

Donc déjà, rien qu’avec le pays hôte de ce sommet, il y avait de quoi me faire craindre le pire, mais quand j’ai lu dans un article de ZDnet, que la Russie, la Chine, l’Algérie, l’Égypte, l’Arabie Saoudite, le Soudan et les Émirats Arabes, que des pays qui promeuvent les droits de l’homme et la liberté d’expression hein, ont soumis une nouvelle proposition concernant la révision du Règlement des Télécommunications Internationales, le traité qui définit comment doivent fonctionner les réseaux nationaux et internationaux, je me suis dit que ça y est, cette fois on est vraiment foutu. En gros ce qu’ils souhaitent,c’est de mettre Internet sous le contrôle des gouvernements.

Si certains d’entre vous, ne voient pas où est le problème, voilà quelques éléments qui les aideront à comprendre le danger que ça représente. Tout d’abord, ce sommet se tient dans une opacité totale (ainsi que les réunions de préparation qui l’ont précédé), et bien évidemment aucun document n’est rendu public. Des manières qui rappellent étrangement ACTA.

Le deuxième point alarmant, c’est que ce congrès mondial exclut tous les autres acteurs d’Internet : associations et ONG de défense des réseaux et des libertés numériques style EFF, les entreprises du secteur privé… etc. Mais le plus inquiétant, c’est sans aucun doute les pays dont émanent cette proposition, et quand on sait les événements qui les ont secoué ces deux dernières années (printemps arabe, manifestations réprimées au Tibet…), on devine facilement leurs intentions, même s’ils essaient de les dissimuler derrière des motifs comme la lutte anti-terroriste, pédophilie ou encore la protection des droits d’auteurs, comme en atteste l’article 8A.4 :

les États ne doivent pas restreindre l’accès à Internet sauf dans les cas où la souveraineté nationale, la sécurité nationale, l’intégrité territoriale pouvaient être remise en cause

 Bref, on est dans un deep shit.

source :

http://www.zdnet.com/wcit-12-leak-shows-russia-china-others-seek-to-define-government-controlled-internet-7000008509/
http://arstechnica.com/tech-policy/2012/12/authoritarian-regimes-push-for-larger-itu-role-in-dns-system/
http://www.france24.com/fr/20121203-wcit-dubai-internet-regulation-irt-censure-google-mozilla-lobbying-etat-sommet-mondial-telecommunication
crédit photo

Cet article WCIT 2012, un sommet pour réguler Internet et instaurer la censure est apparu en premier sur crowd42.

flattr this!

Gravatar de crowd42
Original post of crowd42.Votez pour ce billet sur Planet Libre.

fredg : Test d'installation d'une base de données PostgreSQL

lundi 10 décembre 2012 à 00:00

PostgreSQL est un système de gestion de base de données relationnelle et objet (SGBDRO), considéré par beaucoup comme le SGDB Open Source de référence.

Une fois installée sur un nouveau système il est bon de réaliser un petit test avant d'y importer ses données.

Groupe/Utilisateur

Le service ne doit pas tourner avec les droits root, il est préférable de créer un utilisateur et un groupe dédiés. Sur un système Slackware, il est conseillé d'utiliser ceci :

postgresql
==========
User:   postgres    UID: 209    GID: 209
Group:  postgres                GID: 209

Voici un petit script qui vérifiera si tout est ok et/ou vous créera tout ça (script fourni dans le paquet Salix).

#!/bin/sh
if [ $(id -u) -ne 0 ]; then
    echo "you must be root"
    exit 1
fi
. /etc/postgresd.conf
grep -q "^$PGGROUP:" /etc/group
if [ $? -ne 0 ]; then
    groupadd -g 209 $PGGROUP
fi
grep -q "^$PGUSER:" /etc/passwd
if [ $? -ne 0 ]; then
    useradd -u 209 -d $PGHOME -m -k /dev/null -g $PGGROUP $PGUSER
fi
chmod u=rwx,go= $PGHOME
su - $PGUSER -c "initdb -D $PGDB"

Comme vous le voyez, il se base sur /etc/postgresd.conf :

#!/bin/sh
PGUSER=postgres
PGGROUP=postgres
PGHOME=/var/lib/postgres
PGDB=$PGHOME/db
PGLOG=/var/log/postgres.log
PGPID=$PGHOME/postmaster.pid

Test

Passez root :

su -

Puis, création d'une base de donnée test, d'une table t1, insertion de données et affichage :

su - postgres -c '/usr/bin/createdb test' &&
echo "create table t1 ( name varchar(20), state_province varchar(20) );" | (su - postgres -c '/usr/bin/psql test ') &&
echo "insert into t1 values ('Billy', 'NewYork');" | (su - postgres -c '/usr/bin/psql test ') &&
echo "insert into t1 values ('Evanidus', 'Quebec');" | (su - postgres -c '/usr/bin/psql test ') &&
echo "insert into t1 values ('Jesse', 'Ontario');" | (su - postgres -c '/usr/bin/psql test ') &&
echo "select * from t1;" | (su - postgres -c '/usr/bin/psql test')

Si tout va bien, vous obtiendrez ceci :

CREATE TABLE
INSERT 0 1
INSERT 0 1
INSERT 0 1
   name   | state_province
----------+----------------
 Billy    | NewYork
 Evanidus | Quebec
 Jesse    | Ontario
(3 rows)

Quelques liens

Gravatar de fredg
Original post of fredg.Votez pour ce billet sur Planet Libre.