[Discussion] Computercraft ne répond plus ?! [Discussion]

Voir le sujet précédent Voir le sujet suivant Aller en bas

[Discussion] Computercraft ne répond plus ?! [Discussion]

Message par eagle_fire78 le Lun 11 Avr - 19:27

Bon alors je poste cela afin de signaler que computercraft est cassé.

Cela à commencer avant le reboot de 16h00 hier (10/04) puis quelques minutes après plus rien ne marchait.
Des gros freeze CC apparaissaient déjà avant le reboot mais en plus légers et disparaissaient.

Il va peut-être falloir envisager un rollback avec une save d'avant pour tous les programmes :/

Afin de rechercher le bug coté joueur :
   - Avez vous ajouté sur le serveur un programme conséquent ?
   - Un programme qui broadcast rednet de manière permanente ?
   - Autres choses qui pourraient avoir un lien avec ce problème ?


Pour ma part, je n'ai rien rajouter comme programme qui pourrait être la cause de ce freeze de l'infini et l'au-delà.
avatar
eagle_fire78

Messages : 69
Date d'inscription : 30/03/2016
Age : 18
Localisation : Quelque part ...

http://www.perdu.com

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par cedmeu le Mar 12 Avr - 0:07

sur les centaines de computer/turtles, j'ai pris un programme au hasard : une boucle infinie sans aucune pause.

Donc imaginez ça sur ne serait que 50 ou 100 programmes qui tournent en même temps....

Le "thread" CC était complètement planté ce soir, le reboot de 16h s'était pas fait aujourd'hui. Reboot manuel ça revient.

Pas certain que CC soit fait pour tourner autant sur un serveur.

cedmeu
Admin

Messages : 492
Date d'inscription : 28/03/2016

http://forum.computercraft.fr

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par Christophedlr34 le Mar 12 Avr - 7:57

Le problème n'est pas CC Ced, pour le coup si on commence à dev avec le cul, c'est sur que ça risque pas de fonctionner correctement.

Dans les tutos, je pense que je ferais un rappel des bonnes pratiques de programmation et en particulier concernant les boucles infinies (a éviter au possible).

Christophedlr34

Messages : 69
Date d'inscription : 30/03/2016

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par eagle_fire78 le Mar 12 Avr - 9:24

Je suis totalement d'accord avec Christophedlr34, computercraft à un bug connu avec le ddos rednet et les boucle infinies du genre qui ouvre un fichier qu n'existe pas en masse sans les fermer CC n'aime pas trop
avatar
eagle_fire78

Messages : 69
Date d'inscription : 30/03/2016
Age : 18
Localisation : Quelque part ...

http://www.perdu.com

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par eagle_fire78 le Mar 12 Avr - 9:24

Un programme optimiser c'est un programme qui fait pas lagguer
avatar
eagle_fire78

Messages : 69
Date d'inscription : 30/03/2016
Age : 18
Localisation : Quelque part ...

http://www.perdu.com

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par Yann151924 le Mar 12 Avr - 15:36

Après il est possible de faire un script sur la machine physique qui balaye les fichiers des ordinateurs (dossierserveur/world/computer/) qui permettrai de détecter les boucles infinis, voir un pattern spécifique visant a faire lag. Sa eviterai du temps perdu à verifier chaque computer Very Happy. Sous linux un simple grep -r "expression" /dossierserveur/world/computer et le tours est joué.

Sa permettrai de pouvoir vérifier ou tout du moins de trouver les programmes dev avec le cul pour reprendre l'expression de Christophedlr34 Smile

Yann151924

Messages : 10
Date d'inscription : 09/04/2016
Age : 22
Localisation : France

https://mineaurion.com

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par Christophedlr34 le Mar 12 Avr - 15:45

En fait c'est l'expression de mon formateur, et celle que Fred (JoueurDuGrenier) utilise de temps en temps concernant des jeux pourris de chez pourris lol.

Christophedlr34

Messages : 69
Date d'inscription : 30/03/2016

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par Yann151924 le Mar 12 Avr - 16:09

Bonne expression je trouve Very Happy, après codé de manière a économisé des ressources c'est pas facile à faire, sa prend du temps aussi ^^

Yann151924

Messages : 10
Date d'inscription : 09/04/2016
Age : 22
Localisation : France

https://mineaurion.com

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par eagle_fire78 le Mar 12 Avr - 16:42

C'est ça la prgrammation sinon pour répondre au script qui ballaye pour supprimer les boucles infinies il serait inutile et particulièrement chiant (excusé le vocabulaire)

Pourquoi, je m'explique, lorsque tu code un serveur tu utilise forcément une boucle infinie mais elle ne fera pas lagguer car elle sera en attente d'un évent et ça faire un script qui comprend ça bonne chance et lorsque je dev en serveur et que tout les mins mon script est supprimer ça me ferait rage quit.

Ce qui faut expliquer au personne c'est que l'on ne fait pas une boucle infinie qui tourne en permanence sans raison ou pour faire toujours la même opération du genre :

While True do
Term.clear ()
Term.setCursorPos(1, 1)
Print("J'aime avoir beaucoup de fps :p ")

-- sleep c'est pour les noob ça non ?

End

Ou sinon quand tu fait des fs.open en MASSE sans les fermer
avatar
eagle_fire78

Messages : 69
Date d'inscription : 30/03/2016
Age : 18
Localisation : Quelque part ...

http://www.perdu.com

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par Christophedlr34 le Mar 12 Avr - 17:38

En effet Eagle, là je suis encore au boulot pour 30 minutes, mais ce soir dès que je peux j'explique un peut tout ça et les bonnes pratiques, des conseils etc.

Une boucle infinie sur un serveur oui, mais comme tu le dis y a des events ; la boucle est infinie mais ce n'est pas comme en SDL (qui utilise encore cette merde ? lol) où ta boucle est infinie et tu testes les events. Un vrai bon travail et c'est ce que font les serveurs ou encore la librairie SFML (équivalent de SDL mais orienté objet), c'est une attente d'événements.

En effet, la boucle est infinie certes, mais le pollEvent lui, endors le programme jusqu'à ce qu'il intercepte un événement, la boucle infinie ne boucle alors pas.

Elle boucle pas dans le sens où, au sein de la boucle on a notre pollEvent, ce dernier indique au système qu'il attend un événement. Tan qu'il ne l'a pas reçu, le système laisse endormi le programme en question, de temps en temps il lui redonne la main (ce qui permet les interceptions) et le rendors si aucun event intercepté.

Il faut pas confondre le test d'événement reçu (pullEvent en général le nom), donc la boucle se fait toujours, simplement ça permet de traiter l'événement, et le pollEvent, qui lui attends de recevoir.

Mais tout ça j'en parlerais dans mes conseils et bonnes pratiques de codage. Faut savoir qu'une boucle infinie avec un pullEvent a pour effet d'avoir 100% du CPU consommé par le programme en permanence, en revanche un pollEvent lui c'est 0% tan qu'il n'a rien à faire. Quand il reçoit sont événement, la boucle continue après le pollEvent (donc le traitement est fait).

Puis quand la boucle arrive à la fin, elle repart au début et donc au pollEvent, qui endors le thread alors jusqu'à réception d'un événement.

Pour les fs.open, en effet il faut normalement fermer les descripteurs de fichiers, cependant si tu ne boucles pas et que ton programme se finit, le descripteur de fichier est automatiquement fermé, d'autant plus que là l'interpréteur LUA dnas notre cas est l'implémentation Java donc usage du garbage collector et de la gestion des descripteurs de fichiers (comme sur tout les langages C, C++, Java, C# et autres, maintenant le langage ferme automatiquement les descripteurs de fichiers et fait lui même les delete dans les cas d'allocations dynamiques, bien que dans ce dernier cas, on constate si on compile pas le C++ avec les dernières normes, que ce n'est pas fait et donc on a des memory leaks, mais c'est autre chose).


Bref, laisse moi simplement ce soir pour donner les bonnes pratiques, histoire que tout le monde soit bien au courant et fasse plus d'erreurs.

Christophedlr34

Messages : 69
Date d'inscription : 30/03/2016

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par eagle_fire78 le Mar 12 Avr - 17:51

Je parlais ici du pollEvent puisque je parle principalement d'event rednet.

J'attends avec impatience ton post sur les bonnes pratiques.
avatar
eagle_fire78

Messages : 69
Date d'inscription : 30/03/2016
Age : 18
Localisation : Quelque part ...

http://www.perdu.com

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par Yann151924 le Mar 12 Avr - 18:43

Pour revenir au "script chiant", sa reste très possible  suffit de mettre des pattern (regex ou autre), voir même si tu fait un programme CC et qu'il fait très peu de ligne avec un while et juste une bête addition ou juste si tu ouvre que des fichiers, en gros le programme bien degeu sa peut se repérer facilement Smile. Après je suis d'accord sur le fait que faut expliquer aux personnes comme tu l'as expliqué

Après reste aussi l'utilisation d'un outil comme warmroast qui permet de bien debuguer les threads.

Yann151924

Messages : 10
Date d'inscription : 09/04/2016
Age : 22
Localisation : France

https://mineaurion.com

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par cedmeu le Mar 12 Avr - 19:02

Si tu veux me dev un scrip bash qui detecte les programmes codésavec les pieds, c'est avec plaisir que j'accepte Smile

cedmeu
Admin

Messages : 492
Date d'inscription : 28/03/2016

http://forum.computercraft.fr

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par Yann151924 le Mer 13 Avr - 0:07

Code:
find /home/dossier -type f -name '*' | xargs wc -l | awk '{if($1 > 4) print $2}' | xargs grep "while true do"

Grosso modo sa va sortir tous les fichiers ayant plus de 4 ligne et contenant tous les while true do, après on peut inverser la condition pour voir les fichiers de moins de 4 lignes

Code:
find /home/dossier -type f -name '*' | xargs wc -l | awk '{if($1 < 4) print $2}' | xargs grep "while true do"

Ensuite au besoin on peut regarder la meme chose mais en incluant les fs.open



Sa permettra de voir déjà grosso modo les petit programmes qui peuvent faire lag, après faut voir ce que donne ces commandes Smile et voir ce qui reviens le plus souvent comme code degeu Smile


En testant sa me sort sa comme output, après j'ai juste mis une ligne :
/home/minecraft/**/world/computer/265/heure:while true do --=--

Yann151924

Messages : 10
Date d'inscription : 09/04/2016
Age : 22
Localisation : France

https://mineaurion.com

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par eagle_fire78 le Mer 13 Avr - 7:09

Il faut aussi ne pas retirer tous ce qui après while true do on un os.pollEvent()
avatar
eagle_fire78

Messages : 69
Date d'inscription : 30/03/2016
Age : 18
Localisation : Quelque part ...

http://www.perdu.com

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par Kasbrick le Mer 13 Avr - 8:16

Si un fait un while true do mais que l'on met dans cette boucle un sleep de 300 ou 600 celà fais-t-il aussi bugger/ramer le serveur ? Car je sais que dans mes programmes j'ai uje ferme a wheat et à bois et comme ça met du temps à pousser j'attant avant de refaire un tour du fiel.

Kasbrick

Messages : 14
Date d'inscription : 31/03/2016

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par Christophedlr34 le Mer 13 Avr - 9:17

Non, car ton sleep fait attendre le programme, il est en sommeil pour 300/600 secondes dans ton cas, donc pendant ce temps la boucle infinie est finie.

Comme je le disais dans mon "argumentaire" dans les tutos concernant ça justement, il faut bien faire la différence entre les boucles infinies et les boucles infinies qui sont finies. Boucles infinies, parce que tu as un while true do, mais la boucle infinie est "finie" dans le sens où tu as une attente (os.sleep) dans la boucle ou que tu as une attente d'événements (pollEvent), ta boucle est "finie", soit temporairement (os.sleep) soit tan qu'un event n'est pas reçu.

le terme de boucle infinie "finie", est de moi, c'est pour caractérisé le fait que pendant un certains temps, la boucle s'exécute plus, pendant tout ce temps là donc le système ne donne pas la main au programme (sur un temps donné, car sur l'attente d'événement, il redonne la main pendant quelques micro-secondes de temps en temps, ne serais-ce que pour s'assurer que le programme fonctionne toujours).

D'où l'importance en effet des os.sleep dans nos programmes CC, car cela permet de mettre en pause.

Par exemple, mon automatisation du four, est une boucle "infinie tant que", c'est à dire que ça boucle tan que ma condition est vraie (pas une boucle infinie while true do), dans mon cas tant que le coffre contient des items, la turtle boucle. La boucle se termine que quand le coffre est vide, imaginons donc que nous sommes plusieurs à y mettre des items dans le coffre, plus elle enlève et fait cuire, plus on rajoute, tan qu'on le fait elle boucle.

Mais au milieu, et merci au wiki officiel de Minecraft pour l'info, chaque élément met 10 secondes à cuire (quel qu'il soit), je calcul donc la quantité d'objets que je glisse dans le four, et fait attendre ma turtle le temps en question.

Ma boucle est alors "finie" avec un os.sleep, une fois le délais atteint, la boucle reprend et continue tan que la condition est vérifiée. Si je remplace ma condition par un while true do, le résultat est le même : elle attend que les items aient finis de cuire. La différence c'est que si le coffre est vide, il me faudrait rajouter un os.sleep (genre vérifier toute les 10 secondes par exemple) pour forcer le programme à s'endormir pendant un temps pour éviter une boucle infinie qui ne soit pas "finie".

Christophedlr34

Messages : 69
Date d'inscription : 30/03/2016

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par cedmeu le Ven 22 Avr - 23:01

Yann151924 a écrit:Grosso modo sa va sortir tous les fichiers ayant plus de 4 ligne et contenant tous les while true do, après on peut inverser la condition pour voir les fichiers de moins de 4 lignes
...

Je te remercie, mais ça je sais déjà faire Razz Et ça m'oblige à faire un sacré travail de vérification manuellement ensuite (une grande majorité de programmes ont des while true do ou autre...).

Ce qu'il faudrait, c'est un parser qui me sorte les programmes ayant une boucle while sans sleep, read, ou pollevent à l'intérieur. Ca oblige à repérer dans chaque fichier les blocs de la boucle entre le while et end, et de chercher entre ces deux lignes la présence d'un des éléments cités précédemment. surement compliqué à faire en sh, peut-être moins style en C ou autre...

cedmeu
Admin

Messages : 492
Date d'inscription : 28/03/2016

http://forum.computercraft.fr

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par Shiranuit le Ven 22 Avr - 23:19

En reprenant mon programme de mise en forme de code on peut le modifier de telle façon qu'il vérifie les boucles avec attente d'events et qui contiennent un sleep ou non puis on peut faire en sorte qu'il injecte un petit sleep si tu veux ou autre a toi de voir, ca me prendrait quelques minutes a modifié puis il serait fonctionnel pour trier les programmes.

Après je peux essayer en sh si tu veux mais je garantie pas la fiabilité x)
avatar
Shiranuit

Messages : 164
Date d'inscription : 02/04/2016

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par Yann151924 le Sam 23 Avr - 16:58

En sh toujours possible mais c'est plus compliqué quand une ligne Very Happy après peut être moyen avec une expression regex mais vraiment pas sur ce point je regarderais, mais si tu as un exemple de programme je suis preneur pour tester.

Yann151924

Messages : 10
Date d'inscription : 09/04/2016
Age : 22
Localisation : France

https://mineaurion.com

Revenir en haut Aller en bas

Re: [Discussion] Computercraft ne répond plus ?! [Discussion]

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum