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 (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 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

Could you explain?

(please note that I am not picking up a fight - 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"

Reply via email to