[vwnc] Bundles

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
30 messages Options
12
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Bundles

Henrik Sperre Johansen
My utopia:
Categorize my code in bundles/packages as I see fit.
Press "publish" on the bundle/package I want in source control.
Get one item in store.
Load that item, and have my code load itself in whatever order it  
needs to.
End up with a view identical to the one I had when I published.

Alternatively, if someone else has published modifications:
- If I've made no modifications, load the new version.
- If I've made modifications, get a view like the current merge view,  
then publish back to store as a new version after merge is complete.

In short, other than because there needs to be a load order, why  
should I have to care about the load order?
- As far as I can tell, the NewPrerequisiteEngine does quite a good  
job of figuring it out just by clicking a button...
- Make non-essential tasks like messing with the load order the  
exception rather than the rule.
- At the very least, find a way to easily define a correct one,  
without messing with my daily productivity by forcing my  
categorization of code in the tool I use every day for browsing,  
making it harder to remember where stuff is than necessary. (And no,  
prereqs doesn't cut it when your project has over 200 packages, and  
there's no centralized GUI for the ordering/you can't be sure they're  
correct before you load from store )

In any case, it would be nice to have a separation of concepts.
For any beginner previously familiar with... other languages(speaking  
for both myself and another programmer I just held a short  
introduction to), the difference between parcels/packages/bundles/
prerequisites roles when it comes to categorization/loading order/
storage can be rather confusing.

Cheers,
Henry

A short background/user story:
One of my first tasks when starting in Smalltalk was to reorganize the  
existing codebase into something loadable from Store. The previous  
method was pretty much sharing fileouts of new code between  
developers, and reconciling a "base" image for each release.
As such, the starting point consisted of bundles/packages mostly for  
code categorization, with some prereqs sparsely sprinkled where the  
developers had felt it would look nice.
The structure was one of 3 levels, 1 top bundle, 11 sub bundles, and  
about 250 leaf packages.
I started adding additional package prereqs to make it load from store  
after publishing from an image, but that quickly turned into somewhat  
of a game of ping-pong between internal project packages which might  
or might not actually need each other.
Not to mention I couldn't find any equivalent to the "Validate" button  
for prereqs, and had to republish/reload every change to find new  
errors, which for a project this size takes quite awhile.
Since no one was ever going to want to load these packages one by one  
though, i cleared all the package prereqs, and used the Validate  
button in the bundle specification to iterate into a loadable state.  
Then added the external prerequisites to the top bundle, ending up  
with a big chunck of code which was loadable from a base image.
Quite possibly it could've been split into smaller loadable modules,  
but I felt the effort that would've been needed with the current tools  
was too large to be worth it.
In essence, I ended up using the top bundle as a "Super package", with  
the sub-levels upholding a valid load order, but still providing most  
of the initial categorization.

As of now, we're always publishing changes all the way up to the top  
bundle, as that's provided for the easiest method of reconciling as  
far as our experience goes. (merge - reconcile - publish).
We've long ago given up having any meaningful version numbers on the  
sub-bundles/packages, since they bork up once you forget the middle  
step above, and that happens from time to time.
Apparently when you're merging with a higher version number (not a  
different branch), what you really want to do is to branch off the  
common base, not publish a new version including your local changes as  
well.


P.S. On the topic of categorization, am I the only one shivering  
whenever I look at the UIBasics bundle, and crying myself to sleep  
when I have to modify a component there?
_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Bundles

Mark Pirogovsky-3
In reply to this post by Bruce Badger
we do use bundles and sub bundles

1. as a configuration maps(closed) for the  release versions and
modifications for them. I can always compare them and see the
differences form version to version...or I can go back to fix an error
or create a patch to the earlier released version.

2. as a way to package different versions of the application with
different feature set, for example with or without network support.

I try to stay away from prerequisites i.e. our bundle do not have
prerequisites( or just very basic ones) - we load them into the already
pre-configured "base" images, where all of the required parcels( and/or
packages)are already loaded.  Same strategy applies to the building
runtime images -I produce the parcels from my version bundle, load them
int the pre-configured base runtime image and strip... This adds one
extra step to deploy new version of VW into the development -- building
the base, but it well worth it as we know what environment we deal with
at any give time.

My 2c.

--Mark Pirogovsky

Bruce Badger wrote:

> On his Blog, Jim asked about Store Bundles:
>
>     *  Do you use bundles?
>     * If so, how do you use them, and why?
>     * If setting explicit pre-reqs was easier, would you still use bundles?
>
> I do use bundles.
>
> I use nested bundles with an outer master bundle for every project.
>
> Even if setting preq versions were easier I probably still use
> bundles.  I like the explicit containment.
>
_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Bundles

Steven Kelly
In reply to this post by Bruce Badger
> Do you use bundles?
yes

> If so, how do you use them, and why?

- To collect our code together in the browsers
- To version our code together, and provide a place for an overview of
all the individual packages' version comments
- To make loading our code easier (smaller number of components +
versions)

- We mostly have bundles that only contain packages, and each package is
only in one bundle
- We have a couple of occurrences of a bundle containing (packages and a
bundle containing packages)
- We have a couple of occurrences of a package being contained in two
different bundles

- A bundle's version history may sometimes branch temporarily to allow
patches to a release, while the main trunk continues with free
development of the next release

- We split into different bundles where appropriate or when forced to by
Store (e.g. lack of support for overrides within bundles)

- We build development and deployment images from a virgin visual.im
with scripts that load Cincom parcels, reconcile them with our local
Store, load a few packages from the public Store, and load our app from
our local Store. For deployment a script then unloads Store and other
unloadable development packages then runs RTP.

- We have added our own little tools:
  - a better list of "More recently published" that filters out packages
if they can be loaded by loading a bundle shown
  - "Unloaded published items" and "Unloaded recently published items"
to show 'relevant' new packages or bundles
  - the bundle compare versions dialog has a button "Show version
comments" that concatenates the version comments of all package changes
between the bundle versions
  - "reconcile just bundle" to quickly rebase a bundle on a more recent
published version, without trying to reconcile the code contents of the
packages
  - "More recently published contents of bundle" that lists only updated
versions of this bundle or its contents

> If setting explicit pre-reqs was easier, would you still use bundles?

Yes. We use pre-reqs very little. Pre-reqs create a network where each
package carries some of the responsibility, and the result is determined
at load time. The mechanisms in pre-reqs are not sophisticated enough to
specify which package and version of it should be loaded under which
circumstances (e.g. VW version compatibility, platform). Conversely, if
they were more complicated then getting them right would be harder - at
least to achieve the desired level of certainty.

Pre-reqs work well when there is a large mass of components shared by a
large mass of users from different organizations, and those users don't
have many components from outside the shared mass - e.g. Linux OS
components and standard apps. Bundles (or similar) work better within
one organization, or where some components are local and some shared
(e.g. our Store + the public Store).

Travis asked a few more questions, some of them rather leading :-). Yes,
we used Envy actively 1993-2000, with about a dozen programmers over two
sites. One of our bundles' structure was defined then, the rest since. I
feel bundle load order lists are often the simplest and most reliable
way to sort out load order issues. I've never noticed that bundles
suppress package post load actions - is that really true??

Cheers,
Steve

_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Bundles

Terry Raymond
In reply to this post by Bruce Badger
I would like to point out that the use of prereqs for
determining load order is overly restrictive. In fact
there are two kinds of prereqs; loadtime prereq and
runtime prereq. Separating the two and using just the
load prereqs for load order would be most desirable.

Terry
 
===========================================================
Terry Raymond
Crafted Smalltalk
80 Lazywood Ln.
Tiverton, RI  02878
(401) 624-4517      [hidden email]
<http://www.craftedsmalltalk.com>
===========================================================

_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Bundles

Joachim Geidel
In reply to this post by Steven Kelly
In the project where I am working, we seem to use bundles and
prerequisites more or less the same way as Steve's group.

Steven Kelly schrieb am 14.05.2008 14:02 Uhr:
>> Do you use bundles?
> yes
>> If so, how do you use them, and why?
>
> - To collect our code together in the browsers

Same here. We develop about ten different products with ca. 40
developers, and the product I have worked on has four different variants
(two very similar clients for different user groups, a mobile/offline
version, and a batch processor). There is a group developing basic
libraries, and some products include components from up to three other
products. These components are grouped in bundles, because we usually
want to load all of their packages. If we only need some of them, that
can still be done. The development images typically contains hundreds of
packages in addition to the VisualWorks base. Bundles and sub-bundles
are necessary to be able to navigate in such a large code base, and to
define the contents of product variants in a simple way.

> - To version our code together, and provide a place for an overview of
> all the individual packages' version comments

+1

> - To make loading our code easier (smaller number of components +
> versions)

Definitely. We usually don't define prerequisites at the package level,
except when a package can be used in isolation. We use bundles to keep
related packages together, which also ensures that the have the right
versions loaded - ensuring this in a consistent way with prerequisites
only would be a maintenance nightmare. We use prerequisites at the
bundle level, and the prerequisites are mostly bundles. We have tool
support which updates the prerequisite versions from what's loaded in
the image, which makes baselining very simple.

> - We mostly have bundles that only contain packages, and each package is
> only in one bundle

We have sub-bundles, and usually a package is in only one bundle. There
are a few exceptions, but we try to avoid them.

> - We have a couple of occurrences of a bundle containing (packages and a
> bundle containing packages)
> - We have a couple of occurrences of a package being contained in two
> different bundles
>
> - A bundle's version history may sometimes branch temporarily to allow
> patches to a release, while the main trunk continues with free
> development of the next release

Same here. Sometimes, we also have branches for one or more prototypes,
or for a larger refactoring which is intergrated into the trunk after
maybe several weeks of development. There have been situations where we
had up to four parallel lines of development, and branches of bundle
versions made this easy to manage.

> - We build development and deployment images from a virgin visual.im
> with scripts that load Cincom parcels, reconcile them with our local
> Store, load a few packages from the public Store, and load our app from
> our local Store. For deployment a script then unloads Store and other
> unloadable development packages then runs RTP.

More or less the same here, except that we use a base image with
preloaded and already reconciled parcels, and we don't use the public Store.

> - We have added our own little tools:

+100 ;-)

>   - a better list of "More recently published" that filters out packages
> if they can be loaded by loading a bundle shown
>   - "Unloaded published items" and "Unloaded recently published items"
> to show 'relevant' new packages or bundles
>   - the bundle compare versions dialog has a button "Show version
> comments" that concatenates the version comments of all package changes
> between the bundle versions

Good idea. May we steal it? :-)

>   - "reconcile just bundle" to quickly rebase a bundle on a more recent
> published version, without trying to reconcile the code contents of the
> packages
>   - "More recently published contents of bundle" that lists only updated
> versions of this bundle or its contents

Same here, plus the option to do this for a configurable list of bundles
which go into a product with a single click, and load what has been
found. With this tool, we have "open configuration maps" - no need to
publish the bundles every time we publish a package, and very easy to
stay up to date. Bundles are only published for baselines, and when
their structure changes (addition/removal of packages). Some teams still
prefer to publish the bundles every time, but this leads to very long
version histories and slows down the load process for updating an image.

>> If setting explicit pre-reqs was easier, would you still use bundles?
>
> Yes. We use pre-reqs very little. Pre-reqs create a network where each
> package carries some of the responsibility, and the result is determined
> at load time. The mechanisms in pre-reqs are not sophisticated enough to
> specify which package and version of it should be loaded under which
> circumstances (e.g. VW version compatibility, platform). Conversely, if
> they were more complicated then getting them right would be harder - at
> least to achieve the desired level of certainty.

+1, see above.

> Pre-reqs work well when there is a large mass of components shared by a
> large mass of users from different organizations, and those users don't
> have many components from outside the shared mass - e.g. Linux OS
> components and standard apps. Bundles (or similar) work better within
> one organization, or where some components are local and some shared
> (e.g. our Store + the public Store).
>
> Travis asked a few more questions, some of them rather leading :-). Yes,
> we used Envy actively 1993-2000, with about a dozen programmers over two
> sites. One of our bundles' structure was defined then, the rest since. I
> feel bundle load order lists are often the simplest and most reliable
> way to sort out load order issues.

I agree, and as I described above, we work along this line.

> I've never noticed that bundles
> suppress package post load actions - is that really true??

I also don't remember such a behavior. I am almost certain that our
application (and JNIPort, which uses bundles, too) wouldn't work if this
were true.

Joachim
_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Bundles

Joachim Geidel
In reply to this post by Andre Schnoor
Andre Schnoor schrieb am 13.05.2008 12:15 Uhr:
> Yes. I would rather see bundles in their "configuration map" role,  
> i.e. associate a specific set of packages (with versions) and their  
> load order for the purpose of loading products into an image and for  
> deploying them.
>
> Bundles should be safe for archiving: Loading an older product from an  
> archived configuration map for maintenance should be possible even  
> after years (maybe it already is and I missed something).

Yes, this is already possible. You have to make sure that
- you have the right version of VisualWorks, i.e. a visual.im from the
VW version which was the base for the product version, and the right
version of the VM,
- all prerequisites have been defined with the version of the prerequisite,
- all prerequisites should have the type "bundle" or "package", but not
"parcel" or "any",
- which implies that everything which you have loaded from parcels
should be published to Store and loaded from there, simply to make sure
that you don't accidentally load a parcel which has been modified or
replaced in the meantime,
- all non-Smalltalk files (images, shared libraries, configuration files
etc.) should be attached to a bundle and versioned in Store, and VW
should be configured such that it copies them from Store to the file
system when you build the product.

That should be sufficient, if I haven't forgotten something. We have
"top level bundles" for our products, and when we load them into a base
image, they load everything needed via versioned prerequisites without
manual intervention. The process is completely deterministic, and we can
reconstruct any product version which has not been explicitly deleted
from the repository.

Joachim
_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Bundles

Andre Schnoor
Joachim,

thanks for the good instructions on how to make a bundle safe for  
archiving.

My concern however is, that all the manual steps required to achieve  
this are tedious and error prone. For me, fixing the properties of  
140+ packages manually is a show stopper. I'm not charging my  
customers based on hourly rates ;-)

I would love to see a menu item "Make Bundle Snapshot" that  
accomplishes all this automatically in one go (especially setting all  
prerequisite versions and publishing required base packages, if  
changed). This could also be an option in the "Publish" dialog.

I still envy those who successfully manage to keep released products  
along with development streams in the same repository over a long  
period of time. Those many "Merge", "Compare" and "Reconcile" dialogs  
and confirmaton messages always confused me and I did not yet have the  
time to really understand the workflow and basic concept through  
experimentation. IMO this is a steep learning curve that could be  
flattened a lot, if the user interface was aggregated into a single  
"Store Browser" with tabs that includes it all in one place very much  
like the System Browser.

Andre


Am 16.05.2008 um 22:27 schrieb Joachim Geidel:

>> Bundles should be safe for archiving: Loading an older product from  
>> an
>> archived configuration map for maintenance should be possible even
>> after years (maybe it already is and I missed something).
>
> Yes, this is already possible. You have to make sure that
> - you have the right version of VisualWorks, i.e. a visual.im from the
> VW version which was the base for the product version, and the right
> version of the VM,
> - all prerequisites have been defined with the version of the  
> prerequisite,
> - all prerequisites should have the type "bundle" or "package", but  
> not
> "parcel" or "any",
> - which implies that everything which you have loaded from parcels
> should be published to Store and loaded from there, simply to make  
> sure
> that you don't accidentally load a parcel which has been modified or
> replaced in the meantime,
> - all non-Smalltalk files (images, shared libraries, configuration  
> files
> etc.) should be attached to a bundle and versioned in Store, and VW
> should be configured such that it copies them from Store to the file
> system when you build the product.

...

_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Bundles

Martin McClure
We do use bundles, and sub-bundles, and sub-sub-bundles, and in fact
pretty much all of our packages would be totally useless without the
other packages in their bundle.

One of the reasons for this is that our software runs on both VW and VA,
and we must be able to maintain synchronization between our Store and
Envy repositories. One of the things that makes this possible is that
the structure of packages and bundles in our Store repository and the
applications and subapplications in our Envy repository is exactly the
same for the fairly large subset of our code that is the same in both.
VW-specific code is separated into packages that don't have an analogue
in Envy, and VA-specific code is separated into subapplications that
don't have an analogue in Store.

So for us bundles act as configuration maps, as containers for
deployment packaging, as browsing convenience, as providers of load and
unload actions, and as a somewhat clunky method of fulfilling
prerequisites.

If you wanted us to stop using bundles you'd have to provide something
(or things) at least as good for each of these.

Regards,

-Martin
_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Bundles

Paul Baumann
In reply to this post by Bruce Badger
We use bundles like config maps (to specify what versions to load) and
applications (to group packages together). We use packages somewhat like
sub-applications are used in ENVY (to categorize code). Where packages
declare prerequisites, they do not specify versions because that would
conflict with the version lineup specified by the bundle.

Developers version their package changes as integration-ready. Release
tools find and merge all integration-ready changes (for all contained
items) to produce an internal-release version with a ".0" suffix to
indicate an integration point that developers can base further changes
on. The ENVY 'open edition' functionality that some people like can be
achieved by just using the release tools to merge integration-ready code
and re-parent (skipping the publish part); however, developers usually
publish a new internal-release version when they feel their changes are
safe for general use. The release tools we've developed are an important
part of making this all work so well.

I don't care if it is made easier to configure package prerequisites
because we would probably still use bundles. Setting package version
prerequisites would be in conflict with the way we use bundles for
version lineups. I see no benefit to declaring an inverse relationship
between versions. This old dog thinks in terms of containment and
snapshots.

With ENVY you could create a new map edition and customize the lineup
without having contained items loaded. Much trickery needs to be done in
order configure bundles prior to load. For example, this affects us with
each new GBS release because GBS only initializes properly when loaded
from a parcel and store-load-initialization often leaves GBS inoperable.
The code relationship that is maintained with a loaded parcel (that is
also represented in StORE) makes it difficult to just replace and reload
the parcel files. Those issues are higher priority to me than easier
prerequisite setting.

Paul Baumann

-----Original Message-----
From: [hidden email] [mailto:[hidden email]] On
Behalf Of Bruce Badger
Sent: Monday, May 12, 2008 6:42 PM
To: VW NC
Subject: [vwnc] Bundles

On his Blog, Jim asked about Store Bundles:

    *  Do you use bundles?
    * If so, how do you use them, and why?
    * If setting explicit pre-reqs was easier, would you still use
bundles?

I do use bundles.

I use nested bundles with an outer master bundle for every project.

Even if setting preq versions were easier I probably still use bundles.
I like the explicit containment.

--
Make the most of your skills - with OpenSkills
http://www.openskills.org/
_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
 
--------------------------------------------------------
This message may contain confidential information and is intended for specific recipients unless explicitly noted otherwise. If you have reason to believe you are not an intended recipient of this message, please delete it and notify the sender. This message may not represent the opinion of IntercontinentalExchange, Inc. (ICE), its subsidiaries or affiliates, and does not constitute a contract or guarantee. Unencrypted electronic mail is not secure and the recipient of this message is expected to provide safeguards from viruses and pursue alternate means of communication where privacy or a binding message is desired.

_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
Reply | Threaded
Open this post in threaded view
|

Re: [vwnc] Bundles

Paul Baumann
In reply to this post by Andre Schnoor

<Andre_wrote>
I would love to see a menu item "Make Bundle Snapshot" that accomplishes all this automatically in one go (especially setting all prerequisite versions and publishing required base packages, if changed). This could also be an option in the "Publish" dialog.

I still envy those who successfully manage to keep released products along with development streams in the same repository over a long period of time. Those many "Merge", "Compare" and "Reconcile" dialogs and confirmaton messages always confused me and I did not yet have the time to really understand the workflow and basic concept through experimentation. IMO this is a steep learning curve that could be flattened a lot, if the user interface was aggregated into a single "Store Browser" with tabs that includes it all in one place very much like the System Browser.

Andre
</Andre_wrote>

At Smalltalk Solutions '08 I'll be presenting and releasing a new GemKit version that also comes with "Release Assistant" tools. It automates work that used to take hours a day. We've used it to manage changes on as many as five concurrent development streams. It has rather unique features like reparenting and partial merges. It will be a free download.

Paul Baumann



 

This message may contain confidential information and is intended for specific recipients unless explicitly noted otherwise. If you have reason to believe you are not an intended recipient of this message, please delete it and notify the sender. This message may not represent the opinion of IntercontinentalExchange, Inc. (ICE), its subsidiaries or affiliates, and does not constitute a contract or guarantee. Unencrypted electronic mail is not secure and the recipient of this message is expected to provide safeguards from viruses and pursue alternate means of communication where privacy or a binding message is desired.


_______________________________________________
vwnc mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/vwnc
12