Hi Harbs, 2018-05-14 14:23 GMT+02:00 Harbs <harbs.li...@gmail.com>:
> I think I still did not make myself clear. > > I’m not talking about someone only using Jewel. I am talking about an > application which uses BOTH a Jewel Panel *AND* a Basic Panel (or Button, > TextInput, etc.). The problem I’m discussing has nothing to do with whether > Jewel extends Basic or not. I’m trying to come to an understanding whether > we can agree that the potential of conflicts when a component of the same > name from two different component sets in the same app is a problem. > > I’m working under the assumption that component sets are not necessarily > mutually exclusive and users might use components of the same name in their > apps from two different component sets. I’m assuming that conflicts when > two component sets are used is a concern. > > Do we agree that this is a problem? > > I assume you do agree with this problem considering you gave Jewel Button > a typename of “jewel button” instead of “Button”. It’s possible that the > correct solution is that any component set which does not want to inherit > from Basic must specify a different typename. (Like what you did.) Again: > I’m not trying to pin down solutions yet. I’m first trying to pin down the > problems. > ok, is very difficult to separate things in this case, but I try to follow you and see what we reach. Let's continue to analyze. Thanks Carlos > > Thanks, > Harbs > > > On May 14, 2018, at 1:47 PM, Carlos Rovira <carlosrov...@apache.org> > wrote: > > > > Hi Harbs, > > > > 2018-05-14 10:14 GMT+02:00 Harbs <harbs.li...@gmail.com <mailto: > harbs.li...@gmail.com>>: > > > >> Hi Carlos, > >> > >> I’d like to work on getting this discussion as focused as possible. Once > >> we’re clear on the problems, it’s much easier to find a solution which > is > >> acceptable to everyone. I think part of the miscommunication until now > was > >> that the discussion focused on solutions rather than problems. I’m > going to > >> try and nail down what we agree on and what we disagree on (I think we > >> agree more than we disagree) and then take it from there. > >> > >> Sounds like a plan? > >> > >> I’d also like to avoid lengthy emails as much as possible to make > >> everything easier to digest. I’m going to leave out anything I don’t > think > >> is core to the discussion. > >> > >> First of all, I think we can take 1b and 1c out of the discussion. If I > >> understand correctly, we both agree that these are bugs which should be > >> fixed. If the bugs are fixed, those two issues are taken care of. > >> > >> That leaves us with 1a, 2a and 2b to discuss. I also need to clarify my > >> points better. Agreed? > >> > >> Long emails with lots of points make for difficult discussion. I plan on > >> discussing all the points, but I think it would be easiest to resolve > >> issues one at a time. I’ll start with what I believe to be the one we’re > >> closest to agreeing on. > >> > > > > I think is ok, we'll go with 1a in this email: > > > > > >> > >> Re. 1a: > >>> Namespaces already solve this so a js|Button is separated from j|Button > >> and > >>> from mdl|Button, if no namespace was declared last wins > >> > >> I obviously was not clear. I was discussing compiled html CSS and not > >> Royale CSS. > > > > > > ok we can go just with html, but left in mind that both problems are > > equally important, since both makes the concept of extend a final ui set > > not the best way to go. > > Let's go: > > > > > >> Let me use a concrete example: > >> > >> Imagine a user uses the following css: > >> j|Panel{ > >> border: none; > >> } > >> js|Panel{ > >> border : 1px solid #333333; > >> } > >> > >> This will produce the following css: > >> .Panel{ > >> border: none; > >> } > >> .Panel{ > >> border : 1px solid #333333; > >> } > >> > >> Both a basic Panel and a Jewel Panel (assuming one exists) will both > have > >> the typename of “Panel”, and there’s no way to differentiate between > them > >> so `j|Panel` css has no effect. I believe this is a problem which needs > a > >> solution. > >> > >> One solution might be to produce css which looks like this: > >> .jewelPanel{ > >> border: none; > >> } > >> .basicPanel{ > >> border : 1px solid #333333; > >> } > >> > > > > I have to deal with this all the time in MDL and Jewel and was really > > cumbersome, what indicates that's not the best way to go at early time, > > but I prefer to follow and continue trying until I reach that the best > way > > was separation since there was no need of one final ui set depends on > other > > fine ui set. > > And the same you find with html css can be applied to the assignation of > > beads troth css. If you don't want a current one you need to splicitly > code > > an override. > > Extending a final component brings all that is defined with him, so if > you > > are creating a different set (and you'll do that regarding some major > > motivation and difference with the other set) you find trying to make new > > one work as expected is difficult and can introduce problems if we at > > royale don't invest many time looking to side cases like this and fixing > > them. So this left things overrided in your browser in "latency" since if > > you remove the current you'll get what is below. My opinion is that we > > should have nothing below. > > > > One latest important things to consider: If we have a j|Panel and you > > should want to use only that why we should have two styles I our css one > > unused? > > > > .jewelPanel{ > > border: none; > > } > > .basicPanel{ > > border : 1px solid #333333; > > } > > > > you're in jewel you have your css bloated with extra size and unused > > things. Hope you can see now the big problem this means > > > > > >> > >> That would require Basic typenames to have a “basic" prefix and Jewel > >> typenames to have a “jewel" prefix. If that solution is used, then > problem > >> 1a goes away. There might be other solutions which don’t solve 1a. I > don’t > >> know. I do think that this problem needs to be discussed. Depending on > the > >> outcome of that discussion, there might or might not be an argument to > >> separate Jewel because of problem 1a. I have more to say on this topic, > but > >> I don’t want to interject my thoughts before discussion is started on > it. > >> > >> > > I must say that Jewel already have different classes. While Basic is > > "Button" in jewel we're using a namespace inspired in both MDL and > Semantic > > and is "jewel button". > > But if you still extend Basic Button then you are getting things work by > > wasting lines of code overriding here and there both in code and looking > > for tricks like this to diverge from the parent component. > > > > Harbs, you can make the things you proposed. MDL is like that, Jewel was > > until the refactor. We would not be more natural and optimal that instead > > have to deal with overrides or how to separate things we just make both > not > > depend on it? I was getting to that conclusion after some months to deal > > with this kind of things. And I must say I was in the same way of > thinking > > that you. But after lot of experience in that field that makes me try the > > current one, and wow! that finaly engaged me. > > > > Try to think in controls and components like "final" and how you can > change > > something that with that character, you see that is not the same that a > > core class, and until now we want Basic to be "framework" as well as > final > > controls. > > > > > > > >> Can we agree on this problem and try to find the right solution to it? > >> > > > > I think that's the problem. But for this current one I doubt you find a > > better solution. Think that both are solutions already (like I exposed > just > > before), we have many ways to reach the same. But IMHO, I'm mostly like > > more the separation. > > > > Sorry if I finaly write more that you expect, I'll try to reduce, but is > > difficult when I have so many points to expose. > > > > thanks! > > > > > >> > >> Thanks, > >> Harbs > >> > >>> On May 13, 2018, at 10:02 PM, Carlos Rovira <carlosrov...@apache.org> > >> wrote: > >>> > >>> Hi Harbs, > >>> > >>> 2018-05-13 10:40 GMT+02:00 Harbs <harbs.li...@gmail.com>: > >>> > >>>> I specifically waited to respond to this until some of the heat cooled > >>>> off. I have no question that there is a bit of a language barrier here > >> and > >>>> both sides are not making themselves completely understood. > >>>> > >>> > >>> I could in the previous hours get some information that's important, > but > >> I > >>> prefer to not mix things here, so hope to share as I can, so avoiding > to > >>> introduce more noise. > >>> > >>> > >>>> > >>>> I’m a bit disappointed that we’re moving towards a vote before I > believe > >>>> we’ve gotten to the bottom of the technical motivations. I was hoping > we > >>>> could get to the point where we understand each other and make a vote > >>>> unnecessary. > >>>> > >>>> > >>> I said about to make a vote thread, since I was not hearing many things > >> in > >>> favor of my work, but reading your email, Om, and other feedback, I > think > >>> we are moving to a really different scenario. This is more a community > >>> discussion, with a really different tone, so if you (and others) > finally > >>> doesn't want to vote, for me will be ok. I was only doing since seems > >> what > >>> all of you demand at that point. > >>> > >>> > >>>> Let me try and summarize the technical reasons as I see them for and > >>>> against a refactor: > >>>> > >>>> Reasons for the refactor: > >>>> 1. As it stands, referencing Basic brings in all of the Basic CSS. > This > >>>> causes a number of issues: > >>>> a. Another component set (i.e. Jewel) needs to override any CSS > >>>> specified in the Basic CSS. > >>>> b. The CSS which is compiled from the Basic CSS adds unnecessary bulk > >>>> to the final application if Basic components are not being used. > >>>> c. Although this point was not clear (to me) from the previous > >>>> discussion, all classes referenced in Basic CSS are actually imported > >> into > >>>> the final application. For example: DateControlsExample does not use > >>>> ButtonBar, but ButtonBar and all related classes are included in the > >> final > >>>> application. By not relying on Basic, these classes are not imported. > >>>> > >>>> 2. Basic and Jewel are separate component sets, and as such should not > >>>> rely on each other. Any part of Basic which Jewel needs is not > “basic”, > >> but > >>>> “core” and should be moved to the Core project. Doing so has the > >> following > >>>> benefits: > >>>> a. There’s a clear separation of dependencies. > >>>> b. Someone working on Jewel does not need to be concerned with the > >>>> architecture of Basic. > >>>> > >>>> I’m not aware of any other arguments which are not variations on the > >>>> above. Please correct me if there are more reasons. > >>>> > >>> > >>> I think is mostly the technical reasons. I exposed many of the > collateral > >>> damages of all of this, but I think is basically the problem. Great to > >> see > >>> finaly I could make it understand :) > >>> > >>> > >>>> > >>>> Reasons against the refactor: > >>>> 1. Royale favors composition. As such, it was designed so > functionality > >>>> can be pieced together. Much of this functionality was created in the > >> Basic > >>>> project and as such, it’s natural for component sets to borrow pieces > >> from > >>>> each other. This reduces code duplication. > >>>> > >>> > >>> Right. But IMHO, this should be chosen for user users. If he wants > >>> functionality, he can "optionally" take it, and not "obligated" to. > >>> In the other hand think about functionality that is not exactly the > same. > >>> If I have a bead that in Jewel put a className and in Basic the > >>> implementation puts an attribute on the tag. The user will find both > with > >>> CTRL+SPACE (code hintting feature), or using a Button will find > >> obligatory > >>> more than a Button, that will comes to confussion. What is the right > >> Bead? > >>> the right control?...If he optionally wants to add functionality, is up > >> to > >>> him to use one or another. > >>> > >>> > >>>> 2. Moving pieces of Basic to Core does not scale. We need to define > what > >>>> Core is, and claiming that something is required by a component set > >> makes > >>>> it Core is not a good definition. For example, Collections is not > Core, > >> but > >>>> it is required by component sets. As it stands, Core defines the core > >>>> architecture of a Royale application, but says very little about > >>>> implementation details. That’s why there are lots of interfaces, but > >> not so > >>>> many implementation classes. It’s possible that little bits of Basic > >> might > >>>> make sense to be in Core instead (and vice versa), but I think the > >> general > >>>> difference between Core and Basic is well defined (although possibly > not > >>>> well understood). > >>>> > >>> > >>> I must say that don't see why moving pieces to Core will not scale. The > >>> pieces are the same, the extensions are the same. There's a change of > >>> location for some classes to get a better decoupling. One thing to > notice > >>> is that we are dealing with *final implementations* or *leaf > >>> implementations*: this means the same like when we mark a method in > java > >>> like final...this seems we expect a final use. A button, for example, > can > >>> be aggregate in a "ButtonWithDisableBead", but this works more like a > >>> "macro" than an extension. So AFAICT, subclass other's UI Set controls > or > >>> beads, seems to be not desirable in a huge percentage of cases, at > least > >> in > >>> my experience with MDL and Jewel (and I think that's a huge > experience). > >>> MDL was done subclassing, but I found many problems going in that path. > >>> Jewel started equally but I then did this refactor and now I'm very > happy > >>> since I see all more well crafted. I'd like that the theory you expose > >> will > >>> be real, but the practice tell me the opposite. Or said in another > way, I > >>> was aligned with you but as I followed the path, I end embracing this > >> other > >>> path as to be better, more flexible, with less errors, and problems... > >> and > >>> the price is really no one, since all things we want in a Royale > >> Appication > >>> are still there. > >>> > >>> > >>> > >>>> 3. Not every class in Basic *can* be moved to Core. For example, > >>>> DataItemRendererFactoryForArrayList has a dependency on Collections. > >> Core > >>>> was designed to have no dependencies on any other projects other than > >>>> Language, so that class cannot belong to Core. I would imagine that > >> other > >>>> component sets other than Basic might need ItemRendererFactories. > >>>> > >>>> > >>> This is where from the beginning I ask for help. I did one way. Is > like a > >>> Zero day. We can get it much better moving other things and I think > you, > >>> Alex, Peter, knows perfectly and maybe better than me how to reorganize > >>> things you think. For example instead to move a class to Core extract > >> code > >>> to be implemented in Basic and Jewel. Or like the example I already > >> exposed > >>> that was problematic, extract Group states and mxml nesting and add it > to > >>> Group and HTML's NodeElementBase... I think there's lots of things to > do > >>> here. We only must to take into account to left Basic - Jewel > separated, > >>> but options are lots. > >>> > >>> > >>>> > >>>> Possibly the strongest argument against the refactor is that I believe > >> the > >>>> refactor doesn’t actually solve the problems it’s meant to solve. > Please > >>>> allow me to explain: > >>>> > >>>> 1b and 1c are actually bugs. I’m glad Carlos brought them to light, > >>>> because they need to be fixed. These problems have nothing to do with > >> the > >>>> fact that one component set relies on another. Even if a single > >> component > >>>> set is used, all the css and classes mentioned in the css file are > >>>> imported. That should not happen. If the compiler does a better job of > >> only > >>>> using the css and classes where are *actually* used, these two issue > go > >>>> away. > >>>> > >>> > >>> I think there's a problem, that's right, but the problem should not > mask > >>> the flexibility that we now with the current separation. Remember, > what's > >>> the point if we have the problem fixed and we link again Basic to > Jewel, > >> if > >>> Jewel will never use Basic? > >>> > >>> > >>>> > >>>> I think the refactor really masks 1a and does not solve that one > either. > >>>> There’s actually a fourth problem related to CSS. What happens if a > >> single > >>>> app uses a Basic Button, an MDL Button and a Jewel Button? (As to why > >> that > >>>> might happen — components can be used within other components and not > >> all > >>>> component sets might be as complete as others.) What will each of the > >>>> buttons look like? As it stands the typenames will conflict with each > >> other > >>>> and the CSS will step on each other. I’m not even sure which CSS will > >> win. > >>>> It seems to me that typenames really should be qualified to prevent > >>>> namespace conflicts. I’m not sure how to best solve this, but I think > it > >>>> deserves discussion. > >>>> > >>> > >>> Namespaces already solve this so a js|Button is separated from j|Button > >> and > >>> from mdl|Button, if no namespace was declared last wins, so at that > >> level I > >>> think things are ok, but what is happening is since an mdl|Button is > >>> extending a js|Button, then you get all CSS from both of them, mdl wins > >> and > >>> must override things in Basic. IMHO, that's not good from an > architecture > >>> design point of view and more... for an override, since those are > *final* > >>> or *leaf* controls, and more...we can get other classes in the > >> inheritance > >>> chain that we never want to use, so extra space is added. Then there's > >> the > >>> pure CSS styles, but that's the nightmare I (as the UI set developer) > use > >>> to fight each day when design a new control for MDL or Jewel, and If I > do > >>> my work ok, you should not see any conflicts, but at the cost of > override > >>> *all* predefined styles (extra space again in place). > >>> > >>> I think that the need to override styles before the refactor in Jewel > is > >>> not PAYG nor DRY. Or said in another way: If Jewel doesn't use a > control > >> or > >>> component in some part of the defined style, and maybe doesn't need to > >> use > >>> a Bead, but it still needs to override it?. I think that's not > scalable. > >>> And the best solution I can propose is to disconnect final/leaf > >>> implementations one from another. > >>> > >>> > >>>> > >>>> As far as 2a and 2b go: Here’s my thoughts: I don’t see 2a as a goal > for > >>>> Royale. I think functionality sharing across component sets is an > >> advantage > >>>> to Royale and not an architectural problem. > >>> > >>> > >>> I think so, but always for not final/leaf implementations, and the key > >>> always, optionally and not obligation imposed by the framework that > makes > >>> it more powerful and flexible. That's great for some functionality that > >> you > >>> need to implement in various UI sets, beads that are very/really > >>> generalist. Not at all for beads that are very near on concrete needs > in > >>> implementation UI Set, since you'll never be able to use it. > >>> > >>> > >>>> Regarding 2b: complete separation from Basic seems to me like it only > >>>> helps splinter the community and puts everyone into their own little > >>>> isolated corner. As difficult as it might be to deal with others’ > >> opinions > >>>> and it causes things to drag on longer than it otherwise might, I > think > >>>> it’s ultimately the better path. I really do recognize the frustration > >> of > >>>> trying to do something and have the brakes put on you by others. I > don’t > >>>> know how to put that empathy into an email. It’s a poor medium for > that. > >>>> Ultimately, the more we rely on each other, the better the quality of > >> the > >>>> end product will be — even if it takes us longer to get there… ;-) > >>>> > >>> > >>> Well, as I said to Yishay, I think separation brings flexibility and > >> makes > >>> the whole framework even more prepared to future aggressive changes (a > >> v2.0 > >>> and next versions) since from the beginning you didn't make it depend > on > >>> Basic, so you can start another effort in parallel as a sibling. I > think > >>> that concept is very powerful don't you think? > >>> > >>> Jewel borns from the work in Basic, it could not be at all without > Basic. > >>> But Basic has a purpose to be very well decided, so it will always > >> collide > >>> with Jewel that has very difference purpose. And I think we always > talked > >>> about people coming and creating new UI sets as needed, but those > coming > >>> will find the same problems that I found if they are obligated to deal > >> with > >>> other final UI set like Basic. > >>> > >>> In the other hand, we need to grow to have more people interested in > >>> different parts, and wanting to get involved in those parts, so we can > >> act > >>> more as a community. I must to say that I don't mind to discuss more, > >> but I > >>> think I always think in the value of what others have to say. When > Alex, > >>> Peter, you and other use to expose things I use to engage with the > >>> solutions and if I have something to say use to be to propose ways to > >>> improve an already good solution by default. When I expose changes, I > use > >>> to want people that comes to improve it, making it better than only > with > >> my > >>> solely participation. I think that's what we need to get here. Since > >> people > >>> here are very good by default, I suppose nearly 100% of proposals > should > >> be > >>> good, and debate/discussion should go in tone of "And what if you > >> incorpore > >>> this?", "I think doing this could be event better", and so... that > would > >>> make a good difference. And I think is something to comment a part > since > >>> this community deserver this kind of good health. > >>> > >>> > >>>> > >>>> I hope this makes my position clearer and I look forward to other > >> thoughts. > >>>> > >>> > >>> Really, I think this is completely different way of managing things > and I > >>> appreciate really. It's more constructive, friendly and at last we are > >>> talking about real things than asking us things lots of times in an > >>> infinite loop. I think is a real community discussion. > >>> > >>> Thanks for take the time and your efforts reviewing this :) > >>> > >>> Carlos > >>> > >>> > >>>> > >>>> Thanks, > >>>> Harbs > >>>> > >>>>> On May 12, 2018, at 11:09 AM, Carlos Rovira <carlosrov...@apache.org > > > >>>> wrote: > >>>>> > >>>>> Hi, > >>>>> > >>>>> I'm trying here to explain with more tools the problems we had until > >> now > >>>>> and the solution I did he past Friday. > >>>>> > >>>>> Disclaimer: This solution doesn't intend to end in the current state, > >> and > >>>>> we can evolve to get other shape more convenient for others in this > >>>>> project. I'm sure Alex or Harbs can add up to enhance what I did > >> greatly > >>>> as > >>>>> always do. > >>>>> > >>>>> So let's go: > >>>>> > >>>>> Until now we had this kind of relation between libraries : > >>>>> > >>>>> https://snag.gy/JqO2ZI.jpg > >>>>> > >>>>> In this schema. Basic is needed always to construct an Application. > >> That > >>>>> causes that all applications will end aggregating the used styles of > >> the > >>>>> CSS in basic and all the classes that are linked in that way plus the > >>>> tree > >>>>> of dependent classes. > >>>>> > >>>>> Until now that wasn't a problem, since we didn't care of it. That > extra > >>>>> size all applications incorporated was not in out target since we > only > >>>> had > >>>>> Basic to construct applications. A side case was MDL but as is a > >>>> "wrapper" > >>>>> around an external library, again we didn't care too much about this. > >>>>> > >>>>> Now with the new Jewel UI set, we have another UI set that although > is > >>>>> based in the work in Basic is a first citizen, so for example, a > Button > >>>> in > >>>>> Jewel extends UIBase and not basic Button like before. So changes in > >>>> Button > >>>>> or in other Basic infrastructure classes not affect Jewel at all. So > >>>>> final/leaf components are dependent of UIBase (in Core) and not > >> anything > >>>> we > >>>>> have in Basic. The same happens with Jewel TextInput, Jewel Slider, > and > >>>>> more. > >>>>> For example Jewel Slider is based on input range, while Basic Slider > is > >>>>> build with two buttons. So even ISlider interfaces are different in > >> Basic > >>>>> than in Jewel. > >>>>> So key point here: final implementations should not depend one from > >>>> another > >>>>> since any changes in the code of the parent will affect the children. > >>>>> > >>>>> As you can see in the schema, we have various libraries that are top > >>>> level, > >>>>> some of them are optional, and for this reason are separated in > library > >>>>> units (Network, Binding, Collections, and more), but Core is not > >>>> optional, > >>>>> must be in all Royale Applications. > >>>>> > >>>>> Basic until now although it was a concrete final implementation of an > >> UI > >>>>> set, was in fact needed in all Royale Applications, and that cause > that > >>>>> always its CSS and its classes was baked into the final App. Only if > >> you > >>>>> don't use visual elements you'll get rid of basic need, but that in a > >>>> front > >>>>> end app is very strange right? > >>>>> > >>>>> This design caused from the begging lots of problems that started to > >> rise > >>>>> when I first started MDL library. We have styles and behaviours that > >> was > >>>>> not required due to the presence of unwanted CSS and classes from > >> Basic. > >>>>> > >>>>> So for this reason a key point is that we need to bake into final app > >> the > >>>>> resources we really need to avoid unwanted content that is not > required > >>>> and > >>>>> only increases size and the presence of potential bugs and not wanted > >>>>> behaviors. > >>>>> > >>>>> With the refactor we get to the following graph > >>>>> > >>>>> <https://snag.gy/JqO2ZI.jpg>https://snag.gy/KW36yn.jpg > >>>>> > >>>>> Now in the final picture, we don't have the presence of all the > things > >>>> that > >>>>> comes with Basic when we create a Jewel application, the final > >> developer > >>>>> don't need to be worried of any unwanted behavior that comes from > Basic > >>>>> since Jewel no more requies it. > >>>>> > >>>>> But this is completely compatible with the older scenarios. People > >> using > >>>>> Basic, will use it I the same way and get exactly the same. So this > >>>>> refactor doesn't break existing applications. > >>>>> > >>>>> Since I moved classes from Basic to Core to be as DRY as possible, > but > >> I > >>>>> changed from package (from "html" to "core") to improve organization, > >>>> that > >>>>> change can make final applications need to update those namespace, > >> like I > >>>>> had to do in all the examples we have. This is something that should > >> not > >>>>> make a huge task more than a few minutes, but something normal when a > >>>>> refactor is done. There's few refactors that does not implies changes > >> in > >>>>> final applications. This change of packages really is not needed, > but I > >>>>> think is convenient to get a better organization. Now we have still > >> core > >>>>> packages in Basic and html packages in Core, what makes things a bit > >>>> messy > >>>>> and shows that still we need some API changes and cleaning. Normal > >> since > >>>> we > >>>>> are on 0.9.3 version. > >>>>> > >>>>> A special case is HTML, where is the only real code change I > introduced > >>>>> (99% was only move code from Basic to Core to allow get rid of > Basic). > >>>>> I changed NodeElementBase to extend UIBase, due to Harbs proposal. > Then > >>>>> Yishay saw that it wasn't allowing nesting, so I changed again to > >> extend > >>>>> Group. And to get this Group needs to be in Core. In other way HTML > >> will > >>>>> depend on Basic and anytime we'll create a Jewel application that > uses > >>>>> HTML, this library will bring Basic with all known problems (CSS and > >>>>> Classes not wanted). > >>>>> > >>>>> All this changes, make the build broke and show some deficiencies . > >> Some > >>>>> HTML was linking Basic, Basic was a inherited dependency that was not > >>>>> declared in many examples pom. So now we have all poms fixed with the > >>>> real > >>>>> dependencies, if the example uses Basic, it will have Basic, if not, > it > >>>>> will be not present at all. > >>>>> > >>>>> Some others classes were copied "temporaly" to Jewel. For example > >>>>> MultilineLabel, was copied from Basic to Jewel. The final step is to > >>>> remove > >>>>> that component since in Jewel I don't want a MultilineLabel, but a > bead > >>>>> that makes Jewel Label to be multiline. So this that is not DRY in > some > >>>>> days it will be since I'll be removing that temporal control. I only > >>>> copied > >>>>> there to allow all examples build right. As many refactors things > >> doesn't > >>>>> end at the beginning it then requires more steps to be done. The > >>>> important > >>>>> thing was to left all the code building ok at that time, then start > to > >>>> use > >>>>> things in this new way for Jewel, since Basic is all the same > >>>>> > >>>>> Finaly all this changes, not only make the app developer not worried > >>>> about > >>>>> how to not collide with Basic styles and functions, but makes Jewel > >>>> Royale > >>>>> Applications 40% less sized than before. > >>>>> > >>>>> I think I cover all points, If I remember something I didn't tell you > >>>> here, > >>>>> I'll be adding more email. > >>>>> > >>>>> At this point, you can see that technically is very important due to > >>>> avoid > >>>>> unwanted code in final apps, unwanted behavior, reduce size, and > avoid > >>>>> final developers to be confused by other similar structures present > >> that > >>>>> they don't need (CTRL+SPACE will only throw one kind of Button now > >>>> instead > >>>>> different implementations). > >>>>> > >>>>> As well the current refactor still makes posible to mix libraries if > >> the > >>>>> developer wants to do it. He can add Basic dependency to a Jewel > >>>>> Application if the still needs something and want to pay all the > extra > >>>> size > >>>>> and behaviors of the basic linked code. > >>>>> > >>>>> Things that we can do to improve more this scenario: > >>>>> > >>>>> 1.- extract GroupBase functionality to Core so Group (in Basic) and > >>>>> NodeElementBase (in HTML) can compose t > >>>>> (this will improve DRY) > >>>>> > >>>>> 2.- I think we have a good organization regarding libraries now > (Core - > >>>>> Network - Binding, and then UI Sets, Basic, MDL, Jewel,...) > >>>>> But maybe folks would be feel better with other organization. > >>>>> For me the only thing I need is that whatever solution we want > doesn't > >>>>> force people to link Basic as if it was a Core library since it's > not, > >> is > >>>>> only a final implementation of controls and components) > >>>>> > >>>>> 3.- I think if we find more Core functionality in Basic we could pass > >> it > >>>> to > >>>>> Core, I think we still have Core things in Basic. As is normal since > I > >>>>> suppose people made things to make it work, but maybe is time now to > >>>> "clean > >>>>> the house" a bit after all this time and see where things should go. > >> The > >>>>> fact that we have core package in Basic and html package in Core is a > >>>> clue > >>>>> that things are not still in right positions. > >>>>> > >>>>> > >>>>> We must separate *needed* things from *architectural* things. For me > >>>>> *needed* is : > >>>>> > >>>>> 1) not need Basic dependency since Jewel really doesn't need it!, and > >>>> don't > >>>>> want users to link things that only generate problems linking styles > >> and > >>>>> classes that make final developers to fight with fonts, or colors, > that > >>>>> they don't know how are appearing and why. And don't want extra > classes > >>>>> linked that could bring errors very difficult to find and solve. And > >>>>> finaly, don't want extra size in apps since that extra size comes > with > >>>> only > >>>>> undesirable effects in the final application. > >>>>> > >>>>> just that > >>>>> > >>>>> Some of the points I expose are not needed, but would enhance the > >> quality > >>>>> of the code and people trying to use it. Now we have still a bit > messy > >>>> set > >>>>> of packages. We can move things so all people here would have things > >> set > >>>> up > >>>>> as they want. > >>>>> > >>>>> Some of you can propose other ways to get to the same, but I'm afraid > >>>> that > >>>>> in essence it will be mostly the same. But I'm totally open to bring > >> more > >>>>> ideas and to change things, since I'm sure my solution is not 100% > >>>>> infallible, and there's many ways to do things. > >>>>> > >>>>> My proposal is that since I solved many structural things in how > >> projects > >>>>> and examples build, fixing poms that where not having Basic declared > >> and > >>>>> more things that were arising during the refactor, I think is better > to > >>>>> make the refactors other will propose from the actual point. And that > >>>> would > >>>>> be more easy to follow. > >>>>> > >>>>> Hope that now all is more clear thanks to new explanation and graphs > >> and > >>>>> that you consider that we really have real problems to solve and that > >> now > >>>>> are solved, although maybe not in the best way but in a valid way and > >>>> that > >>>>> I'm open to change things while taking into account that we at least > >>>>> maintain the same improvements I get with this changes. > >>>>> > >>>>> Thanks in advance. > >>>>> > >>>>> > >>>>> -- > >>>>> Carlos Rovira > >>>>> http://about.me/carlosrovira > >>>> > >>>> > >>> > >>> > >>> -- > >>> Carlos Rovira > >>> http://about.me/carlosrovira > >> > >> > > > > > > -- > > Carlos Rovira > > http://about.me/carlosrovira <http://about.me/carlosrovira> > -- Carlos Rovira http://about.me/carlosrovira