6. Year: 1996
● Duke Nukem 3D
● Altavista
● Web development is CGI and Perl
● Maybe php, if you are lucky
● Spice Girls
● Presentations had bullet lists
7. Location: An airplane
● Jim Fulton creates Bobo
● Object publishing
● Traversal
● Open Source
8. Year: 1997 (maybe)
● BoboPOS: A persistent object storage
● DTML: Innovative HTML templating
● Principia: A web framework
● Uses Bobo and BoboPOS and DTML
16. Object Publishing
● You use the URL it to find an object
● The object is then asked to render itself
● No stdout is used
● No loading of the whole program every
request
● Your application is not a collection of
separate scripts on the disk
17. Traversal
● Example path: /calendar/2011/06/17/google
● / returns a root object
● You ask the root object for the 'calendar'
subobject
● You ask calendar for the '2011' object
● Etc until you reach the 'google' object
● Which you ask to render itself
● No more /calendar.php?item=84735
18. Many other nice things
● Fine grained access control
● User management
● Internationalization
● Reusable extension products
● Zope Page Templates
● Through-the-web Development
22. Through-the-web Development
● Code in the database
● No version control
● Restricted Python for security reasons
● You can't use normal development tools
23. Development dead-ends
● The TTW development was not OOP
● You end up with a pile of scripts
● Solution: ZClasses
● Actually was even worse
● Required re-write
● Disk-based products
● The right solution
● But: Required rewrite. Again.
24. The Zope Ghetto
● Zope had to invent everything
● Later others reinvented it
● Zope ended up with its own solution
26. Magic attributes and methods
● __bobo_traverse__()
● Special traverse logic
● __before_publishing_traverse__()
● Also special traverse logic
● __call__()
● Is what renders the object.
● Unless is has an index_html attribute
– Unless there is a default view component
● Unless there is a __browser_default__()
27. Acquisition
● Like inheritance but completely different
● All objects “acquire” the attributes of objects
above them in the object hierarchy
● The complete opposite of namespaces
32. Fixed all the problems
● Not TTW
● An awesome aspect-inspirect component
architecture!
● Everything pluggable
● Acquisition only when you ask for it
● Super-mega-enterprisey!
34. But...
● Not backwards compatible
● Death by abstraction:
● Everything is an adapter or a utility
● All files called the same:
● configure.zcml, interfaces.py, browser.py, adapters.py,
configure.zcml again.
● “A conspiracy on the hard-disk”
– Jörgen Modin
● Still installed as a monolith
● Confusing name
39. Plone
● Fantastic Content Management System
● Loads of users
● Great community
● Best conferences
40.
41. Buildout!
● Deployment tool
● For development and production
● Extensible with recipes
● Even used by prominent Django-people!
42. Repoze
● A re-imagining of the Zope publisher
● A WSGI pipeline of middleware
● Transactions
● Security
● Indexing
● Quickly picked up by Pylons/TG crowd
45. Pyramid
● Routing or Traversal
● Persistance agnostic (can even use ZODB)
● Fast and extensible
● Best T-shirt of Pycon 2011
46.
47. Deliverance / Diazo
● A whole new way to theme sites
● Rules to map items from content to theme
● Skin sites in hours
● Make several apps look the same