SlideShare a Scribd company logo
1 of 62
Plone Intranet
under the hood
Guido Stevens
@GuidoStevens
cosent.nl
Social Knowledge Technology
it starts with a vision
Once upon a time...
● 2010 Intranet designer at Syslab
● 2011 Created Patternslib
● 2012Mockup forked
● 2014 Plone Intranet Designer
● 2015 Mockup merged
● 2015 Plone 5.0 released
● 2015 Plone Intranet 1.0 released
Patternslib Mockup Patternslib→ →
Design First
Patternslib
● Separate Github organization
● Multipe repositories
● Some patterns live elsewhere
● Provides: Javascript
– markup + CSS only for documentation
purposes
Prototype
● Separate repository
● In ploneintranet Github org
● No Javascript
– downloads patternslib bundle
● No Plone
– hand-crafted markup
● Standalone clickable prototype
– Jekyll static page templates
● Provides: CSS, images
● Defines: HTML markup
Patterns in action
post-box is our most complex frontend element
post-box is our most complex frontend element
● pat-content-mirror
● pat-inject
● pat-switch
● pat-subform
● pat-autosubmit
pat-content-mirror
pat-content-mirror
textarea (invisible)
#mirror-post-box
pat-content-mirror
textarea (invisible)
#mirror-post-box
pat-inject
pat-inject
<form id="post-box"
class="pat-inject update-social status-inactive"
action="/feedback/post-well-done.html"
data-pat-inject="source: #activity-stream;
target: #activity-stream .activities::before
&& #new-post-box"
>
pat-inject executes AJAX request
● activated by pat-inject class
● fetches action page URL
● extracts source #selector
● replaces current page target selector
● optionally replaces second && target
selector
<form id="post-box"
class="pat-inject update-social status-inactive"
action="/feedback/post-well-done.html"
data-pat-inject="
source: #activity-stream;
target: #activity-stream .activities::before
&& #new-post-box"
>
pat-inject executes AJAX request
● activated by pat-inject class
● fetches action page URL
● extracts source #selector
● replaces current page target selector
● optionally replaces second && target
selector
learn more at patternslib.com
● + 2 talks by JCBrand
putting it all together
ploneintranet/ploneintranet
● single repository
● single egg distribution
● 23 separate packages
– separate GS profiles
– separate test suites
separation of concerns (1)
patternslib
● javascript
prototype
● CSS
● markup definition
ploneintranet
● python & Plone
● markup implementation
prototype ploneintranet
separation of concerns (2)
ploneintranet.theme
● no views or templates
● diazo transforms
● CSS bundle
– from proto
● JS bundle
– compile / download
ploneintranet.layout
● globally used views &
templates
– menu bar
– dashboard
● App protocol
– context sensitive
browser layers
ploneintranet.suite
● no views or templates
● only package that
depends on
ploneintranet.theme
● integrates all other
ploneintranet.*
● robot tests on all
ploneintranet.*
customization entry points
ploneintranet.theme
● no views or templates
● diazo transforms
● CSS bundle
– from proto
● JS bundle
– compile / download
ploneintranet.suite
● no views or templates
● only package that
depends on
ploneintranet.theme
● integrates all other
ploneintranet.*
● robot tests on all
ploneintranet.*
don't customize, generalize
● it's a product
– not a framework
– highly integrated
● it's an application
– not a website
– minimal branding
● forking is costly
– to build
– to maintain even more
● generalize feature requests
– “good idea” test: useful for others
– high quality generic solution
– share future maintenance
– improve core product
● customize configuration not code
– avoid hardcoding current business
logic
– avoid UX uglification
Just A Bunch Of Add-ons – No More!
All pages hand-crafted markup
● No z3c.form generated pages
● No “developer design”...
● Add-on integration requires design
Just A Bunch Of Add-ons – No More!
All pages hand-crafted markup
● No z3c.form generated pages
● No “developer design”...
● Add-on integration requires design
This is a product, not a framework
● Consistent, superior UX
● High quality polished product
● Focus on OOTB product re-use
how to make money then?
● free != beer
● business analysis
– information flows
– social structure
● configure system
– case workflows
– teamspace structure
● integration
– authentication
– other systems
● enhancements
– build new features
– improve existing features
● deployment
● training
● support
– fix bugs
– upgrades
● analytics
re-use opportunities
● whole product
– use as base for client project
– collaborate with partners
– expand roadmap
● library mode
– depend on ploneintranet
– load only individual packages
● network (tagging)
● async
● themeswitcher
● layout (app protocol)
stack overview
statistics
● 49 contributors
● 6800+ commits
● 835 tests
● 87% test coverage (excl. robot)
● sloccount:
– python: 23.9 k (85%)
– xml: 3.8 k (13%)
● investment ~ € 750 000
built on Plone 5
● moved to Plone5 a2 in 2014
● took some initial effort
● smooth sailing since
● now we don't have to port :-)
● now we don't have to support
Plone4 :-)
● we don't expose Barceloneta
– except where we do: themeswitcher
package groups
● frontend
– theme
– themeswitcher
● integration
– suite
– api
● sitewide
– layout
– notifications
– messaging
● workspaces
– workspace
– todo
● users
– userprofile
– invitations
● standalone apps
– search
– library
● previews
– attachments
– docconv
– async
● plonesocial
– microblog
– activitystream
– network
– (misc legacy)
integration
ploneintranet.suite
● :default loads all package profiles
● :testing creates demo site
● runs all robot tests
– from all packages
– in fully themed site
– on :testing content
ploneintranet.api
● all developers are lazy :-)
search
● Solr based
● Elasticsearch future option
● faceted
● “livesearch”
● standalone
– ZCatalog elsewhere
“plonesocial”
● status updates
● mentions
● tags
● attachments
– previews
● reply, re-share
● filter by ”following” network
● like
personalized data structures
● Btree persistent dictionaries
● Arnold follows Bernard
● Claire likes your update
● Denise endorses Ellen for skill X
● Generic personalized tagging behavior
overrides DC:
<user> tags <object> with <tag>
ploneintranet.network
● Btree persistent dictionaries
● Arnold follows Bernard
● Claire likes your update
● Denise endorses Ellen for skill X
● Generic personalized tagging behavior
overrides DC:
<user> tags <object> with <tag>
user profiles
● dexterity.membrane
● personalized data
– personal stream
– endorsements
– followers/following
– likes
● import view for management
● assumes AD/LDAP
– but not required
● see talk by Matt Sital Singh
team spaces and case management
● based on collective.workspace
● simplify security management
● single trust zone
● document management
● activity stream
● adaptive case management:
– workflowed team space
– todo centered
– see talk by Alexander Pilz
document previews
● based on collective.documentviewer
● .* → pdf → png screenshot
● stored as annotations on files
● used in all file listings
– workspace
– activity stream
– search results
● WIP: async conversion
async
● super minimalistic
– 478 SLOC
● no ZODB queue handling
– use Celery
– use Redis
● async request dispatch
● handle in browser view
– normal view security
– easy to debug
ploneintranet.async
● super minimalistic
– 478 SLOC
● no ZODB queue handling
– use Celery
– use Redis
● async request dispatch
● handle in browser view
– normal view security
– easy to debug
● generically re-usable
theme switcher
● fallback to Barceloneta
– control panels
– raw editing
● cms.localhost:8080/Plone
– configurable switch host
● plone.app.theming policy API
● ploneintranet.themeswitcher
implementation
ploneintranet.themeswitcher
● fallback to Barceloneta
– control panels
– raw editing
● cms.localhost:8080/Plone
– configurable switch host
● plone.app.theming policy API
● ploneintranet.themeswitcher
implementation
context-sensitive browserlayer switching
● Use case
– “Document” in workspace
– “Document” in library
– different default view
– same portal type
● App protocol
– toplevel traverse event handler
– disable “other” IAppLayer
– enable “own” IAppLayer
● Mixin class for easy usage
ploneintranet.layout
● Use case
– “Document” in workspace
– “Document” in library
– different default view
– same portal type
● App protocol
– toplevel traverse event handler
– disable “other” IAppLayer
– enable “own” IAppLayer
● Mixin class for easy usage
Roadmap
● Content updates
● Notifications
● Mobile Push
● News hub
● Calendaring
● Auto-tagging
● Org charts
● ….
learn more
● Product and services: quaive.com
● Developer documentation: docs.ploneintranet.org
● Sources and issue tracker: github.com/ploneintranet/ploneintranet
Plone Intranet under the hood

More Related Content

What's hot

Drupal 8 Adoption Myths Debunked
Drupal 8 Adoption Myths DebunkedDrupal 8 Adoption Myths Debunked
Drupal 8 Adoption Myths DebunkedAngela Byron
 
Further Resources - Drupal training
Further Resources - Drupal trainingFurther Resources - Drupal training
Further Resources - Drupal trainingPedro Cambra
 
Drupal - Introduction to Building Library Web Site Using Drupal
Drupal - Introduction to Building Library Web Site Using DrupalDrupal - Introduction to Building Library Web Site Using Drupal
Drupal - Introduction to Building Library Web Site Using DrupalVibrant Technologies & Computers
 
Contributions: what they are and how to find them
Contributions: what they are and how to find themContributions: what they are and how to find them
Contributions: what they are and how to find themPedro Cambra
 
Untangling spring week12
Untangling spring week12Untangling spring week12
Untangling spring week12Derek Jacoby
 
Drupal 8 - What’s cooking?
Drupal 8 - What’s cooking?Drupal 8 - What’s cooking?
Drupal 8 - What’s cooking?Alkuvoima
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkitlohith r
 
C4ainaction-Introduction to the Pyramid Web Framework
C4ainaction-Introduction to the Pyramid Web FrameworkC4ainaction-Introduction to the Pyramid Web Framework
C4ainaction-Introduction to the Pyramid Web FrameworkFrancis Addai
 
Jean Paul Ladage Managing Enterprise Content With Plone
Jean Paul Ladage   Managing Enterprise Content With PloneJean Paul Ladage   Managing Enterprise Content With Plone
Jean Paul Ladage Managing Enterprise Content With PloneVincenzo Barone
 
Everything You Need to Know About the Top Changes in Drupal 8
Everything You Need to Know About the Top Changes in Drupal 8Everything You Need to Know About the Top Changes in Drupal 8
Everything You Need to Know About the Top Changes in Drupal 8Acquia
 
Don’t fight with windmills. Upgrade path tool from OpenY distro - Igor Karpil...
Don’t fight with windmills. Upgrade path tool from OpenY distro - Igor Karpil...Don’t fight with windmills. Upgrade path tool from OpenY distro - Igor Karpil...
Don’t fight with windmills. Upgrade path tool from OpenY distro - Igor Karpil...DrupalCamp Kyiv
 
ChatBots for self-service DevOps
ChatBots for self-service DevOpsChatBots for self-service DevOps
ChatBots for self-service DevOpsSimon Massey
 
Drupal and the Future of the Web
Drupal and the Future of the WebDrupal and the Future of the Web
Drupal and the Future of the WebJohn Albin Wilkins
 
Introduction to Google Web Toolkit - part 1
Introduction to Google Web Toolkit - part 1Introduction to Google Web Toolkit - part 1
Introduction to Google Web Toolkit - part 1Muhammad Ghazali
 
Publishing your open source project
Publishing your open source projectPublishing your open source project
Publishing your open source projectRishi Pithadiya
 
OpenY: Scaling and Sharing with Custom Drupal Distribution
OpenY: Scaling and Sharing with Custom Drupal DistributionOpenY: Scaling and Sharing with Custom Drupal Distribution
OpenY: Scaling and Sharing with Custom Drupal DistributionDrupalCamp Kyiv
 
Untangling spring week6
Untangling spring week6Untangling spring week6
Untangling spring week6Derek Jacoby
 

What's hot (20)

Drupal 8 Adoption Myths Debunked
Drupal 8 Adoption Myths DebunkedDrupal 8 Adoption Myths Debunked
Drupal 8 Adoption Myths Debunked
 
Further Resources - Drupal training
Further Resources - Drupal trainingFurther Resources - Drupal training
Further Resources - Drupal training
 
Vagrant
VagrantVagrant
Vagrant
 
Drupal - Introduction to Building Library Web Site Using Drupal
Drupal - Introduction to Building Library Web Site Using DrupalDrupal - Introduction to Building Library Web Site Using Drupal
Drupal - Introduction to Building Library Web Site Using Drupal
 
Plone goes social
Plone goes socialPlone goes social
Plone goes social
 
Contributions: what they are and how to find them
Contributions: what they are and how to find themContributions: what they are and how to find them
Contributions: what they are and how to find them
 
Untangling spring week12
Untangling spring week12Untangling spring week12
Untangling spring week12
 
Drupal 8 - What’s cooking?
Drupal 8 - What’s cooking?Drupal 8 - What’s cooking?
Drupal 8 - What’s cooking?
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
C4ainaction-Introduction to the Pyramid Web Framework
C4ainaction-Introduction to the Pyramid Web FrameworkC4ainaction-Introduction to the Pyramid Web Framework
C4ainaction-Introduction to the Pyramid Web Framework
 
Jean Paul Ladage Managing Enterprise Content With Plone
Jean Paul Ladage   Managing Enterprise Content With PloneJean Paul Ladage   Managing Enterprise Content With Plone
Jean Paul Ladage Managing Enterprise Content With Plone
 
Everything You Need to Know About the Top Changes in Drupal 8
Everything You Need to Know About the Top Changes in Drupal 8Everything You Need to Know About the Top Changes in Drupal 8
Everything You Need to Know About the Top Changes in Drupal 8
 
Don’t fight with windmills. Upgrade path tool from OpenY distro - Igor Karpil...
Don’t fight with windmills. Upgrade path tool from OpenY distro - Igor Karpil...Don’t fight with windmills. Upgrade path tool from OpenY distro - Igor Karpil...
Don’t fight with windmills. Upgrade path tool from OpenY distro - Igor Karpil...
 
ChatBots for self-service DevOps
ChatBots for self-service DevOpsChatBots for self-service DevOps
ChatBots for self-service DevOps
 
Drupal and the Future of the Web
Drupal and the Future of the WebDrupal and the Future of the Web
Drupal and the Future of the Web
 
Drupal in-depth
Drupal in-depthDrupal in-depth
Drupal in-depth
 
Introduction to Google Web Toolkit - part 1
Introduction to Google Web Toolkit - part 1Introduction to Google Web Toolkit - part 1
Introduction to Google Web Toolkit - part 1
 
Publishing your open source project
Publishing your open source projectPublishing your open source project
Publishing your open source project
 
OpenY: Scaling and Sharing with Custom Drupal Distribution
OpenY: Scaling and Sharing with Custom Drupal DistributionOpenY: Scaling and Sharing with Custom Drupal Distribution
OpenY: Scaling and Sharing with Custom Drupal Distribution
 
Untangling spring week6
Untangling spring week6Untangling spring week6
Untangling spring week6
 

Similar to Plone Intranet under the hood

Hong Kong Drupal User Group - 2014 March 8th
Hong Kong Drupal User Group - 2014 March 8thHong Kong Drupal User Group - 2014 March 8th
Hong Kong Drupal User Group - 2014 March 8thWong Hoi Sing Edison
 
Drupal Architecture and functionality
Drupal Architecture and functionality Drupal Architecture and functionality
Drupal Architecture and functionality Ann Lam
 
Not my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructureNot my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructureYshay Yaacobi
 
Becoming A Drupal Master Builder
Becoming A Drupal Master BuilderBecoming A Drupal Master Builder
Becoming A Drupal Master BuilderPhilip Norton
 
My "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails ProjectsMy "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails ProjectsGR8Conf
 
DocDoku: Using web technologies in a desktop application. OW2con'15, November...
DocDoku: Using web technologies in a desktop application. OW2con'15, November...DocDoku: Using web technologies in a desktop application. OW2con'15, November...
DocDoku: Using web technologies in a desktop application. OW2con'15, November...OW2
 
DocDokuPLM presentation - OW2Con 2015 Community Award winner
DocDokuPLM presentation - OW2Con 2015 Community Award winnerDocDokuPLM presentation - OW2Con 2015 Community Award winner
DocDokuPLM presentation - OW2Con 2015 Community Award winnerDocDoku
 
Instant developer onboarding with self contained repositories
Instant developer onboarding with self contained repositoriesInstant developer onboarding with self contained repositories
Instant developer onboarding with self contained repositoriesYshay Yaacobi
 
PloneSocial Roadmap PLOG2013
PloneSocial Roadmap PLOG2013PloneSocial Roadmap PLOG2013
PloneSocial Roadmap PLOG2013Guido Stevens
 
Open Innovation Lab (OIL) - 2014 Sep 26th
Open Innovation Lab (OIL) - 2014 Sep 26thOpen Innovation Lab (OIL) - 2014 Sep 26th
Open Innovation Lab (OIL) - 2014 Sep 26thWong Hoi Sing Edison
 
Lupus Decoupled Drupal - Drupal Austria Meetup - 2023-04.pdf
Lupus Decoupled Drupal - Drupal Austria Meetup - 2023-04.pdfLupus Decoupled Drupal - Drupal Austria Meetup - 2023-04.pdf
Lupus Decoupled Drupal - Drupal Austria Meetup - 2023-04.pdfWolfgangZiegler6
 
Netflix Open Source: Building a Distributed and Automated Open Source Program
Netflix Open Source:  Building a Distributed and Automated Open Source ProgramNetflix Open Source:  Building a Distributed and Automated Open Source Program
Netflix Open Source: Building a Distributed and Automated Open Source Programaspyker
 
Building a Distributed & Automated Open Source Program at Netflix
Building a Distributed & Automated Open Source Program at NetflixBuilding a Distributed & Automated Open Source Program at Netflix
Building a Distributed & Automated Open Source Program at NetflixAll Things Open
 
How to plan and define your CI-CD pipeline
How to plan and define your CI-CD pipelineHow to plan and define your CI-CD pipeline
How to plan and define your CI-CD pipelineElasTest Project
 
[20160314][CUHK][CSCI4140]Life of an Agile Team]
[20160314][CUHK][CSCI4140]Life of an Agile Team][20160314][CUHK][CSCI4140]Life of an Agile Team]
[20160314][CUHK][CSCI4140]Life of an Agile Team]Wong Hoi Sing Edison
 
Griffon for the Enterprise
Griffon for the EnterpriseGriffon for the Enterprise
Griffon for the EnterpriseJames Williams
 
Introduction to git & WordPress
Introduction to git & WordPressIntroduction to git & WordPress
Introduction to git & WordPressJosh Lee
 
Android Modularization
Android ModularizationAndroid Modularization
Android ModularizationYoung-Hyuk Yoo
 
Pentester++
Pentester++Pentester++
Pentester++CTruncer
 
Making sense of the front-end, for PHP developers
Making sense of the front-end, for PHP developersMaking sense of the front-end, for PHP developers
Making sense of the front-end, for PHP developersLewiz
 

Similar to Plone Intranet under the hood (20)

Hong Kong Drupal User Group - 2014 March 8th
Hong Kong Drupal User Group - 2014 March 8thHong Kong Drupal User Group - 2014 March 8th
Hong Kong Drupal User Group - 2014 March 8th
 
Drupal Architecture and functionality
Drupal Architecture and functionality Drupal Architecture and functionality
Drupal Architecture and functionality
 
Not my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructureNot my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructure
 
Becoming A Drupal Master Builder
Becoming A Drupal Master BuilderBecoming A Drupal Master Builder
Becoming A Drupal Master Builder
 
My "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails ProjectsMy "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails Projects
 
DocDoku: Using web technologies in a desktop application. OW2con'15, November...
DocDoku: Using web technologies in a desktop application. OW2con'15, November...DocDoku: Using web technologies in a desktop application. OW2con'15, November...
DocDoku: Using web technologies in a desktop application. OW2con'15, November...
 
DocDokuPLM presentation - OW2Con 2015 Community Award winner
DocDokuPLM presentation - OW2Con 2015 Community Award winnerDocDokuPLM presentation - OW2Con 2015 Community Award winner
DocDokuPLM presentation - OW2Con 2015 Community Award winner
 
Instant developer onboarding with self contained repositories
Instant developer onboarding with self contained repositoriesInstant developer onboarding with self contained repositories
Instant developer onboarding with self contained repositories
 
PloneSocial Roadmap PLOG2013
PloneSocial Roadmap PLOG2013PloneSocial Roadmap PLOG2013
PloneSocial Roadmap PLOG2013
 
Open Innovation Lab (OIL) - 2014 Sep 26th
Open Innovation Lab (OIL) - 2014 Sep 26thOpen Innovation Lab (OIL) - 2014 Sep 26th
Open Innovation Lab (OIL) - 2014 Sep 26th
 
Lupus Decoupled Drupal - Drupal Austria Meetup - 2023-04.pdf
Lupus Decoupled Drupal - Drupal Austria Meetup - 2023-04.pdfLupus Decoupled Drupal - Drupal Austria Meetup - 2023-04.pdf
Lupus Decoupled Drupal - Drupal Austria Meetup - 2023-04.pdf
 
Netflix Open Source: Building a Distributed and Automated Open Source Program
Netflix Open Source:  Building a Distributed and Automated Open Source ProgramNetflix Open Source:  Building a Distributed and Automated Open Source Program
Netflix Open Source: Building a Distributed and Automated Open Source Program
 
Building a Distributed & Automated Open Source Program at Netflix
Building a Distributed & Automated Open Source Program at NetflixBuilding a Distributed & Automated Open Source Program at Netflix
Building a Distributed & Automated Open Source Program at Netflix
 
How to plan and define your CI-CD pipeline
How to plan and define your CI-CD pipelineHow to plan and define your CI-CD pipeline
How to plan and define your CI-CD pipeline
 
[20160314][CUHK][CSCI4140]Life of an Agile Team]
[20160314][CUHK][CSCI4140]Life of an Agile Team][20160314][CUHK][CSCI4140]Life of an Agile Team]
[20160314][CUHK][CSCI4140]Life of an Agile Team]
 
Griffon for the Enterprise
Griffon for the EnterpriseGriffon for the Enterprise
Griffon for the Enterprise
 
Introduction to git & WordPress
Introduction to git & WordPressIntroduction to git & WordPress
Introduction to git & WordPress
 
Android Modularization
Android ModularizationAndroid Modularization
Android Modularization
 
Pentester++
Pentester++Pentester++
Pentester++
 
Making sense of the front-end, for PHP developers
Making sense of the front-end, for PHP developersMaking sense of the front-end, for PHP developers
Making sense of the front-end, for PHP developers
 

More from Guido Stevens

Filter Bubbles - the discovery of tacit knowledge
Filter Bubbles - the discovery of tacit knowledgeFilter Bubbles - the discovery of tacit knowledge
Filter Bubbles - the discovery of tacit knowledgeGuido Stevens
 
Designing for Culture Change
Designing for Culture ChangeDesigning for Culture Change
Designing for Culture ChangeGuido Stevens
 
The state of Plone Intranet
The state of Plone IntranetThe state of Plone Intranet
The state of Plone IntranetGuido Stevens
 
Plone Intranet Consortium - united we stand, divided we fall
Plone Intranet Consortium - united we stand, divided we fallPlone Intranet Consortium - united we stand, divided we fall
Plone Intranet Consortium - united we stand, divided we fallGuido Stevens
 
Share content across subsites in Plone: cultact.subsite
Share content across subsites in Plone: cultact.subsiteShare content across subsites in Plone: cultact.subsite
Share content across subsites in Plone: cultact.subsiteGuido Stevens
 
Plonesocial Roadmap PloneConf 2013
Plonesocial Roadmap PloneConf 2013Plonesocial Roadmap PloneConf 2013
Plonesocial Roadmap PloneConf 2013Guido Stevens
 
High-performance high-availability Plone
High-performance high-availability PloneHigh-performance high-availability Plone
High-performance high-availability PloneGuido Stevens
 

More from Guido Stevens (8)

Filter Bubbles - the discovery of tacit knowledge
Filter Bubbles - the discovery of tacit knowledgeFilter Bubbles - the discovery of tacit knowledge
Filter Bubbles - the discovery of tacit knowledge
 
Designing for Culture Change
Designing for Culture ChangeDesigning for Culture Change
Designing for Culture Change
 
The state of Plone Intranet
The state of Plone IntranetThe state of Plone Intranet
The state of Plone Intranet
 
Plone Intranet Consortium - united we stand, divided we fall
Plone Intranet Consortium - united we stand, divided we fallPlone Intranet Consortium - united we stand, divided we fall
Plone Intranet Consortium - united we stand, divided we fall
 
Share content across subsites in Plone: cultact.subsite
Share content across subsites in Plone: cultact.subsiteShare content across subsites in Plone: cultact.subsite
Share content across subsites in Plone: cultact.subsite
 
Plonesocial Roadmap PloneConf 2013
Plonesocial Roadmap PloneConf 2013Plonesocial Roadmap PloneConf 2013
Plonesocial Roadmap PloneConf 2013
 
High-performance high-availability Plone
High-performance high-availability PloneHigh-performance high-availability Plone
High-performance high-availability Plone
 
Door to door
Door to doorDoor to door
Door to door
 

Recently uploaded

%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 midrandmasabamasaba
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfkalichargn70th171
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
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-...Steffen Staab
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyviewmasabamasaba
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
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...panagenda
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...masabamasaba
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
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 studentsHimanshiGarg82
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024VictoriaMetrics
 
%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 tembisamasabamasaba
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
tonesoftg
tonesoftgtonesoftg
tonesoftglanshi9
 

Recently uploaded (20)

%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
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
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-...
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
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...
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
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 kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
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
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
%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
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 

Plone Intranet under the hood

  • 1. Plone Intranet under the hood Guido Stevens @GuidoStevens cosent.nl Social Knowledge Technology
  • 2. it starts with a vision
  • 3. Once upon a time... ● 2010 Intranet designer at Syslab ● 2011 Created Patternslib ● 2012Mockup forked ● 2014 Plone Intranet Designer ● 2015 Mockup merged ● 2015 Plone 5.0 released ● 2015 Plone Intranet 1.0 released
  • 6. Patternslib ● Separate Github organization ● Multipe repositories ● Some patterns live elsewhere ● Provides: Javascript – markup + CSS only for documentation purposes
  • 7. Prototype ● Separate repository ● In ploneintranet Github org ● No Javascript – downloads patternslib bundle ● No Plone – hand-crafted markup ● Standalone clickable prototype – Jekyll static page templates ● Provides: CSS, images ● Defines: HTML markup
  • 9.
  • 10.
  • 11. post-box is our most complex frontend element
  • 12. post-box is our most complex frontend element ● pat-content-mirror ● pat-inject ● pat-switch ● pat-subform ● pat-autosubmit
  • 17. pat-inject <form id="post-box" class="pat-inject update-social status-inactive" action="/feedback/post-well-done.html" data-pat-inject="source: #activity-stream; target: #activity-stream .activities::before && #new-post-box" >
  • 18. pat-inject executes AJAX request ● activated by pat-inject class ● fetches action page URL ● extracts source #selector ● replaces current page target selector ● optionally replaces second && target selector <form id="post-box" class="pat-inject update-social status-inactive" action="/feedback/post-well-done.html" data-pat-inject=" source: #activity-stream; target: #activity-stream .activities::before && #new-post-box" >
  • 19. pat-inject executes AJAX request ● activated by pat-inject class ● fetches action page URL ● extracts source #selector ● replaces current page target selector ● optionally replaces second && target selector
  • 20.
  • 21. learn more at patternslib.com ● + 2 talks by JCBrand
  • 22. putting it all together
  • 23. ploneintranet/ploneintranet ● single repository ● single egg distribution ● 23 separate packages – separate GS profiles – separate test suites
  • 24. separation of concerns (1) patternslib ● javascript prototype ● CSS ● markup definition ploneintranet ● python & Plone ● markup implementation
  • 25.
  • 27. separation of concerns (2) ploneintranet.theme ● no views or templates ● diazo transforms ● CSS bundle – from proto ● JS bundle – compile / download ploneintranet.layout ● globally used views & templates – menu bar – dashboard ● App protocol – context sensitive browser layers ploneintranet.suite ● no views or templates ● only package that depends on ploneintranet.theme ● integrates all other ploneintranet.* ● robot tests on all ploneintranet.*
  • 28. customization entry points ploneintranet.theme ● no views or templates ● diazo transforms ● CSS bundle – from proto ● JS bundle – compile / download ploneintranet.suite ● no views or templates ● only package that depends on ploneintranet.theme ● integrates all other ploneintranet.* ● robot tests on all ploneintranet.*
  • 29. don't customize, generalize ● it's a product – not a framework – highly integrated ● it's an application – not a website – minimal branding ● forking is costly – to build – to maintain even more ● generalize feature requests – “good idea” test: useful for others – high quality generic solution – share future maintenance – improve core product ● customize configuration not code – avoid hardcoding current business logic – avoid UX uglification
  • 30. Just A Bunch Of Add-ons – No More! All pages hand-crafted markup ● No z3c.form generated pages ● No “developer design”... ● Add-on integration requires design
  • 31. Just A Bunch Of Add-ons – No More! All pages hand-crafted markup ● No z3c.form generated pages ● No “developer design”... ● Add-on integration requires design This is a product, not a framework ● Consistent, superior UX ● High quality polished product ● Focus on OOTB product re-use
  • 32. how to make money then? ● free != beer ● business analysis – information flows – social structure ● configure system – case workflows – teamspace structure ● integration – authentication – other systems ● enhancements – build new features – improve existing features ● deployment ● training ● support – fix bugs – upgrades ● analytics
  • 33. re-use opportunities ● whole product – use as base for client project – collaborate with partners – expand roadmap ● library mode – depend on ploneintranet – load only individual packages ● network (tagging) ● async ● themeswitcher ● layout (app protocol)
  • 35. statistics ● 49 contributors ● 6800+ commits ● 835 tests ● 87% test coverage (excl. robot) ● sloccount: – python: 23.9 k (85%) – xml: 3.8 k (13%) ● investment ~ € 750 000
  • 36. built on Plone 5 ● moved to Plone5 a2 in 2014 ● took some initial effort ● smooth sailing since ● now we don't have to port :-) ● now we don't have to support Plone4 :-) ● we don't expose Barceloneta – except where we do: themeswitcher
  • 37. package groups ● frontend – theme – themeswitcher ● integration – suite – api ● sitewide – layout – notifications – messaging ● workspaces – workspace – todo ● users – userprofile – invitations ● standalone apps – search – library ● previews – attachments – docconv – async ● plonesocial – microblog – activitystream – network – (misc legacy)
  • 38.
  • 39. integration ploneintranet.suite ● :default loads all package profiles ● :testing creates demo site ● runs all robot tests – from all packages – in fully themed site – on :testing content ploneintranet.api ● all developers are lazy :-)
  • 40. search ● Solr based ● Elasticsearch future option ● faceted ● “livesearch” ● standalone – ZCatalog elsewhere
  • 41. “plonesocial” ● status updates ● mentions ● tags ● attachments – previews ● reply, re-share ● filter by ”following” network ● like
  • 42.
  • 43.
  • 44. personalized data structures ● Btree persistent dictionaries ● Arnold follows Bernard ● Claire likes your update ● Denise endorses Ellen for skill X ● Generic personalized tagging behavior overrides DC: <user> tags <object> with <tag>
  • 45. ploneintranet.network ● Btree persistent dictionaries ● Arnold follows Bernard ● Claire likes your update ● Denise endorses Ellen for skill X ● Generic personalized tagging behavior overrides DC: <user> tags <object> with <tag>
  • 46. user profiles ● dexterity.membrane ● personalized data – personal stream – endorsements – followers/following – likes ● import view for management ● assumes AD/LDAP – but not required ● see talk by Matt Sital Singh
  • 47. team spaces and case management ● based on collective.workspace ● simplify security management ● single trust zone ● document management ● activity stream ● adaptive case management: – workflowed team space – todo centered – see talk by Alexander Pilz
  • 48. document previews ● based on collective.documentviewer ● .* → pdf → png screenshot ● stored as annotations on files ● used in all file listings – workspace – activity stream – search results ● WIP: async conversion
  • 49. async ● super minimalistic – 478 SLOC ● no ZODB queue handling – use Celery – use Redis ● async request dispatch ● handle in browser view – normal view security – easy to debug
  • 50. ploneintranet.async ● super minimalistic – 478 SLOC ● no ZODB queue handling – use Celery – use Redis ● async request dispatch ● handle in browser view – normal view security – easy to debug ● generically re-usable
  • 51.
  • 52. theme switcher ● fallback to Barceloneta – control panels – raw editing ● cms.localhost:8080/Plone – configurable switch host ● plone.app.theming policy API ● ploneintranet.themeswitcher implementation
  • 53.
  • 54. ploneintranet.themeswitcher ● fallback to Barceloneta – control panels – raw editing ● cms.localhost:8080/Plone – configurable switch host ● plone.app.theming policy API ● ploneintranet.themeswitcher implementation
  • 55.
  • 56. context-sensitive browserlayer switching ● Use case – “Document” in workspace – “Document” in library – different default view – same portal type ● App protocol – toplevel traverse event handler – disable “other” IAppLayer – enable “own” IAppLayer ● Mixin class for easy usage
  • 57. ploneintranet.layout ● Use case – “Document” in workspace – “Document” in library – different default view – same portal type ● App protocol – toplevel traverse event handler – disable “other” IAppLayer – enable “own” IAppLayer ● Mixin class for easy usage
  • 58.
  • 59.
  • 60. Roadmap ● Content updates ● Notifications ● Mobile Push ● News hub ● Calendaring ● Auto-tagging ● Org charts ● ….
  • 61. learn more ● Product and services: quaive.com ● Developer documentation: docs.ploneintranet.org ● Sources and issue tracker: github.com/ploneintranet/ploneintranet