Weblog
Ramon Navarro Bosch: plone.server
Talk by Ramon Navarro Bosch about plone.server at the Plone Conference 2016 in Boston.
plone.server is just a project, it is not approved by the framework team, this is not in Plone core yet.
Philip Bauer in Brazil Plone conference 2013 was pushing people to think about the future of Plone. Where are we going. Plone has a really good component architecture, thanks to Martin Aspeli and others. After lots of discussions about the future in Bristol Plone conference 2014 Timo Stollenwerk started working on the Plone REST api. Asko Soukka worked on Mosaic. Nathan Vangheem worked on elasticsearch. Eric Brehault worked on front end with Angular 2. We took lots of these people and gathered them in Barcelona earlier this year. Fifteen developers on back-end, api and front-end. Experiment: could we do it? Yes, we had really great results. We have reached an experimental version of the whole stack. We will present this today in three talks.
In this talk: the back-end.
We split the various parts of Plone in three: front-end, basic core (dexterity, zodb), extra Plone stuff (link integrity, discussion). The division between the parts is bridged with a REST api and the framework api (plone.api).
Possible future is that plone.restapi will be included in Plone 6, and separate front-end is possible in a later version.
For plone.server we used as base ZODB 5, ZEO asyncio, and the ZTK (Zope ToolKit). It is an asynchronous app server that offers a traversable REST api with a ZODB.
It is a headless CMS: it does not include the view/presentation part.
Content type: there is no CMF, it is based on zope.container and dexterity. One content type: an item that is a container. Content types are specified declaratively, defined in Python code and zcml, not stored in the database, no option to create content types through the web at this point. A simple base.
plone.jsonserializer. Used on plone.app.mosaic. We need to merge this with plone.restapi. We did fixes yesterday night.
plone.registry is the main or really the only configuration place. All persistent info is in one place. For example portal actions should be in the registry.
API definition. Traversal is hard to define in an api, we used json. We use the websocket api. All is built on plone.restapi.
Mount databases or sites using json configuration. /DB/SITE/FOLDER/OBJECT.
In traversal we do a lot:
- Get the resource
- abstract the user
- language negotiation
- check access permission
- etc
Read calls (mostly GET) by definition do not write anything to the database. Any changes are rolled back.
On the request we make available several things like the site components, the main object, configuration registry, etc. Some helper methods. Upload/download is done with external blobstorage with async.
There is no ZCatalog, but there are ways to hook up what you want yourself. No GenericSetup, no acquisition, no z3c.form, no attribute traversal. No Zope roles, only Plone roles or permissions. The base Plone server does not need many packages outside of the ZTK.
It is Gunicorn compatible (WSGI). It is only for Python 3.5 and higher.
Extra packages: pserver.oauth, pserver.elasticsearch, pserver.gcouldstorage, pserver.cms.
You can try a demo with the repository at https://github.com/pyrenees/pserver.demo
We are a community! We can have fun! We should be proud!
Eric Steele - Plone Futures
Keynote by Eric Steele at the Plone Conference 2016 in Boston.
Plone is fifteen years old this year. What does the future hold?
Plone 5.0 has been really positively received. Plone 5.1 is where we apologize for what we did in 5.0. Some stuff:
- Meta bundles generation, so you don't get so many javascript and css files.
- Getting rid of the quick installer, so you don't have two competing ways of installing stuff. We have an @@installer view now that only uses GenericSetup. We will warn when there is no uninstall profile. The default profile is now really the default profile, instead of the quick installer taking the first one alphabetically.
- Configure portal actions through the Plone UI.
- Retina image scaling. Set scaling ratios for higher resolution images. Pretty seamless.
That is definitely going in. Probably several or all of the following as well:
- Conditionally import registry records.
- Merge Products.RedirectionTool into the core, with new control panel.
- Add/edit/delete registry records in the UI.
- Get rid of old resource registries (portal_css, portal_javascript)
- Merge collective.emailconfirmationregistration into core.
- Merge collective.indexing into core, giving queued indexing, which gives performance improvement.
- Some javascript improvements.
- Mosaic, not yet 'plipped' (proposed) for 5.1. This is content layout using tiles, giving you a lot of flexibility over how a page looks. We started similar projects years ago when browsers were not ready for it yet. Let's see a demo. The layout is saved as simple html that you can manually edit if needed.
With Mosaic and Rapido you have very powerful through-the-web development. We were pushing people away from this, to safe them from themselves. But with these two, you can export it to the file system, which makes it much more viable and safe.
For Google Summer of Code:
- Vikas Parashar created several themes.
- Prakhar Joshi worked on collective.easyform, which is dexterity form creation. It now has an upgrade path from PloneFormGen.
Plone 2020 discussion: where do we want to go as community and as software project?
- APIs to hide complexity. plone.api. plone.restapi.
- Improve TTW customisation.
- Improve training and documentation. You can follow a training at http://training.plone.org or use this to give a training yourself. It gives you a jump start to development.
- Cleaner codebase: simplify structure, remove unused functionality and code.
- Update dependencies to latest versions, ztk, Zope 2/4, ZODB3. Most are already Python 3 compatible. That is the step needed for Plone before we can focus on Python 3 ourselves.
CMS traditionally has three layers: content storage, management and presentation. Headless CMS removes the presentation layer. If you have that, you can write your own fronts for it: traditional UI, phone app, other front-end framework. What we are currently building with plone.rest and plone.restapi is more a decoupled CMS, because the original front-end is still always there. In a sprint in Barcelona we worked on several parts of this:
- REST api
- front-end: working with plone.server or plone 5 + restapi, server side rendering via Angular Universal
- back-end: plone.server, aiohttp-based server.
There will be several talks about these today.
So we have two parallel paths to the future:
- server/client with rest api
- back-end Zope and other dependency cleanup
What have we ripped out in the past? Kupu, Archetypes, classic theme, portal_interfaces, plonetestcase, xdv, portal_Css, DTML, NuPlone, etc. The Hello Kitty Theme. And Plone still works. So we can do this.
Stapelgedicht
Column Klokgelui voor Overschiese krant.
Een nieuw spel: kies een paar boeken uit je kast, leg ze op elkaar, en laat de titels een gedicht vormen. Als je nu vijf dichtregels hebt die met 'koken' beginnen, dan kan je dit spel beter in de bieb spelen. Glimlach vriendelijk tegen de bezorgd kijkende medewerkers en ruim na afloop je stapels boeken op de juiste plek op. Het kan heel kort:
Quiz voor jou en je vrienden: wie weet de meeste schrijvers bij de boeken die ik in deze column noem? Waarschuwing: ik maak het je niet makkelijk met mijn smaak.
In mijn kast staan aardig wat geschiedenisboeken, dus krijg je bijvoorbeeld:
Die laatste komt overigens uit de christelijke hoek van mijn boekenkast. Ook daar kan je aardige combinaties maken:
Oeps, daar kwam Herman Finkers voorbij.
Het kan gauw grappig worden, maar het mooiste vind ik toch als er meer diepgang ontstaat:
Ik vind daar een mooie lijn in zitten. En mooi dat het een christelijk boek is en een Nederlandse magisch realistische roman en een Engelse fantasy. Ik lees liever niet steeds boeken uit hetzelfde christelijke hokje, maar ook daarbuiten. Ik hoop dat dat andersom ook gebeurt. We hebben elkaar veel te vertellen.
En nu jij! Welke spannende combinatie van titels maak jij? Reacties welkom op de website.
Holyfant
Column Klokgelui voor Overschiese krant.
Holyfant
Olifanten zijn joekels van dieren, weet je dat? Ik ben naar de tentoonstelling van Frans Lanting geweest in het Nederlands Fotomuseum, Kop van Zuid. Een van de foto's toonde een stel olifantenpoten. De rest paste er niet op. Daarnaast stond een impala, een soort antilope of hert. Ongeveer zo groot als de kleine teen van die olifant. Wat een bakbeesten!
Weet je hoe de olifant aan zijn naam komt? Een verre voorouder van ons, ene Adam, zag voor het eerst zo'n grijze muur met slurf en slagtanden, en dacht: 'Holy ... Fantastisch!' Sindsdien heet het dier een holyfant, wat verbasterd is tot olifant. Op z'n Rotterdams: Olli.
En weet je, die Adam, die gaat rekenen. Hij ziet een holyfant, eh olifant, een chimpansee, een spookdiertje, een orang-oetan (briljante vondst, Adam!), een eend, en zo nog heel veel andere dieren, en hij vraagt aan God: 'Hoe lang heeft u er eigenlijk over gedaan om alle dieren te maken en alle planten en zo?' En dan stel ik me zo voor dat God aan zijn baard krabt en denkt: Ik heb Adam net tot tien leren tellen. Als ik nu over miljoenen en miljarden jaren begin, snapt hij er niks van. Dus God zegt: 'Ik rond het af op zeven dagen.'
Misschien heb jij ook van die vragen aan God. Is wat in de bijbel staat echt gebeurd? Heeft Jezus echt bestaan, hoe betrouwbaar zijn die verhalen? Als je bidt, praat je dan met God en praat hij terug? Wat heb ik aan een Vader ver weg in de hemel als ik niet eens contact heb met mijn pa hier? Daar heeft God de Alphacursus voor uitgevonden. Daar is alle ruimte voor vragen rond geloof en leven. Kijk op alpha-cursus.nl. Ook in Overschie begint deze maand een gratis cursus, inclusief eten.
En of je nu gelooft dat God alles om ons heen in zeven dagen of iets langer geschapen heeft, of dat alles in miljarden jaren vanzelf is ontstaan: ik raad iedereen aan om naar de tentoonstelling van Rotterdammer Frans Lanting te gaan. Tot 18 september kan je heel mooie plaatjes kijken in het Fotomuseum.
Bijvoorbeeld van holyfanten.
[Geplaatst in Overschiese krant]
Tentstokken
Column Klokgelui voor Overschiese Krant.
Laat ik mijn eerste column voor deze krant beginnen met een belangrijke tip: als je gaat kamperen, vergeet dan je tentstokken niet.
Een paar weken geleden ging ik naar de New Wine Zomerconferentie. Dat is een christelijke conferentie op het festivalterrein bij Walibi in Flevoland, waar deze maand Lowlands plaatsvindt. Ik begroette een paar vrienden van de kerk, zocht een vrije plek, en pakte mijn tent uit de tas. Ik zocht, ik schudde, ik voelde, ik draaide om en om, maar nee: nergens tentstokken.
En ik dacht: niet weer!
Jawel, dit was de tweede keer dat ik mijn tentstokken vergeten was. Je denkt dat het je geen tweede keer gebeurt, maar ik kreeg het voor elkaar. U ziet: het intelligentieniveau van de gemiddelde columnschrijver trek ik omlaag. Het kwam goed: iemand had een reservetent bij zich en daar heb ik een week gebruik van gemaakt.
De conferentie ging over eenheid. Er zijn veel verschillende soorten kerken. Als je de bijbel leest, zie je dat dit niet zo bedoeld was. Nu is het prima dat er verschillende stijlen zijn. Sommige mensen gaan graag naar een ingetogen kerkdienst, anderen naar een uitbundige. Dat mag naast elkaar bestaan.
Maar elkaar de tent uitvechten, met of zonder tentstokken, is niet de bedoeling. Gelukkig zetten veel kerken zich allang niet meer tegen elkaar af, maar werken ze samen. Om een klein voorbeeld te nomen: deze column wordt gevuld door mensen uit diverse kerken in Overschie.
Een spreker op de conferentie had het over een verhaal uit het bijbelboek Jozua. Na jaren kamperen in de woestijn, was een deel van Israël aan de oostkant van de Jordaan gaan wonen en het andere deel aan de westkant. Zeg maar Rotterdam Zuid en Noord met de Maas ertussen. Of Overschie links en rechts van de snelweg. De oostelijke Israëlieten bouwden een monument. Door een misverstand werd het bijna oorlog met het Westen, maar op tijd begrepen ze daar de bedoeling. Het was een gedenksteen: gedenk dat we één zijn. De Jordaan scheidt ons, maar we zijn één land. De Maas, maar we zijn één stad. De snelweg, maar we zijn één wijk. We hebben kerkmuren, religieuze hokjes en heilige huisjes, maar we zijn één kerk. We zijn gescheiden van tafel en bed, maar we zijn één gezin.
Nee, dat is niet makkelijk. Maar er is er Eén in de hemel die zegt: ik help je erbij!