Re: [Pharo-users] Pharo5 download for linux - interpreter cannot read image file

2016-10-09 Thread Andreas Sunardi
Hello Stef,

IMHO, since the 'GNU/Linux w. libc < 2.15' download in Pharo download
webpage is broken anyway, we should repackage that download. Then other
people using this version doesn't have to follow extra instruction to patch
it. Having said that, I understand you and the Pharo team may have a reason
to not hastily repackage that download option.

So, here are the downloads needed:
1. 'GNU/Linux w. libc < 2.15' from Pharo download page
http://pharo.org/gnu-linux-installation
$ wget http://files.pharo.org/platform/Pharo5.0-linux-oldLibC.zip

2. Jan Vrany's Pharo 5 VM https://swing.fit.cvut.cz/
jenkins/job/pharo-vm-spur-swing/. I used the current latest build, which is
currently build #5, Jan 17, 2016
$ wget https://swing.fit.cvut.cz/jenkins/view/All/job/pharo-vm-spur-swing/
lastSuccessfulBuild/artifact/pharo-vm-spur-swing.zip

3. Pharo 5 sources file from http://files.pharo.org/sources/
$ wget http://files.pharo.org/sources/PharoV50.sources.zip

4. Latest Pharo 5 image from http://files.pharo.org/image, which is
currently 50761
$ wget http://files.pharo.org/image/50/Pharo-Image-5.0-latest.zip


Installation:
1. Unzip 'GNU/Linux w. libc < 2.15'
$ unzip Pharo5.0-linux-oldLibC.zip

2. Replace VM in bin/ with  Jan Vrany's build
$ cd pharo5.0/bin
$ unzip ../../pharo-vm-spur-swing.zip

3. Put Pharo 5 sources file in the VM directory
$ unzip ../../PharoV50.sources.zip

4. Replace image and changes file with the latest
$ cd ../shared
$ rm Pharo5.0.{image,changes}
$ unzip ../../Pharo-Image-5.0-latest.zip
$ mv Pharo-50761.image Pharo5.0.image
$ mv Pharo-50761.changes Pharo5.0.changes


Now, we can run pharo with libc < 2.15
$ cd ..
$ pharo


I hope that help!
--
Andreas

On Sat, Oct 8, 2016 at 10:10 AM, stepharo  wrote:

> Hi
>
> I would like a list of
>
> - links
>
> - actions (unix commands)
>
> so that we can add it to the web site so that other people using the same
> version than you
>
> can install and run pharo simply.
>
>
> Stef
>
>
> Le 7/10/16 à 19:06, Andreas Sunardi a écrit :
>
> Hi Stef,
>
> Can you explain a little bit about what this 'How to' is? Just now I'm
> able to finally run pharo5 on my CentOS with glibc version < 2.15 and I
> wrote my finding in my other reply.
>
> Are you referring to how to put these things together to finally able to
> run pharo? Or are you referring to my digging through the error?
>
>
> On Thu, Oct 6, 2016 at 11:08 PM, stepharo  wrote:
>
>> Hi andreas
>>
>> could you write a little how to so that we can put it on the web site?
>>
>> Stef
>>
>> Le 7/10/16 à 06:20, Andreas Sunardi a écrit :
>>
>> Thanks, Bernardo. That fogbugz case is exactly the problem I'm having.
>>
>> This VM (pharo-vm-spur-swing.zip) is able to open Pharo 5.0 image from
>> Pharo download page. This is a good sign.
>>
>> Upon opening the image, I am, however, presented immediately with
>> 'MessageNotUnderstood: receiver of "/" is nil'. It's coming from
>> SystemSettingsPersistence class >> defaultPreferenceFileReference
>>
>> It boils down to
>> OSEnvironment#getEnv: 'HOME'
>>
>> a failure in building an FFI call. The FFI call function signature is
>> #( String getenv (String string) )
>>
>> The context object built from OSEnvironment#getEnv: gives answer 'arg1',
>> instead of 'string', to a call to #method#argumentNames. Down the road, an
>> IRMethod instance is trying to find the index for 'string' and can't find
>> any, because what is stored is 'arg1'.
>>
>> I'm out of my depth at this point, and this is a separate issue than not
>> being able to start the image. I have to think where I want to go from here.
>>
>> So, thank you for all of you, for the exceedingly quick and friendly help.
>>
>> Cheers!
>>
>> On Thu, Oct 6, 2016 at 5:42 PM, Bernardo Ezequiel Contreras <
>> vonbecm...@gmail.com> wrote:
>>
>>> Hold on,
>>>
>>>   There's also this issue
>>> https://pharo.fogbugz.com/f/cases/17353/build-spur-vm-for-de
>>> bian-old-libc
>>>
>>> where in one comment jan.vrany recommended his build
>>>
>>> https://swing.fit.cvut.cz/jenkins/job/pharo-vm-spur-swing/
>>>
>>> https://swing.fit.cvut.cz/jenkins/view/All/job/pharo-vm-spur
>>> -swing/lastSuccessfulBuild/artifact/pharo-vm-spur-swing.zip
>>>
>>> that i have used in debian wheezy with the old libc for quite a while. i
>>> don't use it anymore because im in jessie.
>>>
>>>
>>>
>>> On Thu, Oct 6, 2016 at 9:13 PM, Andreas Sunardi 
>>> wrote:
>>>
 Thank you for the impressive quick response. Unfortunately, I have
 older glibc. So now I'm struggling with compiling glibc 2.15 for 32 bit on
 my 64 bit CentOS 6.5 machine. Not an easy thing to do.

 I'll try those VMs once I succeed in building this glibc

 On Thu, Oct 6, 2016 at 12:41 PM, Bernardo Ezequiel Contreras <
 vonbecm...@gmail.com> wrote:

> this
> http://files.pharo.org/vm/pharo-spur32/linux/latest.zip
>
> works pretty well in Debian GNU/Linux 8 Jessie
>
>
> On Thu, 

Re: [Pharo-users] Pillar book makefile or template is broken.

2016-10-09 Thread Damien Pollet
On 9 October 2016 at 21:52, stepharo  wrote:

> I did a clean install. So I imagine that it should break on other machines
> too.


Might be that pillar archetype doesn't do a git clone but some kind of
archive extraction… I know github and zip files have limitations with that


Re: [Pharo-users] Pillar book makefile or template is broken.

2016-10-09 Thread stepharo

Ok thanks!

I will try tomorrow.


Stef


Le 9/10/16 à 21:29, Damien Pollet a écrit :


On 9 October 2016 at 20:03, stepharo > wrote:


I tried to add a title to a book

{
  "title":"Learning Programming with Pharo",


I think I tried with { "metadata": { "title": "bleb" } } in the 
book.pillar and that worked. No clue why the one from the conf is not 
inherited anymore.




Re: [Pharo-users] Pillar book makefile or template is broken.

2016-10-09 Thread stepharo



Le 9/10/16 à 21:23, Damien Pollet a écrit :


On 9 October 2016 at 19:47, stepharo > wrote:


- chmod +x support/latex/sbabook/gitinfo2.sh

Now I have no idea where I should add this command.


That should be versioned as part of sbabook. On my machine when I 
check it out it's executable, and apparently it's harder to make git 
ignore file modes than to have it follow them, so I don't know what's 
wrong.


no idea.
I did a clean install. So I imagine that it should break on other 
machines too.




Re: [Pharo-users] Pillar book makefile or template is broken.

2016-10-09 Thread Damien Pollet
On 9 October 2016 at 20:03, stepharo  wrote:

> I tried to add a title to a book
>
> {
>   "title":"Learning Programming with Pharo",
>

I think I tried with { "metadata": { "title": "bleb" } } in the book.pillar
and that worked. No clue why the one from the conf is not inherited anymore.


Re: [Pharo-users] Pillar book makefile or template is broken.

2016-10-09 Thread stepharo

Hi doru

Hi Stef,

I started from the Pharo image and now we have an editor that is working 
reasonably well inside Pharo. I will send more details shortly.

Cool

This means that I do not have to edit the book somewhere else, and this also 
means that I can run the generation from inside Pharo, too.

Nice.

So, the next step is to trigger the visitors to generate the book from within 
Pharo without relying on the command line. If we can manage that,
I think that we should extract the commandline code into a separated 
object.
I wanted to do that but I decided that I'm not allowed to start 
something new now.
I wanted to generated also all the magritte black magic accessors so 
that we do not rely on DNU.

  my guess is that the command line related logic will become simpler and more 
debuggable.
I wanted to replace some unix commands by some pharo code snippet 
(because I can debug FileReference)
but same reason as above (finish first three tasks before starting a new 
one).


Stef


Cheers,
Doru




On Oct 9, 2016, at 8:03 PM, stepharo  wrote:

I tried to add a title to a book

{
  "title":"Learning Programming with Pharo",
  "newLine":#unix,
  "configurations": {
"LaTeX" : {
  "outputType":#'latex:sbabook',
  "separateOutputFiles":true
},
"HTML" : {
  "outputType":#html,
  "separateOutputFiles":true
}
  }
}

did not work :(

{
  "title":"Learning Programming with Pharo"
}

!!Compilation

${inputFile:Chapters/Chapter1/chapter1.pillar}$

!!Edition and Templates

${inputFile:Chapters/Chapter2/chapter2.pillar}$

+>figures/pharo.png|width=30+
+>figures/rmod.png|width=30+

did not work :(

No idea how to debug i t sadly.

Stef


Le 9/10/16 à 19:42, stepharo a écrit :

Hi

Is there anybody maintaining Pillar?


I did

wget https://raw.githubusercontent.com/pillar-markup/pillar/master/download.sh

chmod +x download.sh

./download.sh

./pillar archetype book

ogrammingArchetype make pdf
git submodule update --init --recursive
mkdir -p ./build
ln -fs ../support ./build
support/latex/sbabook/gitinfo2.sh > build/gitHeadLocal.gin
/bin/sh: support/latex/sbabook/gitinfo2.sh: Permission denied
make: *** [build/gitHeadLocal.gin] Error 126


I have no idea how to fix it.

in the past I removed this git version script because it was going in my way.

Stef






--
www.tudorgirba.com
www.feenk.com

"Problem solving efficiency grows with the abstractness level of problem 
understanding."











Re: [Pharo-users] Pillar book makefile or template is broken.

2016-10-09 Thread Damien Pollet
On 9 October 2016 at 19:47, stepharo  wrote:

> - chmod +x support/latex/sbabook/gitinfo2.sh
>
> Now I have no idea where I should add this command.
>

That should be versioned as part of sbabook. On my machine when I check it
out it's executable, and apparently it's harder to make git ignore file
modes than to have it follow them, so I don't know what's wrong.


Re: [Pharo-users] Pillar book makefile or template is broken.

2016-10-09 Thread Tudor Girba
Hi Stef,

I started from the Pharo image and now we have an editor that is working 
reasonably well inside Pharo. I will send more details shortly.

This means that I do not have to edit the book somewhere else, and this also 
means that I can run the generation from inside Pharo, too. 

So, the next step is to trigger the visitors to generate the book from within 
Pharo without relying on the command line. If we can manage that, my guess is 
that the command line related logic will become simpler and more debuggable.

Cheers,
Doru



> On Oct 9, 2016, at 8:03 PM, stepharo  wrote:
> 
> I tried to add a title to a book
> 
> {
>  "title":"Learning Programming with Pharo",
>  "newLine":#unix,
>  "configurations": {
>"LaTeX" : {
>  "outputType":#'latex:sbabook',
>  "separateOutputFiles":true
>},
>"HTML" : {
>  "outputType":#html,
>  "separateOutputFiles":true
>}
>  }
> }
> 
> did not work :(
> 
> {
>  "title":"Learning Programming with Pharo"
> }
> 
> !!Compilation
> 
> ${inputFile:Chapters/Chapter1/chapter1.pillar}$
> 
> !!Edition and Templates
> 
> ${inputFile:Chapters/Chapter2/chapter2.pillar}$
> 
> +>figures/pharo.png|width=30+
> +>figures/rmod.png|width=30+
> 
> did not work :(
> 
> No idea how to debug i t sadly.
> 
> Stef
> 
> 
> Le 9/10/16 à 19:42, stepharo a écrit :
>> Hi
>> 
>> Is there anybody maintaining Pillar?
>> 
>> 
>> I did
>> 
>> wget 
>> https://raw.githubusercontent.com/pillar-markup/pillar/master/download.sh
>> 
>> chmod +x download.sh
>> 
>> ./download.sh
>> 
>> ./pillar archetype book
>> 
>> ogrammingArchetype make pdf
>> git submodule update --init --recursive
>> mkdir -p ./build
>> ln -fs ../support ./build
>> support/latex/sbabook/gitinfo2.sh > build/gitHeadLocal.gin
>> /bin/sh: support/latex/sbabook/gitinfo2.sh: Permission denied
>> make: *** [build/gitHeadLocal.gin] Error 126
>> 
>> 
>> I have no idea how to fix it.
>> 
>> in the past I removed this git version script because it was going in my way.
>> 
>> Stef
>> 
>> 
>> 
> 
> 

--
www.tudorgirba.com
www.feenk.com

"Problem solving efficiency grows with the abstractness level of problem 
understanding."







Re: [Pharo-users] Pillar book makefile or template is broken.

2016-10-09 Thread stepharo

I tried to add a title to a book

{
  "title":"Learning Programming with Pharo",
  "newLine":#unix,
  "configurations": {
"LaTeX" : {
  "outputType":#'latex:sbabook',
  "separateOutputFiles":true
},
"HTML" : {
  "outputType":#html,
  "separateOutputFiles":true
}
  }
}

did not work :(

{
  "title":"Learning Programming with Pharo"
}

!!Compilation

${inputFile:Chapters/Chapter1/chapter1.pillar}$

!!Edition and Templates

${inputFile:Chapters/Chapter2/chapter2.pillar}$

+>figures/pharo.png|width=30+
+>figures/rmod.png|width=30+

did not work :(

No idea how to debug i t sadly.

Stef


Le 9/10/16 à 19:42, stepharo a écrit :

Hi

Is there anybody maintaining Pillar?


I did

wget 
https://raw.githubusercontent.com/pillar-markup/pillar/master/download.sh


 chmod +x download.sh

./download.sh

./pillar archetype book

ogrammingArchetype make pdf
git submodule update --init --recursive
mkdir -p ./build
ln -fs ../support ./build
support/latex/sbabook/gitinfo2.sh > build/gitHeadLocal.gin
/bin/sh: support/latex/sbabook/gitinfo2.sh: Permission denied
make: *** [build/gitHeadLocal.gin] Error 126


I have no idea how to fix it.

in the past I removed this git version script because it was going in 
my way.


Stef








Re: [Pharo-users] Pillar book makefile or template is broken.

2016-10-09 Thread stepharo

Are the files in Chapters automatically added to the pillar.conf?

Because the pillar.conf

is just

{
  "title":"Book title",
  "newLine":#unix,
  "configurations": {
"LaTeX" : {
  "outputType":#'latex:sbabook',
  "separateOutputFiles":true
},
"HTML" : {
  "outputType":#html,
  "separateOutputFiles":true
}
  }
}

Does it mean that all the files should be always compiling?

Stef


Le 9/10/16 à 19:42, stepharo a écrit :

Hi

Is there anybody maintaining Pillar?


I did

wget 
https://raw.githubusercontent.com/pillar-markup/pillar/master/download.sh


 chmod +x download.sh

./download.sh

./pillar archetype book

ogrammingArchetype make pdf
git submodule update --init --recursive
mkdir -p ./build
ln -fs ../support ./build
support/latex/sbabook/gitinfo2.sh > build/gitHeadLocal.gin
/bin/sh: support/latex/sbabook/gitinfo2.sh: Permission denied
make: *** [build/gitHeadLocal.gin] Error 126


I have no idea how to fix it.

in the past I removed this git version script because it was going in 
my way.


Stef








Re: [Pharo-users] Pillar book makefile or template is broken.

2016-10-09 Thread stepharo


- chmod +x support/latex/sbabook/gitinfo2.sh

Now I have no idea where I should add this command.

Then how can I modify the makefile and version it in my version of the 
book ?


Should I just add Makefile to my git repo?

Stef


Le 9/10/16 à 19:42, stepharo a écrit :

Hi

Is there anybody maintaining Pillar?


I did

wget 
https://raw.githubusercontent.com/pillar-markup/pillar/master/download.sh


 chmod +x download.sh

./download.sh

./pillar archetype book

ogrammingArchetype make pdf
git submodule update --init --recursive
mkdir -p ./build
ln -fs ../support ./build
support/latex/sbabook/gitinfo2.sh > build/gitHeadLocal.gin
/bin/sh: support/latex/sbabook/gitinfo2.sh: Permission denied
make: *** [build/gitHeadLocal.gin] Error 126


I have no idea how to fix it.

in the past I removed this git version script because it was going in 
my way.


Stef








[Pharo-users] Pillar book makefile or template is broken.

2016-10-09 Thread stepharo

Hi

Is there anybody maintaining Pillar?


I did

wget 
https://raw.githubusercontent.com/pillar-markup/pillar/master/download.sh


 chmod +x download.sh

./download.sh

./pillar archetype book

ogrammingArchetype make pdf
git submodule update --init --recursive
mkdir -p ./build
ln -fs ../support ./build
support/latex/sbabook/gitinfo2.sh > build/gitHeadLocal.gin
/bin/sh: support/latex/sbabook/gitinfo2.sh: Permission denied
make: *** [build/gitHeadLocal.gin] Error 126


I have no idea how to fix it.

in the past I removed this git version script because it was going in my 
way.


Stef




Re: [Pharo-users] Intro to Microsoft COM for Smalltalkers

2016-10-09 Thread stepharo



Maybe this could become some kind of pillar file...

But things are changing a lot these days with SDL2 etc.

It is converging
- SDL2 stabilisation
- Sparta integrated into Bloc
- TxText optimisation
- Bloc stabilization
Thales guys are starting to use it.

Stef


Any roadmap of these somewhere?

Phil

On Sat, Oct 8, 2016 at 7:03 PM, stepharo > wrote:


Thibault

you should talk also with Glenn and Alain to get feedback. They
will visit us in Nov.


Stef


Le 7/10/16 à 15:14, Thibault Raffaillac a écrit :

Thanks for these mails, that's actually very helpful!
I am working on a shorter syntax for animations at the moment
(than GLMAnimation, Viva, Bloc-Animation), and could not find
a proper equivalent to requestAnimationFrame (i.e. that would
be independent of any UI yet in sync with display, and as
simple as possible).
My solution was to repeatedly register to deferredUIMessages,
implementing an intermediate block to add a timestamp like
requestAnimationFrame (works wonders
http://smalltalkhub.com/#!/~ThibaultRaffaillac/Animation
)

Cheers,
Thibault

ps: I'll ask Guille asap for the state of ReactiveExtensions
(lacks comments)

Also, check

MorphicUIManager>>#spawnNewProcess

UIProcess := [
[World doOneCycle.  Processor yield.  false] whileFalse: [].
] newProcess priority: Processor userSchedulingPriority.
UIProcess name: 'Morphic UI Process'.
UIProcess resume

digging into doOneCycle, you'll find:

#doOneCycleFor: aWorld
"Do one cycle of the interaction loop. This method is
called *repeatedly
*when
the world is running. This is a moderately private method;
a better
alternative is usually either to wait for events or to
check the state of
things from #step methods."

self interCyclePause: MinCycleLapse.
self doOneCycleNowFor: aWorld.


The interCyclePause is what make the UI timing alignment
proper (notice
serverMode) [and some Squeak remnant mention]:

interCyclePause: milliSecs
"delay enough that the previous cycle plus the amount of
delay will equal
milliSecs.  If the cycle is already expensive, then no
delay occurs.
However, if the system is idly waiting for interaction
from the user, the
method will delay for a proportionally long time and cause
the overall CPU
usage of *Squeak* to be low.
If self serverMode returns true then, always do a complete
delay of 50ms,
independant of my argument. This prevents the freezing
problem described in
Mantis #6581"

| wait wait2 |
 "*a very long assignment*"
wait := self serverMode
 ifTrue: [ 50 ]
 ifFalse:
[ wait2 := (lastCycleTime notNil and: [CanSurrenderToOS ~~
false])
 ifFalse: [ 0 ]
 ifTrue: [ lastCycleTime + milliSecs - Time
millisecondClockValue ].

   self flag: 'Issue 14754 - wait2>millisecs is only
True for clock
rollover. Remove it once DelayScheduler based on
microsecondClock - Ben
Coman 19.01.2015'.  "*< maybe we want this #flag: not
to be called all
the time* "
   wait2 > milliSecs
 ifTrue: [ 0 ]
 ifFalse: [ wait2 ].
].
wait > 0 ifTrue: [ (Delay forMilliseconds: wait) wait ]. 
 "<--- wait

is not #>>wait"

lastCycleTime := Time millisecondClockValue.
CanSurrenderToOS := true.

Now, yeah, how do get stuff to be painted on the screen?

Like this:

displayWorld: aWorld submorphs: submorphs
"Update this world's display."

| deferredUpdateMode handsToDraw allDamage |

submorphs do: [:m | m fullBounds].  "force re-layout if
needed"
self checkIfUpdateNeeded ifFalse: [^ self].  "display is
already up-to-date"

deferredUpdateMode := self doDeferredUpdatingFor: aWorld.
deferredUpdateMode ifFalse: [self assuredCanvas].
canvas roundCornersOf: aWorld during:[ | worldDamageRects
handDamageRects |
worldDamageRects := self drawWorld: aWorld submorphs:
submorphs
invalidAreasOn: canvas.  "repair world's damage 

Re: [Pharo-users] Intro to Microsoft COM for Smalltalkers

2016-10-09 Thread p...@highoctane.be
Maybe this could become some kind of pillar file...

But things are changing a lot these days with SDL2 etc.

Any roadmap of these somewhere?

Phil

On Sat, Oct 8, 2016 at 7:03 PM, stepharo  wrote:

> Thibault
>
> you should talk also with Glenn and Alain to get feedback. They will visit
> us in Nov.
>
>
> Stef
>
>
> Le 7/10/16 à 15:14, Thibault Raffaillac a écrit :
>
>> Thanks for these mails, that's actually very helpful!
>> I am working on a shorter syntax for animations at the moment (than
>> GLMAnimation, Viva, Bloc-Animation), and could not find a proper equivalent
>> to requestAnimationFrame (i.e. that would be independent of any UI yet in
>> sync with display, and as simple as possible).
>> My solution was to repeatedly register to deferredUIMessages,
>> implementing an intermediate block to add a timestamp like
>> requestAnimationFrame (works wonders http://smalltalkhub.com/#!/~Th
>> ibaultRaffaillac/Animation)
>>
>> Cheers,
>> Thibault
>>
>> ps: I'll ask Guille asap for the state of ReactiveExtensions (lacks
>> comments)
>>
>> Also, check
>>>
>>> MorphicUIManager>>#spawnNewProcess
>>>
>>> UIProcess := [
>>> [World doOneCycle.  Processor yield.  false] whileFalse: [].
>>> ] newProcess priority: Processor userSchedulingPriority.
>>> UIProcess name: 'Morphic UI Process'.
>>> UIProcess resume
>>>
>>> digging into doOneCycle, you'll find:
>>>
>>> #doOneCycleFor: aWorld
>>> "Do one cycle of the interaction loop. This method is called *repeatedly
>>> *when
>>> the world is running. This is a moderately private method; a better
>>> alternative is usually either to wait for events or to check the state of
>>> things from #step methods."
>>>
>>> self interCyclePause: MinCycleLapse.
>>> self doOneCycleNowFor: aWorld.
>>>
>>>
>>> The interCyclePause is what make the UI timing alignment proper (notice
>>> serverMode) [and some Squeak remnant mention]:
>>>
>>> interCyclePause: milliSecs
>>> "delay enough that the previous cycle plus the amount of delay will equal
>>> milliSecs.  If the cycle is already expensive, then no delay occurs.
>>> However, if the system is idly waiting for interaction from the user, the
>>> method will delay for a proportionally long time and cause the overall
>>> CPU
>>> usage of *Squeak* to be low.
>>> If self serverMode returns true then, always do a complete delay of 50ms,
>>> independant of my argument. This prevents the freezing problem described
>>> in
>>> Mantis #6581"
>>>
>>> | wait wait2 |
>>>  "*a very long assignment*"
>>> wait := self serverMode
>>>  ifTrue: [ 50 ]
>>>  ifFalse:
>>> [ wait2 := (lastCycleTime notNil and: [CanSurrenderToOS ~~ false])
>>>  ifFalse: [ 0 ]
>>>  ifTrue: [ lastCycleTime + milliSecs - Time
>>> millisecondClockValue ].
>>>
>>>self flag: 'Issue 14754 - wait2>millisecs is only True for clock
>>> rollover. Remove it once DelayScheduler based on microsecondClock - Ben
>>> Coman 19.01.2015'.  "*< maybe we want this #flag: not to be called
>>> all
>>> the time* "
>>>wait2 > milliSecs
>>>  ifTrue: [ 0 ]
>>>  ifFalse: [ wait2 ].
>>> ].
>>> wait > 0 ifTrue: [ (Delay forMilliseconds: wait) wait ].   "<--- wait
>>> is not #>>wait"
>>>
>>> lastCycleTime := Time millisecondClockValue.
>>> CanSurrenderToOS := true.
>>>
>>> Now, yeah, how do get stuff to be painted on the  screen?
>>>
>>> Like this:
>>>
>>> displayWorld: aWorld submorphs: submorphs
>>> "Update this world's display."
>>>
>>> | deferredUpdateMode handsToDraw allDamage |
>>>
>>> submorphs do: [:m | m fullBounds].  "force re-layout if needed"
>>> self checkIfUpdateNeeded ifFalse: [^ self].  "display is already
>>> up-to-date"
>>>
>>> deferredUpdateMode := self doDeferredUpdatingFor: aWorld.
>>> deferredUpdateMode ifFalse: [self assuredCanvas].
>>> canvas roundCornersOf: aWorld during:[ | worldDamageRects
>>> handDamageRects |
>>> worldDamageRects := self drawWorld: aWorld submorphs: submorphs
>>> invalidAreasOn: canvas.  "repair world's damage on canvas"
>>> "self handsDo:[:h| h noticeDamageRects: worldDamageRects]."
>>> handsToDraw := self selectHandsToDrawForDamage: worldDamageRects.
>>> handDamageRects := handsToDraw collect: [:h | h savePatchFrom: canvas].
>>> allDamage := worldDamageRects, handDamageRects.
>>>
>>> handsToDraw reverseDo: [:h | canvas fullDrawMorph: h].  "draw hands onto
>>> world canvas"
>>> ].
>>> "*make this true to flash damaged areas for testing*"
>>> self class debugShowDamage ifTrue: [aWorld flashRects: allDamage color:
>>> Color black].
>>>
>>> canvas finish.
>>> "quickly copy altered rects of canvas to Display:"
>>> deferredUpdateMode
>>> ifTrue: [self forceDamageToScreen: allDamage]
>>> ifFalse: [canvas showAt: aWorld viewBox origin invalidRects: allDamage].
>>> handsToDraw do: [:h | h restoreSavedPatchOn: canvas].  "restore world
>>> canvas under hands"
>>> Display deferUpdates: false; forceDisplayUpdate.
>>>
>>> The VM will take care of throwing the bits to the display in various