SlideShare a Scribd company logo
1 of 83
ZopeSkel
the past, present and future



           Cris Ewing
    Cris Ewing, Developer LLC
     Plone Conference 2012
    Arnhem, the Netherlands
Overview
• The beginning
• The early years
• The awkward adolescense
• The No-Fun ZopeSkel BBQ Sprint
• The transition to templer
• The future
In The Beginning


Photo by	

NASA Goddard Space Flight Center via Flickr
(http://www.flickr.com/photos/gsfc/6143668219/) - CC-BY
Products
ArchGenXML
Content Types Only
Photo by	

JD Hancock via Flickr
(http://www.flickr.com/photos/jdhancock/3440716774/) - CC-BY
• Need to create egg packages
• Need to create things other than ATCT
• Need a tool to help
25/05/2006



Image by heyitsopower via Flickr
(http://www.flickr.com/photos/heyitsopower/4864376100/) - CC-BY
First checkin:
Daniel Nouri
• basic_package (from PasteScript)
• basic_namespacepackage
• basic_zope
• June, 2006 (0.2)
 • plone_core (hannosch)
• July-August, 2006 (0.3)
 • plone2_theme (davconvent)
 • nested_namespace (hannosch)
 • plone_app (hannosch)
• January-March, 2007
 • plone3_buildout (optilude)
 • plone3_theme (justizin)
 • plone25_theme (davconvent)
June, 2007
• ZopeSkel is now 1 year old
• Provides nine templates
• Seven contributing authors
 • nouri, davconvent, hannosch, optilude,
    brcwhit, justizin, pelle
• Version 1.0 tagged September, 2007
Late 2007

• Archetype template added (pjesi)
• Recipe template for buildout recipes (tarek)
• Hosting buildout template (wichert)
• Version 1.3 in December, 2007
and then....
localcommands
• Added December 12, 2007 (mustapha)
• Enhance a package already created
• Initial offerings include:
 • portlet
 • browser view
 • zcml meta directive
 • content type
• Shortly after, ATSchema added
 • Iteratively build AT Content Type schema
...and there was much rejoicing
Photo by Caylin via Flickr
(http://www.flickr.com/photos/10279741@N00/3593353427/) CC-BY-NC-ND
Too Many Questions
archetype (from ZopeSkel#archetype)
-----------------------------------
title               The title of the project
       default: 'Plone Example'
namespace_package Namespace package (like plone)
       default: 'plone'
package             The package contained namespace package
(like example)
       default: 'example'
zope2product        Are you creating a Zope 2 Product?
       default: False
version             Version
       default: '0.1'
description         One-line description of the package
       default: ''
long_description    Multi-line description (in reST)
       default: ''
author              Author name
       default: 'Plone Foundation'
author_email        Author email
       default: 'plone-developers@lists.sourceforge.net'
keywords            Space-separated keywords/tags
       default: ''
url                 URL of homepage
       default: 'http://svn.plone.org/svn/plone/plone.example'
license_name        License name
       default: 'GPL'
zip_safe            True/False: if the package can be
distributed as a .zip file
       default: False
WTF??!?
zope2product: Are you creating a Zope 2 Product?
Too Many Templates
• archetype           • plone3_portlet
• basic_namespace     • plone3_theme
• basic_zope          • plone_app
• nested_namespace    • plone_hosting
• plone               • plone_pas
• plone2.5_buildout   • recipe
• plone2_theme        • silva_buildout
• plone3_buildout
Photo by cwgoodroe via Flickr
(http://www.flickr.com/photos/cwgoodroe/3009281516/) - CC-BY-NC-ND
Too Much Code
especially too much code repeated
difficult to track drift
Dependency Problems
• Local commands need a package to be in
  the working set

• This means that paster must ‘install’ your
  new package

• Your package must also depend on
  PasteScript (which depends on PasteDeploy
  and Paste)
local commands
           =>
Heavy Paste Dependency
two little lines
setup_requires=["PasteScript"],
paster_plugins=["zopeskel.localcommands"],
Three Big Problems
One Big Question
who is ZopeSkel for?
October 2-5, 2009
Five Developers

• Joel Burton
• Chris Calloway
• Josh Johnson
• Chris Rossi
• Cris Ewing
Make ZopeSkel Easier
Goals

• Clean up templates
• Improve questions
• Wrap `paste create -t` to improve
  interactions
Outcomes
• bin/zopeskel script
 • hides `paste create -t`
 • provides inline validation of answers
 • provides inline help for questions
 • provides ‘classes’ of questions
 • gives good feedback, and provides hooks
    for feedback from new templates
Outcomes

• An official ‘maintainer’ for ZopeSkel
Outcomes


    • A plan to break up ZopeSkel


https://github.com/collective/ZopeSkel/blob/2.x-maintenance/SPLITTING-PROPOSAL.txt
Anti-Outcomes

• Failure to publicize the outcome sufficiently
• Failure to fully document the plan
• Failure to clean up existing docs still
  advising ‘the old way’ (paster create -t)
↓ blame this guy ↓
Photo by Laura Molnar via Flickr
(http://www.flickr.com/photos/moosepics621/2207683464/)CC-BY-NC-ND
Enter “templer”
• Goal to ‘break up’ monolithic ZopeSkel
• Work starts in early 2010
• Provide templates in packages of related
  functionality.

• Keep it working ‘the same’ for newcomers
Breaking Up
templer.core
• vars (questions)
• base templates
• control script (wrapper of `paster create`)
• structures
 • ‘docs’ for eggs
 • licenses
What are Structures?

• paster templates that you don’t ‘run’
 • shared filesystem layout
 • reduce repetition
 • allow injection of files and folders in
    response to questions
templer.core

templer.buildout
templer.buildout

• Provides templates for:
 • basic buildout
 • zc.buildout recipes
• Provides structures for:
 • bootstrap.py
templer.core
templer.buildout
  templer.zope
templer.zope

• Provides templates for:
 • basic zope package (my.package)
 • nested zope package (my.nifty.package)
templer.core
templer.buildout
  templer.zope
 templer.plone
templer.plone
• Provides templates for:
 • basic plone package (my.package)
 • nested plone package (my.nifty.package)
 • archetype-based add-on
 • plone tile
• Provides structures for:
 • GenericSetup profile (basic and nested)
templer.core
                                  templer.buildout
                                    templer.zope
                                   templer.plone
✓archetype            • plone3_portlet
✓basic_namespace      • plone3_theme
✓basic_zope           ✓plone_app
✓nested_namespace     • plone_hosting
✓plone                • plone_pas
• plone2.5_buildout   ✓recipe
• plone2_theme        • silva_buildout
• plone3_buildout
What about Local
 Commands?
Photo by	

Matthew via Flickr
(http://www.flickr.com/photos/purplemattfish/3918004964/) - CC-BY-NC-ND
templer.localcommands
templer.plone.localcommands

templer.plone[localcommands]
this is OPTIONAL
Rebuilding
ZopeSkel Should
  ‘just work’
Paste
templer
 Paste
ZopeSkel
templer
 Paste
ZopeSkel is a
templer application
easy_install zopeskel
Templates
✓archetype            • plone3_portlet
✓basic_namespace      • plone3_theme
✓basic_zope           ✓plone_app
✓nested_namespace     • plone_hosting
✓plone                • plone_pas
• plone2.5_buildout   ✓recipe
• plone2_theme        • silva_buildout
• plone3_buildout
Local Commands
• Plone
 • browserview
 • browserlayer
 • portlet
• Archetypes
 • at_contenttype
 • at_schema_field
What’s Next?
Need Templates

• dexterity (underway)
• buildouts (unify with installers)
• theme templates (diazo, traditional?)
Local Commands

• viewlet
• utility
• z3c form
• dexterity schema builder
• ???
Shameless Plug
and beyond that?
Crushinator
Crushinator
• No PasteScript/PasteDeploy/Paster
• No specific templating system
 • Cheetah
 • Jinja
 • python string formatting??
• Questions and filesystem structures
  independent
Questions?

cris@crisewing.com
     cewing
   @crisewing

More Related Content

What's hot

Zimmertwins Presentation
Zimmertwins PresentationZimmertwins Presentation
Zimmertwins Presentation
Ashok Modi
 
Pioneer a Strategic Change in Content Organization with Plone
Pioneer a Strategic Change in Content Organization with PlonePioneer a Strategic Change in Content Organization with Plone
Pioneer a Strategic Change in Content Organization with Plone
Clayton Parker
 
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
 

What's hot (20)

Zimmertwins Presentation
Zimmertwins PresentationZimmertwins Presentation
Zimmertwins Presentation
 
Modern websites in 2020 and Joomla
Modern websites in 2020 and JoomlaModern websites in 2020 and Joomla
Modern websites in 2020 and Joomla
 
Pioneer a Strategic Change in Content Organization with Plone
Pioneer a Strategic Change in Content Organization with PlonePioneer a Strategic Change in Content Organization with Plone
Pioneer a Strategic Change in Content Organization with Plone
 
Distributed Developer Workflows using Git
Distributed Developer Workflows using GitDistributed Developer Workflows using Git
Distributed Developer Workflows using Git
 
Using Buildout, GenericSetup and a Policy Package to Rule the World
Using Buildout, GenericSetup and a Policy Package to Rule the WorldUsing Buildout, GenericSetup and a Policy Package to Rule the World
Using Buildout, GenericSetup and a Policy Package to Rule the World
 
GIT, RVM, FIRST HEROKU APP
GIT, RVM, FIRST HEROKU APPGIT, RVM, FIRST HEROKU APP
GIT, RVM, FIRST HEROKU APP
 
Pyramid Lighter/Faster/Better web apps
Pyramid Lighter/Faster/Better web appsPyramid Lighter/Faster/Better web apps
Pyramid Lighter/Faster/Better web apps
 
Maven part 1
Maven part 1Maven part 1
Maven part 1
 
Buildout future
Buildout futureBuildout future
Buildout future
 
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & HadoopPuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
 
Django
DjangoDjango
Django
 
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony AppsSymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
 
Cool like a Frontend Developer: Grunt, RequireJS, Bower and other Tools
Cool like a Frontend Developer: Grunt, RequireJS, Bower and other ToolsCool like a Frontend Developer: Grunt, RequireJS, Bower and other Tools
Cool like a Frontend Developer: Grunt, RequireJS, Bower and other Tools
 
Django in the Real World
Django in the Real WorldDjango in the Real World
Django in the Real World
 
Jenkins State of union 2013
Jenkins State of union 2013Jenkins State of union 2013
Jenkins State of union 2013
 
Behaviour Driven Development con Behat & Drupal
Behaviour Driven Development con Behat & DrupalBehaviour Driven Development con Behat & Drupal
Behaviour Driven Development con Behat & Drupal
 
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
 
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
 
Geb presentation
Geb presentationGeb presentation
Geb presentation
 
How NOT to get lost in the current JavaScript landscape
How NOT to get lost in the current JavaScript landscapeHow NOT to get lost in the current JavaScript landscape
How NOT to get lost in the current JavaScript landscape
 

Viewers also liked

Viewers also liked (7)

Plone for Education: Bibliographies
Plone for Education: BibliographiesPlone for Education: Bibliographies
Plone for Education: Bibliographies
 
Adaptation in Open Source Software, PyCon 2016 Keynote
Adaptation in Open Source Software, PyCon 2016 KeynoteAdaptation in Open Source Software, PyCon 2016 Keynote
Adaptation in Open Source Software, PyCon 2016 Keynote
 
Speaking at PyCon: The how and why
Speaking at PyCon: The how and whySpeaking at PyCon: The how and why
Speaking at PyCon: The how and why
 
Jumpstart Your Development with ZopeSkel
Jumpstart Your Development with ZopeSkelJumpstart Your Development with ZopeSkel
Jumpstart Your Development with ZopeSkel
 
Ancient To Modern: Upgrading nearly a decade of Plone in public radio
Ancient To Modern: Upgrading nearly a decade of Plone in public radioAncient To Modern: Upgrading nearly a decade of Plone in public radio
Ancient To Modern: Upgrading nearly a decade of Plone in public radio
 
Ref Letter
Ref LetterRef Letter
Ref Letter
 
Getting Things Done with Content Rules
Getting Things Done with Content RulesGetting Things Done with Content Rules
Getting Things Done with Content Rules
 

Similar to ZopeSkel: The past, present and future

yocto_scale_handout-with-notes
yocto_scale_handout-with-notesyocto_scale_handout-with-notes
yocto_scale_handout-with-notes
Steve Arnold
 

Similar to ZopeSkel: The past, present and future (20)

Recent Developments With ZopeSkel
Recent Developments With ZopeSkelRecent Developments With ZopeSkel
Recent Developments With ZopeSkel
 
Building a Simple Theme Framework
Building a Simple Theme FrameworkBuilding a Simple Theme Framework
Building a Simple Theme Framework
 
Plone 5 theming
Plone 5 themingPlone 5 theming
Plone 5 theming
 
Plone 5 theming
Plone 5 themingPlone 5 theming
Plone 5 theming
 
yocto_scale_handout-with-notes
yocto_scale_handout-with-notesyocto_scale_handout-with-notes
yocto_scale_handout-with-notes
 
Reactive summit 2020 microsoft orleans the easy way
Reactive summit 2020   microsoft orleans the easy wayReactive summit 2020   microsoft orleans the easy way
Reactive summit 2020 microsoft orleans the easy way
 
Responsive themeworkshop wcneo2016
Responsive themeworkshop wcneo2016Responsive themeworkshop wcneo2016
Responsive themeworkshop wcneo2016
 
Taking Spinnaker for a spin @ London DevOps Meetup 36
Taking Spinnaker for a spin @ London DevOps Meetup 36Taking Spinnaker for a spin @ London DevOps Meetup 36
Taking Spinnaker for a spin @ London DevOps Meetup 36
 
Untangling - fall2017 - week 9
Untangling - fall2017 - week 9Untangling - fall2017 - week 9
Untangling - fall2017 - week 9
 
SE2016 - Java EE revisits design patterns 2016
SE2016 - Java EE revisits design patterns 2016SE2016 - Java EE revisits design patterns 2016
SE2016 - Java EE revisits design patterns 2016
 
Bring Your Own Container: Using Docker Images In Production
Bring Your Own Container: Using Docker Images In ProductionBring Your Own Container: Using Docker Images In Production
Bring Your Own Container: Using Docker Images In Production
 
Drupal Presentation for CapitalCamp 2011: Features Driven Development
Drupal Presentation for CapitalCamp 2011: Features Driven DevelopmentDrupal Presentation for CapitalCamp 2011: Features Driven Development
Drupal Presentation for CapitalCamp 2011: Features Driven Development
 
BathCamp #32 - CMS Smackdown! - Plone
BathCamp #32 - CMS Smackdown! - PloneBathCamp #32 - CMS Smackdown! - Plone
BathCamp #32 - CMS Smackdown! - Plone
 
Package manages and Puppet - PuppetConf 2015
Package manages and Puppet - PuppetConf 2015Package manages and Puppet - PuppetConf 2015
Package manages and Puppet - PuppetConf 2015
 
Java EE Revisits Design Patterns
Java EE Revisits Design PatternsJava EE Revisits Design Patterns
Java EE Revisits Design Patterns
 
Drupal: an Overview
Drupal: an OverviewDrupal: an Overview
Drupal: an Overview
 
OSDC 2013 | Introduction into Chef by Andy Hawkins
OSDC 2013 | Introduction into Chef by Andy HawkinsOSDC 2013 | Introduction into Chef by Andy Hawkins
OSDC 2013 | Introduction into Chef by Andy Hawkins
 
My first powershell script
My first powershell scriptMy first powershell script
My first powershell script
 
Testing for Ops: Going Beyond the Manifest - PuppetConf 2013
Testing for Ops: Going Beyond the Manifest - PuppetConf 2013Testing for Ops: Going Beyond the Manifest - PuppetConf 2013
Testing for Ops: Going Beyond the Manifest - PuppetConf 2013
 
Container Native Development Tools - Talk by Mickey Boxell
Container Native Development Tools - Talk by Mickey BoxellContainer Native Development Tools - Talk by Mickey Boxell
Container Native Development Tools - Talk by Mickey Boxell
 

Recently uploaded

Recently uploaded (20)

TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 

ZopeSkel: The past, present and future

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n