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> >>do:</div><div> >>do:do:</div><div> >>do:do:do:</div><div> >>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>>define: listOfAssociations in: messageSendSequence</div><div> MAssociation>>key:value:</div><div> MList>>n:</div><div> >>n:n:</div><div> >>n:n:n:</div><div> etc</div><div><br></div><div> MMethod>>inClass:makeMethod_withInputs:into: <---[ creates a Method ]</div><div> >>inAnimal:makeBehavior_withInputs:into:</div><div> MLambda>>makeLambda_withInputs:into: <---[ creates a Lambda ( BlockClosure ) ]</div><div><br></div><div> MClass>>makeClass_superClass:bodyParts:</div><div><br></div><div> MAnimal>>makeAnimal_superAnimal:addedBodyParts:</div><div><br></div><div>maybe if you switched from Class>>Method to Animal>>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>>Method</div><div> = big slowdown in the adoption rate of OOP</div><div> Shouldabeen Animal>>Behavior</div><div> that wouldabeen the Finnish way to do it</div><div> they got the phonetic spelling system -> no illiteracy </div><div> ha ha easy</div><div> SmalltalkV manual did Animal>>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 <<a href="mailto:squeaklist@gmail.com">squeaklist@gmail.com</a>> 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 <<a href="javascript:_e(%7B%7D,'cvml','squeaklist@gmail.com');" target="_blank">squeaklist@gmail.com</a>> 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 }"<---[ left right top down traverse ]"</div><div>) valueDeep<br><br>On Monday, September 26, 2016, Kjell Godo <<a>squeaklist@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">M class>>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 <<a>squeaklist@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">M>>doesNotUnderstand: aMessage ^aMessage asMessageSend !<div><br></div><div>( M handUserSorterMorphForProjec<wbr>tNamed: nil )"<---[ easy way to make a MessageSend ]"</div>...<br><div> sendTo: obj<br><br>On Monday, September 26, 2016, <<a>commits@source.squeak.org</a>> 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>>doOK (in category 'utilities') -----<br>
doOK<br>
"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's actionBlock to carry out any subsequent desired task. Note that this method sets the 'arguments' of the message-send in the actionBlock"<br>
<br>
| args actionSelector |<br>
self validateTheProjectName ifFalse: [^false].<br>
projectDetails := self copyOutDetails.<br>
<br>
theProject acceptProjectDetails: projectDetails. "Make sure project & world feel the changes"<br>
+<br>
+ self delete.<br>
-<br>
actionBlock isMessageSend "new way -- hopefully all cases"<br>
ifTrue: "please excuse this ugly, non-modular code..."<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: "Old way, with actionBlock actually a block of one argument. This should no longer occur."<br>
+ [actionBlock value: projectDetails].!<br>
- [actionBlock value: projectDetails].<br>
-<br>
- self delete!<br>
<br>
Item was changed:<br>
----- Method: EToyProjectQueryMorph>>doOK (in category 'ok button hit') -----<br>
doOK<br>
"User hit the ok button in the project-query dialog."<br>
<br>
| details |<br>
details := self copyOutDetails.<br>
<br>
+ self delete.<br>
actionBlock isMessageSend "new way -- hopefully all cases"<br>
ifTrue:<br>
[actionBlock arguments: {details. actionBlock arguments second}.<br>
actionBlock value]<br>
<br>
ifFalse: "Old way, with actionBlock actually a block of one argument. This should no longer occur."<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>