Planet Plone

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

August 20, 2014

UW Oshkosh How-To's: How to allow downloading of PloneFormGen saved data

by nguyen at 2014-08-20T22:24:26Z

PloneFormGen 1.6.7 and up provides a control panel in Site Setup that lets you control who can download saved data.  By default, Manager, Owner, and Site Administrator are allowed to download saved data but you can check boxes for other roles, such as Editor, Reader, Member.

The following method completely bypasses those permission checks.

In the form folder go to the ZMI (append /manage_main to the PFG form's URL) then add a Script (Python).  Call it download_tsv and in the body put:

request = container.REQUEST
data = context['saved-data']
return data.download_tsv(request, RESPONSE)

Then provide the user with the URL of that script, e.g.

That link will still require that the person log in, but if you granted "can read" to that person (or to a group that the person is a member of) via the form's Sharing tab, they will be able to get the tab-separated-values file directly from their browser, which they can either save locally or open with an application.

August 19, 2014

UW Oshkosh How-To's: How to clone a PloneFormGen form onto another site

by nguyen at 2014-08-19T19:24:26Z

There is a not-so-well known feature of PloneFormGen that lets you clone a form easily onto another site. (Cloning a form within the same site is easy via the Actions -> Copy and Actions -> Paste menu items).

The Actions menu contains an "Export" item that creates a .tgz file representing the contents (fields, adapters, etc.) of a form.  

  1. Use the Actions -> Export menu item to create a .tgz file downloaded to your local disk.
  2. On the site where you want to clone this form, create a new form (Add New -> Form Folder)
  3. In the new form, use the Actions -> Import menu item.  
  4. Browse to the .tgz file you created in Step 1, and check the "Remove existing form items?" box to replace everything in the current form with what's in the .tgz file.
  5. Press the Import button.
  6. Review the resulting form; it should be identical to the original form.  You may have to edit date/time fields and uncheck/check the box to show the time fields. 

screen shot of PloneFormGen export-import feature

Note to self: update the PloneFormGen docs with this! at

UW Oshkosh How-To's: How to add a simple "captcha" to your /contact-info form

by nguyen at 2014-08-19T18:17:04Z


You can make a simple customization to your site's contact-info form.

The one on this Plone Projects site at was suddenly inundated with spam submissions.

I customized the form to add a simple math question with a required answer, and I customized the form validation script to check that the correct answer was provided.

The following instructions are known to work specifically with Plone 3.1.4 and 4.2.  If you try these instructions and they work with other versions of Plone and PloneFormGen please let us know.

Customize the Contact Form

Go to portal_skins and use the Find tab to locate the form with ID "contact-info".  Customize it. 

Near the end of the form, above the form controls div:

<div class="formControls">

add this HTML:

        <div class="field"
          tal:define="error errors/quiz|nothing"
          tal:attributes="class python:test(error, 'field error', 'field')">
          <label for="quiz" i18n:translate="label_quiz">
            Quiz Question
          <span class="fieldRequired" title="Required"
                  i18n:attributes="title title_required;"
          <div class="formHelp" i18n:translate="help_quiz">
            Please prove you are human.  What is 3+2?
          <div tal:content="error">Validation error output</div>
          <input type="text"
                 tal:attributes="value request/quiz|nothing"

and press Save Changes.

This adds a string field of length 1, with the ID "quiz". The help text asks the user to answer the question 3+2.

Customize the Validation Script

Next go to portal_skins and use the Find tab to search for the script with ID "validate_site_feedback", and customize it.

Add "quiz" to the parameter list, so it should read:


Near the end of the script, above the line:

if state.getErrors():

add the following code:

if not (quiz and quiz.strip()):
    state.setError('quiz', _(u'Please answer the question'), 'quiz_required')
    if (quiz.strip().find('5') != 0):
        state.setError('quiz', _(u'Please answer the question correctly - enter a single digit'), 'quiz_required')

and press Save Changes.

How to Change the Quiz Question

To change the quiz question, you'll need to:

  • change the help text, where it says
    What is 3+2?
  • if the length of the answer is not a single character, change the length where it says
  • change the validation script where it looks for the correct answer,
    and replace
    with the correct answer
  • change the validation script error message if the length of the answer is not a single character, where it says 
    enter a single digit

 Plone News for July


Summary of Plone News from around the world for the month of July.

Martijn Faassen: New HTTP 1.1 RFCs versus WSGI


Recently new HTTP 1.1 RFCs were published that obsolete the old HTTP 1.1 RFCs. They are extensively rewritten.

Unfortunately the WSGI PEP 3333 refers to something only made explicit in the old version of the RFCs, but which is much harder to find in the new versions of the RFCs. I thought I'd leave a report of my investigations here so that others who may run into this in the future can find it.

WSGI is a protocol that's like HTTP but isn't quite HTTP. In particular WSGI defines its own iterator-based way to send larger responses out in smaller parts. It therefore cannot deal with so-called "hop-by-hop" headers, which try to control this behavior on a HTTP level. The WSGI spec says a WSGI application must not generate such headers.

This is relevant when you're dealing with a WSGI-over-HTTP proxy. This is a special WSGI application that talks to an underlying HTTP server. It presents itself as a normal WSGI application.

The underlying HTTP server could very well be sending out stuff like such as Transfer-Encoding: chunked. The WSGI spec does not allow a WSGI application to send them out though, so a WSGI proxy must strip these headers out.

So what headers are to be stripped out? The WSGI spec refers to section 13.5.1 in now-obsolete RFC 2616.

This nicely lists hop-by-hop headers:

  • Connection
  • Keep-Alive
  • Proxy-Authenticate
  • Proxy-Authorization
  • TE
  • Trailers
  • Transfer-Encoding
  • Upgrade

That RFC also says:

"All other headers defined by HTTP/1.1 are end-to-end headers."

and then confusingly:

"Other hop-by-hop headers MUST be listed in a Connection header, (section 14.10) to be introduced into HTTP/1.1 (or later)."

which one is it, HTTP 1.1? I guess that's one of the reasons this text got rewritten.

In the new rewritten version of HTTP 1.1, this list is gone. Instead it specifies for some headers (such as TE and Upgrade) that these should be added to the Connection field. A HTTP proxy can then strip out the headers listed in Connection, and then also strip out Connection itself.

Confusingly, while the new RFC 7230 refers to the concept of 'hop-by-hop' early on, and also say this in the change notes in A.2:

"Also, "hop-by-hop" header fields are required to appear in the Connection header field; just because they're defined as hop- by-hop in this specification doesn't exempt them."

it doesn't actually say any headers are hop-by-hop anywhere else. Instead it mandates some headers should be added to Connection.

But wait: Transfer-Encoding is not to be listed in the Connection header, as it's not hop-by-hop. At least, not anymore. I've seen it described as 'hopX-by-hopY', but not in the RFC. This is, I think, because a HTTP proxy could let these through without having to remove them. But not for a WSGI over HTTP proxy: it MUST remove Transfer-Encoding, as WSGI applications have no such concept.

I think the WSGI PEP should be updated in terms of the new HTTP RFC. It should make explicit that some headers such as Transfer-Encoding must not be specified by a WSGI app, and that no headers that must be listed in Connection can be specified by a WSGI app, or something like that.

Relevant mailing list thread:

August 14, 2014

Netsight Developers: Netsight is Recruiting: SysAdmin


Netsight are looking for a new full-time Systems Administrator.

Based in the UK, we are one of Bristol's longest running web design and development firms. This is a great opportunity for the right candidate to build a successful career in web software systems administration, and work with a great local company. Find out more about us here.

We are looking for someone with a keen interest in technology, who enjoys spending their time working with computers and operating systems and has no fear of the command line. You'll enjoy solving problems and need to be happy to look things up. You're likely to be working in small teams, so you'll need to be also need to be happy asking colleagues for help when you need it or want to bounce ideas off someone.

You’ll need a good working knowledge of Unix variants and an instinctual awareness of system security considerations (i.e. the ability to understand how an attacker would compromise a system and implement countermeasures), but at the same time balance this with the developers’ and customers’ needs.

On a day-to-day basis you’ll be working alongside our experienced sysadmin, reporting to senior management and the company directors.

We are a pretty relaxed company and have an informal, open-plan office, with a variety of ways to get away from the machines. That said, we need people who can manage their time effectively and take responsibility for the work they are doing.


Required Skills:

Basic pre-requisites:

  • At least 2 years systems administration experience in a commercial web development environment.
  • Good communication skills – this role will become client facing to at least some degree, as you clarify requirements and report progress to members of the clients' organisations. You will also need the ability to work well in small, closely-knit teams (typically of 2 to 4 people) and effectively argue your case when needed.
  • Ability to remain calm when under pressure (i.e. when things break).

 General Unix experience - GNU/Linux/FreeBSD/OpenBSD/Solaris etc.:

  • Comfortable with command line only!

  • Remote admin via SSH

  • Mindful of system security (permissions, file system ACLs, passwords, restricted user accounts etc)

  • Shell scripting

  • Must like emacs and dislike vi… j/k ;)

GNU/Linux (preferably apt-based such as Debian/Ubuntu):

  • Installing OS and software, setting up, administering user accounts etc


  • Able to undertake basic network/security maintenance tasks, as and when required

Apache web server:

  • Creating new virtual hosts

  • RewriteRules

  • Setting up a reverse proxy

  • Optional knowledge of optimising Apache for large workloads

Mail server:

  • Experience with SMTP daemons (e.g, Exim)

  • Cyrus Imap daemon

  • SASL auth

  • Spam assassin

  • Mail filtering (e.g. Sieve filters)

Experience with high-uptime server hardware:

  • Knowledge of RAID levels and best application of different RAID set ups.

  • Diagnosing hardware faults

  • IPMI

  • Building and maintaining PCs and servers: Installing memory, CPUs (applying thermal paste, heatsinks etc)


  • DNS - administering DNS records (A, CNAME, MX, TXT etc)

  • IP Subnets

  • Switch management (HP/Cisco)

  • Experience of routing protocols (eg. BGP, OSPF, etc)

  • WiFi

  • OpenVPN

Programming experience:

  • Shell scripting

  • Python scripts

Desirable additional skills/experience:

Experience with the following is desirable but not essential. These technologies form a significant part of our infrastructure, so a willingness (and ability) to learn them is important:

  • Ansible

  • Asterisk

  • Bareos/Bacula

  • Ceph

  • Ejabberd

  • Exim

  • Ganeti

  • HAProxy

  • MySQL/MariaDB/PostgreSQL

  • Nagios

  • Nginx

  • Python

  • Plone


  • Varnish

  • Zope

Bonus Points:

  • 8/16 bit computer games / arcade cabinets:-  maintenance and operation

  • Good working knowledge of scalextric:-  performance optimisation

  • Eating burgers and pizza:-  willingness to accept the Netsight Sysadmin Challenge*

(* Details will be included in successful applicant’s induction pack)


What's in it for you?

  • Starting salary in the region of £20-30K (depending on experience).
  • Laptop and mobile phone.
  • Conference attendance allowance.
  • A relaxed working environment.
  • Share options as you progress (and associated dividends).

Please send your CV to

August 13, 2014

Mikko Ohtamaa: Turbocharge your Python prompt and Django shell with IPython Notebook

by Mikko Ohtamaa at 2014-08-13T11:46:33Z

IPython is an enhanced Python shell, the shell being the prompt which appears when you start python command in your terminal. IPython comes with notebook flavour, where IPython Notebook presents the modern HTML-based shell for Python.

1. Introduction

Python is so-called dynamic programming language where much can be achieved by piloting your code in an interactive interpreter or tuning your production server from the shell. Basing the read-evaluate-print-loop (REPL) to web browser technology, instead of terminal technology, brings shell usability to the modern age, boosting your working efficiency considerably.

IPython notebook, as being based on HTML, can also output graphics and dynamic clickable and navigable graphics. For graphics, diagrams and plotting, check out Bokeh and Pandas libraries.



2. Installation

First create a virtualenv. Then continue in the activated virtualenv.

Install IPython with IPython Notebook extensions:

pip install "ipython[notebook]"

Starting IPython in terminal:


Developers like their terminals either white-on-black or black-on-white. Try switching the color scheme:

ipython --colors=linux

Screen Shot 2014-08-13 at 13.51.45

3. Enter the HTML

Now comes the big one. Start IPython notebook for a web browser based shells:

ipython notebook

This will start IPython kernel running in the port localhost:8888 and automatically connects your default web browser into it.

Screen Shot 2014-08-13 at 13.49.03

Yay! Finally you can

  • Use shift and arrows to select your text, unlike in most of the terminals
  • Copy-paste that works 100%
  • Click things with mouse and place your edit cursor
  • Save and replay your shell sessions
  • Output graphics directly from the shell

4. Django integration

First, you need to a have running Django project. If you are new to Django I highly recommend reading DjangoGirls’s Django tutorial – one of the best tutorials to modern web development covering HTTP, Python, databases, HTML, CSS and JavaScript.

Install Django Extensions package. Django Extensions, with many other features, gives you the ability to automatically import all of your application models on the start up to have quicker access to them. We do the example below using DjangoGirls website checkout.

pip install django_extensions

Add django_extensions to Django settings INSTALLED_APPS list:


Start IPython-enabled Django shell through Django extensions command:

python shell_plus

And you can straight away play with your Django models:

Screen Shot 2014-08-13 at 14.12.25

Now, try entering to the Notebook Django shell:

python shell_plus --notebook

… and you get the same, but with all IPython Notebook goodies:


5. Running IPython Notebook on your server

IPython Notebook uses, by default, uses localhost TCP/IP sockets to allow web browsers to connect to IPython Notebook kernel.

If you want to run IPython Notebook on a non-local computer you can use SSH tunnels. Please first read SSH basics for developers, then proceed to how to build SSH tunnels for port forwarding.

 Subscribe to RSS feed Follow me on Twitter Follow me on Facebook Follow me Google+

August 12, 2014

Affinitic: Beware of uppercase letters in your config files

by Laurent Lasudry at 2014-08-12T14:05:18Z

We got a surprise using a [theme:parameters] variable in the manifest.cfg of one of our Diazo theme.

We were defining a parameter like that :

isFrontPage = context/@@isFrontPage

and then we were using it in the rules :

<drop css:content="#footer-sitemap" if="$isFrontPage" />

But we got an error after having the Theme installed. And we found that the parameter we got in Theme control panel was “isfrontpage” and not “isFrontPage” so the “isFrontPage” parameter used in rules was undefined !

This is happening because (as plone.resource, Products.GenericSetup, …) is using python’s ConfigParser to parse the manifest.cfg file (“from ConfigParser import ConfigParser“) and it does a lower() on the sections and variables that you put in your config files.

This is the same for RawConfigParser and SafeConfigParser.

So … don’t ever use camelcase there ;-)


August 11, 2014

Martijn Faassen: Against "contrib"


It's pretty common for an open source project to have a "contrib" directory as part of its project structure. This contains useful code donated to the project by outsiders. It seems innocuous. A contrib section, why not?

I don't like contrib. A contrib directory gives the signal that "yes, we carry this source code around, but it's not really part of our project". What does that mean? Why is it even part of your project at all then? Why isn't this code distributed in library form instead? I'd much prefer the project to be smaller instead, as in that case I wouldn't have to worry about the contrib code at all.

Perhaps in the case of your project, placing code in contrib doesn't really mean "it's not really part of our project". Perhaps the code in contrib is meant to be a fully supported part of project's codebase. If so, why use the name "contrib" at all? It doesn't signal anything functional -- it only signals something about origins, which is why people should suspect any claim that it's a fully integral part of the project. Projects, instead of dumping something in contrib, just put that code in its appropriate place and really own it.

Arguments for contrib

One argument for a contrib section is that by placing code there, the tests are automatically run for it each time you run the tests in the core code. This way a project is in a position to fix obvious breakages in this code before release.

There's a problem with this approach: more subtle breakages run the risk of being undetected, and nobody is clearly in charge of guarding against that, because the code isn't really owned by the project or the contributor anymore. It's in this weird contrib half-way house.

Besides, we have plenty of experience as an open source community with developing extension code that lives outside of a project. Making sure extensions don't break and get fixed when they do requires communication between core library authors and extension authors. I think it's mostly an illusion that by placing the code in contrib you could do away with such communication -- if a project really wants to do away with communication, really own the code.

Placing code in contrib is not a substitute for communication.

That's not to say the current infrastructure cannot be improved to help communication. For instance, in the Python world the devpi project is exploring ways to automatically run the tests for dependent projects to see whether you caused any breakage in them.

Another argument for a contrib section has to do with discovery. As a user of your project I can look through contrib for anything useful there. I don't have to go and google for it instead. Of course googling is really easy anyway, but...

If you want to make discovery easy, then add a list of useful extensions to your project to the project's documentation. Many projects with a contrib directory do this anyway. But that already takes care of discovery; no reason to add the code to "contrib".

And again, infrastructure can to help support this -- it is useful to be able to discover what projects depend on a project. Linux package managers generally can tell you this, but I can see how language-specific ecosystems can offer more support for this too. For a Python specific example, it would be useful if PyPI had an easy way to discover all projects that depend on another one.

Effects on contribution

As an open source project developer you should want to attract contributions to your project. When you add code to "contrib", you tell a contributor "your contribution is not a full and equal part of this project". That's not a great way to expand your project's list of core contributors...

And you are a new contributor who wants to improve something in the contrib of a project, who do you even talk to? You might be worried that the project owner will say: sorry, that code is in contrib, I don't care about improving it. Since people are less confident that the project even cares about code in "contrib", that discourages them from trying to contribute to that code


Don't add code to a "contrib" section of your project. "contrib", paradoxically, can have a chilling effect on contribution. Either maintain that code externally entirely, or make your project really own that code.

August 10, 2014 Plone Foundation Welcomes Four


Víctor Fernández de Alba, Max Jakob, Alexander Loechel, and Tânia Andrea Moreira join the Plone Foundation.

August 08, 2014

Andreas Jung: EuroPython 2014 finally over - some notes on the EuroPython Society


Some notes on EuroPython 2014 that ended last Sunday with over 1200 attendees.

August 07, 2014

Kagesenshi: Announcing PlatoCDP, a Plone distribution for enterprises.

by Izhar Firdaus at 2014-08-07T03:56:09Z

Announcing the first release of PlatoCDP Plone distribution. A Plone distribution with the goal of attempting to build a more supportable, enterprise-ready, document management and content management  solution for government and enterprises. The ideal aim is to develop improvements on the distribution so that it will be a viable alternative to Sharepoint.
So what is it exactly?
  • An enterprise Plone distribution - that is, an integrated product which includes Plone, selected Plone add-ons, 3rd party softwares and integration/automation improvements to deliver an enterprise ready product for customers.
  • Is it a rebrand of Plone? - It is an enterprise distribution product. PlatoCDP to Plone is like RHEL to Fedora. It is not a mere rebrand. PlatoCDP includes core Plone, additional components from the collective and its own improvements. We engage on packaging, certification and development activities to make the whole stack supportable for enterprises. These components of the distribution will be supported by KOSLAB through our support subscription.
  • Major features highlights of PlatoCDP 4.0b1
    • Out of the box clustered Plone setup - preconfigured for high availability and scaling.
    • Out of the box support of collective.documentviewer. The whole setup is fully functional with very minimal effort. 
    • Commonly used add-ons such as
      • eea.facetednavigation
      • solgema.fullcalendar
      • plonetruegallery
      • contentwellportlets
      • collective.unslider
      • and more (dependency list)
  • Some future roadmap in mind
    • Development of cluster management console to aid system administrators in managing, scaling and monitoring PlatoCDP deployments, plus aiding with filing bugs and support requests.
    • Fix WSAPI4Plone and include it into distribution, and provide an API for 3rd party integration.
    • Marketplace for 3rd party add-on/themes
    • Video conversion integration (possibly from Plumi transcoder)
    • Mobile client
    • Folder sync client
    • Cloud offering
  • Upstream commitment - Having been a Fedora Ambassador for over 7 years now, I believe in the philosophy of innovating on upstream rather than downstream. Therefore, wherever practical, PlatoCDP improvements shall be developed primarily on the Plone collective.
 Check it out at

Kagesenshi: Lessons learned on how not to run an Open Source company

by Izhar Firdaus at 2014-08-07T02:19:10Z

Back when I co-founded Inigo, one of my primary motivation was to create an Open Source company which:
  • Provide quality Open Source solution for Malaysian market (in this case, KM & CMS solution)
  • Work closely with upstream on improving the products supported by the company (in this case, Plone)
  • Actively develop local talents and human resource on Open Source skills, following pure Open Source philosophy
  • Actively create new innovation for the market related to our core solutions
  • Scale the company up that it become a prominent player on its core market
Unfortunately, over the years, none of the goals were reached. Due to our business model approach, ended up as a company which primarily focus on developing client-specific add-ons on top of Plone. The projects were fun, and challenging, however, due to a poor support and pricing model, the business unable to scale and we ended up in a hamster wheel of non-stop trying to catch up to pay the bills. Mistakes done includes:
  • Poor business/pricing model which penalize efficiency (the more efficient you become, the less you earn), made things very unsustainable. 
  • Hiring is difficult due to the business model creates no sustainable revenue for investing on human capital development or hiring an experienced developer. Plone is not exactly something junior developer can pick up quickly. So the bus factor of Inigo is very poor, with only me as the developer.
  • The support model which we adopted also was self-destructive. It is an all-encompassing support package which does not limit what code will be supported - therefore, I have to be familiar with whatever codebase the client use on their system - including custom code which was developed by other vendors - fun at first - but a too high of a bar to handle after a while - human brain have its limits.
  • Continuously building downstream customizations removes the benefit of being part of Open Source community. Almost none of the code can be collaborated with other contributors because it is too specific to a single client.
  • Growing number of non-upstream custom code, of which are too client-specific that we could not immediately reuse, (if we managed to, the pricing/support model does not reward code reusability), inability to hire for help and/or build local capacity to help things out (due to I have to focus on delivering projects to pay the bills instead of building a team) - slowly take a toll on my mental health. 
Being somewhat alexithemic, I did not notice the signs that I have been stressed out for over 2 years - something which apparently many people around me, especially those in Hack In The Box community have noticed way earlier than me - until I finally broke my brain circuitry and ended up with anxiety disorder (I'm still on xanax therapy until this date), and almost falling to a deadly state of depression. It took me 4 months struggling to figure out what was wrong with the brain function, nausea and constant chest pain made things harder to manage, only after finally medically diagnosed with anxiety disorder I decided to stop whatever I was doing, and take a break from programming.

Having said that, over the past 5 months, I have been working as a solution architect in a local Open Source system integrator company. The position I'm at gain me access to observe the process utilized by 2 of the major companies which adopt the philosophy of 100% open source and high commitment to upstream - Red Hat and Hortonworks. Picked up quite a bit from them, especially on the business side of enterprise open source, and learned how they create a sustainable support model around 100% open source software.

From the newly acquired knowledge, it created a new motivation to attempt again in bringing Plone to this region, through a creation of a Plone distribution - KOSLAB PlatoCDP.

More information, on the next blog post.

August 05, 2014

Plumi: Plumi Intro & Theming Workshop

by anna at 2014-08-05T05:57:53Z

UPDATE: The workshop has been postponed until 2nd September, applications are still open.

Markos Gogoulos of (major developers of Plumi for the last few years) will lead this workshop designed to bring programmers up to speed with the current state of the Plumi app, facilitated by Anna Helme of EngageMedia, who have project managed development of Plumi since its inception.

This is a unique chance to boost your Plumi skills, whether you are fairly new to the project or you have been using Plumi for some time. Markos will lead us through the Plumi app covering tips on setting up, maintaining and troubleshooting a Plumi site that have emerged from years of experience. The second half of the workshop will focus on Plumi theming – how to customise the default Plumi skin and how to create your own using Diazo. Markos will also take questions that pertain to your own use case for the software.

The workshop will be held online via Skype.

Places are strictly limited – please apply below.

Date & Time:  Tuesday 2nd September 2014 at 07:00:00 UTC (GMT)

Cost: $175 USD

Applications: Please use application form at bottom of this page.

Workshop Outline

Part 1 – Intro to Plumi (1.5 hours)

We will give a brief summary of the Plumi project and its development history, and talk through the blog, tracker, code repositories and Plumi manual. We will then outline the current development priorities for our upcoming milestone. Markos will describe the architecture and design of the Plumi app and its major components.

Participants will install a testing site for the purposes of the workshop (locally or on a Debian server provided by the participant). We will show how to easily restart services, describe how to create a basic monitoring setup, outline basic Plumi maintenance tasks and troubleshooting advice.

Finally we will gather any critical overall feedback from participants on the Plumi package as it stands.

Part 2 – Intro to Plumi Theming (1.5 hours)

In this next part of the workshop each participant will learn how to make simple changes to the HTML/CSS/JS front-end of the default Plumi skin. Subsequently, Markos will take us through the process of creating a new Diazo skin which can be used to fully customise the layout of a Plumi site.

Plumi Future Development Discussion (0.5 hours)

We will finish the workshop with any questions relating to participants use cases for Plumi, and touch on these topics relating to Plumi future development.

  • Plone upgrades… looking to Plone 5?
  • implementing video hosted on external services e.g. YouTube, Vimeo
  • mobile device support – what improvements required for adaptive layout?
  • usage of non-standard wsgi
  • long term upgrade to dexterity content types
  • integration of Plumi API as video component on other web platforms/services (particularly NGO)
  • refactor build to use system components (not from source)?
  • consider current forms of deployment such as Docker
  • secure Plumi – hidden mirror architecture to plan against server takedowns (point of difference, useful security practice)

 Application Form


August 04, 2014

Cosent: Plone Intranet front end

by Guido Stevens at 2014-08-04T10:16:44Z

While many people are still enjoying the beach, we're already gearing up to accelerate design and development for Plone Intranet this fall.

Following the Mosaic sprint and a ploneintranet summit in Gatwick we're now collaborating with with Syslab and Cornelis Kolbach. to turn wireframes and high-fidelity designs of social interactions into HTML/CSS/Javascript prototypes, using Patternslib (similar to Mockup).

This is a screenshot of some of the frontend work in progress:

social interaction prototype

We'll extend this work in the run-up to the Berlin sprint in September, which will be focussed on extending plonesocial and integrating it with ploneintranet.

Our goal is to provide a workable code base, that documents much of the design decisions we're making in a way that enables community collaboration.

The backend code we're working on is already open and published: see e.g. experimental.securityindexing, ploneintranet.workspace and collective.dynamicmosaic. We expect to fully open up the frontend code before the Plone conference this fall.

Please contact us if you're not a member of the Plone Intranet Consortium and would like to get involved and gain commit access to our development repositories.