SlideShare a Scribd company logo
Why Plone Will Die 
(or turn into a CMS zombie) 
Andreas Jung 
Plone Conference 2014, Bristol
Disclaimer 
• perhaps tendentious 
• perhaps provoking 
• perhaps unbalanced 
• always my personal opinion 
• not representing any official 
Plone position
Integrator
Consultant
Plone coredev
Loudmouth 
Consultant
Why Plone Will Die
Why am I giving this talk? 
• growing developer pain 
• growing integrator pain 
• rising and unpredictable project costs 
• developer frustration at every corner
2014 - the year of Plone legacy
2014 - the year of Plone legacy 
• Plone 4.2➝4.3 
• 3rd party code 
• TinyMCE issues 
• schema tabs no 
longer working 
• Javascript 
issues 
• JQueryUI 
incompatibility
2014 - the year of Plone legacy 
• Plone 4.0➝4.2 
• 3rd party garbage code 
• Migration to Plone 4.3 not easily doable 
• Migration costs not predictable
2014 - the year of Plone legacy 
• Plone 4.0➝4.2 
• own project 
• Migration to Plone 4.3 not easily doable 
• Migration costs not predictable 
• Problems with fully qualified links in images and links
2014 - the year of Plone legacy 
• Plone 2.X➝4.3 
• customer grown 
project 
• AT➝Dexterity 
• p.a.event pain 
• p.a.widgets pain 
• z3c.form fun 
• much more pain…
2014 - the year of Plone legacy 
• Plone 4.0➝4.1➝4.2➝4.3 
• own project 
• started in 2010 
• every migration upgrade had more or less severe 
issues and caused significant work and costs
I am not talking about UX with Plone
Let me talk of _my_ 
(backend) developer experience
>>> reasons[„programming“] 
• Dexterity programming experience
Dexterity wanted to be pythonic 
IMySchema (attr1, attr2) MyType 
obj = plone.api.create(„my.type“, container, id) 
obj.attr1 = „foo“ 
obj.attr2 = „bar“
…but it ended like this 
MyType 
IMySchema (attr1) 
IBehavior1 (attr2) 
IBehavior2 (attr3) 
obj = plone.api.create(„my.type“, container, id) 
obj.attr1 = „foo“ 
IBehavior1(obj).attr2 = „bar“ 
IBehavior2(obj).attr3 = „hello world“ 
call_some_subscriber(obj) # plone.app.event 
Q: Is this pythonic?
>>> reasons[„programming“] 
• Insufficient parameter checks 
• Insufficient error handling 
• Stupid error messages
My personal enemy: z3c.form 
• no compatibility checks between schema 
fields and widgets, pdb needed 
• pointless, unhelpful error messages 
saying all and nothing 
• vocabulary issues always require 
to use pdb (NOVALUESET error with lots of 
fields and vocabularies)
…and then this madness 
'/Users/ajung/.buildout/eggs/z3c.form-3.1.1-py2.7.egg', 
'/Users/ajung/.buildout/eggs/plone.z3cform-0.8.0-py2.7.egg', 
'/Users/ajung/.buildout/eggs/plone.autoform-1.6-py2.7.egg', 
'/Users/ajung/.buildout/eggs/plone.app.z3cform-0.7.6-py2.7.egg', 
'/Users/ajung/.buildout/eggs/plone.formwidget.namedfile-1.0.9-py2.7.egg', 
'/Users/ajung/.buildout/eggs/collective.z3cform.datetimewidget-1.2.6-py2.7.egg', 
'/Users/ajung/.buildout/eggs/plone.app.form-2.2.4-py2.7.egg', 
'/Users/ajung/.buildout/eggs/zope.formlib-4.0.6-py2.7.egg', 
'/Users/ajung/.buildout/eggs/five.formlib-1.0.4-py2.7.egg', 
'/Users/ajung/.buildout/eggs/z3c.formwidget.query-0.10-py2.7.egg',
>>> reasons[„programming“] 
• complexity 
• growing complexity 
• wrapper modules…
250 modules (4.3 install) 
Up to 400 modules (custom install) 
Q: Who understands this? (completely)? 
http://www.wired.com/wp-content/uploads/images_blogs/wiredscience/2011/08/iceberg-towing-illustration-dassault-systemes.jpg
>>> reasons[„programming“] 
• Zope Component Architecture 
- A framework is not an API
Zope Component Architecture ZCA 
• ZCA is the foundation of the Plone core 
(not of Zope2 itself) 
• ZCA has good parts and bad parts 
• brain***k features like multi-adapters 
neither lead to better code nor better 
readability 
• ZCA is a reasonable implementation framework 
• ZCA based code can be complex and complicated 
• ZCA often misused as public API in lack 
of an API at all 
• _I_ do not want to see much ZCA stuff on the 
public API level (except schemas, interfaces)
>>> reasons[„programming“] 
• Lack of explicit and documented APIs
Documented APIs are essential 
• APIs define an entry-point to a 
particular functionality 
• APIs encapsulate and hide complexity 
• APIs define a well-defined behavior 
• APIs can validate and enforce constraints 
on incoming and outgoing data 
• plone.api 
• „Facade“ design pattern 
• covers only the most elementary 
functionality of Plone 
• APIs must be humane 
(Kenneth Reitz: https://speakerdeck.com/kennethreitz/python-for-humans)
>>> reasons[„programming“] 
• Migration pain
Migration pain 
• Plone portal_migration usually works but 
• often TinyMCE issues 
• often Javascript issues 
• incompatible add-ons 
• (subtle) behavioral changes 
• Not a single smooth Plone 4.3 migration 
this year 
• Migration costs 
• often no longer predictable 
• higher risks & higher costs with 
every Plone major release
>>> reasons[„programming“] 
• Legacy all around us
The pain of dealing with legacy 
• e.g.Zope 2, CMF 
• new rewritten 
functionality added 
without removing 
all old culprit 
• more radical cuts are 
needed in order to get 
rid of old garbage 
before adding hopefully 
better code
>>> reasons[„others“] 
• Stagnation!? 
• Shrinking community!? 
• Shrinking adaptation!?
Stagnation 
Source: Plone Developer Survey 2014
Stagnation 
Source: Plone Developer Survey 2014
Geographical stagnation? 
Source: Plone Developer Survey 2014
>>> reasons[„others“] 
• Shrinking CMS market? 
• More legacy Plone projects than new 
Plone projects?
Shrinking CMS market? 
Source: Plone Developer Survey 2014
#WhatMakesPloneAnOptionFor_ME_Today 
• Enterprise CMS 
• fine-grained security model 
• outstanding security record over 
the last 12 years 
• flexible workflows 
• ZODB was great but time to move on…
#WhatMakesPloneAnOptionFor_ME_Tomorrow 
• As a developer 
• getting rid of old code cruft 
• getting rid of over-designed and 
over-engineered code cruft 
(e.g. portlets, z3c.form) 
• explicit and consistent APIs 
everywhere 
• explicit type checking 
• much more explicit error messages
#WhatMakesPloneAnOptionFor_ME_Tomorrow 
• As a consultant/integrator for 
„enterprise“ projects: 
• better search-engine (e.g. 
ElasticSearch) 
• better scalable database backend 
• Python 3.x 
• a coherent and 
consistent architecture
How can this be achieved? 
• Define what Plone currently is 
• Define what Plone should be in the 
future 
• Define the scope of Plone 
• Know your market segment 
• Be realistic about the goals that 
can be achieved with the given 
resources
How can this be achieved? 
• Zope 2 development is dead 
• ➝ Forget Zope 2 
• CMF development is more than dead 
• ➝ Forget CMF 
• ZCA…well… 
• Take the good parts and forget the 
rest 
• ZODB 
• It was nice with you but we need and 
we do have better options…no more 
pickle graves please.
How can this be achieved? 
• Throw everything away and start from scratch 
• Pyramid 
• Python 3 
• a new persistence API 
• a new pluggable persistence layer 
• evaluate the database market for the best 
database option with respect to scalability, 
ease-of-use etc. 
• see how existing functionality like Dexterity 
fits into a new architecture 
The time of the monster application servers 
is over! Take the best components on the 
market and build it yourself.
And there’s one more thing… 
• Don’t call it Plone! 
• Develop it under the umbrella of 
the brand Plone 
• But give it a different name 
(similar case with Typo 3 and its 
reincarnation NEOS)
Plone Developer Survey (103 answers) 
• 103 answers 
• most interesting: a lot of 
interesting comments about the 
pros and cons of Plone 
• http://goo.gl/pBK3DM
Questions? 
Source: Monty Python
Why Plone Will Die

More Related Content

What's hot

Content Management Systems and Refactoring - Drupal, WordPress and eZ Publish
Content Management Systems and Refactoring - Drupal, WordPress and eZ PublishContent Management Systems and Refactoring - Drupal, WordPress and eZ Publish
Content Management Systems and Refactoring - Drupal, WordPress and eZ Publish
Jani Tarvainen
 
Untangling - fall2017 - week 8
Untangling - fall2017 - week 8Untangling - fall2017 - week 8
Untangling - fall2017 - week 8
Derek Jacoby
 
Fast Web Applications with Go
Fast Web Applications with Go Fast Web Applications with Go
Fast Web Applications with Go
Eylem Ozekin
 
Modern websites in 2020 and Joomla
Modern websites in 2020 and JoomlaModern websites in 2020 and Joomla
Modern websites in 2020 and Joomla
George Wilson
 
Untangling - fall2017 - week 9
Untangling - fall2017 - week 9Untangling - fall2017 - week 9
Untangling - fall2017 - week 9
Derek Jacoby
 
Untangling - fall2017 - week 7
Untangling - fall2017 - week 7Untangling - fall2017 - week 7
Untangling - fall2017 - week 7
Derek Jacoby
 
Untangling spring week11
Untangling spring week11Untangling spring week11
Untangling spring week11
Derek Jacoby
 
Migrate PHP E-Commerce Site to Go
Migrate PHP E-Commerce Site to GoMigrate PHP E-Commerce Site to Go
Migrate PHP E-Commerce Site to Go
Weng Wei
 
CPAN Exporter modules for Perl 5
CPAN Exporter modules for Perl 5CPAN Exporter modules for Perl 5
CPAN Exporter modules for Perl 5
neilbowers
 
Engage 2014 OpenNTF Domino API Slides
Engage 2014 OpenNTF Domino API SlidesEngage 2014 OpenNTF Domino API Slides
Engage 2014 OpenNTF Domino API Slides
Paul Withers
 
Lokalise
LokaliseLokalise
Lokalise
Eugen Martynov
 
Untangling fall2017 week1
Untangling fall2017 week1Untangling fall2017 week1
Untangling fall2017 week1
Derek Jacoby
 
Untangling11
Untangling11Untangling11
Untangling11
Derek Jacoby
 
WordPress APIs
WordPress APIsWordPress APIs
WordPress APIs
mdawaffe
 
Organizing Your PHP Projects (2010 ConFoo)
Organizing Your PHP Projects (2010 ConFoo)Organizing Your PHP Projects (2010 ConFoo)
Organizing Your PHP Projects (2010 ConFoo)
Paul Jones
 
Untangling - fall2017 - week 10
Untangling - fall2017 - week 10Untangling - fall2017 - week 10
Untangling - fall2017 - week 10
Derek Jacoby
 
Untangling spring week9
Untangling spring week9Untangling spring week9
Untangling spring week9
Derek Jacoby
 
Zend Framework 2, What's new, Confoo 2011
Zend Framework 2, What's new, Confoo 2011Zend Framework 2, What's new, Confoo 2011
Zend Framework 2, What's new, Confoo 2011
Bachkoutou Toutou
 
Engage 2019 Software documentation is fun if you have the right tools: Introd...
Engage 2019 Software documentation is fun if you have the right tools: Introd...Engage 2019 Software documentation is fun if you have the right tools: Introd...
Engage 2019 Software documentation is fun if you have the right tools: Introd...
AndrewMagerman
 
Rails on HBase
Rails on HBaseRails on HBase
Rails on HBase
Tony Hillerson
 

What's hot (20)

Content Management Systems and Refactoring - Drupal, WordPress and eZ Publish
Content Management Systems and Refactoring - Drupal, WordPress and eZ PublishContent Management Systems and Refactoring - Drupal, WordPress and eZ Publish
Content Management Systems and Refactoring - Drupal, WordPress and eZ Publish
 
Untangling - fall2017 - week 8
Untangling - fall2017 - week 8Untangling - fall2017 - week 8
Untangling - fall2017 - week 8
 
Fast Web Applications with Go
Fast Web Applications with Go Fast Web Applications with Go
Fast Web Applications with Go
 
Modern websites in 2020 and Joomla
Modern websites in 2020 and JoomlaModern websites in 2020 and Joomla
Modern websites in 2020 and Joomla
 
Untangling - fall2017 - week 9
Untangling - fall2017 - week 9Untangling - fall2017 - week 9
Untangling - fall2017 - week 9
 
Untangling - fall2017 - week 7
Untangling - fall2017 - week 7Untangling - fall2017 - week 7
Untangling - fall2017 - week 7
 
Untangling spring week11
Untangling spring week11Untangling spring week11
Untangling spring week11
 
Migrate PHP E-Commerce Site to Go
Migrate PHP E-Commerce Site to GoMigrate PHP E-Commerce Site to Go
Migrate PHP E-Commerce Site to Go
 
CPAN Exporter modules for Perl 5
CPAN Exporter modules for Perl 5CPAN Exporter modules for Perl 5
CPAN Exporter modules for Perl 5
 
Engage 2014 OpenNTF Domino API Slides
Engage 2014 OpenNTF Domino API SlidesEngage 2014 OpenNTF Domino API Slides
Engage 2014 OpenNTF Domino API Slides
 
Lokalise
LokaliseLokalise
Lokalise
 
Untangling fall2017 week1
Untangling fall2017 week1Untangling fall2017 week1
Untangling fall2017 week1
 
Untangling11
Untangling11Untangling11
Untangling11
 
WordPress APIs
WordPress APIsWordPress APIs
WordPress APIs
 
Organizing Your PHP Projects (2010 ConFoo)
Organizing Your PHP Projects (2010 ConFoo)Organizing Your PHP Projects (2010 ConFoo)
Organizing Your PHP Projects (2010 ConFoo)
 
Untangling - fall2017 - week 10
Untangling - fall2017 - week 10Untangling - fall2017 - week 10
Untangling - fall2017 - week 10
 
Untangling spring week9
Untangling spring week9Untangling spring week9
Untangling spring week9
 
Zend Framework 2, What's new, Confoo 2011
Zend Framework 2, What's new, Confoo 2011Zend Framework 2, What's new, Confoo 2011
Zend Framework 2, What's new, Confoo 2011
 
Engage 2019 Software documentation is fun if you have the right tools: Introd...
Engage 2019 Software documentation is fun if you have the right tools: Introd...Engage 2019 Software documentation is fun if you have the right tools: Introd...
Engage 2019 Software documentation is fun if you have the right tools: Introd...
 
Rails on HBase
Rails on HBaseRails on HBase
Rails on HBase
 

Similar to Why Plone Will Die

Dev ops lessons learned - Michael Collins
Dev ops lessons learned  - Michael CollinsDev ops lessons learned  - Michael Collins
Dev ops lessons learned - Michael Collins
Devopsdays
 
SGCE 2015 REST APIs
SGCE 2015 REST APIsSGCE 2015 REST APIs
SGCE 2015 REST APIs
Domingo Suarez Torres
 
APIs distribuidos con alta escalabilidad
APIs distribuidos con alta escalabilidadAPIs distribuidos con alta escalabilidad
APIs distribuidos con alta escalabilidad
Software Guru
 
The Core of Microservice Architecture(First Approach)
The Core of Microservice Architecture(First Approach)The Core of Microservice Architecture(First Approach)
The Core of Microservice Architecture(First Approach)
enyert
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®
Hannes Lowette
 
CI doesn’t start with Jenkins
CI doesn’t start with JenkinsCI doesn’t start with Jenkins
CI doesn’t start with Jenkins
Yuriy Rochnyak
 
Metaprogramming Go
Metaprogramming GoMetaprogramming Go
Metaprogramming Go
Weng Wei
 
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchAugust Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
Howard Greenberg
 
MPI Requirements of the Network Layer
MPI Requirements of the Network LayerMPI Requirements of the Network Layer
MPI Requirements of the Network Layer
inside-BigData.com
 
Full stack conference talk slides
Full stack conference talk slidesFull stack conference talk slides
Full stack conference talk slides
Sameer Al-Sakran
 
Oscon presentation
Oscon presentationOscon presentation
Oscon presentation
garrettmoon
 
From hello world to goodbye code
From hello world to goodbye codeFrom hello world to goodbye code
From hello world to goodbye code
Kim Moir
 
Progressive Enhancement using WSGI
Progressive Enhancement using WSGIProgressive Enhancement using WSGI
Progressive Enhancement using WSGI
Matthew Wilkes
 
The Python in the Apple
The Python in the AppleThe Python in the Apple
The Python in the Apple
zeroSteiner
 
Hadoop Demystified + Automation Smackdown! Austin JUG June 24 2014
Hadoop Demystified + Automation Smackdown!  Austin JUG June 24 2014Hadoop Demystified + Automation Smackdown!  Austin JUG June 24 2014
Hadoop Demystified + Automation Smackdown! Austin JUG June 24 2014
datafundamentals
 
Hacking for fun & profit - The Kubernetes Way - Demi Ben-Ari - Panorays
Hacking for fun & profit - The Kubernetes Way - Demi Ben-Ari - PanoraysHacking for fun & profit - The Kubernetes Way - Demi Ben-Ari - Panorays
Hacking for fun & profit - The Kubernetes Way - Demi Ben-Ari - Panorays
Demi Ben-Ari
 
cadec-2017-golang
cadec-2017-golangcadec-2017-golang
cadec-2017-golang
TiNguyn863920
 
The Architect Way - JSCamp.asia 2012
The Architect Way - JSCamp.asia 2012The Architect Way - JSCamp.asia 2012
The Architect Way - JSCamp.asia 2012
Jan Jongboom
 
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
Lucas Jellema
 
Maintainable Machine Learning Products
Maintainable Machine Learning ProductsMaintainable Machine Learning Products
Maintainable Machine Learning Products
Andrew Musselman
 

Similar to Why Plone Will Die (20)

Dev ops lessons learned - Michael Collins
Dev ops lessons learned  - Michael CollinsDev ops lessons learned  - Michael Collins
Dev ops lessons learned - Michael Collins
 
SGCE 2015 REST APIs
SGCE 2015 REST APIsSGCE 2015 REST APIs
SGCE 2015 REST APIs
 
APIs distribuidos con alta escalabilidad
APIs distribuidos con alta escalabilidadAPIs distribuidos con alta escalabilidad
APIs distribuidos con alta escalabilidad
 
The Core of Microservice Architecture(First Approach)
The Core of Microservice Architecture(First Approach)The Core of Microservice Architecture(First Approach)
The Core of Microservice Architecture(First Approach)
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®
 
CI doesn’t start with Jenkins
CI doesn’t start with JenkinsCI doesn’t start with Jenkins
CI doesn’t start with Jenkins
 
Metaprogramming Go
Metaprogramming GoMetaprogramming Go
Metaprogramming Go
 
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchAugust Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
 
MPI Requirements of the Network Layer
MPI Requirements of the Network LayerMPI Requirements of the Network Layer
MPI Requirements of the Network Layer
 
Full stack conference talk slides
Full stack conference talk slidesFull stack conference talk slides
Full stack conference talk slides
 
Oscon presentation
Oscon presentationOscon presentation
Oscon presentation
 
From hello world to goodbye code
From hello world to goodbye codeFrom hello world to goodbye code
From hello world to goodbye code
 
Progressive Enhancement using WSGI
Progressive Enhancement using WSGIProgressive Enhancement using WSGI
Progressive Enhancement using WSGI
 
The Python in the Apple
The Python in the AppleThe Python in the Apple
The Python in the Apple
 
Hadoop Demystified + Automation Smackdown! Austin JUG June 24 2014
Hadoop Demystified + Automation Smackdown!  Austin JUG June 24 2014Hadoop Demystified + Automation Smackdown!  Austin JUG June 24 2014
Hadoop Demystified + Automation Smackdown! Austin JUG June 24 2014
 
Hacking for fun & profit - The Kubernetes Way - Demi Ben-Ari - Panorays
Hacking for fun & profit - The Kubernetes Way - Demi Ben-Ari - PanoraysHacking for fun & profit - The Kubernetes Way - Demi Ben-Ari - Panorays
Hacking for fun & profit - The Kubernetes Way - Demi Ben-Ari - Panorays
 
cadec-2017-golang
cadec-2017-golangcadec-2017-golang
cadec-2017-golang
 
The Architect Way - JSCamp.asia 2012
The Architect Way - JSCamp.asia 2012The Architect Way - JSCamp.asia 2012
The Architect Way - JSCamp.asia 2012
 
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
How and Why you can and should Participate in Open Source Projects (AMIS, Sof...
 
Maintainable Machine Learning Products
Maintainable Machine Learning ProductsMaintainable Machine Learning Products
Maintainable Machine Learning Products
 

More from Andreas Jung

zopyx-fastapi-auth - authentication and authorization for FastAPI
zopyx-fastapi-auth - authentication and authorization for FastAPIzopyx-fastapi-auth - authentication and authorization for FastAPI
zopyx-fastapi-auth - authentication and authorization for FastAPI
Andreas Jung
 
State of PrintCSS - MarkupUK 2023.pdf
State of PrintCSS - MarkupUK 2023.pdfState of PrintCSS - MarkupUK 2023.pdf
State of PrintCSS - MarkupUK 2023.pdf
Andreas Jung
 
Typesense Plone Integration Plone Conference 2022 Namur
Typesense Plone Integration Plone Conference 2022 NamurTypesense Plone Integration Plone Conference 2022 Namur
Typesense Plone Integration Plone Conference 2022 Namur
Andreas Jung
 
Onkopedia - Plone Tagung 2020 Dresden
Onkopedia - Plone Tagung 2020 DresdenOnkopedia - Plone Tagung 2020 Dresden
Onkopedia - Plone Tagung 2020 Dresden
Andreas Jung
 
PrintCSS W3C workshop at XMLPrague 2020
PrintCSS W3C workshop at XMLPrague 2020PrintCSS W3C workshop at XMLPrague 2020
PrintCSS W3C workshop at XMLPrague 2020
Andreas Jung
 
PrintCSS workshop XMLPrague 2020
PrintCSS workshop XMLPrague 2020PrintCSS workshop XMLPrague 2020
PrintCSS workshop XMLPrague 2020
Andreas Jung
 
Plone 5.2 migration at University Ghent, Belgium
Plone 5.2 migration at University Ghent, BelgiumPlone 5.2 migration at University Ghent, Belgium
Plone 5.2 migration at University Ghent, Belgium
Andreas Jung
 
Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia
Back to the future - Plone 5.2 und Python 3 Migration am Beispiel OnkopediaBack to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia
Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia
Andreas Jung
 
Plone migrations using plone.restapi
Plone migrations using plone.restapiPlone migrations using plone.restapi
Plone migrations using plone.restapi
Andreas Jung
 
Plone Migrationen mit Plone REST API
Plone Migrationen mit Plone REST APIPlone Migrationen mit Plone REST API
Plone Migrationen mit Plone REST API
Andreas Jung
 
Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...
Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...
Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...
Andreas Jung
 
Generierung von PDF aus XML/HTML mit PrintCSS
Generierung von PDF aus XML/HTML mit PrintCSSGenerierung von PDF aus XML/HTML mit PrintCSS
Generierung von PDF aus XML/HTML mit PrintCSS
Andreas Jung
 
Creating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCsCreating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCs
Andreas Jung
 
Creating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCsCreating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCs
Andreas Jung
 
The Plone and The Blockchain
The Plone and The BlockchainThe Plone and The Blockchain
The Plone and The Blockchain
Andreas Jung
 
Content Gemeinsam Erstellen: Integration Plone mit SMASHDOCs
Content Gemeinsam Erstellen: Integration Plone mit SMASHDOCsContent Gemeinsam Erstellen: Integration Plone mit SMASHDOCs
Content Gemeinsam Erstellen: Integration Plone mit SMASHDOCs
Andreas Jung
 
PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.
PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.
PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.
Andreas Jung
 
Why we love ArangoDB. The hunt for the right NosQL Database
Why we love ArangoDB. The hunt for the right NosQL DatabaseWhy we love ArangoDB. The hunt for the right NosQL Database
Why we love ArangoDB. The hunt for the right NosQL Database
Andreas Jung
 
XML Director - the technical foundation of onkopedia.com
XML Director - the technical foundation of onkopedia.comXML Director - the technical foundation of onkopedia.com
XML Director - the technical foundation of onkopedia.com
Andreas Jung
 
PyFilesystem
PyFilesystemPyFilesystem
PyFilesystem
Andreas Jung
 

More from Andreas Jung (20)

zopyx-fastapi-auth - authentication and authorization for FastAPI
zopyx-fastapi-auth - authentication and authorization for FastAPIzopyx-fastapi-auth - authentication and authorization for FastAPI
zopyx-fastapi-auth - authentication and authorization for FastAPI
 
State of PrintCSS - MarkupUK 2023.pdf
State of PrintCSS - MarkupUK 2023.pdfState of PrintCSS - MarkupUK 2023.pdf
State of PrintCSS - MarkupUK 2023.pdf
 
Typesense Plone Integration Plone Conference 2022 Namur
Typesense Plone Integration Plone Conference 2022 NamurTypesense Plone Integration Plone Conference 2022 Namur
Typesense Plone Integration Plone Conference 2022 Namur
 
Onkopedia - Plone Tagung 2020 Dresden
Onkopedia - Plone Tagung 2020 DresdenOnkopedia - Plone Tagung 2020 Dresden
Onkopedia - Plone Tagung 2020 Dresden
 
PrintCSS W3C workshop at XMLPrague 2020
PrintCSS W3C workshop at XMLPrague 2020PrintCSS W3C workshop at XMLPrague 2020
PrintCSS W3C workshop at XMLPrague 2020
 
PrintCSS workshop XMLPrague 2020
PrintCSS workshop XMLPrague 2020PrintCSS workshop XMLPrague 2020
PrintCSS workshop XMLPrague 2020
 
Plone 5.2 migration at University Ghent, Belgium
Plone 5.2 migration at University Ghent, BelgiumPlone 5.2 migration at University Ghent, Belgium
Plone 5.2 migration at University Ghent, Belgium
 
Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia
Back to the future - Plone 5.2 und Python 3 Migration am Beispiel OnkopediaBack to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia
Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia
 
Plone migrations using plone.restapi
Plone migrations using plone.restapiPlone migrations using plone.restapi
Plone migrations using plone.restapi
 
Plone Migrationen mit Plone REST API
Plone Migrationen mit Plone REST APIPlone Migrationen mit Plone REST API
Plone Migrationen mit Plone REST API
 
Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...
Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...
Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...
 
Generierung von PDF aus XML/HTML mit PrintCSS
Generierung von PDF aus XML/HTML mit PrintCSSGenerierung von PDF aus XML/HTML mit PrintCSS
Generierung von PDF aus XML/HTML mit PrintCSS
 
Creating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCsCreating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCs
 
Creating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCsCreating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCs
 
The Plone and The Blockchain
The Plone and The BlockchainThe Plone and The Blockchain
The Plone and The Blockchain
 
Content Gemeinsam Erstellen: Integration Plone mit SMASHDOCs
Content Gemeinsam Erstellen: Integration Plone mit SMASHDOCsContent Gemeinsam Erstellen: Integration Plone mit SMASHDOCs
Content Gemeinsam Erstellen: Integration Plone mit SMASHDOCs
 
PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.
PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.
PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.
 
Why we love ArangoDB. The hunt for the right NosQL Database
Why we love ArangoDB. The hunt for the right NosQL DatabaseWhy we love ArangoDB. The hunt for the right NosQL Database
Why we love ArangoDB. The hunt for the right NosQL Database
 
XML Director - the technical foundation of onkopedia.com
XML Director - the technical foundation of onkopedia.comXML Director - the technical foundation of onkopedia.com
XML Director - the technical foundation of onkopedia.com
 
PyFilesystem
PyFilesystemPyFilesystem
PyFilesystem
 

Recently uploaded

Best Skills to Learn for Freelancing.pdf
Best Skills to Learn for Freelancing.pdfBest Skills to Learn for Freelancing.pdf
Best Skills to Learn for Freelancing.pdf
Million-$-Knowledge {Million Dollar Knowledge}
 
SisAi World - Software is AI - Providing AI as Software - Protecting the Inte...
SisAi World - Software is AI - Providing AI as Software - Protecting the Inte...SisAi World - Software is AI - Providing AI as Software - Protecting the Inte...
SisAi World - Software is AI - Providing AI as Software - Protecting the Inte...
QingjieDu1
 
Portugal Dreamin 24 - How to easily use an API with Flows
Portugal Dreamin 24  - How to easily use an API with FlowsPortugal Dreamin 24  - How to easily use an API with Flows
Portugal Dreamin 24 - How to easily use an API with Flows
Thierry TROUIN ☁
 
Maximizing Network Efficiency with Large Language Models (LLM)
Maximizing Network Efficiency with Large Language Models (LLM)Maximizing Network Efficiency with Large Language Models (LLM)
Maximizing Network Efficiency with Large Language Models (LLM)
Bangladesh Network Operators Group
 
Do it again anti Republican shirt Do it again anti Republican shirt
Do it again anti Republican shirt Do it again anti Republican shirtDo it again anti Republican shirt Do it again anti Republican shirt
Do it again anti Republican shirt Do it again anti Republican shirt
exgf28
 
IPv6 Deployment Planning and Security Considerations
IPv6 Deployment Planning and Security ConsiderationsIPv6 Deployment Planning and Security Considerations
IPv6 Deployment Planning and Security Considerations
Bangladesh Network Operators Group
 
Rent remote desktop server mangohost .net
Rent remote desktop server mangohost .netRent remote desktop server mangohost .net
Rent remote desktop server mangohost .net
pdfsubmission50
 
Ontology for the semantic enhancement, database definition and management and...
Ontology for the semantic enhancement, database definition and management and...Ontology for the semantic enhancement, database definition and management and...
Ontology for the semantic enhancement, database definition and management and...
Edward Blurock
 
Software Defined Networking, Concepts and Practical Implementations
Software Defined Networking, Concepts and Practical ImplementationsSoftware Defined Networking, Concepts and Practical Implementations
Software Defined Networking, Concepts and Practical Implementations
Bangladesh Network Operators Group
 
Effective Tips for Creating the Best Rich Media Ads .pptx
Effective Tips for Creating the Best Rich Media Ads .pptxEffective Tips for Creating the Best Rich Media Ads .pptx
Effective Tips for Creating the Best Rich Media Ads .pptx
AirtoryInc
 
Trump Assassination Shirt Trump Assassination Shirt
Trump Assassination Shirt Trump Assassination ShirtTrump Assassination Shirt Trump Assassination Shirt
Trump Assassination Shirt Trump Assassination Shirt
exgf28
 
Network Security version1.0 - Module 3.pptx
Network Security version1.0 - Module 3.pptxNetwork Security version1.0 - Module 3.pptx
Network Security version1.0 - Module 3.pptx
Infotainmentforall
 
Trump fist pump t shirts Trump fist pump t shirts
Trump fist pump t shirts Trump fist pump t shirtsTrump fist pump t shirts Trump fist pump t shirts
Trump fist pump t shirts Trump fist pump t shirts
exgf28
 
Geolocation and Geofeed Implementation bdNOG18
Geolocation and Geofeed Implementation bdNOG18Geolocation and Geofeed Implementation bdNOG18
Geolocation and Geofeed Implementation bdNOG18
Bangladesh Network Operators Group
 
DASH, presented by Elly Tawhai at PacNOG 33
DASH, presented by Elly Tawhai at PacNOG 33DASH, presented by Elly Tawhai at PacNOG 33
DASH, presented by Elly Tawhai at PacNOG 33
APNIC
 
Saint Louis University diploma
Saint Louis University diplomaSaint Louis University diploma
Saint Louis University diploma
eufdev
 
Use of Ontologies in Chemical Kinetic Database CHEMCONNECT
Use of Ontologies in Chemical Kinetic Database CHEMCONNECTUse of Ontologies in Chemical Kinetic Database CHEMCONNECT
Use of Ontologies in Chemical Kinetic Database CHEMCONNECT
Edward Blurock
 
My President is bulletproof t shirts hoodie
My President is bulletproof t shirts hoodieMy President is bulletproof t shirts hoodie
My President is bulletproof t shirts hoodie
exgf28
 
New York Institute of Technology degree Cert diploma offer
New York Institute of Technology degree Cert diploma offerNew York Institute of Technology degree Cert diploma offer
New York Institute of Technology degree Cert diploma offer
ubovu
 
Digital ethnography of the Polish darknet drug trade community
Digital ethnography of the Polish darknet drug trade communityDigital ethnography of the Polish darknet drug trade community
Digital ethnography of the Polish darknet drug trade community
Piotr Siuda
 

Recently uploaded (20)

Best Skills to Learn for Freelancing.pdf
Best Skills to Learn for Freelancing.pdfBest Skills to Learn for Freelancing.pdf
Best Skills to Learn for Freelancing.pdf
 
SisAi World - Software is AI - Providing AI as Software - Protecting the Inte...
SisAi World - Software is AI - Providing AI as Software - Protecting the Inte...SisAi World - Software is AI - Providing AI as Software - Protecting the Inte...
SisAi World - Software is AI - Providing AI as Software - Protecting the Inte...
 
Portugal Dreamin 24 - How to easily use an API with Flows
Portugal Dreamin 24  - How to easily use an API with FlowsPortugal Dreamin 24  - How to easily use an API with Flows
Portugal Dreamin 24 - How to easily use an API with Flows
 
Maximizing Network Efficiency with Large Language Models (LLM)
Maximizing Network Efficiency with Large Language Models (LLM)Maximizing Network Efficiency with Large Language Models (LLM)
Maximizing Network Efficiency with Large Language Models (LLM)
 
Do it again anti Republican shirt Do it again anti Republican shirt
Do it again anti Republican shirt Do it again anti Republican shirtDo it again anti Republican shirt Do it again anti Republican shirt
Do it again anti Republican shirt Do it again anti Republican shirt
 
IPv6 Deployment Planning and Security Considerations
IPv6 Deployment Planning and Security ConsiderationsIPv6 Deployment Planning and Security Considerations
IPv6 Deployment Planning and Security Considerations
 
Rent remote desktop server mangohost .net
Rent remote desktop server mangohost .netRent remote desktop server mangohost .net
Rent remote desktop server mangohost .net
 
Ontology for the semantic enhancement, database definition and management and...
Ontology for the semantic enhancement, database definition and management and...Ontology for the semantic enhancement, database definition and management and...
Ontology for the semantic enhancement, database definition and management and...
 
Software Defined Networking, Concepts and Practical Implementations
Software Defined Networking, Concepts and Practical ImplementationsSoftware Defined Networking, Concepts and Practical Implementations
Software Defined Networking, Concepts and Practical Implementations
 
Effective Tips for Creating the Best Rich Media Ads .pptx
Effective Tips for Creating the Best Rich Media Ads .pptxEffective Tips for Creating the Best Rich Media Ads .pptx
Effective Tips for Creating the Best Rich Media Ads .pptx
 
Trump Assassination Shirt Trump Assassination Shirt
Trump Assassination Shirt Trump Assassination ShirtTrump Assassination Shirt Trump Assassination Shirt
Trump Assassination Shirt Trump Assassination Shirt
 
Network Security version1.0 - Module 3.pptx
Network Security version1.0 - Module 3.pptxNetwork Security version1.0 - Module 3.pptx
Network Security version1.0 - Module 3.pptx
 
Trump fist pump t shirts Trump fist pump t shirts
Trump fist pump t shirts Trump fist pump t shirtsTrump fist pump t shirts Trump fist pump t shirts
Trump fist pump t shirts Trump fist pump t shirts
 
Geolocation and Geofeed Implementation bdNOG18
Geolocation and Geofeed Implementation bdNOG18Geolocation and Geofeed Implementation bdNOG18
Geolocation and Geofeed Implementation bdNOG18
 
DASH, presented by Elly Tawhai at PacNOG 33
DASH, presented by Elly Tawhai at PacNOG 33DASH, presented by Elly Tawhai at PacNOG 33
DASH, presented by Elly Tawhai at PacNOG 33
 
Saint Louis University diploma
Saint Louis University diplomaSaint Louis University diploma
Saint Louis University diploma
 
Use of Ontologies in Chemical Kinetic Database CHEMCONNECT
Use of Ontologies in Chemical Kinetic Database CHEMCONNECTUse of Ontologies in Chemical Kinetic Database CHEMCONNECT
Use of Ontologies in Chemical Kinetic Database CHEMCONNECT
 
My President is bulletproof t shirts hoodie
My President is bulletproof t shirts hoodieMy President is bulletproof t shirts hoodie
My President is bulletproof t shirts hoodie
 
New York Institute of Technology degree Cert diploma offer
New York Institute of Technology degree Cert diploma offerNew York Institute of Technology degree Cert diploma offer
New York Institute of Technology degree Cert diploma offer
 
Digital ethnography of the Polish darknet drug trade community
Digital ethnography of the Polish darknet drug trade communityDigital ethnography of the Polish darknet drug trade community
Digital ethnography of the Polish darknet drug trade community
 

Why Plone Will Die

  • 1. Why Plone Will Die (or turn into a CMS zombie) Andreas Jung Plone Conference 2014, Bristol
  • 2. Disclaimer • perhaps tendentious • perhaps provoking • perhaps unbalanced • always my personal opinion • not representing any official Plone position
  • 8. Why am I giving this talk? • growing developer pain • growing integrator pain • rising and unpredictable project costs • developer frustration at every corner
  • 9. 2014 - the year of Plone legacy
  • 10. 2014 - the year of Plone legacy • Plone 4.2➝4.3 • 3rd party code • TinyMCE issues • schema tabs no longer working • Javascript issues • JQueryUI incompatibility
  • 11. 2014 - the year of Plone legacy • Plone 4.0➝4.2 • 3rd party garbage code • Migration to Plone 4.3 not easily doable • Migration costs not predictable
  • 12. 2014 - the year of Plone legacy • Plone 4.0➝4.2 • own project • Migration to Plone 4.3 not easily doable • Migration costs not predictable • Problems with fully qualified links in images and links
  • 13. 2014 - the year of Plone legacy • Plone 2.X➝4.3 • customer grown project • AT➝Dexterity • p.a.event pain • p.a.widgets pain • z3c.form fun • much more pain…
  • 14. 2014 - the year of Plone legacy • Plone 4.0➝4.1➝4.2➝4.3 • own project • started in 2010 • every migration upgrade had more or less severe issues and caused significant work and costs
  • 15. I am not talking about UX with Plone
  • 16. Let me talk of _my_ (backend) developer experience
  • 17. >>> reasons[„programming“] • Dexterity programming experience
  • 18. Dexterity wanted to be pythonic IMySchema (attr1, attr2) MyType obj = plone.api.create(„my.type“, container, id) obj.attr1 = „foo“ obj.attr2 = „bar“
  • 19. …but it ended like this MyType IMySchema (attr1) IBehavior1 (attr2) IBehavior2 (attr3) obj = plone.api.create(„my.type“, container, id) obj.attr1 = „foo“ IBehavior1(obj).attr2 = „bar“ IBehavior2(obj).attr3 = „hello world“ call_some_subscriber(obj) # plone.app.event Q: Is this pythonic?
  • 20. >>> reasons[„programming“] • Insufficient parameter checks • Insufficient error handling • Stupid error messages
  • 21. My personal enemy: z3c.form • no compatibility checks between schema fields and widgets, pdb needed • pointless, unhelpful error messages saying all and nothing • vocabulary issues always require to use pdb (NOVALUESET error with lots of fields and vocabularies)
  • 22. …and then this madness '/Users/ajung/.buildout/eggs/z3c.form-3.1.1-py2.7.egg', '/Users/ajung/.buildout/eggs/plone.z3cform-0.8.0-py2.7.egg', '/Users/ajung/.buildout/eggs/plone.autoform-1.6-py2.7.egg', '/Users/ajung/.buildout/eggs/plone.app.z3cform-0.7.6-py2.7.egg', '/Users/ajung/.buildout/eggs/plone.formwidget.namedfile-1.0.9-py2.7.egg', '/Users/ajung/.buildout/eggs/collective.z3cform.datetimewidget-1.2.6-py2.7.egg', '/Users/ajung/.buildout/eggs/plone.app.form-2.2.4-py2.7.egg', '/Users/ajung/.buildout/eggs/zope.formlib-4.0.6-py2.7.egg', '/Users/ajung/.buildout/eggs/five.formlib-1.0.4-py2.7.egg', '/Users/ajung/.buildout/eggs/z3c.formwidget.query-0.10-py2.7.egg',
  • 23. >>> reasons[„programming“] • complexity • growing complexity • wrapper modules…
  • 24. 250 modules (4.3 install) Up to 400 modules (custom install) Q: Who understands this? (completely)? http://www.wired.com/wp-content/uploads/images_blogs/wiredscience/2011/08/iceberg-towing-illustration-dassault-systemes.jpg
  • 25. >>> reasons[„programming“] • Zope Component Architecture - A framework is not an API
  • 26. Zope Component Architecture ZCA • ZCA is the foundation of the Plone core (not of Zope2 itself) • ZCA has good parts and bad parts • brain***k features like multi-adapters neither lead to better code nor better readability • ZCA is a reasonable implementation framework • ZCA based code can be complex and complicated • ZCA often misused as public API in lack of an API at all • _I_ do not want to see much ZCA stuff on the public API level (except schemas, interfaces)
  • 27. >>> reasons[„programming“] • Lack of explicit and documented APIs
  • 28. Documented APIs are essential • APIs define an entry-point to a particular functionality • APIs encapsulate and hide complexity • APIs define a well-defined behavior • APIs can validate and enforce constraints on incoming and outgoing data • plone.api • „Facade“ design pattern • covers only the most elementary functionality of Plone • APIs must be humane (Kenneth Reitz: https://speakerdeck.com/kennethreitz/python-for-humans)
  • 30. Migration pain • Plone portal_migration usually works but • often TinyMCE issues • often Javascript issues • incompatible add-ons • (subtle) behavioral changes • Not a single smooth Plone 4.3 migration this year • Migration costs • often no longer predictable • higher risks & higher costs with every Plone major release
  • 31. >>> reasons[„programming“] • Legacy all around us
  • 32. The pain of dealing with legacy • e.g.Zope 2, CMF • new rewritten functionality added without removing all old culprit • more radical cuts are needed in order to get rid of old garbage before adding hopefully better code
  • 33. >>> reasons[„others“] • Stagnation!? • Shrinking community!? • Shrinking adaptation!?
  • 34. Stagnation Source: Plone Developer Survey 2014
  • 35. Stagnation Source: Plone Developer Survey 2014
  • 36. Geographical stagnation? Source: Plone Developer Survey 2014
  • 37. >>> reasons[„others“] • Shrinking CMS market? • More legacy Plone projects than new Plone projects?
  • 38. Shrinking CMS market? Source: Plone Developer Survey 2014
  • 39. #WhatMakesPloneAnOptionFor_ME_Today • Enterprise CMS • fine-grained security model • outstanding security record over the last 12 years • flexible workflows • ZODB was great but time to move on…
  • 40. #WhatMakesPloneAnOptionFor_ME_Tomorrow • As a developer • getting rid of old code cruft • getting rid of over-designed and over-engineered code cruft (e.g. portlets, z3c.form) • explicit and consistent APIs everywhere • explicit type checking • much more explicit error messages
  • 41. #WhatMakesPloneAnOptionFor_ME_Tomorrow • As a consultant/integrator for „enterprise“ projects: • better search-engine (e.g. ElasticSearch) • better scalable database backend • Python 3.x • a coherent and consistent architecture
  • 42. How can this be achieved? • Define what Plone currently is • Define what Plone should be in the future • Define the scope of Plone • Know your market segment • Be realistic about the goals that can be achieved with the given resources
  • 43. How can this be achieved? • Zope 2 development is dead • ➝ Forget Zope 2 • CMF development is more than dead • ➝ Forget CMF • ZCA…well… • Take the good parts and forget the rest • ZODB • It was nice with you but we need and we do have better options…no more pickle graves please.
  • 44. How can this be achieved? • Throw everything away and start from scratch • Pyramid • Python 3 • a new persistence API • a new pluggable persistence layer • evaluate the database market for the best database option with respect to scalability, ease-of-use etc. • see how existing functionality like Dexterity fits into a new architecture The time of the monster application servers is over! Take the best components on the market and build it yourself.
  • 45. And there’s one more thing… • Don’t call it Plone! • Develop it under the umbrella of the brand Plone • But give it a different name (similar case with Typo 3 and its reincarnation NEOS)
  • 46. Plone Developer Survey (103 answers) • 103 answers • most interesting: a lot of interesting comments about the pros and cons of Plone • http://goo.gl/pBK3DM