Hi,
I created a job to automatically generate a report of the Pharo image dependencies as well as current bootstrap dependencies. You can find them here:
There are a lot (too many) dependencies but you can focus on some of them with the search field. Dependencies inside orange boxes are dependencies that are there but that we ignore (for example, an example method adds an extra-dependency). It should be fixed later but is not a problem for now. Ignored dependencies are declared in the package manifest in #ignoredDependencies. Dependencies inside red boxes are dependencies we want to remove for the bootstrap. For now, they are listed in the bootstrap dependency report. People that are willing to help to have a more modular Pharo could first take a look at the bootstrap dependency report and check dependencies that we should cut. Once we know, we can open issues on fogbugz in the 'bootstrap category' and update manifests accordingly. To investigate more deeply dependencies, you can use the DependencyAnalyzer (in the Pharo Catalog) to actually check dependencies (inheritance, reference, extension, traits, message send). Regards, Christophe.
|
On Fri, Sep 4, 2015 at 9:13 PM, Christophe Demarey
<[hidden email]> wrote: > Hi, > > I created a job to automatically generate a report of the Pharo image > dependencies as well as current bootstrap dependencies. > You can find them here: > > https://ci.inria.fr/pharo/job/Pharo-5.0-DependencyAnalysis/Dependencies_HTML_Report/dependency-report.html > https://ci.inria.fr/pharo/job/Pharo-5.0-DependencyAnalysis/Dependencies_HTML_Report/bootstrap-dependency-report.html > > > There are a lot (too many) dependencies but you can focus on some of them > with the search field. > Dependencies inside orange boxes are dependencies that are there but that we > ignore (for example, an example method adds an extra-dependency). It should > be fixed later but is not a problem for now. Ignored dependencies are > declared in the package manifest in #ignoredDependencies. > Dependencies inside red boxes are dependencies we want to remove for the > bootstrap. For now, they are listed in the bootstrap dependency report. > > People that are willing to help to have a more modular Pharo could first > take a look at the bootstrap dependency report and check dependencies that > we should cut. > Once we know, we can open issues on fogbugz in the 'bootstrap category' and > update manifests accordingly. > To investigate more deeply dependencies, you can use the DependencyAnalyzer > (in the Pharo Catalog) to actually check dependencies (inheritance, > reference, extension, traits, message send). I tried the Dependency Analyzer. First a minor point, it wasn't obvious how to invoke it. I expected to see "Dependency Analyzer" in the tools but its not there. I think I correctly guessed it was "Package Dependencies Browser", but it would be better to match the catalog name. The sample dependency I looked at from bootstrap-dependency-report.html was Collections-Streams --> Tool-Transcript which seems to be due to only single method "Generator class>>examplePrimes". So should this be coloured orange by marking it in #ignoredDependencies ? Also, even though Collections-Streams --> Transcript is not highlighted red nor orange, this dependency also seems due only to "Generator class>>examplePrimes" cheers -ben |
Hi Ben,
Le 4 sept. 2015 à 17:04, Ben Coman a écrit : > On Fri, Sep 4, 2015 at 9:13 PM, Christophe Demarey > <[hidden email]> wrote: >> Hi, >> >> I created a job to automatically generate a report of the Pharo image >> dependencies as well as current bootstrap dependencies. >> You can find them here: >> >> https://ci.inria.fr/pharo/job/Pharo-5.0-DependencyAnalysis/Dependencies_HTML_Report/dependency-report.html >> https://ci.inria.fr/pharo/job/Pharo-5.0-DependencyAnalysis/Dependencies_HTML_Report/bootstrap-dependency-report.html >> >> >> There are a lot (too many) dependencies but you can focus on some of them >> with the search field. >> Dependencies inside orange boxes are dependencies that are there but that we >> ignore (for example, an example method adds an extra-dependency). It should >> be fixed later but is not a problem for now. Ignored dependencies are >> declared in the package manifest in #ignoredDependencies. >> Dependencies inside red boxes are dependencies we want to remove for the >> bootstrap. For now, they are listed in the bootstrap dependency report. >> >> People that are willing to help to have a more modular Pharo could first >> take a look at the bootstrap dependency report and check dependencies that >> we should cut. >> Once we know, we can open issues on fogbugz in the 'bootstrap category' and >> update manifests accordingly. >> To investigate more deeply dependencies, you can use the DependencyAnalyzer >> (in the Pharo Catalog) to actually check dependencies (inheritance, >> reference, extension, traits, message send). > > I tried the Dependency Analyzer. First a minor point, it wasn't > obvious how to invoke it. I expected to see "Dependency Analyzer" in > the tools but its not there. I think I correctly guessed it was > "Package Dependencies Browser", but it would be better to match the > catalog name. I will also add the analyzer in the system. In a second step, I will introduce rules to check dependencies. > The sample dependency I looked at from bootstrap-dependency-report.html > was Collections-Streams --> Tool-Transcript > which seems to be due to only single method "Generator class>>examplePrimes". > So should this be coloured orange by marking it in #ignoredDependencies ? The clean solution is to have a package Collections-Streams-Example with this method. It depends how we want to be strict with that. I can live with no additional package and the dependency added in #ignoredDependencies. There are so many wrong dependencies in the system that I will prefer at a first step to put dependencies introduced by example methods or settings by example as ignored dependencies because they will not be called. We could fix that in a second step if we want and let us focus on stronger dependencies. Thanks for helping. PS: Even for people not having time to clean the system, when you contribute code to the image, pleas check that you do not introduce a dependency from a low-level package to a higher level package. It is not obvious to catch but for example, check that you do not introduce a dependency to UI packages when the package could work without UI. smime.p7s (5K) Download Attachment |
On Fri, Sep 4, 2015 at 11:18 PM, Christophe Demarey
<[hidden email]> wrote: > Hi Ben, > > Le 4 sept. 2015 à 17:04, Ben Coman a écrit : >> >> I tried the Dependency Analyzer. First a minor point, it wasn't >> obvious how to invoke it. I expected to see "Dependency Analyzer" in >> the tools but its not there. I think I correctly guessed it was >> "Package Dependencies Browser", but it would be better to match the >> catalog name. > > ok, I will fix that. > I will also add the analyzer in the system. Sorry I'm (easily) confused - when you say "also" makes me think you are referring to "Package Dependencies Analysis". I only meant that if "Package Dependencies Browser" is the entry point, it would be better named "Dependency Analyzer". I did not have an opinion on whether "Package Dependencies Analysis" should be added to the menu (but maybe thats not what you meant.) > In a second step, I will introduce rules to check dependencies. btw, I'm not sure how much gloss you'd like to put on the Package Dependencies Browser, but just some immediate thoughts: * It feels awkward having the <Add package> button at the top and the <Add all> button at the bottom. It would be nicer if the first was also at the bottom on the same line (i.e. half the width). Same with the <remove...> buttons. * The opposite of the green-plus icon would be a red-minus icon rather than the trash-can icon. In Package Dependencies Analysis, taking for example "(AST-Core --> Dependent packages : 15 | Dependencies : 134 (+ 14 extension dependencies)" I see method Traits > TBehavior >> #parseTreeFor: whose extension protocol is *ast-core. This to me doesn't seem a dependency. > >> The sample dependency I looked at from bootstrap-dependency-report.html >> was Collections-Streams --> Tool-Transcript >> which seems to be due to only single method "Generator class>>examplePrimes". >> So should this be coloured orange by marking it in #ignoredDependencies ? > > The clean solution is to have a package Collections-Streams-Example with this method. > It depends how we want to be strict with that. I can live with no additional package and the dependency added in #ignoredDependencies. > There are so many wrong dependencies in the system that I will prefer at a first step to put dependencies introduced by example methods or settings by example as ignored dependencies because they will not be called. Are examples the only (or majority) kind of ignoredDependencies ? If there is a significant number of other kinds, it might be useful to split the examples out > We could fix that in a second step if we want and let us focus on stronger dependencies. > > Thanks for helping. > > PS: Even for people not having time to clean the system, when you contribute code to the image, pleas check that you do not introduce a dependency from a low-level package to a higher level package. It is not obvious to catch but for example, check that you do not introduce a dependency to UI packages when the package could work without UI. Even with my best intentions, I think the long term reality is that the workflow delay of installing Dependency Analyzer to do this will inhibit me doing this. When working on issues I always start with a fresh/latest build. As a tool to facilitate one of Pharo's goals, perhaps it could be integrated into the Image and be prominently displayed on the top level World menu to encourage its use. Now I guess it will be hard to identify an introduced dependency just by looking at a one shot report after a modification. It would help if this could be compared to a prior snapshot stored in the image produced during the CI builds. Perhaps even it could provide live advice through integration with Quality Assistant. cheers -ben |
On Sat, Sep 5, 2015 at 12:23 AM, Ben Coman <[hidden email]> wrote:
> In Package Dependencies Analysis, taking for example "(AST-Core --> > Dependent packages : 15 | Dependencies : 134 (+ 14 extension > dependencies)" If I select Announcements-Core, then click <Show extension dependencies> to unselect it, I get "MNU DAPotentialDependenciesNode>>containsOnlyExtensionDependency" cheers -ben |
In reply to this post by Ben Coman
> btw, I'm not sure how much gloss you'd like to put on the Package > Dependencies Browser, but just some immediate thoughts: > * It feels awkward having the <Add package> button at the top and the > <Add all> button at the bottom. It would be nicer if the first was > also at the bottom on the same line (i.e. half the width). Same with > the <remove...> buttons. Yes the add button is awkwark. Christophe is often not using it via the tool menu. > * The opposite of the green-plus icon would be a red-minus icon rather > than the trash-can icon. >>> The sample dependency I looked at from bootstrap-dependency-report.html >>> was Collections-Streams --> Tool-Transcript >>> which seems to be due to only single method "Generator class>>examplePrimes". >>> So should this be coloured orange by marking it in #ignoredDependencies ? >> The clean solution is to have a package Collections-Streams-Example with this method. >> It depends how we want to be strict with that. I can live with no additional package and the dependency added in #ignoredDependencies. >> There are so many wrong dependencies in the system that I will prefer at a first step to put dependencies introduced by example methods or settings by example as ignored dependencies because they will not be called. > Are examples the only (or majority) kind of ignoredDependencies ? If > there is a significant number of other kinds, it might be useful to > split the examples out > > Even with my best intentions, I think the long term reality is that > the workflow delay of installing Dependency Analyzer to do this will > inhibit me doing this. When working on issues I always start with a > fresh/latest build. As a tool to facilitate one of Pharo's goals, > perhaps it could be integrated into the Image and be prominently > displayed on the top level World menu to encourage its use. agree we should add the tool in the system so that we can use it as fast as possible. > > Now I guess it will be hard to identify an introduced dependency just > by looking at a one shot report after a modification. It would help if > this could be compared to a prior snapshot stored in the image > produced during the CI builds. Perhaps even it could provide live > advice through integration with Quality Assistant. No you can really get a good understanding of the dependency. We should continue to address them. Often the system is not thought with layer and modularity in mind (for example all the inform: and cursorWhile: everywhere. I think that we should remove as much as possible as cursorWhile:. for example. Stef > > cheers -ben > > |
In reply to this post by demarey
Hi Christophe, the tool and this depedency report is great.2015-09-04 15:13 GMT+02:00 Christophe Demarey <[hidden email]>:
|
In reply to this post by Ben Coman
Le 4 sept. 2015 à 18:23, Ben Coman a écrit : > On Fri, Sep 4, 2015 at 11:18 PM, Christophe Demarey > <[hidden email]> wrote: >> Hi Ben, >> >> Le 4 sept. 2015 à 17:04, Ben Coman a écrit : >>> >>> I tried the Dependency Analyzer. First a minor point, it wasn't >>> obvious how to invoke it. I expected to see "Dependency Analyzer" in >>> the tools but its not there. I think I correctly guessed it was >>> "Package Dependencies Browser", but it would be better to match the >>> catalog name. >> >> ok, I will fix that. >> I will also add the analyzer in the system. > > Sorry I'm (easily) confused - when you say "also" makes me think you > are referring to "Package Dependencies Analysis". I only meant that > if "Package Dependencies Browser" is the entry point, it would be > better named "Dependency Analyzer". > I did not have an opinion on > whether "Package Dependencies Analysis" should be added to the menu > (but maybe thats not what you meant.) > >> In a second step, I will introduce rules to check dependencies. > > btw, I'm not sure how much gloss you'd like to put on the Package > Dependencies Browser, but just some immediate thoughts: > * It feels awkward having the <Add package> button at the top and the > <Add all> button at the bottom. It would be nicer if the first was > also at the bottom on the same line (i.e. half the width). Same with > the <remove...> buttons. > * The opposite of the green-plus icon would be a red-minus icon rather > than the trash-can icon. I will take a look at this UI to enhance it a bit. > In Package Dependencies Analysis, taking for example "(AST-Core --> > Dependent packages : 15 | Dependencies : 134 (+ 14 extension > dependencies)" > I see method Traits > TBehavior >> #parseTreeFor: > whose extension protocol is *ast-core. > This to me doesn't seem a dependency. It is seen as a dependency because if you want to load AST-Core, containing an extension method on TBehavior class packaged in Traits, and Traits is not in the system, it will fail. We could imagine optional extension methods, i.e. only loaded in the system if the class extended is present but it is not like that now. >> >>> The sample dependency I looked at from bootstrap-dependency-report.html >>> was Collections-Streams --> Tool-Transcript >>> which seems to be due to only single method "Generator class>>examplePrimes". >>> So should this be coloured orange by marking it in #ignoredDependencies ? >> >> The clean solution is to have a package Collections-Streams-Example with this method. >> It depends how we want to be strict with that. I can live with no additional package and the dependency added in #ignoredDependencies. >> There are so many wrong dependencies in the system that I will prefer at a first step to put dependencies introduced by example methods or settings by example as ignored dependencies because they will not be called. > > Are examples the only (or majority) kind of ignoredDependencies ? If > there is a significant number of other kinds, it might be useful to > split the examples out It is mostly when you know that a code will not be executed. >> We could fix that in a second step if we want and let us focus on stronger dependencies. >> >> Thanks for helping. >> >> PS: Even for people not having time to clean the system, when you contribute code to the image, pleas check that you do not introduce a dependency from a low-level package to a higher level package. It is not obvious to catch but for example, check that you do not introduce a dependency to UI packages when the package could work without UI. > > Even with my best intentions, I think the long term reality is that > the workflow delay of installing Dependency Analyzer to do this will > inhibit me doing this. When working on issues I always start with a > fresh/latest build. As a tool to facilitate one of Pharo's goals, > perhaps it could be integrated into the Image and be prominently > displayed on the top level World menu to encourage its use. > Now I guess it will be hard to identify an introduced dependency just > by looking at a one shot report after a modification. It would help if > this could be compared to a prior snapshot stored in the image > produced during the CI builds. it will be the first step to check regressions from the dependency point of view. It can be done with a CI job if dependency analysis is published for each image. > Perhaps even it could provide live > advice through integration with Quality Assistant. It is what I want at the end. When you update a method or a class, run a dependency check against the current version and the version about to be saved. To reach this point, each package needs to have its dependencies specified. It will come ... Thanks for the feedback smime.p7s (5K) Download Attachment |
In reply to this post by Nicolai Hess
Hi Nicolai,
Le 4 sept. 2015 à 21:12, Nicolai Hess a écrit :
The tool was originally created by Baptiste Quidé and I enhanced it with message send analysis.
Yes, it is a manual step. You find them in the package manifest class, in #ignoredDependencies.
This one also. There is a special manifest ManifestBootstrap holding this dependenciesToRemove.
Yes, it is not clear. Dependencies to remove are packages we do NOT want in the bootstrap. They appear in red everywhere. It is not the dependency we want to remove from the bootstrap but the package itself. I will update that. smime.p7s (5K) Download Attachment |
In reply to this post by demarey
Le 4/9/15 21:54, Christophe Demarey a écrit : >> Are examples the only (or majority) kind of ignoredDependencies ? If >> >there is a significant number of other kinds, it might be useful to >> >split the examples out > At this time, not a lot. > It is mostly when you know that a code will not be executed. but in general we would prefer to avoid to tag them as ignored and addresse the dependencies. So ignored is just here to make sure that we can bootstrap fast and then we will have to revise the ignored. > |
In reply to this post by demarey
Hi, We now have a best overview of bootstrap dependencies. You can check the latest report at https://ci.inria.fr/pharo/job/Pharo-5.0-DependencyAnalysis/Dependencies_HTML_Report/bootstrap-dependency-report.html. With Max, we reused Dijkstra algo in Moose to help finding dependencies leading to Morphic and co. It is now possible to have a visualization that is usable (there is also a button to open it in the report): https://ci.inria.fr/pharo/job/Pharo-5.0-DependencyAnalysis/Dependencies_HTML_Report/bootstrap-dependency-report-graph.html Next steps are to cut dependencies in red in the report table. Christophe. ps: by the way the dependency analyzer (with fixes asked) will be introduced soon in the image. Le 4 sept. 2015 à 15:13, Christophe Demarey a écrit :
smime.p7s (5K) Download Attachment |
Hoi Christophe-- > We now have a best overview of bootstrap dependencies. That's a pretty grim picture. :) Can you post a movie of you picking through that ball of connections? (E.g., with the search feature as you described, or any with any other UI affordance that you have with this system.) thanks! -C -- Craig Latta netjam.org +31 6 2757 7177 (SMS ok) + 1 415 287 3547 (no SMS) |
In reply to this post by demarey
The interactive graph is cool. Some suggestions:
* Mark nodes of dependencies you want to prune in red. * Allow nodes to be pinned * Node size to reflect size of package. A small number of dependencies to a fat node might be best to tackle first. * Highlighting & Fisheye * Mark in bootstrap-dependency-report-graph-data.csv which dependencies you want to eliminate, so that others might have a play with visualisation. More exotic... * Serve the bootstrap-dependency-report-graph.html and bootstrap-dependency-report-graph-data.csv out from Zinc, so I can point my browser at my local Pharo Image, and when a dependency is deleted, the graph updates automagically * When I double-click a node in the graph, it selects that item in the dependency analyzer in Image. * I guess the same might be done with two local Images - Moose as the observer and Pharo as the subject. cheers -ben On Wed, Sep 9, 2015 at 5:33 PM, Christophe Demarey <[hidden email]> wrote:
|
In reply to this post by demarey
Hi, Very interesting. Could you detail which information you use for building the edges? Cheers, Doru On Wed, Sep 9, 2015 at 11:33 AM, Christophe Demarey <[hidden email]> wrote:
|
If your browser shows the web page source you will see the data being pulled from...
cheers -ben On Thu, Sep 10, 2015 at 5:32 AM, Tudor Girba <[hidden email]> wrote:
|
In reply to this post by Tudor Girba-2
The data comes from the dependency analyzer analysis (re-compute each time to avoid wrong information) + the information given in Manifests : manuallyResolvedDependencies (potential dependencies needing a human decision) and ignoredDependencies.
Le 9 sept. 2015 à 23:32, Tudor Girba a écrit :
smime.p7s (5K) Download Attachment |
In reply to this post by Ben Coman
Hi Ben,
Le 9 sept. 2015 à 16:03, Ben Coman a écrit :
yes, I will add it ASAP
TBH, I justa wanted to have a first visualization usable very fast. The current result can be improved a lot.
+1
+1 for hightlihgting
also requires a bit more time. I would also add: get the same visualization in Pharo with Roassal :) Thanks for the feedback, Ben smime.p7s (5K) Download Attachment |
On Thu, Sep 10, 2015 at 3:54 PM, Christophe Demarey
<[hidden email]> wrote: > Hi Ben, > > Le 9 sept. 2015 à 16:03, Ben Coman a écrit : > > The interactive graph is cool. Some suggestions: > * Mark nodes of dependencies you want to prune in red. > > > yes, I will add it ASAP > > * Allow nodes to be pinned > * http://bl.ocks.org/GerHobbelt/3637711 > > > very good idea. > TBH, I justa wanted to have a first visualization usable very fast. The > current result can be improved a lot. no problem. release early, release often is a good practice. cheers -ben |
In reply to this post by ccrraaiigg
Hi Craig,
Le 9 sept. 2015 à 11:53, Craig Latta a écrit :
Maybe a misunderstanding, the search feature is for the able only and not the graph itself. Yes, it is still a bit difficult to get the information because there are a lot of links between nodes. I will try Highlighting (http://www.coppelia.io/2014/07/an-a-to-z-of-extra-features-for-the-d3-force-layout/) as suggested by Ben. Christophe. smime.p7s (5K) Download Attachment |
In reply to this post by demarey
Hi, Ok, I understand that part, but my question was: what code relationships does the analyzer take into account? Cheers, Doru On Thu, Sep 10, 2015 at 9:43 AM, Christophe Demarey <[hidden email]> wrote:
|
Free forum by Nabble | Edit this page |