PLOG Thursday morning talks

published Apr 09, 2015

Talks at the Plone Open Garden at Sorrento.

Report-out from yesterday afternoon sessions:

  • ZCatalog: ripping it out? Setup performance test first, to get baseline understanding of where issues are. Make ZCatalog more pluggable. Enhance visibility of collective.solr in our documentation, good for larger deployments, improve its documentation.
  • New work: halfway finished, most content that we want to keep can be transmogrified, css and responsive tweaks needed, personal profile pages with metrics to show what you are doing as member of the Plone community. PloneSoftwareCenter for the add-ons will be lost. Perfection is the enemy, it would never be finished then. Use collective.roster and collective.workspace. Plone 4. Started a working group to manage this and see it finished: Víctor, Gil, Christina, Fulvio and me, meeting every two weeks. Some of you may be called upon to help. Give us a shout if for example you know about LDAP.
  • Marketing/positioning: listed some competitors, talking about sectors, different ways we use Plone. Plone is obviously a very good CMS, but also a platform, a set of tools, that can be used to serve various targeted needs. Unique set of features. Discussion will continue this afternoon. [Fred will present some ideas / pep talk this morning.]

Víctor Fernández de Alba: Activity stream and conversation engine (MAX)

Víctor, Carles, Ramon. We have built a WhatsApp like application on Pyramid. Website. Push notification to app on phone.

First commit in August 2011. Initially designed as key feature for BarcelonaTech university concept of social intranet. But limited resourced for this. We did it bit by bit.

Activity stream with the basic key concepts of activity, comments, likes, favorites, upload images and files.

Conversations: one on one, in group, also with images and files. Doing this realtime using STOMP RabbitMQ plugin.

Push notifications to IOS and Android, including apps for those two.

Aggregate external sources: Twitter.

Authentication is done with oAuth 2.0. Resource Owner Password Credentials workflow using a server we created: osiris. See

Activity stream stores activity from users and applications. Application can 'impersonate' a user to feed the stream with useful information, for example when uploading a file somewhere. MongoDB for storing info.

Subscriptions are made against contexts, something with a unique URL. Everything aggregated on the timeline of the user.

Realtime conversations and private messaging, going to RabbitMQ, then to conversation queues, then via an API (WSGI client) to MongoDB. Support for sending images and files too.

Infrastructure. Front-ends: MAXUI.js on IOS and Android. oAuth server. API. MongoDB plus RabbitMQ. Queues and consumers designed for huge loads.

API has 88 RESTful endpoints. Over 600 tests. Powered by Pyramid, optimized for gevent.

Performance: 4000 concurrent users: 100 messages per second.

LDAP integration. Deploying it to Moodle.

What's next: follow people, contextless activity streams. Documentation not only in Catalan.


Please give feedback. Maybe you want to use it? If we get enough interest, we can convince our managers to let us go to EuroPython. ;-) We would like to get traction to continue to develop this.

Alexander Pilz: Design First Driven Process

The Plone Intranet Consortium is using this. Let's explain how we look at it, how we define it. Give some insight.

Why is design first necessary?

Part 1: the backend

The developer's fun is the integrator's nightmare.

New UI with Plone as backend: you end up with two separate projects: a backend project (Python) and a frontend project (css and javascript).

The Traveling Integrator Problem. Plone alone works fine. Each add-on you add increases the complexity. The more add-ons I install, the more I need to redo the user interface: one adds an action in a viewlet, another in a portlet, another in a content menu dropdown, so the end user does not know how to use them all.

People do not want to work with an intranet, they have to.

Design is not something on top of add-ons and Plone. It is something that should be integrated in the whole. For that to work, you need to start with the design.

In the Intranet Consortium we started with six companies who were using eight workspace implementations.

Part 2

  • Platform approach: an add-on that is as flexible as possible, the least assumptions.
  • Product approach.
  • Developers approach: first build it, then make it nice.
  • Designers approach: make it nice, then develop for it. Emphasis put on the end user.

"Design First" process. Product owner and designer (and only optionally a developer) sit and detail the requirements. You need a designer who can do html and css. A patterns library so that designers can add UI behavior, interaction design, even though nothing yet happens on the backend. You directly use the actual design as the diazo theme.

It is hard to keep developers from designing. They actually like doing that a bit. You have to hit them on the fingers: don't make design decisions yourself, talk with the designer.

Visual versus interaction design. Designers are not just there to make things nice. Theme is the visual design. But there is more: interaction. Usability, user testing. Theming is okay for websites. For intranets there is much less need for branding: you do not need to be reminded for which company you work.

Fred: Branding

Framing effect: what you see, influences what you think later.

I am not a marketeer or communication specialist (anymore), so I shouldn't give this talk. This is just an intro, not a lecture.

You can look at sectors, audiences, regional, etcetera, but it gets complicated. Maybe we have to agree to disagree. Also the wording, top down: marketing, strategy, branding, positioning, campaigning, advertising, communicating, copy writing. Look up a bit. Get out of our comfort zone.

Brands give you emotions and create an identity. They frame you. You see someone and you have an immediate idea: is this person nice or not.

Selling cars. How? They can try to sell horsepower, color, style. Or safety, speed. But deeper down: freedom. Cultural differences. BMW: fun, experience. Audi: technology. Those messages are usually not there explicitly, but it sifts through. Foundation on which they put their other marketing and communication expressions. You don't have to be vocal about your brand identity. Should be consistent, not contradicting. If Paul suddenly shows up in a business suit, I would ask: where is Paul.

This is not about features. Does Paul have portlets? Do I have tiles?

You cannot pick an identity and be done. Time frame of three to five years where you cultivate it. Maybe we already have an identity.

How to describe it. Mission statement, About Us section, mostly describing what you are actually not in the case of corporations. Slogans, persona. Archetypes. No, not the next version of dexterity, but Jungian Archetypes. Twelve in total, like outlaw, sage, magician, lover, hero. An abstraction. Independent of culture: hero evokes the same emotion in America as in Asia.

Example: a sage. Finding truth, wisdom. Weakness: study details forever. Think of Gandalf, Yoda, Dumbledore. BBC: if someone hits a co-worker, you fire him, because it damages your image.

There is more documentation on Jungian Archetypes than you can find on Plone.

This maybe touchy, feely, fuzzy stuff. We are tough, rational developers. So we might need other specialists that actually see this as an exact science.

Back to Plone. Problems have since 2004 been documentation and marketing.

Global positioning or global marketing is not bad, but we are too diverse. If you choose one niche to target, you loose another one.

Try to find a more generic but globally recognizable Brand Identity. Seek help. Derive a brand strategy from this identity. Sharpen the identity that we already have. Focus. Gravitational areas. Schwerpunkte in German. Even distributions can have their own sub branding with aligned personalities. A feeling of what is important in that sector. Look at a competitor, how are they positioning themselves, and can you take the opposite side?

Look at the Plone logo. Close your eyes and be quiet for ten seconds. What do you feel? Probably not much. We have not attached a brand to the logo yet.

A new and is nice, but we also need a brand.

Danger of ping-ponging between 'we need to focus on this' and 'no, on that' or 'we do not know how to do this and have no time and money'.

Edward de Bono writes about group dynamics. Imaging six hats with different colors. You can say in a meeting: 'put on your black hat and look at the bad parts' and later 'put on your yellow hat and look at the nice parts', or 'blue hat to look at process'. If six colored hats are in the same discussion at the same time, you will just go back and forth and do not end up anywhere, just go around in circles. This is true for marketing discussions and for technical discussions about our backend or frontend. See

'Plone gives you peace of mind' may sound good to Europeans. Americans may like more 'Plone is stable 24/7.'

Who are you? Mira Lobe / Susi Weigel: I am me. Read it here, nice story:

JC Brand: Patternslib, Mockup

Patterns make it possible to first create an interaction design, without creating backend code first. Cornelis Kolbach creates designs for sites that still look and work fine without javascript. The patterns are there so it works more nicely or faster when you have javascript enabled, but it is not in the way. It allows a designer to create an interactive design without needing to write your own javascript.

I have replaced mockup stuff with patterns stuff. Mockup is now a collection of Plone-specific patterns, for example for the query string widget used in collections. Patternslib has the non Plone-specific stuff. There is some duplication that we want to resolve. That is the direction in which we are going.

Patternslib is very lightweight. Not a 'kitchen sink' framework. Trying to keep it as vanilla, plain javascript as possible. Lots of third party javascript libraries could be easily integrated. AngularJS maybe not that easily.

Isn't it yet another too Plone specific thing? Patternslib was developed outside of Plone, by Cornelis and Wichert. It has zero dependency on anything in Plone. It is simple conceptually. There is not that much to maintain.

You should usually reuse patterns, instead of creating your own. You may need a new one from time to time, but if you have that often, something is wrong.

Time: not to start a pillow fight, but Angular does much the same thing. But where do you see Mockup in three or four years? In combination with a json api?

JC: We have patterns in Plone now and might as well use them. We need to inform people about how it works, because you sometimes see a pattern where you think: this misses the point. If we use it, we might as well use it in a sane way. Patternslib is not a competition for Angular. We do not want complicated javascript in Plone, which is first and foremost a Python framework. No closely tied javascript client to the Python server.

Alex: Patterns is a simple solution that works at the moment. And it puts us more in the correct javascript mindset. That mindset is more important than the exact technology. Plone as framework should be ready for a pure javascript front-end, whatever it is.

Timo: Three parts that we should do. Cleanup backend, write RESTful api, get some javascript frontend.

Paul: Keep in mind how these things would work for add-on writers. Do they need to learn alien technology or rewrite their add-ons every three years? Also, Mockup documentation should somehow be moved to

Timo: Patterns are there in Plone 5. First thing is RESTful api, but that does not change anything yet.

Roel: On the Four Digits Anniversary Sprint we will have an API track, good to have people there who want to work on it.