Sydney Python Meetup Feb
Why it's better than your CMS
How sites are built
Backend Developer (plugins)
Themer
Integrator
Content Editor
Administrator
Simple Blog




 Simple CMS e.g. wordpress
Your Team                 Off the shelf
CMS Shop




Client Team      Your Team   Off the shelf
Intranet/ECMS




Your Team        Off the shelf
CMSaaS (e.g.
  ploud.com/squarespace)




                    SaaS provider
You team
Startup/App




      e.g. Django/pyramid
Your Team                 Off the shelf
Dylan's Law of Frameworks


“The bigger the framework, the bigger the
learning curve, the greater the inflexibility...
        but the bigger the chance you can use
someone else code”
Plone is easy to use
DEMO
http://ploud.net
http://plone.org/products/plonetheme.earthlingtwo
Plone vs. …
Who uses Plone?
Intranets
Plone is Fast
Chameleon
Easy to cache
Is it secure?
Plone Security Record (3Y)




http://plone.org/products/plone/security
@LulzSec




  VS.
LulzSec targeted




                Hacked...
DDoS
                Wordpress sub-site
Easy Theming
Diazo
Diazo


e.g. <replace css:theme="#content”
     css:content=”#plone-content">
Easy Code

from five import grok
from Products.CMFDefault.interfaces import
IDocument

class HelloWorld(grok.View):
   grok.context(IDocument)
   grok.requires('zope2.View')
   grok.name('hello-world')
http://plone.org/products/dexterity/documentation/manual/five.grok
True Open Development
How do I get a Plone site?
Self Host
Commercial Service Providers
SaaS
Why Python?
Python …
Fast to write
Easy to maintain
Runs on anything
Can be optimised with C
Connects to anything
Secure
Popular…
Where’s the database?
Zope Object Database
storage = FileStorage.FileStorage(’db.fs') new User instance
                                 # Create
db = DB(storage)                 newuser = User()
conn = db.open()
                                 # Add whatever attributes you want to track
         class User(Persistent): newuser.id = 'amk'
            pass                 newuser.first_name = 'Andrew' ; newuser.last_name = 'Ku
                                 ...
dbroot = conn.root()
                                  # Add object to the BTree, keyed on the ID
# Ensure that a 'userdb' key is present
                                  userdb[newuser.id] = newuser
# in the root
if not dbroot.has_key('userdb'):
                                  # Commit the change
   from BTrees.OOBTree import OOBTree
                                  transaction.commit()
   dbroot['userdb'] = OOBTree()

userdb = dbroot['userdb']
ZODB makes complex structures easy

http://david.wglick.org/2009/visualizing-the-zodb-with-graphviz
What’s the future of Plone?
CMSUI & Deco
How do I get support?
contact@pretaweb.com http://www.pretaweb.com

                      Dylan Jay

Plone pwns

Editor's Notes

  • #20 note, plone is one of the only single software solutions that crosses three areas of functionality
  • #21 If plone is so good, why not more popular? Public sites vs intranets. Hosting.
  • #23 Not owned by one company, trade mark controlled by the Plone Foundation. Plone can never be bought out or shut down so users can never be stranded. STA - 1 million uniques a month