My notes for the first day at the Plone conference in San Francisco.
Dextery in the wild
- Case study of a complex Dexterity based solution, Net Impact
- Sales Force integration
- Membrane is used to represent users as content items. See dexterity.membrane
- Membrane the ugly: extra catalog with unneeded index
- Using dexterity with grok saves writing ZCML
- Content items are defined in (super) models
- Content items have multiple forms with different fields. Auto form can’t be used, dexterity.EditForm class view is used.
- See collective.z3cform.datagridfield, eea.facetednavigation, collective.salesforce.content (dexterity behaviour)
- Dexterity content types is only used for custom content. Existing content type are modified using schema extender.
Tsunami proof Plone
- Building high available “web scale” Plone platform for emergency services
- Requirements; scale-ability, multisite, 99,99% reliability
- The cloud isn’t reliable enough
- CDNs are used for serving content
- Even the slightest amount of caching let’s Plone ‘breathe’ under heavy load
- Everything in the hosting stack must be redundant. Expensive!
- Datacenter should have multiple backbones
- DB redundancy is done with relstorage
- Funkload is used for stress testing
Progressive enhancement with wsgi
- Wsgi is just an API for handeling http requests
- Use wsgi as middleware to add functionality to your application
- Good wsgi libraries: WebOb, makes requests easy to deal with / wsgirefWSGI web server is in the std lib
- The ZopeSkel equivilent for wsgi: wsgitemplates
- Example captcha’s, most form libraries have a different way to implement captcha’s
- Uses wsgi middleware to rewrite the form
- The backend application has a checkbox to see if the user is human. Middleware inserts a captcha widget. If theform is submitted the middleware checks the captcha input and on valid input the ’is human’ box is checked. On valid captcha input the form is stored, else an error is shown.
- Probably overkill, more initial effort but can be easy to apply to customer sites.
- Example for how to use wsgi middleware
- See islay.simplecaptcha and islay.hardercaptcha
Multiplayer Plone : Realtime collaboration
- Jabber/XMPP protocol is used, realtime and asyn
- Presence (status), message, iq (subscription),
- Scales to large amount of users
- Collaborative writing like Google Docs in ATContent and dexterity
- Probably same diff match patch algorithm as in google docs
- Future: content notifications, async queues with xmpp in plone, conferencing, video and audio chat.
- See jarn.xmpp.buildout
Killer feature/selling point for intranets and sites with lots of authors.
Clone to Plone
- How to move from older ‘systems’ to Plone. Migrating content, it’s pretty hard.
- Funnelweb http://plone.org/products/funnelweb
- A web crawler, uses mr.migrator and transmogrifyer
- Buildout, command line or Plone TTW
- Crawler is configurable; ignore regex, drop content using tal, amount of items, ignore robots meta
- Crawler saves in cache on disk
- Content extraction using xpath
- Restructure content, tidy titles
- Upload to Plone
- What’s not converted: dynamic content, front pages, collections, portlets.
- Diazo is used to create to look and feel of the old site
- Used to migrate big sites, est time to migrate a big site is 3 / 4 days
Making Plone Mobile using Responsive Web Design
- Responsive design, geared towards lot’s of devices (and screen sizes!)
- Why design websites for mobile? Because there’s a huge increase on mobile device usage.
- See http://bostonglobe.com http://forefathersgroup.com and make the browser window smaller. The layout changes but content stays the same.
- See http://mediaqueri.es
- Define a range of screen resolutions with @media, to cater different devices. Each resolution range has an own layout/style/css.
- See plonetheme.responsivetheme, makes Plone responsive
- Book to buy Responsive Web design – Ethan Marcotte
- First start with smallest screen sizes and then go bigger
Creating websites using responsive desgn better than creating specific iDevice, Android, Blackberry apps.
The future search of Plone
Sally Kleinfelt, Hanno Schlichting and someone from six feet up
- Information retrieval
- Two search engines ZCatalog and Solr
- ZCTextIndex is very simple, TextIndexNG adds multilingual, better parsing, binary transforms, synonyms.
- Solr, based on Lucene Java search library. RESTful APIs. Powers twitter and wikipedia. An army of engineers working on it
- Solr has way more search features than ZCatalog
- Collective.solr and alm.solrindex are available add-ons. Collective.recipe.solrinstance as buildout recipe
- Solr indexing is not done transactional, it takes a while before the contt is indexed