Worlds in Worlds are NOT completely dead?! 🤩

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

Worlds in Worlds are NOT completely dead?! 🤩

Christoph Thiede

Very cool ... I did not know that this was even possible:



How can we improve and stabilize this exciting feature? MVC support seems to be missing at the moment, and also I noticed some other glitches, for example, menus in sub-projects don't pop up directly at the cursor. But this is a fabulous place to start towards perfecting live access to subprojects!


Best,
Christoph


Carpe Squeak!
Reply | Threaded
Open this post in threaded view
|

Re: Worlds in Worlds are NOT completely dead?! 🤩

Christoph Thiede

Wow, you can even nest them and drag and drop between them (even though with a few hick-ups):

https://user-images.githubusercontent.com/38782922/98850138-96282c00-2454-11eb-892a-671201def342.gif



Sent from the Squeak - Dev mailing list archive at Nabble.com.


Carpe Squeak!
Reply | Threaded
Open this post in threaded view
|

Re: Worlds in Worlds are NOT completely dead?! ????

David T. Lewis
On Wed, Nov 11, 2020 at 12:34:24PM -0600, Christoph Thiede wrote:
> Wow, you can even nest them and drag and drop between them (even though with
> a few hick-ups):
> https://user-images.githubusercontent.com/38782922/98850138-96282c00-2454-11eb-892a-671201def342.gif
> <https://user-images.githubusercontent.com/38782922/98850138-96282c00-2454-11eb-892a-671201def342.gif>
>

Indeed it is very cool. Bob Arning is certainly a resident expert on
this topic (and original author of much of it, judging by the method
stamps).

It is great that we have managed to keep it semi-functional for all
these years, and it will be even greater if can can polish and extend
it as you suggest :-)

In addition to just being very cool, it is also an excellent way of
validating the modularity of Morphic/MVC/SqueakShell/other projects.
My hope is that as you and others continue to make progress on reducing
dependence on global variables, it will become easier to make embedded
worlds work smoothly and reliably.

Dave


Reply | Threaded
Open this post in threaded view
|

Re: Worlds in Worlds are NOT completely dead?! ????

Christoph Thiede

Hi Dave,


eliminating further globals is definitively always a desirable goal, but are you referring to any certain domain? It looks as if the most problematic portions of global state resist in the Project/Process logic themselves. For example, should we have one user interrupt watcher per project, and how should be decided which of them is activated if there is an MVC embedded into a Morphic project? Questions over questions :-)


Best,

Christoph


Von: Squeak-dev <[hidden email]> im Auftrag von David T. Lewis <[hidden email]>
Gesendet: Mittwoch, 11. November 2020 21:19:32
An: The general-purpose Squeak developers list
Betreff: Re: [squeak-dev] Worlds in Worlds are NOT completely dead?! ????
 
On Wed, Nov 11, 2020 at 12:34:24PM -0600, Christoph Thiede wrote:
> Wow, you can even nest them and drag and drop between them (even though with
> a few hick-ups):
> https://user-images.githubusercontent.com/38782922/98850138-96282c00-2454-11eb-892a-671201def342.gif
> <https://user-images.githubusercontent.com/38782922/98850138-96282c00-2454-11eb-892a-671201def342.gif>
>

Indeed it is very cool. Bob Arning is certainly a resident expert on
this topic (and original author of much of it, judging by the method
stamps).

It is great that we have managed to keep it semi-functional for all
these years, and it will be even greater if can can polish and extend
it as you suggest :-)

In addition to just being very cool, it is also an excellent way of
validating the modularity of Morphic/MVC/SqueakShell/other projects.
My hope is that as you and others continue to make progress on reducing
dependence on global variables, it will become easier to make embedded
worlds work smoothly and reliably.

Dave




Carpe Squeak!
Reply | Threaded
Open this post in threaded view
|

Re: Worlds in Worlds are NOT completely dead?! ????

David T. Lewis
Hi Christoph,

On Mon, Nov 16, 2020 at 03:31:47PM +0000, Thiede, Christoph wrote:
> Hi Dave,
>
> eliminating further globals is definitively always a desirable goal, but
> are you referring to any certain domain? It looks as if the most problematic
> portions of global state resist in the Project/Process logic themselves.


The four globals of interest are:

- World. This has already been cleaned up, and the global World remains
only for support of external packages or projects that have references
to it. For a trunk image, the global can be removed without issue.

- ActiveWorld. This is meaningful only to a Morphic project and
presumably can be refactored to eliminate the global.

- ActiveHand. This is meaningful only to a Morphic project and
presumably can be refactored to eliminate the global.

- ActiveEvent. This is probably global to the system, and it may
be appropriate to leave it as a global variable.

My opinion - ActiveWorld looks like the next thing to eliminate
if possible. It is clearly related to World, and figuring out why
ActiveWorld needs to exist would be the next problem to solve.

After that, ActiveHand would be then next thing to look at. It is
specific to Morphic, and it is not clear what it should mean in
the context of World in World, or in mixed Morphic and MVC projects.

Finally, ActiveEvent might need attention. I would rate this as
low priority, and there may not be anything wrong with the current
use of global state for ActiveEvent.

> For example, should we have one user interrupt watcher per project, and
> how should be decided which of them is activated if there is an MVC embedded
> into a Morphic project? Questions over questions :-)
>

The user interrupt watcher exists at a lower level. I think (but am
not certain) that it needs to be this way. The event that triggers
the user interrupt watcher is processed through the VM, and by the
time the VM finds out about the user interrupt request, it does not
have any easy way to know about the Process the user request was
intended to interrupt.

So no, I don't think that this should be handled on a per-Project
basis. The key thing is to know (or deduce) what Process needs to
be interrupted, and it probably does not much matter what Project
context the interrupt is handled in.

Dave


Reply | Threaded
Open this post in threaded view
|

Re: Worlds in Worlds are NOT completely dead?! ????

Douglas Brebner-2

On 17/11/2020 01:11, David T. Lewis wrote:
> - ActiveHand. This is meaningful only to a Morphic project and
> presumably can be refactored to eliminate the global.

How does this interact with multiple hands?



Reply | Threaded
Open this post in threaded view
|

Re: Worlds in Worlds are NOT completely dead?! ????

David T. Lewis
On Tue, Nov 17, 2020 at 01:41:37PM +0000, Douglas Brebner wrote:
>
> On 17/11/2020 01:11, David T. Lewis wrote:
> >- ActiveHand. This is meaningful only to a Morphic project and
> >presumably can be refactored to eliminate the global.
>
> How does this interact with multiple hands?
>

That question, and others like it, are exactly what needs to be understood
(and hopefully documented) before attempting any surgery on the system :-)

There are a few pages on the swiki that provide some context. This one
is a good starting point:

  http://wiki.squeak.org/squeak/118

Dave
 

Reply | Threaded
Open this post in threaded view
|

Re: Worlds in Worlds are NOT completely dead?! ????

Jakob Reschke
Don't forget your own email from September:


---------- Forwarded message ---------
Von: David T. Lewis <[hidden email]>
Date: So., 20. Sep. 2020, 17:50
Subject: [squeak-dev] ActiveGlobals explained by Andreas Raab
To: <[hidden email]>


In the course of trying to better understand the role of the ActiveHand
global, I found an excellent explanation by Andreas Raab in his original
change set. I put this on the swiki and linked it to several related pages:

  http://wiki.squeak.org/squeak/6647

It is amusing to note how I found this. I was trying to figure out what
object should properly own the active hand, and I had conviced myself
that it should probably be the WolrdState for a Morphic world.

So as an experiment, it tried adding the instance variable to WorldState,
and I discovered to my surprise that it was already there. It was completely
unreferenced, but one of my Morphic worlds still had it set to point to
a HandMorph, which seemed odd.

Looking back at old images, I found that the activeHand instance var in
WorldState was last used in Squeak 3.0, and that the global variable that
replaced it was in use as of Squeak 3.10.2.

A bit of digging though the files.squeak.org archives led me to the
original change set in which the change was made. Andreas provided a
preamble with explanation of the rationale for the change, this this
is what I copied to the swiki.

Despite the fact that a WorldState instance still point to an activeHand,
that reference has apparently been hanging around for the last 20 years
without actually being used for anything.

Dave


David T. Lewis <[hidden email]> schrieb am Di., 17. Nov. 2020, 17:26:
On Tue, Nov 17, 2020 at 01:41:37PM +0000, Douglas Brebner wrote:
>
> On 17/11/2020 01:11, David T. Lewis wrote:
> >- ActiveHand. This is meaningful only to a Morphic project and
> >presumably can be refactored to eliminate the global.
>
> How does this interact with multiple hands?
>

That question, and others like it, are exactly what needs to be understood
(and hopefully documented) before attempting any surgery on the system :-)

There are a few pages on the swiki that provide some context. This one
is a good starting point:

  http://wiki.squeak.org/squeak/118

Dave




Reply | Threaded
Open this post in threaded view
|

Re: Worlds in Worlds are NOT completely dead?! ????

David T. Lewis
Oh my, how did I overlook that ;-)

Indeed, the summary by Andreas is clear and very helpful:
  http://wiki.squeak.org/squeak/6647

Dave


On Tue, Nov 17, 2020 at 07:53:24PM +0100, Jakob Reschke wrote:

> Don't forget your own email from September:
>
>
> ---------- Forwarded message ---------
> Von: *David T. Lewis* <[hidden email]>
> Date: So., 20. Sep. 2020, 17:50
> Subject: [squeak-dev] ActiveGlobals explained by Andreas Raab
> To: <[hidden email]>
>
>
> In the course of trying to better understand the role of the ActiveHand
> global, I found an excellent explanation by Andreas Raab in his original
> change set. I put this on the swiki and linked it to several related pages:
>
>   http://wiki.squeak.org/squeak/6647
>
> It is amusing to note how I found this. I was trying to figure out what
> object should properly own the active hand, and I had conviced myself
> that it should probably be the WolrdState for a Morphic world.
>
> So as an experiment, it tried adding the instance variable to WorldState,
> and I discovered to my surprise that it was already there. It was completely
> unreferenced, but one of my Morphic worlds still had it set to point to
> a HandMorph, which seemed odd.
>
> Looking back at old images, I found that the activeHand instance var in
> WorldState was last used in Squeak 3.0, and that the global variable that
> replaced it was in use as of Squeak 3.10.2.
>
> A bit of digging though the files.squeak.org archives led me to the
> original change set in which the change was made. Andreas provided a
> preamble with explanation of the rationale for the change, this this
> is what I copied to the swiki.
>
> Despite the fact that a WorldState instance still point to an activeHand,
> that reference has apparently been hanging around for the last 20 years
> without actually being used for anything.
>
> Dave
>
>
> David T. Lewis <[hidden email]> schrieb am Di., 17. Nov. 2020, 17:26:
>
> > On Tue, Nov 17, 2020 at 01:41:37PM +0000, Douglas Brebner wrote:
> > >
> > > On 17/11/2020 01:11, David T. Lewis wrote:
> > > >- ActiveHand. This is meaningful only to a Morphic project and
> > > >presumably can be refactored to eliminate the global.
> > >
> > > How does this interact with multiple hands?
> > >
> >
> > That question, and others like it, are exactly what needs to be understood
> > (and hopefully documented) before attempting any surgery on the system :-)
> >
> > There are a few pages on the swiki that provide some context. This one
> > is a good starting point:
> >
> >   http://wiki.squeak.org/squeak/118
> >
> > Dave
> >
> >
> >

>


Reply | Threaded
Open this post in threaded view
|

Re: Worlds in Worlds are NOT completely dead?! ????

Christoph Thiede
In reply to this post by David T. Lewis

Hi Dave,


I don't see your point. I already have eliminated ActiveWorld, ActiveHand, and ActiveEvent *are* in the Trunk, are you talking about the #currentWorld, #currentHand, and #currentEvent senders? :-)


Best,

Christoph


Von: Squeak-dev <[hidden email]> im Auftrag von David T. Lewis <[hidden email]>
Gesendet: Dienstag, 17. November 2020 02:11:22
An: The general-purpose Squeak developers list
Betreff: Re: [squeak-dev] Worlds in Worlds are NOT completely dead?! ????
 
Hi Christoph,

On Mon, Nov 16, 2020 at 03:31:47PM +0000, Thiede, Christoph wrote:
> Hi Dave,
>
> eliminating further globals is definitively always a desirable goal, but
> are you referring to any certain domain? It looks as if the most problematic
> portions of global state resist in the Project/Process logic themselves.


The four globals of interest are:

- World. This has already been cleaned up, and the global World remains
only for support of external packages or projects that have references
to it. For a trunk image, the global can be removed without issue.

- ActiveWorld. This is meaningful only to a Morphic project and
presumably can be refactored to eliminate the global.

- ActiveHand. This is meaningful only to a Morphic project and
presumably can be refactored to eliminate the global.

- ActiveEvent. This is probably global to the system, and it may
be appropriate to leave it as a global variable.

My opinion - ActiveWorld looks like the next thing to eliminate
if possible. It is clearly related to World, and figuring out why
ActiveWorld needs to exist would be the next problem to solve.

After that, ActiveHand would be then next thing to look at. It is
specific to Morphic, and it is not clear what it should mean in
the context of World in World, or in mixed Morphic and MVC projects.

Finally, ActiveEvent might need attention. I would rate this as
low priority, and there may not be anything wrong with the current
use of global state for ActiveEvent.

> For example, should we have one user interrupt watcher per project, and
> how should be decided which of them is activated if there is an MVC embedded
> into a Morphic project? Questions over questions :-)
>

The user interrupt watcher exists at a lower level. I think (but am
not certain) that it needs to be this way. The event that triggers
the user interrupt watcher is processed through the VM, and by the
time the VM finds out about the user interrupt request, it does not
have any easy way to know about the Process the user request was
intended to interrupt.

So no, I don't think that this should be handled on a per-Project
basis. The key thing is to know (or deduce) what Process needs to
be interrupted, and it probably does not much matter what Project
context the interrupt is handled in.

Dave




Carpe Squeak!