SlideShare a Scribd company logo
1 of 24
We make IT
berlinbrandenburg
PD2
Plone Driven
Plone Development
Henning Rietz, Condat AG
Plone Conference 2010
Bristol, 28.10.2010
IT from Berlin
© 2010 Condat AG 2
Speaker specifics
 Henning Rietz, hr@condat.de
Condat AG
Software for innovative business processes.
Founded 1979
Location Berlin
Staff ~65
© 2010 Condat AG 3
Alliterated Agenda
 Major motivation
 Definitive Dream
 Attractive Advantages
 Multiple models
 All-round Application
 Outrageous Outlook
© 2010 Condat AG 4
Major motivation
Likes
 Model-driven development
 Application of design
patterns
 ArchGenXML
Dislikes
 Writing boilerplate code
 Editing *.zcml, *.xml
 Migration migraine (Plone
234 …)
 Learning curve for new
developers
© 2010 Condat AG 5
Definitive dream
The model is
Plone content.
© 2010 Condat AG 6
Dream details
 Metamodel
== Domain-specific language
== Plone Content Types
 Model
== Metadata
== Description of a specific system
== Plone content
 Code
== Implementation of a specific system
== Views on Plone content (metadata)
 Metamodel
== Domain-specific language
== Plone Content Types
 Model
== Metadata
== Description of a specific system
== Plone content
 Code
== Implementation of a specific system
== Views on Plone content (metadata)
ArchGenXML:
• Metamodel == UML Metamodel
• Model == UML (XMI file)
• Code == generated from XMI
PloneFormGen:
• Metamodel == PFG Content Types
• Model == FormFolder + Subobjects
• No code generated, interpretation of model at runtime
Collections
ExistingExamples
It‘s an
approach
– not a product.
© 2010 Condat AG 7
Attractive Advantages
 Reduces manual coding effort
 Generates .py, .pt, .cpt, .cpy, .xml, .sql, .zcml, …
 High configurability (for you and the customer)
 Model can be accessed at runtime
 Behavior of generic parts is dynamically changed
 Increases productivity
 Homogenous environment, everything is Plone-ish
 Makes your design patterns explicit, enforces conventions
 Better learning curve for new developers
 Higher maintainability
 Single source for changes
 Helps you deal with major changes in Plone architecture
 Integrated documentation
(orange: specific strengths of PD2, otherwise: typical advantage of MDD)
© 2010 Condat AG 8
Conflicting Challenges
 Keep implementation
details out of the models
 Make it simple
 Customer readable
 Generate as much
as possible (and useful)
 Make it powerful
 Executable
© 2010 Condat AG 9
Domain description
 Finding your metamodel –
How would you describe your future systems?
What abstractions/patterns do you employ?
 Possible input
 Legacy systems (to be migrated)
 The future design
 Storyboards
 UML models
 Your own patterns/frameworks
 User/technical documentation
© 2010 Condat AG 10
Multiple metamodels
 Content
 Views
 Navigation
 Layout
 Authoring
 Build
 Deployment
 Code Structure
Abstraction
Looking at the system from different perspectives
© 2010 Condat AG 11
Code structure
© 2010 Condat AG 12
 Concepts / structures for code generation
 File, Directory, FileSeries, FileGroup, etc.
 PT/DTML Templates for code generation,
using domain model objects as contexts
 Code generation traverses the structure,
applying model elements to templates,
writing the resulting code to the local file
system of the Zope (ZEO client) instance
Code structure modelling
© 2010 Condat AG 13
UML example
© 2010 Condat AG 14
Example structure
('plone3layout', 'Plone 3 Standard Layout', 'PD2Layout', {'namingExpression':'context.Title()'},
[
('readme.txt','README.txt','PD2File',{'viewname':'empty','namingExpression':'self.Title()'},[]),
('setup.cfg','setup.cfg','PD2File',{'viewname':'empty','namingExpression':'self.Title()'},[]),
('setup.py','setup.py','PD2File',{'viewname':setup','namingExpression':'self.Title()'},[]),
('modulepart1','<modulepart1>','PD2Directory',{'viewname':'','namingExpression':'context.Title().split('.')[0]'},
[
('init.py','__init__.py','PD2File',{'viewname':'initpkg','namingExpression':'self.Title()'},[]),
('modulepart2','<modulepart2>','PD2Directory',{'viewname':'','namingExpression':'context.Title().split('.')[1]'},
[
('init.py','__init__.py','PD2File',{'viewname':'init','namingExpression':'self.Title()'},[]),
('configure.zcml','configure.zcml','PD2File',{'viewname':'configure','namingExpression':'self.Title()'},[]),
('config.py','config.py','PD2File',{'viewname':'empty','namingExpression':'self.Title()'},[]),
('interfaces.py','interfaces.py','PD2File',{'viewname':'interfaces','namingExpression':'self.Title()'},[]),
('readme.txt','README.txt','PD2File',{'viewname':'empty','namingExpression':'self.Title()'},[]),
('version.txt','version.txt','PD2File',{'viewname':'empty','namingExpression':'self.Title()'},[]),
('browser','browser','PD2Directory',{'viewname':'','namingExpression':'self.Title()'},[]),
('content','content','PD2Directory',{'viewname':'','namingExpression':'self.Title()'},
[
('init.py','__init__.py','PD2File',{'viewname':'empty','namingExpression':'self.Title()'},[]),
('type.py','<type>.py','PD2FileSeries',{'viewname':'atclass','namingExpression':''%s.py' %
context.Title().lower()','listExpression':'context.getContentTypes()'},[]),
('configure.zcml','configure.zcml','PD2File',{'viewname':'cconfigure','namingExpression':'self.Title()'},[]),
]),
('profiles','profiles','PD2Directory',{'viewname':'','namingExpression':'self.Title()'},
[
('default','default','PD2Directory',{'viewname':'','namingExpression':'self.Title()'},
[
…
© 2010 Condat AG 15
Example: gstype view
<tal:block i18n:domain="conpd2.codegen" tal:define="ct context/Title">
<object tal:replace='structure string:<?xml version="1.0"?>'/>
<object name="PD2Adapter" tal:attributes="name ct"
meta_type="Factory-based Type Information with dynamic views"
xmlns:i18n="http://xml.zope.org/namespaces/i18n">
<property name="title" tal:content="ct">PD2Adapter</property>
<property name="description"></property>
<property name="content_meta_type" tal:content="ct">PD2Adapter</property>
<property name="product" tal:content="context/getProductName">ConPD2</property>
<property name="factory" tal:content="string:add${ct}">addPD2Adapter</property>
<property name="immediate_view">base_view</property>
<property name="global_allow">True</property>
<property name="filter_content_types">False</property>
<property name="allowed_content_types">
</property>
<property name="allow_discussion">False</property>
<property name="default_view">base_view</property>
<property name="view_methods">
<element value="base_view"/>
…
Full example
© 2010 Condat AG 16
Content
© 2010 Condat AG 17
Content modelling
 Describes most of the information
architecture
 Metamodel: Types, Attributes,
Relationships
 Probably even more domain-specific
 Code: AT schemata, classes, GS xml,
zcml
 Also possible: RDBMS-related content
© 2010 Condat AG 18
UML example
(this is taken from the metamodel of the first version of ConPD2, which is basically a metamodel for AT development)
© 2010 Condat AG 19
Views
© 2010 Condat AG 20
Views modelling
 What is presented where/how?
 Metamodel: View Types (e.g. single
object, object list, dashboard) with
presentation details (e.g. sorting,
batching)
 Code: template fragments, macros, view
classes, helper methods
© 2010 Condat AG 21
More metamodels
 Navigation: primary, secondary, depth, …
 navigation portlet, sections viewlet
 Layout: two/three columns, header, footer, …
 Viewlets, CSS (cf. Subskins product)
 Authoring:
 roles, workflows, staging, content rules
 Build & Deployment:
 devbuildout|production|test.cfg, deployment
scripts, monitoring frontend
© 2010 Condat AG 22
All-round Application
 Implement Metamodel
 E.g. with ArgoUML, ArchGenXML
 Templates for code generation
 Deploy PD2
 Model lives in ZEO server
 Developers work with local ZEO Client,
which writes to local file system
 Develop with PD2
 Describe customer site in terms of the
metamodel
 Push the button
 Make customer specific extensions
 Implement generic parts (which
interpret metadata at runtime)
 Iterate
© 2010 Condat AG 23
Outrageous Outlook
 Metamodels for knowledge management,
public internet, collaborative applications, …
 Plone Technology Metamodel
 Generic Applications for multiple clients in
SaaS scenarios
© 2010 Condat AG 24
Thank you
Condat AG
Henning Rietz
Alt-Moabit 91 d
10559 Berlin
Tel. (030) 3949-1179
hr@condat.de
www.condat.de

More Related Content

Viewers also liked

Fungsi Pie (Program Input Equipment) Dalam
Fungsi Pie (Program Input Equipment) DalamFungsi Pie (Program Input Equipment) Dalam
Fungsi Pie (Program Input Equipment) DalamUniversitas Diponegoro
 
Islandreferaatvalmis
IslandreferaatvalmisIslandreferaatvalmis
Islandreferaatvalmisannett19
 
Big Data at Twitter, Chirp 2010
Big Data at Twitter, Chirp 2010Big Data at Twitter, Chirp 2010
Big Data at Twitter, Chirp 2010Kevin Weil
 
Hadoop summit 2010 frameworks panel elephant bird
Hadoop summit 2010 frameworks panel elephant birdHadoop summit 2010 frameworks panel elephant bird
Hadoop summit 2010 frameworks panel elephant birdKevin Weil
 
Hadoop at Twitter (Hadoop Summit 2010)
Hadoop at Twitter (Hadoop Summit 2010)Hadoop at Twitter (Hadoop Summit 2010)
Hadoop at Twitter (Hadoop Summit 2010)Kevin Weil
 
Bluetooth 4.0 specification
Bluetooth 4.0 specificationBluetooth 4.0 specification
Bluetooth 4.0 specificationabhiamanchopra
 
Sortida biblio 4t
Sortida biblio 4tSortida biblio 4t
Sortida biblio 4telenatorren
 
Hadoop and pig at twitter (oscon 2010)
Hadoop and pig at twitter (oscon 2010)Hadoop and pig at twitter (oscon 2010)
Hadoop and pig at twitter (oscon 2010)Kevin Weil
 
Spatial Analytics, Where 2.0 2010
Spatial Analytics, Where 2.0 2010Spatial Analytics, Where 2.0 2010
Spatial Analytics, Where 2.0 2010Kevin Weil
 
SPRI février 2017 - Stratégie médias sociaux
SPRI février 2017 - Stratégie médias sociauxSPRI février 2017 - Stratégie médias sociaux
SPRI février 2017 - Stratégie médias sociauxYan Luong
 
NoSQL at Twitter (NoSQL EU 2010)
NoSQL at Twitter (NoSQL EU 2010)NoSQL at Twitter (NoSQL EU 2010)
NoSQL at Twitter (NoSQL EU 2010)Kevin Weil
 

Viewers also liked (13)

Fungsi Pie (Program Input Equipment) Dalam
Fungsi Pie (Program Input Equipment) DalamFungsi Pie (Program Input Equipment) Dalam
Fungsi Pie (Program Input Equipment) Dalam
 
Islandreferaatvalmis
IslandreferaatvalmisIslandreferaatvalmis
Islandreferaatvalmis
 
Big Data at Twitter, Chirp 2010
Big Data at Twitter, Chirp 2010Big Data at Twitter, Chirp 2010
Big Data at Twitter, Chirp 2010
 
Hadoop summit 2010 frameworks panel elephant bird
Hadoop summit 2010 frameworks panel elephant birdHadoop summit 2010 frameworks panel elephant bird
Hadoop summit 2010 frameworks panel elephant bird
 
Hadoop at Twitter (Hadoop Summit 2010)
Hadoop at Twitter (Hadoop Summit 2010)Hadoop at Twitter (Hadoop Summit 2010)
Hadoop at Twitter (Hadoop Summit 2010)
 
Bluetooth 4.0 specification
Bluetooth 4.0 specificationBluetooth 4.0 specification
Bluetooth 4.0 specification
 
Sortida biblio 4t
Sortida biblio 4tSortida biblio 4t
Sortida biblio 4t
 
Hadoop and pig at twitter (oscon 2010)
Hadoop and pig at twitter (oscon 2010)Hadoop and pig at twitter (oscon 2010)
Hadoop and pig at twitter (oscon 2010)
 
Spatial Analytics, Where 2.0 2010
Spatial Analytics, Where 2.0 2010Spatial Analytics, Where 2.0 2010
Spatial Analytics, Where 2.0 2010
 
Ens visita el
Ens visita elEns visita el
Ens visita el
 
SPRI février 2017 - Stratégie médias sociaux
SPRI février 2017 - Stratégie médias sociauxSPRI février 2017 - Stratégie médias sociaux
SPRI février 2017 - Stratégie médias sociaux
 
NoSQL at Twitter (NoSQL EU 2010)
NoSQL at Twitter (NoSQL EU 2010)NoSQL at Twitter (NoSQL EU 2010)
NoSQL at Twitter (NoSQL EU 2010)
 
Ecandidature
EcandidatureEcandidature
Ecandidature
 

Similar to Boosting productivity with "Plone-driven Plone development"

Sioux Hot-or-Not: Model Driven Software Development (Markus Voelter)
Sioux Hot-or-Not: Model Driven Software Development (Markus Voelter)Sioux Hot-or-Not: Model Driven Software Development (Markus Voelter)
Sioux Hot-or-Not: Model Driven Software Development (Markus Voelter)siouxhotornot
 
SodiusCassidianmdday2010 101129081449-phpapp02
SodiusCassidianmdday2010 101129081449-phpapp02SodiusCassidianmdday2010 101129081449-phpapp02
SodiusCassidianmdday2010 101129081449-phpapp02SodiusWillert
 
Pragmatic Model Driven Development using openArchitectureWare
Pragmatic Model Driven Development using openArchitectureWarePragmatic Model Driven Development using openArchitectureWare
Pragmatic Model Driven Development using openArchitectureWareMichael Vorburger
 
EMF Views: A View Mechanism for Integrating Heterogeneous Models - ER 2015 @ ...
EMF Views: A View Mechanism for Integrating Heterogeneous Models - ER 2015 @ ...EMF Views: A View Mechanism for Integrating Heterogeneous Models - ER 2015 @ ...
EMF Views: A View Mechanism for Integrating Heterogeneous Models - ER 2015 @ ...Hugo Bruneliere
 
eTrice: a proposed Eclipse project for embedded MDSD based on ROOM
eTrice: a proposed Eclipse project for embedded MDSD based on ROOMeTrice: a proposed Eclipse project for embedded MDSD based on ROOM
eTrice: a proposed Eclipse project for embedded MDSD based on ROOMHenrik Rentz-Reichert
 
Smalltalk speaks dot net
Smalltalk speaks dot netSmalltalk speaks dot net
Smalltalk speaks dot netESUG
 
MobiCloud: Towards Cloud Mobile Hybrid Application Generation using Semantica...
MobiCloud: Towards Cloud Mobile Hybrid Application Generation using Semantica...MobiCloud: Towards Cloud Mobile Hybrid Application Generation using Semantica...
MobiCloud: Towards Cloud Mobile Hybrid Application Generation using Semantica...Amit Sheth
 
[SiriusCon 2018] A Bird's Eye View on Eclipse Sirius
[SiriusCon 2018]  A Bird's Eye View on Eclipse Sirius[SiriusCon 2018]  A Bird's Eye View on Eclipse Sirius
[SiriusCon 2018] A Bird's Eye View on Eclipse SiriusObeo
 
Composite C1 Presentaion
Composite C1  PresentaionComposite C1  Presentaion
Composite C1 Presentaionjakobbartholdy
 
Sodius cassidian mdday2010
Sodius cassidian mdday2010Sodius cassidian mdday2010
Sodius cassidian mdday2010MD DAY
 
Tag Integration with Schneider Electric PLCs and Modbus in InduSoft Web Studio
Tag Integration with Schneider Electric PLCs and Modbus in InduSoft Web StudioTag Integration with Schneider Electric PLCs and Modbus in InduSoft Web Studio
Tag Integration with Schneider Electric PLCs and Modbus in InduSoft Web StudioAVEVA
 
Software development effort reduction with Co-op
Software development effort reduction with Co-opSoftware development effort reduction with Co-op
Software development effort reduction with Co-oplbergmans
 
MDD and modeling tools research
MDD and modeling tools researchMDD and modeling tools research
MDD and modeling tools researchRoger Xia
 
Monorail presentation at WebDevelopersCommunity, Feb 1, 2009
Monorail presentation at WebDevelopersCommunity, Feb 1, 2009Monorail presentation at WebDevelopersCommunity, Feb 1, 2009
Monorail presentation at WebDevelopersCommunity, Feb 1, 2009ken.egozi
 

Similar to Boosting productivity with "Plone-driven Plone development" (20)

Sioux Hot-or-Not: Model Driven Software Development (Markus Voelter)
Sioux Hot-or-Not: Model Driven Software Development (Markus Voelter)Sioux Hot-or-Not: Model Driven Software Development (Markus Voelter)
Sioux Hot-or-Not: Model Driven Software Development (Markus Voelter)
 
SodiusCassidianmdday2010 101129081449-phpapp02
SodiusCassidianmdday2010 101129081449-phpapp02SodiusCassidianmdday2010 101129081449-phpapp02
SodiusCassidianmdday2010 101129081449-phpapp02
 
Pragmatic Model Driven Development using openArchitectureWare
Pragmatic Model Driven Development using openArchitectureWarePragmatic Model Driven Development using openArchitectureWare
Pragmatic Model Driven Development using openArchitectureWare
 
Android crash course
Android crash courseAndroid crash course
Android crash course
 
EMF Views: A View Mechanism for Integrating Heterogeneous Models - ER 2015 @ ...
EMF Views: A View Mechanism for Integrating Heterogeneous Models - ER 2015 @ ...EMF Views: A View Mechanism for Integrating Heterogeneous Models - ER 2015 @ ...
EMF Views: A View Mechanism for Integrating Heterogeneous Models - ER 2015 @ ...
 
ER 2015 EMFViews
ER 2015 EMFViewsER 2015 EMFViews
ER 2015 EMFViews
 
How to reduce DTP and translation costs with FrameMaker
How to reduce DTP and translation costs with FrameMakerHow to reduce DTP and translation costs with FrameMaker
How to reduce DTP and translation costs with FrameMaker
 
Jmp108
Jmp108Jmp108
Jmp108
 
eTrice: a proposed Eclipse project for embedded MDSD based on ROOM
eTrice: a proposed Eclipse project for embedded MDSD based on ROOMeTrice: a proposed Eclipse project for embedded MDSD based on ROOM
eTrice: a proposed Eclipse project for embedded MDSD based on ROOM
 
Code generation
Code generationCode generation
Code generation
 
Smalltalk speaks dot net
Smalltalk speaks dot netSmalltalk speaks dot net
Smalltalk speaks dot net
 
ALT
ALTALT
ALT
 
MobiCloud: Towards Cloud Mobile Hybrid Application Generation using Semantica...
MobiCloud: Towards Cloud Mobile Hybrid Application Generation using Semantica...MobiCloud: Towards Cloud Mobile Hybrid Application Generation using Semantica...
MobiCloud: Towards Cloud Mobile Hybrid Application Generation using Semantica...
 
[SiriusCon 2018] A Bird's Eye View on Eclipse Sirius
[SiriusCon 2018]  A Bird's Eye View on Eclipse Sirius[SiriusCon 2018]  A Bird's Eye View on Eclipse Sirius
[SiriusCon 2018] A Bird's Eye View on Eclipse Sirius
 
Composite C1 Presentaion
Composite C1  PresentaionComposite C1  Presentaion
Composite C1 Presentaion
 
Sodius cassidian mdday2010
Sodius cassidian mdday2010Sodius cassidian mdday2010
Sodius cassidian mdday2010
 
Tag Integration with Schneider Electric PLCs and Modbus in InduSoft Web Studio
Tag Integration with Schneider Electric PLCs and Modbus in InduSoft Web StudioTag Integration with Schneider Electric PLCs and Modbus in InduSoft Web Studio
Tag Integration with Schneider Electric PLCs and Modbus in InduSoft Web Studio
 
Software development effort reduction with Co-op
Software development effort reduction with Co-opSoftware development effort reduction with Co-op
Software development effort reduction with Co-op
 
MDD and modeling tools research
MDD and modeling tools researchMDD and modeling tools research
MDD and modeling tools research
 
Monorail presentation at WebDevelopersCommunity, Feb 1, 2009
Monorail presentation at WebDevelopersCommunity, Feb 1, 2009Monorail presentation at WebDevelopersCommunity, Feb 1, 2009
Monorail presentation at WebDevelopersCommunity, Feb 1, 2009
 

Recently uploaded

The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 

Recently uploaded (20)

The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 

Boosting productivity with "Plone-driven Plone development"

  • 1. We make IT berlinbrandenburg PD2 Plone Driven Plone Development Henning Rietz, Condat AG Plone Conference 2010 Bristol, 28.10.2010 IT from Berlin
  • 2. © 2010 Condat AG 2 Speaker specifics  Henning Rietz, hr@condat.de Condat AG Software for innovative business processes. Founded 1979 Location Berlin Staff ~65
  • 3. © 2010 Condat AG 3 Alliterated Agenda  Major motivation  Definitive Dream  Attractive Advantages  Multiple models  All-round Application  Outrageous Outlook
  • 4. © 2010 Condat AG 4 Major motivation Likes  Model-driven development  Application of design patterns  ArchGenXML Dislikes  Writing boilerplate code  Editing *.zcml, *.xml  Migration migraine (Plone 234 …)  Learning curve for new developers
  • 5. © 2010 Condat AG 5 Definitive dream The model is Plone content.
  • 6. © 2010 Condat AG 6 Dream details  Metamodel == Domain-specific language == Plone Content Types  Model == Metadata == Description of a specific system == Plone content  Code == Implementation of a specific system == Views on Plone content (metadata)  Metamodel == Domain-specific language == Plone Content Types  Model == Metadata == Description of a specific system == Plone content  Code == Implementation of a specific system == Views on Plone content (metadata) ArchGenXML: • Metamodel == UML Metamodel • Model == UML (XMI file) • Code == generated from XMI PloneFormGen: • Metamodel == PFG Content Types • Model == FormFolder + Subobjects • No code generated, interpretation of model at runtime Collections ExistingExamples It‘s an approach – not a product.
  • 7. © 2010 Condat AG 7 Attractive Advantages  Reduces manual coding effort  Generates .py, .pt, .cpt, .cpy, .xml, .sql, .zcml, …  High configurability (for you and the customer)  Model can be accessed at runtime  Behavior of generic parts is dynamically changed  Increases productivity  Homogenous environment, everything is Plone-ish  Makes your design patterns explicit, enforces conventions  Better learning curve for new developers  Higher maintainability  Single source for changes  Helps you deal with major changes in Plone architecture  Integrated documentation (orange: specific strengths of PD2, otherwise: typical advantage of MDD)
  • 8. © 2010 Condat AG 8 Conflicting Challenges  Keep implementation details out of the models  Make it simple  Customer readable  Generate as much as possible (and useful)  Make it powerful  Executable
  • 9. © 2010 Condat AG 9 Domain description  Finding your metamodel – How would you describe your future systems? What abstractions/patterns do you employ?  Possible input  Legacy systems (to be migrated)  The future design  Storyboards  UML models  Your own patterns/frameworks  User/technical documentation
  • 10. © 2010 Condat AG 10 Multiple metamodels  Content  Views  Navigation  Layout  Authoring  Build  Deployment  Code Structure Abstraction Looking at the system from different perspectives
  • 11. © 2010 Condat AG 11 Code structure
  • 12. © 2010 Condat AG 12  Concepts / structures for code generation  File, Directory, FileSeries, FileGroup, etc.  PT/DTML Templates for code generation, using domain model objects as contexts  Code generation traverses the structure, applying model elements to templates, writing the resulting code to the local file system of the Zope (ZEO client) instance Code structure modelling
  • 13. © 2010 Condat AG 13 UML example
  • 14. © 2010 Condat AG 14 Example structure ('plone3layout', 'Plone 3 Standard Layout', 'PD2Layout', {'namingExpression':'context.Title()'}, [ ('readme.txt','README.txt','PD2File',{'viewname':'empty','namingExpression':'self.Title()'},[]), ('setup.cfg','setup.cfg','PD2File',{'viewname':'empty','namingExpression':'self.Title()'},[]), ('setup.py','setup.py','PD2File',{'viewname':setup','namingExpression':'self.Title()'},[]), ('modulepart1','<modulepart1>','PD2Directory',{'viewname':'','namingExpression':'context.Title().split('.')[0]'}, [ ('init.py','__init__.py','PD2File',{'viewname':'initpkg','namingExpression':'self.Title()'},[]), ('modulepart2','<modulepart2>','PD2Directory',{'viewname':'','namingExpression':'context.Title().split('.')[1]'}, [ ('init.py','__init__.py','PD2File',{'viewname':'init','namingExpression':'self.Title()'},[]), ('configure.zcml','configure.zcml','PD2File',{'viewname':'configure','namingExpression':'self.Title()'},[]), ('config.py','config.py','PD2File',{'viewname':'empty','namingExpression':'self.Title()'},[]), ('interfaces.py','interfaces.py','PD2File',{'viewname':'interfaces','namingExpression':'self.Title()'},[]), ('readme.txt','README.txt','PD2File',{'viewname':'empty','namingExpression':'self.Title()'},[]), ('version.txt','version.txt','PD2File',{'viewname':'empty','namingExpression':'self.Title()'},[]), ('browser','browser','PD2Directory',{'viewname':'','namingExpression':'self.Title()'},[]), ('content','content','PD2Directory',{'viewname':'','namingExpression':'self.Title()'}, [ ('init.py','__init__.py','PD2File',{'viewname':'empty','namingExpression':'self.Title()'},[]), ('type.py','<type>.py','PD2FileSeries',{'viewname':'atclass','namingExpression':''%s.py' % context.Title().lower()','listExpression':'context.getContentTypes()'},[]), ('configure.zcml','configure.zcml','PD2File',{'viewname':'cconfigure','namingExpression':'self.Title()'},[]), ]), ('profiles','profiles','PD2Directory',{'viewname':'','namingExpression':'self.Title()'}, [ ('default','default','PD2Directory',{'viewname':'','namingExpression':'self.Title()'}, [ …
  • 15. © 2010 Condat AG 15 Example: gstype view <tal:block i18n:domain="conpd2.codegen" tal:define="ct context/Title"> <object tal:replace='structure string:<?xml version="1.0"?>'/> <object name="PD2Adapter" tal:attributes="name ct" meta_type="Factory-based Type Information with dynamic views" xmlns:i18n="http://xml.zope.org/namespaces/i18n"> <property name="title" tal:content="ct">PD2Adapter</property> <property name="description"></property> <property name="content_meta_type" tal:content="ct">PD2Adapter</property> <property name="product" tal:content="context/getProductName">ConPD2</property> <property name="factory" tal:content="string:add${ct}">addPD2Adapter</property> <property name="immediate_view">base_view</property> <property name="global_allow">True</property> <property name="filter_content_types">False</property> <property name="allowed_content_types"> </property> <property name="allow_discussion">False</property> <property name="default_view">base_view</property> <property name="view_methods"> <element value="base_view"/> … Full example
  • 16. © 2010 Condat AG 16 Content
  • 17. © 2010 Condat AG 17 Content modelling  Describes most of the information architecture  Metamodel: Types, Attributes, Relationships  Probably even more domain-specific  Code: AT schemata, classes, GS xml, zcml  Also possible: RDBMS-related content
  • 18. © 2010 Condat AG 18 UML example (this is taken from the metamodel of the first version of ConPD2, which is basically a metamodel for AT development)
  • 19. © 2010 Condat AG 19 Views
  • 20. © 2010 Condat AG 20 Views modelling  What is presented where/how?  Metamodel: View Types (e.g. single object, object list, dashboard) with presentation details (e.g. sorting, batching)  Code: template fragments, macros, view classes, helper methods
  • 21. © 2010 Condat AG 21 More metamodels  Navigation: primary, secondary, depth, …  navigation portlet, sections viewlet  Layout: two/three columns, header, footer, …  Viewlets, CSS (cf. Subskins product)  Authoring:  roles, workflows, staging, content rules  Build & Deployment:  devbuildout|production|test.cfg, deployment scripts, monitoring frontend
  • 22. © 2010 Condat AG 22 All-round Application  Implement Metamodel  E.g. with ArgoUML, ArchGenXML  Templates for code generation  Deploy PD2  Model lives in ZEO server  Developers work with local ZEO Client, which writes to local file system  Develop with PD2  Describe customer site in terms of the metamodel  Push the button  Make customer specific extensions  Implement generic parts (which interpret metadata at runtime)  Iterate
  • 23. © 2010 Condat AG 23 Outrageous Outlook  Metamodels for knowledge management, public internet, collaborative applications, …  Plone Technology Metamodel  Generic Applications for multiple clients in SaaS scenarios
  • 24. © 2010 Condat AG 24 Thank you Condat AG Henning Rietz Alt-Moabit 91 d 10559 Berlin Tel. (030) 3949-1179 hr@condat.de www.condat.de

Editor's Notes

  1. Motivation: Likes &amp; Dislikes Idea
  2. Die Startseite zeigt… Auf den nächsten Ebenen sieht man Wenn man ein X öffnet, dann Typen: Dashboard, SingleObject, ObjectList, Form Bausteine: Bildergalerie, Zusatzinformationen Ausdrücke: die letzten X, die neusten Y, allg. Suchkritieren