On 12-10-15 10:42, Christophe Demarey wrote:
> When you develop, you have a working copy of a package meta-data, including dependencies. Actually, there are current dependencies of the package. You could avoid to refer to specific versions and just point to the package name as your working image should already have packages loaded. (kind of configurationOf baseline) > When you release a version (strong act), then you "freeze" the current working version of the package meta-data and you publish it somewhere (a package repository) so that it becomes available to others. This metadata is not source cod, is easily accessible by tools and it becomes easy to build a web site on top of this to search / promote packages. What does releasing mean here? Could you frame it in terms of the 5D paper and the problems they describe? Stephna |
In reply to this post by demarey
2015-10-12 11:20 GMT+02:00 Christophe Demarey <[hidden email]>:
This is something I don't understand: why this focus on making this out of Pharo? What CUDF shows is that, overall, a package dependency problem can be expressed as a SAT problem which is then solvable by the appropriate solver... For example, in my ubuntu, I see that I have three (!) CUDF dependency solvers (mccf, packup, aspdcup), where mccf can use the following underlying solvers: lpsolve, cbc, Cplex, Gurobi, Glpk, SCIP or WBO (!). More interesting is packup, which rely on minisat+. Minisat, with a short search, shows up as 600 lignes of C++ (https://github.com/niklasso/minisat or http://minisat.se/). Why not porting Minisat in Pharo then? You would simplify your building your dependency issues (no need to link Pharo to yet another external tool which only works on Mac OS X / Linux :( )... And that would make such a solver available for other uses. (I think Metacello could switch to using Minisat if a Smalltalk port was available... ) In the mean-time, the number of available CUDF tools in Linux shows probably nice integration issues with dependency loading depending, on some cases, on the solver selected... cool :( Thierry |
In reply to this post by stepharo
On 10/11/2015 11:10 PM, stepharo wrote: > >> >> A BaselineOf has a single baseline method and only the "pure" >> dependencies amongst the packages and projects needs to be expressed >> ... and these dependency specs are about "as small" as you can get ... >>> > Yes but we want them per package. > We do not work on that since more than one year by accident. >>>>> >>>>> When a package is released into the market: then it externalise >>>>> its metadata so that a crawler can automatically build >>>>> dependency graph and create specific distribution. >>>> Okay. This is a problem .... but it happens to be a problem that >>>> Metacello "can solve/does solve" - so there must be something else >>>> (a deeper problem?) that I don't quite understand. >>> But you have to load the configuration and somehow execute it so >>> that it computes the dependencies and we do not want. >> Do you recall that I have been reminding folks that the >> specifications for ConfigurationOf and BaselineOf will someday become >> an XML file? ... I have taken great pains over the years to preserve >> this "expectation" ... Remember the choice to use classes was made as >> a bootstrap convenience to avoid having to create tools ... 6 years >> later and there is still a dearth of tools:) >> >> When you "execute" the code in a ConfigurationOf or BaselineOf, a >> completely separate data structure is constructed using a >> well-defined API and it is this "data structure" that does the real >> work ... it would be very easy to convert a BaselineOf into an >> XML/JSON/STON file without losing any information, unless you've have >> disregarding my warnings:) >> >> There is nothing in Metacello "project specifications" that _depends_ >> upon executing code ... > I know what I meant was use of pragmas, chaining pragma, loading all > the configuration information (different baselines....). > specification (ConfigurationOf and BaselineOf) can be represented in an XML/JSON/STON file modulo all of the extra methods that folks have tacked onto the ConfigurationOf for conevenience... but I don't consider that extra stuff part of Metacello ... while chained pragmas, etc. can be represented in XML/JSON/STON files, the primary reason that they are present is to support the ConfigurationOf ... a BaselineOf is typically a single method and doesn't use all of that extra stuff ... >>>> With that said, if you are planning to replace Metacello, then I am >>>> excited:) But I will repeat that I hope that you are considering >>>> cross platform issues ... >>> Yes we do. First we wanted to make it work. Then we should have kind >>> of virtual packages that act as platforms or project level >> When you talk about "virtual packages", I would say that a BaselineOf >> is pretty much a "virtual package" already. >> >> When it comes to cross-platform support there are several factors >> that were built into Metacello from the very beginning: >> >> - it should be possible to USE a package on a different platform >> than it was >> originally written for without modifying the package itself >> - it should be possible to SUBSTITUTE a platform-specific package with >> another platform-specific package without modifying either of >> the packages >> - it should be possible to CHANGE the package dependencies based on >> platform-dependent requirements without modifying any of the >> packages >> >> The key here is that if one needs to change a package to use it on a >> different platform then you lose the ability to share source code. > > I see well the reason. :) > The last point is the most tricky one when we have per package > dependencies. But I will let christophe answers. in the package structure itself) is a bad idea ... it not only gets in the way of cross platform usage, but for the more complicated projects you end up having to touch a bunch of different files to make a "simple dependency change" not to mention having to edit different versions of the same package that may participate in different/conflicting dependency chains ... >> >> The BaselineOf satisfies these requirements, because the "project >> meta data" is separate from the package/source code and the >> BaselineOf itself is cross-platform. >> >> If you haven't thought about these issues from the very beginning, >> then it may not be easy to shoe-horn support in after the fact ... > > I will let christophe answer. >> >> With all of that said, I really do love the idea of not having to >> support Metacello anymore:) So I would like to see you succeed with >> your effort! > > Thanks. We will need help definitively. the base GemStone product so that the GLASS/GSDevKit packages could be loaded "directly" into the system, as opposed to the current route, which has a fair amount complicated bootstrapping involved ... I would be using only BaselineOf so the it would not be necessary to port all of Metacello to the base GemStone product ... While I think that I can carve out a "minimal Metacello" it wouldn't be completely free of complication, since I have a commitment to keep the old Metacello functioning and I cannot afford to support two independent versions of Metacello ... If instead I worked with Christophe on this project (and it would meet my needs) then I would save myself a fair amount of work:) And part of that savings would be invested in building a Metacello-bridge to the new packages so that there would be a smooth transition ... > >>>> Perhaps at this point in time, I'd like to read some code. Then I >>>> can skip reading the paper and get a feel for how hard it will be >>>> to port to GemStone:) >>> I do not know where christophe save his code but it is be public. >> I may not have time to read a paper ... but I would have time to read >> code:) > > :) It's the same reason I don't read comments in the code .... when you read the code, you get to see what is actually being done as opposed to what the developer (or comment writer) wants you to think is being done:) Often there is a disparity between what the comment says and what the code does and in my experience the code always seems to win:) Dale |
In reply to this post by demarey
On 10/12/2015 01:42 AM, Christophe
Demarey wrote:
Hi Dale,Yes but I am asking specifically how this link is specified ... in Metacello, you use repository descriptions to identify the source repository. I am curious how you specify these cross repository dependencies ... or do you even support cross-repository dependencies? right and in Metacello the cross-repository specifications is handled by a project spec: spec baselineOf: 'Seaside' repository: 'github://SeasideSt/Seaside:v3.2.0/repository' In this case the git version is specified as part of the repository spec (v3.2.0 is a git tag) ... it gets back to how do you handle cross repository references? and how are project dependencies handled? It seems that the project dependencies are intimately tied to package dependencies as often the project dependency itself comes from a specific set of packages and needs to be specified at the package level ... This is a BaselineOf in Metacello ... and does exactly what you talk about here ... As I've mentioned in another message, there is no reason other than a lack of tools that the Metacello specifications (ConfigurationOf and BaselineOf) are not stored in XML/JSON/STON files ... I never liked the idea that code had to be loaded, but it was expedient at the time ... I am curious about your use of the term "package" here ... is this "package" as in Monticello package, or "package" as in a collection of packages and project dependencies ... or ConfigurationOf or BaselineOf? Have you looked at a BaselineOf? I also don't like the fact that ConfigurationOf has release and version information embedded in it ... but the ConfigurationOf was invented to plug the gap between what was available in the Monticello eco-system and what is available in a full-featured scm like git. The BaselineOf was invented because git was able to take care of all of version relationships and Metacello no longer needed all of that junk. If you look at a BaselineOf you will see that it is reduced to a single baseline method with package dependencies specified by name (the entire BaselineOf applies to all of the packages in a directory on disk managed by git or whatever) very simple very compact and very easy to maintain ... the only reason one touches a BaselineOf is to change a dependency.... So I think that for what you seem to need all that needs to be done is to define an XML/JSON/STON representation for the data in a BaselineOf ... a generator for a different format could easily be written and could take existing BaselineOf and spit out the data ... Dale |
In reply to this post by demarey
On 10/12/2015 02:20 AM, Christophe Demarey wrote: > Le 11 oct. 2015 à 18:42, Dale Henrichs a écrit : > >> >> On 10/11/15 12:19 AM, stepharo wrote: >>> >>> Le 11/10/15 00:40, Dale Henrichs a écrit : >>>> Christophe, >>>> >>>> I still don't have a lot of time to read the paper and try to understand what you are trying to accomplish, >>> you should read it. :) >>> We wrote it for that and it is not boring nor long. >> I scanned through it at the time and as I recall, I thought that the functionality described was already covered by git and BaselineOf ... but I did not read it in great detail and I did not (and still don't) have the time to compose a long-winded response:) >>>> but I am curious how you think "package dependencies" will play with git-based projects? >>>> >>>> In git-based repositories I don't think you have the same type of dependency issues that one might have with monticello repositories --- In a monticello repository you have a whole range of possible package versions to pick from, but in a git-based repository the range of package versions is fixed to those that are committed together so the packages that are meant to work together are committed together. >>> I think that this is only true for packages committed within the same repo. >>> Now between porjects published in different repo you have to express them. >>> I do not think that we all want to publish in the same repo and clone out everything. >> ... and inter-project dependencies is what a BaselineOf does .... which brings me back to the conclusion that I reached when I scanned the paper:) >>>> In the bootstrap scenario, you would only have one version per package to choose from, so the packages that are meant to work together are committed together .... >>>> >>>> I guess I don't know what you mean when you say: >>>>> we want to decouple a released version of a package from the working copy of the package version description (implies the creation of a package repository + a web interface on top of it to promote/search packages). >>>> Perhaps a description of the problem being solved would help me understand. >>> We want to be able to have a package market place where tools can grab dependencies without to load code >>> and can compute the set of packages that should be loaded. >>> >>> When a package is released into the market: then it externalise its metadata so that a crawler can automatically build >>> dependency graph and create specific distribution. >> Okay. This is a problem .... but it happens to be a problem that Metacello "can solve/does solve" - so there must be something else (a deeper problem?) that I don't quite understand. >> >> With that said, if you are planning to replace Metacello, then I am excited:) But I will repeat that I hope that you are considering cross platform issues ... >> >> Perhaps at this point in time, I'd like to read some code. Then I can skip reading the paper and get a feel for how hard it will be to port to GemStone:) > Well, the point is not to replace metacello but to go towards a per package metadata description allowing some flexibility with the introduction of virtual packages. > This will allow, in a first time, to set up a package repository and more important, a web site on top of it. In a second time, I also want to enable more flexibility in expressing dependencies constraints (eg. > 2.0, 3.*, etc.). To achieve that, you need a very performant dependency solver and I would like to reuse linux ones (it has be done for ocaml by example) through CUDF (check http://mancoosi.org/ There are a couple of different schemes for expressing "version ranges" in Metacello. Have you looked at them? By reuse, do you mean that you will reimplement the algorithms in Smalltalk or are you suggesting that depency resolution will only work on linux? From a practical perspective I am curious what problems will be solved by having "dependency constraints" expressed by anything more complicated than what I use for github: github://dalehenrich/tode:v0.0.?/repository Which translates to load the latest patch version of the tode project (where major.minor.patch) ... I know that in theory more complicated schemes are intersting, but that assumes that the developers assigning version numbers are actually adhering to a rational version numbering scheme and from a practical matter even the above pattern is risky business:) > > For now, I implemented a simple solver for static dependency constraints (=1.2). I checked Metacello implementation and it looked to me that approaches are a bit too far to be able to reuse the whole code. For sure, it is not as robust as Metacello is, because you enhanced it for years. > What I want now, is to experiment (let's name it) Cargo Package Manager to see if it fits the needs. Pharo bootstrap is the first use case. okay, so this is just in the experimental phases .... so for the time being I should be focussing my efforts on the minimal Metacello approach rather than get involved in the Cargo Package Manager? Dale |
In reply to this post by demarey
On 10/12/2015 02:58 AM, Christophe
Demarey wrote:
ah ... I had a different definition of "virtual package" in mind:) This is another reason why I think that embedded package dependency is a bad idea .... who controls what meta data gets modified and how do you guarantee integrity. As I consider my response I think I am beginning to see where the difference in our thought processes lie ... For example my "virtual package" is defined as a specific commit in a git repository (or any other disk-based SCM) ... the version of the release is defined as the SHA of the commit, or a tag, or a branch name ... The components of this virtual package are one or more monticello packages and a BaselineOf.. One uses the virtual package by cloning the git repository to the local disk or by using a `github://` description ... I choose this approach, because in Smalltalk we typically deal with source code that has to be compiled into our working image ... I think that with your "virtual package", you are taking the approach where you are treating the Smalltalk source code as if it were a pre-compiled entity (like linux packages) and the dependencies between projects is more difficult to deal with because you have to worry about the compatibility exeutable binaries ... In the linux world these binary packages need their own dependency mechanisms independent of a development environment so indeed there are very different requirements involved here ... including the need to have dependency specifications independent of the dependency specifications used in the development environment ... If this is closer to the truth, then I will have to say that my primary concern today is for development time dependencies and the types of packages that you are talking about with the Cargo Package Manager are aimed at a completely different problem space altogether ... BTW, I will read your source code so that I can confirm my supposition ... Dale |
In reply to this post by demarey
On 10/12/2015 02:58 AM, Christophe Demarey wrote: > > Le 11 oct. 2015 à 22:32, Dale Henrichs a écrit : > > With our approach, metadata lies in the package for the current > version and it is on the package repository when the version is > released. Platform-specific packages could have their own dependencies. > What will be possible is to create a new package (not a source code > package but a package that is used by a package manager, i.e. > metadata) to support a new platform and reusing existing code (by > pointing to the package source code). > Do you have an example to provide to me? > >> With all of that said, I really do love the idea of not having to >> support Metacello anymore:) So I would like to see you succeed with >> your effort! > > It will take time ... > I would really like to get feedbacks on Cargo because the knowledge > you got with Metacello is invaluable. > >>>> Perhaps at this point in time, I'd like to read some code. Then I >>>> can skip reading the paper and get a feel for how hard it will be >>>> to port to GemStone:) >>> I do not know where christophe save his code but it is be public. >> I may not have time to read a paper ... but I would have time to read >> code:) > > http://smalltalkhub.com/#!/~demarey/CargoPackageManager > <http://smalltalkhub.com/#%21/%7Edemarey/CargoPackageManager> > While I think we might be trying to solve different problems ... I will take a close look at the code in CargoPackageMananger ... too bad, the code isn't on github, because it would be much easier for me to read, comment and contribute:) Dale |
In reply to this post by Stephan Eggermont-3
Le 12 oct. 2015 à 12:53, Stephan Eggermont a écrit : > On 12-10-15 10:42, Christophe Demarey wrote: > >> When you develop, you have a working copy of a package meta-data, including dependencies. Actually, there are current dependencies of the package. You could avoid to refer to specific versions and just point to the package name as your working image should already have packages loaded. (kind of configurationOf baseline) >> When you release a version (strong act), then you "freeze" the current working version of the package meta-data and you publish it somewhere (a package repository) so that it becomes available to others. This metadata is not source cod, is easily accessible by tools and it becomes easy to build a web site on top of this to search / promote packages. > > What does releasing mean here? Could you frame it in terms of the 5D paper and the problems they describe? Regarding the 5D paper, what I call release is the version dimension, where you edit design information. "the designers typically work on a nonversioned copy of the data files which is kept separate from the versioned copies stored in the archive" the nonversioned copy (in our case is versionned as source code but not as a release) is what I called the working copy of package metadata. A released version is a versioned copy of package metadata published in the package repository. It means a release version has reach some level of maturity and is ready to use. Christophe smime.p7s (5K) Download Attachment |
In reply to this post by Thierry Goubier
Le 12 oct. 2015 à 14:03, Thierry Goubier a écrit :
The focus is not there but I'm not a specialist of Constraint Satisfaction Problems (CSP), I'm not aware of CSP implementation in Pharo and so, I just want to reuse something working fine for years. We are not so much in the community and we should take care to do not have to maintain too many things, especially when it has little added value.
could be an idea. Also good to know, all CUDF backends does not have the same speed. I keep that in mind. It would be good to have a CSP solver available in Pharo.
My idea was to provide the solving facility as a Rest service and so, do not have to care about OS portability.
Thanks for this information, Christophe smime.p7s (5K) Download Attachment |
In reply to this post by Dale Henrichs-3
Le 12 oct. 2015 à 19:01, Dale Henrichs a écrit :
I also use repository descriptions as in Metacello. Here is an example of serialized metadata of a package with cargo: CGOPackageUnit { #package : #Grease-Core, #description : ''Core package of the Grease library.'', #version : ''1.1.13'', #timestamp : DateAndTime [ ''2015-04-14T14:51:50.116+00:00'' ], #dependencies : [ ], #repositories : [ ''http://smalltalkhub.foo/mc/Seaside/Grease11/main/'' ], #file : ''Grease-Core-JohanBrichau.94'' }
I get metadata on packages at the same central place: the package repository (You could have more that one if needed, e.g. a private package repository). In the package metadata, I have the information to get back the source code artifact (repositories and file fields).
in the current implementation, there is no distinction between a project dependency (an external dependency) and a package dependency (an internal dependency, i.e. a dependency to a package of the same project).
yes
I understand
no
package : the unit you want to deliver. It may be a package unit refering to one Monticello package or a package assembly, i.e. a set of package units and so, a set of Monticello packages.
Yes, I like it but it is not available for Monticello. If we did not have Monticello but git instead, life would be easier.
good to know historical reasons ;)
But how do you handle dependencies of projects using Monticello? smime.p7s (5K) Download Attachment |
In reply to this post by Dale Henrichs-3
Le 12 oct. 2015 à 19:22, Dale Henrichs a écrit : > > > On 10/12/2015 02:20 AM, Christophe Demarey wrote: >> Le 11 oct. 2015 à 18:42, Dale Henrichs a écrit : >> >>> >>> On 10/11/15 12:19 AM, stepharo wrote: >>>> >>>> Le 11/10/15 00:40, Dale Henrichs a écrit : >>>>> Christophe, >>>>> >>>>> I still don't have a lot of time to read the paper and try to understand what you are trying to accomplish, >>>> you should read it. :) >>>> We wrote it for that and it is not boring nor long. >>> I scanned through it at the time and as I recall, I thought that the functionality described was already covered by git and BaselineOf ... but I did not read it in great detail and I did not (and still don't) have the time to compose a long-winded response:) >>>>> but I am curious how you think "package dependencies" will play with git-based projects? >>>>> >>>>> In git-based repositories I don't think you have the same type of dependency issues that one might have with monticello repositories --- In a monticello repository you have a whole range of possible package versions to pick from, but in a git-based repository the range of package versions is fixed to those that are committed together so the packages that are meant to work together are committed together. >>>> I think that this is only true for packages committed within the same repo. >>>> Now between porjects published in different repo you have to express them. >>>> I do not think that we all want to publish in the same repo and clone out everything. >>> ... and inter-project dependencies is what a BaselineOf does .... which brings me back to the conclusion that I reached when I scanned the paper:) >>>>> In the bootstrap scenario, you would only have one version per package to choose from, so the packages that are meant to work together are committed together .... >>>>> >>>>> I guess I don't know what you mean when you say: >>>>>> we want to decouple a released version of a package from the working copy of the package version description (implies the creation of a package repository + a web interface on top of it to promote/search packages). >>>>> Perhaps a description of the problem being solved would help me understand. >>>> We want to be able to have a package market place where tools can grab dependencies without to load code >>>> and can compute the set of packages that should be loaded. >>>> >>>> When a package is released into the market: then it externalise its metadata so that a crawler can automatically build >>>> dependency graph and create specific distribution. >>> Okay. This is a problem .... but it happens to be a problem that Metacello "can solve/does solve" - so there must be something else (a deeper problem?) that I don't quite understand. >>> >>> With that said, if you are planning to replace Metacello, then I am excited:) But I will repeat that I hope that you are considering cross platform issues ... >>> >>> Perhaps at this point in time, I'd like to read some code. Then I can skip reading the paper and get a feel for how hard it will be to port to GemStone:) >> Well, the point is not to replace metacello but to go towards a per package metadata description allowing some flexibility with the introduction of virtual packages. > Oh darn, you mean I have to continue to support Metacello:) >> This will allow, in a first time, to set up a package repository and more important, a web site on top of it. In a second time, I also want to enable more flexibility in expressing dependencies constraints (eg. > 2.0, 3.*, etc.). To achieve that, you need a very performant dependency solver and I would like to reuse linux ones (it has be done for ocaml by example) through CUDF (check http://mancoosi.org/ > There are a couple of different schemes for expressing "version ranges" in Metacello. Have you looked at them? What is supported? > By reuse, do you mean that you will reimplement the algorithms in Smalltalk or are you suggesting that depency resolution will only work on linux? I would like to define the dependency solving as a rest service, so no need to support multiple platforms. the dependency solving can be hosted on linux. > From a practical perspective I am curious what problems will be solved by having "dependency constraints" expressed by anything more complicated than what I use for github: > > github://dalehenrich/tode:v0.0.?/repository > > Which translates to load the latest patch version of the tode project (where major.minor.patch) ... I know that in theory more complicated schemes are intersting, but that assumes that the developers assigning version numbers are actually adhering to a rational version numbering scheme and from a practical matter even the above pattern is risky business:) you're right but we should encourage people to adopt semantic versionning. It's very powerful when semantic versioning policy is applied. >> >> For now, I implemented a simple solver for static dependency constraints (=1.2). I checked Metacello implementation and it looked to me that approaches are a bit too far to be able to reuse the whole code. For sure, it is not as robust as Metacello is, because you enhanced it for years. >> What I want now, is to experiment (let's name it) Cargo Package Manager to see if it fits the needs. Pharo bootstrap is the first use case. > > okay, so this is just in the experimental phases .... so for the time being I should be focussing my efforts on the minimal Metacello approach rather than get involved in the Cargo Package Manager? What I wanted to say is that is still experimental for me because it does not have yet users. Maybe we could take Gemstone and GLASS/GSDevKit package as a use case and see if Cargo fits your needs. I would really enjoy to join forces and have a better solution. What are your requirements for having GLASS/GSDevKit loadable into GemStone. Do you have a deadline? I will have more time starting November (for now, I work on the bootstrap with Max for 2 weeks). Christophe smime.p7s (5K) Download Attachment |
In reply to this post by Dale Henrichs-3
Le 12 oct. 2015 à 21:17, Dale Henrichs a écrit : > > > On 10/12/2015 02:58 AM, Christophe Demarey wrote: >> >> Le 11 oct. 2015 à 22:32, Dale Henrichs a écrit : >> >> With our approach, metadata lies in the package for the current version and it is on the package repository when the version is released. Platform-specific packages could have their own dependencies. >> What will be possible is to create a new package (not a source code package but a package that is used by a package manager, i.e. metadata) to support a new platform and reusing existing code (by pointing to the package source code). >> Do you have an example to provide to me? >> >>> With all of that said, I really do love the idea of not having to support Metacello anymore:) So I would like to see you succeed with your effort! >> >> It will take time ... >> I would really like to get feedbacks on Cargo because the knowledge you got with Metacello is invaluable. >> >>>>> Perhaps at this point in time, I'd like to read some code. Then I can skip reading the paper and get a feel for how hard it will be to port to GemStone:) >>>> I do not know where christophe save his code but it is be public. >>> I may not have time to read a paper ... but I would have time to read code:) >> >> http://smalltalkhub.com/#!/~demarey/CargoPackageManager <http://smalltalkhub.com/#%21/%7Edemarey/CargoPackageManager> >> > > While I think we might be trying to solve different problems ... I will take a close look at the code in CargoPackageMananger ... too bad, the code isn't on github, because it would be much easier for me to read, comment and contribute:) I will see if can do it next days. smime.p7s (5K) Download Attachment |
In reply to this post by Dale Henrichs-3
Le 12 oct. 2015 à 19:53, Dale Henrichs a écrit :
The same concern applies for non-embedded package dependency. You need to control who can modify and who cannot. I do not see your point.
in Cargo, I call that an Assembly. It is a set of package units working together.
these components in cargo are package units.
I think we talk about the same packages but with different words. Virtual packages are just there to allow low-coupling between some packages. I think this could simplify a lot some project dependency definition and save time when you need to update it. Maybe for now, you could just see Cargo managing packages. There package unit and assembly (composite pattern). smime.p7s (5K) Download Attachment |
In reply to this post by demarey
On 14-10-15 08:25, Christophe Demarey wrote:
>> What does releasing mean here? Could you frame it in terms of the >> 5D paper and the problems they describe? > > Regarding the 5D paper, what I call release is the version dimension, > where you edit design information. "the designers typically work on a > nonversioned copy of the data files which is kept separate from the > versioned copies stored in the archive" > > the nonversioned copy (in our case is versionned as source code but > not as a release) is what I called the working copy of package > metadata. A released version is a versioned copy of package metadata > published in the package repository. It means a release version has > reach some level of maturity and is ready to use. If I try applying the 5D model, if releasing says something about the maturity level it should be mapped to status. Platform maps to variant, and the package maps to hierarchy. Further in the paper they talk about the interactions between the different dimensions. A conclusion in the paper is that if you want to manage different dimensions, you actually describe a development proces. The needed artifacts and structure follows directly from describing the process(es) you want to support. We want tooling that can support different workflows, as different projects have different needs. That is why I suggested starting from personas and exactly describing how they solve the issues they run into and how they want to work. Stephan |
In reply to this post by demarey
On 10/14/2015 12:15 AM, Christophe
Demarey wrote:
I was asking about cross repository dependencies and in this example your #dependencies array is empty ... What repository does the CGOPackageUnit reside in? So you have a completely separate repository of packages.... On a sort of related note ... you are talking about packages here as if they were a complete unit, but my experience with packages is that they are very rarely completely standlone entities ... Most of my projects involve multiple packages that are tightly coupled to each other ... Am I expected to first register each package in the central repository (or private repository) before I can even think of composing a multi-package project ... I assume that I am missing something here ... except that they are presumably specified differently? an example specification would be useful here ...
okay and an assembly of packages looks like? A BaselineOf can be used with a Monticello repository but it devolves to a #bleedingEdge specification which is a nightmare ... Life should be easy ... I guess if your main focus is providing an alternate solution for Monticello repositories then I wish you luck... I don't have the cycles available to try to bridge the gap between Monticello repositories and git repositories ... I prefer to spend my time making git repositories usable with Smalltalk:) A BaselineOf can specify a dependency on another project and that project may be a BaselineOf or a ConfigurationOf ... A ConfigurationOf can be serialized to STON just like a BaselineOf ... it will just have a lot more junk it ... junk that is managed by git in a git repository ... Dale |
In reply to this post by demarey
On 10/14/2015 12:39 AM, Christophe Demarey wrote: > Le 12 oct. 2015 à 19:22, Dale Henrichs a écrit : > >> >> On 10/12/2015 02:20 AM, Christophe Demarey wrote: >>> Le 11 oct. 2015 à 18:42, Dale Henrichs a écrit : >>> >>>> On 10/11/15 12:19 AM, stepharo wrote: >>>>> Le 11/10/15 00:40, Dale Henrichs a écrit : >>>>>> Christophe, >>>>>> >>>>>> I still don't have a lot of time to read the paper and try to understand what you are trying to accomplish, >>>>> you should read it. :) >>>>> We wrote it for that and it is not boring nor long. >>>> I scanned through it at the time and as I recall, I thought that the functionality described was already covered by git and BaselineOf ... but I did not read it in great detail and I did not (and still don't) have the time to compose a long-winded response:) >>>>>> but I am curious how you think "package dependencies" will play with git-based projects? >>>>>> >>>>>> In git-based repositories I don't think you have the same type of dependency issues that one might have with monticello repositories --- In a monticello repository you have a whole range of possible package versions to pick from, but in a git-based repository the range of package versions is fixed to those that are committed together so the packages that are meant to work together are committed together. >>>>> I think that this is only true for packages committed within the same repo. >>>>> Now between porjects published in different repo you have to express them. >>>>> I do not think that we all want to publish in the same repo and clone out everything. >>>> ... and inter-project dependencies is what a BaselineOf does .... which brings me back to the conclusion that I reached when I scanned the paper:) >>>>>> In the bootstrap scenario, you would only have one version per package to choose from, so the packages that are meant to work together are committed together .... >>>>>> >>>>>> I guess I don't know what you mean when you say: >>>>>>> we want to decouple a released version of a package from the working copy of the package version description (implies the creation of a package repository + a web interface on top of it to promote/search packages). >>>>>> Perhaps a description of the problem being solved would help me understand. >>>>> We want to be able to have a package market place where tools can grab dependencies without to load code >>>>> and can compute the set of packages that should be loaded. >>>>> >>>>> When a package is released into the market: then it externalise its metadata so that a crawler can automatically build >>>>> dependency graph and create specific distribution. >>>> Okay. This is a problem .... but it happens to be a problem that Metacello "can solve/does solve" - so there must be something else (a deeper problem?) that I don't quite understand. >>>> >>>> With that said, if you are planning to replace Metacello, then I am excited:) But I will repeat that I hope that you are considering cross platform issues ... >>>> >>>> Perhaps at this point in time, I'd like to read some code. Then I can skip reading the paper and get a feel for how hard it will be to port to GemStone:) >>> Well, the point is not to replace metacello but to go towards a per package metadata description allowing some flexibility with the introduction of virtual packages. >> Oh darn, you mean I have to continue to support Metacello:) >>> This will allow, in a first time, to set up a package repository and more important, a web site on top of it. In a second time, I also want to enable more flexibility in expressing dependencies constraints (eg. > 2.0, 3.*, etc.). To achieve that, you need a very performant dependency solver and I would like to reuse linux ones (it has be done for ocaml by example) through CUDF (check http://mancoosi.org/ >> There are a couple of different schemes for expressing "version ranges" in Metacello. Have you looked at them? > No, I did not check on latest Metacello versions. > What is supported? project basis including ~>[1] ... there never seemed to be a big demand for these operations, presumably because so few developers adhere to a semantic versioning scheme (which makes trying to reason about version numbers very hard) ... and I think that the symbolic version naming convention invented by the Seaside guys: #release3, #release3.1, #release3.2, etc. is superior (from a practical perspective) ... [1] https://robots.thoughtbot.com/rubys-pessimistic-operator > >> By reuse, do you mean that you will reimplement the algorithms in Smalltalk or are you suggesting that depency resolution will only work on linux? > I would like to define the dependency solving as a rest service, so no need to support multiple platforms. the dependency solving can be hosted on linux. So you can't do a build using CargoPackageManager without being connected to the internet ... As I said in another message, I think that you are trying to solve a different problem than Metacello ... there are a number of similarities in the contents of the meta data that is being used (and common specification classes at this level would probably be beneficial), but Metacello is primarily aimed at developers building and using packages produced by others ... I am taking the approach that for developers an SCM (I talk about git all the time, but any disk-based SCM can be used) is part an parcel of of not only developing your own projects but when using other projects, you inevitably have to a) customize them for your own use or b) contribute bugfixes back to the community and an SCM is required for that ... > >> From a practical perspective I am curious what problems will be solved by having "dependency constraints" expressed by anything more complicated than what I use for github: >> >> github://dalehenrich/tode:v0.0.?/repository >> >> Which translates to load the latest patch version of the tode project (where major.minor.patch) ... I know that in theory more complicated schemes are intersting, but that assumes that the developers assigning version numbers are actually adhering to a rational version numbering scheme and from a practical matter even the above pattern is risky business:) > you're right but we should encourage people to adopt semantic versionning. It's very powerful when semantic versioning policy is applied. > >>> For now, I implemented a simple solver for static dependency constraints (=1.2). I checked Metacello implementation and it looked to me that approaches are a bit too far to be able to reuse the whole code. For sure, it is not as robust as Metacello is, because you enhanced it for years. >>> What I want now, is to experiment (let's name it) Cargo Package Manager to see if it fits the needs. Pharo bootstrap is the first use case. >> okay, so this is just in the experimental phases .... so for the time being I should be focussing my efforts on the minimal Metacello approach rather than get involved in the Cargo Package Manager? > What I wanted to say is that is still experimental for me because it does not have yet users. > Maybe we could take Gemstone and GLASS/GSDevKit package as a use case and see if Cargo fits your needs. I would really enjoy to join forces and have a better solution. > What are your requirements for having GLASS/GSDevKit loadable into GemStone. > Do you have a deadline? > I will have more time starting November (for now, I work on the bootstrap with Max for 2 weeks). post-November will work best for me as I am targeting a talk on GsDevKit_home and tODE for Smalltalks in November ... I don't have a deadline, but the need to have FileTree and Metacello-lite integrated in the base GemStone is bubbling close to the top ... and post-November would be a good time ... Dale |
In reply to this post by demarey
On 10/14/2015 12:48 AM, Christophe Demarey wrote: > Le 12 oct. 2015 à 21:17, Dale Henrichs a écrit : > >> >> On 10/12/2015 02:58 AM, Christophe Demarey wrote: >>> Le 11 oct. 2015 à 22:32, Dale Henrichs a écrit : >>> >>> With our approach, metadata lies in the package for the current version and it is on the package repository when the version is released. Platform-specific packages could have their own dependencies. >>> What will be possible is to create a new package (not a source code package but a package that is used by a package manager, i.e. metadata) to support a new platform and reusing existing code (by pointing to the package source code). >>> Do you have an example to provide to me? >>> >>>> With all of that said, I really do love the idea of not having to support Metacello anymore:) So I would like to see you succeed with your effort! >>> It will take time ... >>> I would really like to get feedbacks on Cargo because the knowledge you got with Metacello is invaluable. >>> >>>>>> Perhaps at this point in time, I'd like to read some code. Then I can skip reading the paper and get a feel for how hard it will be to port to GemStone:) >>>>> I do not know where christophe save his code but it is be public. >>>> I may not have time to read a paper ... but I would have time to read code:) >>> http://smalltalkhub.com/#!/~demarey/CargoPackageManager <http://smalltalkhub.com/#%21/%7Edemarey/CargoPackageManager> >>> >> While I think we might be trying to solve different problems ... I will take a close look at the code in CargoPackageMananger ... too bad, the code isn't on github, because it would be much easier for me to read, comment and contribute:) > I have github in mind but did not yet take the plunge. > I will see if can do it next days. Dale |
In reply to this post by demarey
On 10/14/2015 01:00 AM, Christophe
Demarey wrote:
I agree that at this point in time we have to move beyond descriptions and start looking at source and detailed functionality, because that is where the differences between Cargo and Metacello will manifest themselves ... they are both package managers after all:) Dale |
Free forum by Nabble | Edit this page |