[Cuis-dev] Turning morphs back into source code

Ian Jeffries mail at ianjeffries.net
Wed Nov 27 16:39:46 PST 2024


Hey Ken,

Thank you for the great response. Sorry to hear about the local chaos, I
won't ask but I also don't mind (I'm an asynchronous, "mull then respond"
person on mailing lists myself).

> Question is "what do you want to end up with?".  A new Morph subclass
> which you can then multiply instantiate?  Given required backing code
> (packages) does this require a package to get requirements?  Do you wish
> on the other hand to create a bunch of such Morph composites to be
> shared within a package to share requirements?

There are certainly a lot of degrees of freedom. The output I'm imaging is
a string of hopefully idiomatic source code that can then be pasted where
desired.

An example:

*(BoxedMorph new :: scale: 2) sourcify*

will evaluate to:

*'BoxedMorph new :: scale: 2.0' .*

I think this would provide a good layer to build on. It can be used
directly by humans (call `sourcify`, then copy/paste the results into the
system browser). But it would also provide a good foundation for other
tools. I'm imagining things like being able to highlight a section of
source code that creates a morph, then open it and do direct manipulation
while having the changes streamed back into the source code.

> Terms.  Hmmm.. perhaps "sourcification" and "sourcifier"?

Sounds perfect to me:) The more I think about this the more I'm sure it
deserves its own name. Definitely related to serialization, but different
because the primary goal is to be read by and useful to humans.

> You might get some ideas from
>
>
https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-UI/tree/main/metaproperties
> and
>
> https://github.com/KenDickey/Cuis-Smalltalk-BabySteps/tree/master/IdeaMine

Whoa, very cool! I think having an automatic way to display and edit visual
properties is a clear and important win. The behaviors are a little
freakier... they seem great but are also mind-bending.

> Sorry for the muddy ideas, but perhaps hey will engender some
> inspiration.

No, this was exactly what I was looking for, thank you!

~ Ian Jeffries

On Sun, Nov 24, 2024 at 11:44 AM Ezequiel Birman via Cuis-dev <
cuis-dev at lists.cuis.st> wrote:

> Another strategy to address Ian's problem could be to record all the
> interactions. Emacs macros work like this.
>
> On Sun, 24 Nov 2024 at 16:16, Ezequiel Birman <ebirman77 at gmail.com> wrote:
>
>> Hm, do you have any examples? I don’t think you can build anything very
>>> useful by manipulation with the mouse without writing code… you can add
>>> submorphs to a morph, change colors and sizes, … not much more, I think…
>>> nothing like a browser or an inspector. Maybe you should checkout Fabrik,
>>> eToys, and other similar ideas.
>>
>>
>> As Luciano said, there's not much you can do by direct manipulation, yet.
>> One of the suggested ideas for helping Cuis
>> <https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev/wiki/Helping-Cuis>,
>> by Juan and Hilaire is
>>
>>> Take the SVG package and turn it into and end user Vector Graphics
>>> designer application. Like a baby Inkscape
>>
>>
>> We currently lack the means to convert an arbitrary graphic entity, for
>> example a letter, into a LetterMorph composed of VectorMorphs, and/or
>> StrokeDrawnMorphs, back and forth; and that also opens the door to think
>> about morph decomposition into simpler morphs all the way down to
>> PixelMorphs, if necessary, and translations into other representations of
>> the same entity, for example into something that Dr. Geo and/or Arrows can
>> handle. Unlike with languages, these translations are easier coming from
>> one direction, and harder from the other; maybe a hint that we'd always
>> keep a good model when we need it, and derive from it, rather than the
>> other way around.
>>
>> On Sun, 24 Nov 2024 at 09:55, Luciano Notarfrancesco via Cuis-dev <
>> cuis-dev at lists.cuis.st> wrote:
>>
>>> Hm, do you have any examples? I don’t think you can build anything very
>>> useful by manipulation with the mouse without writing code… you can add
>>> submorphs to a morph, change colors and sizes, … not much more, I think…
>>> nothing like a browser or an inspector. Maybe you should checkout Fabrik,
>>> eToys, and other similar ideas.
>>>
>>> On Thu, Nov 21, 2024 at 22:27 Ian Jeffries via Cuis-dev <
>>> cuis-dev at lists.cuis.st> wrote:
>>>
>>>> Hi folks,
>>>>
>>>> I'm experimenting with turning morphs created via direct manipulation
>>>> back into source code and am looking for some tips.
>>>>
>>>> As an example use case: I'm making a world map and would like to put my
>>>> house in it. The image will be pretty simple: just three or four
>>>> rectangles for the house, a rectangle for the garage, and a few circles to
>>>> represent trees. Certainly I could just write this in code, but it seems
>>>> like more fun to use the direct manipulation features of Morphic to create
>>>> the scene (duplicate, rotate, etc), then serialize that scene to code.
>>>>
>>>> Here's the twist: I'm already familiar with Cuis-UI-Packager
>>>> <https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-UI/blob/a56d748ac25fadf3f1910f0666b7ea77bb3df286/tools/UI-Packager.pck.st> which
>>>> is very cool, but my goal here is different. I'd like the result to be
>>>> source code, not object files, ideally similar to what I would have written
>>>> by hand.
>>>>
>>>> First question: is there a term in the Smalltalk community or the
>>>> academic literature for this task? Specifically for turning runtime objects
>>>> back into idiomatic source code. (I realize this problem probably can't be
>>>> solved in the general case since it's such a hard one-- one of the reasons
>>>> I'd like to read more about it).
>>>>
>>>> Second question: there isn't already a package for this in Cuis (or
>>>> even in Pharo etc)? I wouldn't think so and can't find one by searching,
>>>> but wanted to check.
>>>>
>>>> I did find Morphic Designer
>>>> <https://www.hpi.uni-potsdam.de/hirschfeld/trac/SqueakCommunityProjects/wiki/designer>
>>>> in Squeak, but that's a little different since you build the morphs in a
>>>> specialized app. I'm looking for something that you can target any
>>>> supported runtime morph with (though I don't care how small the set of
>>>> supported morphs is, any example would be helpful even if it only supported
>>>> one or two).
>>>>
>>>> I've got a little demo working for myself which has also given me some
>>>> implementation questions, but I'll save those for a later thread.
>>>>
>>>> Thanks,
>>>> Ian Jeffries
>>>> --
>>>> Cuis-dev mailing list
>>>> Cuis-dev at lists.cuis.st
>>>> https://lists.cuis.st/mailman/listinfo/cuis-dev
>>>>
>>> --
>>> Cuis-dev mailing list
>>> Cuis-dev at lists.cuis.st
>>> https://lists.cuis.st/mailman/listinfo/cuis-dev
>>>
>> --
> Cuis-dev mailing list
> Cuis-dev at lists.cuis.st
> https://lists.cuis.st/mailman/listinfo/cuis-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cuis.st/mailman/archives/cuis-dev/attachments/20241127/7f4163ea/attachment.htm>


More information about the Cuis-dev mailing list