a tree View that knew about types( Classes )<div>     could do it.</div><div>A tree context popUp Menu or popUp tree view </div><div>     could show you the valid</div><div>     options for any input to any Message</div><div>     that you were building.</div><div><br></div><div>perhaps when this tree like scripting editor</div><div>     comes up</div><div>     it could show a tree view</div><div>     of the various things you could do</div><div>     similar to Scratch.</div><div><br></div><div>then when you choose something</div><div>     it automatically takes you through all the choices</div><div>     by traversing the Message tree </div><div>     and filling in all the Message arguments</div><div>     by the user picking from popUp tree views</div><div>     that dissapear once you pick</div><div><br></div><div>and then the pick fills in a Message argument </div><div>     and the user keeps going</div><div>     to fill in all the other Message arguments </div><div><br></div><div>and when every argument is filled in</div><div>     the user has a finished script</div><div>     which can be run</div><div>     </div><div>or called from other scripts</div><div><br></div><div>or the scripts could be Methods</div><div>     in a Class Hierarchy of some kind</div><div><br></div><div>maybe it helps you think OOP</div><div>     by asking questions</div><div>     like in the Pharo Class comment template</div><div>          what do you want this thing to be able to do</div><div>          what body parts do you want this thing to have</div><div>          how will it speak to others</div><div>               how will it speak to suppliers </div><div>               how will it speak to customers</div><div>               how will it speak to enemies</div><div>               what are its responsibilities </div><div>          how will it speak to itself</div><div>               what things does it need to store inside</div><div>          etc</div><div>     and it could perform some demos</div><div>          to show the ideas</div><div><br></div><div>and then the MessageSend</div><div>     could be converted to Smalltalk and compiled</div><div>     if speed was need</div><div><br></div><div>you could have</div><div>     MMessageSendSequence</div><div>     &gt;&gt;do:</div><div>     &gt;&gt;do:do:</div><div>     &gt;&gt;do:do:do:</div><div>     &gt;&gt;do:do:do:do:</div><div>     etc</div><div>     to make a sequence of MessageSends</div><div><br></div><div>you could have</div><div>     MLet&gt;&gt;define: listOfAssociations in: messageSendSequence</div><div>     MAssociation&gt;&gt;key:value:</div><div>     MList&gt;&gt;n:</div><div>          &gt;&gt;n:n:</div><div>          &gt;&gt;n:n:n:</div><div>          etc</div><div><br></div><div>     MMethod&gt;&gt;inClass:makeMethod_withInputs:into: &lt;---[ creates a Method ]</div><div>                    &gt;&gt;inAnimal:makeBehavior_withInputs:into:</div><div>          MLambda&gt;&gt;makeLambda_withInputs:into: &lt;---[ creates a Lambda ( BlockClosure ) ]</div><div><br></div><div>     MClass&gt;&gt;makeClass_superClass:bodyParts:</div><div><br></div><div>     MAnimal&gt;&gt;makeAnimal_superAnimal:addedBodyParts:</div><div><br></div><div>maybe if you switched from Class&gt;&gt;Method to Animal&gt;&gt;Behavior</div><div>      it would require a lot less Splaining to get newbies to think OOP</div><div><br></div><div>      in fact it would take no explaining at all</div><div>      people would just get it</div><div>      </div><div>      So Class&gt;&gt;Method</div><div>           = big slowdown in the adoption rate of OOP</div><div>           Shouldabeen Animal&gt;&gt;Behavior</div><div>           that wouldabeen the Finnish way to do it</div><div>                they got the phonetic spelling system -&gt; no illiteracy </div><div>                ha ha       easy</div><div>           SmalltalkV manual did Animal&gt;&gt;Behavior</div><div>          </div><div>           A simple name change might have put Smalltalk on top</div><div><br></div><div>                but then there was the speed thing</div><div>                                                                                the speed thing</div><div><br></div><div><br>On Monday, September 26, 2016, Kjell Godo &lt;<a href="mailto:squeaklist@gmail.com">squeaklist@gmail.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">it becomes like a programming language.<div>Could it be used to allow restricted user customization.</div><div>Like a scripting language given some kind of </div><div>hierarchical editor.<br><br>On Monday, September 26, 2016, Kjell Godo &lt;<a href="javascript:_e(%7B%7D,&#39;cvml&#39;,&#39;squeaklist@gmail.com&#39;);" target="_blank">squeaklist@gmail.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">When is a MessageSend better than a BlockClosure?<div>I would like to know.  Because you can change it?</div><div>You can look inside.  What if the arguments were Blocks.</div><div>You could easily make a tree of MessageSends</div><div>(</div><div>( M message1:( M message2: obj2 )</div><div>      message1:( M message3: obj31</div><div>                              message3: obj32 ) </div><div>) receiverDeep:{ r1. r2. r3 }&quot;&lt;---[ left right top down traverse ]&quot;</div><div>) valueDeep<br><br>On Monday, September 26, 2016, Kjell Godo &lt;<a>squeaklist@gmail.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">M class&gt;&gt;doesNotUnderstand: aMessage ^aMessage asMessageSend !<div><br></div><div>( ( M som:eMe:ssa:ge: inputs ) receiver: obj )<br><br>On Monday, September 26, 2016, Kjell Godo &lt;<a>squeaklist@gmail.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">M&gt;&gt;doesNotUnderstand: aMessage ^aMessage asMessageSend !<div><br></div><div>( M handUserSorterMorphForProjec<wbr>tNamed: nil )&quot;&lt;---[ easy way to make a MessageSend ]&quot;</div>...<br><div>     sendTo: obj<br><br>On Monday, September 26, 2016,  &lt;<a>commits@source.squeak.org</a>&gt; wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Tim Felgentreff uploaded a new version of EToys to project The Trunk:<br>
<a href="http://source.squeak.org/trunk/EToys-tfel.253.mcz" target="_blank">http://source.squeak.org/trunk<wbr>/EToys-tfel.253.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: EToys-tfel.253<br>
Author: tfel<br>
Time: 26 September 2016, 11:40:48.856552 am<br>
UUID: a00694aa-7017-b444-a8d0-6671ec<wbr>171efd<br>
Ancestors: EToys-tfel.252<br>
<br>
delete the project saving morph before saving<br>
<br>
=============== Diff against EToys-tfel.252 ===============<br>
<br>
Item was changed:<br>
  ----- Method: EToyProjectDetailsMorph&gt;&gt;doOK (in category &#39;utilities&#39;) -----<br>
  doOK<br>
        &quot;User hit the ok button in the project-info dialog.  Store the updated project-info back in the project. Call the message-send residing in the receiver&#39;s actionBlock to carry out any subsequent desired task.  Note that this method sets the &#39;arguments&#39; of the message-send in the actionBlock&quot;<br>
<br>
        | args actionSelector  |<br>
        self validateTheProjectName ifFalse: [^false].<br>
        projectDetails := self copyOutDetails.<br>
<br>
        theProject acceptProjectDetails: projectDetails.  &quot;Make sure project &amp; world feel the changes&quot;<br>
+<br>
+       self delete.<br>
-<br>
        actionBlock isMessageSend &quot;new way -- hopefully all cases&quot;<br>
                ifTrue:  &quot;please excuse this ugly, non-modular code...&quot;<br>
                        [actionSelector := actionBlock selector.<br>
                        args := (actionSelector = #handUserSorterMorphForProject<wbr>Named:)<br>
                                ifTrue:<br>
                                        [{theProject name}]<br>
                                ifFalse:<br>
                                        [actionSelector numArgs = 0<br>
                                                ifTrue:<br>
                                                        [nil]<br>
                                                ifFalse:<br>
                                                        [Array with: projectDetails]].<br>
                        actionBlock arguments: args.<br>
                        actionBlock value]<br>
<br>
                ifFalse:  &quot;Old way, with actionBlock actually a block of one argument.  This should no longer occur.&quot;<br>
+                       [actionBlock value: projectDetails].!<br>
-                       [actionBlock value: projectDetails].<br>
-<br>
-       self delete!<br>
<br>
Item was changed:<br>
  ----- Method: EToyProjectQueryMorph&gt;&gt;doOK (in category &#39;ok button hit&#39;) -----<br>
  doOK<br>
        &quot;User hit the ok button in the project-query dialog.&quot;<br>
<br>
        | details |<br>
        details := self copyOutDetails.<br>
<br>
+       self delete.<br>
        actionBlock isMessageSend &quot;new way -- hopefully all cases&quot;<br>
                ifTrue:<br>
                        [actionBlock arguments: {details. actionBlock arguments second}.<br>
                        actionBlock value]<br>
<br>
                ifFalse:  &quot;Old way, with actionBlock actually a block of one argument.  This should no longer occur.&quot;<br>
+                       [actionBlock value: details].!<br>
-                       [actionBlock value: details].<br>
-<br>
-       self delete!<br>
<br>
<br>
</blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>