Planet Plone

This is where developers and integrators write about Plone, and is your best source for news and developments from the community.

September 14, 2012

Core Software Group: Plone Hello World Tutorial

by Mike Cullerton at 2012-09-14T18:20:30Z

About a month ago, there was a bit of a ruckus on twitter about the state of Plone and documentation and what not.

 

There was a specific request for a Hello World type tutorial introducing Plone development. After talking with Mikko and others on IRC, I put some ideas together and released a first attempt a few days later.

Over the last few weeks, I've put time into adding more sections, reorganizing the layout, and general cleanup. Tonight, I pushed those changes to the developer manual at http://collective-docs.readthedocs.org/en/latest/getstarted/helloworld/index.html

 

At this point it's starting to take shape. There are holes in it, and things I'd like to clean up, but it's a good start.

I'd like to get some feedback. What do folks think? What is missing? Are there any errors?  Really, anything helpful is appreciated.

You can comment here, or reach me @cullerton on twitter.

Thanks,

Mike

Plone Conference 2012: Sleep on a Ship, party on the Ploneboat

by Plone Conf Organization at 2012-09-14T14:51:25Z

We want to keep the costs as low as possible. Therefore we need a fully booked boat. Only then we'll get 'bang for bucks'. If we manage to round up enough people we will have a great place to sleep and to party for a good price. A floating hotel for Plonistas only. No restrictions, no closing hours and no strangers in the next room.

A sweet deal and within reach if you follow the next sequence of instructions: If you already booked a hotel, contact the reception and get it canceled. Step two: contact us and book a bed on the Plone boat. If you did not already secure a hotel room it is even easier: contact us with the message 'Please get me on that boat'.

You think these terms are harsh? They are. We really like to have a dedicated boat but we need your help to make it all happen. To get a place on the boat please register online. If you are with two persons we will assign you to a quarter. if you are alone we will allocate a bed with a randomly picked roommate.

Once again the deal: you pay only € 499 for your stay during the whole event. (October 8th - October 15th). Remember you pay this price even if you stay fewer days.

Kees Hink: How to disable WebDAV in Plone

by Kees Hink at 2012-09-14T08:50:23Z

You can't disable WebDAV in Plone itself, it's tightly integrated in Zope. Running WebDAV on another port would be okay, but using the webdav-address directive in buildout will only add an additional port on which Zope listens (webdav-source-server part in zope.conf). The existing port will still accept WebDAV traffic. What you can do: Make your web server filter out the WebDAV commands. For

September 13, 2012

Plone Conference 2012: What's in a name?

by Plone Conf Organization at 2012-09-13T14:53:09Z

The choice is yours. You can add your own name or the name of a business in the tag cloud. It is your claim to fame (at least for a few days) and it gets better. You can choose the font size: the more you sponsor, the bigger your name will be printed. That way even people with less resources have a chance to sponsor the event.

There are several font sizes that ranges from 25 up to 200+ euro in costs. Be modest, average or go crazy and get your name on that shirt in king size. The tag cloud is not only visible on the conf shirt, it will also be shown on the banners and flyers. We decided to exclude the use of logos so there is more space for names or company names.

In our opinion it is a win-win situation. More exposure for you and more funds for the conf. So get out your credit card and supply us with the desired name. The deadline is set on September 19th 5:00 PM Central European Time.

September 12, 2012

Lennart Regebro: Presenting tzlocal: A simple way to get your local timezone for pytz!

by Lennart Regebro at 2012-09-12T17:38:37Z

The Python timezone library pytz has one missing feature. There is no way to get the computers local timezone, unless you know the name of it, and figuring out the name is not always possible on some unix distros. And on windows, the timezone names are competely different from the ones pytz uses. dateutil.tz has support for it, but pytz does not.

tzlocal fixes that, by giving you a simple method get_localzone() that will return your local computers timezone as a tzinfo object, for use with pytz as normal.

Usage is simply:

>>> from tzlocal import get_localzone
>>> tz = get_localzone()

Any operating system with a zoneinfo file in /etc/localtime is supported, and also Windows. It needs widespread testing on many different distributions and different versions of Windows, so if you want to help, install it and test it on your computer!


Filed under: calendaring, plone, python, python3 Tagged: pytz, timezones

September 11, 2012

Plone.org: The Plone Community Celebrates its 60th Tune-Up event

by Gabrielle Hendryx-Parker at 2012-09-11T20:33:51Z

The Plone Community is coming together in one of its largest global sprints ever in honor of the 60th Plone Tune-Up - which is scheduled to take place on Friday, September 21st. Ten worldwide organizations have pledged a record total of close to 30 programers, testers, designers and marketers to advance the open source content management system.

Plone Tune-Ups are regularly-scheduled, one-day mini-sprints where members of the Plone Community from around the world come together online to grab some outstanding tickets from the Plone Trac system and help move Plone forward.

Tune-Ups offer an excellent environment for new developers to get started with Plone development and understand the process used by the community for identifying, tracking, and resolving issues with Plone. Development experts from the community are available online during these events to provide help and answer questions. Tune-Ups also offer structured time where established developers can spend a couple of hours picking out and resolving important tickets. Tickets for each Tune-Up are tagged as to level of difficulty and relative time needed to resolve them, making choosing the right tickets to work on a straightforward process.

The Tune-Up format and events were the brainchild of Plone development and hosting company Six Feet Up, and September 21st marks the 60th Tune-Up since the first event was held in 2009.  Tune-Ups have been responsible for closing close to 400 tickets since that time.

You can find out more about Plone Tune-Ups by visiting the Plone Tune-Up Network, which will provide all the information you need to get started with this important work.

Whether you are a long time Plone developer, or just someone interested in getting started, you are invited to attend the 60th Plone Tuneup on Friday, September 21st, 2012.

Lennart Regebro: I’m looking for projects!

by Lennart Regebro at 2012-09-11T18:59:49Z

I have nothing booked from about one week from now, so if anyone has a project they need a developer for, and it has anything to do with Python or Plone, then contact me at regebro@gmail.com.

I can take on small week-long projects, or long projects that last months. I can work part time on-site, but I want to spend most of the time at home with my family so I will not work full-time outside Kraków.

Lennart Regebro CV


Filed under: plone, python

David Glick: Goodbye, Groundwire. Hello, world!

by David Glick at 2012-09-11T18:16:57Z

In the summer of 2007 I graduated from college, moved to Seattle, and started working as a web developer for Groundwire, then called ONE/Northwest. This week, five years later, I'm both sad and excited to announce that I'm moving on.

Working at Groundwire has been a fantastic experience for which I am deeply grateful. I got to work with the best colleagues in the world, as well as some awesome clients whose missions I believe in. I learned a lot about shepherding nonprofit organizations through the process of doing a significant technology project. I was privileged to spend time pushing the Plone content management system to the next level and building deep integration between it and the Salesforce.com CRM platform. Groundwire is still doing great work to help nonprofits engage their constituents, and if you're currently looking for a great opportunity to combine your tech skills with a desire to work for good, I can wholeheartedly recommend applying for one of Groundwire's open positions.

But nevertheless, it's time for me to "level up" to the next challenge. After Thursday, I will start working as a freelance contractor specializing in Plone, Python, and web app development. I'm looking forward to working with and contributing my skills to some other great consultancies and clients, as well as learning new tools and techniques for constructing web-based solutions. And I'm looking forward to having a more flexible schedule with more chances to work on my own projects in addition to paid work.

The Plone content management system has grown dear to me during my time at Groundwire, and I will not be abandoning it. During the next few weeks leading up to the annual Plone conference, I plan to spend as much time as possible working on various Plone-related improvements that I have had scarce time for lately, including:

  • Attending the Sea Sprint and pushing forward the Deco layout system
  • Continuing to improve Dexterity's capabilities for building content types through the web
  • Helping prepare the release of Plone 4.3 (including completing the demise of KSS)

I'll be doing this work on a volunteer basis, but if you've benefited from my contributions to Plone and/or want to help make sure I continue to have time available to work on it, please consider leaving me a tip:

Following the Plone conference, I am scheduling projects for mid-October and beyond, and am especially interested in:

  • Chances to work with Plone, Pyramid, and/or other Python-based web frameworks—or train other developers on how to use them well
  • Web projects that are interactive rather than merely presenting information
  • Projects that expand what is possible for non-developers to accomplish using Plone
  • Projects that are driven in part by a "social good" mission rather than merely profit

If you have something like that I can assist with, please be in touch!

September 10, 2012

Plone.org: Plone Foundation announces Plone Conference 2013 selection process

by Érico Andrei at 2012-09-10T20:26:55Z

Organizing a Plone Conference is very rewarding. It is also a lengthy process. That is why the Plone Foundation has kicked off the process of picking the next conference venue earlier than usual.

Based on the experience of the Foundation board members who have planned conferences (Arnhem 2012, Bristol 2010) and after talking to other conference organizers, we realized the incredible value in sharing the current event experience in person, in real life, talking face to face with the planners. The extended timeline will allow groups and organizations interested in hosting Plone Conference 2013 (or beyond) to work with the team in Arnhem on the conference in October getting hands on experience.

The longer lead time is also preferable for securing the best locations, caterers and other necessities that will make Plone Conference 2013 a unique experience for the attendees.

The Plone Foundation will accept proposals from October 1st to November 11th. The winning venue will be announced on December 3rd. Foundation members will have an opportunity to voice their preference on the final selection and we're hoping for a variety of options from which to choose.

The Plone Conference 2013 Call for Proposals, including the full schedule for the process and in-depth requirements for hosting it, can be found at:

Asko Soukka: Speed up your Plone add-on tests on Travis CI with the Unified Installer

by Asko Soukka at 2012-09-10T20:19:17Z

Many thanks for Héctor Verlarde for encouraging us to try out Travis CI for testing our own Plone add-ons. Also, thanks for Godefroid Chapelle for showing me, how to run Selenium tests on a headless server, e.g. on Travis CI.

As you may already know, the main issue in testing Plone add-ons on Travis CI is its strict 15 minute time limit on running your test suite. And as you may also know, 15 minutes is not much time for our dear buildout to gather all the required dependencies of Plone or plone.app.testing, and still run our test after the buildout.

As expected, neither did I get far without having issues with the time limit. And for some reason, I couldn’t get the earlier solutions to work for me. Eventually, I found out a new solution, surprisingly, with the help of Plone Unified Installer.

Because Plone Unified Installer comes in a single downloadable package and includes a complete buildout-cache usable also in a test buildout, I realized, that it could speed up my test buildout a lot, and it did. Yet, with Plone 4.3 shipping with Dexterity, I would expect it to speed it up even more.

Enough talk. Here’s my setup:

buildout.cfg

[buildout]
extends = http://dist.plone.org/release/4.2.1/versions.cfg
develop = .
parts = test
versions = versions

[versions]
zc.buildout = 1.6.3

[test]
recipe = zc.recipe.testrunner
eggs = my_package [test]

Nothing special here. I’m not sure if zc.buildout = 1.6.3 makes any difference, but I added it nevertheless. Also, I expect setup.py of the tested package to include complete extras_require={'test': ... } with all the required dependencies for testing.

So, on a local machine, python bootstrap.py, bin/buildout and bin/testcombo should run tests for a freshly cloned package repository just as expected.

travis.cfg

[buildout]
extends = buildout.cfg
parts =
download
install
test
eggs-directory = buildout-cache/eggs
download-cache = buildout-cache/downloads

[download]
recipe = hexagonit.recipe.download
url = https://launchpad.net/plone/4.2/4.2.1/+download/Plone-4.2.1-UnifiedInstaller.tgz

[install]
recipe = collective.recipe.cmd
on_install = true
cmds = tar jxvf ${download:location}/Plone-4.2.1-UnifiedInstaller/packages/buildout-cache.tar.bz2 1>/dev/null

Here’s the magic for re-using Plone Unified Installer for your test buildout:

  1. Ar first, download and unpack the installer in [download] part
  2. then extract its buildout-cache in [install] part into the locations defined in [buildout] part.

As you might guessed, after this, buildout needs to download only the extra requirements of the tested package! Long live Plone Unified Installer!

.travis.yml

language: python
python: "2.7"
install:
- mkdir -p buildout-cache/eggs
- mkdir -p buildout-cache/downloads
- python bootstrap.py -c travis.cfg
- bin/buildout -N -t 3 -c travis.cfg
script: bin/test

Note, how we create the buildout-cache-directories defined earlier in travis.cfg. The rest should be easy: we just do the bootstrap and run our tests with sane buildout-options, and… that’s all.

.travis.yml for robotsuite

Oh, in the beginning, I mentiond about learning something important from Godefroid. Well, if you have followed me on creating zope.testrunner-compatible Robot Framework -tests with plone.app.testing, you only need to add a few extra lines to make your Robot Framework tests runnable on Travis CI:

language: python
python: "2.7"
install:
- mkdir -p buildout-cache/eggs
- mkdir -p buildout-cache/downloads
- python bootstrap.py -c travis.cfg
- bin/buildout -N -t 3 -c travis.cfg
before_script:
- "export DISPLAY=:99.0"
- "sh -e /etc/init.d/xvfb start"
script: bin/test

If you think, this is cool, please, give some love for the Travis CI team.

Build Status

Martijn Faassen: Dear Django, please ask others about packaging!

2012-09-10T14:17:12Z

Introduction

Dear Django, and any human beings interested in what I have to say too... This blog post is ostensibly about Python packaging. It's responding to Tarek's post.

But I'm actually currently not that concerned about Python packaging - it's good to see it is improving! This blog post is really a plea for people to learn from others if possible, in this case about packaging. So if you take message to heart already, you can just stop reading now and I won't mind.

Of course my whole core spiel about learning from others could be seen as hypocritical as I haven't bothered to learn much about distutils2 yet and admit this below. This is because I'm not anticipating an imminent switch to it myself, nor am I actively working on Python packaging solutions. I do hope to learn more about NodeJS's npm at some point, which currently confuses me but also vaguely intrigues me...

I understand why distutils2 is there. It was high time to take a fresh look at Python packaging. And when you do this it is useful to ignore details for a while - you can't change everything in one big step.

I also understand why Tarek sees Django, one of Python's most popular frameworks, as a great opportunity to help distutils2 adoption. This is because core Django has rejected automated packaging tools until now. That's a great opportunity for distutils2. I'm one of those people who has talked about Django and packaging before. I'm all for Django look into adopting distutils2. Sounds like a good way forward for Django!

I think Tarek or others could also help distutils2 adoption a lot by offering interoperability features between old & smelly stuff with distutils2. More of that please! I hope we'll get to a world soon where I can adopt distutils2-based packages in my existing buildout-based Python 2 stacks.

Now we're done with the preamble, and we'll get to the core of my point.

Greybeard leans over cane and tells his tale...

Setuptools is messy and has misfeatures. But people have been doing all kinds of advanced packaging projects on top of it for over 5 years nonetheless, with all kinds of great incremental advances along the way, and lots of experience gained.

So the existing, smelly, messy stack got strengths too. I really like being able to be able (with buildout) to automatically install even very complex development environments that some other developers have worked on, or give mine to others. That happens quite a lot to me, and the alternative of telling people to follow complex manual instructions would have been quite painful.

So I get a bit frustrated when Tarek says:

Some people will tell you that the new things we've built are not production-ready or that they don't match the features Setuptools provides. But ask yourself if those Setuptools features are really something you want or are subcultures additions from some specific communities.

This is because he is not countering any specific argument about bits not being production ready, nor is it about particular missing features, meaning this counterargument is, frankly, just as worthless as saying "it's not production ready" without elaboration. It may even be somewhat dangerous.

To ignore hard-won experience merely on the basis handwaving it away as "subculture additions from some specific communities" is to throw out the experience of those communities, and then you risk being condemned to repeat some bad history, as, face it, quite a few of us subculture folks over here (and I'm including Tarek) have way more experience with Python packaging than the subculture of the Django core developers.

Subculture grumbles

I don't know what distutils2 infrastructure can or cannot do. If I, native of some undoubtedly backward setuptools-stack subculture, were to evaluate it, I'd certainly look for various things.

I'd want to know whether it can pin down versions of library dependencies somehow for my projects. My subculture finds this very important. Are these just useless backward traditions?

I'd also definitely want some of the features of mr.developer available to me, so I can easily check out various dependencies of a project in a hackable form. Another one of those subcultural quirks, or worthwhile even in modern civilization?

I'd like there a way for me to automate the installation of scripts and applications that I can then invoke from the command-line, because I find my subculture projects doing quite a bit of that. Perhaps this is just ancient subculture stuff or do modern folks need that too?

If I were to build large projects, I'd probably want some features along the lines of buildout for including non-Python code. Can we do without such quaint notions in modern times?

Hohum, so, if you are thinking about adopting distutils2, please do ask yourself what particular neat features are offered by setuptools, buildout, pip, mr.developer, instead of saying "it's just some subculture thing we don't care about".

Instead, I hope people will try to establish the use cases handled by these in a distutils2 world in some shape or form. Hopefully it'll work better with better documentation. Or at least people can reject the call for particular features with considered opinions and solid counterarguments.

Now I know that's probably what Tarek means himself when he says that subculture stuff that just rubs me the wrong way:

But ask yourself if those Setuptools features are really something you want or are subcultures additions from some specific communities.

Do consider feature requests carefully. Try to understand the underlying use cases. But don't use the "subculture additions from some specific communities" argument to handwave arguments or people away.

Plone Conference 2012: Get on that boat

by Plone Conf Organization at 2012-09-10T12:21:09Z

This boat (we still have to come up with a suitable name) is basically a mobile hotel, that can be booked in any city close to water. As soon as we found out we might have a bed shortage we made contact with the company that provided these types of boats. If we manage to get it fully booked, it will set sail for Arnhem.

Imagine a place within walking distance to the city center where you can sleep, shower and hang out with fellow Plonistas. The boat has its own bar and on shore there are many bars en restaurants overlooking the river Rhine. We think it is a very good alternative to a regular hotel because of the location and the fact that its residents will be Plonistas only.

Last chance

We need to get the boat full, mail ploneboat@ploneconf.org to get yourself a spot.

Once again this offer of a life time: you pay only € 499 for a place to sleep during the whole event (October 8th - October 15th). Mail now to ploneboat@ploneconf.org and state the amount of beds you need. Remember that you pay € 499 even if you stay fewer days.

Danilo Dellaquila: Como sobrescribir las traducciones de Plone en 5 minutos

by Danilo Dellaquila at 2012-09-10T10:35:00Z

Hace un par de días Giorgio Borelli, plonista italiano, publicó un articulo en el blog de OpenAbstract sobre las traducciones de Plone, un tema que interesa mucho también a los plonistas de habla hispana, así que os pongo aquí una traducción de su entrada con la esperanza de que le sea útil en sus proyectos.


 

En algunas instalaciones de Plone y por diferentes razones, tenemos la necesidad de cambiar las traducciones. A un cliente no le gusta la palabra Descripción, a otros no les gusta Entrar, otra veces la traducciones en el idioma desado no están todavia disponibles para la versión liberada de un paquete.

Así que tenemos la necesidad de un método claro y rápido para sobrescribir las traducciones de sólo algunas partes de Plone sin tener que intervenir directamente en en paquete que les incluye.

Crear parches o sobrascribir los scripts y los templates para estos trabajos no son seguramente las soluciones mejores y la solución que hemos adoptado hasta ahora ha sido la de incluir las traducciones en un paquete creado appositamente por un cliente asegurándose de que este venía cargado en Zope después de todos los demás paquetes.

De esta manera hemos resuelto el problema, pero hay una pequeña y molesta obligación que tener en cuenta: recordarse dónde incluir el paquete con las traducciones.

Afortunadamente desde la versión 4.2.2 de plone.recipe.zope2instance, liberada en Julio, es posible configurar un directorio que contiene las traducciones adicionales que queremos incluir.

Entonce podemos añadir esta configuración en nuestro buildout:

...
[instance]
recipe = plone.recipe.zope2instance
locales = ${buildout:directory}/locales
...

Crear el directorio locales en la carpeta del buildout y construir en su interior la clásica estructura de una carpeta de contiene traducciones:

es
  - LC_MESSAGES
    - plone.po
    - otro.paquete.po
it
  - LC_MESSAGES
    - plone.po
    - altro.pacchetto.po
en
    - LC_MESSAGES
    - plone.po
...

los ficheros .po deben contener el header correcto para la traducción y sólo los mensajes que queremos sobrescribir, por ejemplo:

msgid ""
msgstr ""
"Project-Id-Version: Plone\n"
"POT-Creation-Date: 2012-09-08 19:30+0000\n"
"PO-Revision-Date: 2012-09-08 13:00+0100\n"
"Last-Translator: Giorgio Borelli <...>\n"
"Language-Team: Abstract\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n!=1\n"
"Language-Code: it\n"
"Language-Name: Italiano\n"
"Preferred-Encodings: utf-8 latin1\n"
"Domain: plone\n"
"X-Is-Fallback-For: it-ch it-it\n"

#. Default: "You are here:"
#: plone.app.layout/plone/app/layout/viewlets/path_bar.pt:6
msgid "you_are_here"
msgstr "Ecco dove ti trovi:"

Referencias y más información:

by Danilo Dellaquila at 2012-09-10T10:35:00Z

Hace un par de días Giorgio Borelli, plonista italiano, publicó un articulo en el blog de OpenAbstract sobre las traducciones de Plone, un tema que interesa mucho también a los plonistas de habla hispana, así que os pongo aquí una traducción de su entrada con la esperanza de que le sea útil en sus proyectos.


 

En algunas instalaciones de Plone y por diferentes razones, tenemos la necesidad de cambiar las traducciones. A un cliente no le gusta la palabra Descripción, a otros no les gusta Entrar, otra veces la traducciones en el idioma desado no están todavia disponibles para la versión liberada de un paquete.

Así que tenemos la necesidad de un método claro y rápido para sobrescribir las traducciones de sólo algunas partes de Plone sin tener que intervenir directamente en en paquete que les incluye.

Crear parches o sobrascribir los scripts y los templates para estos trabajos no son seguramente las soluciones mejores y la solución que hemos adoptado hasta ahora ha sido la de incluir las traducciones en un paquete creado appositamente por un cliente asegurándose de que este venía cargado en Zope después de todos los demás paquetes.

De esta manera hemos resuelto el problema, pero hay una pequeña y molesta obligación que tener en cuenta: recordarse dónde incluir el paquete con las traducciones.

Afortunadamente desde la versión 4.2.2 de plone.recipe.zope2instance, liberada en Julio, es posible configurar un directorio que contiene las traducciones adicionales que queremos incluir.

Entonce podemos añadir esta configuración en nuestro buildout:

...
[instance]
recipe = plone.recipe.zope2instance
locales = ${buildout:directory}/locales
...

Crear el directorio locales en la carpeta del buildout y construir en su interior la clásica estructura de una carpeta de contiene traducciones:

es
  - LC_MESSAGES
    - plone.po
    - otro.paquete.po
it
  - LC_MESSAGES
    - plone.po
    - altro.pacchetto.po
en
    - LC_MESSAGES
    - plone.po
...

los ficheros .po deben contener el header correcto para la traducción y sólo los mensajes que queremos sobrescribir, por ejemplo:

msgid ""
msgstr ""
"Project-Id-Version: Plone\n"
"POT-Creation-Date: 2012-09-08 19:30+0000\n"
"PO-Revision-Date: 2012-09-08 13:00+0100\n"
"Last-Translator: Giorgio Borelli <...>\n"
"Language-Team: Abstract\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n!=1\n"
"Language-Code: it\n"
"Language-Name: Italiano\n"
"Preferred-Encodings: utf-8 latin1\n"
"Domain: plone\n"
"X-Is-Fallback-For: it-ch it-it\n"

#. Default: "You are here:"
#: plone.app.layout/plone/app/layout/viewlets/path_bar.pt:6
msgid "you_are_here"
msgstr "Ecco dove ti trovi:"

Referencias y más información:

September 09, 2012

Eric Steele: Plone: The Second Decade

2012-09-09T19:21:15Z

Plone is facing an increasing number of external stressors. The economy is sinking whole companies. People who had previously relied on Plone as a software application platform have begun to opt for Pyramid instead. Mozilla lures away disenchanted developers. Names once common on mailing lists and change logs aren’t seen so much anymore. In the last 3 years, we’ve lost a lot of people that have been central to Plone’s success. Understandably, there’s been a good deal of angst over this and it’s something we absolutely cannot ignore.

So here’s the thing…

1). People move on. Worrying about or trying to win those people back is a waste of time and effort.

This sort of turnover, or “generational relay”, is nothing new to OSS projects. The “half-life” of a Debian developer is estimated to be about 7.5 years; to hope for more for Plone is a fool’s game. And we’re awesome people; though they may no longer be actively contributing to the project, those who have departed have often happily remained our friends, advisors, and advocates.

2). We have the same amount of talent as (if not more than) ever, but it’s spread out over more people. This is a good thing.

According to Oholo’s tracking, the number of active core contributors has increased by 15% over the previous 12 month period. What losses we’ve seen have been replaced by a larger number of new contributors.

3). In fact, I think the Plone community has dramatically increased in diversity – abilities, geographic, and otherwise, we’re just doing a bad job of recognizing and utilizing it.

The three regional Plone conferences this year have had over 500 attendees combined, yet we still use the annual worldwide conference as our measure for community interest. At Plone Symposium South America, 18 people signed their Plone Contributor Agreements, six of whom had made their first contributions to Plone by the end of the week. Over the past year, we’ve averaged one major sprint each month, and those have been spread across nine different countries.

I received an email from a man who has been working with Plone since its earliest days. Two weeks ago he made his first contribution the the codebase. I am thrilled to have him join us, but I have to wonder why it took us all so long to call on him to help.

We have Python and JavaScript developers, designers, marketers, writers, sysadmins, organizers, leaders, all waiting at the periphery for someone to invite them in and show them around.

4). These are good problems to have, because we absolutely can fix them.

We’re still doing great things. Plone is outstanding software, and is getting better with each release. We’ve got a good handle on the directions the product will take in the future.

But the problem is this: We’ve coasted on the idea that our community of contributors is so strong and have ignored the fact that it needs to be actively nurtured to remain so. We all need to feel ownership and responsibility for Plone again. We need to stand up to cheer and point out when somebody does something awesome. We need to make sure people who have an interest in contributing can quickly find a way to do so. We need to give people the information and resources they need to make the most of their contributions. We need to promote people who have shown drive and leadership into roles where they can be most effective.

So, here in year eleven of the project, what is the future of Plone? It’s you, it’s us, it’s saying “thank you” to everyone who got us through the first ten years, and it’s saying “We’ll take it from here”.