Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Zope: Dev

"ZTK" futures: one big package?

 

 

First page Previous page 1 2 Next page Last page  View All Zope dev RSS feed   Index | Next | Previous | View Threaded


chrism at plope

May 10, 2009, 1:21 PM

Post #1 of 41 (1902 views)
Permalink
"ZTK" futures: one big package?

I was just thinking about the future of the "ZTK", and in the past I have argued
for not attempting to version the entire set of packages that currently
comprises Zope 3 over time as "ZTK releases". Instead, I have argued for
promoting packages that have some life of their own (independent of the rest of
the pile) into subprojects that have their own release cycles. Then outside
projects such as Plone and Grok could depend on independent versions of such
packages, giving them slightly more flexibility than requiring a "version of the
ZTK".

Given that this suggestion has been met with skepticism, let me try another
tact. Instead of thinking about it this way, could we think about it as
*deflating* the current set of zope.* packages that do not currently have a
meaningful life of their own into a single setuptools distribution named "ZTK".
This package would include most everything in zope.app*, plus things like
zope.server, zope.publisher, and other things that just aren't useful outside of
Zope-the-appserver, or which currently just depend on "too much".

This "ZTK" distribution would *not* include packages that already have a life of
their own outside Zope such as zope.interface, zope.component,
zope.configuration, zope.proxy, ZODB, etc. These packages would continue to
have their own release cycles.

Over time, we'd tease out the dependencies of packages that live in the ZTK
distribution, making them useful outside without any dependency on the ZTK. The
names of these packages could be arbitrary (they wouldn't need to retain their
old "zope.*" names). Some backwards dependency shims would be added to the ZTK
to prevent old imports from breaking, and the ZTK distribution would then just
have a dependency on the thing that got broken out.

I'm thinking that this would simplify things greatly for people who want to be
consumers of "truly independent" Zope packages. There'd be exactly N of them
available for download (where N is much less than 100, more like 20), plus the
ZTK, which would have the rest of the pile in it over time. If someone wanted
to use a forked version of a package that lived in the ZTK distribution, they'd
either do so by teasing out the dependencies and making it "truly independent"
or they'd just reroll a custom version of the entire ZTK distribution.

Does this make any sense?

- C


- C
_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


chris at simplistix

May 10, 2009, 5:50 PM

Post #2 of 41 (1858 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

Chris McDonough wrote:
> Given that this suggestion has been met with skepticism, let me try another
> tact. Instead of thinking about it this way, could we think about it as
> *deflating* the current set of zope.* packages that do not currently have a
> meaningful life of their own into a single setuptools distribution named "ZTK".
>
> This "ZTK" distribution would *not* include packages that already have a life of
> their own outside Zope such as zope.interface, zope.component,
> zope.configuration, zope.proxy, ZODB, etc. These packages would continue to
> have their own release cycles.

Yay! Big +1 from me...

> Over time, we'd tease out the dependencies of packages that live in the ZTK
> distribution, making them useful outside without any dependency on the ZTK. The
> names of these packages could be arbitrary (they wouldn't need to retain their
> old "zope.*" names). Some backwards dependency shims would be added to the ZTK
> to prevent old imports from breaking, and the ZTK distribution would then just
> have a dependency on the thing that got broken out.

Well, if they just used their old zope.* names, no shims would be
needed, right? If it works, don't break it so it doesn't work ;-)

> I'm thinking that this would simplify things greatly for people who want to be
> consumers of "truly independent" Zope packages. There'd be exactly N of them
> available for download (where N is much less than 100, more like 20), plus the
> ZTK, which would have the rest of the pile in it over time. If someone wanted
> to use a forked version of a package that lived in the ZTK distribution, they'd
> either do so by teasing out the dependencies and making it "truly independent"
> or they'd just reroll a custom version of the entire ZTK distribution.
>
> Does this make any sense?

yes, totally in agreement.

Chris

--
Simplistix - Content Management, Zope & Python Consulting
- http://www.simplistix.co.uk
_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


chrism at plope

May 10, 2009, 6:07 PM

Post #3 of 41 (1861 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

On 5/10/09 8:50 PM, Chris Withers wrote:
>> Over time, we'd tease out the dependencies of packages that live in
>> the ZTK distribution, making them useful outside without any
>> dependency on the ZTK. The names of these packages could be arbitrary
>> (they wouldn't need to retain their old "zope.*" names). Some
>> backwards dependency shims would be added to the ZTK to prevent old
>> imports from breaking, and the ZTK distribution would then just have a
>> dependency on the thing that got broken out.
>
> Well, if they just used their old zope.* names, no shims would be
> needed, right? If it works, don't break it so it doesn't work ;-)

When possible, sure. The situation I'm thinking about in particular when
suggesting that we could rename some things is that the current *structure* of
packaging is pretty messed up in some cases (zope.publisher vs.
zope.app.publisher, or z3c.form vs. zope.formlib, for instance). It might make
sense to reshuffle code around that currently lives in separate packages into a
single more external logical library or framework that might have aspects of all
of the individual packages without needing to carry along the baggage of the old
packaging structure. When we move it out, it could have an arbitrary name and
an arbitrary structure; shims could exist in the old locations within the ZTK to
keep old code running.

- C
_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


faassen at startifact

May 11, 2009, 8:11 AM

Post #4 of 41 (1836 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

Hey,

Chris McDonough wrote:

> Instead, I have argued for promoting packages that have some life of
> their own (independent of the rest of the pile) into subprojects that
> have their own release cycles.

> Then outside projects such as Plone and Grok could depend on
> independent versions of such packages, giving them slightly more
> flexibility than requiring a "version of the ZTK".

We already have that flexibility today. To me, the utility of a release
of version numbers in the ZTK does not at all exclude the potential to
evolve the packages to more independent sub-projects.

> Given that this suggestion has been met with skepticism, let me try another
> tact.

I think that's an inaccurate description of the response you got. I'm
quite positive about trying to give as many packages as possible a life
of their own. I don't think you got anyone else arguing against this
point of view.

I'm also quite positive that some packages are:

* useful as independently distributed packages

* only make sense in a Zope 3 or a Grok or a Zope 2 context, i.e. they
depend on a significant set of Zope packages.

I'd like to get out of this paradigm:

* the Zope packages are independent sub-projects.

* therefore we cannot distribute a list of versions that work best together.

And this one:

* if we distribute a KGS of anything

* packages in that anything aren't independently reusable automatically
and should be merged into a ball.

I'd also like to get out of the following paradigm:

* the Zope packages are not independently reusable yet

* therefore we should distribute them all together

We're in a grey area. Some package are here, some packages are there,
some are in between. Some packages build on other packages, but have
clear dependency structures. Some don't have clear dependency
structures. Some have better documentation and better focus than others.

If there is to be a merging of code together, then I propose we continue
the project where the ZMI code is merged into one or a few packages. We
can also investigate merging 2 or 3 packages together where it seems to
make sense, or simply moving code between packages (some code needs to
go down the dependency list, some up).

> Instead of thinking about it this way, could we think about it as
> *deflating* the current set of zope.* packages that do not currently have a
> meaningful life of their own into a single setuptools distribution named "ZTK".
> This package would include most everything in zope.app*, plus things like
> zope.server, zope.publisher, and other things that just aren't useful outside of
> Zope-the-appserver, or which currently just depend on "too much".

-1

This would make it a lot harder to:

* clean up dependency relationships with the goal of creating more
reusable code. We'd all hide them in a sumo ball again.

* get rid of bits we *don't want anymore*. If I need anything in a sumo
package I'd need *all* of it.

* override individual packages with newer versions

* we've done a lot of refactoring recently trying to separate the UI
from packages. This is done by creating a *new* package, leaving the old
package behind. We can do this, test this and release this
package-by-package now.

> Over time, we'd tease out the dependencies of packages that live in the ZTK
> distribution, making them useful outside without any dependency on the ZTK. The
> names of these packages could be arbitrary (they wouldn't need to retain their
> old "zope.*" names). Some backwards dependency shims would be added to the ZTK
> to prevent old imports from breaking, and the ZTK distribution would then just
> have a dependency on the thing that got broken out.

I don't like the attempt to redefine what the ZTK means to a giant ball
of Python packages. That's implying that, say, zope.component is *not*
in the ZTK. That's wrong.

Why generate a whole lot of work for ourselves getting from where we are
now to here? We've learned how to work with the current situation in
2007 already.

> I'm thinking that this would simplify things greatly for people who want to be
> consumers of "truly independent" Zope packages. There'd be exactly N of them
> available for download (where N is much less than 100, more like 20), plus the
> ZTK, which would have the rest of the pile in it over time.

I don't see why a big package would "simplify things greatly" for you or
anyone else.

> If someone wanted
> to use a forked version of a package that lived in the ZTK distribution, they'd
> either do so by teasing out the dependencies and making it "truly independent"
> or they'd just reroll a custom version of the entire ZTK distribution.

And that's easier than the current situation how? Are you really
proposing we destroy the dependency information we've already teased out
and then make people do the work again?

> Does this make any sense?

Not a lot in my book.

I think an important reason why there's so much awareness of dependency
issues in the Zope world now (and effort spent on it) is precisely
because we released our separate packages and can see the dependency
information clearly.

Regards,

Martijn

_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


faassen at startifact

May 11, 2009, 9:13 AM

Post #5 of 41 (1839 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

Hey,

After reading this, I thought of one benefit that having a "larger"
package would have: it's somewhat easier to refactor for dependencies,
because all the code will be in a single checkout and all the tests can
be run together, and the fixed release can go out as a single release.

Having done some dependency refactoring I can see the benefit of that,
but I also think it is not a great benefit given the capabilities of
buildout-driven development and some of the tools we have (such as
compattest). We'd certainly give up a lot just to gain that benefit.

Regards,

Martijn


_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


chrism at plope

May 11, 2009, 9:17 AM

Post #6 of 41 (1842 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

A couple of things:

- If it helps to think of this thing as not-the-ZTK, that's fine. I don't care
what it's called. Maybe "the ZTK" is another package that depends on this big
thing plus all the broken out bits.

- There's very little work to doing this. You make an SVN directory that has
externals pointing at each of these packages, write a setup.py that includes
them all, and ship it.

- I'm not proposing that we "destroy" existing dependency info. I'm just saying
that sometimes it doesn't matter. Some of the bits we're trying to make useful
independendently don't make sense to make independent of each other:
zope.app.principalannotation, zope.app.dublincore, zope.app.ftp, zope.site,
zope.copypastemove, and so forth. It seems to me very silly to continue
pretending that these could ever have a meaningful life of their own.

- There's nothing precious about the current packaging structure *except* for
backwards compatibility. The original egg-ification of Zope 3 was a largely
mechanical procedure. I hope you'd agree that if we had it all to do over
again, there would be far fewer setuptools distributions; each would provide
some bit of logical functionality instead of happening to be a directory in SVN.

- I don't disagree that this large distribution has to *depend* on
zope.component/zope.interface etc. It's just in a structure where the large
distribution becomes a set of packages that can't have their dependencies teased
apart (distributed as a sngle setuptools distribution), it falls out that it's
"not part of the large distribution", just a dependency of it.

I think at some point it's best to just declare defeat, realize that the current
packaging structure and distribution strategy is very artificial, realize that
the granularity that the 100+ egg strategy gets for us is way, way too granular,
and package up the bits that really don't *need* to have a life of their own
into some large setuptools distribution.

I don't really care if that thing is called "the ZTK", just that it exists. If
later it turns out that some piece of functionality in that distribution *is*
useful outside, we take it out, make sure it doesn't depend on anything in the
large distribution, and make the large distribution depend on it.

Another thing is this: even if we're successful in teasing out dependency info
so we do have a collection of truly independently useful things, after it's all
over, we're going to get to a point one way or another where we make a big
package of stuff that just can't have its dependencies teased apart because it
*really is just one thing*. Why *not* just do it now?

- C

On 5/11/09 11:11 AM, Martijn Faassen wrote:
> Hey,
>
> Chris McDonough wrote:
>
> > Instead, I have argued for promoting packages that have some life of
> > their own (independent of the rest of the pile) into subprojects that
> > have their own release cycles.
>
> > Then outside projects such as Plone and Grok could depend on
> > independent versions of such packages, giving them slightly more
> > flexibility than requiring a "version of the ZTK".
>
> We already have that flexibility today. To me, the utility of a release
> of version numbers in the ZTK does not at all exclude the potential to
> evolve the packages to more independent sub-projects.
>
>> Given that this suggestion has been met with skepticism, let me try another
>> tact.
>
> I think that's an inaccurate description of the response you got. I'm
> quite positive about trying to give as many packages as possible a life
> of their own. I don't think you got anyone else arguing against this
> point of view.
>
> I'm also quite positive that some packages are:
>
> * useful as independently distributed packages
>
> * only make sense in a Zope 3 or a Grok or a Zope 2 context, i.e. they
> depend on a significant set of Zope packages.
>
> I'd like to get out of this paradigm:
>
> * the Zope packages are independent sub-projects.
>
> * therefore we cannot distribute a list of versions that work best together.
>
> And this one:
>
> * if we distribute a KGS of anything
>
> * packages in that anything aren't independently reusable automatically
> and should be merged into a ball.
>
> I'd also like to get out of the following paradigm:
>
> * the Zope packages are not independently reusable yet
>
> * therefore we should distribute them all together
>
> We're in a grey area. Some package are here, some packages are there,
> some are in between. Some packages build on other packages, but have
> clear dependency structures. Some don't have clear dependency
> structures. Some have better documentation and better focus than others.
>
> If there is to be a merging of code together, then I propose we continue
> the project where the ZMI code is merged into one or a few packages. We
> can also investigate merging 2 or 3 packages together where it seems to
> make sense, or simply moving code between packages (some code needs to
> go down the dependency list, some up).
>
>> Instead of thinking about it this way, could we think about it as
>> *deflating* the current set of zope.* packages that do not currently have a
>> meaningful life of their own into a single setuptools distribution named "ZTK".
>> This package would include most everything in zope.app*, plus things like
>> zope.server, zope.publisher, and other things that just aren't useful outside of
>> Zope-the-appserver, or which currently just depend on "too much".
>
> -1
>
> This would make it a lot harder to:
>
> * clean up dependency relationships with the goal of creating more
> reusable code. We'd all hide them in a sumo ball again.
>
> * get rid of bits we *don't want anymore*. If I need anything in a sumo
> package I'd need *all* of it.
>
> * override individual packages with newer versions
>
> * we've done a lot of refactoring recently trying to separate the UI
> from packages. This is done by creating a *new* package, leaving the old
> package behind. We can do this, test this and release this
> package-by-package now.
>
>> Over time, we'd tease out the dependencies of packages that live in the ZTK
>> distribution, making them useful outside without any dependency on the ZTK. The
>> names of these packages could be arbitrary (they wouldn't need to retain their
>> old "zope.*" names). Some backwards dependency shims would be added to the ZTK
>> to prevent old imports from breaking, and the ZTK distribution would then just
>> have a dependency on the thing that got broken out.
>
> I don't like the attempt to redefine what the ZTK means to a giant ball
> of Python packages. That's implying that, say, zope.component is *not*
> in the ZTK. That's wrong.
>
> Why generate a whole lot of work for ourselves getting from where we are
> now to here? We've learned how to work with the current situation in
> 2007 already.
>
>> I'm thinking that this would simplify things greatly for people who want to be
>> consumers of "truly independent" Zope packages. There'd be exactly N of them
>> available for download (where N is much less than 100, more like 20), plus the
>> ZTK, which would have the rest of the pile in it over time.
>
> I don't see why a big package would "simplify things greatly" for you or
> anyone else.
>
>> If someone wanted
>> to use a forked version of a package that lived in the ZTK distribution, they'd
>> either do so by teasing out the dependencies and making it "truly independent"
>> or they'd just reroll a custom version of the entire ZTK distribution.
>
> And that's easier than the current situation how? Are you really
> proposing we destroy the dependency information we've already teased out
> and then make people do the work again?
>
>> Does this make any sense?
>
> Not a lot in my book.
>
> I think an important reason why there's so much awareness of dependency
> issues in the Zope world now (and effort spent on it) is precisely
> because we released our separate packages and can see the dependency
> information clearly.
>
> Regards,
>
> Martijn
>
> _______________________________________________
> Zope-Dev maillist - Zope-Dev [at] zope
> http://mail.zope.org/mailman/listinfo/zope-dev
> ** No cross posts or HTML encoding! **
> (Related lists -
> http://mail.zope.org/mailman/listinfo/zope-announce
> http://mail.zope.org/mailman/listinfo/zope )
>

_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


chrism at plope

May 12, 2009, 12:08 AM

Post #7 of 41 (1828 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

I realize now that I've neglected to give sufficient reasoning for why less
granular packaging would be a good thing.

I've noticed that there's a common theme in Zope development, software, and
packages that I can only describe as "power law development" or "turtles all the
way down". It's a bit of an antipattern, unfortunately.

I'll provide an example by way of Zope-3-the-appserver. In an application that
uses Zope-3-the-appserver, many individual subframeworks will be used. For
example, there is a traversal subframework, a security subframework, a
cataloging subframework, and so on.

Each of these subframeworks acts as a logical unit, and through the magic of the
component architecture, each can be replaced wholesale by registering some
adapter. However, each of these subframeworks tend to also have settings that
can be configured. For example, individual traversal steps for certain types of
objects can be overridden by registering an adapter that *configures* the
subframework. In the case of Zope 3, we have a traversal situation where the
larger traversal subframework can either be replaced wholesale via an adapter
registration or extended piecemeal via other adapter registrations.

The problem is that the mechanism to *replace* the subframework is the same as
the mechanism to *configure* it (both are done via adapter registration,
sometimes even in the same file). This is theoretically fine. But in reality,
it's tremendously hard for someone just walking up to a complex system like Zope
3 to discern adapter registrations that replace subsystems from those which
merely configure subsystems. An inability to discern the difference leads to
situations where people just "don't get the joke" and try to wiggle wires to
configure-to-death a existing subsystem that's clearly suboptimal for their use
case instead of just replacing it wholesale with a much simpler custom policy.
They just don't know it was engineered to be replaced. So they keep adding more
configuration code to the existing subframework to handle various 1% edge cases.
Often this code makes the subframework tremendously complex, and the
subframework grows inappropriate dependencies along the way. *Sometimes* the
situation gets so confusing for a new user, they just quit and go use something
else.

This is a pattern that happens over and over again in Zope development. In my
personal opinion, the original error was trying to make the subframework
configurable at all. Instead, the subframework should be replaceable easily,
but it should itself be relatively rigid. At very least, for subframeworks that
really do require extra configuration (should be very few), this configuration
should be done via highly specialized ZCML directives (or grokkers), as opposed
to some very general adapter registration that can't be easily discerned from
other adapter registrations by a newbie.

If the subframeworks were more rigid (but replaceable), the *intent* of the
subframework author could be more easily discerned, and fewer people would fall
into the trap of adding more configuration code to a subframework instead of
just replacing it entirely. And fewer people would just walk away in frustration.

What does this have to do with packaging? Well, currently, there's a dizzying
number of packages that make up "the ZTK" (nee "Zope 3"). Each of these
packages is a pure peer of all others in a PyPI listing with no real way to get
a sense of their relative importance other than performing a linear audit. Even
if a user *does* do a linear search of all of them, it's still awful hard to
discern for some new user which ones are "important", and which ones just happen
to exist by some inequity of history without trying to install it. The user
needs to gain some holistic knowledge of the system in order to discern the
important bits from these historical inequities.

Most new users understandably just walk away from *all* Zope packages before
they gain this knowledge; it's just too hard for them to tell the difference
between the truly important and reusable bits and the stuff that just happens to
be packaged up and released but which is useless outside of some highly specific
context. In effect, we just don't communicate *intent* very effectively in our
current packaging structure.

In my opinion, this is why a lot of Python developers who are otherwise very
smart have given up on trying to use Zope packages. The time required to figure
out which ones are useful and which ones aren't is just too high. It's way
"easier" for them to write them all off wholesale and just write what they need
from scratch or use somebody else's software. Good developers tend to like
small, useful libraries and frameworks.

We can ameliorate the situation in a few ways:

- We can reduce the number of distributions.

- We can make each current Zope package distribution independently useful.

My suggestion is that we do the former first in order to communicate *current
intent* (the "state of reality right now"). We can do the latter after this in
pieces, hopefully aided by some new developers we've picked up by making it
easier to find useful stuff.

Once we deflate our current set of packages down to a reasonable number, the
packages listed in PyPI will immediately start to reflect "the state of reality
right now". As a result, we'll hopefully be able to get some new blood in the
form of new developers that use the smaller bits outside Zope to help us tease
the truly independent pieces out of the larger pile. If we do this, at no time
after the deflation will PyPI listings ever as badly advertise "the state of
reality" as it is advertised right now, and the community will hopefully again
start to grow.

- C


On 5/11/09 11:11 AM, Martijn Faassen wrote:
> Hey,
>
> Chris McDonough wrote:
>
> > Instead, I have argued for promoting packages that have some life of
> > their own (independent of the rest of the pile) into subprojects that
> > have their own release cycles.
>
> > Then outside projects such as Plone and Grok could depend on
> > independent versions of such packages, giving them slightly more
> > flexibility than requiring a "version of the ZTK".
>
> We already have that flexibility today. To me, the utility of a release
> of version numbers in the ZTK does not at all exclude the potential to
> evolve the packages to more independent sub-projects.
>
>> Given that this suggestion has been met with skepticism, let me try another
>> tact.
>
> I think that's an inaccurate description of the response you got. I'm
> quite positive about trying to give as many packages as possible a life
> of their own. I don't think you got anyone else arguing against this
> point of view.
>
> I'm also quite positive that some packages are:
>
> * useful as independently distributed packages
>
> * only make sense in a Zope 3 or a Grok or a Zope 2 context, i.e. they
> depend on a significant set of Zope packages.
>
> I'd like to get out of this paradigm:
>
> * the Zope packages are independent sub-projects.
>
> * therefore we cannot distribute a list of versions that work best together.
>
> And this one:
>
> * if we distribute a KGS of anything
>
> * packages in that anything aren't independently reusable automatically
> and should be merged into a ball.
>
> I'd also like to get out of the following paradigm:
>
> * the Zope packages are not independently reusable yet
>
> * therefore we should distribute them all together
>
> We're in a grey area. Some package are here, some packages are there,
> some are in between. Some packages build on other packages, but have
> clear dependency structures. Some don't have clear dependency
> structures. Some have better documentation and better focus than others.
>
> If there is to be a merging of code together, then I propose we continue
> the project where the ZMI code is merged into one or a few packages. We
> can also investigate merging 2 or 3 packages together where it seems to
> make sense, or simply moving code between packages (some code needs to
> go down the dependency list, some up).
>
>> Instead of thinking about it this way, could we think about it as
>> *deflating* the current set of zope.* packages that do not currently have a
>> meaningful life of their own into a single setuptools distribution named "ZTK".
>> This package would include most everything in zope.app*, plus things like
>> zope.server, zope.publisher, and other things that just aren't useful outside of
>> Zope-the-appserver, or which currently just depend on "too much".
>
> -1
>
> This would make it a lot harder to:
>
> * clean up dependency relationships with the goal of creating more
> reusable code. We'd all hide them in a sumo ball again.
>
> * get rid of bits we *don't want anymore*. If I need anything in a sumo
> package I'd need *all* of it.
>
> * override individual packages with newer versions
>
> * we've done a lot of refactoring recently trying to separate the UI
> from packages. This is done by creating a *new* package, leaving the old
> package behind. We can do this, test this and release this
> package-by-package now.
>
>> Over time, we'd tease out the dependencies of packages that live in the ZTK
>> distribution, making them useful outside without any dependency on the ZTK. The
>> names of these packages could be arbitrary (they wouldn't need to retain their
>> old "zope.*" names). Some backwards dependency shims would be added to the ZTK
>> to prevent old imports from breaking, and the ZTK distribution would then just
>> have a dependency on the thing that got broken out.
>
> I don't like the attempt to redefine what the ZTK means to a giant ball
> of Python packages. That's implying that, say, zope.component is *not*
> in the ZTK. That's wrong.
>
> Why generate a whole lot of work for ourselves getting from where we are
> now to here? We've learned how to work with the current situation in
> 2007 already.
>
>> I'm thinking that this would simplify things greatly for people who want to be
>> consumers of "truly independent" Zope packages. There'd be exactly N of them
>> available for download (where N is much less than 100, more like 20), plus the
>> ZTK, which would have the rest of the pile in it over time.
>
> I don't see why a big package would "simplify things greatly" for you or
> anyone else.
>
>> If someone wanted
>> to use a forked version of a package that lived in the ZTK distribution, they'd
>> either do so by teasing out the dependencies and making it "truly independent"
>> or they'd just reroll a custom version of the entire ZTK distribution.
>
> And that's easier than the current situation how? Are you really
> proposing we destroy the dependency information we've already teased out
> and then make people do the work again?
>
>> Does this make any sense?
>
> Not a lot in my book.
>
> I think an important reason why there's so much awareness of dependency
> issues in the Zope world now (and effort spent on it) is precisely
> because we released our separate packages and can see the dependency
> information clearly.
>
> Regards,
>
> Martijn
>
> _______________________________________________
> Zope-Dev maillist - Zope-Dev [at] zope
> http://mail.zope.org/mailman/listinfo/zope-dev
> ** No cross posts or HTML encoding! **
> (Related lists -
> http://mail.zope.org/mailman/listinfo/zope-announce
> http://mail.zope.org/mailman/listinfo/zope )
>

_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


robert at redcor

May 12, 2009, 1:16 AM

Post #8 of 41 (1834 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

chris
you have *exactly* mirrored my feelings as a longtime zope2 user/application
developer getting in touch with plone3/five.
now after a year digging in it I still am not free of it

thanks a lot
robert

Chris McDonough schrieb:
> I realize now that I've neglected to give sufficient reasoning for why less
> granular packaging would be a good thing.
>
> I've noticed that there's a common theme in Zope development, software, and
> packages that I can only describe as "power law development" or "turtles all the
> way down". It's a bit of an antipattern, unfortunately.
>
> I'll provide an example by way of Zope-3-the-appserver. In an application that
> uses Zope-3-the-appserver, many individual subframeworks will be used. For
> example, there is a traversal subframework, a security subframework, a
> cataloging subframework, and so on.
>
> Each of these subframeworks acts as a logical unit, and through the magic of the
> component architecture, each can be replaced wholesale by registering some
> adapter. However, each of these subframeworks tend to also have settings that
> can be configured. For example, individual traversal steps for certain types of
> objects can be overridden by registering an adapter that *configures* the
> subframework. In the case of Zope 3, we have a traversal situation where the
> larger traversal subframework can either be replaced wholesale via an adapter
> registration or extended piecemeal via other adapter registrations.
>
> The problem is that the mechanism to *replace* the subframework is the same as
> the mechanism to *configure* it (both are done via adapter registration,
> sometimes even in the same file). This is theoretically fine. But in reality,
> it's tremendously hard for someone just walking up to a complex system like Zope
> 3 to discern adapter registrations that replace subsystems from those which
> merely configure subsystems. An inability to discern the difference leads to
> situations where people just "don't get the joke" and try to wiggle wires to
> configure-to-death a existing subsystem that's clearly suboptimal for their use
> case instead of just replacing it wholesale with a much simpler custom policy.
> They just don't know it was engineered to be replaced. So they keep adding more
> configuration code to the existing subframework to handle various 1% edge cases.
> Often this code makes the subframework tremendously complex, and the
> subframework grows inappropriate dependencies along the way. *Sometimes* the
> situation gets so confusing for a new user, they just quit and go use something
> else.
>
> This is a pattern that happens over and over again in Zope development. In my
> personal opinion, the original error was trying to make the subframework
> configurable at all. Instead, the subframework should be replaceable easily,
> but it should itself be relatively rigid. At very least, for subframeworks that
> really do require extra configuration (should be very few), this configuration
> should be done via highly specialized ZCML directives (or grokkers), as opposed
> to some very general adapter registration that can't be easily discerned from
> other adapter registrations by a newbie.
>
> If the subframeworks were more rigid (but replaceable), the *intent* of the
> subframework author could be more easily discerned, and fewer people would fall
> into the trap of adding more configuration code to a subframework instead of
> just replacing it entirely. And fewer people would just walk away in frustration.
>
> What does this have to do with packaging? Well, currently, there's a dizzying
> number of packages that make up "the ZTK" (nee "Zope 3"). Each of these
> packages is a pure peer of all others in a PyPI listing with no real way to get
> a sense of their relative importance other than performing a linear audit. Even
> if a user *does* do a linear search of all of them, it's still awful hard to
> discern for some new user which ones are "important", and which ones just happen
> to exist by some inequity of history without trying to install it. The user
> needs to gain some holistic knowledge of the system in order to discern the
> important bits from these historical inequities.
>
> Most new users understandably just walk away from *all* Zope packages before
> they gain this knowledge; it's just too hard for them to tell the difference
> between the truly important and reusable bits and the stuff that just happens to
> be packaged up and released but which is useless outside of some highly specific
> context. In effect, we just don't communicate *intent* very effectively in our
> current packaging structure.
>
> In my opinion, this is why a lot of Python developers who are otherwise very
> smart have given up on trying to use Zope packages. The time required to figure
> out which ones are useful and which ones aren't is just too high. It's way
> "easier" for them to write them all off wholesale and just write what they need
> from scratch or use somebody else's software. Good developers tend to like
> small, useful libraries and frameworks.
>
> We can ameliorate the situation in a few ways:
>
> - We can reduce the number of distributions.
>
> - We can make each current Zope package distribution independently useful.
>
> My suggestion is that we do the former first in order to communicate *current
> intent* (the "state of reality right now"). We can do the latter after this in
> pieces, hopefully aided by some new developers we've picked up by making it
> easier to find useful stuff.
>
> Once we deflate our current set of packages down to a reasonable number, the
> packages listed in PyPI will immediately start to reflect "the state of reality
> right now". As a result, we'll hopefully be able to get some new blood in the
> form of new developers that use the smaller bits outside Zope to help us tease
> the truly independent pieces out of the larger pile. If we do this, at no time
> after the deflation will PyPI listings ever as badly advertise "the state of
> reality" as it is advertised right now, and the community will hopefully again
> start to grow.
>
> - C
>
>
> On 5/11/09 11:11 AM, Martijn Faassen wrote:
>> Hey,
>>
>> Chris McDonough wrote:
>>
>> > Instead, I have argued for promoting packages that have some life of
>> > their own (independent of the rest of the pile) into subprojects that
>> > have their own release cycles.
>>
>> > Then outside projects such as Plone and Grok could depend on
>> > independent versions of such packages, giving them slightly more
>> > flexibility than requiring a "version of the ZTK".
>>
>> We already have that flexibility today. To me, the utility of a release
>> of version numbers in the ZTK does not at all exclude the potential to
>> evolve the packages to more independent sub-projects.
>>
>>> Given that this suggestion has been met with skepticism, let me try another
>>> tact.
>> I think that's an inaccurate description of the response you got. I'm
>> quite positive about trying to give as many packages as possible a life
>> of their own. I don't think you got anyone else arguing against this
>> point of view.
>>
>> I'm also quite positive that some packages are:
>>
>> * useful as independently distributed packages
>>
>> * only make sense in a Zope 3 or a Grok or a Zope 2 context, i.e. they
>> depend on a significant set of Zope packages.
>>
>> I'd like to get out of this paradigm:
>>
>> * the Zope packages are independent sub-projects.
>>
>> * therefore we cannot distribute a list of versions that work best together.
>>
>> And this one:
>>
>> * if we distribute a KGS of anything
>>
>> * packages in that anything aren't independently reusable automatically
>> and should be merged into a ball.
>>
>> I'd also like to get out of the following paradigm:
>>
>> * the Zope packages are not independently reusable yet
>>
>> * therefore we should distribute them all together
>>
>> We're in a grey area. Some package are here, some packages are there,
>> some are in between. Some packages build on other packages, but have
>> clear dependency structures. Some don't have clear dependency
>> structures. Some have better documentation and better focus than others.
>>
>> If there is to be a merging of code together, then I propose we continue
>> the project where the ZMI code is merged into one or a few packages. We
>> can also investigate merging 2 or 3 packages together where it seems to
>> make sense, or simply moving code between packages (some code needs to
>> go down the dependency list, some up).
>>
>>> Instead of thinking about it this way, could we think about it as
>>> *deflating* the current set of zope.* packages that do not currently have a
>>> meaningful life of their own into a single setuptools distribution named "ZTK".
>>> This package would include most everything in zope.app*, plus things like
>>> zope.server, zope.publisher, and other things that just aren't useful outside of
>>> Zope-the-appserver, or which currently just depend on "too much".
>> -1
>>
>> This would make it a lot harder to:
>>
>> * clean up dependency relationships with the goal of creating more
>> reusable code. We'd all hide them in a sumo ball again.
>>
>> * get rid of bits we *don't want anymore*. If I need anything in a sumo
>> package I'd need *all* of it.
>>
>> * override individual packages with newer versions
>>
>> * we've done a lot of refactoring recently trying to separate the UI
>> from packages. This is done by creating a *new* package, leaving the old
>> package behind. We can do this, test this and release this
>> package-by-package now.
>>
>>> Over time, we'd tease out the dependencies of packages that live in the ZTK
>>> distribution, making them useful outside without any dependency on the ZTK. The
>>> names of these packages could be arbitrary (they wouldn't need to retain their
>>> old "zope.*" names). Some backwards dependency shims would be added to the ZTK
>>> to prevent old imports from breaking, and the ZTK distribution would then just
>>> have a dependency on the thing that got broken out.
>> I don't like the attempt to redefine what the ZTK means to a giant ball
>> of Python packages. That's implying that, say, zope.component is *not*
>> in the ZTK. That's wrong.
>>
>> Why generate a whole lot of work for ourselves getting from where we are
>> now to here? We've learned how to work with the current situation in
>> 2007 already.
>>
>>> I'm thinking that this would simplify things greatly for people who want to be
>>> consumers of "truly independent" Zope packages. There'd be exactly N of them
>>> available for download (where N is much less than 100, more like 20), plus the
>>> ZTK, which would have the rest of the pile in it over time.
>> I don't see why a big package would "simplify things greatly" for you or
>> anyone else.
>>
>>> If someone wanted
>>> to use a forked version of a package that lived in the ZTK distribution, they'd
>>> either do so by teasing out the dependencies and making it "truly independent"
>>> or they'd just reroll a custom version of the entire ZTK distribution.
>> And that's easier than the current situation how? Are you really
>> proposing we destroy the dependency information we've already teased out
>> and then make people do the work again?
>>
>>> Does this make any sense?
>> Not a lot in my book.
>>
>> I think an important reason why there's so much awareness of dependency
>> issues in the Zope world now (and effort spent on it) is precisely
>> because we released our separate packages and can see the dependency
>> information clearly.
>>
>> Regards,
>>
>> Martijn
>>
>> _______________________________________________
>> Zope-Dev maillist - Zope-Dev [at] zope
>> http://mail.zope.org/mailman/listinfo/zope-dev
>> ** No cross posts or HTML encoding! **
>> (Related lists -
>> http://mail.zope.org/mailman/listinfo/zope-announce
>> http://mail.zope.org/mailman/listinfo/zope )
>>
>
> _______________________________________________
> Zope-Dev maillist - Zope-Dev [at] zope
> http://mail.zope.org/mailman/listinfo/zope-dev
> ** No cross posts or HTML encoding! **
> (Related lists -
> http://mail.zope.org/mailman/listinfo/zope-announce
> http://mail.zope.org/mailman/listinfo/zope )
>
>

_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


do3ccqrv at googlemail

May 12, 2009, 1:44 AM

Post #9 of 41 (1831 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

Hi,

I agree with the package inflation. It makes people nervous of the
complexity.
But putting everything back into a pile of mud sounds like going back from
where we came, and I this situation makes people even more nervous when they
want to look into zope.
As far as I know, the big dependency clean up is not finished yet, no? Maybe
it might be better to do that first. With a clean dependency graph, its
easier to see, which set of packages could be merged into one package.
About the configurability of all the subpackages, I remember a proposal long
time ago to reduce the number of zcml directives. This time I am in favor of
inventing some zcml directives with some care. But before doing that, it
might be better to write two or free easy tutorials about how to write
custom zcml directives and grokkers. That would result in people writing
more custom zcml directives and grokkers and get the hang of it. With the a
much bigger userbase of writers of custom zcml directives and grokkers, the
community as a whole will get a much better idea of how to use zcml, and I
think gaining that community sense first will result in some high quality
new general usable zcml directives. At the moment, and with my limited view,
it looks like most zope ppl really don't know how to write custom zcml
directives.

Just my 0.02€

Best regards,

Patrick



On Tue, May 12, 2009 at 09:08, Chris McDonough <chrism [at] plope> wrote:

> I realize now that I've neglected to give sufficient reasoning for why less
> granular packaging would be a good thing.
>
> I've noticed that there's a common theme in Zope development, software, and
> packages that I can only describe as "power law development" or "turtles
> all the
> way down". It's a bit of an antipattern, unfortunately.
>
> I'll provide an example by way of Zope-3-the-appserver. In an application
> that
> uses Zope-3-the-appserver, many individual subframeworks will be used. For
> example, there is a traversal subframework, a security subframework, a
> cataloging subframework, and so on.
>
> Each of these subframeworks acts as a logical unit, and through the magic
> of the
> component architecture, each can be replaced wholesale by registering some
> adapter. However, each of these subframeworks tend to also have settings
> that
> can be configured. For example, individual traversal steps for certain
> types of
> objects can be overridden by registering an adapter that *configures* the
> subframework. In the case of Zope 3, we have a traversal situation where
> the
> larger traversal subframework can either be replaced wholesale via an
> adapter
> registration or extended piecemeal via other adapter registrations.
>
> The problem is that the mechanism to *replace* the subframework is the same
> as
> the mechanism to *configure* it (both are done via adapter registration,
> sometimes even in the same file). This is theoretically fine. But in
> reality,
> it's tremendously hard for someone just walking up to a complex system like
> Zope
> 3 to discern adapter registrations that replace subsystems from those which
> merely configure subsystems. An inability to discern the difference leads
> to
> situations where people just "don't get the joke" and try to wiggle wires
> to
> configure-to-death a existing subsystem that's clearly suboptimal for their
> use
> case instead of just replacing it wholesale with a much simpler custom
> policy.
> They just don't know it was engineered to be replaced. So they keep adding
> more
> configuration code to the existing subframework to handle various 1% edge
> cases.
> Often this code makes the subframework tremendously complex, and the
> subframework grows inappropriate dependencies along the way. *Sometimes*
> the
> situation gets so confusing for a new user, they just quit and go use
> something
> else.
>
> This is a pattern that happens over and over again in Zope development. In
> my
> personal opinion, the original error was trying to make the subframework
> configurable at all. Instead, the subframework should be replaceable
> easily,
> but it should itself be relatively rigid. At very least, for subframeworks
> that
> really do require extra configuration (should be very few), this
> configuration
> should be done via highly specialized ZCML directives (or grokkers), as
> opposed
> to some very general adapter registration that can't be easily discerned
> from
> other adapter registrations by a newbie.
>
> If the subframeworks were more rigid (but replaceable), the *intent* of the
> subframework author could be more easily discerned, and fewer people would
> fall
> into the trap of adding more configuration code to a subframework instead
> of
> just replacing it entirely. And fewer people would just walk away in
> frustration.
>
> What does this have to do with packaging? Well, currently, there's a
> dizzying
> number of packages that make up "the ZTK" (nee "Zope 3"). Each of these
> packages is a pure peer of all others in a PyPI listing with no real way to
> get
> a sense of their relative importance other than performing a linear audit.
> Even
> if a user *does* do a linear search of all of them, it's still awful hard
> to
> discern for some new user which ones are "important", and which ones just
> happen
> to exist by some inequity of history without trying to install it. The
> user
> needs to gain some holistic knowledge of the system in order to discern the
> important bits from these historical inequities.
>
> Most new users understandably just walk away from *all* Zope packages
> before
> they gain this knowledge; it's just too hard for them to tell the
> difference
> between the truly important and reusable bits and the stuff that just
> happens to
> be packaged up and released but which is useless outside of some highly
> specific
> context. In effect, we just don't communicate *intent* very effectively in
> our
> current packaging structure.
>
> In my opinion, this is why a lot of Python developers who are otherwise
> very
> smart have given up on trying to use Zope packages. The time required to
> figure
> out which ones are useful and which ones aren't is just too high. It's way
> "easier" for them to write them all off wholesale and just write what they
> need
> from scratch or use somebody else's software. Good developers tend to like
> small, useful libraries and frameworks.
>
> We can ameliorate the situation in a few ways:
>
> - We can reduce the number of distributions.
>
> - We can make each current Zope package distribution independently useful.
>
> My suggestion is that we do the former first in order to communicate
> *current
> intent* (the "state of reality right now"). We can do the latter after
> this in
> pieces, hopefully aided by some new developers we've picked up by making it
> easier to find useful stuff.
>
> Once we deflate our current set of packages down to a reasonable number,
> the
> packages listed in PyPI will immediately start to reflect "the state of
> reality
> right now". As a result, we'll hopefully be able to get some new blood in
> the
> form of new developers that use the smaller bits outside Zope to help us
> tease
> the truly independent pieces out of the larger pile. If we do this, at no
> time
> after the deflation will PyPI listings ever as badly advertise "the state
> of
> reality" as it is advertised right now, and the community will hopefully
> again
> start to grow.
>
> - C
>
>
> On 5/11/09 11:11 AM, Martijn Faassen wrote:
> > Hey,
> >
> > Chris McDonough wrote:
> >
> > > Instead, I have argued for promoting packages that have some life of
> > > their own (independent of the rest of the pile) into subprojects
> that
> > > have their own release cycles.
> >
> > > Then outside projects such as Plone and Grok could depend on
> > > independent versions of such packages, giving them slightly more
> > > flexibility than requiring a "version of the ZTK".
> >
> > We already have that flexibility today. To me, the utility of a release
> > of version numbers in the ZTK does not at all exclude the potential to
> > evolve the packages to more independent sub-projects.
> >
> >> Given that this suggestion has been met with skepticism, let me try
> another
> >> tact.
> >
> > I think that's an inaccurate description of the response you got. I'm
> > quite positive about trying to give as many packages as possible a life
> > of their own. I don't think you got anyone else arguing against this
> > point of view.
> >
> > I'm also quite positive that some packages are:
> >
> > * useful as independently distributed packages
> >
> > * only make sense in a Zope 3 or a Grok or a Zope 2 context, i.e. they
> > depend on a significant set of Zope packages.
> >
> > I'd like to get out of this paradigm:
> >
> > * the Zope packages are independent sub-projects.
> >
> > * therefore we cannot distribute a list of versions that work best
> together.
> >
> > And this one:
> >
> > * if we distribute a KGS of anything
> >
> > * packages in that anything aren't independently reusable automatically
> > and should be merged into a ball.
> >
> > I'd also like to get out of the following paradigm:
> >
> > * the Zope packages are not independently reusable yet
> >
> > * therefore we should distribute them all together
> >
> > We're in a grey area. Some package are here, some packages are there,
> > some are in between. Some packages build on other packages, but have
> > clear dependency structures. Some don't have clear dependency
> > structures. Some have better documentation and better focus than others.
> >
> > If there is to be a merging of code together, then I propose we continue
> > the project where the ZMI code is merged into one or a few packages. We
> > can also investigate merging 2 or 3 packages together where it seems to
> > make sense, or simply moving code between packages (some code needs to
> > go down the dependency list, some up).
> >
> >> Instead of thinking about it this way, could we think about it as
> >> *deflating* the current set of zope.* packages that do not currently
> have a
> >> meaningful life of their own into a single setuptools distribution named
> "ZTK".
> >> This package would include most everything in zope.app*, plus things
> like
> >> zope.server, zope.publisher, and other things that just aren't useful
> outside of
> >> Zope-the-appserver, or which currently just depend on "too much".
> >
> > -1
> >
> > This would make it a lot harder to:
> >
> > * clean up dependency relationships with the goal of creating more
> > reusable code. We'd all hide them in a sumo ball again.
> >
> > * get rid of bits we *don't want anymore*. If I need anything in a sumo
> > package I'd need *all* of it.
> >
> > * override individual packages with newer versions
> >
> > * we've done a lot of refactoring recently trying to separate the UI
> > from packages. This is done by creating a *new* package, leaving the old
> > package behind. We can do this, test this and release this
> > package-by-package now.
> >
> >> Over time, we'd tease out the dependencies of packages that live in the
> ZTK
> >> distribution, making them useful outside without any dependency on the
> ZTK. The
> >> names of these packages could be arbitrary (they wouldn't need to retain
> their
> >> old "zope.*" names). Some backwards dependency shims would be added to
> the ZTK
> >> to prevent old imports from breaking, and the ZTK distribution would
> then just
> >> have a dependency on the thing that got broken out.
> >
> > I don't like the attempt to redefine what the ZTK means to a giant ball
> > of Python packages. That's implying that, say, zope.component is *not*
> > in the ZTK. That's wrong.
> >
> > Why generate a whole lot of work for ourselves getting from where we are
> > now to here? We've learned how to work with the current situation in
> > 2007 already.
> >
> >> I'm thinking that this would simplify things greatly for people who want
> to be
> >> consumers of "truly independent" Zope packages. There'd be exactly N of
> them
> >> available for download (where N is much less than 100, more like 20),
> plus the
> >> ZTK, which would have the rest of the pile in it over time.
> >
> > I don't see why a big package would "simplify things greatly" for you or
> > anyone else.
> >
> >> If someone wanted
> >> to use a forked version of a package that lived in the ZTK distribution,
> they'd
> >> either do so by teasing out the dependencies and making it "truly
> independent"
> >> or they'd just reroll a custom version of the entire ZTK distribution.
> >
> > And that's easier than the current situation how? Are you really
> > proposing we destroy the dependency information we've already teased out
> > and then make people do the work again?
> >
> >> Does this make any sense?
> >
> > Not a lot in my book.
> >
> > I think an important reason why there's so much awareness of dependency
> > issues in the Zope world now (and effort spent on it) is precisely
> > because we released our separate packages and can see the dependency
> > information clearly.
> >
> > Regards,
> >
> > Martijn
> >
> > _______________________________________________
> > Zope-Dev maillist - Zope-Dev [at] zope
> > http://mail.zope.org/mailman/listinfo/zope-dev
> > ** No cross posts or HTML encoding! **
> > (Related lists -
> > http://mail.zope.org/mailman/listinfo/zope-announce
> > http://mail.zope.org/mailman/listinfo/zope )
> >
>
> _______________________________________________
> Zope-Dev maillist - Zope-Dev [at] zope
> http://mail.zope.org/mailman/listinfo/zope-dev
> ** No cross posts or HTML encoding! **
> (Related lists -
> http://mail.zope.org/mailman/listinfo/zope-announce
> http://mail.zope.org/mailman/listinfo/zope )
>


mborch at gmail

May 12, 2009, 1:48 AM

Post #10 of 41 (1832 views)
Permalink
Re: (no subject) [In reply to]

Chris McDonough <chrism <at> plope.com> writes:
> This is a pattern that happens over and over again in Zope
> development. In my personal opinion, the original error was trying
> to make the subframework configurable at all. Instead, the
> subframework should be replaceable easily, but it should itself be
> relatively rigid. At very least, for subframeworks that really do
> require extra configuration (should be very few), this configuration
> should be done via highly specialized ZCML directives (or grokkers),
> as opposed to some very general adapter registration that can't be
> easily discerned from other adapter registrations by a newbie.

I agree very much that the various default Zope components could be
much more rigid; this would make it easier to understand the
application flow and better realize when to subclass or replace.

If rigid means less configurable, then perhaps components could be
made flexible by better adapting to the objects given to them,
e.g. use the interfaces system to tell what kind of functionality
objects inhibit and provide flexibility through this route.

As such, instead of attempting to look up a custom traverser for an
object, ask the object "do you provide your own traversal
logic?". Instead of components being primarily pluggable, they could
be adaptive.

\malthe

_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


chrism at plope

May 12, 2009, 8:20 AM

Post #11 of 41 (1829 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

On 5/12/09 4:44 AM, Patrick Gerken wrote:
> Hi,
>
> I agree with the package inflation. It makes people nervous of the
> complexity.
> But putting everything back into a pile of mud sounds like going back
> from where we came, and I this situation makes people even more nervous
> when they want to look into zope.
> As far as I know, the big dependency clean up is not finished yet, no?
> Maybe it might be better to do that first. With a clean dependency
> graph, its easier to see, which set of packages could be merged into one
> package.

I don't think there will ever be a point where it's "finished"; at least not in
any time frame in which Zope is still relevant at the end. Sure, we can keep
the current setuptools distributions and keep pulling apart their respective
dependencies forever, but by the time it's all over, it just won't matter
anyway; folks will be happily using "Django 3000" or "Pylons 4", which will have
recreated all the features we teased out.

- C


> About the configurability of all the subpackages, I remember a proposal
> long time ago to reduce the number of zcml directives. This time I am in
> favor of inventing some zcml directives with some care. But before doing
> that, it might be better to write two or free easy tutorials about how
> to write custom zcml directives and grokkers. That would result in
> people writing more custom zcml directives and grokkers and get the hang
> of it. With the a much bigger userbase of writers of custom zcml
> directives and grokkers, the community as a whole will get a much better
> idea of how to use zcml, and I think gaining that community sense first
> will result in some high quality new general usable zcml directives. At
> the moment, and with my limited view, it looks like most zope ppl really
> don't know how to write custom zcml directives.
>
> Just my 0.02€
>
> Best regards,
>
> Patrick
>
>
>
> On Tue, May 12, 2009 at 09:08, Chris McDonough <chrism [at] plope
> <mailto:chrism [at] plope>> wrote:
>
> I realize now that I've neglected to give sufficient reasoning for
> why less
> granular packaging would be a good thing.
>
> I've noticed that there's a common theme in Zope development,
> software, and
> packages that I can only describe as "power law development" or
> "turtles all the
> way down". It's a bit of an antipattern, unfortunately.
>
> I'll provide an example by way of Zope-3-the-appserver. In an
> application that
> uses Zope-3-the-appserver, many individual subframeworks will be
> used. For
> example, there is a traversal subframework, a security subframework, a
> cataloging subframework, and so on.
>
> Each of these subframeworks acts as a logical unit, and through the
> magic of the
> component architecture, each can be replaced wholesale by
> registering some
> adapter. However, each of these subframeworks tend to also have
> settings that
> can be configured. For example, individual traversal steps for
> certain types of
> objects can be overridden by registering an adapter that
> *configures* the
> subframework. In the case of Zope 3, we have a traversal situation
> where the
> larger traversal subframework can either be replaced wholesale via
> an adapter
> registration or extended piecemeal via other adapter registrations.
>
> The problem is that the mechanism to *replace* the subframework is
> the same as
> the mechanism to *configure* it (both are done via adapter registration,
> sometimes even in the same file). This is theoretically fine. But
> in reality,
> it's tremendously hard for someone just walking up to a complex
> system like Zope
> 3 to discern adapter registrations that replace subsystems from
> those which
> merely configure subsystems. An inability to discern the difference
> leads to
> situations where people just "don't get the joke" and try to wiggle
> wires to
> configure-to-death a existing subsystem that's clearly suboptimal
> for their use
> case instead of just replacing it wholesale with a much simpler
> custom policy.
> They just don't know it was engineered to be replaced. So they keep
> adding more
> configuration code to the existing subframework to handle various 1%
> edge cases.
> Often this code makes the subframework tremendously complex, and the
> subframework grows inappropriate dependencies along the way.
> *Sometimes* the
> situation gets so confusing for a new user, they just quit and go
> use something
> else.
>
> This is a pattern that happens over and over again in Zope
> development. In my
> personal opinion, the original error was trying to make the subframework
> configurable at all. Instead, the subframework should be
> replaceable easily,
> but it should itself be relatively rigid. At very least, for
> subframeworks that
> really do require extra configuration (should be very few), this
> configuration
> should be done via highly specialized ZCML directives (or grokkers),
> as opposed
> to some very general adapter registration that can't be easily
> discerned from
> other adapter registrations by a newbie.
>
> If the subframeworks were more rigid (but replaceable), the *intent*
> of the
> subframework author could be more easily discerned, and fewer people
> would fall
> into the trap of adding more configuration code to a subframework
> instead of
> just replacing it entirely. And fewer people would just walk away
> in frustration.
>
> What does this have to do with packaging? Well, currently, there's
> a dizzying
> number of packages that make up "the ZTK" (nee "Zope 3"). Each of these
> packages is a pure peer of all others in a PyPI listing with no real
> way to get
> a sense of their relative importance other than performing a linear
> audit. Even
> if a user *does* do a linear search of all of them, it's still awful
> hard to
> discern for some new user which ones are "important", and which ones
> just happen
> to exist by some inequity of history without trying to install it.
> The user
> needs to gain some holistic knowledge of the system in order to
> discern the
> important bits from these historical inequities.
>
> Most new users understandably just walk away from *all* Zope
> packages before
> they gain this knowledge; it's just too hard for them to tell the
> difference
> between the truly important and reusable bits and the stuff that
> just happens to
> be packaged up and released but which is useless outside of some
> highly specific
> context. In effect, we just don't communicate *intent* very
> effectively in our
> current packaging structure.
>
> In my opinion, this is why a lot of Python developers who are
> otherwise very
> smart have given up on trying to use Zope packages. The time
> required to figure
> out which ones are useful and which ones aren't is just too high.
> It's way
> "easier" for them to write them all off wholesale and just write
> what they need
> from scratch or use somebody else's software. Good developers tend
> to like
> small, useful libraries and frameworks.
>
> We can ameliorate the situation in a few ways:
>
> - We can reduce the number of distributions.
>
> - We can make each current Zope package distribution independently
> useful.
>
> My suggestion is that we do the former first in order to communicate
> *current
> intent* (the "state of reality right now"). We can do the latter
> after this in
> pieces, hopefully aided by some new developers we've picked up by
> making it
> easier to find useful stuff.
>
> Once we deflate our current set of packages down to a reasonable
> number, the
> packages listed in PyPI will immediately start to reflect "the state
> of reality
> right now". As a result, we'll hopefully be able to get some new
> blood in the
> form of new developers that use the smaller bits outside Zope to
> help us tease
> the truly independent pieces out of the larger pile. If we do this,
> at no time
> after the deflation will PyPI listings ever as badly advertise "the
> state of
> reality" as it is advertised right now, and the community will
> hopefully again
> start to grow.
>
> - C
>
>
> On 5/11/09 11:11 AM, Martijn Faassen wrote:
> > Hey,
> >
> > Chris McDonough wrote:
> >
> > > Instead, I have argued for promoting packages that have some
> life of
> > > their own (independent of the rest of the pile) into
> subprojects that
> > > have their own release cycles.
> >
> > > Then outside projects such as Plone and Grok could depend on
> > > independent versions of such packages, giving them slightly more
> > > flexibility than requiring a "version of the ZTK".
> >
> > We already have that flexibility today. To me, the utility of a
> release
> > of version numbers in the ZTK does not at all exclude the
> potential to
> > evolve the packages to more independent sub-projects.
> >
> >> Given that this suggestion has been met with skepticism, let me
> try another
> >> tact.
> >
> > I think that's an inaccurate description of the response you got. I'm
> > quite positive about trying to give as many packages as possible
> a life
> > of their own. I don't think you got anyone else arguing against this
> > point of view.
> >
> > I'm also quite positive that some packages are:
> >
> > * useful as independently distributed packages
> >
> > * only make sense in a Zope 3 or a Grok or a Zope 2 context, i.e.
> they
> > depend on a significant set of Zope packages.
> >
> > I'd like to get out of this paradigm:
> >
> > * the Zope packages are independent sub-projects.
> >
> > * therefore we cannot distribute a list of versions that work
> best together.
> >
> > And this one:
> >
> > * if we distribute a KGS of anything
> >
> > * packages in that anything aren't independently reusable
> automatically
> > and should be merged into a ball.
> >
> > I'd also like to get out of the following paradigm:
> >
> > * the Zope packages are not independently reusable yet
> >
> > * therefore we should distribute them all together
> >
> > We're in a grey area. Some package are here, some packages are there,
> > some are in between. Some packages build on other packages, but have
> > clear dependency structures. Some don't have clear dependency
> > structures. Some have better documentation and better focus than
> others.
> >
> > If there is to be a merging of code together, then I propose we
> continue
> > the project where the ZMI code is merged into one or a few
> packages. We
> > can also investigate merging 2 or 3 packages together where it
> seems to
> > make sense, or simply moving code between packages (some code
> needs to
> > go down the dependency list, some up).
> >
> >> Instead of thinking about it this way, could we think about it as
> >> *deflating* the current set of zope.* packages that do not
> currently have a
> >> meaningful life of their own into a single setuptools
> distribution named "ZTK".
> >> This package would include most everything in zope.app*, plus
> things like
> >> zope.server, zope.publisher, and other things that just aren't
> useful outside of
> >> Zope-the-appserver, or which currently just depend on "too much".
> >
> > -1
> >
> > This would make it a lot harder to:
> >
> > * clean up dependency relationships with the goal of creating more
> > reusable code. We'd all hide them in a sumo ball again.
> >
> > * get rid of bits we *don't want anymore*. If I need anything in
> a sumo
> > package I'd need *all* of it.
> >
> > * override individual packages with newer versions
> >
> > * we've done a lot of refactoring recently trying to separate the UI
> > from packages. This is done by creating a *new* package, leaving
> the old
> > package behind. We can do this, test this and release this
> > package-by-package now.
> >
> >> Over time, we'd tease out the dependencies of packages that live
> in the ZTK
> >> distribution, making them useful outside without any dependency
> on the ZTK. The
> >> names of these packages could be arbitrary (they wouldn't need
> to retain their
> >> old "zope.*" names). Some backwards dependency shims would be
> added to the ZTK
> >> to prevent old imports from breaking, and the ZTK distribution
> would then just
> >> have a dependency on the thing that got broken out.
> >
> > I don't like the attempt to redefine what the ZTK means to a
> giant ball
> > of Python packages. That's implying that, say, zope.component is
> *not*
> > in the ZTK. That's wrong.
> >
> > Why generate a whole lot of work for ourselves getting from where
> we are
> > now to here? We've learned how to work with the current situation in
> > 2007 already.
> >
> >> I'm thinking that this would simplify things greatly for people
> who want to be
> >> consumers of "truly independent" Zope packages. There'd be
> exactly N of them
> >> available for download (where N is much less than 100, more like
> 20), plus the
> >> ZTK, which would have the rest of the pile in it over time.
> >
> > I don't see why a big package would "simplify things greatly" for
> you or
> > anyone else.
> >
> >> If someone wanted
> >> to use a forked version of a package that lived in the ZTK
> distribution, they'd
> >> either do so by teasing out the dependencies and making it
> "truly independent"
> >> or they'd just reroll a custom version of the entire ZTK
> distribution.
> >
> > And that's easier than the current situation how? Are you really
> > proposing we destroy the dependency information we've already
> teased out
> > and then make people do the work again?
> >
> >> Does this make any sense?
> >
> > Not a lot in my book.
> >
> > I think an important reason why there's so much awareness of
> dependency
> > issues in the Zope world now (and effort spent on it) is precisely
> > because we released our separate packages and can see the dependency
> > information clearly.
> >
> > Regards,
> >
> > Martijn
> >
> > _______________________________________________
> > Zope-Dev maillist - Zope-Dev [at] zope <mailto:Zope-Dev [at] zope>
> > http://mail.zope.org/mailman/listinfo/zope-dev
> > ** No cross posts or HTML encoding! **
> > (Related lists -
> > http://mail.zope.org/mailman/listinfo/zope-announce
> > http://mail.zope.org/mailman/listinfo/zope )
> >
>
> _______________________________________________
> Zope-Dev maillist - Zope-Dev [at] zope <mailto:Zope-Dev [at] zope>
> http://mail.zope.org/mailman/listinfo/zope-dev
> ** No cross posts or HTML encoding! **
> (Related lists -
> http://mail.zope.org/mailman/listinfo/zope-announce
> http://mail.zope.org/mailman/listinfo/zope )
>
>

_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


slinkp at gmail

May 12, 2009, 9:27 AM

Post #12 of 41 (1832 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

On Tue, May 12, 2009 at 03:08:05AM -0400, Chris McDonough wrote:
> Once we deflate our current set of packages down to a reasonable
> number, the packages listed in PyPI will immediately start to
> reflect "the state of reality right now". As a result, we'll
> hopefully be able to get some new blood in the form of new
> developers that use the smaller bits outside Zope to help us tease
> the truly independent pieces out of the larger pile. If we do this,
> at no time after the deflation will PyPI listings ever as badly
> advertise "the state of reality" as it is advertised right now, and
> the community will hopefully again start to grow.

I agree with a lot of what you wrote, but I don't understand this last
bit. All the currently released packages will continue to live on
pypi more or less forever, no? To paraphrase a wise man, "Releasing a
package means always having to say you're sorry" ;-)


--

Paul Winkler
http://www.slinkp.com
_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


chrism at plope

May 12, 2009, 9:36 AM

Post #13 of 41 (1827 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

On 5/12/09 12:27 PM, Paul Winkler wrote:
> On Tue, May 12, 2009 at 03:08:05AM -0400, Chris McDonough wrote:
>> Once we deflate our current set of packages down to a reasonable
>> number, the packages listed in PyPI will immediately start to
>> reflect "the state of reality right now". As a result, we'll
>> hopefully be able to get some new blood in the form of new
>> developers that use the smaller bits outside Zope to help us tease
>> the truly independent pieces out of the larger pile. If we do this,
>> at no time after the deflation will PyPI listings ever as badly
>> advertise "the state of reality" as it is advertised right now, and
>> the community will hopefully again start to grow.
>
> I agree with a lot of what you wrote, but I don't understand this last
> bit. All the currently released packages will continue to live on
> pypi more or less forever, no? To paraphrase a wise man, "Releasing a
> package means always having to say you're sorry" ;-)

I don't think so. People would need to change their code to depend on the big
package, and the smaller packages would cease to have a life of their own.
Having both the smaller packages and some bigger package that also contains it
and needing to maintain both truly would be the worst of all possible worlds.

- C
_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


slinkp at gmail

May 12, 2009, 9:46 AM

Post #14 of 41 (1827 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

On Tue, May 12, 2009 at 12:36:06PM -0400, Chris McDonough wrote:
> On 5/12/09 12:27 PM, Paul Winkler wrote:
>> I agree with a lot of what you wrote, but I don't understand this last
>> bit. All the currently released packages will continue to live on
>> pypi more or less forever, no? To paraphrase a wise man, "Releasing a
>> package means always having to say you're sorry" ;-)
>
> I don't think so. People would need to change their code to depend on
> the big package, and the smaller packages would cease to have a life of
> their own. Having both the smaller packages and some bigger package that
> also contains it and needing to maintain both truly would be the worst of
> all possible worlds.

I must be dense today because I still don't understand what "cease to
have a life" means. Remove them from pypi? How would you avoid
breaking all the current software in the world that currently depends
on all those distributions?

--

Paul Winkler
http://www.slinkp.com
_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


chrism at plope

May 12, 2009, 10:11 AM

Post #15 of 41 (1828 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

On 5/12/09 12:46 PM, Paul Winkler wrote:
> On Tue, May 12, 2009 at 12:36:06PM -0400, Chris McDonough wrote:
>> On 5/12/09 12:27 PM, Paul Winkler wrote:
>>> I agree with a lot of what you wrote, but I don't understand this last
>>> bit. All the currently released packages will continue to live on
>>> pypi more or less forever, no? To paraphrase a wise man, "Releasing a
>>> package means always having to say you're sorry" ;-)
>> I don't think so. People would need to change their code to depend on
>> the big package, and the smaller packages would cease to have a life of
>> their own. Having both the smaller packages and some bigger package that
>> also contains it and needing to maintain both truly would be the worst of
>> all possible worlds.
>
> I must be dense today because I still don't understand what "cease to
> have a life" means. Remove them from pypi? How would you avoid
> breaking all the current software in the world that currently depends
> on all those distributions?
>

If your package depends on zope.app.publisher, you get *78* eggs. Change that
install_requires line in your package to "ZTK" and you get the same software.
OTOH, packages that rely on things that are *truly reusable* like
zope.interface, and so on will need to do nothing; those packages will continue
to have a life of their own.

- C

_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


faassen at startifact

May 13, 2009, 6:08 AM

Post #16 of 41 (1800 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

Chris McDonough wrote:
> Another thing is this: even if we're successful in teasing out dependency info
> so we do have a collection of truly independently useful things, after it's all
> over, we're going to get to a point one way or another where we make a big
> package of stuff that just can't have its dependencies teased apart because it
> *really is just one thing*. Why *not* just do it now?

That's why I suggest a ZMI project (or doing away with the ZMI entirely
if nobody's interested). That's really the main thing creating entangled
dependency structures.

I want to create a grokcore.view that doesn't depend on a thousand Zope
packages and a ton of Zope code. That's because grokcore.view doesn't
need all this stuff. Right now it gets it indirectly through tangled
dependencies. We need to try porting it to the latest set of releases
and see whether that helps. Once that's done, we need to cut a few more
dependencies, and there we are.

If all those packages are maintained as a single large ball, I cannot do
this analysis. In the current setting, we have experience with this
analysis, we have tools to do this analysis. Additionally, I'd need to
do a lot of work separating things again in order to release
grokcore.view if I were to do the work in a singly maintained ball.

But you also said that there's no need to maintain this *just* as a
single ball. That is, we could have something similar to the current
Zope 3 project that pulls in all the other packages as externals and
that we release to PyPI.

I'm not sure what this gains us currently. Who would be using this
package? Are you suggesting we remove all the other stuff from PyPI or
something?

Finally, an independent package can be useful by itself, with clear
dependency structures, even though it's only useful for people who buy
into quite a few of the other packages that you don't want to buy into.
Such is the case for zope.site.

Regards,

Martijn

_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


faassen at startifact

May 13, 2009, 6:29 AM

Post #17 of 41 (1797 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

Chris McDonough wrote:
[snip extending configuration patterns instead of replacing wholesale]
> Often this code makes the subframework tremendously complex, and the
> subframework grows inappropriate dependencies along the way. *Sometimes* the
> situation gets so confusing for a new user, they just quit and go use something
> else.

I am curious about your use of the word "often". I think what you
describe has happened for the example you give, namely the
publication/traversal stack. I think it also has happened to a certain
extent for the user authentication story. I'd like to identify other
such nasty grown subframeworks and you seem to know about a few more.

I think in part this happened because there wasn't enough documentation
about wholesale replacement patterns (and not enough documentation
period), and in part it happened because the APIs or component
relationships were just not designed as well as we'd like (as you remark
below), and in part it happened because people often don't *want* to do
a wholesale replacement but exactly the kind of "only reconfigure this
bit" you describe

> This is a pattern that happens over and over again in Zope development. In my
> personal opinion, the original error was trying to make the subframework
> configurable at all. Instead, the subframework should be replaceable easily,
> but it should itself be relatively rigid. At very least, for subframeworks that
> really do require extra configuration (should be very few), this configuration
> should be done via highly specialized ZCML directives (or grokkers), as opposed
> to some very general adapter registration that can't be easily discerned from
> other adapter registrations by a newbie.

I agree that specialized ZCML directives and grokkers are a good thing.
I think we had too much of a tendency to get away from those and instead
generalize everything. I think we should define clear Python APIs for
particular configuration concepts, not just ZCML directives or grokkers.
In turn the ZCML/grokker implementations can use this Python API and be
really minimal in themselves.

That said, I do think there's implementation value in a general
registry. It's just not a great API in most cases.

> If the subframeworks were more rigid (but replaceable), the *intent* of the
> subframework author could be more easily discerned, and fewer people would fall
> into the trap of adding more configuration code to a subframework instead of
> just replacing it entirely. And fewer people would just walk away in frustration.

While I understand the sentiment and I agree with the general advice, I
again must note that sometimes it's useful to be able to configure a
subframework. "everything as normal with just a few tweaks" is after all
a good way forward in many cases.

The idea you are promoting is "clearly focused frameworks". They do one
thing well, and are configurable in a few ways and clearly replaceable too.

> What does this have to do with packaging? Well, currently, there's a dizzying
> number of packages that make up "the ZTK" (nee "Zope 3"). Each of these
> packages is a pure peer of all others in a PyPI listing with no real way to get
> a sense of their relative importance other than performing a linear audit.

One way to get some hints is to look at a dependency diagram and see
which ones are lower down in the stack.

> Even
> if a user *does* do a linear search of all of them, it's still awful hard to
> discern for some new user which ones are "important", and which ones just happen
> to exist by some inequity of history without trying to install it. The user
> needs to gain some holistic knowledge of the system in order to discern the
> important bits from these historical inequities.
>
> Most new users understandably just walk away from *all* Zope packages before
> they gain this knowledge; it's just too hard for them to tell the difference
> between the truly important and reusable bits and the stuff that just happens to
> be packaged up and released but which is useless outside of some highly specific
> context. In effect, we just don't communicate *intent* very effectively in our
> current packaging structure.

Sure, agreed.

> In my opinion, this is why a lot of Python developers who are otherwise very
> smart have given up on trying to use Zope packages. The time required to figure
> out which ones are useful and which ones aren't is just too high. It's way
> "easier" for them to write them all off wholesale and just write what they need
> from scratch or use somebody else's software. Good developers tend to like
> small, useful libraries and frameworks.

Agreed again.

> We can ameliorate the situation in a few ways:
>
> - We can reduce the number of distributions.
>
> - We can make each current Zope package distribution independently useful.
>
> My suggestion is that we do the former first in order to communicate *current
> intent* (the "state of reality right now"). We can do the latter after this in
> pieces, hopefully aided by some new developers we've picked up by making it
> easier to find useful stuff.

In order for your plan to work I think you'd need two things ideally:

* remove a lot of the released packages from pypi. This is a no-go.
People depend on these in a massive way.

* at least move around the existing packages in svn.zope.org to some
kind of "random crap" area so people aren't confronted with them.

> Once we deflate our current set of packages down to a reasonable number, the
> packages listed in PyPI will immediately start to reflect "the state of reality
> right now". As a result, we'll hopefully be able to get some new blood in the
> form of new developers that use the smaller bits outside Zope to help us tease
> the truly independent pieces out of the larger pile. If we do this, at no time
> after the deflation will PyPI listings ever as badly advertise "the state of
> reality" as it is advertised right now, and the community will hopefully again
> start to grow.

How do you propose we reduce the PyPI listing without breaking a lot of
code? The other practical issue is community-oriented: we have been able
to break so many dependencies and have an awareness of these issues
precisely because packages *were* split up.

Meanwhile we've invested quite a bit of effort in making existing Zope
packages at least *depend* more or less logically on other packages.
That doesn't mean they're always, or even typically, independently
useful in the sense you want: they're useful only if you buy into a lot
of the Zope story. I hope we can reduce the buy-in more once we explode
the publisher, but it'll always be that way to a certain extent.

A package that depends on 10 other packages might not be considered
"independently useful" by many, as it assumes quite a bit of the
framework to be present. But that doesn't mean it's useless as an
independent package.

Regards,

Martijn

_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


do3ccqrv at googlemail

May 13, 2009, 6:39 AM

Post #18 of 41 (1793 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

On Wed, May 13, 2009 at 15:29, Martijn Faassen <faassen [at] startifact>wrote:

> Chris McDonough wrote:
>
> > We can ameliorate the situation in a few ways:
> >
> > - We can reduce the number of distributions.
> >
> > - We can make each current Zope package distribution independently
> useful.
> >
> > My suggestion is that we do the former first in order to communicate
> *current
> > intent* (the "state of reality right now"). We can do the latter after
> this in
> > pieces, hopefully aided by some new developers we've picked up by making
> it
> > easier to find useful stuff.
>
> In order for your plan to work I think you'd need two things ideally:
>
> * remove a lot of the released packages from pypi. This is a no-go.
> People depend on these in a massive way.


Wouldn't it be possible to put them on a dedicated pypi?
pypi.support.zope.com?
I start being scared of using pypi.

Best regards,

Patrick


faassen at startifact

May 13, 2009, 6:59 AM

Post #19 of 41 (1802 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

Hey Chris,

Chris McDonough wrote:
> On 5/12/09 4:44 AM, Patrick Gerken wrote:
[snip]
> I don't think there will ever be a point where it's "finished"; at least not in
> any time frame in which Zope is still relevant at the end. Sure, we can keep
> the current setuptools distributions and keep pulling apart their respective
> dependencies forever, but by the time it's all over, it just won't matter
> anyway; folks will be happily using "Django 3000" or "Pylons 4", which will have
> recreated all the features we teased out.

Such skepticism. Please consult the following (non-reduced) dependency
graphs (of released packages):

http://startifact.com/depgraphs/

I've picked a few high-level components like container and catalog. They
depend on a lot, yes. Too much, yes, there are bits that can still be
teased out from that graph (in particular I think we should make the
container stop depending on the publisher). But they also depend on a
lot because they're fairly high-level components that do quite a few things.

I realize that many of these packages are not useful for a random Python
developer. But I don't believe we have to ensure all our packages are
useful in that way. We just have to create more of them.

I think all of the ZMI stuff should either be eliminated or
consolidated. That would allow us to lose zope.app.* packages. Remove
them from PyPI, no, though - we already crossed that bridge and can't
break everybody's code.

I think these high-level components and a few more is what we can at
least base a future release of Grok around. (with a compat package that
pulls in a lot of the zope.app. packages to make sure the existing code
doesn't break). The dependency graph will still be huge, but it won't be
as crazy as it is with the current Grok release.

Regards,

Martijn

_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


faassen at startifact

May 13, 2009, 7:11 AM

Post #20 of 41 (1803 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

Hey,

Chris McDonough wrote:
[snip]
> If your package depends on zope.app.publisher, you get *78* eggs.

63 eggs these days, by my measurement. Still far too many. I think with
some effort we can chop off quite a few more.

Look here at the main cycles in that graph (this is the cause of a lot
being pulled in that shouldn't be):

http://startifact.com/depgraphs/zope_app_publisher_cycles.svg

It looks we need to pull more out of zope.app.component somewhere else
so zope.app.publisher doesn't need to depend on zope.formlib anymore.
Probably ZMI stuff holding things in. The other tricky line is the
dependency of zope.app.publisher on zope.app.publication.

> Change that
> install_requires line in your package to "ZTK" and you get the same software.
> OTOH, packages that rely on things that are *truly reusable* like
> zope.interface, and so on will need to do nothing; those packages will continue
> to have a life of their own.

I'm worried that one person's truly reusable is another person's package
that is really useless without a huge amount of buy-in.

Regards,

Martijn

_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


faassen at startifact

May 13, 2009, 7:23 AM

Post #21 of 41 (1798 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

Hey,

Patrick Gerken wrote:
[snip]
> Wouldn't it be possible to put them on a dedicated pypi?
> pypi.support.zope.com <http://pypi.support.zope.com>?

Yes, but not without breaking backwards compatibility with a lot of
released buildout.cfg files, and having to arrange our own mirroring
services and so on.

(and definitely not on zope.com. zope.org, yes)

> I start being scared of using pypi.

Why?

Regards,

Martijn

_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


faassen at startifact

May 13, 2009, 7:34 AM

Post #22 of 41 (1796 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

Hey Chris,

What about the following alternative suggestion to alleviate some of the
underlying issues you point out.

I agree we are signaling badly which packages are interesting to
newcomers and outsiders and which packages aren't.

In part we've already done the damage with the packages in the "zope.*"
namespace. I think we shouldn't try to put humpty-dumpty back together
again marketing-wise by removing those packages a few years after their
release, and whether this is worth the effort (and I see negative
drawbacks to doing so).

What we can do is start to clearly indicate on top of a package's
documentation whether it's intended to be independently reusable outside
of a Zope context or not. We should do this on pypi, but we should also
back this up by writing narrative documentation for those packages we
*do* think are independently reusable by a wide audience. I think this
should be done by starting 'doc' directories in those packages and
putting in sphinx-based documentation.

The next step would be to go to our "non-reusable" packages and start
writing narrative docs for that, ideally with example projects. If we
pick a few likely candidates and do some more refactoring we may be able
to salvage them into reusable packages and we can declare them as such.

As indications I propose:

"This package is intended to be independently reusable in any Python
project. It is maintained by the Zope Toolkit project."

(with hopefully appended: "For more documentation on this see <narrative
docs>.")

"This package is at present not reusable without depending on a large
chunk of the Zope Toolkit and its assumptions. It is maintained by the
Zope Toolkit project."

We can also add 'reusable' to the metadata tags in PyPI in addition to this.

Regards,

Martijn

_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


tom.hoffman at gmail

May 13, 2009, 8:08 AM

Post #23 of 41 (1800 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

The implementation details are over my head, but what SchoolTool needs
is a middle ground between one big package and a giant pile of little
ones, because our primary deployment strategy is via Linux
distribution packaging, in Debian/Ubuntu in particular.

Currently, Fabio maintains an official monolithic package for Debian,
and we generate a giant pile of .debs from eggs and keep them in a
PPA. Because there is administrative overhead with every package,
even if we can eventually come to consensus on the desirability or
pushing 70 tiny packages into the Debian pipeline, it may never be
practical.

So a single, community-recognized ZTF that would be the foundation of
manageable packaging for Linux distros would be a huge win for us.

--Tom
_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


tseaver at palladion

May 13, 2009, 9:04 AM

Post #24 of 41 (1799 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Patrick Gerken wrote:

> I start being scared of using pypi.

You should be *very* afraid of depending on PyPI for softare rolled into
production. PyPI is only really useful for discovery during development.


Tres.
- --
===================================================================
Tres Seaver +1 540-429-0999 tseaver [at] palladion
Palladion Software "Excellence by Design" http://palladion.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFKCu+F+gerLs4ltQ4RAnniAKDAKw0BVoBlPY/9Un3MwzRL+1fUIwCcD4tu
cn4NtZQnlQbTesBeZiA6Kjs=
=niRy
-----END PGP SIGNATURE-----

_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


chrism at plope

May 13, 2009, 9:33 AM

Post #25 of 41 (1805 views)
Permalink
Re: "ZTK" futures: one big package? [In reply to]

On 5/13/09 10:34 AM, Martijn Faassen wrote:
> Hey Chris,
>
> What about the following alternative suggestion to alleviate some of the
> underlying issues you point out.
>
> I agree we are signaling badly which packages are interesting to
> newcomers and outsiders and which packages aren't.
>
> In part we've already done the damage with the packages in the "zope.*"
> namespace. I think we shouldn't try to put humpty-dumpty back together
> again marketing-wise by removing those packages a few years after their
> release, and whether this is worth the effort (and I see negative
> drawbacks to doing so).

I'd hope you'd agree that given a perfect world where packaging structure
backwards compatibility was not a concern:

- The original distribution structure was a mistake.

- Changing it would be a bugfix.

That said, given your other arguments in prior mails today, I'll give up
agitating for any packaging changes on this maillist, because it's pretty much
impossible to argue against the article of faith that there is some presumed
majority of
thousands-of-people-who-depend-on-those-packages-as-distributed-now-and-whom-will-forever-want-to-do-so-and-whose-world-will-explode-if-we-take-them-away.

Maybe when setuptools grows "provides" and "obsoletes" setup parameters (ala
RPM), this particular problem can be solved better technically.

> What we can do is start to clearly indicate on top of a package's
> documentation whether it's intended to be independently reusable outside
> of a Zope context or not. We should do this on pypi, but we should also
> back this up by writing narrative documentation for those packages we
> *do* think are independently reusable by a wide audience. I think this
> should be done by starting 'doc' directories in those packages and
> putting in sphinx-based documentation.
>
> The next step would be to go to our "non-reusable" packages and start
> writing narrative docs for that, ideally with example projects. If we
> pick a few likely candidates and do some more refactoring we may be able
> to salvage them into reusable packages and we can declare them as such.
>
> As indications I propose:
>
> "This package is intended to be independently reusable in any Python
> project. It is maintained by the Zope Toolkit project."
>
> (with hopefully appended: "For more documentation on this see<narrative
> docs>.")
>
> "This package is at present not reusable without depending on a large
> chunk of the Zope Toolkit and its assumptions. It is maintained by the
> Zope Toolkit project."
>
> We can also add 'reusable' to the metadata tags in PyPI in addition to this.

I think this is a reasonable workaround if the packaging structure does not change.

Thanks for the responses,

- C
_______________________________________________
Zope-Dev maillist - Zope-Dev [at] zope
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )

First page Previous page 1 2 Next page Last page  View All Zope dev RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.