IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

OpenJDK : un rapport de bogue souligne la présence d’expressions grossières au sein du code source


Sujet :

Java

  1. #1
    Chroniqueur Actualités
    Avatar de Patrick Ruiz
    Homme Profil pro
    Redacteur web
    Inscrit en
    Février 2017
    Messages
    1 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Redacteur web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2017
    Messages : 1 841
    Points : 51 491
    Points
    51 491
    Par défaut OpenJDK : un rapport de bogue souligne la présence d’expressions grossières au sein du code source
    OpenJDK : un rapport de bogue souligne la présence d’expressions grossières au sein du code source
    De l’implémentation open source de Java SE

    Les revues de code, notamment, de la section réservée aux commentaires peuvent s’avérer très intéressantes quant aux possibles trouvailles. Un contributeur au projet OpenJDK s’est prêté au jeu avec le code source de l’implémentation open source de Java SE et il faut dire que les développeurs qui sont passés par là n’ont pas « lésiné sur les mots. »

    Illustration avec la ligne 1475 de cette portion de code au sein de la bibliothèque softchannel.java :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    1455            controlChange(100, 127); // RPN = Null
    1456             controlChange(101, 127); // RPN = Null
    1457 
    1458             // see DLS 2.1 (Power-on Default Values)
    1459             if (allControls) {
    1460 
    1461                 keybasedcontroller_active = null;
    1462                 keybasedcontroller_value = null;
    1463 
    1464                 controlChange(7, 100); // Volume
    1465                 controlChange(10, 64); // Pan
    1466                 controlChange(91, 40); // Reverb
    1467 
    1468                 for (int controller : co_midi_rpn_rpn.keySet()) {
    1469                     // don't reset tuning settings
    1470                     if (controller != 3 && controller != 4)
    1471                         rpnChange(controller, 0);
    1472                 }
    1473                 for (int controller : co_midi_nrpn_nrpn.keySet())
    1474                     nrpnChange(controller, 0);
    1475                 rpnChange(0, 2 << 7);   // Bitch Bend sensitivity
    1476                 rpnChange(1, 64 << 7);  // Channel fine tunning
    1477                 rpnChange(2, 64 << 7);  // Channel Coarse Tuning
    1478                 rpnChange(5, 64);       // Modulation Depth, +/- 50 cent
    1479 
    1480                 tuning_bank = 0;
    1481                 tuning_program = 0;
    1482                 tuning = new SoftTuning();
    1483 
    1484             }
    1485 
    1486         }
    1487     }
    1488 
    1489     @Override
    1490     public void allNotesOff() {
    1491         if (current_mixer != null)
    1492             current_mixer.allNotesOff();
    1493         synchronized (control_mutex) {
    1494             for (int i = 0; i < voices.length; i++)
    1495                 if (voices[i].on && voices[i].channel == channel

    Le commentaire qui accompagne la ligne 136 au sein du code source de la bibliothèque java de manipulation de bits (BitArray.java) est tout aussi digne d’intérêt.

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
     116      */
     117     public final int getNextBit(int startBit) {
     118         for (int i = (startBit >>> 5) ; i<=_intSize; i++) {
     119             int bits = _bits[i];
     120             if (bits != 0) {
     121                 for (int b = (startBit % 32); b<32; b++) {
     122                     if ((bits & _masks[b]) != 0) {
     123                         return((i << 5) + b);
     124                     }
     125                 }
     126             }
     127             startBit = 0;
     128         }
     129         return(DTMAxisIterator.END);
     130     }
     131 
     132     /**
     133      * This method returns the Nth bit that is set in the bit array. The
     134      * current position is cached in the following 4 variables and will
     135      * help speed up a sequence of next() call in an index iterator. This
     136      * method is a mess, but it is fast and it works, so don't fuck with it.
     137      */
     138     private int _pos = Integer.MAX_VALUE;
     139     private int _node = 0;
     140     private int _int = 0;
     141     private int _bit = 0;
     142 
     143     public final int getBitNumber(int pos) {
     144 
     145         // Return last node if position we're looking for is the same
     146         if (pos == _pos) return(_node);
     147 
     148         // Start from beginning of position we're looking for is before
     149         // the point where we left off the last time.
     150         if (pos < _pos) {
     151             _int = _bit = _pos = 0;
     152         }
     153 
     154         // Scan through the bit array - skip integers that have no bits set
     155         for ( ; _int <= _intSize; _int++) {
     156             int bits = _bits[_int];

    Bitc*, f*ck, etc. D’après Adam Farley, on dénombre au minimum 12 expressions de ce type au sein de la bibliothèque open source et on peut allonger la liste si on fouille dans les dictionnaires dédiés aux phases de test de logiciels. « Le code source d’OpenJDK intègre trop de jurons disséminés un peu partout. Étant donné qu’OpenJDK est utilisé dans un contexte professionnel, il semble inapproprié de laisser ces 12 instances dans le code », écrit-il. Adam Farley a proposé une version préliminaire du jeu de modifications qu’il entend introduire. On verra par exemple un « Bitc* bend sensitivity » céder sa place à « Pitch bend sensitivity. »

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    1455             controlChange(100, 127); // RPN = Null
    1456             controlChange(101, 127); // RPN = Null
    1457 
    1458             // see DLS 2.1 (Power-on Default Values)
    1459             if (allControls) {
    1460 
    1461                 keybasedcontroller_active = null;
    1462                 keybasedcontroller_value = null;
    1463 
    1464                 controlChange(7, 100); // Volume
    1465                 controlChange(10, 64); // Pan
    1466                 controlChange(91, 40); // Reverb
    1467 
    1468                 for (int controller : co_midi_rpn_rpn.keySet()) {
    1469                     // don't reset tuning settings
    1470                     if (controller != 3 && controller != 4)
    1471                         rpnChange(controller, 0);
    1472                 }
    1473                 for (int controller : co_midi_nrpn_nrpn.keySet())
    1474                     nrpnChange(controller, 0);
    1475                 rpnChange(0, 2 << 7);   // Pitch Bend sensitivity
    1476                 rpnChange(1, 64 << 7);  // Channel fine tunning
    1477                 rpnChange(2, 64 << 7);  // Channel Coarse Tuning
    1478                 rpnChange(5, 64);       // Modulation Depth, +/- 50 cent
    1479 
    1480                 tuning_bank = 0;
    1481                 tuning_program = 0;
    1482                 tuning = new SoftTuning();
    1483 
    1484             }
    1485 
    1486         }
    1487     }
    1488 
    1489     @Override
    1490     public void allNotesOff() {
    1491         if (current_mixer != null)
    1492             current_mixer.allNotesOff();
    1493         synchronized (control_mutex) {
    1494             for (int i = 0; i < voices.length; i++)
    1495                 if (voices[i].on && voices[i].channel == channel

    Ou encore un « method is as mess, but it is fast and it works, so don’t fuck with it » faire ses adieux a profit de « method is as mess, but it is fast and it works, so don’t change it. »

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
     116      */
     117     public final int getNextBit(int startBit) {
     118         for (int i = (startBit >>> 5) ; i<=_intSize; i++) {
     119             int bits = _bits[i];
     120             if (bits != 0) {
     121                 for (int b = (startBit % 32); b<32; b++) {
     122                     if ((bits & _masks[b]) != 0) {
     123                         return((i << 5) + b);
     124                     }
     125                 }
     126             }
     127             startBit = 0;
     128         }
     129         return(DTMAxisIterator.END);
     130     }
     131 
     132     /**
     133      * This method returns the Nth bit that is set in the bit array. The
     134      * current position is cached in the following 4 variables and will
     135      * help speed up a sequence of next() call in an index iterator. This
     136      * method is a mess, but it is fast and it works, so don't change it.
     137      */
     138     private int _pos = Integer.MAX_VALUE;
     139     private int _node = 0;
     140     private int _int = 0;
     141     private int _bit = 0;
     142 
     143     public final int getBitNumber(int pos) {
     144 
     145         // Return last node if position we're looking for is the same
     146         if (pos == _pos) return(_node);
     147 
     148         // Start from beginning of position we're looking for is before
     149         // the point where we left off the last time.
     150         if (pos < _pos) {
     151             _int = _bit = _pos = 0;
     152         }
     153 
     154         // Scan through the bit array - skip integers that have no bits set
     155         for ( ; _int <= _intSize; _int++) {
     156             int bits = _bits[_int];

    D’après ce qui ressort du rapport de bogue, la communauté n'est pas en total accord avec la proposition. Une version étendue des modifications est à paraître et prendra en compte les consensus, notamment, sur les termes à considérer comme des jurons. On parle du pouvoir des mots et un observateur qui s’inscrit en faux avec l’initiative commente qu’ « un développeur est libre de faire usage d’un juron si celui-ci constitue le meilleur moyen de faire passer un message. »

    Nom : openjdk.jpg
Affichages : 5680
Taille : 17,5 Ko

    Il y a quelques mois, la communauté Python s’est engagée sur un front similaire. En septembre, elle a engagé le processus de suppression des termes « master » et « slave » de sa documentation et de sa base de code. On évoquait alors la nécessité de prendre de la distance d’avec ces derniers pour des raisons de diversité et pour leur connotation à l’esclavage.

    Source : rapport de bogue

    Et vous ?

    Que pensez-vous de l’initiative ?

    Que pensez-vous de l’utilisation des jurons dans l’univers du génie logiciel ?

    Vous est-il arrivé d’en faire usage ? Si oui, quel était l’objectif à atteindre ?

    Êtes vous d’accord avec l’observateur qui affirme qu’ « un développeur est libre de faire usage d’un juron si celui-ci constitue le meilleur moyen de faire passer un message » ?

    Voir aussi :

    Python va supprimer les termes "master/slave" de sa documentation et sa base de code pour des raisons de diversité et leur connotation à l'esclavage

    Andrew Haley de Red Hat donne son avis sur l'avenir d'OpenJDK, l'implémentation libre de Java SE, après la sortie de JDK 11 sous licence commerciale

    OpenJDK pour MacOS : le projet a débuté, les premiers codes sont disponibles

    Java SE : Oracle soumet l'utilisation des fonctionnalités commerciales à une souscription mensuelle, la licence permanente n'est plus d'actualité

    OpenJDK bientôt présent sur Windows Azure, Microsoft travaille sur une implémentation open source de « Java as a Service »
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  2. #2
    Membre confirmé Avatar de Darktib
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 66
    Points : 601
    Points
    601
    Par défaut
    Quel puritanisme...

  3. #3
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    12 jurons sur un code de combien de centaines de millier de lignes ?
    D'autant que bon… on ne peut pas dire que ces jurons soient si choquant que cela.

    Quitte à parler de "contexte professionnel", perdre du temps sur 12 jurons dans un code aussi gros… bonjour le professionnalisme.
    On croirait entendre des gamins de maternelles "han ! Ils ont écrit un groooooos mot !".

    Cela m'a toujours amusé de voir les anglophones dire "f-word". Ici ils vont jusqu'à dire "f-bombs ".
    Ce serait des enfants qui ont peur de se prendre une torgnole de leur parents s'ils jurent, je comprendrais. Mais là on parle d'adultes… qui ont peur de dire "fuck"…


    La communauté n'est pas totalement d'accord avec la correction.

    Sweet! Learning English with the OpenJDK community.

    You sir, probably, have a degree in public relations and/or marketing. This was*the best* way to draw attention to those swear words. Had these words stayedunexposed, no one would have been bothered by them. I guess...

    On a serious note, I wouldn't change cave art just because we might find it inappropriate, it's history now.
    http://mail.openjdk.java.net/piperma...er/057308.html

    What is this, the thought police?
    http://mail.openjdk.java.net/piperma...er/057338.html

    It also would be good to discuss the instances that you’ve proposedto change in your patch.

    I can certainly see removing the f-word, and other words of a sexualnature. Those are clearly inappropriate.

    Removing lesser words, and continuing to police their use henceforth, strikes me as overkill.

    What do other Committers think?
    http://mail.openjdk.java.net/piperma...er/057345.html

    I don't think our sensibilities need be so delicate as to be compelled to purge mild exclamations from test files.

    As noted elsewhere on this thread, the words altered in the proposed patch which intersect with the words in George Carin's list of "Seven Words You Can Never Say on Television," originate in up-stream sourcesand would be better addressed there.
    http://mail.openjdk.java.net/piperma...er/057352.html

    Zounds! Heavens to Betsy! Please defer this patch until April 1 2019.
    http://mail.openjdk.java.net/pipermail/core-libs-dev/2018-December/057369.html





    Sur reddit aussi la modification ne fait pas l'unanimité.
    Fucking snowflakes.
    Fuck raw string literals. I just want to get rid of those darn swear words.
    Fuck you!
    I want my god dam string literals
    „Mom! Get the Camera, i‘m improving open source!“
    You can never have too many swear words.
    Even though I agree when it comes to swear words in code, but I wouldn't support this request. Well, removing swears words in comments can be done at any time while refactoring, but renaming the whole package because it's "crap" is pathetic.

    Sorry dude who opened that bug, but you should get some work or strengthen your focus..
    Well, that’s a lack of focus.
    What the fork?!
    What a stupid fucking patch. A god damn waste of time.
    What a tremendous waste of time.
    Fuck this shit! People should be allowed to express themselves. What is this thought-police bullshit?!
    OMG. He went full retard here, and fixed somewhat external dependencies, like JQuery, making an update of JavaDoc tooling harder.
    Please someone tell me this patch was rejected?

    First word changes over being politically correct, now word changes over curses themselves? Hello 1984 here we come.
    Wait, OpenJDK is not halal? get a life
    I think the Java language is becoming too sensitive ...

    Donc comme d'habitude on nous prend pour des cons.

  4. #4
    Membre expert
    Profil pro
    undef
    Inscrit en
    Février 2013
    Messages
    959
    Détails du profil
    Informations personnelles :
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : undef

    Informations forums :
    Inscription : Février 2013
    Messages : 959
    Points : 3 527
    Points
    3 527
    Par défaut
    Qu'est-ce que les "bien-pensants" peuvent nous casser les couilles.

  5. #5
    Membre à l'essai Avatar de gchauvet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 7
    Points : 15
    Points
    15
    Par défaut
    Comme on dit par chez nous : "ça marche mieux avec une bonne pile de jurons"

  6. #6
    Membre expert

    Profil pro
    activité : oui
    Inscrit en
    Janvier 2014
    Messages
    1 260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : activité : oui

    Informations forums :
    Inscription : Janvier 2014
    Messages : 1 260
    Points : 3 403
    Points
    3 403
    Par défaut
    Êtes vous d’accord avec l’observateur qui affirme qu’ « un développeur est libre de faire usage d’un juron si celui-ci constitue le meilleur moyen de faire passer un message » ?
    Citation Envoyé par Adam Farley
    Le code source d’OpenJDK intègre trop de jurons disséminés un peu partout. (...) dans un contexte professionnel, il semble inapproprié de laisser ces 12 instances dans le code
    Citation Envoyé par Adam Farley
    (...) prendra en compte les consensus, notamment, sur les termes à considérer comme des jurons. On parle du pouvoir des mots et un observateur (...)
    J'entends tout à fait qu'il soit fatiguant de lire du code ou il est régulièrement exprimé de l'agressivité, vulgarité gratuite... d'autant plus en milieu professionnel.
    Cependant, il est parfois préférable, voir nécessaire, de marquer les esprits, de ce faire entendre (lu, et pas survolé). La grande question sera de trancher pour déterminer la limite entre le défoulement et l'utilité (légitime ou pas d'ailleurs).
    Quand à la liberté de faire usage de juron pour faire passer un message, le problème est que certains y voient une nécessité là où d'autres y vois du superflu inapproprié. Et ce phénomène dépend de l'éducation, de l'enseignement, des habitudes, des accoutumances, du conditionnement.

    Que pensez-vous de l’utilisation des jurons dans l’univers du génie logiciel ?
    l'humour, la défiance, la violence, le militantisme... ont leur place dans le code si ils servent une chose spécifique --> l'information, la compréhension, la sensibilisation, la prévention ...dans le domaine concerné, que ce soit directement, ou indirectement (pas trop indirect non plus, hein).


    Citation Envoyé par Patrick Ruiz Voir le message
    Il y a quelques mois, la communauté Python s’est engagée sur un front similaire. En septembre, elle a engagé le processus de suppression des termes « master » et « slave » de sa documentation et de sa base de code. On évoquait alors la nécessité de prendre de la distance d’avec ces derniers pour des raisons de diversité et pour leur connotation à l’esclavage.
    "What the fork !?" (c'est si joliment dit)
    master/slave est, en informatique, un concept opératoire, et non une idéologie politique... vont-ils refaire le monde parce que certains l'ont malmené ? --> interdiction de l'usage de palettes de couleurs faisant apparaitre un arc-en-ciel parce que ça pourrait déplaire aux gays, interdiction de l'emploi de "we can" parce que ce serait politiser du code... des conneries on en as sans fin en réserves.
    NB: ils font comment ceux qui vont documenter du python sur du code orienté pour du matos MOSI/MISO (Master Output - Slave Input...)

    Il n'y a que moi que ça choque ?
    Il manquerait plus que les ethnologues aient l'interdiction d'employer le mot "race" dans leur métier juste parce que un gus à détourné ce mot pour faire le mal... un mot qui existait bien avant lui en classification taxonomique (un mot utile pour ranger les choses, pas pour les qualifier).


    Que pensez-vous de l’initiative ?
    très clivante, contextuelle, demande une réponse contextuelle... affaire à suivre.


    Vous est-il arrivé d’en faire usage ? Si oui, quel était l’objectif à atteindre ?
    oui, pour des commentaires d'alerte, sans passer dans le lexique fleuri, passer certains commentaires dans le registre de la vulgarité permet un effet d'emphase moins agressif visuellement que d'écrire en majuscules ou de multiplier les points d'exclamations.
    NB: il ne faut pas tomber d'en l'emploi systématique de ce type de langage, c'est bien plus efficace quand il est utilisé seulement pour démarquer, pour explicité l'importance plus grande que l'on porte à un propos.
    Pensez à utiliser les pouces d’appréciation, pour participer à la visibilité de l'apport d'un propos, ou l'intérêt que vous y prêtez... qu'il soit positif ou négatif.

  7. #7
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    il y a des nuances: les injures et l'agressivité ne sont pas de mise ... par contre une petite blague grivoise dans le nom d'une variable ou une contrepèterie bien menée dans le code ... ça agrémente le boulot!
    (j'ai fait beaucoup de ça dans des scripts-shell! le soir on avait une petite compétition avec un professeur de médecine qui nous montrait ses transparents de cours avec ce genre de blague )
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Damned, ce n'est même pas un poisson d'avril...

    Master / Slave... ben oui, c'est bien de processus maîtres et d'autres esclaves dont on parle, où est le problème ? Il n'y a aucun rapport avec l'esclavage humain là
    Dans le même registre, on ne pourra plus dire "texte blanc sur fond noir" ? ça fait raciste ? On sent la position dominante du blanc sur le noir ?
    Quelle connerie

    Pour le reste, j'avoue, j'ai déjà utilisé des commentaires légèrement agressifs dans des programmes... mais ça restait gentil.
    D'abord ça m'a défoulé sur le coup, et en plus ça a fait rire les autres développeurs qui l'ont lu, alors, pourquoi s'en priver
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. souligné texte rapport pdf
    Par sasseur dans le forum ODS et reporting
    Réponses: 3
    Dernier message: 24/07/2009, 11h11
  2. Réponses: 2
    Dernier message: 02/06/2008, 11h58
  3. Sélection par rapport à la présence d'un mot
    Par jackbauer33 dans le forum Requêtes
    Réponses: 3
    Dernier message: 16/05/2008, 23h02
  4. [CR.NET] Rapport de présences avec série de dates en entête
    Par crackity_jones666 dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 30/07/2004, 09h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo