N-PN White-Hat Project
Nos beugs - Version imprimable

+- N-PN White-Hat Project (https://dev.n-pn.fr/forum)
+-- Forum : Communauté (https://dev.n-pn.fr/forum/forumdisplay.php?fid=10)
+--- Forum : Le bistrot (https://dev.n-pn.fr/forum/forumdisplay.php?fid=17)
+--- Sujet : Nos beugs (/showthread.php?tid=2690)

Pages : 1 2


Nos beugs - InstinctHack - 12-02-2013

Salut,

Qui peux prétendre programmer et n'avoir jamais rencontré un beug ? personne Smile
Et malgré la haine qu'on as contre eux sur le moment, quel bonheur de COMPRENDRE pourquoi et ainsi corrigé, améliorer et avancer, et cela même si c'est au prix d'heure de recherche, car on est des hackers et qu'on aime ça (limite sado parfois :') )

Et vu que je me retrouve fasse à pas mal de beug insolite en ce moment je partage Smile

Je ne dis pas pourquoi, je vous laisse chercher Wink
Je donne [+1] de réputation à celui qui trouve le premier la raison à l'un beug

1

Code python (valide 2.7 et 3.2) mais ne marche pas...
Code PYTHON :

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import json

description=["Affiche un gentil message plein d'amour à celui qui se prétend hacker",
    "Sans connaitre les dorks, l'anglais et lire la documentation...",
    "\001ACTION sent le lam3ouz d'ici...\001"]

rtfm={}
rtfm["description"]=description

Data={}
Data['rtfm']=rtfm
print(json.dumps(Data,indent=4))
 



2

Le premier as avoir trouver est supersnail

Code python (valide 2.7 et 3.2)
Code PYTHON :

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time,threading

def enfant():
    time.sleep(3)
    print("Je suis l'enfant")

threading.Thread(None, enfant(), None, (), {}).start()#fonction non bloquante
print("Je suis le père")
 


La sortie attendue est :
Citation :Je suis le père
Je suis l'enfant
Et pourtant c'est l'inverse qui se produit... pourquoi??

j'en rajouterais quand je m'en souviendrais ou affronterais d'autres :/


RE: Nos beugs - notfound - 12-02-2013

(12-02-2013, 13h56)khaled a écrit : Code python (valide 2.7 et 3.2)
Code PYTHON :

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time,threading

def enfant():
    time.sleep(3)
    print("Je suis l'enfant")

threading.Thread(None, enfant(), None, (), {}).start()#fonction non bloquante
print("Je suis le père")
 


La sortie attendue est :
Citation :Je suis le père
Je suis l'enfant
Et pourtant c'est l'inverse qui se produit... pourquoi??

j'en rajouterais quand je m'en souviendrais ou affronterais d'autres :/


Tu appelles ton thread avant.
Personnellement, pour avoir la réponse attendue, j'ai juste fait :

Code PYTHON :

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time,threading

def enfant():
    time.sleep(3)
    print("Je suis l'enfant")

print("Je suis le père")
threading.Thread(None, enfant(), None, (), {}).start()#fonction non bloquante
 


Code BASH :

root@notfound:~/TEST$ python python_kha.py
Je suis le père
Je suis l'enfant


CQFD


RE: Nos beugs - InstinctHack - 12-02-2013

Notfound, le lancement de thread est non bloquant, donc on passe direct au reste du code Smile alors pourquoi là ça ne se fait pas...

pour moi t'as pas validé :p


RE: Nos beugs - ark - 12-02-2013

@NotFound: Son probleme vient du fait que la fonction Threading.Thread() est censé être non bloquante. De ce fait, l'affichage devrait être celui attendu, ce qui n'est pas le cas...

Edit: grilled x)


RE: Nos beugs - supersnail - 12-02-2013

Ben peut-être parce que l'OS passe la main au nouveau thread directement une fois créé ? (ou alors le thread a été créé juste avant le tick de l'horloge système, et le task scheduler a switch sur le nouveau thread ensuite).

Quoi qu'il en soit, ce comportement dépend du système d'exploitation, des flags passés à l'OS pour la création du thread (si celui-ci est créé en "suspended" puis resumed, etc...), et la sortie de ton prog est assez aléatoire imo.


RE: Nos beugs - notfound - 12-02-2013

Tu veux un résultat attendu, je te le sors.
Je cite quelqu'un sur IRC :
" +Khaled | osef de la façon de faire nan ? "

J'attends mon point x)


RE: Nos beugs - InstinctHack - 12-02-2013

supersnail, perso le code réagi toujours de la meme manière

notfound, si t'arrive à faire marcher mon code en ne changeant pas de place les lignes, sans en retirer, sans en ajouter, là je te le donne (tu est donc autorisé uniquement à ajouter, supprimer et modifier des caractères tant que la ligne ne devient pas vide)


RE: Nos beugs - supersnail - 12-02-2013

J'ai trouvé, il faut faire
Code PYTHON :
 threading.Thread(None, enfant, None, (), {}).start()#fonction non bloquante

au lieu de
Code PYTHON :
threading.Thread(None, enfant(), None, (), {}).start()#fonction non bloquante


En effet, "enfant()" appelle la fonction en-dehors du thread, et par conséquent bloque l'appel à la fonction :')
* supersnail se flagelle pour pas l'avoir vu avant.

Can I haz my cheezburger ? :þ


RE: Nos beugs - gruik - 12-02-2013

(12-02-2013, 14h31)supersnail a écrit : Ben peut-être parce que l'OS passe la main au nouveau thread directement une fois créé ? (ou alors le thread a été créé juste avant le tick de l'horloge système, et le task scheduler a switch sur le nouveau thread ensuite).

Quoi qu'il en soit, ce comportement dépend du système d'exploitation, des flags passés à l'OS pour la création du thread (si celui-ci est créé en "suspended" puis resumed, etc...)

pour la petite info le noyau Linux n'est pas déterministe à ce niveau, on a aucune garantie que le père resume avant le fils ou l'inverse

(12-02-2013, 14h31)supersnail a écrit : la sortie de ton prog est assez aléatoire imo.

toutafaite


RE: Nos beugs - InstinctHack - 12-02-2013

Euh... Je suis d'accord avec vous, mais dans le cas présent, le père peut envoyer mon message tout de suite après le lancement du thread, alors que l'enfant (ou le thread) doit attendre 3 longues secondes avant de le faire.
Autant dire qu'il y a de la marge Wink


RE: Nos beugs - gruik - 12-02-2013

ouai comme dit c'etait juste pour la précision, pour pouvoir sleep(3) le fils a besoin d'etre resume par le noyau de toutes façons donc la question restait entière Wink

sinon pour le premier pb c'est marqué en toutes lettres non ?
Code PYTHON :

UnicodeDecodeError: 'utf8' codec can't decode byte 0x85 in position 40: invalid start byte


"0x85" c'est le "à" dans "(...) d'amour à celui (...)"
du coup :

Code PYTHON :

>>> description=[u"Affiche un gentil message plein d'amour à celui qui se prétend hacker","Sans connaitre les dorks, l'anglais et lire la documentation...","\001ACTION sent le lam3ouz d'ici...\001"]
>>> rtfm["description"]=description
>>> Data['rtfm']=rtfm
>>> print(json.dumps(Data,indent=4))
{
    "rtfm": {
        "description": [
            "Affiche un gentil message plein d'amour \u00e0 celui qui se pr\u00e9tend hacker",
            "Sans connaitre les dorks, l'anglais et lire la documentation...",
            "\u0001ACTION sent le lam3ouz d'ici...\u0001"
        ]
    }
}
 



RE: Nos beugs - InstinctHack - 12-02-2013

nan, c'est pas ce problème la, remplace
description
par
Code PYTHON :

description=["a","b","c"]
 



RE: Nos beugs - gruik - 12-02-2013

Code PYTHON :

>>> import json
>>> description=["a","b","c"]
>>> rtfm={}
>>> rtfm["description"]=description
>>> Data={}
>>> Data['rtfm']=rtfm
>>> print(json.dumps(Data,indent=4))
{
    "rtfm": {
        "description": [
            "a",
            "b",
            "c"
        ]
    }
}
 


hum... pas de souci chez moi


RE: Nos beugs - InstinctHack - 12-02-2013

justement, c'est ça qui est étrange! Le code est fonctionnel !
Pourtant chez moi, il ne marche pas...
J'ai le même interpréteur, j'ai le même contenu de fichier, quel sont les variables qui difère et pourrais rentrer en ligne de compte ??

le problème était que mon fichier python s'appelait "json.py"
essayez vous verrez :p


RE: Nos beugs - supersnail - 12-02-2013

Ben forcément, ça conflict avec le module "json" ... :')

Mais ça on peut pas le deviner le nom que tu donnes aux fichiers Wink