SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
Pragmatic	
  Plone	
  Projects	
  

     Plone	
  Conference	
  2012	
  
               Arnhem	
  

               Andreas	
  Jung	
  	
  
                ZOPYX	
  Ltd.	
  
     www.zopyx.com,	
  info@zopyx.com	
  
Speaker	
  
•  long-­‐time	
  Python,	
  Zope,	
  	
  
   Plone	
  developer	
  	
  and	
  contributor	
  
•  Lead	
  developer	
  and	
  principal	
  consultant	
  of	
  	
  
   ZOPYX	
  Limited	
  
    –  Zope,	
  Python,	
  Pyramid,	
  Plone	
  projects	
  
    –  large	
  portals,	
  intranet,	
  internet,	
  extranet	
  
    –  Electronic	
  Publishing	
  
    –  complex	
  domain-­‐specific	
  applications	
  	
  
This	
  talk	
  is	
  about	
  
•  practical	
  hints	
  surviving	
  your	
  next	
  	
  
   Plone	
  project	
  
•  best	
  practices	
  
•  lessons	
  learned	
  from	
  our	
  last	
  	
  
   larger	
  Plone	
  project	
  
•  stuff	
  perhaps	
  covered	
  already	
  by	
  the	
  	
  
   Plone	
  trainings	
  
Relaunch	
  weishaupt.de	
  
•  Weishaupt:	
  	
  
    –  major	
  vendor	
  of	
  heating	
  systems	
  
    –  480	
  M€	
  revenue	
  
•  Large	
  company	
  portal	
  on	
  top	
  of	
  Plone	
  4.2	
  
•  Phase	
  1:	
  
    –  implementation	
  and	
  DE	
  content	
  
    –  4	
  months	
  
•  Phase	
  2:	
  
    –  20	
  subsidaries 	
  	
  
    –  more	
  than	
  30	
  languages	
  
weishaupt.de	
  
weishaupt.de	
  
weishaupt.de	
  
weishaupt.de	
  
weishaupt.de	
  
Project	
  constraints	
  (1/3)	
  

There	
  is	
  no	
  real-­‐world	
  project	
  with	
  

•  unlimited	
  budget	
  

•  unlimited	
  human	
  resources	
  

•  unlimited	
  time	
  
Project	
  constraints	
  (2/3)	
  

                 Resources	
  




    Budget	
                     Time	
  
Project	
  constraints	
  (3/3)	
  


Conclusions	
  

•  usually	
  impossible	
  finding	
  the	
  	
  
   „perfect“	
  solution	
  

•  the	
  	
  „perfect“	
  solution	
  is	
  	
  „mission	
  impossible“	
  
Getting	
  things	
  done	
  
•  within	
  a	
  reasonable	
  time-­‐frame	
  

•  on	
  budget	
  

•  with	
  the	
  available	
  human	
  resources	
  
Common	
  customizations	
  
•  Bugs	
  in	
  Plone	
  and	
  3rd-­‐party	
  packages	
  
   are	
  all	
  around	
  you	
  
•  Particular	
  behavior	
  of	
  Plone	
  or	
  3rd-­‐party	
  
   packages	
  is	
  a	
  common	
  project	
  requirement	
  
•  What	
  must	
  be	
  usually	
  customized:	
  
    –  Python	
  code	
  (browser	
  views,	
  skin	
  scripts)	
  
    –  Resources	
  (browser	
  view	
  templates,	
  JS,	
  CSS)	
  
Where	
  to	
  fix	
  things?	
  
•  Package	
  maintainer	
  (Plone	
  and	
  3rd-­‐party)	
  love	
  
      –  bug	
  reports	
  
      –  bug	
  fixes	
  
      –  contributions	
  
•  Stuff	
  on	
  Github:	
  Fork	
  &	
  Pull	
  request	
  
•  SVN	
  repositories:	
  svn	
  branch	
  &	
  svn	
  merge	
  
      –  check	
  if	
  the	
  package	
  is	
  maintained	
  
      –  ask	
  the	
  maintainer	
  for	
  merging	
  your	
  changes	
  or	
  merge	
  yourself	
  
      –  move	
  packages	
  to	
  Github	
  if	
  appropriate	
  
Where	
  and	
  how	
  to	
  	
  
                     customize	
  things?	
  
•  Is	
  your	
  required	
  change	
  of	
  interest	
  for	
  the	
  public?	
  
    –  fork	
  on	
  Github	
  
    –  branch	
  in	
  SVN	
  
    –  speak	
  with	
  the	
  package	
  maintainers	
  

•  Your	
  change	
  satisfies	
  an	
  absurd	
  customer	
  
   request?	
  
    –  keep	
  it	
  for	
  yourself.	
  
(Monkey)	
  Patching	
  Python	
  code	
  
 •  Monkey	
  patching:	
  	
  
    „dynamic	
  modifications	
  of	
  a	
  class	
  or	
  module	
  at	
  runtime“	
  
    (Source:	
  Wikipedia)	
  

 •  MP	
  in	
  general	
  should	
  be	
  considered	
  evil	
  and	
  bad-­‐style	
  
 •  MP	
  may	
  have	
  side-­‐effects	
  
 •  Use	
  MP	
  carefully	
  (and	
  only	
  when	
  you	
  know	
  what	
  you	
  are	
  
    doing)	
  
Monkey	
  patching	
  in	
  Python	
  
      Original	
  (foo.py)	
             Patched	
  version	
  (my_foo.py)	
  
class Foo:!                      def my_bar(self):!
!                                    return 43!
    def bar(self):!              !
           return 42!            from foo import Foo!
                                 Foo.bar = my_bar!
                                 !
                                 # or (needed in some situations)!
                                 !
                                 Foo.bar.func_code = my_bar.func_code!
Monkey	
  patching	
  Plone	
  
                                   collective.monkeypatcher	
  (patches.zcml)	
  
ZCML-­‐level	
  configuration	
  of	
  patching	
     <configure...>!
                                                         <include package="collective.monkeypatcher" />!
information:	
                                           <monkey:patch!
•  module-­‐level	
  patches	
                               description="ISE-42: OFS.Image.tag()"!
•  class-­‐level	
  patches	
                                class="Products.CMFCore.FSImage.FSImage"!
                                                             original="tag"!
                                                             replacement=".patches.tag"!
                                                             />!
                                                     </configure>!




                          collective.monkeypatcherpanel	
  (patches.zcml)	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
Patching	
  resources	
  (1/2)	
  –	
  
                     overrides.zcml	
  
     •  Standard	
  mechanism	
  for	
  overriding	
  configuration	
  
        settings	
  introduced	
  through	
  a	
  different	
  package	
  
     •  overrides.zcml	
  is	
  an	
  optional	
  ZCML	
  configuration	
  file	
  
    Products.PloneGlossary	
  (configure.zcml)	
             my.package	
  (overrides.zcml)	
  
<configure..> !                                     <configure..> !
  <browser:page!                                      <browser:page!
       name="glossary_main_page“         !                 name="glossary_main_page"!
    for="Products.PloneGlossary.IPloneGlossary"!        for="Products.PloneGlossary.IPloneGlossary"!
       class=".pages.GlossaryMainPage"!                    class=".glossary.GlossaryView“!
       permission="zope2.View“ />!                         permission="zope2.View“ />!
</configure>!                                       </configure>!
                                                    !
Patching	
  resources	
  (2/2)	
  –	
  z3c.jbot	
  

•  z3c.jbot	
  allows	
  you	
  to	
  override	
  resources	
  of	
  other	
  
     packages	
  inside	
  your	
  own	
  policy	
  package	
  
•  Limited	
  to	
  .pt,	
  .cpt,	
  .js?!	
  
Configuration:	
  <browser:jbot	
  	
  directory=“overrides“	
  />	
  

Existing	
  template:	
  plone.app.search/plone/app/search/search.pt	
  

Customization:	
  your.package/your/package/overrides/plone.app.search.search.pt	
  

Links	
  
•    http://blog.keul.it/2011/06/z3cjbot-­‐magical-­‐with-­‐your-­‐skins.html	
  
•    http://pypi.python.org/pypi/z3c.jbot	
  
Unconfigure	
  	
  
                resource	
  configurations	
  
   •  Sometimes	
  you	
  just	
  don‘t	
  want	
  or	
  need	
  ZCML	
  
      configurations	
  introduced	
  by	
  other	
  packages	
  
   •  z3c.unconfigure	
  is	
  your	
  friend	
  
        some.package(configure.zcml)	
                    my.package	
  (configure.zcml)	
  
<configure..> !                                   <configure..> !
  <browser:page!                                    <include package="z3c.unconfigure"     !
       name="glossary_main_page“          !                  file="meta.zcml" />!
   for="Products.PloneGlossary.IPloneGlossary"!     <unconfigure>!
       class=".pages.GlossaryMainPage"!               <browser:page!
       permission="zope2.View“ />!                         name="glossary_main_page“   !
</configure>!                                        for="Products.PloneGlossary.IPloneGlossary"!
                                                           class=".glossary.GlossaryView“!
                                                           permission="zope2.View“ />!
                                                    </unconfigure>!
                                                  </configure>!
                                                  	
  
Extending	
  schemas	
  
Plone	
  comes	
  with	
  two	
  content-­‐type	
  systems	
  
•  Archetypes	
  (old-­‐style)	
  
     –  use	
  archetypes.schemaextender	
  
     –  modify	
  any	
  AT-­‐based	
  content-­‐type	
  
         (modifying	
  fields,	
  adding	
  fields)	
  
     –  SchemaExtender,	
  SchemaModifier	
  
•  Dexterity	
  (new-­‐style)	
  
     –  Dexterity	
  introduces	
  „behaviors“	
  
     –  „A	
  behavior	
  is	
  a	
  re-­‐usable	
  aspect	
  of	
  an	
  object	
  that	
  can	
  be	
  enabled	
  or	
  
         disabled	
  without	
  changing	
  the	
  component	
  registry“	
  	
  
         (Source:	
  Dexterity	
  developer	
  manual)	
  
Keep	
  your	
  designer	
  happy	
  

   Implementing	
  CSS	
  styles	
  	
  
requires	
  representative	
  content	
  



  http://localhost:8080/@@new-site?content=1!
Auto-­‐generated	
  content	
  
Predefined	
  sample	
  content	
  
•  Write	
  a	
  browser	
  view	
  
    –  creating	
  a	
  Plone	
  site	
  with	
  policy	
  package	
  +	
  add-­‐ons	
  
    –  installing	
  the	
  basic	
  site-­‐structure	
  
    –  creating	
  example	
  content	
  for	
  each	
  content-­‐type,	
  content-­‐
       listing	
  etc	
  

•  use	
  http://lorempixel.com/600/400	
  ...	
  
•  look	
  at	
  loremipsum,	
  collective.loremipsum	
  or	
  
   zopyx.ipsumplone	
  
Predefined	
  sample	
  content	
  
•  Throw	
  your	
  sandbox/Plone	
  working	
  site	
  away	
  	
  
   as	
  often	
  as	
  possible	
  
•  sometimes	
  I	
  created	
  30-­‐40	
  new	
  Plone	
  sites	
  per	
  day	
  
•  Pragmatic	
  side-­‐effect	
  
    –  the	
  content	
  fixture	
  code	
  can	
  be	
  used	
  as	
  unit	
  test	
  where	
  all	
  
        your	
  content-­‐types	
  and	
  site-­‐infrastructure	
  is	
  created	
  and	
  
        tested	
  in	
  one	
  run	
  
    –  not	
  the	
  best	
  solution	
  but	
  it	
  works	
  reasonably	
  well	
  
Some	
  good	
  hints	
  
•  Never	
  ever	
  perform	
  customizations	
  in-­‐place	
  in	
  
   existing	
  3rd-­‐party	
  packages.	
  NEVER!!!	
  	
  
•  Customizations	
  always	
  belong	
  into	
  your	
  own	
  
   policy	
  package.	
  
•  Local	
  customizations	
  of	
  3rd-­‐party	
  package	
  will	
  
   be	
  lost	
  with	
  the	
  next	
  version	
  of	
  customized	
  
   package.	
  
Questions?	
  

Weitere ähnliche Inhalte

Was ist angesagt?

Getting started with Django 1.8
Getting started with Django 1.8Getting started with Django 1.8
Getting started with Django 1.8rajkumar2011
 
Puppet Virtual Bolt Workshop - 23 April 2020 (Singapore)
Puppet Virtual Bolt Workshop - 23 April 2020 (Singapore)Puppet Virtual Bolt Workshop - 23 April 2020 (Singapore)
Puppet Virtual Bolt Workshop - 23 April 2020 (Singapore)Puppet
 
Dexterity in 15 minutes or less
Dexterity in 15 minutes or lessDexterity in 15 minutes or less
Dexterity in 15 minutes or lessrijk.stofberg
 
On the Edge Systems Administration with Golang
On the Edge Systems Administration with GolangOn the Edge Systems Administration with Golang
On the Edge Systems Administration with GolangChris McEniry
 
Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)
Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)
Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)Robert Nelson
 
PyGrunn 2017 - Django Performance Unchained - slides
PyGrunn 2017 - Django Performance Unchained - slidesPyGrunn 2017 - Django Performance Unchained - slides
PyGrunn 2017 - Django Performance Unchained - slidesArtur Barseghyan
 
Can you upgrade to Puppet 4.x?
Can you upgrade to Puppet 4.x?Can you upgrade to Puppet 4.x?
Can you upgrade to Puppet 4.x?Martin Alfke
 
Puppet modules: A Holistic Approach - Geneva
Puppet modules: A Holistic Approach - GenevaPuppet modules: A Holistic Approach - Geneva
Puppet modules: A Holistic Approach - GenevaAlessandro Franceschi
 
PowerShell - Be A Cool Blue Kid
PowerShell - Be A Cool Blue KidPowerShell - Be A Cool Blue Kid
PowerShell - Be A Cool Blue KidMatthew Johnson
 
Go for SysAdmins - LISA 2015
Go for SysAdmins - LISA 2015Go for SysAdmins - LISA 2015
Go for SysAdmins - LISA 2015Chris McEniry
 
Sunil phani's take on windows powershell
Sunil phani's take on windows powershellSunil phani's take on windows powershell
Sunil phani's take on windows powershellSunil Phani
 
Doing It Wrong with Puppet -
Doing It Wrong with Puppet - Doing It Wrong with Puppet -
Doing It Wrong with Puppet - Puppet
 
Get Django, Get Hired - An opinionated guide to getting the best job, for the...
Get Django, Get Hired - An opinionated guide to getting the best job, for the...Get Django, Get Hired - An opinionated guide to getting the best job, for the...
Get Django, Get Hired - An opinionated guide to getting the best job, for the...Marcel Chastain
 

Was ist angesagt? (20)

Getting started with Django 1.8
Getting started with Django 1.8Getting started with Django 1.8
Getting started with Django 1.8
 
Puppet @ Seat
Puppet @ SeatPuppet @ Seat
Puppet @ Seat
 
Puppet Virtual Bolt Workshop - 23 April 2020 (Singapore)
Puppet Virtual Bolt Workshop - 23 April 2020 (Singapore)Puppet Virtual Bolt Workshop - 23 April 2020 (Singapore)
Puppet Virtual Bolt Workshop - 23 April 2020 (Singapore)
 
Anatomy of a reusable module
Anatomy of a reusable moduleAnatomy of a reusable module
Anatomy of a reusable module
 
Dexterity in 15 minutes or less
Dexterity in 15 minutes or lessDexterity in 15 minutes or less
Dexterity in 15 minutes or less
 
On the Edge Systems Administration with Golang
On the Edge Systems Administration with GolangOn the Edge Systems Administration with Golang
On the Edge Systems Administration with Golang
 
Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)
Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)
Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)
 
PyGrunn 2017 - Django Performance Unchained - slides
PyGrunn 2017 - Django Performance Unchained - slidesPyGrunn 2017 - Django Performance Unchained - slides
PyGrunn 2017 - Django Performance Unchained - slides
 
Can you upgrade to Puppet 4.x?
Can you upgrade to Puppet 4.x?Can you upgrade to Puppet 4.x?
Can you upgrade to Puppet 4.x?
 
Puppet modules: A Holistic Approach - Geneva
Puppet modules: A Holistic Approach - GenevaPuppet modules: A Holistic Approach - Geneva
Puppet modules: A Holistic Approach - Geneva
 
Puppet: From 0 to 100 in 30 minutes
Puppet: From 0 to 100 in 30 minutesPuppet: From 0 to 100 in 30 minutes
Puppet: From 0 to 100 in 30 minutes
 
PowerShell - Be A Cool Blue Kid
PowerShell - Be A Cool Blue KidPowerShell - Be A Cool Blue Kid
PowerShell - Be A Cool Blue Kid
 
Go for SysAdmins - LISA 2015
Go for SysAdmins - LISA 2015Go for SysAdmins - LISA 2015
Go for SysAdmins - LISA 2015
 
Sunil phani's take on windows powershell
Sunil phani's take on windows powershellSunil phani's take on windows powershell
Sunil phani's take on windows powershell
 
Tornadoweb
TornadowebTornadoweb
Tornadoweb
 
Puppet modules for Fun and Profit
Puppet modules for Fun and ProfitPuppet modules for Fun and Profit
Puppet modules for Fun and Profit
 
Doing It Wrong with Puppet -
Doing It Wrong with Puppet - Doing It Wrong with Puppet -
Doing It Wrong with Puppet -
 
Get Django, Get Hired - An opinionated guide to getting the best job, for the...
Get Django, Get Hired - An opinionated guide to getting the best job, for the...Get Django, Get Hired - An opinionated guide to getting the best job, for the...
Get Django, Get Hired - An opinionated guide to getting the best job, for the...
 
Hdfs java api
Hdfs java apiHdfs java api
Hdfs java api
 
Php on Windows
Php on WindowsPhp on Windows
Php on Windows
 

Andere mochten auch

Frequently asked questions answered frequently - but now for the last time
Frequently asked questions answered frequently - but now for the last timeFrequently asked questions answered frequently - but now for the last time
Frequently asked questions answered frequently - but now for the last timeAndreas Jung
 
State Of Zope Linuxtag 2008
State Of Zope Linuxtag 2008State Of Zope Linuxtag 2008
State Of Zope Linuxtag 2008Andreas Jung
 
Integration of Plone with eXist-db
Integration of Plone with eXist-dbIntegration of Plone with eXist-db
Integration of Plone with eXist-dbAndreas Jung
 
Onkopedia - Ein medizinisches Leitlinienportal auf dem Weg zu XML-basierten P...
Onkopedia - Ein medizinisches Leitlinienportal auf dem Weg zu XML-basierten P...Onkopedia - Ein medizinisches Leitlinienportal auf dem Weg zu XML-basierten P...
Onkopedia - Ein medizinisches Leitlinienportal auf dem Weg zu XML-basierten P...Andreas Jung
 
XML Director - the technical foundation of onkopedia.com
XML Director - the technical foundation of onkopedia.comXML Director - the technical foundation of onkopedia.com
XML Director - the technical foundation of onkopedia.comAndreas Jung
 
BRAINREPUBLIC - Powered by no-SQL
BRAINREPUBLIC - Powered by no-SQLBRAINREPUBLIC - Powered by no-SQL
BRAINREPUBLIC - Powered by no-SQLAndreas Jung
 
Producing high-quality documents with Plone
Producing high-quality documents with PloneProducing high-quality documents with Plone
Producing high-quality documents with PloneAndreas Jung
 
Plone Integration with eXist-db - Structured Content rocks
Plone Integration with eXist-db - Structured Content rocksPlone Integration with eXist-db - Structured Content rocks
Plone Integration with eXist-db - Structured Content rocksAndreas Jung
 
Plone4Universities
Plone4UniversitiesPlone4Universities
Plone4UniversitiesAndreas Jung
 
Making Py Pi Sux Less Key
Making Py Pi Sux Less KeyMaking Py Pi Sux Less Key
Making Py Pi Sux Less KeyAndreas Jung
 
Produce & Publish Authoring Environment V 2.0 (english version)
Produce & Publish Authoring Environment V 2.0 (english version)Produce & Publish Authoring Environment V 2.0 (english version)
Produce & Publish Authoring Environment V 2.0 (english version)Andreas Jung
 
Produce & Publish Authoring Environment World Plone Day 2010 - Berlin
Produce & Publish Authoring Environment World Plone Day 2010 - BerlinProduce & Publish Authoring Environment World Plone Day 2010 - Berlin
Produce & Publish Authoring Environment World Plone Day 2010 - BerlinAndreas Jung
 
Building bridges - Plone Conference 2015 Bucharest
Building bridges   - Plone Conference 2015 BucharestBuilding bridges   - Plone Conference 2015 Bucharest
Building bridges - Plone Conference 2015 BucharestAndreas Jung
 
CSS Paged Media - A review of tools and techniques
CSS Paged Media - A review of tools and techniquesCSS Paged Media - A review of tools and techniques
CSS Paged Media - A review of tools and techniquesAndreas Jung
 
Why Plone Will Die
Why Plone Will DieWhy Plone Will Die
Why Plone Will DieAndreas Jung
 
Why we love ArangoDB. The hunt for the right NosQL Database
Why we love ArangoDB. The hunt for the right NosQL DatabaseWhy we love ArangoDB. The hunt for the right NosQL Database
Why we love ArangoDB. The hunt for the right NosQL DatabaseAndreas Jung
 
Konfigurationsgesteuerte Buildouts Dzug 2008
Konfigurationsgesteuerte Buildouts   Dzug 2008Konfigurationsgesteuerte Buildouts   Dzug 2008
Konfigurationsgesteuerte Buildouts Dzug 2008Andreas Jung
 
Onkopedia - ein medizinisches Fachportal auf Basis von Plone
Onkopedia  - ein medizinisches Fachportal auf Basis von PloneOnkopedia  - ein medizinisches Fachportal auf Basis von Plone
Onkopedia - ein medizinisches Fachportal auf Basis von PloneAndreas Jung
 
zopyx.plone migration - Plone Hochschultagung 2013
zopyx.plone migration - Plone Hochschultagung 2013zopyx.plone migration - Plone Hochschultagung 2013
zopyx.plone migration - Plone Hochschultagung 2013Andreas Jung
 
Produce & Publish Cloud Edition
Produce & Publish Cloud EditionProduce & Publish Cloud Edition
Produce & Publish Cloud EditionAndreas Jung
 

Andere mochten auch (20)

Frequently asked questions answered frequently - but now for the last time
Frequently asked questions answered frequently - but now for the last timeFrequently asked questions answered frequently - but now for the last time
Frequently asked questions answered frequently - but now for the last time
 
State Of Zope Linuxtag 2008
State Of Zope Linuxtag 2008State Of Zope Linuxtag 2008
State Of Zope Linuxtag 2008
 
Integration of Plone with eXist-db
Integration of Plone with eXist-dbIntegration of Plone with eXist-db
Integration of Plone with eXist-db
 
Onkopedia - Ein medizinisches Leitlinienportal auf dem Weg zu XML-basierten P...
Onkopedia - Ein medizinisches Leitlinienportal auf dem Weg zu XML-basierten P...Onkopedia - Ein medizinisches Leitlinienportal auf dem Weg zu XML-basierten P...
Onkopedia - Ein medizinisches Leitlinienportal auf dem Weg zu XML-basierten P...
 
XML Director - the technical foundation of onkopedia.com
XML Director - the technical foundation of onkopedia.comXML Director - the technical foundation of onkopedia.com
XML Director - the technical foundation of onkopedia.com
 
BRAINREPUBLIC - Powered by no-SQL
BRAINREPUBLIC - Powered by no-SQLBRAINREPUBLIC - Powered by no-SQL
BRAINREPUBLIC - Powered by no-SQL
 
Producing high-quality documents with Plone
Producing high-quality documents with PloneProducing high-quality documents with Plone
Producing high-quality documents with Plone
 
Plone Integration with eXist-db - Structured Content rocks
Plone Integration with eXist-db - Structured Content rocksPlone Integration with eXist-db - Structured Content rocks
Plone Integration with eXist-db - Structured Content rocks
 
Plone4Universities
Plone4UniversitiesPlone4Universities
Plone4Universities
 
Making Py Pi Sux Less Key
Making Py Pi Sux Less KeyMaking Py Pi Sux Less Key
Making Py Pi Sux Less Key
 
Produce & Publish Authoring Environment V 2.0 (english version)
Produce & Publish Authoring Environment V 2.0 (english version)Produce & Publish Authoring Environment V 2.0 (english version)
Produce & Publish Authoring Environment V 2.0 (english version)
 
Produce & Publish Authoring Environment World Plone Day 2010 - Berlin
Produce & Publish Authoring Environment World Plone Day 2010 - BerlinProduce & Publish Authoring Environment World Plone Day 2010 - Berlin
Produce & Publish Authoring Environment World Plone Day 2010 - Berlin
 
Building bridges - Plone Conference 2015 Bucharest
Building bridges   - Plone Conference 2015 BucharestBuilding bridges   - Plone Conference 2015 Bucharest
Building bridges - Plone Conference 2015 Bucharest
 
CSS Paged Media - A review of tools and techniques
CSS Paged Media - A review of tools and techniquesCSS Paged Media - A review of tools and techniques
CSS Paged Media - A review of tools and techniques
 
Why Plone Will Die
Why Plone Will DieWhy Plone Will Die
Why Plone Will Die
 
Why we love ArangoDB. The hunt for the right NosQL Database
Why we love ArangoDB. The hunt for the right NosQL DatabaseWhy we love ArangoDB. The hunt for the right NosQL Database
Why we love ArangoDB. The hunt for the right NosQL Database
 
Konfigurationsgesteuerte Buildouts Dzug 2008
Konfigurationsgesteuerte Buildouts   Dzug 2008Konfigurationsgesteuerte Buildouts   Dzug 2008
Konfigurationsgesteuerte Buildouts Dzug 2008
 
Onkopedia - ein medizinisches Fachportal auf Basis von Plone
Onkopedia  - ein medizinisches Fachportal auf Basis von PloneOnkopedia  - ein medizinisches Fachportal auf Basis von Plone
Onkopedia - ein medizinisches Fachportal auf Basis von Plone
 
zopyx.plone migration - Plone Hochschultagung 2013
zopyx.plone migration - Plone Hochschultagung 2013zopyx.plone migration - Plone Hochschultagung 2013
zopyx.plone migration - Plone Hochschultagung 2013
 
Produce & Publish Cloud Edition
Produce & Publish Cloud EditionProduce & Publish Cloud Edition
Produce & Publish Cloud Edition
 

Ähnlich wie Pragmatic plone projects

Strategies for Puppet code upgrade and refactoring
Strategies for Puppet code upgrade and refactoringStrategies for Puppet code upgrade and refactoring
Strategies for Puppet code upgrade and refactoringAlessandro Franceschi
 
Apache Maven - eXo TN presentation
Apache Maven - eXo TN presentationApache Maven - eXo TN presentation
Apache Maven - eXo TN presentationArnaud Héritier
 
Lorraine JUG (1st June, 2010) - Maven
Lorraine JUG (1st June, 2010) - MavenLorraine JUG (1st June, 2010) - Maven
Lorraine JUG (1st June, 2010) - MavenArnaud Héritier
 
Unleashing Creative Freedom with MODX (2015-07-21 @ PHP FRL)
Unleashing Creative Freedom with MODX (2015-07-21 @ PHP FRL)Unleashing Creative Freedom with MODX (2015-07-21 @ PHP FRL)
Unleashing Creative Freedom with MODX (2015-07-21 @ PHP FRL)Mark Hamstra
 
Advanced Topics in Continuous Deployment
Advanced Topics in Continuous DeploymentAdvanced Topics in Continuous Deployment
Advanced Topics in Continuous DeploymentMike Brittain
 
Maven: Managing Software Projects for Repeatable Results
Maven: Managing Software Projects for Repeatable ResultsMaven: Managing Software Projects for Repeatable Results
Maven: Managing Software Projects for Repeatable ResultsSteve Keener
 
Building Content Types with Dexterity
Building Content Types with DexterityBuilding Content Types with Dexterity
Building Content Types with DexterityDavid Glick
 
"I have a framework idea" - Repeat less, share more.
"I have a framework idea" - Repeat less, share more."I have a framework idea" - Repeat less, share more.
"I have a framework idea" - Repeat less, share more.Fabio Milano
 
IzPack at LyonJUG'11
IzPack at LyonJUG'11IzPack at LyonJUG'11
IzPack at LyonJUG'11julien.ponge
 
Wait, IPython can do that?! (30 minutes)
Wait, IPython can do that?! (30 minutes)Wait, IPython can do that?! (30 minutes)
Wait, IPython can do that?! (30 minutes)Sebastian Witowski
 
Bootstrapping Puppet and Application Deployment - PuppetConf 2013
Bootstrapping Puppet and Application Deployment - PuppetConf 2013Bootstrapping Puppet and Application Deployment - PuppetConf 2013
Bootstrapping Puppet and Application Deployment - PuppetConf 2013Puppet
 
Learning PHP for Drupal Theming, DC Chicago 2009
Learning PHP for Drupal Theming, DC Chicago 2009Learning PHP for Drupal Theming, DC Chicago 2009
Learning PHP for Drupal Theming, DC Chicago 2009Emma Jane Hogbin Westby
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-wayRobert Lujo
 
Html5 Brown Bag
Html5 Brown BagHtml5 Brown Bag
Html5 Brown Bagstuplum
 
Netflix Nebula - Gradle Summit 2014
Netflix Nebula - Gradle Summit 2014Netflix Nebula - Gradle Summit 2014
Netflix Nebula - Gradle Summit 2014Justin Ryan
 
Joomla plugin & module develpment - Presented at Sydney JUG 09/04/2013
Joomla plugin & module develpment - Presented at Sydney JUG 09/04/2013Joomla plugin & module develpment - Presented at Sydney JUG 09/04/2013
Joomla plugin & module develpment - Presented at Sydney JUG 09/04/2013Tim Plummer
 
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & HadoopPuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & HadoopOlinData
 
Using Vagrant, Puppet, Testing & Hadoop
Using Vagrant, Puppet, Testing & HadoopUsing Vagrant, Puppet, Testing & Hadoop
Using Vagrant, Puppet, Testing & HadoopPuppet
 
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & HadoopPuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & HadoopWalter Heck
 

Ähnlich wie Pragmatic plone projects (20)

Strategies for Puppet code upgrade and refactoring
Strategies for Puppet code upgrade and refactoringStrategies for Puppet code upgrade and refactoring
Strategies for Puppet code upgrade and refactoring
 
Apache Maven - eXo TN presentation
Apache Maven - eXo TN presentationApache Maven - eXo TN presentation
Apache Maven - eXo TN presentation
 
Lorraine JUG (1st June, 2010) - Maven
Lorraine JUG (1st June, 2010) - MavenLorraine JUG (1st June, 2010) - Maven
Lorraine JUG (1st June, 2010) - Maven
 
Unleashing Creative Freedom with MODX (2015-07-21 @ PHP FRL)
Unleashing Creative Freedom with MODX (2015-07-21 @ PHP FRL)Unleashing Creative Freedom with MODX (2015-07-21 @ PHP FRL)
Unleashing Creative Freedom with MODX (2015-07-21 @ PHP FRL)
 
Advanced Topics in Continuous Deployment
Advanced Topics in Continuous DeploymentAdvanced Topics in Continuous Deployment
Advanced Topics in Continuous Deployment
 
Drupal Front End PHP
Drupal Front End PHPDrupal Front End PHP
Drupal Front End PHP
 
Maven: Managing Software Projects for Repeatable Results
Maven: Managing Software Projects for Repeatable ResultsMaven: Managing Software Projects for Repeatable Results
Maven: Managing Software Projects for Repeatable Results
 
Building Content Types with Dexterity
Building Content Types with DexterityBuilding Content Types with Dexterity
Building Content Types with Dexterity
 
"I have a framework idea" - Repeat less, share more.
"I have a framework idea" - Repeat less, share more."I have a framework idea" - Repeat less, share more.
"I have a framework idea" - Repeat less, share more.
 
IzPack at LyonJUG'11
IzPack at LyonJUG'11IzPack at LyonJUG'11
IzPack at LyonJUG'11
 
Wait, IPython can do that?! (30 minutes)
Wait, IPython can do that?! (30 minutes)Wait, IPython can do that?! (30 minutes)
Wait, IPython can do that?! (30 minutes)
 
Bootstrapping Puppet and Application Deployment - PuppetConf 2013
Bootstrapping Puppet and Application Deployment - PuppetConf 2013Bootstrapping Puppet and Application Deployment - PuppetConf 2013
Bootstrapping Puppet and Application Deployment - PuppetConf 2013
 
Learning PHP for Drupal Theming, DC Chicago 2009
Learning PHP for Drupal Theming, DC Chicago 2009Learning PHP for Drupal Theming, DC Chicago 2009
Learning PHP for Drupal Theming, DC Chicago 2009
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-way
 
Html5 Brown Bag
Html5 Brown BagHtml5 Brown Bag
Html5 Brown Bag
 
Netflix Nebula - Gradle Summit 2014
Netflix Nebula - Gradle Summit 2014Netflix Nebula - Gradle Summit 2014
Netflix Nebula - Gradle Summit 2014
 
Joomla plugin & module develpment - Presented at Sydney JUG 09/04/2013
Joomla plugin & module develpment - Presented at Sydney JUG 09/04/2013Joomla plugin & module develpment - Presented at Sydney JUG 09/04/2013
Joomla plugin & module develpment - Presented at Sydney JUG 09/04/2013
 
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & HadoopPuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
 
Using Vagrant, Puppet, Testing & Hadoop
Using Vagrant, Puppet, Testing & HadoopUsing Vagrant, Puppet, Testing & Hadoop
Using Vagrant, Puppet, Testing & Hadoop
 
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & HadoopPuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
 

Mehr von Andreas Jung

State of PrintCSS - MarkupUK 2023.pdf
State of PrintCSS - MarkupUK 2023.pdfState of PrintCSS - MarkupUK 2023.pdf
State of PrintCSS - MarkupUK 2023.pdfAndreas Jung
 
Typesense Plone Integration Plone Conference 2022 Namur
Typesense Plone Integration Plone Conference 2022 NamurTypesense Plone Integration Plone Conference 2022 Namur
Typesense Plone Integration Plone Conference 2022 NamurAndreas Jung
 
Onkopedia - Plone Tagung 2020 Dresden
Onkopedia - Plone Tagung 2020 DresdenOnkopedia - Plone Tagung 2020 Dresden
Onkopedia - Plone Tagung 2020 DresdenAndreas Jung
 
PrintCSS W3C workshop at XMLPrague 2020
PrintCSS W3C workshop at XMLPrague 2020PrintCSS W3C workshop at XMLPrague 2020
PrintCSS W3C workshop at XMLPrague 2020Andreas Jung
 
PrintCSS workshop XMLPrague 2020
PrintCSS workshop XMLPrague 2020PrintCSS workshop XMLPrague 2020
PrintCSS workshop XMLPrague 2020Andreas Jung
 
Plone 5.2 migration at University Ghent, Belgium
Plone 5.2 migration at University Ghent, BelgiumPlone 5.2 migration at University Ghent, Belgium
Plone 5.2 migration at University Ghent, BelgiumAndreas Jung
 
Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia
Back to the future - Plone 5.2 und Python 3 Migration am Beispiel OnkopediaBack to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia
Back to the future - Plone 5.2 und Python 3 Migration am Beispiel OnkopediaAndreas Jung
 
Plone migrations using plone.restapi
Plone migrations using plone.restapiPlone migrations using plone.restapi
Plone migrations using plone.restapiAndreas Jung
 
Plone Migrationen mit Plone REST API
Plone Migrationen mit Plone REST APIPlone Migrationen mit Plone REST API
Plone Migrationen mit Plone REST APIAndreas Jung
 
Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...
Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...
Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...Andreas Jung
 
Generierung von PDF aus XML/HTML mit PrintCSS
Generierung von PDF aus XML/HTML mit PrintCSSGenerierung von PDF aus XML/HTML mit PrintCSS
Generierung von PDF aus XML/HTML mit PrintCSSAndreas Jung
 
Creating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCsCreating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCsAndreas Jung
 
Creating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCsCreating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCsAndreas Jung
 
The Plone and The Blockchain
The Plone and The BlockchainThe Plone and The Blockchain
The Plone and The BlockchainAndreas Jung
 
Content Gemeinsam Erstellen: Integration Plone mit SMASHDOCs
Content Gemeinsam Erstellen: Integration Plone mit SMASHDOCsContent Gemeinsam Erstellen: Integration Plone mit SMASHDOCs
Content Gemeinsam Erstellen: Integration Plone mit SMASHDOCsAndreas Jung
 
PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.
PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.
PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.Andreas Jung
 

Mehr von Andreas Jung (16)

State of PrintCSS - MarkupUK 2023.pdf
State of PrintCSS - MarkupUK 2023.pdfState of PrintCSS - MarkupUK 2023.pdf
State of PrintCSS - MarkupUK 2023.pdf
 
Typesense Plone Integration Plone Conference 2022 Namur
Typesense Plone Integration Plone Conference 2022 NamurTypesense Plone Integration Plone Conference 2022 Namur
Typesense Plone Integration Plone Conference 2022 Namur
 
Onkopedia - Plone Tagung 2020 Dresden
Onkopedia - Plone Tagung 2020 DresdenOnkopedia - Plone Tagung 2020 Dresden
Onkopedia - Plone Tagung 2020 Dresden
 
PrintCSS W3C workshop at XMLPrague 2020
PrintCSS W3C workshop at XMLPrague 2020PrintCSS W3C workshop at XMLPrague 2020
PrintCSS W3C workshop at XMLPrague 2020
 
PrintCSS workshop XMLPrague 2020
PrintCSS workshop XMLPrague 2020PrintCSS workshop XMLPrague 2020
PrintCSS workshop XMLPrague 2020
 
Plone 5.2 migration at University Ghent, Belgium
Plone 5.2 migration at University Ghent, BelgiumPlone 5.2 migration at University Ghent, Belgium
Plone 5.2 migration at University Ghent, Belgium
 
Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia
Back to the future - Plone 5.2 und Python 3 Migration am Beispiel OnkopediaBack to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia
Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia
 
Plone migrations using plone.restapi
Plone migrations using plone.restapiPlone migrations using plone.restapi
Plone migrations using plone.restapi
 
Plone Migrationen mit Plone REST API
Plone Migrationen mit Plone REST APIPlone Migrationen mit Plone REST API
Plone Migrationen mit Plone REST API
 
Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...
Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...
Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...
 
Generierung von PDF aus XML/HTML mit PrintCSS
Generierung von PDF aus XML/HTML mit PrintCSSGenerierung von PDF aus XML/HTML mit PrintCSS
Generierung von PDF aus XML/HTML mit PrintCSS
 
Creating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCsCreating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCs
 
Creating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCsCreating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCs
 
The Plone and The Blockchain
The Plone and The BlockchainThe Plone and The Blockchain
The Plone and The Blockchain
 
Content Gemeinsam Erstellen: Integration Plone mit SMASHDOCs
Content Gemeinsam Erstellen: Integration Plone mit SMASHDOCsContent Gemeinsam Erstellen: Integration Plone mit SMASHDOCs
Content Gemeinsam Erstellen: Integration Plone mit SMASHDOCs
 
PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.
PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.
PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.
 

Kürzlich hochgeladen

DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 

Kürzlich hochgeladen (20)

DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 

Pragmatic plone projects

  • 1. Pragmatic  Plone  Projects   Plone  Conference  2012   Arnhem   Andreas  Jung     ZOPYX  Ltd.   www.zopyx.com,  info@zopyx.com  
  • 2. Speaker   •  long-­‐time  Python,  Zope,     Plone  developer    and  contributor   •  Lead  developer  and  principal  consultant  of     ZOPYX  Limited   –  Zope,  Python,  Pyramid,  Plone  projects   –  large  portals,  intranet,  internet,  extranet   –  Electronic  Publishing   –  complex  domain-­‐specific  applications    
  • 3. This  talk  is  about   •  practical  hints  surviving  your  next     Plone  project   •  best  practices   •  lessons  learned  from  our  last     larger  Plone  project   •  stuff  perhaps  covered  already  by  the     Plone  trainings  
  • 4. Relaunch  weishaupt.de   •  Weishaupt:     –  major  vendor  of  heating  systems   –  480  M€  revenue   •  Large  company  portal  on  top  of  Plone  4.2   •  Phase  1:   –  implementation  and  DE  content   –  4  months   •  Phase  2:   –  20  subsidaries     –  more  than  30  languages  
  • 10. Project  constraints  (1/3)   There  is  no  real-­‐world  project  with   •  unlimited  budget   •  unlimited  human  resources   •  unlimited  time  
  • 11. Project  constraints  (2/3)   Resources   Budget   Time  
  • 12. Project  constraints  (3/3)   Conclusions   •  usually  impossible  finding  the     „perfect“  solution   •  the    „perfect“  solution  is    „mission  impossible“  
  • 13. Getting  things  done   •  within  a  reasonable  time-­‐frame   •  on  budget   •  with  the  available  human  resources  
  • 14. Common  customizations   •  Bugs  in  Plone  and  3rd-­‐party  packages   are  all  around  you   •  Particular  behavior  of  Plone  or  3rd-­‐party   packages  is  a  common  project  requirement   •  What  must  be  usually  customized:   –  Python  code  (browser  views,  skin  scripts)   –  Resources  (browser  view  templates,  JS,  CSS)  
  • 15. Where  to  fix  things?   •  Package  maintainer  (Plone  and  3rd-­‐party)  love   –  bug  reports   –  bug  fixes   –  contributions   •  Stuff  on  Github:  Fork  &  Pull  request   •  SVN  repositories:  svn  branch  &  svn  merge   –  check  if  the  package  is  maintained   –  ask  the  maintainer  for  merging  your  changes  or  merge  yourself   –  move  packages  to  Github  if  appropriate  
  • 16. Where  and  how  to     customize  things?   •  Is  your  required  change  of  interest  for  the  public?   –  fork  on  Github   –  branch  in  SVN   –  speak  with  the  package  maintainers   •  Your  change  satisfies  an  absurd  customer   request?   –  keep  it  for  yourself.  
  • 17. (Monkey)  Patching  Python  code   •  Monkey  patching:     „dynamic  modifications  of  a  class  or  module  at  runtime“   (Source:  Wikipedia)   •  MP  in  general  should  be  considered  evil  and  bad-­‐style   •  MP  may  have  side-­‐effects   •  Use  MP  carefully  (and  only  when  you  know  what  you  are   doing)  
  • 18. Monkey  patching  in  Python   Original  (foo.py)   Patched  version  (my_foo.py)   class Foo:! def my_bar(self):! ! return 43! def bar(self):! ! return 42! from foo import Foo! Foo.bar = my_bar! ! # or (needed in some situations)! ! Foo.bar.func_code = my_bar.func_code!
  • 19. Monkey  patching  Plone   collective.monkeypatcher  (patches.zcml)   ZCML-­‐level  configuration  of  patching   <configure...>! <include package="collective.monkeypatcher" />! information:   <monkey:patch! •  module-­‐level  patches   description="ISE-42: OFS.Image.tag()"! •  class-­‐level  patches   class="Products.CMFCore.FSImage.FSImage"! original="tag"! replacement=".patches.tag"! />! </configure>! collective.monkeypatcherpanel  (patches.zcml)                
  • 20. Patching  resources  (1/2)  –   overrides.zcml   •  Standard  mechanism  for  overriding  configuration   settings  introduced  through  a  different  package   •  overrides.zcml  is  an  optional  ZCML  configuration  file   Products.PloneGlossary  (configure.zcml)   my.package  (overrides.zcml)   <configure..> ! <configure..> ! <browser:page! <browser:page! name="glossary_main_page“ ! name="glossary_main_page"! for="Products.PloneGlossary.IPloneGlossary"! for="Products.PloneGlossary.IPloneGlossary"! class=".pages.GlossaryMainPage"! class=".glossary.GlossaryView“! permission="zope2.View“ />! permission="zope2.View“ />! </configure>! </configure>! !
  • 21. Patching  resources  (2/2)  –  z3c.jbot   •  z3c.jbot  allows  you  to  override  resources  of  other   packages  inside  your  own  policy  package   •  Limited  to  .pt,  .cpt,  .js?!   Configuration:  <browser:jbot    directory=“overrides“  />   Existing  template:  plone.app.search/plone/app/search/search.pt   Customization:  your.package/your/package/overrides/plone.app.search.search.pt   Links   •  http://blog.keul.it/2011/06/z3cjbot-­‐magical-­‐with-­‐your-­‐skins.html   •  http://pypi.python.org/pypi/z3c.jbot  
  • 22. Unconfigure     resource  configurations   •  Sometimes  you  just  don‘t  want  or  need  ZCML   configurations  introduced  by  other  packages   •  z3c.unconfigure  is  your  friend   some.package(configure.zcml)   my.package  (configure.zcml)   <configure..> ! <configure..> ! <browser:page! <include package="z3c.unconfigure" ! name="glossary_main_page“ ! file="meta.zcml" />! for="Products.PloneGlossary.IPloneGlossary"! <unconfigure>! class=".pages.GlossaryMainPage"! <browser:page! permission="zope2.View“ />! name="glossary_main_page“ ! </configure>! for="Products.PloneGlossary.IPloneGlossary"! class=".glossary.GlossaryView“! permission="zope2.View“ />! </unconfigure>! </configure>!  
  • 23. Extending  schemas   Plone  comes  with  two  content-­‐type  systems   •  Archetypes  (old-­‐style)   –  use  archetypes.schemaextender   –  modify  any  AT-­‐based  content-­‐type   (modifying  fields,  adding  fields)   –  SchemaExtender,  SchemaModifier   •  Dexterity  (new-­‐style)   –  Dexterity  introduces  „behaviors“   –  „A  behavior  is  a  re-­‐usable  aspect  of  an  object  that  can  be  enabled  or   disabled  without  changing  the  component  registry“     (Source:  Dexterity  developer  manual)  
  • 24. Keep  your  designer  happy   Implementing  CSS  styles     requires  representative  content   http://localhost:8080/@@new-site?content=1!
  • 26. Predefined  sample  content   •  Write  a  browser  view   –  creating  a  Plone  site  with  policy  package  +  add-­‐ons   –  installing  the  basic  site-­‐structure   –  creating  example  content  for  each  content-­‐type,  content-­‐ listing  etc   •  use  http://lorempixel.com/600/400  ...   •  look  at  loremipsum,  collective.loremipsum  or   zopyx.ipsumplone  
  • 27. Predefined  sample  content   •  Throw  your  sandbox/Plone  working  site  away     as  often  as  possible   •  sometimes  I  created  30-­‐40  new  Plone  sites  per  day   •  Pragmatic  side-­‐effect   –  the  content  fixture  code  can  be  used  as  unit  test  where  all   your  content-­‐types  and  site-­‐infrastructure  is  created  and   tested  in  one  run   –  not  the  best  solution  but  it  works  reasonably  well  
  • 28. Some  good  hints   •  Never  ever  perform  customizations  in-­‐place  in   existing  3rd-­‐party  packages.  NEVER!!!     •  Customizations  always  belong  into  your  own   policy  package.   •  Local  customizations  of  3rd-­‐party  package  will   be  lost  with  the  next  version  of  customized   package.