Bump.

Anyone have opinions on this?

> On Jan 30, 2019, at 12:47 PM, Harbs <harbs.li...@gmail.com> wrote:
> 
> I implemented the basics of my idea here: 
> https://github.com/apache/royale-asjs/commit/1b2a45c91397e485be93d56925f2c31417726bb7
>  
> <https://github.com/apache/royale-asjs/commit/1b2a45c91397e485be93d56925f2c31417726bb7>
> 
> I got my inspiration from PureMVC.
> 
> I only made enough changes to get rid of compiler errors in Core. There’s 
> still a lot of work I’d need to do to make it functional, but you should be 
> able to see the architecture from that commit.
> 
> Basically I added to IBead:
> 
> listInterests() which allows the strand to extract from a bead what 
> notifications it wants and:
> handleNotification() where the strand sends the notification to the bead.
> 
> Strand got notify() and sendNotification().
> 
> Those two methods should replace virtually every use of dispatchEvent() 
> currently being used except when it’s a legitimate event.
> 
> Clean addition and removal of beads is actually already implemented in my 
> POC. Check out the utility functions in org.apache.royale.utils.beads
> 
> What do folks think?
> Harbs
> 
>> On Jan 29, 2019, at 2:10 PM, Carlos Rovira <carlosrov...@apache.org 
>> <mailto:carlosrov...@apache.org>> wrote:
>> 
>> That sounds good Harbs,
>> you could that of if you want to save some effort, first make a new email
>> thread with some example of code on how this would look in the end, so we
>> all can understand it and provide some feedback so your effort could be
>> more easy in the end.
>> 
>> El lun., 28 ene. 2019 a las 17:26, Harbs (<harbs.li...@gmail.com 
>> <mailto:harbs.li...@gmail.com>>) escribió:
>> 
>>> Good point.
>>> 
>>> If we would implement my idea of notifications, we could use utility
>>> functions to clean out beads.
>>> 
>>> If anyone is interested in this direction, I can write an implementation
>>> in a branch to show what I’m talking about…
>>> 
>>> Harbs
>>> 
>>>> On Jan 28, 2019, at 6:22 PM, Alex Harui <aha...@adobe.com.INVALID 
>>>> <mailto:aha...@adobe.com.INVALID>>
>>> wrote:
>>>> 
>>>> It is fine to have a utility function such as this, but IMO, it doesn't
>>> actually solve the problem.  If the original bead does not know how to
>>> remove itself, then a version of that bead needs to be created that does
>>> know how to remove itself.  While we could add replaceable versions of
>>> every bead, that would flood the documentation and code-intelligence
>>> eventually.
>>>> 
>>>> Replacing beads should be a rare occurrence and the APIs should indicate
>>> that.  I guess I am not making myself clear, but every time I say  we are
>>> going to remove "removeBead" I always say that there will be a utility
>>> function to do it and then someone responds with "hey we still need a way
>>> to do this".  That way is the utility function.
>>>> 
>>>> It might turn out that there is a way to write most beads in a way that
>>> another bead can clean it up.  That requires making event handlers public
>>> instead of private/protected, which isn't my favorite idea since it also
>>> clutters code-intelligence and documentation.
>>>> 
>>>> One other idea along these lines that I've never tried is a "splitter
>>> bead".  In electronics and elsewhere, a splitter allows one plug to plug in
>>> two things, with an optional switch.  So a LayoutSplitterBead (which is
>>> also a strand) would allow both a HorizontalLayout and VerticalLayout to be
>>> on its strand, and have some flag that switches which layout is in play by
>>> redirecting calls to one of the two beads.
>>>> 
>>>> HTH,
>>>> -Alex
>>>> 
>>>> On 1/28/19, 2:57 AM, "Carlos Rovira" <carlosrov...@apache.org 
>>>> <mailto:carlosrov...@apache.org> <mailto:
>>> carlosrov...@apache.org <mailto:carlosrov...@apache.org>>> wrote:
>>>> 
>>>>   Hi Harbs
>>>> 
>>>>   this seems to me the right way to go.
>>>> 
>>>>   In the current case, I think Jewel should not know about how to clean
>>>>   itself since is not PAYG. So Piotr should subclass the bead and add
>>> the
>>>>   clean up functionality an configure as default in this project. Then
>>> use
>>>>   your replaceBead to do the change
>>>> 
>>>>   thanks all for taking a look, I think we got it :)
>>>> 
>>>>   @Piotr solves that your problem?
>>>> 
>>>>   Carlos
>>>> 
>>>> 
>>>>   El lun., 28 ene. 2019 a las 11:20, Harbs (<harbs.li...@gmail.com 
>>>> <mailto:harbs.li...@gmail.com>>)
>>> escribió:
>>>> 
>>>>> I just added a utility function for this.
>>>>> 
>>>>> I thought of checking to see if the bead has a beadRemoved() method and
>>>>> conditionally calling that, but it seemed not PAYG and hacky.
>>>>> 
>>>>> My thoughts are to use this like so:
>>>>> 
>>>>> var removedBead:MyBeadThatKnowsHowToCleaupAfterItself =
>>>>> replaceBead(strand, newBead,ILayoutBead);
>>>>> if(removedBead)removedBead.cleanup();
>>>>> 
>>>>>> On Jan 28, 2019, at 12:06 PM, Harbs <harbs.li...@gmail.com 
>>>>>> <mailto:harbs.li...@gmail.com>> wrote:
>>>>>> 
>>>>>> I mentioned a long time ago that I really want to implement a
>>>>> notification system for strands and beads. I’ve always felt that events
>>> are
>>>>> kind of hacky.
>>>>>> 
>>>>>> I would require a little bit of scaffolding for the notifications so
>>>>> it’s not truly PAYG, but the notifications could really be plug and
>>> play. I
>>>>> think the net result would be less code as opposed to the current
>>> system of
>>>>> sending events.
>>>>>> 
>>>>>> For this case, I think a replaceBead() utility function would probably
>>>>> do the trick.
>>>>>> 
>>>>>>> On Jan 28, 2019, at 10:38 AM, Carlos Rovira <carlosrov...@apache.org 
>>>>>>> <mailto:carlosrov...@apache.org>>
>>>>> wrote:
>>>>>>> 
>>>>>>> HI Alex
>>>>>>> 
>>>>>>> mostly agree with your thoughts. Just some points:
>>>>>>> 
>>>>>>> * While I think beads should be "instantiation time", don't agree with
>>>>>>> wanting to remove the "removeBead" method. We're a framework, and
>>> people
>>>>>>> will find this problem. So is difficult to explain the we don't have
>>> any
>>>>>>> way to do this
>>>>>>> * In the other hand, I think we should have as you proposed in your
>>>>>>> response, some utility function to handle this, so people could manage
>>>>> it
>>>>>>> in this strange case.
>>>>>>> 
>>>>>>> So, finally, I think Piotr, should create a class function or
>>> something
>>>>>>> like this. If he can do something generalist, that could go to our
>>>>> repo, if
>>>>>>> is something more tied to his code, that should go to his codebase.
>>>>>>> 
>>>>>>> Thoughts?
>>>>>>> 
>>>>>>> 
>>>>>>> El lun., 28 ene. 2019 a las 6:40, Alex Harui
>>> (<aha...@adobe.com.invalid <mailto:aha...@adobe.com.invalid>
>>>>>> )
>>>>>>> escribió:
>>>>>>> 
>>>>>>>> I know there have been other responses, but I think this original
>>> post
>>>>> is
>>>>>>>> the best place for my response.
>>>>>>>> 
>>>>>>>> IMO, sealed classes are another safety/security measure.  Changing
>>> the
>>>>>>>> code in a class at runtime invites opportunities for hacking that are
>>>>>>>> really hard to detect.  The set of beads assigned to a strand would
>>> be
>>>>>>>> instantiated in the constructor if we could do it that early, but we
>>>>> want
>>>>>>>> to allow someone to declare options/overrides of default behavior and
>>>>> the
>>>>>>>> only practical way to do it is to wait a bit.  But once the
>>>>> instantiation
>>>>>>>> lifecycle is over, you really should be able to examine what the
>>>>> instance
>>>>>>>> is composed of.   It shouldn't change later.  Later changes create
>>> all
>>>>>>>> kinds of havoc for code coverage tools, debugging, and other
>>>>> productivity
>>>>>>>> issues.
>>>>>>>> 
>>>>>>>> So, IMO, it is best to try to make the composition of an instance
>>>>>>>> declarable at author-time.  If you need to specify something for an
>>>>> inner
>>>>>>>> child, we have ways of doing that.  ItemRenderers specify the inner
>>>>>>>> children of a list.  A Panel's TitleBar can be swapped for a
>>> different
>>>>>>>> titlebar.  If you want a component that can switch between laying out
>>>>>>>> horizontally and vertically, you could use states or other techniques
>>>>> to
>>>>>>>> swap between a child with HorizonalLayout and a child with
>>>>> VerticalLayout,
>>>>>>>> but changing a single child's beads at runtime is not a best
>>>>> practice.  You
>>>>>>>> could also create a VerticalOrHorizontalLayout bead.  All of these
>>>>>>>> techniques make it easier to see at author-time what the pieces are.
>>>>> That
>>>>>>>> way, when debugging into the child where the MXML/CSS said
>>>>> HorizontalLayout
>>>>>>>> and  you see a VerticalLayout, you are less likely to be surprised
>>> and
>>>>>>>> think there is a bug in the layout assignment when there isn't.
>>>>>>>> 
>>>>>>>> And thus, because of PAYG, none of our existing beads carry code
>>>>> around to
>>>>>>>> cleanup if removed from the strand, and I've mentioned recently that
>>> I
>>>>>>>> seriously considering we should take removeBead out of IStrand and
>>>>> UIBase.
>>>>>>>> However, I agree with whoever responded that we shouldn't block bead
>>>>>>>> removal.  We should just make it a truly rare occurrence.  Somebody,
>>>>> some
>>>>>>>> day, will come up with a rare reason to need it.  But they will need
>>>>> to use
>>>>>>>> beads that carry extra code that does the clean up and call some
>>>>> utility
>>>>>>>> function that removes the bead from the strand.
>>>>>>>> 
>>>>>>>> So, I don't fully understand this scenario and am too backlogged to
>>>>> really
>>>>>>>> dig through it, but please first attempt to find patterns that allow
>>>>>>>> specification of the children and their layout at author-time.  Think
>>>>> of
>>>>>>>> beads as an instantiation-time composition of a class instance.  Then
>>>>>>>> consider beads that can go "both ways".  Then consider beads that can
>>>>> be
>>>>>>>> removed.  But for PAYG reasons, we don't want to have all beads know
>>>>> how to
>>>>>>>> be removed.
>>>>>>>> 
>>>>>>>> My 2 cents,
>>>>>>>> -Alex
>>>>>>>> 
>>>>>>>> On 1/27/19, 12:26 AM, "Carlos Rovira" <carlosrov...@apache.org 
>>>>>>>> <mailto:carlosrov...@apache.org>>
>>>>> wrote:
>>>>>>>> 
>>>>>>>> Hi,
>>>>>>>> 
>>>>>>>> Piotr and I found a situation where we don't know how to solve with
>>>>>>>> some
>>>>>>>> generalist solution. Hope others here could give some ideas.
>>>>>>>> 
>>>>>>>> The setup: We have a layout bead that decorates the strand with a
>>> css
>>>>>>>> class
>>>>>>>> selector. The bead is configured in CSS as a default bead
>>>>>>>> 
>>>>>>>> The problem: We found that adding another layout bead at runtime
>>> that
>>>>>>>> "substitute" the default bead and adds other CSS class selector,
>>> left
>>>>>>>> the
>>>>>>>> selector(s) from the old layout bead untouched.
>>>>>>>> 
>>>>>>>> Notice that adding the new layout bead in MXML through beads array
>>> is
>>>>>>>> ok,
>>>>>>>> since (I think) default bead is never instantiated and the second
>>> one
>>>>>>>> is
>>>>>>>> the only one running its code. The problem happens if we try to do
>>>>> the
>>>>>>>> change at runtime at a later time.
>>>>>>>> 
>>>>>>>> So, our question is: How to deal with beads that are already
>>>>>>>> instantiated
>>>>>>>> and needs to be removed. How we should operate with it? Should be
>>>>> have
>>>>>>>> some
>>>>>>>> removal mechanism in Royale to do this?
>>>>>>>> 
>>>>>>>> For more info and code about this issue, Piotr shared some source
>>>>> code
>>>>>>>> in
>>>>>>>> other recent thread about Jewel Group.
>>>>>>>> 
>>>>>>>> Thanks
>>>>>>>> 
>>>>>>>> --
>>>>>>>> Carlos Rovira
>>>>>>>> 
>>>>>>>> 
>>>>> 
>>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C06444dc5a01f481720c508d6850f575b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636842698295215163&amp;sdata=lpaCipQPwqEiVaAD7CaKYY8qp5GKHog4nS7dIsoLmyM%3D&amp;reserved=0
>>>  
>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C06444dc5a01f481720c508d6850f575b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636842698295215163&amp;sdata=lpaCipQPwqEiVaAD7CaKYY8qp5GKHog4nS7dIsoLmyM%3D&amp;reserved=0>
>>> <
>>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C06444dc5a01f481720c508d6850f575b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636842698295215163&amp;sdata=lpaCipQPwqEiVaAD7CaKYY8qp5GKHog4nS7dIsoLmyM%3D&amp;reserved=0
>>>  
>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C06444dc5a01f481720c508d6850f575b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636842698295215163&amp;sdata=lpaCipQPwqEiVaAD7CaKYY8qp5GKHog4nS7dIsoLmyM%3D&amp;reserved=0>
>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>>> --
>>>>>>> Carlos Rovira
>>>>>>> 
>>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C06444dc5a01f481720c508d6850f575b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636842698295215163&amp;sdata=lpaCipQPwqEiVaAD7CaKYY8qp5GKHog4nS7dIsoLmyM%3D&amp;reserved=0
>>>  
>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C06444dc5a01f481720c508d6850f575b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636842698295215163&amp;sdata=lpaCipQPwqEiVaAD7CaKYY8qp5GKHog4nS7dIsoLmyM%3D&amp;reserved=0>
>>> <
>>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C06444dc5a01f481720c508d6850f575b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636842698295215163&amp;sdata=lpaCipQPwqEiVaAD7CaKYY8qp5GKHog4nS7dIsoLmyM%3D&amp;reserved=0
>>>  
>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C06444dc5a01f481720c508d6850f575b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636842698295215163&amp;sdata=lpaCipQPwqEiVaAD7CaKYY8qp5GKHog4nS7dIsoLmyM%3D&amp;reserved=0>
>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>>   --
>>>>   Carlos Rovira
>>>> 
>>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C06444dc5a01f481720c508d6850f575b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636842698295215163&amp;sdata=lpaCipQPwqEiVaAD7CaKYY8qp5GKHog4nS7dIsoLmyM%3D&amp;reserved=0
>>>  
>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C06444dc5a01f481720c508d6850f575b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636842698295215163&amp;sdata=lpaCipQPwqEiVaAD7CaKYY8qp5GKHog4nS7dIsoLmyM%3D&amp;reserved=0>
>>> <
>>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C06444dc5a01f481720c508d6850f575b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636842698295215163&amp;sdata=lpaCipQPwqEiVaAD7CaKYY8qp5GKHog4nS7dIsoLmyM%3D&amp;reserved=0
>>>  
>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C06444dc5a01f481720c508d6850f575b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636842698295215163&amp;sdata=lpaCipQPwqEiVaAD7CaKYY8qp5GKHog4nS7dIsoLmyM%3D&amp;reserved=0>
>>>> 
>>> 
>> 
>> 
>> -- 
>> Carlos Rovira
>> http://about.me/carlosrovira <http://about.me/carlosrovira>

Reply via email to