Hi Stef,

On Thu, Jan 2, 2014 at 3:06 PM, Stéphane Ducasse
<[email protected]>wrote:

>
> On 02 Jan 2014, at 14:40, Tudor Girba <[email protected]> wrote:
>
> Hi Stef,
>
> Glamour does not overuse blocks any more than any caller to cull: does it.
> And if you look closely now, you will see that the amount of arguments have
> decreased significantly
>
>
> good to know
>
> (you do not have to repeat the objects that are passed in by the
> transmission for every block). But, blocks are not essential in Glamour
> (and especially, if it really is a problem, we can enforce the arguments).
> I just showed how you can simply not use blocks at all for specifying
> widgets. So, my argument is that this "blocks worry" isn't truly justified.
> And I also showed how Spec takes a similar approach for scripting, but you
> do not see Spec as having the same problem.
>
>
> I hope that we will remove the block from spec too. Because with a ui
> builder you do not want to generate script but plain data.
>

Perhaps for Spec, this is an issue because you typically might end up with
many widgets that you have to manipulate. However, for Glamour, you have
usually much less precisely because it is higher level.

I am a bit troubled by your remark that the component model is not plain
> Smalltalk. The component model has nothing to do with the blocks and it is
> formed by plain objects:
> http://www.themoosebook.org/book/internals/glamour/architecture
>
>
> In Smalltalk I have objects and messages not ports/connectors and
> propagation.
>

Hmm, I think there is a misunderstanding somewhere. Glamour does not extend
or modify the language. Pane, Port and Transmission are just plain objects
that happen to describe the domain better. I think the discussion should be
if the model actually describes the domain of browsers properly or not, and
how we can improve it (there are several places that could be improved).

I think that saying "Glamour is not Smalltalk" is misleading. There are
many similar models in Smalltalk. Let's pick one: Announcement. They also
link objects and propagate events. Are these different in essence? They are
not.

Cheers,
Doru


> Could you explain?
>
> (please note that I am not picking up a fight
>
>
> ok
>
> - I would just want to understand how people see these things)
>
> Doru
>
>
>
>
> On Thu, Jan 2, 2014 at 2:13 PM, Stéphane Ducasse <
> [email protected]> wrote:
>
>> Doru
>>
>> You know well that Glamour has a component model that it not plain
>> smalltalk model. So why are you telling me I do not know what?
>> Now you also know that Glamour overuse blocks with multiple optional
>> block arguments where the order is important.
>> So I do not undersand why you are saying that.
>>
>> Stef
>>
>>
>> Interesting comparison. It sounds to me as if this "component model" is a
>> bad thing and that VW is a gold standard when it comes to describing user
>> interfaces. Also, when you say DSL you refer to the way the Smalltalk API
>> was design to read like sentences, which might sound like it goes against
>> the tradition of Smalltalk. As for blocks, some would go as far as
>> considering them to be plain Smalltalk :).
>>
>> I think a more detailed comparison would be more useful for newcomers.
>> So, here is one.
>>
>> First, the block issue. The funny thing is that if you want to build a
>> dynamic browser with Spec you have to rely on blocks, too. Take a look at
>> an example from Ben:
>>
>> ---
>> m := DynamicComposableModel new.
>> m instantiateModels: #( button ButtonModel list ListModel).
>> m list items: #(1 2 3 4 5).
>> m button
>> label: 'Plip';
>>  action: [ self halt ].
>> m openWithSpecLayout: (SpecLayout composed
>> newColumn: [: c | c add: #list ; add: #button height: 26 ];
>>  yourself).
>> ---
>>
>> Glamour is actually written in plain Smalltalk, and you can simply use
>> subclassing, too.
>>
>> For example, something like this:
>> GLMCompositePresentation new
>> with: [ :a |
>>  a list
>>   display: [ :input | 1 to: input ];
>>  act: [ :list | self halt ] entitled: 'Plip' ];
>>  openOn: 42
>>
>> Could be done like this:
>>
>> "Define a list presentation with an action in distinct classes to make
>> blocks disappear"
>> GLMGenericAction subclass: #MyPlipAction
>> instanceVariableNames: ''
>>  classVariableNames: ''
>> poolDictionaries: ''
>> category: 'AAA'.
>> GLMListPresentation subclass: #MyListPresentation
>> instanceVariableNames: ''
>> classVariableNames: ''
>>  poolDictionaries: ''
>> category: 'AAA'.
>> MyListPresentation compile:
>> 'displayValue
>>  ^ 1 to: self entity'.
>> MyListPresentation compile:
>> 'actions
>> ^ {MyPlipAction new}'.
>> MyPlipAction compile:
>> 'actOn: aPresentation
>> self halt'.
>> MyPlipAction compile:
>> 'title
>> ^ ''Plip'''.
>>  "Use the list"
>> composite := GLMCompositePresentation new.
>> composite add: (MyListPresentation new).
>> composite openOn: 42.
>>
>>
>> I doubt the blocks are an actual issue. Using blocks has the advantage of
>> more compact code, but it is true that it comes with a price: when you
>> store the block you cannot edit its code live while debugging (you actually
>> can do that, too if you take care).
>>
>> The main difference between Spec and Glamour is actually conceptual: the
>> application space. Spec addresses widgets: with Spec you place widgets on a
>> "canvas" and handle the interaction. So, in a sense, this places Spec at
>> the same level as Morphic. Glamour is at a higher level and it is
>> specifically dedicated to supporting browsing workflows. In its current
>> state, it is not useful for laying out widgets, but it can be very concise
>> for expressing browsers.
>>
>> The way this works is via this "component model". Essentially, a browser
>> can be described as a set of components that can pass data to each other.
>> Glamour lets you model that.
>>
>>  It so happens that the inspector and the debugger are browsers and can
>> be expressed at that level. It also so happens that most user interfaces
>> that programmers use can be expressed as browsers, too. And Glamour was
>> actually validated for hundreds of various browsers (literally), so it
>> seems it can support a large set of use cases.
>>
>> If you want to learn more about Glamour you can read the chapters from:
>> - http://deepintopharo.org, or
>> - http://www.themoosebook.org/book/internals/glamour
>>
>> If you want to see where Glamour fits within Moose, you can read this
>> post:
>> http://www.humane-assessment.com/blog/moose-custom-analyses-made-easy
>>
>> Doru
>>
>>
>>
>> --
>> www.tudorgirba.com
>>
>> "Every thing has its own flow"
>>
>>
>>
>
>
> --
> www.tudorgirba.com
>
> "Every thing has its own flow"
>
>
>


-- 
www.tudorgirba.com

"Every thing has its own flow"

Reply via email to