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