Morph et triggerEvent

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
14 messages Options
Reply | Threaded
Open this post in threaded view
|

Morph et triggerEvent

Serge Stinckwich
Bonjour à tous,

j'ai un problème bizarre avec les Moprh et la gestion des évènements ...
J'ai construit un Morph qui dans sa méthode step gènère un évènement du genre :
self triggerEvent: #tick

J'ai un autre objet qui observe le morph et récupère l'évènement en
affichant juste un message sur le Transcript :

morph when:#tick send:#show: to:Transcript with:'Tick'.

J'ai une méthode exemple qui construit le Morph et l'objet qui observe
le Morph ... et qui se termine par :

...
morph openInHand

pour ouvrir le Morph.

Les choses bizarres commencent : rien ne s'affiche sur le Transcript,
mais si je rajoute : ^morph à la fin de la méthode exemple,
subitement les évènements générés par le Morph s'affiche dans le
Transcript ... Je soupconne quelque chose avec le openInHand, mais je
ne comprends pas trop ce qui se passe.

Si quelqu'un a une idée ?

Cordialement,
--
Serge Stinckwich
http://blog.doesnotunderstand.org/
_______________________________________________
Squeak-fr mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr
Reply | Threaded
Open this post in threaded view
|

Re: Morph et triggerEvent

Hilaire Fernandes-4
Pas d'idée.

Hilaire

Serge Stinckwich a écrit :

> Bonjour à tous,
>
> j'ai un problème bizarre avec les Moprh et la gestion des évènements ...
> J'ai construit un Morph qui dans sa méthode step gènère un évènement du genre :
> self triggerEvent: #tick
>
> J'ai un autre objet qui observe le morph et récupère l'évènement en
> affichant juste un message sur le Transcript :
>
> morph when:#tick send:#show: to:Transcript with:'Tick'.
>
> J'ai une méthode exemple qui construit le Morph et l'objet qui observe
> le Morph ... et qui se termine par :
>
> ...
> morph openInHand
>
> pour ouvrir le Morph.
>
> Les choses bizarres commencent : rien ne s'affiche sur le Transcript,
> mais si je rajoute : ^morph à la fin de la méthode exemple,
> subitement les évènements générés par le Morph s'affiche dans le
> Transcript ... Je soupconne quelque chose avec le openInHand, mais je
> ne comprends pas trop ce qui se passe.
>
> Si quelqu'un a une idée ?
>
> Cordialement,

_______________________________________________
Squeak-fr mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr
Reply | Threaded
Open this post in threaded view
|

Re: Morph et triggerEvent

Stéphane Rollandin-2
In reply to this post by Serge Stinckwich
j'ai essayé de reproduire ton problème sur mon image habituelle, une
3.8.1, mais tout marche bien...

est-ce spécifique à une image particulière ?

Stef

_______________________________________________
Squeak-fr mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr
Reply | Threaded
Open this post in threaded view
|

Re: Morph et triggerEvent

Noury Bouraqadi
In reply to this post by Serge Stinckwich
Serge,

Envoies nous le bout de code qui montre le pb.

Noury
On 14 mai 08, at 18:05, Serge Stinckwich wrote:

> Bonjour à tous,
>
> j'ai un problème bizarre avec les Moprh et la gestion des  
> évènements ...
> J'ai construit un Morph qui dans sa méthode step gènère un évènement  
> du genre :
> self triggerEvent: #tick
>
> J'ai un autre objet qui observe le morph et récupère l'évènement en
> affichant juste un message sur le Transcript :
>
> morph when:#tick send:#show: to:Transcript with:'Tick'.
>
> J'ai une méthode exemple qui construit le Morph et l'objet qui observe
> le Morph ... et qui se termine par :
>
> ...
> morph openInHand
>
> pour ouvrir le Morph.
>
> Les choses bizarres commencent : rien ne s'affiche sur le Transcript,
> mais si je rajoute : ^morph à la fin de la méthode exemple,
> subitement les évènements générés par le Morph s'affiche dans le
> Transcript ... Je soupconne quelque chose avec le openInHand, mais je
> ne comprends pas trop ce qui se passe.
>
> Si quelqu'un a une idée ?
>
> Cordialement,
> --
> Serge Stinckwich
> http://blog.doesnotunderstand.org/
> _______________________________________________
> Squeak-fr mailing list
> [hidden email]
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr
>

Noury Bouraqadi
------------------------------------------------------------------
Dr. Noury Bouraqadi - Enseignant/Chercheur
Responsable de l'enseignement de l'informatique
ARMINES - Ecole des Mines de Douai - Dept. I.A.
http://vst.ensm-douai.fr/noury

European Smalltalk Users Group Board
http://www.esug.org
------------------------------------------------------------------




_______________________________________________
Squeak-fr mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr
Reply | Threaded
Open this post in threaded view
|

Re: Morph et triggerEvent

Serge Stinckwich
J'ai mis le code qui pose problème en attachement de ce message.

J'ai 3 objets : un Morph (de la classe MyMorph) qui émet régulièrement
des évènements #tick, un objet
Pour tester le code, il faut exécuter : MyMorph example1 et MyMorph example2.
La seule différence est que la deuxième version retourne le morph en résultat.

J'ai testé dans les images squeak suivantes (les deux premières sont
des images squeak-dev de Damien) :
- sq3.10-7159dev08.05.2 : example1 n'affiche rien, example2 affiche
régulièrement les évènements dans le Transcript.
- sq3.9-7067dev07.10.1 : example1 n'affiche rien, example2 n'affiche
qu'un seul évènement.
- Squeak3.8.1-6747full : idem que précédente
- Pharo0.1-10021 : idem que précédente

L'image squeak-dev 3.10 incorpore les UI enhancements de Pinesoft, ce
qui explique peut-être le comportement différent, mais c'est la seule
version (example1) qui semble être le comportement correct.
Pourquoi les autres images n'affichent pas régulièrement les évènements ?

Cordialement,

--
Serge Stinckwich
http://blog.doesnotunderstand.org/

_______________________________________________
Squeak-fr mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr

SergeStinckwich.st (2K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Morph et triggerEvent

Stéphane Rollandin-2
j'ai trouvé:

dans ton example1, l'object référencé par m est garbage-collecté parce
qu'il n'est pas retourné par la méthode (le pourquoi de ce comportement
ne m'est pas très clair); du coup, un WeakMessageSend pert son receiver,
et la chaine de tes événements est interrompue.

pour t'en convaincre, deux choses:

1) fait MyMorph example1, ouvre un explorateur sur le morph qui apparait
"in Hand" et regarde son actionMap (dans extension, otherProperties).
c'est un WeakMessageSend dont le receiver est nil. donx le message
#eventOccured n'a nulle part où aller.

2) va dans la méthode Object>>When:send:to: et remplace WeakMessageSend
par MessageSend. ça marche.


conclusion: tu est tombé sur une configuration où la viabilité d'un de
tes objects n'est pas suffisamment assurée (manque de référence), et
donc il disparait prématurément, plus ou moins vite ce qui explique que
tu puisse voir un message dans le Transcript, ou aucun.


CQFD ?

Stef

_______________________________________________
Squeak-fr mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr
Reply | Threaded
Open this post in threaded view
|

Re: Morph et triggerEvent

Serge Stinckwich
Le 15 mai 2008 22:59, Stéphane Rollandin <[hidden email]> a écrit :
> j'ai trouvé:

Bingo ! Merci Stéphane.

> dans ton example1, l'object référencé par m est garbage-collecté parce qu'il
> n'est pas retourné par la méthode (le pourquoi de ce comportement ne m'est
> pas très clair); du coup, un WeakMessageSend pert son receiver, et la chaine
> de tes événements est interrompue.

Oui, je commence à comprendre, mais la sémantique ne me parait pas
très claire également ...
ce type de comportement me parait très fragile. Surtout que le
comportement n'est pas identique suivant la version de Squeak.

Même en retournant l'instance m à la fin de example2 dans une image
3.9, je n'ai pas le comportement souhaité : un affichage régulier
d'évènements.
Par contre, dés que je fais un inspect sur MyMorph example2, cela
marche ... donc c'est bien un problème de référence qui disparait.

> pour t'en convaincre, deux choses:
>
> 1) fait MyMorph example1, ouvre un explorateur sur le morph qui apparait "in
> Hand" et regarde son actionMap (dans extension, otherProperties). c'est un
> WeakMessageSend dont le receiver est nil. donx le message #eventOccured n'a
> nulle part où aller.

Oui, j'avais déjà remarqué cela.

> 2) va dans la méthode Object>>When:send:to: et remplace WeakMessageSend par
> MessageSend. ça marche.

En effet, cela marche sans problème dans Sq3.9 et 3.10.
Pourquoi la gestion des évènements est basée sur des WeakMessageSend
et pas des MessageSend ?
J'imagine pour éviter d'avoir des erreurs si j'essaie d'envoyer un
message mal formé ?

> conclusion: tu est tombé sur une configuration où la viabilité d'un de tes
> objects n'est pas suffisamment assurée (manque de référence), et donc il
> disparait prématurément, plus ou moins vite ce qui explique que tu puisse
> voir un message dans le Transcript, ou aucun.
>
>
> CQFD ?
>
> Stef
>
> _______________________________________________
> Squeak-fr mailing list
> [hidden email]
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr
>



--
Serge Stinckwich
http://blog.doesnotunderstand.org/
_______________________________________________
Squeak-fr mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr
Reply | Threaded
Open this post in threaded view
|

Re: Morph et triggerEvent

Hilaire Fernandes-2

Le vendredi 16 mai 2008 à 09:21 +0200, Serge Stinckwich a écrit :

> Oui, je commence à comprendre, mais la sémantique ne me parait pas
> très claire également ...
> ce type de comportement me parait très fragile. Surtout que le
> comportement n'est pas identique suivant la version de Squeak.
>
> Même en retournant l'instance m à la fin de example2 dans une image
> 3.9, je n'ai pas le comportement souhaité : un affichage régulier
> d'évènements.

Mais que fais tu de cette instance retournée? La référence tu dans une
variable dans un Worksapce. P'tet que le comportement du workspace est
différent dans les images que tu as testée.


Hilaire

--
CDDP des Landes
Ingénierie éducative
BP401 - 614, rue du ruisseau
40012 Mont de Marsan cedex
T 05 58 75 50 10
F 05 58 06 29 18
http://crdp.ac-bordeaux.fr/cddp40

_______________________________________________
Squeak-fr mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr

signature.asc (196 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Morph et triggerEvent

Stéphane Rollandin-2
In reply to this post by Serge Stinckwich
Serge Stinckwich a écrit :
> Pourquoi la gestion des évènements est basée sur des WeakMessageSend
> et pas des MessageSend ?

je ne sais pas, ça correspond sans doute à un paradigme de gestion
d'événements bien précis peut-être documenté quelque part.

personnellement je n'utilise jamais #when:send:to: et je ne connais pas
bien ce système. je préfère envoyer des messages directement plutôt que
générer des évènements.


Stef

_______________________________________________
Squeak-fr mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr
Reply | Threaded
Open this post in threaded view
|

Re: Morph et triggerEvent

Serge Stinckwich
Oui, tu peux toujours recréer un mécanisme de gestion d'évènements
adhoc mais bon c'est un peut bête puisqu'il existe déjà ...

Le 16 mai 2008 10:10, Stéphane Rollandin <[hidden email]> a écrit :

> Serge Stinckwich a écrit :
>>
>> Pourquoi la gestion des évènements est basée sur des WeakMessageSend
>> et pas des MessageSend ?
>
> je ne sais pas, ça correspond sans doute à un paradigme de gestion
> d'événements bien précis peut-être documenté quelque part.
>
> personnellement je n'utilise jamais #when:send:to: et je ne connais pas bien
> ce système. je préfère envoyer des messages directement plutôt que générer
> des évènements.
>
>
> Stef
>
> _______________________________________________
> Squeak-fr mailing list
> [hidden email]
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr
>



--
Serge Stinckwich
http://blog.doesnotunderstand.org/
_______________________________________________
Squeak-fr mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr
Reply | Threaded
Open this post in threaded view
|

Re: Morph et triggerEvent

Serge Stinckwich
In reply to this post by Hilaire Fernandes-2
2008/5/16 Hilaire Fernandes <[hidden email]>:

>
> Le vendredi 16 mai 2008 à 09:21 +0200, Serge Stinckwich a écrit :
>
>> Oui, je commence à comprendre, mais la sémantique ne me parait pas
>> très claire également ...
>> ce type de comportement me parait très fragile. Surtout que le
>> comportement n'est pas identique suivant la version de Squeak.
>>
>> Même en retournant l'instance m à la fin de example2 dans une image
>> 3.9, je n'ai pas le comportement souhaité : un affichage régulier
>> d'évènements.
>
> Mais que fais tu de cette instance retournée? La référence tu dans une
> variable dans un Worksapce. P'tet que le comportement du workspace est
> différent dans les images que tu as testée.

Je n'en fais rien de particulier ... Il me semble me souvenir que le
workspace garde des références vers les objets.

--
Serge Stinckwich
http://blog.doesnotunderstand.org/
_______________________________________________
Squeak-fr mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr
Reply | Threaded
Open this post in threaded view
|

Re: Morph et triggerEvent

Stéphane Rollandin-2
In reply to this post by Serge Stinckwich
Serge Stinckwich a écrit :
> Oui, tu peux toujours recréer un mécanisme de gestion d'évènements
> adhoc mais bon c'est un peut bête puisqu'il existe déjà ...

j'ai pas encore fait le tour de tout ce qui existe déjà dans Squeak :)


Stef

_______________________________________________
Squeak-fr mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr
Reply | Threaded
Open this post in threaded view
|

Re: Morph et triggerEvent

Serge Stinckwich
In reply to this post by Hilaire Fernandes-2
Je pense que l'ensemble des problèmes provient du fait que certains de
mes objets sensés surveiller des évènements sont garbagés de manière
fortuite ...
Je vais faire dépendre tous les objets que je crée de mon Morph ...
cela devrait aller mieux ;-)

--
Serge Stinckwich
http://blog.doesnotunderstand.org/
_______________________________________________
Squeak-fr mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr
Reply | Threaded
Open this post in threaded view
|

Re: Morph et triggerEvent

Noury Bouraqadi
J'ai fait le test avec une 3.10-7159 dev d'avril. Je n'ai rien qui  
apprait sur le transcript ! Ca ne marche que lorsque je stock l'objet  
retourné dans l'exemple 2 dans une variable dans le workspace.
Je confirme l'analyse de Stéphane, tu perds la référence sur ton objet  
qui est supprimé. Du coupe le receiver du WeakMessageSend devient nil  
ce qui a pour conséquence ne pas évaluer le message.

Je pense que c'est une sémantique défendable puisque l'objectif est  
d'avoir une relation souple et ne pas bloquer le GC des objets  
destinataires des évenements.

Noury

On 16 mai 08, at 11:08, Serge Stinckwich wrote:

> Je pense que l'ensemble des problèmes provient du fait que certains de
> mes objets sensés surveiller des évènements sont garbagés de manière
> fortuite ...
> Je vais faire dépendre tous les objets que je crée de mon Morph ...
> cela devrait aller mieux ;-)
>
> --
> Serge Stinckwich
> http://blog.doesnotunderstand.org/
> _______________________________________________
> Squeak-fr mailing list
> [hidden email]
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr
>

Noury Bouraqadi
------------------------------------------------------------------
Dr. Noury Bouraqadi - Enseignant/Chercheur
Responsable de l'enseignement de l'informatique
ARMINES - Ecole des Mines de Douai - Dept. I.A.
http://vst.ensm-douai.fr/noury

European Smalltalk Users Group Board
http://www.esug.org
------------------------------------------------------------------




_______________________________________________
Squeak-fr mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr