Under-the-hood improvements

by Jon Stahl last modified Sep 01, 2010 05:06 AM
Plone 4 makes life easier for developers and integrators. We've upgraded our core infrastructure, cleaned up a lot of code and smoothed out lots of rough edges.

Plone is based on Python and Zope.  Both have released major new versions since Plone 3 came out, and with Plone 4, we get to enjoy their many benefits.

Plone 4 ships with Python 2.6, a proven and officially supported release of Python. It's faster than earlier Python versions, has improved memory management and a lot of improvements to the language syntax. Python 2.7 support is expected to be available for Plone 4.1.

Plone 4 uses Zope 2.12, which brings bring improvements to the Zope web framework -- the most significant of which is support for flexible storage options (RelStorage for use with SQL databases, BLOB storage for use with large media files).  Zope 2.12 is fully “eggified."  Eggs are the standard method for distributing Python packages, and what this means in practice is that you can upgrade your Plone version, your Zope version and everything related to it with Buildout.

This makes upgrading easier, since you just change the version number of Plone in your configuration file to the version that you want to upgrade to, run Buildout, and let us figure out the rest for you. You'll like it.

With each Plone release, we bring hundreds of small fixes that add up to a whole lot of polish.  Some of the small but important improvements that will make Plone developers happy are:

This list won't make much sense to you unless you're a dyed-in-the-wool Plone developer, so feel free to skip to the next section!

  • Starting Plone 4 is roughly 3 times faster than in Plone 3.
  • Plone 4 ships with the new, faster jQuery 1.4 release.
  • Creating custom emails is easier than ever with the new built-in Mailing Action Variable Substitutions:
    • Workflow variables
    • Dublin Core variables
    • Easier for add-on products to add new substitutions as part of their feature set
  • In-page display of the login page, advanced workflow actions, etc. — and a standardized way to do all these things in a consistent manner from your own applications using jQuery Tools.
  • It's now easy to create a site without default content.
  • The RSS template now sorts by publication date (not modified date) and includes the body text of the content.
  • Simplified terminology to match other systems — “Description” is now “Summary,” and “Categories” are now “Tags.”  (Don't worry, we haven't renamed "Collections" again. ;-)
  • ResourceRegistries now has an “authenticated” flag which can be used instead of an expression for resources that should only be available to any authenticated user. This is faster than evaluating an expression.
  • Debug (fg) mode now automatically enables debug mode for the Resource Registries, making it easier to develop JS and CSS. It can of course be put into production mode while the rest of the site is in debug mode, to make page loading faster too.
  • The default editor setting has been revamped, and it's now easier to set (or change) a site-wide default editor.
  • There's a control panel for configuring predefined image scales.
  • KSS is faster and lighter.
  • GenericSetup import has been added for Sharing Page Roles.
  • Add view support from CMF has been added, this makes it easier to create custom add forms for content types, and simplifies Dexterity integration.
  • Action Icons have been deprecated. One less tool to worry about, now you define action icons directly on actions instead using “icon_expr.” The old format will continue working until Plone 5.
  • plone.app.upgrade is now the standard way to upgrade a Plone site, as well as add-on products. We “eat our own dog food,” and use GenericSetup upgrade profiles to handle Plone upgrades too.
  • Additional Dublin Core properties support makes it easy to expose Dublin Core metadata in rendered HTML.
  • Improved display of hidden and blocked portlets.
  • Plone now uses Full Names everywhere, i.e. displays the user’s full name instead of username everywhere, including search results & RSS Feeds.
  • archetypes.referencebrowserwidget replaces Products.ATRefBrowser, some advantages are:
    • Massive performance improvements,
    • Easily overridable template,
    • Proper test coverage.
  • Images will now set IDs based on the Title field. This makes images act more like other types, and gives images more memorable IDs. Instead of “DSC_084308.jpg,” you get a proper, normalized ID. This only applies if you give it an explicit title, so you can still keep filename-as-title by behavior by not supplying a title when adding.
  • Plone now uses the Distribute packaging system instead of the languishing Setuptools as its default package handling system.