• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Content delivery Plone Symposium East 2010

Content delivery Plone Symposium East 2010



Presentaiton on alternative content delivery modes of the Plone Content Management System.

Presentaiton on alternative content delivery modes of the Plone Content Management System.



Total Views
Views on SlideShare
Embed Views



2 Embeds 23

http://www.slideshare.net 22
https://twitter.com 1



Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.


Content delivery Plone Symposium East 2010 Content delivery Plone Symposium East 2010 Presentation Transcript

  • Alt. Content DeliveryAlan Runyan
    Plone Symposium East
    State College, Pennsylvania
  • Overview
    Review modes of content delivery
    Why and what purpose
    Existing solutions for Plone
    Strengths and Weakness
    ContentMirror in detail
  • What is it
    Two modes in-band & out-of-band
    Plone Default is “in band”
    Req to Plone; Plone computes Resp
    e.g. XDV, mod_wsgi, mod_proxy, varnish
    Atypical usage of Plone, “out of band”
    Plone emits content into intermediary storage
    Plone is not involved in responding to Req
    No other FOSS CMS has such feature
  • How Others Do It
    Render pages to filesystem + sync
    Custom programming to iterate over repository rendering views to disk
    Provide an API into repository for web-tier application to source content
    Promote the database schema as API
  • Out of Band
    Static Delivery
    Generates static assets from Plone
    Assets transferred to web server
    Statically rendered content served
    Dynamic Delivery
    Plone pushes content into 3rd party data store
    Separate web application to display content
  • Why?
    Static Delivery
    Constraints in delivery mode of website
    Security requires no moving parts
    e.g. Kiosk, updated every X hours
    Dynamic Delivery
    Web application is vastly different than CMS
    Different organizational / skill-sets being used
    e.g. existing website is .NET; want new section to be driven by Plone
  • Current Options
    Static Delivery
    Dynamic Delivery
  • Plone Approach
    Render pages to filesystem + sync
    CMFDeployment, enpraxis.staticsite
    Promote the database schema as API
    Entransit, contentmirror
    Provide API into the Repository
  • CMFDeployment
    Static delivery
    Various large projects have used it
    Very flexible configuration modes
    Supports transport
    Flexibility brings complexity / lacks testing
    Last release 2006
  • In the Wild
  • enpraxis.staticsite
    Static delivery
    Very simple and approachable
    Serializes Plone to file system
    Requires programming & deployment
    Lack of documentation and testing
  • In the Wild
  • Entransit
    Dynamic Delivery
    Supports staging of entire changesets
    Conceptually simple
    Requires too much programming
    Documentation and testing is lacking
    Too many moving parts
    Does not have connection to CMS during load into data store. Significantly complicates state mgmt
  • In the Wild
  • ContentMirror
    Dynamic delivery
    Simple, Extensible, and Fast
    Tight coupling with Plone event model
    Evolving data store & Plone models requires discipline
    Data model currently exposes impl details
  • In the Wild
  • Wrap Up
    Alt delivery is atypical use case for Plone
    Systems with multiple ORG actors
    Static Delivery vs. Dynamic Delivery
    Building up is more approachable
    Documentation / Testing critical
    Dynamic delivery: CM is best bet.
    Entransit 2 plans on layering staging on CM
    Now lets go into details of ContentMirror
  • ContentMirror Pitch
    Sync Serialize content from Plone RDBMS
    Just Works™
    Small code base < 1k LOC; 99% coverage
    Let SQLAlchemy do heavy lifting
    RDBMS query-ability of content attributes
    Well tested, 99% coverage + mocked
  • Evaluate Today
    Buildout: Plone, ContentMirror, and SOLREstimate: 30 minutes
    Configuration of Relational DatabaseEstimate: 20 minutes
    Bootstrap database with ddl.pyEstimate: 5 minutes
    Have real time Plone Content (RDBMS) and Search (SOLR); Now pick frontend.
  • Usages
    Business reports based on content repository (i.e. Crystal Reports, iReport)
    Provide richer queries (using SQL)
    Store data in multiple back ends
    Google App Engine
  • You already know
    If you do not customize Plone heavily; it migrates really well.
    Plone lots of neat features: WebDAV (Enfold Desktop;), LDAP, Content Types, Cache Fu (Enfold Proxy;), etc.
    So the authoring experience is flexible, configurable, and enjoyable
    You can have multiple “sub-sites”
  • Observations
    Presentation tiers have different requirements than content repository
    Simplicity is key. Maintaining presentation tiers have to be simple; few abstractions
    PHP or Django have few abstractions to display dynamic data on web page
    Isolate complexity; never will go away
    Plone seen as self-licking ice cream cone
  • The Story
    Big university has 200 IT staff; all busy managing HR, ERP, printers, etc.
    Individual departments are independent and have transient staff who manage web
    Departments need way to use transient staff to maintain web presence; if CMS exists. Transient staff can use PHP.
    PHP, Django, .NET developers are cheap
  • More Story
    There is no way IT can:
    Manage all department changes centrally
    Maintain system that has software changing daily or hourly
    Allow people to make a change that impacts campus wide system
    Noam in Linguistics should not be able write code which DoS the campus CMS
    IT does best with focus: keep systems up.
  • Even More Story?
    IT offer primitives: LDAP (users), RDBMS (content), SOLR (search).
    Commodity services
    Departments implement however they like
    ContentMirror is a lightweight step towards decoupling the CMS from presentation
    Make presentation as flexible as possible
  • Installation
    Buildout the recipe.cfg
    Put SQLAlchemy URI in .zcml or ENV
    bin/instance run ddl.py $DB > out.ddl
    Execute out.ddl
    Start Zope
    Create Plone site and add content
    Query your RDBMS
  • Features
    Auto-generate DDL for registered types
    All default Plone content types work
    Currently focused on Archetypes; z3 easy
    Bulk import of Plone content into RDBMS
    Re-entrant (run multiple times)
    Schema available in JSON (vocabularies)
    Fast. Serialized 100k content + references in < 20m
  • Your content type
    Create new zcml that is included
    <configure xmlns="http://namespaces.zope.org/zope"
    <ore:mirror content="Products.AudioholicsContent.AHHomePage.AHHomePage"/>
    Re-run ddl.py; execute ddl.py in RDBMS
    All default Plone content types work OOTB
  • Field not available?
    ore.contentmirror/transform.zcmlcontains adapters for how AT Fields are mapped to SQLAlchemy
    ore.contentmirror/transform.pycontains the adapter source code
    for=".interfaces.ITextField .interfaces.ISchemaTransformer"
  • Escape Hatch
    If you don’t want field level serialization
    Write custom transformer for your class
    You take full responsibility for
    Copying state from instance to RDBMS
    May also have to do some extra work
  • Of Interest
    Provide buffer to filter out duplicate operations
    Simple pattern for transaction integration
    Serializes AT schemas into RDBMS via a JSON structure
    Presentation can easily find out what the original schema (including vocabularies)
    Not used by default
  • Dynamism
    What about PloneFormGen or interaction?
    ContentMirror would serialize the Form elements as database rows; FE has to draw and validate forms
    Collage would generate data representing rows, columns pointing to content UID
    Presentation tier does re-implement common functionality (RSS, Login, etc)
  • Conclusion
    Significant experience in community
    Starting simple is more approachable
    Static vs. Dynamic
    CM has a great experience OOTB
    rc2 has minor OOTB issue; all fixed in trunk
    Staging not implemented across multiplecontent types. DEV, STAGE, PROD
    Alt delivery is a minority use case.
  • Conclusion
    You would never know that Plone fits these use cases
    Little visibility in broader community
    Hard to separate the add-on pile
    collective simply has too much activity
    Costly to maintain; advocate
    Without formal support in Plone support expensive
    KapilThangavelu wrote ContentMirror & CMFDeployment – awesome software designer!
  • Fin
    Content Mirror (ore.contentmirror) http://code.google.com/p/contentmirror/
    SOLR (collective.solr)http://lucene.apache.org/solr/
    Enfold Systemshttp://www.enfoldsystems.com/
    My email addressalan@enfoldsystems.com