Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/06/2011, à 19:40

Pylades

/* Topic des codeurs couche-tard [5] */

Bienvenue dans le TdCCT 0x5.
Ceci est la suite de ce fil.

Voici le rappel des règles du jeu, formulées par le message initial de samuncle :

samuncle a écrit :

Bienvenue dans ce nouveau topic psychédélique, ou le but est de coder le plus tard possible (oui, c’est bien connu, il est plus facile de coder la nuit).
Un compteur viendra, chaque matin, poster le nouveau score, normalement à sept heures et quarante-deux minutes.
Voici le barème en fonction de l’heure du dernier message posté :
                [21 h, 22 h[ → 1 point ;
                [22 h, 23 h[ → 2 points ;
                [23 h, 0 h[ → 3 points ;
                [0 h, 1 h[ → 4 points ;
                [1 h, 2 h[ → 5 points ;
                [2 h, 3 h[ → 6 points ;
                [3 h, 5 h[ → 10 points ;
On ne marque plus de points après cinq heures. Les points ne se cumulent pas si l’on poste toutes les heures.


Historique des précédents fils :
        • Topic des codeurs couche-tard [0] : du 14 avril 2010 au 12 juin 2010 (100 pages).
        • Topic des codeurs couche-tard [1] : du 12 juin 2010 au 5 septembre 2010 (100 pages).
        • Topic des codeurs couche-tard [2] : du 5 septembre 2010 au 16 décembre 2010 (100 pages).
        • Topic des codeurs couche-tard [3] : du 16 décembre 2010 au 28 février 2011 (100 pages).
        • Topic des codeurs couche-tard [4] : du 28 février 2011 au 6 juin 2011 (101 pages).


N’oubliez pas le Défi du TdCCT wink
Défi en cours : CLFB.

Amusez-vous bien, et produisez-nous du beau code. smile


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#2 Le 06/06/2011, à 19:40

Pylades

Re : /* Topic des codeurs couche-tard [5] */

Kanor a écrit :

pylade regarde la commande xprop

J’ai regardé, je n’ai pas trouvé…


ArkSeth a écrit :
Pylade a écrit :

Mais là, c’est le WM qui gère le raccourci. tongue

Ou pas : quel que soit le WM, si gnome-panel ne tourne pas, ces deux raccourcis ne font rien (ou font une autre tâche qui leur a été assignée par un autre moyen). En revanche, quel que soit le WM, une fois gnome-panel lancé (et à condition que le raccourcis ne soit pas déjà réquisitionnés par autre chose, p't'être), ça marche : c'est donc bien gnome-panel qui gère ça et pas le WM.

Ou alors, peut-être que gnome-panel demande au WM de les gérer pour lui, et dans ce cas, ce que je ne sais pas faire se reformule en « demander au WM de gérer des raccourcis clavier pour moi ». Mais ça revient très exactement au même, ce n'est qu'une formulation reflétant la manière de procéder qui est justement l'inconnue.

Bon, après je ne sais pas comment fonctionne Gnome, mais chez moi en tous cas c’est le rôle du WM. Et ça serait bien possible que Gnome demande au WM de signaler l’événement à gnome-panel. T’façons, Gnome et son Gconf opaque, on ne sait jamais ce qu’ils font. tongue


ArkSeth a écrit :
Kanor a écrit :

pylade regarde la commande xprop

J'viens d'essayer en vitesse, mais je n'ai pas trouvé de ligne indiquant le display. Peut-être n'y en a-t-il une que pour les fenêtres n'utilisant pas le display par défaut, ou alors peut-être est-ce que j'ai juste mal choisi mon exemple.

Mais dans l'écrasante majorité des cas, toutes les fenêtres ont :0.0 comme display, non ?

Je ne sais pas du tout, pour moi on avait un display par fenêtre et :0.0 c’était pour la fenêtre racine. Mais si ce n’est pas le cas, cela ne m’arrange pas, sauf si je trouve comment changer le display d’une fenêtre.


grim7reaper a écrit :
Pylade a écrit :

@ Rolinh : j’étais tombé sur une version Gnu encore plus longe ; et surtout avec un appel à malloc dedans. J’ai été scandalisé (malloc peut échouer, or strlen n’est pas censé échouer).

Heu source ??
Parce que efffectivement c'est aberrant et pour le coup ça m'étonne beaucoup hmm

Je crois que ça avait été posté sur le TdCCT, il y a un certain temps…


grim7reaper a écrit :

Bah t'es de mauvaise foi, la version GNU aussi explique l'algo (sauf que l'explication est aussi limpide que le code :]).

Tout est dit. wink


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#3 Le 06/06/2011, à 19:43

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

Pylade a écrit :
ArkSeth a écrit :
Kanor a écrit :

pylade regarde la commande xprop

J'viens d'essayer en vitesse, mais je n'ai pas trouvé de ligne indiquant le display. Peut-être n'y en a-t-il une que pour les fenêtres n'utilisant pas le display par défaut, ou alors peut-être est-ce que j'ai juste mal choisi mon exemple.

Mais dans l'écrasante majorité des cas, toutes les fenêtres ont :0.0 comme display, non ?

Je ne sais pas du tout, pour moi on avait un display par fenêtre et :0.0 c’était pour la fenêtre racine. Mais si ce n’est pas le cas, cela ne m’arrange pas, sauf si je trouve comment changer le display d’une fenêtre.

Le display c'est ce que te renvoie le serveur X quand tu te connectes à lui. Donc en général, comme le dit ArkSeth, c'est le même pour toute tes fenêtres.
À la limite, si tu veux un identifiant vaut mieux taper du côté du XID.

Un de mes souvenirs de prog en Xlib a écrit :

An XID is a unique integer that is usually an 'unsigned long'. A client's XID is associated with a structure on the server's side.

Pylade a écrit :
grim7reaper a écrit :
Pylade a écrit :

@ Rolinh : j’étais tombé sur une version Gnu encore plus longe ; et surtout avec un appel à malloc dedans. J’ai été scandalisé (malloc peut échouer, or strlen n’est pas censé échouer).

Heu source ??
Parce que efffectivement c'est aberrant et pour le coup ça m'étonne beaucoup hmm

Je crois que ça avait été posté sur le TdCCT, il y a un certain temps…

Hum, ça ne me dit rien du tout.
Plusieurs fois on a effectivement posté le code du strlen de GNU, mais il ne me semble pas avoir vu passé une version avec malloc.
Tu ne confondrais pas avec une autre fonction ?

Nan parce je ne vois vraiment pas ce qu'une allocation mémoire vient faire dans strlen

Dernière modification par grim7reaper (Le 06/06/2011, à 19:55)

Hors ligne

#4 Le 06/06/2011, à 19:48

Kanor

Re : /* Topic des codeurs couche-tard [5] */

voila voila

Hors ligne

#5 Le 06/06/2011, à 19:50

nathéo

Re : /* Topic des codeurs couche-tard [5] */

;


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#6 Le 06/06/2011, à 19:55

Кຼزດ

Re : /* Topic des codeurs couche-tard [5] */

Kouain


dou

Hors ligne

#7 Le 06/06/2011, à 20:12

Pylades

Re : /* Topic des codeurs couche-tard [5] */

Je voir pour XID, mais ce qui m’intéressait c’était la possibilité de setxkbmap de n’agir que pour un display donné.


Pour strlen, ça m’avait vraiment choqué. T’as lu en entier les strlen que l’on a passé ce topic ?


Bon, qui serait favorable à l’intégration de console-setup dans Archlinux ? Ça serait vachement bien, plutôt que le système bidon et passéiste qu’il y a actuellement…


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#8 Le 06/06/2011, à 20:13

Rolinh

Re : /* Topic des codeurs couche-tard [5] */

Donc personne pour m'éclairer sur les powertype?

Hors ligne

#9 Le 06/06/2011, à 20:26

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

Pylade a écrit :

Pour strlen, ça m’avait vraiment choqué. T’as lu en entier les strlen que l’on a passé ce topic ?

J'en suis pas sûr à 100%, mais il me semble bien que oui.
Et puis je trouve aucune référence à ça sur Internet (alors que ça en aurait fait bondir plus d'un un truc de ce genre)…

Pylade a écrit :

Bon, qui serait favorable à l’intégration de console-setup dans Archlinux ?

C'est quoi ?



Rolinh a écrit :

Donc personne pour m'éclairer sur les powertype?

Désolé, je découvre le terme avec ta question donc bon ^^"

Dernière modification par grim7reaper (Le 06/06/2011, à 20:30)

Hors ligne

#10 Le 06/06/2011, à 20:28

xapantu

Re : /* Topic des codeurs couche-tard [5] */

smile

Hors ligne

#11 Le 06/06/2011, à 20:34

Rolinh

Re : /* Topic des codeurs couche-tard [5] */

grim7reaper a écrit :

Désolé, je découvre le terme avec ta question donc bon ^^"

Bon, pas grave, merci quand même smile

Sinon, même chose que grim: c'est quoi console-setup?

Hors ligne

#12 Le 06/06/2011, à 20:35

Pylades

Re : /* Topic des codeurs couche-tard [5] */

Ben, je me souviens avoir été profondément choqué. Après va falloir éplucher les TdCCT pour retrouver le lien…


Et console-setup, c’est une particularité de Debian et dérivés qui permet entre autre d’utiliser les dispositions de clavier de Xkb en TTY et d’avoir des fontes qui permettent d’afficher un nombre raisonnable de caractères.

Dernière modification par Pylade (Le 06/06/2011, à 20:58)


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#13 Le 06/06/2011, à 21:04

Pylades

Re : /* Topic des codeurs couche-tard [5] */

Bon, j’ai épluché les vieux TdCCT, et j’ai retrouvé ce qui m’avait en fait choqué (heureusement que mon excellente mémoire m’a aidé à me souvenir du jour même où j’ai été choqué, pour info c’était dans la nuit du 1er au 2 juin 2010 tongue).
Ce n’était pas un appel à malloc mais un appel à abort (qui, par la même occasion, se retrouve toujours dans le code posté aujourd’hui). ><"

Bon, il n’est pas vraiment élégant, on aurait préféré l’usage du préprocesseur ; mais en fait ce n’est pas bien grave. Mes plus humbles excuses à Gnu et à vous.


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#14 Le 06/06/2011, à 21:09

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

Ouais, c'est vrai que c'est moche (mais c'est moins pire qu'un malloc quand même big_smile).
Bon en même temps je trouve bizarre de faire un abort (ou un #error, même si je suis d'accord que c'est plus propre sur ce coup‑là) là‑dessus, à la limite si la taille est pas supportée tu rebascules sur l'algo naïf.
M'enfin je suppose qu'ils (GNU et BSD) ont leurs raisons, sûrement qu'une taille supérieur casse du code ailleurs dans la libc…

Dernière modification par grim7reaper (Le 06/06/2011, à 21:10)

Hors ligne

#15 Le 06/06/2011, à 21:49

Pylades

Re : /* Topic des codeurs couche-tard [5] */

Infos du paquet « console-setup » a écrit :

programme de configuration de police et de clavier pour la console
Ce paquet fournit la console Linux avec le même schéma de configuration clavier
que celui du système « X Window ». Ainsi, il n'est pas nécessaire de copier ou
de changer les fichiers de configuration du clavier pour une simple
modification telle que le réglage des «  touches mortes » : « AltGr » ou
« Compose », la (ou les) touche(s) pour basculer du mode « latin » au mode
« non-latin », etc.

The package also contains console fonts supporting many of the world's
languages.  It provides an unified set of font faces - the classic VGA, the
simplistic Fixed, and the cleaned Terminus, TerminusBold and TerminusBoldVGA.


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#16 Le 06/06/2011, à 21:53

grim7reaper

Re : /* Topic des codeurs couche-tard [5] */

´fectivement, ça semble intéressant smile

Hors ligne

#17 Le 06/06/2011, à 22:56

Elzen

Re : /* Topic des codeurs couche-tard [5] */

Défi du TdCCT

    Version actuelle des règles : 0.1 alpha

    Principe : un utilisateur (membre ou non du TdCCT) propose un sujet de logiciel à coder. Les membres actifs du TdCCT discutent ensuite de son intérêt et de sa faisabilité : le projet ne doit pas être trop simple (c'est un défi), mais pas trop complexe non plus (il doit être ouvert à tous les participants).

    Si le sujet est accepté, le commanditaire doit alors énoncer des spécifications précises (qui pourront cependant être adaptées selon les remarques), divisées en deux parties : fonctionnalités requises, et fonctionnalités appréciées. Les personnes souhaitant participer au défi estiment alors sa difficulté réelle en se mettant d'accord sur un nombre de points à attribuer au projet en fonction de cette spécification.

    Le langage utilisé est laissé au choix du candidat, mais le code doit être placé sous licence Libre. À tout moment durant le code, la communauté des Codeurs Couche-Tard peut être consultée pour aider à résoudre les problèmes techniques (le but n'est pas seulement de coder, mais également de progresser dans le codage), et le commanditaire peut préciser les points de la spécification posant problème.

    Une fois le projet terminé, le commanditaire teste les différentes productions des candidats, et estime le nombre de points qu'ils méritent pour ce résultat (toutes les fonctionnalités requises sont-elles bien présentes ? Combien de fonctionnalités optionnelles ont été ajoutées ? Etc.…), et ces points sont ajoutés au compteur de points du TdCCT (sauf demande du candidat, suite à blacklistage par exemple).

Défi actuel : Command Line File Browser (proposé par ArkSeth)

Spécifications du CLFB, version 0.2

    Rédacteur principal : ArkSeth/Elzen.
    Contributeurs : grim7reaper, Pylade.

    Les présentes spécifications sont ouvertes à la discussion. Les points notés requis sont indispensables à la validation du logiciel. Ceux notés optionnels ne le sont pas, mais leur réalisation serait vivement appréciée.
    Pour toute question ou suggestion concernant ces spécifications, ainsi que pour toute demande d'aide sur le codage, en l'absence d'un espace dédié sur fadrienn.irlnc.org, se référer au TdCCT actuel.

    Deux modes existent pour le programme, un « mode bavard » et un « mode silencieux ». Lorsque le premier est actif, le programme affiche sur la sortie standard, avant chaque opération, une ligne explicitant la commande Shell à utiliser pour obtenir le même résultat (lorsque existant), précédé par un caractère "#".
    Le mode silencieux est activé par défaut, et les options permettant de basculer en mode bavard sont ci-dessous toutes indiquées comme optionnelles.

    Points d'ordre général

    Requis :
        – Le programme candidat doit être placé sous licence Libre.
    Optionnel :
        – La licence doit être virale (type GNU GPL).

    Lancement du programme

    Requis :
        – Lancé sans paramètres, le programme démarre le mode interactif.
        – Avec le paramètre « --help » affiche un message d'aide et se termine.
    Optionnel :
        – Lancé avec le paramètre « --verbose », le programme démarre en mode bavard.
        – Si "-c" suivi d'une commande clfb sont passés en paramètre, le programme exécute la commande et se termine.

    Commandes internes

    Requis :
        – « !help » affiche un message d'aide.
        – « !quit » termine le programme.
    Optionnel :
        – « !verbose » bascule de l'état silencieux à l'état bavard et réciproquement.
        – Une auto-complétion permet de faciliter l'entrée de commandes.

    Gestion de fichiers

    Requis :
        – « fichier » ouvre le fichier avec le programme défini par défaut.
        – « fichier - » demande une confirmation avant de supprimer le fichier.
        – « fichier1 +> fichier2 » copie fichier1 vers fichier2.
        – « fichier1 -> fichier2 » déplace fichier 1 vers fichier2.
        – « fichier ? » affiche les méta-informations du fichier (droits d'accès, taille, date de dernière modif…) de la façon la plus lisible possible (ce qui sous-entend notamment mettre en valeur celui des trois jeux de droits qui s'applique à l'utilisateur en cours)
        – « fichier #motif » modifie les droits d'accès selon le motif indiqué (« u+r » ; « 744 » ; « rwxr--r-- »…)
            – « fichier ! » crée le fichier s'il n'existe pas⁽¹⁾, sinon affecte sa date de dernière validation (comme avec touch).
        – en cas d'écrasement de fichier déjà existant lors d'une opération quelconque, une confirmation est demandée.
    Optionnel :
        – « fichier X » (avec X entier ≥ 0) ouvre le fichier avec le Xème programme alternatif (« fichier 0 » devient alors équivalent à simplement « fichier »).
        – « fichier1 => fichier2 » crée un lien physique fichier2 pour fichier1.
        – « fichier1 <> fichier2 » crée un lien symbolique fichier2 pour fichier1.
        – pour les quatre opérations prenant un second nom de fichier fichier comme destination, on peut rajouter d'autres noms de fichiers à la suite, et le programme répétera alors l'opération autant de fois qu'il y a de fichiers cibles.
        – « fichier ?? » affiche la totalité des méta-informations, y compris celles spécifiques selon les types de fichiers (type de compression ; hauteur et largeur d'une image ; tags d'un fichier média…). Dans ce cas, l'affichage de « fichier ? » est attendu de façon plus simplifiée (seulement les méta-informations les plus utiles, comme la taille, et uniquement les droits d'accès s'appliquant à l'utilisateur en cours)

    Spécificités pour les répertoires

    Requis :
        – « . » ou « ./ » liste le contenu du répertoire courant, sans montrer les fichiers cachés.
        – « repertoire » se déplace vers le nouveau répertoire courant.
        – « repertoire . » affiche le contenu d'un répertoire, fichiers cachés y compris⁽²⁾.
        – « repertoire !! » crée le répertoire demandé si celui-ci n'existe pas encore.
        – « repertoire1 +> repertoire2 » exécute la copie en profondeur (copie du répertoire + copie des fichiers récursivement).
    Optionnel :
        – par extension du comportement de « . », « repertoire » vérifie si le répertoire demandé est le répertoire courant, et liste son contenu dans ce cas.
        – « repertoire X » ouvre le répertoire avec le Xe programme externe par défaut.
        – les liens physiques sur les répertoires n'étant pas autorisés, « repertoire1 => repertoire2 » crée un nouveau répertoire et crée des liens physiques vers tous les fichiers contenus.

Candidats signalés : grim7reaper, Pylade, Kanor, helly, :!pakman.

⁽¹⁾ Attention à vérifier le nom de fichier dans la commande « fichier ! » corresponde bien à un nom de fichier possible. Notamment, un « / » désigne habituellement un répertoire : dans ce cas, charge au candidat de déterminer la meilleure action à effectuer (simple message d'erreur, assimilation à « repertoire !! », …)

⁽²⁾ Le comportement le plus probable de cette commande est d'afficher simplement le contenu sans se déplacer, cependant, ce point n'étant pas spécifié, le score final ne sera pas affecté si le candidat choisit plutôt d'en faire une combinaison « déplacement + affichage »)

Deux extensions supplémentaires ont été proposées, qui seront évaluées séparément (et pourront rapporter chacune un bonus de points indépendant du score du défi lui-même) :

Extension n°1 : gestion des ACL

    Le candidat désirant implanter cette extension fera en sorte que son CLFB prenne en compte les ACL dans ses actions liées à la gestion des droits. Cela signifie que « fichier ? » doit afficher les ACL en priorité s'ils existent, que « fichier ?? » doit les afficher en plus du reste des détails, et que « fichier #droit » doit pouvoir les modifier, selon une syntaxe encore à déterminer.

Extension n°2 : gestion des archives

    Le candidat désirant implanter cette extension fera en sorte que son CLFB soit capable de gérer les archives comme s'il s'agissait de répertoire. Cela signifie que la commande « archive » agira comme si elle prenait comme répertoire courant la racine de l'archive (ouvrir l'archive avec les programmes par défaut restant accessible via « archive X », que « archive . » doit lister son contenu, et qu'une tentative d'accéder à un fichier contenu dans l'archive (ouverture, modification de droits si cette opération est gérée, voire même récupération du nom par tabulation) doit réagir comme si le fichier était directement présent sur le disque.

Reste à estimer le nombre de points pour ce défi (version minimale (que les fonctionnalités requises) et version complète (avec toutes les fonctionnalités optionnelles inclues dans la spec de baser), ainsi que pour ses deux extensions.

Si quelqu'un a d'autres suggestions ou remarques à faire sur le défi, tous les commentaires sont les bienvenus.

Dernière modification par ArkSeth (Le 07/06/2011, à 12:44)

Hors ligne

#18 Le 06/06/2011, à 23:07

nesthib

Re : /* Topic des codeurs couche-tard [5] */

plop


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#19 Le 06/06/2011, à 23:12

samυncle

Re : /* Topic des codeurs couche-tard [5] */

premier point ici smile


Hello world

Hors ligne

#20 Le 06/06/2011, à 23:12

Sir Na Kraïou

Re : /* Topic des codeurs couche-tard [5] */

nesthib il a plopé à côté. tongue

(comment que je cafte ! yikes)


Descendant de Charlemagne et de LUCA.
Bleu, en l'hommage d'un truc bleu. :'(
C'est pas du bleu.
C'est pas le lac de Genève, c'est le Lac Léman.

Hors ligne

#21 Le 06/06/2011, à 23:17

nathéo

Re : /* Topic des codeurs couche-tard [5] */

;


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#23 Le 06/06/2011, à 23:51

Elzen

Re : /* Topic des codeurs couche-tard [5] */

Sinon, quelqu'un a une idée pour ça ?

Pour l'instant, faute de mieux, je laisse la 3e solution, c'est celle qui marche le mieux.

Hors ligne

#24 Le 07/06/2011, à 00:02

:!pakman

Re : /* Topic des codeurs couche-tard [5] */

Trop bien cette histoire de défis smile
Je propose que le jury prenne en compte le langage utilisé pour rendre son jugement :
Un programme en python est généralement plus simplement fait qu'en C par exemple wink

Dernière modification par :!pakman (Le 07/06/2011, à 00:04)


...

Hors ligne

#25 Le 07/06/2011, à 00:13

samυncle

Re : /* Topic des codeurs couche-tard [5] */

.


Hello world

Hors ligne