Encolpe Degoute - Ways to investigate for the future of Plone
Talk from Plone Conference 2012.
Encolpe Degoute talks about ways to investigate for the future of Plone, during the Plone conference 2012. Let's look at Plone on various levels, from low to high, and see what can be changed.
Plone uses Python and C code.
What is the next Python to use? Options could be:
- CPython 2.7
- CPython 3.3
- Pypy
- Stackless Python
I think we should head for CPython 3.3 or Stackless Python.
Pypy does not (currently) use distutils, which is a big problem for Plone.
Does someone want to remove the GIL, Global Interpreter Lock? It would be good for performance, allowing you to use multiple CPUs, but it is hard to do.
For the network layer, Twisted is one of the worst frameworks to use. But it is written in Zope. So we should improve that, or switch. Synchronous versus Asynchronous. In Django you can switch the code that handles the network layer, for example Gunicorn. It is a big work, to be done in Zope 4 or Bluebream.
For storage we use the ZODB, storing objects as Python pickles. It uses a simple file (Data.fs) or a database (using RelStorage). A problem is that all transactions are stored in the ZODB, also when they are not useful anymore, which is why you need to pack the ZODB regularly.
Why Pickle? It is a Python specific format that can store binary objects. For more speed you need cPickle. If you want to replace it, you could use:
- JSON. It lacks schema validation. There is some variation in binary format.
- XML. You can use this to exchange messages, but it can be used as a storage format too. That should fit all the needs.
What can we improve in the ZODB?
- For B-Trees we can use stratified B-Trees, which is interesting for bigger sites.
- Better catalog indexes: use relational database power with RelStorage. The main developer of RelStorage does not want this in the core, it should be an extra package.
- Pack the ZODB: have a sub process that automatically cleans up old transactions.
Can we replace the ZODB? There are some production ready alternative databases, but they cannot completely replace the ZODB:
- Cassandra
- MongoDB
What about the basic framework, what can we improve there?
Have you looked with ZopeProfiler at a Plone site? Lots of things are called lots of times.
For a function of five lines, the initializing of the function normally takes more times than the execution. So we may want to use less functions. We need to use more Zope functions directly.
We need more asynchronouw services in Plone:
- Mail service
- transaction cleanup
- REST api
Can we switch to Bluebream and the ZTK instead of Zope 2? Are we ready for Zope 4?
For Plone, should we keep the CMF or push it in the ZTK? It was agreed that it was useful, but nobody wanted to do the work.
Which visual editor should we use? There are several options:
- TinyMCE
- FCKeditor
- Aloah
- VIE and Create.js
Main problem of all of them: integration.
In Plone we can use dexterity. We could switch everything to this instead of Archetypes. There is no toolkit currently to migrate content types and content objects from Archetypes to dexterity. That would be good to work on.
Have som file format integration. Plone should be able to create a documents from its internal format, like Open Document and PDF.
What about semantics? For example Schema.org. How can we include microformats in a Plone site? Did somebody work with Virtuoso?
So: lots of things that we could work on!