2013

These projects were proposed for the 2013 Google Summer of Code

Improved text transforms

Summary

There is a system for converting data between mimetypes in Plone called portal_transforms. A previous GSoC project started a succesor codebase, itrequires integration into Plone and conversion of existing OOTB transforms.Some new transforms, like syntax highlighting and LaTeX would also be cool.

Implementation

This would continue on from plone.transforms as a core utility.

Skills

Python.

Mentors

Any active core developer with assistance from Hanno

Aims

A working Plone using plone.transforms exclusively. This would target Plone 5 eventually, so backwards compatibility isn’t a big issue. We'd want someone really motivated to help push this project into the core.

Dexterity schema specification through HTML

Summary

Dexterity content types are currently defined by a zope.schema based interface and/or an XML file. This is then used to generate a HTML form. This project would flip that around and take a HTML form definition and generate a dexterity type to back it.

Implementation

This would take a HTML5 form with supermodel hints in the data attributes of the form. It would need to be compatible with the other ways of generating dexterity types especially round-tripping TTW to the filesystem.

Specifically, it should also be possible to convert a pre-made dexterity form to a HTML page that would generate the same content type.

Skills

The Plone/Dexterity knowledge would be quite minimal as the supermodel package and associated code is quite clean and encapsulated. The documentation, however, is quite poor and a secondary objective would be to improve supermodel and autoform documentation.

Mentors

Somebody with good experience with Dexterity, such as a participant at the Emerald Sprint. Any Plone hard-hitter would be great, though.

Aims

Extension to supermodel and dexterity that works with its release schedule.

Content Drafts

Summary

plone.app.drafts allows content that hasn't been finished yet to be auto-saved to a special location so that if the user has an issue with their browser or connection it's not lost.

Implementation

Integrate and extend plone.app.drafts into Plone with support for Archetypes and Dexterity. The back-end support is pretty much there but it needs a UI and integration with content type frameworks.

Skills

Plenty of Python and knowledge of Zope. Experience in dexterity would certainly be helpful.

Mentors

Elizabeth Leddy, or any Plone core developer would be appropriate

Aims

Improvements of existing packages and PLIP for Plone 5

Android Plone Application

Summary

The wordpress mobile app is a really, really cool idea. A plone version would be more difficult, as we have a more hierarchical content structure, unlike wordpress, but it should be possible to display content, notify of worklist additions, do workflow transitions and edit standard content. Advanced features would include exposing Plone events in the android calendar and exposing members as contacts.

Implementation

This would likely be a Davlik Java app, but other options may be possible – for example if it is possible to wrap python sensibly that would be nice, but it would need full API access so seems unlikely. There are also systems for deploying to multiple types of device, but pros and cons would need to be weighted. This would be a first-class android application, other options are possible, but remember iPhone applications are likely not possible due to licence restrictions.

Skills

Java and experience with android development are needed. Also, you don't NEED an android phone to do this project, but it would be helpful.

Mentors

MatthewWilkes is interested in this

Aims

A free and open source application on the android market.

Automatic theme conversion to a diazo theme

Summary

Funnelweb attempts to crawl a site and extract an existing sites content and import it into Plone. It leaves behind the theme. Work could be done to instead transform the old sites "theme" into an installable Diazo theme package as part of the same content migration process. This would result in a new plone site with the same content and theme as the original site. This would help provide less friction in the uptake of Plone.

Skills

Python knowledge, and XSLT/XPATH is an absolute must.

Mentors

Dylan Jay

Aims

A new third-party library or funnelweb enhancement

Better Microsoft/Open Office integration

Summary

Sometimes, people prefer to work offline. We should optionally support editing content in Microsoft Word. One way to do that is to generate a protected document that acts like a form, and parse the form on upload/save to extract the data.

Implementation

It should be possible to launch a desktop application from within the CMS (external editor) and also to save or drag-and-drop a document onto the desktop for offline editing and later re-attachment. Ideally, this should work on collections of documents (e.g. a whole folder). For this to be seamless, we also need the ability to check in/check out and invoke workflow transitions from within the application, via a special menu.

Skills

Python, word/openoffice scripting.

Mentors

Martin Aspeli is most interested, but he won't have time to mentor. He'd be a good product owner, with a generalist as the mentor itself.

Aims

An add-on product in the collective

Heads up display control panel

Summary

Drupal has this. We would love a control panel that gives a lot of info about a Plone site and grades it into Good, Ok, Bad. Such as caching, threads, login times of managers, etc, etc.

Implementation

A configlet that access many low-level Zope APIs, normal Plone APIs and system ones. Must work on Linux, OSX and Windows. A lot of the work here will be in talking to different people in the community to come up with recommendations and working out an API that can support the various things that need checking

Skills

Python, and you'll learn a fair bit of z3c form and writing platform independent code

Mentors

Any generalist, but Matthew Wilkes is particularly interested.

Aims

A core contribution and PLIP for Plone 5.

HTML5 offline support

Summary

A combination of HTML5 localstorage and javascript can be used to implement an “offline mode”, with changes stored up until the computer is back online. This would be interesting to integrate into plone as an add-on product, allowing content authors to beproductive offline (or on slow internet connections!)

It would need to be configurable with sensible defaults, so only the right content is cached offline. Integration with worklists and the workflow engine would be very useful.

Implementation

This would either be implemented using HTML 5 and SQLite. It may only be compatible with some browsers at this stage.

Skills

Javascript, Python, HTML5, SQL.

Mentors

Any all-rounder with knowledge of JS.

Aims

Support in core and a PLIP for 5.x

Better helper packages for the security team

Summary

There are two packages that are works in progress to manage security vulnerability notification. The first one is designed to integrate with plone.org (or any other website listing security vulnerabilities). This package needs finishing in order to make management of vulnerability publication for Plone easier. Part of that package provides a remote API for the other package which will run in Plone sites, to notify administrators of new problems.

Implementation

There are existing skeletons for this, started in 2011 at the Plone conference in San Francisco.

Skills

For the plone.org section: Dexterity content types, general Python development. For the client side: simple Plone development.

Mentors

Matthew Wilkes

Aims

A PLIP for inclusion in core ASAP and integration into plone.org

Standardise profile pictures support

Summary

Plone handles user portraits differently to other pieces of metadata. Any PAS plugin providing portrait images needs to monkey patch Products.PlonePAS. Prominent examples are Products.Remember or SQL/LDAP plugins.

Implementation

There is extensive information on the proposed implementation at https://dev.plone.org/ticket/12870

Skills

This will be a heavy Python task. You will be touching lots of parts of Plone's infrastructure to adapt to the new API you design. You will need to learn some low level Zope functionality to achieve this project.

Mentors

Jens Klein has done the most work on this so far.

Aims

Branches of core products for the framework team to review.

Plone Multilingual Babel View

Summary

Additional features for our new multilingual site editing's UI. Specifically, enabling users to see the canonical version of a plone content when you are editing. There are different aproaches of how to deal with this problem, overlays with original content, side-by-side view

Implementation

At the core level, this is just a simple browser view, but you will need to learn a lot about plone.app.multilingual to make sure it's performant, and you'll need to talk to a lot of users to make sure it's useful. Some kind of connector to allow using translation memories on editing would be an optional goal on this project.

Skills

Python, perhaps some jQuery

Mentors

Ramon Navarro Bosch

Aims

A pull request for plone.app.multilingual before it enters core

A new Plone message board

Summary

Products.Ploneboard has been around since quite some time as the standard solution to build message boards in Plone. With dexterity and plone.app.discussion we introduced new technologies in Plone that should make it easy to re-build the Products.Ploneboard functionality from the scratch to write a future-proof, faster and more flexible solution for Plone.

Implementation

Copy the basic design of Ploneboard but update it to meet our current best practices and use the latest technology. A proof-of-concept implementation has already been implemented at https://github.com/tisto/collective.ploneboard

Skills

Python, HTML, JS and some minor Dexterity

Mentors

Timo Stollenwerk (former GSoC student)

Aims

Take over development of collective.ploneboard and make it a viable replacement for Products.Ploneboard

Automated screenshot generation for RobotFramework

Summary

Many plone products and themes have insufficient screenshots available, this project would create a library that automatically takes screenshots of Plone products that use Browser tests.

Implementation

Hook into the browser test system with zope.testbrowser and/or RobotFramework to get access to the connection to the server and intercept incoming requests. Use an open-source rendering engine like firefox's to render the page including images.

Skills

Python is a must, firefox/webkit is useful.

Mentors

Dylan Jay expressed interest in the past, a member of the CI team would be helpful

Aims

A new third-party library.

ReStructuredText-parser for Robot Framework

Summary

Robot Framework provides the easiest way to learn and write functional (Selenium) tests for Plone. Currently, Robot Framework tests can be written in separate text files or as embedded HTML tables. Implementing real Docutils-directives for Robot Framework would make it possible to embed Robot Framework tests into Sphinx-documentation and eventually use Robot Framework test (with Selenium) to embed screenshots into documentation.

Implementation

Currently, most Plone-related Robot Framework resources can be found at: https://ploneact.readthedocs.org/en/latest/ The current ReST-parser in Robot Framework is actually only a wrapper for the HTML-parser, but could still work as a starting point: http://code.google.com/p/robotframework/source/browse/src/robot/parsing/restreader.py Creating Docutils-directives is well documented, e.g. http://docutils.sourceforge.net/docs/howto/rst-directives.html

Skills

This is a pure Python project, no specialist Zope knowledge required

Mentors

Asko Soukka or any member of the CI team

Aims

A pull request for RobotFramework.

Robot Framework keyword library for zope.testbrowser

Summary

Robot Framework is currently the easiest way to learn and write functional Selenium tests for Plone. Robot is so much fun that it would be great to write all functional tests with it, but Selenium with real browsers is often frustratingly slow. When javascript is not needed, zope.testrunner should be much faster. It would be great if the two types of tests used the same API

Implementation

zope.testrunner library for Robot Framework could be written as a subset of Selenium2Library (all keywords that don't require javascript) so that developers need to learn only one set of keywords, and the library could also be tested with Selenium2Library. Also, zope.testrunner's API is mature enough that the result could be pretty long lasting.

Dummy example:

  • https://github.com/plone/plone.act/blob/datakurre-testbrowser/src/plone/act/browser.py
  • https://github.com/plone/plone.act/blob/datakurre-testbrowser/src/plone/act/tests/robot_browser.txt

Developer resources

  • https://pypi.python.org/pypi/zope.testrunner
  • http://rtomac.github.com/robotframework-selenium2library/doc/Selenium2Library.html
  • https://github.com/rtomac/robotframework-selenium2library
  • http://robotframework.googlecode.com/hg/doc/python/PythonTutorial.html

Skills

Python unittesting, exposure to web testing like Selenium and RobotFramework

Mentors

Asko Soukka or any member of the CI team

Aims

Probably an extension to zope.testbrowser or another product to wrap robotframework.

git sync with plone.app.theming

Summary

Currently there are two ways to develop themes for plone. Using eggs which requires full access the filesystem so has security implications for shared environments, or via zip files, which makes it hard to track versions and tedious to move to and from development, staging and production.

Implementation

The end result of this task would be to allow a developer to push a git repo with the same format as a diazo zip and have to appear in the theming control panel. Any changes they push happen to the theme live. If they decide to edit the theme via the theme editor then those changes are recorded back in git and can be pulled. If possible, the user should be able to switch branches easily in the theme editor and checkout multiple braches into different themes so they can test different branches at the same time.

The system should work with zeo, should be easy to install but doesn't have to be implemented using python inside Zope.

Skills

Knowledge of Git, a fair amount of Python and some basic Zope

Mentors

Dylan Jay, or any core developer

Aims

Probably a pull request to the theme editor for inclusion in a later version of Plone

PyPy support for Zope

Summary

We would love to get Zope and Plone working on PyPy, not least for the performance improvements. We've started this work, but there are a fair few bits left that need significant work done.

Implementation

Firstly, you'll need to build a working buildout under PyPy and then work on making all tests pass. We have lots of branches that work under PyPy that are in progress, these will need to be extended and improved until they're at the state that they can be merged.

It's vital that the Zope codebase continues to run on Python 2.6 and 2.7, as well as this not interfering with the work on supporting Python 3.3

Skills

Very good knowledge of Python, use of the CPython API and PyPy is highly desirable.

Mentors

Matt Wilkes, David Glick, or any Zope core developer.

Aims

Pull requests for Zope.

Zope4: Remove medusa

Summary

Slow work has been happening to produce a newer version of Zope that's more modern. There are lots of GSoC sized projects. This one is removing the old HTTP server.

Implementation

There has been a HTTP server called Medusa shipped with Zope for a long time. This has been removed in a branch, but that may have been lost or bitrotted as it happened in a non-standard location. Remove this server and replace it with a WSGI interface. The publisher will need to be updated to handle this correctly.

Skills

Lots of Python and Zope core thing

Mentors

An active Zope core developer

Aims

A pull request for Zope

Zope4: Integrate WebOb

Summary

Slow work has been happening to produce a newer version of Zope that's more modern. There are lots of GSoC sized projects. This one is removing the old HTTPRequest and HTTPResponse objects.

Implementation

Lots of Zope and Plone code relies on the HTTPRequest objects, but we want to be able to use more standard Python code, so we would like to replace them with WebOb. We might have to wrap WebOb with some extra methods to support the legacy code, but we should be able to move between the two within an application without worrying about compatibility.

Skills

Lots of Python and Zope core thing

Mentors

An active Zope core developer

Aims

A pull request for Zope