<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Hi Jaromir,<br>
<br>
On 7/14/2022 4:49 PM, Jaromir Matas via Cuis-dev wrote:
<blockquote
cite="mid:BYAPR03MB407296371F6CADC12784BD19EE889@BYAPR03MB4072.namprd03.prod.outlook.com"
type="cite">
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered
medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:"Calibri Light";
panose-1:2 15 3 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
pre
{mso-style-priority:99;
mso-style-link:"HTML Preformatted Char";
margin:0in;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:"Courier New";
color:black;}
p.MsoNoSpacing, li.MsoNoSpacing, div.MsoNoSpacing
{mso-style-priority:1;
margin:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
span.HTMLPreformattedChar
{mso-style-name:"HTML Preformatted Char";
mso-style-priority:99;
mso-style-link:"HTML Preformatted";
font-family:"Courier New";
color:black;}
.MsoChpDefault
{mso-style-type:export-only;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style>
<div class="WordSection1">
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Hi Juan,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Gosh, this is amazing! I couldn't wait to
see :)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I ran out of mean examples :D<o:p></o:p></p>
</div>
</blockquote>
<br>
Fun, Fun, Fun!<br>
<br>
<blockquote
cite="mid:BYAPR03MB407296371F6CADC12784BD19EE889@BYAPR03MB4072.namprd03.prod.outlook.com"
type="cite">
<div class="WordSection1">
<p class="MsoNormal">One observation though: Sometimes, although
rarely and irregularly, this happens:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I run an example (in the Workspace), e.g.
this one:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">[1/0] fork.<o:p></o:p></p>
<p class="MsoNormal">5 seconds asDelay wait.<o:p></o:p></p>
<p class="MsoNormal">self error: 'error'<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">and then I move the first debugger window
and close it before the 5 second delay expires and when the
second debugger opens I get an MNU error concerning drawing -
I'm enclosing a snip (if I knew how to file out the debugger's
stack contents I'd send it too). And the next time you run the
same example it may happen again or may not... Can't figure
out any pattern except you have to move the first debugger
window before closing it.<o:p></o:p></p>
</div>
</blockquote>
<br>
Oh, yes. Letting the old Morphic process end by itself may mean that
there is more than one process trying to draw the world. And if some
higher priority process wakes up, maybe the other morphic process is
scheduled next. Just pushed a couple of tweaks to reduce the risk as
much as possible.<br>
<br>
<blockquote
cite="mid:BYAPR03MB407296371F6CADC12784BD19EE889@BYAPR03MB4072.namprd03.prod.outlook.com"
type="cite">
<div class="WordSection1">
<p class="MsoNormal">--<o:p></o:p></p>
<p class="MsoNormal">One stupid question: How do you make the
image download the latest changes you made at github? I
thought this would work: World menu -> changes ->
install new updates but it doesn't... Now I think it's maybe
not supposed to download from github but just locally from the
CoreUpdates folder... Is that so?<o:p></o:p></p>
</div>
</blockquote>
<br>
Yes. The base image doesn't even include networking code. It will
only access local files.<br>
<br>
<blockquote
cite="mid:BYAPR03MB407296371F6CADC12784BD19EE889@BYAPR03MB4072.namprd03.prod.outlook.com"
type="cite">
<div class="WordSection1">
<p class="MsoNormal">What I do now (sorry if it sounds too
stupid) is I download a new image which contains the latest
changes in the CoreUpdates folder already...<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The thing is I'm on Windows and don't do
any git stuff or any command line stuff ;) Is there a way for
users like me to update easily?<o:p></o:p></p>
</div>
</blockquote>
<br>
The alternative would be to grab the update files from github using
the web browser. Could be even more tedious that grabbing a full zip
file each time. The alternative is to use git, of course. I use git
in Windows each time I save new Cuis images, as it is easier to run
32 bit systems than in Linux or MacOS. Just open the git bash and do
git pull. Actually, I wouldn't be surprised if the Linux subsystem
for Windows already includes git.<br>
<br>
<blockquote
cite="mid:BYAPR03MB407296371F6CADC12784BD19EE889@BYAPR03MB4072.namprd03.prod.outlook.com"
type="cite">
<div class="WordSection1">
<p class="MsoNormal">--<o:p></o:p></p>
<p class="MsoNormal">Well, actually, what would think about
situations like this:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">[1/0] fork.<o:p></o:p></p>
<p class="MsoNormal">[ 10000 factorial. Processor yield ] repeat<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">would you expect, or consider reasonable to
expect, the UI to process the 1/0 exception during the long
computation?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I'd tend to say no but then when I look at
this example:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">[1/0] fork.<o:p></o:p></p>
<p class="MsoNormal">[ 10000 factorial. 5 seconds asDelay wait ]
repeat<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I'm not so sure... The delay blocks the UI
and a thus a new UI is created etc. while in the former case
yield just allows other processes of the same priority to run
etc… which are implementation details…
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">And if you run the former example forked:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">[[1/0] fork.<o:p></o:p></p>
<p class="MsoNormal">[ 10000 factorial. Processor yield ]
repeat] fork<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">You won’t be surprised the 1/0 exception is
executed immediately after the first yield. Which leads me
closer to expecting the 1/0 exception appear after the first
yield even in the former example. I believe the computation’s
result shouldn’t depend on whether it runs in the UI or not. <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I'm curious to know your opinion.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Many thanks,<o:p></o:p></p>
<p class="MsoNormal">jaromir<o:p></o:p></p>
</div>
</blockquote>
<br>
Interesting examples. I think there are arguments to support both
sides. So, far, I'm OK with firing a new UI process if the current
one is blocked, suspended or terminated. Likely the user is trying
to recover control using cmd+. But starting a new UI process only
because the current one is busy, is something that would require
making all morphic fully multithreading. I don't think the
complexity is worth, at least unless we see a "real world" need.<br>
<br>
If the programmer started a long computation in the UI process by
mistake, they can cmd + . to recover control, and then try something
better (perhaps fork the workload). If they did it on purpose, well,
then they actually asked for the UI to be unresponsive during that
time.<br>
<br>
If we changed this, not only the Morphic framework should be
multithreading safe. Also all application code: Application level
code could be busy updating data, while on a separate process the
user tries to use it or modify it in some other way. We'd be forcing
all app developers to be "parallel processing aware", even if they
are writing simple code. I prefer to let those, willing to do heavy
processing -and- have a responsive UI at the same time, find a
suitable design.<br>
<br>
Hope this makes sense to you.<br>
<br>
Cheers!<br>
<o:p></o:p>
<pre class="moz-signature" cols="72">--
Juan Vuletich
<a class="moz-txt-link-abbreviated" href="http://www.cuis-smalltalk.org">www.cuis-smalltalk.org</a>
<a class="moz-txt-link-freetext" href="https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev">https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev</a>
<a class="moz-txt-link-freetext" href="https://github.com/jvuletich">https://github.com/jvuletich</a>
<a class="moz-txt-link-freetext" href="https://www.linkedin.com/in/juan-vuletich-75611b3">https://www.linkedin.com/in/juan-vuletich-75611b3</a>
<a class="moz-txt-link-freetext" href="https://independent.academia.edu/JuanVuletich">https://independent.academia.edu/JuanVuletich</a>
<a class="moz-txt-link-freetext" href="https://www.researchgate.net/profile/Juan-Vuletich">https://www.researchgate.net/profile/Juan-Vuletich</a>
<a class="moz-txt-link-freetext" href="https://patents.justia.com/inventor/juan-manuel-vuletich">https://patents.justia.com/inventor/juan-manuel-vuletich</a>
<a class="moz-txt-link-freetext" href="https://twitter.com/JuanVuletich">https://twitter.com/JuanVuletich</a></pre>
</body>
</html>