Re: [Zope3-Users] Re: Beginner's question: Components without persistence?
At 2:46 PM +0100 2/28/06, Lennart Regebro wrote: On 2/28/06, Reinhold Strobl [EMAIL PROTECTED] wrote: where do I put application logic??? Ööööh. In Python code? :-) I have the feeling I don't understand the question. I think I understand the question. Most of the tutorials show how to build a content component, not how to build a website. Other Python web frameworks let you map URLs to Python class methods, but Zope 3 doesn't do that so how do you get the output of your Python code to a web page if you don't want to follow the usual instructions for building a persistent content component? I think my naive answer is that you have to register a URL name in ZCML that points to a page template (ZPT), which can then contain TAL expressions to access Python code. However, this can get ugly...you probably should create a view for your non-persistent object, and then insert the output of the view into your ZPT...but how you instantiate the object without using Python in your TAL, I don't know. I've been a bit of a slow learner about Zope 3... ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
Re: [Zope3-Users] Re: Re: Please Guido, pick me, pick me!
At 6:11 AM -0500 2/5/06, Stephan Richter wrote: On Saturday 04 February 2006 14:00, Brad Allen wrote: I won't have any time to volunteer for such a project for several weeks, but I could do it during the upcoming Zope 3 sprint at PyCon (my skill is not great enough to contribute to Zope 3 source code, but I can work on documentation and/or assemble talking points.) Please do! There have been several efforts in the Zope 3 community to get a new Website going. But honestly, its missing an initial ring leader who coordinates the effort. I am supporting everyone who is serious about changing our current situation! Thanks for the encouragement. I don't know how much I can get done in a four day sprint but I'm willing to give it a go. By new website, do you mean a Zope 3 advocacy site, or a general documentation site? Making a separate site for advocacy seems like a no-brainer (ala Pythonology.org), but the documentation site is another matter. Have the Zope 3 core developers decided to split Zope 3 documentation onto a completely separate site? Maybe this has already been discussed on the Zope3-dev list, which I haven't yet looked at. ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Re: Re: Please Guido, pick me, pick me!
Here's example of someone who the Zope site has chased off: http://online.effbot.org/#20060203 Excerpt: (And I'm not so sure about Zope, really . It feels stuck in 1998, way too often. Reading zope.org is like discovering that you clicked on the wrong elevator button, and ended up in a basement full of old sales broschures and pre-historic computer manuals. A website that is dynamically-constructed uses an a computer program to provide the dynamism.. That's good to know.) ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
RE: [Zope3-Users] Re: Is Zope Zope2 or Zope3?
Zope stlll means Zope 2 even on the Zope website in many places. I've encountered this same confusion in various places, and don't know how long it will take for the word to get out or how long bloggers and reviewers will have to take pains to explain the difference between Zope 3 and Zope 2. Maybe it's too late for this, but what about coming up with a new name to reflect the reality that Zope 3 is a complete redesign and rethink? I always thought Zope sounded too much like SOAP, anyway. Here are some name ideas Xope (still sounds like SOAP, unfortunately) Elope Twope (to reflect the Twisted integration) Twisty Ztwist Zzope (extra Z is cool but implies sleepiness) Zop3 (replace the e with version number) Zlife (Zope 3 is a lifestyle, not just a web framework) Zcom(reflect component based architecture) Zeep or Zepe (I don't know why I like this name) ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Zope3 at Pycon
Looks like there will be three Zope 3 talks at the upcoming Pycon, although I was surprised to see no sprints or tutorials for Zope 3. In any case, I will be there, and would enjoy meeting some folks who are into Zope 3. Let me know if anyone wants to do a Zope 3 dinner or somesuch. Since I'm a local yokel, I have a car and know local eateries. At 8:10 PM -0500 12/3/05, A.M. Kuchling wrote: Registration for PyCon 2006 is now open; go to the registration form at http://www.python.org/pycon/2006/register.html to register for the conference and for tutorials. At this time the planned events for PyCon have all been announced: * Talks: http://wiki.python.org/moin/PyCon2006/Talks * Tutorials: http://wiki.python.org/moin/PyCon2006/Tutorials * Sprints: http://wiki.python.org/moin/PyCon2006/Sprints Also remember to book your flight, and to book your hotel room using the hotel's PyCon event page at http://www.stayatmarriott.com/Pycon2006/ . We look forward to seeing all of you at PyCon 2006. A.M. Kuchling Chair, PyCon 2006 [EMAIL PROTECTED] ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
Re: [Zope3-Users] Direct ZODB access in a Zope3 instance
At 11:48 AM +0100 12/1/05, Johan Carlsson wrote: To access an object in the ZODB you need to have a context (that is a pointer to a object stored in ZODB, it almost alway is but in some situations it's not! I've learned that the hard way). If your in a browser class you will have the context of the object traversed as an instance attribute (self.context). Ok, this helps, although I'm not completely clear on how context objects are generated. From a newbie perspective, the context object is an elusive beast. It's not really explained anywhere that I could find. The Zope 3 Developer's Guide. There's a little section called The context Variable in the ZCML chapter, but that doesn't explain where the context comes from or what it is. I've seen how the context object is used in TAL, but have always understood it to be the local URL context. There were some examples of using self.context in the MessageBoard tutorial. For instance, below is an excerpt from page 114. The self.context is used in a mysterious way here. Nothing in the class definition binds it. It has no base class. I guess I should expect a child class, or a factory maybe to add the self.context when the class get instantiated. However, I had trouble finding that anywhere in the SVN copy of the MessageBoard tutorial (step 13). class MessageDetails: def author(self): Get user who last modified the Message. creators = ICMFDublinCore(self.context).creators if not creators: return _('unknown') return creators[0] def modified(self): Get last modification date. date = ICMFDublinCore(self.context).modified if date is None: date = ICMFDublinCore(self.context).created if date is None: return '' formatter = self.request.locale.dates.getFormatter('dateTime', 'short') return formatter.format(date) def parent_info(self): Get the parent of the message parent = zapi.getParent(self.context) if not IMessage.providedBy(parent): return None return {'name': zapi.name(parent), 'title': parent.title} In some other example MessageBoard classes, context is used as an init parameter. The doctest examples indicate that context can be a simple container object, not necessarily something in ZODB. I guess this makes sense. I looked around in Philikon's book for info about the context object as well, but had trouble. It wasn't in the index. I did see it used as an init parameter in several places, but had trouble locating which page explained it. Is use of the word context just a naming convention for the containing (parent) object? That still wouldn't explain the how self.context works without generating a namespace error in the MessageDetails class. ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
Re: [Zope3-Users] Direct ZODB access in a Zope3 instance
At 11:48 AM +0100 12/1/05, Johan Carlsson wrote: The ZAPI interface gives you several ways to traverse object from a context: For instance getParent, (getParents,) getRoot, traverse, (traverseName) On my first reading of your posting, I missed getRoot. That sounds promising. If I can get the root of the ZODB then I can use traversal to get to any other object in the ZODB. However, getRoot takes an argument. The example in Philikon's book uses a Location(). I don't think this gets me the root of the ZODB, does it? ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
Re: [Zope3-Users] need guidance
At 1:17 AM -0500 11/30/05, Chris McDonough wrote: While you're developing, it's much easier because the *content* in your ZODB doesn't typically have any value during development. If it does have value during development, you have a development model that's not similar to mine. Well, I generally try to follow an iterative approach like that described in Agile or Extreme Programming styles (http://en.wikipedia.org/wiki/Extreme_Programming ). The idea is to get something into production very quickly, let users bang on it, and then produce a new version based on feedback from users...and then do it again, and again, etc. There is no big lead time for development-only; the cycle is more like develop-release-use-develop-release-use, etc. During that cycle, end user data needs to be carried over to each new version. At 2:44 AM -0700 11/30/05, Duncan McGreggor wrote: Whenever I am told by client that they want me to build an application for them, and they want to be able to add data/content while I do it, I either gently educate them on the proven process that we use, or I walk away from the project. Maintaining content during development is almost always a nightmare. There are tools to use to enable this... approach... but in my mind (and many others') it's just not a good way to do development. In this case, the users want to start using a message board ASAP. This means they will be adding content to ZODB right away. I don't see how I can get away from having them put content into ZODB. At 1:17 AM -0500 11/30/05, Chris McDonough wrote: But obviously, after you go into production, the content does have value, and preserving this value is the purpose of GenericSetup for Zope 2. It's a dump and reload solution which allows you to create a represention of your ZODB data and its associated hierarchy as files on a filesystem. You can basically push a button to dump the data in your ZODB ro files, and then create a new ZODB, instantiate the tool, and push a button to reload it. Zope 3's filesystem synchronization capability is similar in concept, although I don't know if that has been maintained recently. I guess another approach would be to NOT throw away my ZODB, but just delete and regenerate selected container folders, leaving the user content alone. From your postings about how the ZODB is accessible directly from Python, it sounds like that should be do-able. Hopefully it won't be too tough to tackle... At 2:44 AM -0700 11/30/05, Duncan McGreggor wrote: Yeah, I think you're looking for code-based content addition -- is that right? If so, you're going to want to spend some time looking at zope.app.zapi (a lot of which comes from zope.component). In particular, the createObject() function. Take a look at those projects I mentioned above... and other folks may have good suggestions for code examples on site creation and pre-population of content. Thanks. A little searching turned up http://www.zope.org/Wikis/ZODB/FrontPage, which looks like the place for me to dig into. I will also check out the source code. Thanks! ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] list archives for zope3-users
I'm looking for a better way to search and read the list archives for this list. Here are the list archives that I know about. Text file archives: http://mail.zope.org/pipermail/zope3-users Searchable mail archive: http://www.mail-archive.com/zope3-users@zope.org/ Gmane provides a variety of ways to view the list, but the search options are still pretty limited. http://dir.gmane.org/gmane.comp.web.zope.zope3.user I wish there was some way to access mailing list archives via a POP3 interface, so that I could use my mail app of choice. In my case, Eudora is my favorite app for searching and viewing mailing lists. Unfortunately, I've only got a couple of months of Zope3-users in Eudora. I haven't found that the text file archives to be easily importable. Does anyone else on this list use Eudora? If so, I'd very much appreciate a copy of your Eudora mailbox file for the Zope3 users list. If anyone else has thoughts on the best way to search the mailing list archives, I'd appreciate hearing about it. I'd prefer to avoid asking questions that others have already asked. ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] Direct ZODB access in a Zope3 instance
Based on discussion in the 'need guidance' thread, I started looking into how to access the Zope ZODB directly from within Python scripts. I haven't gotten very far yet. I'm still at the beginning of the docs at http://www.zope.org/Wikis/ZODB/FrontPage/guide/zodb.html trying out the example code. I got stuck trying to open the Data.fs file in my Zope instance. Python 2.4.2 (#2, Sep 30 2005, 21:19:01) [GCC 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu8)] on linux2 Type help, copyright, credits or license for more information. from ZODB import FileStorage, DB storage = FileStorage.FileStorage('Data.fs') Traceback (most recent call last): File stdin, line 1, in ? File /usr/lib/python2.4/site-packages/ZODB/FileStorage/FileStorage.py, line 112, in __init__ self._lock_file = LockFile(file_name + '.lock') File /usr/lib/python2.4/site-packages/ZODB/lock_file.py, line 57, in __init__ self._fp = open(path, 'r+') IOError: [Errno 13] Permission denied: 'Data.fs.lock' storage = FileStorage.FileStorage('Data.fs') I tried shutting down the Zope 3 instance, the the same traceback appeared anyway. I checked to make sure I had the filename right: import os os.path.isfile('Data.fs') True How do I clear the lock on the file? Thanks! ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
Re: [Zope3-Users] need guidance
At 10:45 AM -0700 11/30/05, Duncan McGreggor wrote: Hmm, again, I think you *might* want to stay away from an approach that interacts directly with the ZODB. Unless you're not using z3/Zope 2... I didn't see this posting until after I started a new thread called Direct ZODB access in a Zope3 instance. So, why is it a bad idea? ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
Re: [Zope3-Users] need guidance
At 7:55 AM -0500 11/30/05, Stephan Richter wrote: We are currently not supporting TTW development. Thus, in Zope 3 you cannot develop templates TTW well yet. Ok, that alters my plans somewhat. But I can still have end user contribute/edit content within the ZMI, right? Maybe a ZPT component just isn't the right choice for that. I will see if I can get Zwiki installed and running sometime today. Maybe that will provide a more appropriate content component for end users. ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
Re: [Zope3-Users] need guidance
At 12:33 PM -0700 11/30/05, Duncan McGreggor wrote: In addition, I've written a python script that auto-generates a starter z3 project for you, after asking a couple questions. If you want to use it, I'd be more than willing to answer any questions about it (an thus improve it) off-list. You can download it here: http://www.zope.org/Members/adytumsolutions/z3project_starter Wow, cool. This looks like it could be a time-saver. Thanks! ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
Re: [Zope3-Users] need guidance
Duncan McGreggor [EMAIL PROTECTED] It sounds like a pain, and to be honest, at first it is a bit arduous. Not only does it get faster and become second nature, but chunks of it can be generalized and reused. It really doesn't take that long to get accustomed to it. And once you start doing it regularly, you gain a tremendous amount. Not just in the mere knowledge acquired, either... there's a subtle shift in your programming where you give extra attention to the data-generating/-populating code, which in turn makes you architect your information better ahd brings higher overall levels of organization to your project. So this style of Zope 3 development involves not using ZODB so much for permanent storage, but instead as a temporary scaffolding on which to hang the current version of class instances and their content. When you refactor your classes and interfaces, you just re-instantiate everything into the ZODB to recreate the site. It sounds great, except not all data can be simply regenerated. For stuff like port numbers and configuration, fine, it can be in ZCML or embedded in Python scripts. But the site content generated by end users has to be stored somewhere, too,. If you throw away your ZODB and regenerate it, what happens to that data? Does your regeneration script transfer all that data to the newly generated ZODB? I'd be interested in seeing the particulars of how you guys do that stuff. I've yet to run across a direct mention of how to create an arbitrary ZODB and start reading and writing objects. That seems to be a big piece missing from my understanding of how to work with Zope 3. Every ZODB example I've seen in the books seems to involve creating a content object that can be added via the ZMI. However, I'm not finished with either book, and I have very likely missed something. ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] reST for content editors
I'd prefer to allow content editors on my site to avoid having to type HTML, and have heard that reST might be a good, wiki-like choice. However, it's not clear to me how to get that working with ZPT content insertions. Would I need to build a new content class for this, or is there some easier way? Thanks! ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
Re: [Zope3-Users] How to hide the ZMI
I'm working on a simple site which, to start with, just uses bare ZPT functionality. I've been reading Philkon's book sections dealing with TAL, TALES, and METAL, and it's starting to make some sense. The part I'm stuck on is how to make the ZMI disappear so the end user sees only the page I designed. Do I have to go through the process of making a special skin for my ZPT pages, or is there some easier way? Never mind, I figured this one out. Just get rid of the @@whatever at the end of the URL. ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] namespaces.zope.org doesn't resolve
Most of the zcml configuration files I've seen contain xmlns=http://namespaces.zope.org/zope;. I wanted to read about what was in that namespace, so I tried to load that page in a web browser. This name just doesn't seem to resolve in DNS. I guess my ignorance about XML is showing here. Where do I find the actual namespace? Thanks! ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] MessageBoard tutorial deprecation warnings
The messageboard tutorial in the Zope 3 Developer's Handbook doesn't seem to work for me. I'm using the copy from svn co svn://svn.zope.org/repos/main/book/trunk The SVN url listed in the book didn't work, but I'm not sure this is the right one. Anyway, I'm using the step13 folder, and when I registered it with my Zope 3.1 instance on Ubuntu, and run Zope, I get the following in my transcript.log: ConfigurationError: ('Invalid value for', 'interface', Couldn't import zope.app.workflow.interfaces, No module named workflow.interfaces in zope.app.workflow.interfaces.IProcessInstanceContainerAdaptable) I wanted to see more detail on that error, so I imported the offending module at the Python interactive prompt. Along the way several deprecation warnings cropped up (see below). Is there a newer version of this tutorial I'm missing out on, or should I spend some time trying to clean this up? Thanks! [EMAIL PROTECTED]:/var/lib/zope3/instance/sandbox/lib/python$ python Python 2.4.2 (#2, Sep 30 2005, 21:19:01) [GCC 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu8)] on linux2 Type help, copyright, credits or license for more information. import book.messageboard.browser.messageboard book/messageboard/browser/messageboard.py:22: DeprecationWarning: ActiveStatus: ActiveStatus is now available in zope.app.component.interfaces.registration. Will be gone in X3.3. from zope.app.registration.interfaces import ActiveStatus book/messageboard/browser/messageboard.py:23: DeprecationWarning: ISite: This interface has been moved to zope.app.component.interfaces. The reference will be gone in X3.3. from zope.app.site.interfaces import ISite book/messageboard/browser/messageboard.py:24: DeprecationWarning: SiteManager: This class has been moved to zope.app.component.site. The reference will be gone in X3.3. from zope.app.site.service import SiteManager, ServiceRegistration book/messageboard/browser/messageboard.py:24: DeprecationWarning: ServiceRegistration: The concept of services has been removed. Use utilities instead. The reference will be gone in X3.3. from zope.app.site.service import SiteManager, ServiceRegistration book/messageboard/browser/messageboard.py:25: DeprecationWarning: LocalUtilityService: Services have been removed. Use site manager API. The reference will be gone in X3.3. from zope.app.utility.utility import LocalUtilityService, UtilityRegistration book/messageboard/browser/messageboard.py:25: DeprecationWarning: UtilityRegistration: This class has been moved to zope.app.component.site. The reference will be gone in X3.3. from zope.app.utility.utility import LocalUtilityService, UtilityRegistration Traceback (most recent call last): File stdin, line 1, in ? File book/messageboard/browser/messageboard.py, line 26, in ? from zope.app.workflow.interfaces import IProcessDefinitionImportHandler ImportError: No module named workflow.interfaces ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
Re: [Zope3-Users] which psycopg works with Zope3?
At 6:13 PM +0400 10/26/05, Dmitry Vasiliev wrote: - The tarball version is for use with ZopeX3-3.0.0 and psycopg v1.0; - The svn version works with Zope 3.1 (and should work with Zope 3.2) and still psycopg v1.0; - Psycopg v2.0 is not supported for now; Thanks for your help on this, Dmitry. ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users
[Zope3-Users] problems getting started under Ubuntu 5.10
Hi, I'm trying to get started with Zope3 under Ubuntu 5.10. The package manager for Ubuntu installed Zope 3.1.0-1. The first problem I had was creating a Zope instance. Here is what happened: [EMAIL PROTECTED]:/usr/lib/zope3/bin$ ./mkzopeinstance --dir=$HOME/myzope --user=admin:mypwd Traceback (most recent call last): File ./mkzopeinstance, line 45, in ? sys.exit(main(from_checkout=from_checkout)) File /usr/lib/python2.4/site-packages/zope/app/server/mkzopeinstance.py, line 48, in main return app.process() File /usr/lib/python2.4/site-packages/zope/app/server/mkzopeinstance.py, line 111, in process os.chown(options.destination, uid, gid) OSError: [Errno 1] Operation not permitted: '/home/ballen/myzope' --- Ok, so I thought maybe I need to perform the operation under sudo. That seemed to work, though I was a little worried because I had read on the mailing list that Zope3 shouldn't be started or run as the root user. Next, I wanted to start up the Zope instance. See transcript below: [EMAIL PROTECTED]:~/myzope$ ./bin/runzope Traceback (most recent call last): File ./bin/runzope, line 48, in ? run() File ./bin/runzope, line 44, in run main([-C, CONFIG_FILE] + sys.argv[1:]) File /usr/lib/python2.4/site-packages/zope/app/server/main.py, line 58, in main setup(load_options(args)) File /usr/lib/python2.4/site-packages/zope/app/server/main.py, line 166, in setup options.eventlog() File /usr/lib/python2.4/site-packages/ZConfig/components/logger/factory.py, line 32, in __call__ self.instance = self.create() File /usr/lib/python2.4/site-packages/ZConfig/components/logger/logger.py, line 42, in create handler = handler_factory() File /usr/lib/python2.4/site-packages/ZConfig/components/logger/factory.py, line 32, in __call__ self.instance = self.create() File /usr/lib/python2.4/site-packages/ZConfig/components/logger/handlers.py, line 69, in create logger = self.create_loghandler() File /usr/lib/python2.4/site-packages/ZConfig/components/logger/handlers.py, line 87, in create_loghandler handler = loghandler.FileHandler(path) File /usr/lib/python2.4/site-packages/ZConfig/components/logger/loghandler.py, line 34, in __init__ StreamHandler.__init__(self, open(filename, mode)) IOError: [Errno 13] Permission denied: '/home/ballen/myzope/log/z3.log' [EMAIL PROTECTED]:~/myzope$ - Ok, that didn't work. So, I tried starting Zope as sudo, which also didn't work. Here is the transcript: -- [EMAIL PROTECTED]:~/myzope$ sudo ./bin/runzope Password: Traceback (most recent call last): File ./bin/runzope, line 48, in ? run() File ./bin/runzope, line 44, in run main([-C, CONFIG_FILE] + sys.argv[1:]) File /usr/lib/python2.4/site-packages/zope/app/server/main.py, line 58, in main setup(load_options(args)) File /usr/lib/python2.4/site-packages/zope/app/server/main.py, line 169, in setup zope.app.appsetup.config(options.site_definition) File /usr/lib/python2.4/site-packages/zope/app/appsetup/appsetup.py, line 52, in config context = xmlconfig.file(file, execute=execute) File /usr/lib/python2.4/site-packages/zope/configuration/xmlconfig.py, line 557, in file context.execute_actions() File /usr/lib/python2.4/site-packages/zope/configuration/config.py, line 622, in execute_actions callable(*args, **kw) File /usr/lib/python2.4/site-packages/zope/app/onlinehelp/onlinehelp.py, line 123, in registerHelpTopic raise ConfigurationError( zope.configuration.config.ConfigurationExecutionError: zope.configuration.exceptions.ConfigurationError: Help Topic definition /usr/lib/zope3/lib/python/zope/interface/README.txt does not exist in: File /usr/lib/zope3/lib/python/zope/app/apidoc/bookmodule/book.zcml, line 11.4-16.10 bookchapter id=interface title=Interfaces doc_path=README.txt parent=ifaceschema / So, I'm stuck. Any help on this would be much appreciated. ___ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users