SlideShare una empresa de Scribd logo
1 de 16
Descargar para leer sin conexión
A novel approach to undo
Modification audit logging and using
zc.beforestorage to time travel.
Sean	Upton	/	UPIQ
#ploneconf2016	|	@sdupton
Disclaimers
• Experimental approach
• Unfinished work in progress
• I’m here to pitch an idea about undo, whose
principles have been field tested…
– ... But we need a UI for this.
– .... I’m working on it.
• Today, we’ll look at the pieces and talk about
them.
• Maybe find a way forward for practical undo?
#ploneconf2016	|	@sdupton
Motivations
• Reasonable degree of interest on Github and
Twitter.
• Some of my users cost me hours fixing human
errors with programmatic monkey-wrenching.
• If we can use this programmatically in
repeatable ways, we can make something
user-facing, no?
• Because we cannot use ”Undo” to undo.
#ploneconf2016	|	@sdupton
The basics: audit logging
• Audit log of all changes, stored in ZODB
– Logging now is synchronous, may be async in future,
TBD.
– Log all of:
• Deletion
• Modification
• Move
• Addition
– Log independent of Catalog.
– Handlers call logging system
• Logging components adapt site, use annotations.
#ploneconf2016	|	@sdupton
Audit logging: usage
• Core components tested, but… still needs a
good UI.
• Outside of core use case, this could be used
for regulatory audit requirements (e.g. HIPAA).
• UI plan is enumerating in views:
– A view to enumerate changes, by “facility”
– A view to prune changes
• We may need better possible ZODB conflict
resolution strategy for queuing (LIFO insertion)
of modification facilities logged.
#ploneconf2016	|	@sdupton
Okay, so you log every change?
• Right, and we will have view to enumerate
these changes, in reverse chronological
(insertion) order.
– With filtering
– With batching
• For regulatory logging, you could to this to a
data retention threshold before pruning, or not
prune this at all. The change records are
small.
#ploneconf2016	|	@sdupton
Facility
• For each type of change we have a facility:
– Modifications
– Deletions
– Additions
– Moves / renames
• Each logs records with:
– UID
– Path
– Authenticated user
– Timestamp (python datetime, currently local time)
#ploneconf2016	|	@sdupton
But what do we do with this?
FIX	HUMAN	ERRORS!
#ploneconf2016	|	@sdupton
The plan
• I have used zc.beforestorage multiple times to
fix human errors, each time programmatically.
• If what you have is within your kept history,
going back in time is easy.
• We want to make this user-facing, not a
programmer’s problem.
• I’m creating a package called plone.wabac as
a transitional/experimental proof of concept.
– Now soliciting collaborators! J
#ploneconf2016	|	@sdupton
plone.wabac
• WABAC == “wayback”
• Transitional add-on
• Half-finished
• May get exploded and
federated elsewhere.
• Assumed goal of
eventual PLIP, once
proven.
• Want this to be testable
by users, uninstallable
in meantime.
#ploneconf2016	|	@sdupton
Restoration, not “Undo”
• We want to restore item to previous known-
good state:
– Before accidental deletion
– Before modification that was problematic.
• This might compete with CMFEditions, so may be a non-
problem.
• But my site stores non-content ZODB stuff on content objects,
so I cannot merely use CMFEditions for rollback.
– Before renaming or moving.
• User picks item from audit log, and clicks
“restore”. Or more than one item at a time.
#ploneconf2016	|	@sdupton
zc.beforestorage
• Time-travel through your kept history.
• !! Requires you keep history.
• !! Requires you keep enough history.
– We could use this on kept FileStorage backups too, if
we were clever and did not want to only go through
live history.
• But that is not in scope yet, requires configuration.
• Mostly, I want to undo things easily when the
“Oh ****” phone call comes in.
– Or better, tell the site admin how to fix it.
#ploneconf2016	|	@sdupton
Programmatic use
• Load storage wrapper programmatically.
• setSite() on the time-travelled version.
• Get your content;
• ZEXP export it;
• setSite() on live target;
• Restore from ZEXP.
• Repeat.
– Show example code
#ploneconf2016	|	@sdupton
Security disclaimers
• We might want to be able to stop ability to
undo things (e.g. delete something very bad,
very quickly, and very permanently).
• My vision now is a site-wide audit logging
facility accessible to Site Administrator or
Manager role.
• We can make this placeful if we index audit
trail by path.
– Not yet in scope.
– Need to ponder permissions for restoration.
#ploneconf2016	|	@sdupton
Next steps
• Finish the UI for enumeration, filtering, and
pruning of audit data.
• Come up with reasonable tactic for avoiding
conflict for audit logging key insertion.
• Views and adapters for restoration via
zc.beforestorage.
• Logging the restorations themselves.
• Prove concept universally useful, then PLIP it?
#ploneconf2016	|	@sdupton
Questions?
… and feedback via:
#ploneconf2016	|	@sdupton

Más contenido relacionado

La actualidad más candente

Continuous Deployment at Etsy: A Tale of Two Approaches
Continuous Deployment at Etsy: A Tale of Two ApproachesContinuous Deployment at Etsy: A Tale of Two Approaches
Continuous Deployment at Etsy: A Tale of Two Approaches
Ross Snyder
 

La actualidad más candente (13)

Just Too Late
Just Too LateJust Too Late
Just Too Late
 
STAQ Development Manual (Redacted)
STAQ Development Manual (Redacted)STAQ Development Manual (Redacted)
STAQ Development Manual (Redacted)
 
Engineers need to learn UXR
Engineers need to learn UXREngineers need to learn UXR
Engineers need to learn UXR
 
PhoneGap at JSConf
PhoneGap at JSConfPhoneGap at JSConf
PhoneGap at JSConf
 
Principles, Backbone and Bottlenose
Principles, Backbone and BottlenosePrinciples, Backbone and Bottlenose
Principles, Backbone and Bottlenose
 
Making Software Management tools work for you - 2011 PHPBenelux Conference
Making Software Management tools work for you - 2011 PHPBenelux ConferenceMaking Software Management tools work for you - 2011 PHPBenelux Conference
Making Software Management tools work for you - 2011 PHPBenelux Conference
 
Deployments in one click!
Deployments in one click!Deployments in one click!
Deployments in one click!
 
2015 nouveaux outilsdevweb
2015 nouveaux outilsdevweb2015 nouveaux outilsdevweb
2015 nouveaux outilsdevweb
 
Continuous Deployment at Etsy: A Tale of Two Approaches
Continuous Deployment at Etsy: A Tale of Two ApproachesContinuous Deployment at Etsy: A Tale of Two Approaches
Continuous Deployment at Etsy: A Tale of Two Approaches
 
Full stack-web-design
Full stack-web-designFull stack-web-design
Full stack-web-design
 
More Productivitiy with Spring Roo
More Productivitiy with Spring RooMore Productivitiy with Spring Roo
More Productivitiy with Spring Roo
 
Ease into HTML5 and CSS3
Ease into HTML5 and CSS3Ease into HTML5 and CSS3
Ease into HTML5 and CSS3
 
Cross-platform logging and analytics
Cross-platform logging and analyticsCross-platform logging and analytics
Cross-platform logging and analytics
 

Destacado

Academies everything to everyone for learning evermore
Academies everything to everyone for learning evermoreAcademies everything to everyone for learning evermore
Academies everything to everyone for learning evermore
Suzie McGuiggan
 

Destacado (17)

5 things STILL! TOO! HARD! in Plone 5
5 things STILL! TOO! HARD! in Plone 55 things STILL! TOO! HARD! in Plone 5
5 things STILL! TOO! HARD! in Plone 5
 
St. tammany chapter 6
St. tammany chapter 6St. tammany chapter 6
St. tammany chapter 6
 
Press
PressPress
Press
 
Abc
AbcAbc
Abc
 
Grupo psi tema 5
Grupo psi   tema 5Grupo psi   tema 5
Grupo psi tema 5
 
Abengoa y la desalación
Abengoa y la desalaciónAbengoa y la desalación
Abengoa y la desalación
 
Compatibilitynewsletter
CompatibilitynewsletterCompatibilitynewsletter
Compatibilitynewsletter
 
El teclado
El tecladoEl teclado
El teclado
 
O comércio
O comércioO comércio
O comércio
 
71czO7f-ADL
71czO7f-ADL71czO7f-ADL
71czO7f-ADL
 
Knowledge management
Knowledge managementKnowledge management
Knowledge management
 
сцусуцвмы
сцусуцвмысцусуцвмы
сцусуцвмы
 
Participacion ciuadana
Participacion ciuadanaParticipacion ciuadana
Participacion ciuadana
 
Academies everything to everyone for learning evermore
Academies everything to everyone for learning evermoreAcademies everything to everyone for learning evermore
Academies everything to everyone for learning evermore
 
Personal Branding Masterclass for Coaches, Consultants, Solopreneurs & Small ...
Personal Branding Masterclass for Coaches, Consultants, Solopreneurs & Small ...Personal Branding Masterclass for Coaches, Consultants, Solopreneurs & Small ...
Personal Branding Masterclass for Coaches, Consultants, Solopreneurs & Small ...
 
Montowanie zegarów bijących
Montowanie zegarów bijącychMontowanie zegarów bijących
Montowanie zegarów bijących
 
Competencias docentes 2.0
Competencias docentes 2.0Competencias docentes 2.0
Competencias docentes 2.0
 

Similar a A novel approach to Undo

Product Management at Contactually
Product Management at ContactuallyProduct Management at Contactually
Product Management at Contactually
Contactually
 

Similar a A novel approach to Undo (20)

Efficient Django
Efficient DjangoEfficient Django
Efficient Django
 
Journeys with Transmogrifier and friends or How not to get stuck in the Plone...
Journeys with Transmogrifier and friends or How not to get stuck in the Plone...Journeys with Transmogrifier and friends or How not to get stuck in the Plone...
Journeys with Transmogrifier and friends or How not to get stuck in the Plone...
 
Devops For Drupal
Devops  For DrupalDevops  For Drupal
Devops For Drupal
 
SharePoint logging & debugging
SharePoint logging  & debugging SharePoint logging  & debugging
SharePoint logging & debugging
 
All about that reactive ui
All about that reactive uiAll about that reactive ui
All about that reactive ui
 
Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to reality
 Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to reality Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to reality
Droidcon Spain 2016 - The Pragmatic Android Programmer: from hype to reality
 
Building a custom cms with django
Building a custom cms with djangoBuilding a custom cms with django
Building a custom cms with django
 
Building trust within the organization, first steps towards DevOps
Building trust within the organization, first steps towards DevOpsBuilding trust within the organization, first steps towards DevOps
Building trust within the organization, first steps towards DevOps
 
Revamping FYP using Agile Methodology.pptx
Revamping FYP using Agile Methodology.pptxRevamping FYP using Agile Methodology.pptx
Revamping FYP using Agile Methodology.pptx
 
Tools and practices to use in a Continuous Delivery pipeline
Tools and practices to use in a Continuous Delivery pipelineTools and practices to use in a Continuous Delivery pipeline
Tools and practices to use in a Continuous Delivery pipeline
 
Product Management at Contactually
Product Management at ContactuallyProduct Management at Contactually
Product Management at Contactually
 
A culture of Automation - Joe Smith - DevOpsDays Tel Aviv 2017
A culture of Automation - Joe Smith - DevOpsDays Tel Aviv 2017A culture of Automation - Joe Smith - DevOpsDays Tel Aviv 2017
A culture of Automation - Joe Smith - DevOpsDays Tel Aviv 2017
 
Django production
Django productionDjango production
Django production
 
There is something about serverless
There is something about serverlessThere is something about serverless
There is something about serverless
 
Bulletproof design systems using storybook
Bulletproof design systems using storybookBulletproof design systems using storybook
Bulletproof design systems using storybook
 
Fuel Good 2018: Upgrades Made Easy: The Canadian Museum of History
Fuel Good 2018: Upgrades Made Easy: The Canadian Museum of HistoryFuel Good 2018: Upgrades Made Easy: The Canadian Museum of History
Fuel Good 2018: Upgrades Made Easy: The Canadian Museum of History
 
Using React for the Mobile Web
Using React for the Mobile WebUsing React for the Mobile Web
Using React for the Mobile Web
 
Devops at Startup Weekend BXL
Devops at Startup Weekend BXLDevops at Startup Weekend BXL
Devops at Startup Weekend BXL
 
Road to Continuous Delivery - Wix.com
Road to Continuous Delivery - Wix.comRoad to Continuous Delivery - Wix.com
Road to Continuous Delivery - Wix.com
 
Profiling and Tuning a Web Application - The Dirty Details
Profiling and Tuning a Web Application - The Dirty DetailsProfiling and Tuning a Web Application - The Dirty Details
Profiling and Tuning a Web Application - The Dirty Details
 

Último

%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 

Último (20)

Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Generic or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisions
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 

A novel approach to Undo

  • 1. A novel approach to undo Modification audit logging and using zc.beforestorage to time travel. Sean Upton / UPIQ #ploneconf2016 | @sdupton
  • 2. Disclaimers • Experimental approach • Unfinished work in progress • I’m here to pitch an idea about undo, whose principles have been field tested… – ... But we need a UI for this. – .... I’m working on it. • Today, we’ll look at the pieces and talk about them. • Maybe find a way forward for practical undo? #ploneconf2016 | @sdupton
  • 3. Motivations • Reasonable degree of interest on Github and Twitter. • Some of my users cost me hours fixing human errors with programmatic monkey-wrenching. • If we can use this programmatically in repeatable ways, we can make something user-facing, no? • Because we cannot use ”Undo” to undo. #ploneconf2016 | @sdupton
  • 4. The basics: audit logging • Audit log of all changes, stored in ZODB – Logging now is synchronous, may be async in future, TBD. – Log all of: • Deletion • Modification • Move • Addition – Log independent of Catalog. – Handlers call logging system • Logging components adapt site, use annotations. #ploneconf2016 | @sdupton
  • 5. Audit logging: usage • Core components tested, but… still needs a good UI. • Outside of core use case, this could be used for regulatory audit requirements (e.g. HIPAA). • UI plan is enumerating in views: – A view to enumerate changes, by “facility” – A view to prune changes • We may need better possible ZODB conflict resolution strategy for queuing (LIFO insertion) of modification facilities logged. #ploneconf2016 | @sdupton
  • 6. Okay, so you log every change? • Right, and we will have view to enumerate these changes, in reverse chronological (insertion) order. – With filtering – With batching • For regulatory logging, you could to this to a data retention threshold before pruning, or not prune this at all. The change records are small. #ploneconf2016 | @sdupton
  • 7. Facility • For each type of change we have a facility: – Modifications – Deletions – Additions – Moves / renames • Each logs records with: – UID – Path – Authenticated user – Timestamp (python datetime, currently local time) #ploneconf2016 | @sdupton
  • 8. But what do we do with this? FIX HUMAN ERRORS! #ploneconf2016 | @sdupton
  • 9. The plan • I have used zc.beforestorage multiple times to fix human errors, each time programmatically. • If what you have is within your kept history, going back in time is easy. • We want to make this user-facing, not a programmer’s problem. • I’m creating a package called plone.wabac as a transitional/experimental proof of concept. – Now soliciting collaborators! J #ploneconf2016 | @sdupton
  • 10. plone.wabac • WABAC == “wayback” • Transitional add-on • Half-finished • May get exploded and federated elsewhere. • Assumed goal of eventual PLIP, once proven. • Want this to be testable by users, uninstallable in meantime. #ploneconf2016 | @sdupton
  • 11. Restoration, not “Undo” • We want to restore item to previous known- good state: – Before accidental deletion – Before modification that was problematic. • This might compete with CMFEditions, so may be a non- problem. • But my site stores non-content ZODB stuff on content objects, so I cannot merely use CMFEditions for rollback. – Before renaming or moving. • User picks item from audit log, and clicks “restore”. Or more than one item at a time. #ploneconf2016 | @sdupton
  • 12. zc.beforestorage • Time-travel through your kept history. • !! Requires you keep history. • !! Requires you keep enough history. – We could use this on kept FileStorage backups too, if we were clever and did not want to only go through live history. • But that is not in scope yet, requires configuration. • Mostly, I want to undo things easily when the “Oh ****” phone call comes in. – Or better, tell the site admin how to fix it. #ploneconf2016 | @sdupton
  • 13. Programmatic use • Load storage wrapper programmatically. • setSite() on the time-travelled version. • Get your content; • ZEXP export it; • setSite() on live target; • Restore from ZEXP. • Repeat. – Show example code #ploneconf2016 | @sdupton
  • 14. Security disclaimers • We might want to be able to stop ability to undo things (e.g. delete something very bad, very quickly, and very permanently). • My vision now is a site-wide audit logging facility accessible to Site Administrator or Manager role. • We can make this placeful if we index audit trail by path. – Not yet in scope. – Need to ponder permissions for restoration. #ploneconf2016 | @sdupton
  • 15. Next steps • Finish the UI for enumeration, filtering, and pruning of audit data. • Come up with reasonable tactic for avoiding conflict for audit logging key insertion. • Views and adapters for restoration via zc.beforestorage. • Logging the restorations themselves. • Prove concept universally useful, then PLIP it? #ploneconf2016 | @sdupton
  • 16. Questions? … and feedback via: #ploneconf2016 | @sdupton