08:09 <morgan`> hello
        08:19 <gawel> matin soleil
        08:24 <Ohan> hello morgan` et gawel 
        08:27 <gawel> salut mec
        08:36 <morgan`> salut à vous deux :) 
        09:06 <kujiu> bonjour
        09:16 <feth> Bonjour du matin !
        09:16 <nightlybuild> :) salut
        09:39 <benoitc> lu'
        09:40 <benoitc> il y a moyen d'envoyer le courrier membre par fax ?
        09:40 <benoitc> parce que ça fait 1 mois et qqs que je dois renvoyer et j'ai tjrs pas eu l'opportunité de metrte la main sur une imprimante :)
        09:44 <gawel> ah ouais j'ai pas répondu
        09:44 <gawel> sorry
        09:44 <gawel> limite tu nous le file a pycon ?
        09:45 <gawel> remarque ca solutionne rien
        09:45 <benoitc> mmm il y aura une imprimante à pycon ?
        09:45 <gawel> non :)
        09:46 <benoitc> bon je vais voir si en allant sur prague je tomberais pas sur une boite à copie
        09:46 <benoitc> pq dans mon bled ya pas
        09:46 <benoitc> et je suis pas retourné sur paris depuis un bail :)
        09:46 <gawel> je vais essayer de pécho un numéro de fax du taf
        09:46 <benoitc> k
        09:47 <gawel> maybe ccomb en a un sinon si tu le croise
        09:47 <benoitc> ok
        09:47 <benoitc> enfin sinon limite qqn me l'imprime au pycon et je le signe :)
        09:47 <benoitc> (ptete plus simple)
        09:48 <gawel> je doute qu'on ai un printer la bas
        09:48 <benoitc> mmmk
        09:55 <sbz> han j'aime bien mon __repr__ ultra generique : http://rafb.net/p/Dhot6S48.html
        10:33 <feth> sbz: pas verbeux du tout. et en cas de référence circulaire ça marche comment ?
        10:49 <AlexCONRAD> sbz: j'ai testé ton code, ça marche pas pour moi
        11:27 <haypo> salut
        11:27 <haypo> j'ai migré mon trac sur une machine de test hier
        11:27 <haypo> j'ai mesuré les perfs, c'était autour de 8 requêtes/seconde, vraiment très lent !
        11:27 <haypo> j'ai donc passé en wsgi puis remplacé sqlite par postgresql
        11:27 <haypo> bah au mieux j'ai obtenu 30.9 requêtes/seconde
        11:28 <haypo> alors je me demande d'où sortent les chiffres « 3000 requêtes/seconde » de l'article sur WSGI dans le Linux Mag
        11:28 <haypo> le test était sur une page vierge ?
        11:28 <haypo> et sinon, quelqu'un aurait des idées pour accélérer Trac ? j'ai beaucoup cherché mais je n'ai rien trouvé
        11:30 <feth> une machine plus puissante
        11:30 <misc> quel version de trac ?
        11:31 <haypo> misc: Trac 0.11
        11:31 <haypo> feth: c'est un Core Quad Core @ 2.5 GHz et 4 Go de mémoire
        11:32 <haypo> je trouve que c'est déjà un ordinateur rapide
        11:32 <feth> en effet
        11:32 <haypo> tiens, j'ai benché dokuwiki (PHP5) pour le troll : ~110 requêtes/seconde
        11:32 <haypo> (je trouve aussi que c'est peu, mais quand même 3 à 4 fois mieux que Python)
        11:33 <misc> bah, c'est pas pour rien que php est le choix d'excellence du dev web 
        11:33 <haypo> j'ai noté plein d'infos ici > http://pastealacon.com/2626
        11:34 <haypo> à mon avis, Trac ne met rien en cache
        11:34 <haypo> je sais pas si c'est un problème de configuration ou un problème de conception
        11:34 <feth> haypo: ptete faire un peu préchauffer la VM avant le bench
        11:35 <feth> (ils le font en java, je vous jure)
        11:35 <haypo> feth: euh là c'était tellement chaud qu'on aurait pu y faire cuire un oeuf
        11:35 <haypo> (j'ai répété les tests de nombreuses fois)
        11:36 <haypo> en tout cas, c'est balèze : arriver à ne générer qu'une page HTML par seconde, y'a que Python pour arriver à ce niveau d'incompétence :)
        11:36 <Ohan> haypo, je suis sur qu'on peut faire pire en php, avec qques efforts
        11:37 <haypo> Ohan: euh, t'as pas lu ce que j'ai écrit ?
        11:37 <haypo> PHP est beaucoup plus performant que Python niveau web
        11:37 <misc> ç'est la qu'on voit que python, c'est bin, tu arives à faire pire que php sans probléme 
        11:38 <Ohan> haypo, toi t'as pas lu ce que j'ai écrit
        11:39 <feth> j'utilise pysvn et j'ai des perfs vraiment déplorables d'ailleurs. y aurait pas un lien ?
        11:39 <Ohan> haypo, je disais "je suis sur qu'on peut faire pire en php avec qques efforts"
        11:39 <Ohan> une grosse partie de la "perf d'un site web", c'est l'opti des requetes sql, du cache etc..
        11:39 <touff> oui Ohan y'a magento
        11:39 <touff> 3 requetes /min ;)
        11:40 <touff> et c'est du php5
        11:41 <haypo> Ohan: oups, j'ai lu à l'envers, désolé :-p
        11:41 <haypo> mais j'ai testé un vrai logiciel, dokuwiki
        11:41 <Ohan> bah toi tu dis que c'est un vrai logiciel
        11:42 <Ohan> bon, ok, y'a deux ans quand je l'avais un peu tweaké, ca avait effectivement l'air bien branlé
        11:42 <Ohan> mais déjà, de mémoire, y'a rien en DB
        11:42 <Ohan> je me trompe?
        11:42 <Ohan> après, c'est peut-être aussi le cas de trac, je l'ai jamais utilisé
        11:42 <touff> tu te trompe pas y'a pas de de DB dans doku
        11:42 <touff> donc c'est pas vraiment tres comparable
        11:42 <touff> c'est comme comparer plone à PluXML
        11:43 <Ohan> donc déjà, je vois pas comment comparer une appli qui utilise des fichiers plats et une autre qui utilise une DB
        11:46 <haypo> Ohan: c'est de fichiers plats dokuwiki
        11:46 <haypo> Ohan: même avec des fichiers plats PHP est plus rapide que Python qui utilise PostgreSQL ...
        11:46 <Ohan> euh
        11:46 <Ohan> ca me parait normal :D
        11:47 <haypo> Ohan: ah bon ?
        11:47 <Ohan> sur des petits fichiers plats
        11:47 <Ohan> oui
        11:47 <misc> bah si c'est comparable au niveau du service que tu offres, si y a un des 2 projets qui a fait des choix techniques qui posent probléme, c'est pas une raison pour pas comparer 
        11:47 <haypo> misc: dans les deux cas, j'ai un site web, donc c'est comparable
        11:47 <Ohan> a mon avis (basé sur aucuns chiffres, juste une intuition), une BDD postgres/mysql/autre est plus rapide a partir du moment ou t'as beaucoup de données et d'enregistrements
        11:47 <Ohan> sur des petits fichiers, pas trop nombreux, les fichiers plats ont moins d'overhead
        11:47 <misc> haypo: c'est pas du tout ce que je vient de dire, par hasard ?
        11:48 <haypo> misc: oh je vais me recoucher moi, je lis de travers
        11:48 <Ohan> haypo, moi ce que je veux te dire, c'est que pour comparer "web en python" et "web en php", il faudrait avoir un dokuwiki implémenté en python
        11:48 <Ohan> si tu veux comparer l'efficacité des langages
        11:48 <haypo> bah Trac a aussi un wiki
        11:49 <Ohan> si tu veux comparer l'efficacité des outils, alors la on s'en fiche qu'ils soient en python ou php ou autre
        11:49 <haypo> hey, je comptais pas publier LE benchmark qui prouverait par A+B que Python ou PHP est plus rapide
        11:49 <Ohan> j'ai bien compris
        11:49 <haypo> moi je cherche juste à savoir comment accélérer Trac
        11:49 <Ohan> peut pas t'aider désolé
        11:49 <haypo> que je trouve désespérément lent
        11:49 <haypo> pas grave, on dirait que personne ne cherche à accélérer Trac :-(
        11:50 <misc> tu peut demander sur #trac ?
        11:50 <haypo> j'ai déjà demandé
        11:51 <haypo> et j'ai pas eu de réponse
        11:51 <haypo> bon, c'était à 1h du mat aussi
        11:53 <Ohan> fail
        11:56 <sbz> AlexCONRAD: hum, ca devrait si t'as un constructeur __init__, t'as le code de l'Objet sur lequel tu as teste ?
        11:58 <AlexCONRAD> sbz: j'espérais que "ultra generique" voulais dire "s'adapte à toutes les classes"
        11:58 <sbz> feth: tu penses trop Data::Dumper Perl pour les references circulaires, si ton champ est une instance d'un autre Object, bein y'a jutement l'appel a repr() pour dumper aussi l'objet
        11:59 <sbz> AlexCONRAD: seulement si y'a un __init__ !
        11:59 <AlexCONRAD> j'avais pas de __init__ dans ma classe 'Foo' :)
        12:00 <gawel> les __init__ ça marche pas c'est de la merde
        12:00 <sbz> AlexCONRAD: c'est ecrit dans le commentaire du paste :)
        12:00 <gawel> et repr ça doit renvoyer une chaine entre <> par convention
        12:01 <AlexCONRAD> j'allais faire la même remarque gawel
        12:01 <gawel> héhé
        12:01 <sbz> c'est peantus ca :)
        12:01 <AlexCONRAD> sbz: ok, je viens de lire le commentaire qui est en tout petit
        12:02 <sbz> hehe
        12:02 <AlexCONRAD> sbz: tu veux pas paster une classe complète (assez courte) et afficher le résultat du repr histoire de voir à quoi ça ressemble (j'ai la flême)
        12:05 <sbz> en gros pour la classe Bla: def __init__(self, truc=1, muche='2'): ca affichera <Bla(1, 2)>
        12:05 <sbz> bon jvais mange a+
        12:06 <haypo> vous parlez de méta classe là ?
        12:07 <AlexCONRAD> haypo: no
        12:07 <AlexCONRAD> ça parle __repr__
        12:47 <touff> gawel, ?
        12:47 <touff> je cherche un script python qui wget -r unedomaine.com/* -o /dev/null
        12:47 <touff> t'as pas ca sous la main ?
        12:55 <haypo> télécharger dans /dev/null n'est pas très utile :)
        12:55 <haypo> touff: pourquoi pas utiliser wget ? :-)
        12:56 <touff> parce que je veux lancer tout en même temps :)
        12:56 <touff> sur plusiers machines
        12:56 <haypo> tu veux pourir la bande pasasnte d'un enemi ?
        12:56 <touff> bon j'ai trouvé une truc en php à base de curl mais ca me gonfle d'avoir a installer php sur certaines machines :(
        12:56 <haypo> ou tester ton site web ?
        12:57 <touff> je veux tester le site web de l'ifpi :D
        12:57 <taziden> ahahah touff :)
        12:57 <touff> :D
        12:57 <haypo> touff: afpy  ou ifpi ?
        12:57 <taziden> ifpi ;p
        12:57 <touff> pour ceux qui ont pas suivit : http://bluetouff.com/2009/04/21/operation-baylout-les-hacktivistes-rentrent-dans-la-danse/
        12:57 <touff> y'a un emanifestation pacifiste qui s'organise
        12:57 <touff> c'est pour ce soir minuit
        12:58 <haypo> ah donc c'est bien pourir la bande passante de ton enemi
        12:59 <haypo> touff: utilise "ab" (apache bench)
        12:59 <touff> ah ?
        12:59 <touff> je connais pas
        12:59 <haypo> ab -c 100 -n 1000000000 http://www.ifpi.org/
        12:59 <haypo> ça va lancer 1000000000 requêtes à la suite en 100 en même temps
        12:59 <touff> oh c'est mimi comme tout
        13:00 <touff> moins gruik que hping on dirait
        13:00 <haypo> ça fait de vrais requêtes HTTP
        13:00 <touff> je sais que gawel avait fait un trruc de furieux qui spoofait aleatoirement une proxy list
        13:09 <touff> ehehe c'est vraiment marrant ab
        13:10 <misc> "ab http://www.google.com/"
        13:17 <taziden> je vais tester sur mon serveur tiens
        13:51 <taziden> Chez moi ab segfault systématiquement
        13:51 <haypo> taziden: ab segfault ? oh mince
        13:51 <misc> tant qu'il produit pas
        13:52 <misc> car bon, ab production, c'est pire 
        13:52 <taziden> Je vais regarder du côté du bts debian
        13:52 <taziden> misc: :)
        13:52 <haypo> misc: _o/ *BAF
        13:52 <haypo> taziden: j'ai la version 2.2.9 et ça marche bien
        13:53 <taziden> 2.3 pour ma part
        13:53 <haypo> taziden ! frimeur
        13:53 <haypo> les versions impaires sont pas des versions de dev. par hasard ?
        13:54 <taziden> j'y peux rien si j'ai une distro bleeding edge == debian :D
        13:54 <haypo> parce que j'ai jamais entendu parler d'Apache 2.1 en prod
        13:54 <touff> taziden, etch powah :)
        13:54 <taziden> touff: je vais rajouter le dépot lenny, et voir si en stable, c'est mieux, je suis en unstable/experimental là :/
        13:55 <touff> :\
        13:55 <touff> pas ideal c'est clair tu dois avoir un bidule moisit
        13:55 <misc> bah utilise gdb et patch 
        13:55 <misc> d'ailleurs, on va tester cherokee à laplace de apache 
        13:55 <touff> attention info importante 
        13:55 <touff> [13:47]  <roffle> do it at the lwest level possible.  figure out what bandwidth you have, and hit the lowest level possible that you're able to overwhelm
        13:55 <touff> [13:47]  <spaz926> why lowest?
        13:55 <touff> [13:48]  <roffle> because it forces the parent company major headaches, having to reroute one single IP or server cluster, for one company
        13:55 <touff> [13:48]  <roffle> the point is to cause maximum damage
        13:55 <haypo> apache2-utils : 2.2.3 dans Etch, 2.2.9 dan Lenny, 2.2.11 dans Squeeze, 2.2.9 ou 2.2.11 dans Sid
        13:55 <touff> [13:48]  <roffle> one ip, pfft, easy reroute
        13:55 <haypo> taziden: c'est sûr que c'est 2.*3* ?
        13:56 <taziden> misc: j'ai pas les compétences pour utiliser gdb :)
        13:56 <touff> 2.2.9 dan Lenny -> lenny stable nickel
        13:56 <touff> sinon etch aussi
        13:56 <taziden> haypo: yep, la version du paquet != version de l'appli ab
        13:56 <haypo> ah, j'ai pas réussi à obtenir la version d'ab
        13:56 <misc> touff: oui ?
        13:56 <haypo> j'ai juste regardé la version du paquet
        13:56 <haypo> comment t'as fait pour lire la version d'ab ?
        13:56 <taziden> haypo: au lancement, il me dit qu'il est à la version 2.3, et après, il meurt dans un joli segfault
        13:57 <haypo> ah ok, "This is ApacheBench, Version 2.3 <$Revision: 655654 $>"
        13:57 <taziden> yep
        13:57 <taziden> that's it
        13:57 <haypo> p'tain, le numéro de commit !
        13:57 <taziden> Ouais, j'ai halluciné aussi là dessus
        13:57 <haypo> au boulot on est à peine à ~7300
        13:58 <misc> normal, vous passez votre temps sur irc à optimiser trac :)
        13:58 <touff> apache est l'iun des projets le splus actifs
        13:58 <touff> heureusement :)
        13:59 <touff> par contre apachebench effectivement c'est tres impressionnant
        13:59 <haypo> misc: les questions sur Trac c'était pas pour le boulot
        13:59 <haypo> Apache c'est pas juste le serveur HTTP
        13:59 <haypo> c'est plein de trucs Java !
        13:59 <haypo> http://www.apache.org/ : voir la liste "Apache projects"
        14:00 <haypo> j'arrive pas à la compter... disons 70
        14:00 <haypo> ah oui, SpamAssassin par exemple est un projet Apache
        14:01 <taziden> ça segfault aussi avec la version lenny oO
        14:05 <haypo> tu utilises quelle commande pour lancer ab ?
        14:05 <taziden> sudo ab ... suivi des options que tu as donné tout à l'heure en remplaçant l'url de l'ifpi par celle de mon serveur
        14:06 <haypo> sudo ab -c 100 -n 1000000000 http://localhost/ ?
        14:06 <haypo> utilise -c 2 plutôt
        14:06 <haypo> et utiliser sudo n'est pas du tout une bonne idée
        14:06 <taziden> Ok
        14:07 <taziden> De toutes les manières il devrait y avoir quelque chose d'autre qu'un segfault au cas où les valeurs passées sont ubuesques
        14:17 <taziden> bon, résultat, je trouve que mon serveur s'en sort honorablement
        14:18 <taziden> mais j'ai pourri mon log ...
        15:02 <No`> salut l'afpy
        15:31 <AlexCONRAD> lo
        19:02 <crashdump> bonsoir le chan !
        19:04 <touff> yiop crashdump 
        19:04 <crashdump> pas grand monde en fait :)
        19:04 <touff> gawel, si t'es dans le coin quelqu'un
        19:04 <touff> crashdump, a fait un joli bidule et il voulait un avis exterieur sur la gestion des threads
        19:05 <touff> ou ccomb aussi tien :)
        19:05 <touff> envois le script crashdump :)
        19:05 <crashdump> c'est par là: http://www.crashdump.fr/myFiles/autres/fetchOverProxys.py
        19:05 <touff> gawel, ca devrait te rappeler quelque chose :D
        19:05 <crashdump> je tatonne avec la doc pour les threads .. j'ai jamais pratiqué avant :)
        19:08 <touff> bon a cette heure ci soit ils sont à l'apero soit dans le metro crashdump ;) soyons patients
        19:08 <crashdump> oki oki
        19:08 <crashdump> ça me laisse le temps de lui faire une gueule plus propre
        19:08 <crashdump> et surtout ne pas me faire lincher par des roxxors :)
        19:45 <gawel> utilise multiprocess
        20:08 <touff> :) mon gawie
        20:08 <crashdump> :)
        20:08 <crashdump> merci, je vais lire la doc
        20:08 <touff> multiprocess est plus performant gawel ?
        20:11 <crashdump> from processing import process as worker ?
        20:22 <crashdump> python 2.6 obligatoire ?
        20:34 <gawel> non y a un backport pour 2.5 / 2.4
        20:35 <crashdump> ah, comment est ce que je dois procéder ?
        20:35 <crashdump> plz :)
        20:35 <gawel> a prioris c'est plus performant, ca ouvre un autre process donc pas de GIL
        20:36 <gawel> easy_install multiprocessing
        20:36 <crashdump> nickel, ça fonctionne ;)
        20:36 <crashdump> merci.
        20:37 <gawel> par contre le process doit être autonome
        20:37 <gawel> et tu peux lui passer en paramètre que des truc pickable eg: des types de base
        22:03 <crashdump> gawel ? je suis etoné .. je n'arrive pas a faire tourner mes process en paralelle.. il les enchaines..
        22:03 <crashdump> j'ai surement du manquer quelque chose, mais je vois pas trop quoi
        22:04 <gawel> je sais pas ce que t'as fais, je saurais pas dire
        22:04 <crashdump> http://www.crashdump.fr/myFiles/autres/fetchOverProxys.py
        22:04 <crashdump> si tu pouvais jeter un peil vite fait pour m'orienter ça serais sympa ;)
        22:05 <gawel> normal, tu lui balance qu'un proxy
        22:06 <gawel> apply_async(frtch, proxylist)
        22:06 <crashdump> il ya donc quelque chose que j'ai pas saisi ^^
        22:06 <crashdump> comment je peux lui en specifier plusieurs ?
        22:07 <gawel> comme je viens de l'écrire
        22:07 <crashdump> ahhh, merci.. j'y retourne.
        22:07 <gawel> il va prendre tout les prox un par un et les balancer a fetch
        22:07 <crashdump> merci.
        22:09 <feth> ah non, j'ai rien demandé
        22:13 <crashdump> gawel, j'ai du mal a saisir.. si je lui balance toute la a un thread, il n'y aura pas un thread par proxy ?
        22:13 <crashdump> toute la liste*
        22:13 <gawel> c'est pas des thread
        22:14 <gawel> et ca fonctionne comme map
        22:14 <crashdump> càd ?
        22:14 <gawel> >>> map(lambda x:x*x, [0,1,2])
        22:14 <gawel> [0, 1, 4]
        22:16 <gawel> lambda x:x*x == def mul(x): return x*x
        22:17 <crashdump> ok, et ensuite comment je peux forker un peu tout ça pour que ça envois la sauce un peu plus ?
        22:18 <gawel> c'est ce que fais apply_async
        22:19 <gawel> il va lancer PROCESSES simultané
        22:19 <crashdump> merci en tout cas pour ta patience.. j'apprend tout juste :)
        22:19 <crashdump> mais avec le result = pool.apply_async(fetch, (proxylist,))
        22:19 <gawel> pas forcément évident ce module en prime..
        22:19 <crashdump> ;)
        22:20 <gawel> bah t'aura le result quand tous les process seront terminé
        22:20 <crashdump> du coup le print result.get(timeout=7000) fait planter lamentablement le script
        22:20 <gawel> ah
        22:20 <crashdump> avec un AttributeError: 'list' object has no attribute 'rfind'
        22:20 <gawel> ptete je me goure alors
        22:20 <gawel> je matte
        22:21 <crashdump> je regarde a droite et a gauche sur le net mais c'est pas encore super bien documenté pour un noob like me
        22:21 <crashdump> merci ;)
        22:23 <gawel> je sais plus ou je m'en suis servi
        22:23 <gawel> la lose
        22:23 <crashdump> :/
        22:28 <gawel> ah mais mets pas proxylist dans un tuple
        22:28 <crashdump> tuple ?
        22:29 <gawel> pool.apply_async(fetch, (proxylist,))
        22:29 <gawel> pool.apply_async(fetch, proxylist)
        22:29 <crashdump> j'ai essayé.. il m'envois bouler.
        22:29 <crashdump> aat' je te resors l'erreur
        22:30 <crashdump> TypeError: fetch() takes exactly 1 argument (26353 given)
        22:30 <crashdump> ouch :)
        22:30 <gawel> ah
        22:30 <gawel> essais avec map alors
        22:30 <gawel> pool.map(fetch, proxylist)
        22:34 <crashdump> je sais pas trop si ça marche.. j'ai pas de retour console !?
        22:34 <gawel> si t'en a 26353 t'as le temps
        22:34 <crashdump> ah il actualise pas en live ?
        22:34 <gawel> non
        22:35 <gawel> tu peux les faire 10 par 10
        22:35 <crashdump> méthode ?
        22:35 <gawel> je sais pas, y a 1000 moyen
        22:36 <crashdump> ok, je vais voir ça. merci ;)
        22:39 <gawel> >>> l = range(20)
        22:39 <gawel> >>> l
        22:39 <gawel> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
        22:39 <gawel> >>> while l: print [l.pop() for i in range(len(l) > 10 and 10 or len(l))]
        22:39 <gawel> ... 
        22:39 <gawel> [19, 18, 17, 16, 15, 14, 13, 12, 11, 10]
        22:39 <gawel> [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
        22:56 <crashdump> gawel: http://code.google.com/p/workerpool/wiki/MassDownloader
        22:56 <crashdump> excellent exemple.. si t'as envie de te souvenir ;)
        22:56 <crashdump> Merci pour l'aide en tout cas je devrais pouvoir arriver a un truc propre maintenant
        23:03 <gawel> ouais enfin workerpool c'est pas le même module, mais bon
        23:04 <crashdump> ça a l'air propre aussi.. non ?
        23:04 <gawel> connais pas
        23:04 <crashdump> j'essaye cette methode aussi.. véra bien :)
        23:04 <crashdump> je pourrais comparer après
        23:04 <gawel> pas d'activité depuis mars 2008
        23:05 <gawel> a mon avis c'est mort né
        23:05 <gawel> Status
        23:05 <gawel> There's good work being done on a native Python multiprocessing module. The functionality has a lot of overlap with workerpool. Worth having a look at! 
        23:05 <crashdump> ah xD