On 12/31/2013 7:23 PM, Casey Ransberger wrote:
> If only Self was popular. Direct user interface construction is one of my favorite ideas. Sadly no one in the Smalltalk community seems to have thought all that hard about how to do it. Every time I bring up the Self object transporter, it seems like there's a rack of people saying "don't." It works in Self? > > I've been looking very seriously at Ted Kaehler's DynaBook Junior spec and thinking about doing an implementation in Cuis, which is at least a start. A HyperCard analogue. > > Of course there's a mostly unloved implementation sitting in Squeak thanks to Ted K. But it won't work in Cuis. We need a new implementation. > > It's just it seems like no one wants even that. > > Damned fools, > > --C I would really like to have such a thing in Cuis. But I think we need to do a few things before that. We need a good set of morphs, including Beziers and other curves. We need zooming and rotating. I guess we also need a way end users to specify behavior (stepping), or at least constraints (and a constraints system). And we need something Dan Ingalls talked about maybe fifteen years ago: Some way to cross the bridge between morphs made with code and morphs made with manual construction (menus, halos, etc). This would make direct construction a useful way to build Smalltalk applications. Something like WindowBuilder, but for general morphs. We would also need the kind of dynamic state (properties) that Ken is suggesting in this thread. But that's not a problem, we have Ken with us! I think a good intermediate objective could be to build a DynaBook Jr. for smalltalkers, meaning that it is ok to require some Smalltalk code sometimes. And that environment (let's call it Cuis) could be a good base to build an end user construction application. Let's do it, one step at a time! Change will not happen instantly. So, please keep discussing, and making it real with code. Cheers, Juan Vuletich >> On Dec 31, 2013, at 2:08 PM, Ken Dickey<[hidden email]> wrote: >> >> On Tue, 31 Dec 2013 08:40:54 -0800 >> Casey Ransberger<[hidden email]> wrote: >> >>> #toggleFullBounds sounds great. Either that or #thanksKen. >> Shorter than #youAreWelcomeCasey ;^) >> >>> Interesting that your solution uses the properties mechanism. I've never >>> touched that. I'd have probably given SystemWindow a couple of instance >>> variables to cache location and extent. >> My model is that Classes use messages/methods/iVars >> but individual instances use events/handlers/properties. >> >> In particular, part of my list of past sins includes writing code in and for MultiMedia authoring environments. MM authoring -- particularly for media centric people who are not programmers -- tends to be more prototype based than class based. >> >> One starts with a bunch of media pallets and explorers, splats media on the stage, adds behaviors, ... Authoring tends to me more graphical by nature. [See mTropolis UI examples below]. >> >> One of the things I am thinking about is pushing Morphic toward a more direct/graphic style of authoring. >> >> One change to think about is making some tests more instance based. >> >> Why have an entire class of instances respond to some message when only a few instances need to? An extra subclass with just a few methods. >> >> Simple (possibly useless) example. >> >> We could change some methods to look for properties. >> >> Say >> >> Morph>>allowsSubmorphDrag >> ^ self hasProperty: #allowsSubMorphDrag >> >> So a class can still short-circuit this by >> >> SomeSubclassOfMorph>>>>allowsSubmorphDrag >> ^true >> >> With no bad effects -- all the current code still works! ;^) >> >> But now one can have various instances support dragging submorphs without having to create a special subclass just to do this. Just dynamically add (or remove!) a property. >> >> Anyway, this is the kind of stuff I am playing with in the background. >> >> Cheers, >> -KenD >> <Logic+Extras-Palettes.png> >> <Logic+Extras-Palettes.png> >> <MouseMessage-When.png> >> <Messenger-dialog.png> >> <ImageEffect-dialog.png> >> <Behavior-score3.png> >> _______________________________________________ >> Cuis mailing list >> [hidden email] >> http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org > _______________________________________________ > Cuis mailing list > [hidden email] > http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org > _______________________________________________ Cuis mailing list [hidden email] http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org |
In reply to this post by KenDickey
That last line was supposed to read: Damned fools. :P It comes off as a lot more negative than I meant it without the emoticon! (Especially since I was griping at the time.) I haven't met any *real* fools in the Smalltalk community. Sorry if this rant offended anyone.
On Tue, Dec 31, 2013 at 2:34 PM, Ken Dickey <[hidden email]> wrote: On Tue, 31 Dec 2013 14:23:07 -0800 _______________________________________________ Cuis mailing list [hidden email] http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org |
In reply to this post by Juan Vuletich-4
Hi Juan,
Not sure you want this yet, but no ill effects and seems much simpler than the eToys handler code. I am posting to the group in case anyone wants to experiment with instance specific behaviors (done with "handlers" in Squeak). Try loading the change set then drag a morph from the World > New Morph.. menu Open an inspector on the morph (Command-click menu: debug > inspect morph) and add a mouse click behavior: "===================" self setProperty: #handlesMouseDown: toValue: #true. self setProperty: #mouseButton1Up:localPosition: toValue: [ :evt :posn | self color: self color negated ]. "===================" Then click on the morph. Another fun thing to try is opening a BorderedRectMorph and setting property #allowsSubmorphDrag. Embed a submorph and drag it out. Cheap tricks, but then everybody likes a bargan. ;^) Cheers, -KenD _______________________________________________ Cuis mailing list [hidden email] http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org 1911-CuisMediaAuthor-KenD-2013Dec31-14h23m-KenD.1.cs.st (8K) Download Attachment MorphProps.png (232K) Download Attachment
-KenD
|
On Sun, 12 Jan 2014 21:33:21 -0800
Ken Dickey <[hidden email]> wrote: > Cheap tricks, but then everybody likes a bargan. ;^) Sorry, Should be *bargain*. -KenD _______________________________________________ Cuis mailing list [hidden email] http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org
-KenD
|
In reply to this post by KenDickey
Hi Ken,
On 1/13/2014 2:33 AM, Ken Dickey wrote: > Hi Juan, > > Not sure you want this yet, but no ill effects and seems much simpler than the eToys handler code. > > I am posting to the group in case anyone wants to experiment with instance specific behaviors (done with "handlers" in Squeak). > > Try loading the change set then drag a morph from the World> New Morph.. menu > > Open an inspector on the morph (Command-click menu: debug> inspect morph) and add a mouse click behavior: > "===================" > self setProperty: #handlesMouseDown: toValue: #true. > self setProperty: #mouseButton1Up:localPosition: > toValue: [ :evt :posn | self color: self color negated ]. > "===================" > > Then click on the morph. > > Another fun thing to try is opening a BorderedRectMorph and setting property #allowsSubmorphDrag. Embed a submorph and drag it out. > > Cheap tricks, but then everybody likes a bargan. ;^) > > Cheers, > -KenD It is wonderful to see that Cuis enables thinking about and doing these kinds of things. Expanding the paradigm with clean and nice code! I really like this kind of stuff. It would be great for Cuis to support End User experiments, and Instance Specific Behavior and State. Maybe a hierarchy like this?: Object ActiveModel InstanceSpecificBehaviorObject (#findABetterName) Morph This would enable the instance specific stuff to be usable not only by morphs. It would also mean using the standard event system for Morphs. Not sure of the consequences, but sonds reasonable. Does it make sense to allow CompiledMethods and not only blocks? I'm not sure how, but I think the event system (#when:send:to: and friends) could be related to this. Maybe by using events we would avoid the need to add a special method that queries and evaluates the property. Please keep experimenting, and telling us about it! Cheers, Juan Vuletich _______________________________________________ Cuis mailing list [hidden email] http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org |
Some reasons for using properties for instance specific behavior:
- Morphs already have properties (no new classes) - UI operations can be a bit slow but are fast relative to humans - No change to VM dispatch mechanics - Current usage does not change hardware event -> message dispatch mechanics Much of what I am interested in relates to direct authoring via drag-n-drop pallets and fill-in-the-blank or simple method extensions. I am not sure where I would use instance specific behavior outside of the UI. One thing to think about is that common patterns can use "threaded code" which is very efficient. For a specialized common cases the Scratch solution is very attractive alternative to/as a mini-language. More playtime as I get a chance.. -KenD _______________________________________________ Cuis mailing list [hidden email] http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org
-KenD
|
Very interesting. At leat to me that I'm not a Morphic expert, to learn and understand more stuff about Morphic. Thanks!
2014/1/15 Ken Dickey <[hidden email]> Some reasons for using properties for instance specific behavior: -- Saludos / Regards,
Germán Arduino www.arduinosoftware.com _______________________________________________ Cuis mailing list [hidden email] http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org |
German don't feel alone there...I would love to know a lot more about morphic but documentation is not easy to find. At least to me... best Nacho Lic. Ignacio Sniechowski, MBA On Thu, Jan 16, 2014 at 5:01 PM, Germán Arduino <[hidden email]> wrote:
_______________________________________________ Cuis mailing list [hidden email] http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org
Nacho
Smalltalker apprentice.
Buenos Aires, Argentina.
|
What is such "documentation" stuff? :) 2014/1/16 Ignacio Matías Sniechowski <[hidden email]>
-- Saludos / Regards,
Germán Arduino www.arduinosoftware.com _______________________________________________ Cuis mailing list [hidden email] http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org |
In reply to this post by nacho
On Thu, 16 Jan 2014 17:05:33 +0000
Ignacio Matías Sniechowski <[hidden email]> wrote: > German don't feel alone there...I would love to know a lot more about > morphic but documentation is not easy to find. At least to me... Here is a small place to start from: http://wiki.squeak.org/squeak/30 -KenD _______________________________________________ Cuis mailing list [hidden email] http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org
-KenD
|
In reply to this post by garduino
Well.....something from Self: (see chapter 7) Something from here: :p Lic. Ignacio Sniechowski, MBA On Thu, Jan 16, 2014 at 5:09 PM, Germán Arduino <[hidden email]> wrote:
_______________________________________________ Cuis mailing list [hidden email] http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org
Nacho
Smalltalker apprentice.
Buenos Aires, Argentina.
|
hehe I know.....only joking in the sense that most of documentation seems to be outdated. 2014/1/16 Ignacio Matías Sniechowski <[hidden email]>
-- Saludos / Regards,
Germán Arduino www.arduinosoftware.com _______________________________________________ Cuis mailing list [hidden email] http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org |
In reply to this post by KenDickey
Thanks Ken. Re-reading such page I remembered Prefab, that I saw long time ago...unfortunately the link don't work now. 2014/1/16 Ken Dickey <[hidden email]>
-- Saludos / Regards,
Germán Arduino www.arduinosoftware.com _______________________________________________ Cuis mailing list [hidden email] http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org |
In reply to this post by KenDickey
All great reasons!
Keep us posted! Cheers, Juan Vuletich On 1/15/2014 9:44 PM, Ken Dickey wrote: > Some reasons for using properties for instance specific behavior: > - Morphs already have properties (no new classes) > - UI operations can be a bit slow but are fast relative to humans > - No change to VM dispatch mechanics > - Current usage does not change hardware event -> message dispatch mechanics > > Much of what I am interested in relates to direct authoring via drag-n-drop pallets and fill-in-the-blank or simple method extensions. I am not sure where I would use instance specific behavior outside of the UI. > > One thing to think about is that common patterns can use "threaded code" which is very efficient. For a specialized common cases the Scratch solution is very attractive alternative to/as a mini-language. > > More playtime as I get a chance.. > -KenD > _______________________________________________ Cuis mailing list [hidden email] http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org |
Free forum by Nabble | Edit this page |