[Edu-sig] Accessibility to non CS types?
Paul D. Fernhout
pdfernhout at kurtz-fernhout.com
Mon May 29 19:35:46 CEST 2006
Francois-
Wow! Thanks for making that Flash recording:
http://francois.schnell.free.fr/bazar/patapata-test1/patapata-test1.html
That is a neat demo showing things I had not even thought of, like with
the jumping Morphs (and far beyond my presentation skills). My wife is now
finally impressed somewhat with what I am doing. :-) The version you are
using did benefit from her trying an earlier version and her feedback on
it, as several things she (also a programmer) tried that were hard or
confusing or generated errors, I made easier or fixed.
Your presentation almost made me think of one of Alan Kay's Squeak demos.
Perhaps your familiarity with Squeak made is easier to understand what I
was attempting with PataPata (especially without any tutorial documents)?
Now that you made a video, perhaps that spark of enlightenment will
spread. :-)
To answer your first question: To add a method, try right-clicking in the
yellow inspector pane to get a menu which will allow you to make new child
or sibling nodes of a prototype you are inspecting (or to copy, rename or
delete a node). [Unless that is a bug under wx on your XP? system?] (I
used to have a help text about the right click menu but it got dropped a
while back.) "Child" nodes are children of the node you have selected,
usually you want to create a "sibling" node if you have already clicked on
a method or value of a Morph or Prototype you are interested in.
To make a new method, you enter the name of the new field in the first
popup box. Then after clicking OK there, a second popup box comes up where
you need to enter "method" without the quotes, and after you click OK
there you can modify the default method text in the edit window below the
yellow inspector pane. You need to enter "method" as otherwise the system
will try to evaluate what you enter, which by default is a string. It's a
bit awkward to use the popups (as opposed to, say, a custom new value
entry dialog with radio buttons for method, string, or expression type),
but it was easy to implement as a first try.
While it is more prone to error, instead of typing "method", you could
also enter a PrototypeMethod constructor to evaluate as an expression,
such as:
PrototypeMethod(None, "def foo(self): print 'foo'")
which I just tested by adding a foo field to Morph 0 and then entering the
following in the PyShell (the scrolling window at the bottom):
world.morphs[0].foo()
which should print "foo". Not sure how robust this second approach is
though; some tricky things happen with how PrototypeMethods are bound to
instances which I still need to clean up; I still need to resolve a bug
related to copying morphs with local methods where modifying the original
sometimes modifies the copy.
To answer your second question: To execute a method in another morph, you
must first have a pointer to that morph directly. Ideally, that would be
supported by cut and paste in the inspector, but you can't do that yet.
However, you can, say, go to Morph 0 and add a field and call it "morph1"
and then when asked for the value, enter (without quotes):
"world.morphs[1]" which will evaluate to Morph 1 in the world. Then you
could reference "self.morph1" in any method of Morph 0, like to call
"self,morph1.X()" directly. I just tried that, adding
"self.morph1.x += 10" to the mouseDown method of Morph 0, so now you can
click on Morph 0 and Morph 1 moves (what I guess might be your intent,
based on your demo?) You could also just reference "self.world.morphs[1]"
directly in your methods, but if you add or delete morphs in the world,
then the morph that position 1 of that list refers to might change.
I'm guessing you're using WinXP? Nice to see the wxWindows button dragging
properly. Under wx GTK 2.6 there is a library bug where a button only
moves when you let go of it as it; otherwise the button eats all mouse
events after you click in it until you release it; PythonCard has the same
issue under GNU/Linux witht hat GTK version; one reason I am considering
drawing my own widgets.
So many times one does things and thinks no one notices or cares, so I'm
very excited to see someone trying it (and going to the effort to make a
Flash video, too). Thanks again for trying it and the encouragement. As
regards future evolution, right now I'm at a decision point as to whether
to push forward in Python further or, as per my previous discussions here
with Kirby where he rightly points to dominant paradigms in specific
languages, to jump to something like OCaml and use it to build a Self-like
prototype language on top of it (something like io, which looks great,
http://www.iolanguage.com/about/
but with a Smalltalk/Self-derived keyword syntax, which I feel is
desirable), and so essentially producing a system that supports two
extremes of permissiveness at two different levels -- strong (but
implicit) typing at a speedy supporting layer and anything-goes prototypes
above that for most GUI development work. On the other hand, I am making a
lot of progress with Python (and not knowing OCaml much) and a Python
version has value to me for other reasons. So, this seems like a big vote
on keeping it all in Python for now?
All the best.
--Paul Fernhout
francois schnell wrote:
> On 26/05/06, Paul D. Fernhout <pdfernhout at kurtz-fernhout.com> wrote:
>
>>
>>
>> I think Self leads the way here in generality with one inspector that can
>> be used to build GUIs, programs, or just sets of objects. And here is an
>> attempt to bring that ease of use to Python, building on ideas from Self
>> (and Squeak): :-)
>>
>> http://svn.sourceforge.net/viewcvs.cgi/patapata/trunk/PataPata/PataPata.py?view=log
>>
>> Doesn't succeed yet perhaps in making that beginner friendly, but a
>> start.
>> (PythonCard is much better choice for current work though.)
>
>
>
> Hello,
>
> I've just gave a try to your "PataPata" and I already have fun with it
> while
> "testing" it :)
> http://francois.schnell.free.fr/bazar/patapata-test1/patapata-test1.html
>
> Will it be possible to directly add new methods to morphs (maybe from the
> inspector ? ... when I saw the 'grow' method I wanted a "shrink' one ...).
> Is there a way yet to execute a Morph method from another Morph (if I click
> on Morph 1 I'd like to execute method X from Morph 2 for example).
>
> I find your "PataPata" promising and I'm eager to see how it evolves :)
>
> francois
>
>
>
> --Paul Fernhout
More information about the Edu-sig
mailing list