<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Posts tagged with “Ploneconf” on Mark van Lent’s weblog</title>
  <updated>2012-10-12T16:45:00+00:00</updated>
  <link rel="self" type="application/atom+xml" href="https://markvanlent.dev/tags/ploneconf/index.xml" hreflang="en"/>
  <id>tag:markvanlent.dev,2010-04-02:/tags/ploneconf/index.xml</id>
  <link rel="alternate" type="text/html" href="https://markvanlent.dev/tags/ploneconf/" hreflang="en"/>
  <author>
      <name>Mark van Lent</name>
      <uri>https://markvanlent.dev/about/</uri>
    </author>
  <rights>Copyright (c) Mark van Lent, Creative Commons Attribution 4.0 International License.</rights>
  <icon>https://markvanlent.dev/favicon.ico</icon>
  <entry>
    <title type="html"><![CDATA[Lightning talks (Friday)]]></title>
    <link rel="alternate" href="https://markvanlent.dev/2012/10/12/lightning-talks/" type="text/html" />
    <id>https://markvanlent.dev/2012/10/12/lightning-talks/</id>
    <author>
      <name>map[name:Mark van Lent uri:https://markvanlent.dev/about/]</name>
    </author>
    <category term="plone" />
    <category term="ploneconf" />
    
    <updated>2021-08-19T13:13:50Z</updated>
    <published>2012-10-12T16:45:00Z</published>
    <content type="html"><![CDATA[<p>The lightning talks of the last day of the Plone Conference
2012. Again only three minutes each since we had 14 talks!</p>
<h2 id="paul-j-stevens">Paul J Stevens</h2>
<p>Paul had a project where PDFs were workflowed to several sites using
MultiSite. This meant there was lots of duplication. After migrating
to Plone 4 and blob storage, there was still a lot of data.</p>
<p>He created a script (<a href="https://github.com/pjstevns/bscompress">bscompress</a>) for:</p>
<ul>
<li>De-duplication of blobs using hard-links</li>
<li>Less disk-space, faster copy/move actions</li>
</ul>
<p>In his case, the blob storage went from 14625 Megabytes to 2395 Megabytes.</p>
<p>Things still to do:</p>
<ul>
<li>Patch <code>ZODB/src/ZODB/blob.py</code>.</li>
<li>Maintain compatibility and coordinate with other efforts
(like <a href="https://pypi.org/project/collective.recipe.backup/">collective.recipe.backup</a>).</li>
</ul>
<h2 id="philip-bauer">Philip Bauer</h2>
<p>Dylan Jay talked about attracting more new people to get started in
Plone. Dexterity and PloneIDE are great, but we need more. David Glick
started to build a theme editor
(<a href="https://pypi.org/project/plone.app.themeeditor/">plone.app.themeeditor</a>). It
uses jQuery UI and is a lot better than the Zope Management Interface
(ZMI). There is going to be a PLIP about it.</p>
<h2 id="johannes-raggam">Johannes Raggam</h2>
<p>Johannes made a new release of
<a href="https://pypi.org/project/plone.app.event/">plone.app.event</a>. Please
take note of the installation instructions. They include configuring
the right time zone.</p>
<p>Johannes did a quick demo of the package. There are still
<a href="https://github.com/plone/plone.app.event/issues">issues</a>, but it&rsquo;s
safe to call it a beta version.</p>
<p>Johannes thanks all the contributors for their work.</p>
<p><em>Mark: note that the package was moved from the Collective to the
Plone organisation on GitHub on October 13th.</em></p>
<h2 id="elizabeth-leddy--eric-steele">Elizabeth Leddy / Eric Steele</h2>
<p>All the team leaders (security team, UI team, etc) went on stage so
people would know who is who. And whom to talk to if you want to get
involved.</p>
<h2 id="lukas-graf">Lukas Graf</h2>
<p>His company (4teamwork) created
<a href="https://pypi.org/project/ftw.tabbedview/">ftw.tabbedview</a>. It can
be integrated with
<a href="https://pypi.org/project/collective.js.extjs/">collective.js.extjs</a>,
<a href="https://pypi.org/project/collective.quickupload/">collective.quickupload</a>
(if installed) and
<a href="https://pypi.org/project/ftw.table/">ftw.table</a>.</p>
<p>The package <code>ftw.tabbedview</code> contains filtering, sorting, grouping,
managing columns, batching, flexible sources (catalog, SQLAlchemy,
&hellip;), data transformation (icon, authors, dates, &hellip;) and is highly
configurable. It can also be used on pretty much any context.</p>
<h2 id="philip-bauer-1">Philip Bauer</h2>
<p>Philip helped to organise the
<a href="https://web.archive.org/web/20121023010452/http://konferenz.plone.de/">Plone Konferenz München 2012</a>.
About 150 people attended and there were lots of new people. The goal of the
conference was to attract decision makers. It was a very successful conference.</p>
<p>Tip: include a sprint lounge where people can sprint the whole
conference. This way you can attract people that want to code and
work together, but do not speak the language the conference is held
in.</p>
<p>Such local conferences increase the visibility of the Plone
community and can attract new members to join the community.</p>
<p>They were able to donate € 3000 to the Plone Foundation.</p>
<h2 id="mikko-ohtamaa">Mikko Ohtamaa</h2>
<p>Solving problems in plone package at a time:</p>
<ul>
<li><a href="https://pypi.org/project/visualtitle/">visualtitle</a>: To have
a different title on your page and in your navigation.</li>
<li><a href="https://pypi.org/project/imageportlet/">imageportlet</a>: A new
portlet type to show images.</li>
<li><a href="https://pypi.org/project/silvuple/">silvuple</a> (That&rsquo;s
French&hellip;): Force the user interface to use your native language
an show untranslated items.</li>
<li><a href="https://github.com/miohtama/plomobile"><strong>plo</strong>mobile</a>: A
responsive design for Plone.</li>
<li><a href="https://pypi.org/project/sevabot/">sevabot</a>: A Skype
bot.</li>
</ul>
<p><em>[Mark: The
<a href="https://www.youtube.com/watch?v=BlLSWmOFmwg&amp;t=1493s">video of this lightning talk</a>
is definitely worth watching.]</em></p>
<h2 id="franco-pellegrini">Franco Pellegrini</h2>
<p>If we have to believe the Mayan symbols, this year will be the end of
the world. What better way to experience that day than by joining a
sprint? So join the &ldquo;End of the world&rdquo; sprint in Ushuaia, Provincia de
Tierra del Fuego, Argentina on December 21st, 2012.</p>
<h2 id="jukka-ojaniemi">Jukka Ojaniemi</h2>
<p><a href="https://pypi.org/project/whiskers/">Whiskers</a> is a Pyramid
application that collects all packages used in your buildouts. That
is, if you use
<a href="https://pypi.org/project/buildout.sendpickedversions/">buildout.sendpickedversions</a>. This
way you can quickly see which buildouts use a certain version of a
package. You might even be able to use this data to find out which
eggs in your buildout cache are not used anymore.</p>
<h2 id="érico-andrei">Érico Andrei</h2>
<p>A new solution to change how we collaborate: desk surfing. There is a
Plone core developer dedicated desk in São Paulo. (You can also use it
if you are not a core developer by the way.) If you are in São Paulo
go there and contact Érico.</p>
<p>(Calvin Hendryx-Parker adds that you are also welcome in Fortville.)</p>
<h2 id="calvin-hendryx-parker">Calvin Hendryx-Parker</h2>
<p>Since Calvin missed is own presentation earlier that day, he did the
three minute version of his talk &ldquo;Playing With Blocks: 6 Pro Tips for
Building Your Next Super-Charged Plone Site&rdquo;:</p>
<ul>
<li>Use APIs instead of embedded iFrames.</li>
<li>Criteria for evaluating your options:
<ul>
<li>Mailing lists taken over by spam?</li>
<li>Mailing list neglected?</li>
<li>What is the activity in source control?</li>
<li>Was there a corporate takeover?</li>
<li>Hope</li>
</ul>
</li>
<li>Leverage Single Sign On (like OpenID).</li>
<li>Supercharge your search with Solr (which can also index external
content).</li>
<li>Beware of over customisation.</li>
<li>Testing, testing, testing.</li>
</ul>
<p>The talk he would have held this morning will be recorded and put online.</p>
<h2 id="radek-jankiewicz">Radek Jankiewicz</h2>
<p>STX Next created a small addon for Plone:
<a href="https://pypi.org/project/stxnext.grayscale/">stxnext.grayscale</a>. This
package transforms content of a page to grey scale. It has been
developed for Polish user requirements related to national mourning
after a tragedy has occurred. Governmental sites and bank sites change their colour
scheme to grey scale out of respect. The images are cached on file
system and are thus not generated each request.</p>
<h2 id="johannes-raggam-1">Johannes Raggam</h2>
<p>A talk about amplify.cc, a prototype to replace PostNuke based
community portals. It uses only one content type. They use Dexterity
behaviours on content instances instead of on a class. Their
conclusion is that having one content type for everything is possible
and even works really nice.</p>
<h2 id="maurizio-delmonte">Maurizio Delmonte</h2>
<p>A lot of countries have their own localised Plone site, e.g. Italy, the
Netherlands, Brazil, Spain, France and Poland. They all look different. But by
using a bar at the top of the page which links to other Plone sites in the
world, we can unite those sites and make it easier to discover them.</p>
<p><a href="https://www.youtube.com/watch?v=BlLSWmOFmwg">Watch the video</a>.</p>]]></content>
  </entry>
  <entry>
    <title type="html"><![CDATA[Sprinting for newcomers]]></title>
    <link rel="alternate" href="https://markvanlent.dev/2012/10/12/sprinting-for-newcomers/" type="text/html" />
    <id>https://markvanlent.dev/2012/10/12/sprinting-for-newcomers/</id>
    <author>
      <name>map[name:Mark van Lent uri:https://markvanlent.dev/about/]</name>
    </author>
    <category term="plone" />
    <category term="ploneconf" />
    
    <updated>2021-08-19T13:13:50Z</updated>
    <published>2012-10-12T15:00:00Z</published>
    <content type="html"><![CDATA[<p>What is sprinting all about about?</p>
<p>A sprint is a great way to discuss a problem with a package. If the
maintainer is not at the sprint him-/herself, then usually someone
involved in the package is available.</p>
<p>The most important rules:</p>
<ul>
<li>Don&rsquo;t be afraid to approach people.</li>
<li>Ask questions!</li>
</ul>
<p>Basically a sprint is a lot of people who can do anything they
want. That could be a personal project, a PLIP, a package,
etc. Everything is fine. You can also join a sprint topic of someone
else. Just do what you want to do or find interesting. Either way: ask
questions.</p>
<p>People always seem very busy. But people prefer helping you fixing
stuff than fixing things themselves.</p>
<p>There&rsquo;s a theory: whenever there are more than ten Plone people in a
room, they start moving the tables. <code>:)</code>.</p>
<p>Sprinting doesn&rsquo;t stop with coding. It&rsquo;s the other way around: the
non-coders might even be more productive. A sprint is also a great
opportunity to discuss problems or approaches.</p>]]></content>
  </entry>
  <entry>
    <title type="html"><![CDATA[Jump start your development with ZopeSkel (Cris Ewing)]]></title>
    <link rel="alternate" href="https://markvanlent.dev/2012/10/12/jump-start-your-development-with-zopeskel-cris-ewing/" type="text/html" />
    <id>https://markvanlent.dev/2012/10/12/jump-start-your-development-with-zopeskel-cris-ewing/</id>
    <author>
      <name>map[name:Mark van Lent uri:https://markvanlent.dev/about/]</name>
    </author>
    <category term="plone" />
    <category term="ploneconf" />
    
    <updated>2021-08-19T13:13:50Z</updated>
    <published>2012-10-12T14:00:00Z</published>
    <content type="html"><![CDATA[<p>Tutorial on how to write templates for ZopeSkel.</p>
<p>This is the second half of Cris&rsquo;s
<a href="/2012/10/12/zopeskel-past-present-and-future-cris-ewing/">previous talk</a>. This
part is about using and extending <a href="https://pypi.org/project/ZopeSkel/">ZopeSkel</a>.
By creating your own templates you can start with a customer project really
fast.</p>
<h2 id="why-and-when">Why and when</h2>
<p>Do you have code you write over and over again? Is the code almost the
same each time and are the places where you change stuff always the
same?  You can avoid writing all that code by creating a template.</p>
<p>You can write the template the way <em>you</em> want. This is just a
system. This means you can version control your own process by
documenting it in a template.</p>
<h2 id="basics-of-template-writing">Basics of template writing</h2>
<p>The first question you need to ask yourself is &ldquo;what do I want?&rdquo; The
next thing you will want to investigate is what you have already got.
You can use &ldquo;<code>bin/templer --list</code>&rdquo; and &ldquo;<code>bin/templer &lt;template_name&gt; --list-variables</code>&rdquo; to find out more about the templates ZopeSkel has
to offer. Then have a look at the code provided by the template.</p>
<p>To wire everything up, you need to do four basic things:</p>
<ol>
<li>Create a class.</li>
<li>Import the class to a package namespace.</li>
<li>Provide an entry point.</li>
<li>Write the actual template itself.</li>
</ol>
<h2 id="tips">Tips</h2>
<p><em>Cris has already written the documentation for this tutorial. It
currently lives on his laptop, but it should be posted online soon. I
(Mark) decided to just write down some notes instead of trying to
replicate Cris&rsquo; documentation.</em></p>
<p>The related documentation can be found here:</p>
<ul>
<li><a href="https://templer-manual.readthedocs.io/en/latest/index.html">Templer System Manual</a></li>
<li><a href="https://templer-manual.readthedocs.io/en/latest/quickstart.html">Templer quick start</a></li>
<li><a href="https://templer-manual.readthedocs.io/en/latest/applications/zopeskel.html">ZopeSkel documentation</a></li>
</ul>
<p>Tips:</p>
<ul>
<li>Do not install ZopeSkel in your global Python! Always use a
<a href="https://pypi.org/project/virtualenv/">virtualenv</a> or
<a href="https://pypi.org/project/zc.buildout/">buildout</a>.</li>
<li>If you want to use <a href="https://pypi.org/project/pip/">pip</a>, use version 1.1 or later.</li>
<li>To use the package while developing, use &ldquo;<code>python setup.py develop</code>&rdquo; (so &ldquo;<code>develop</code>&rdquo; instead of &ldquo;<code>install</code>&rdquo;).</li>
<li>If you are using a buildout, you can also use
<a href="https://pypi.org/project/mr.developer/">mr.developer</a>.</li>
<li>The modes are incrementally inclusive: the questions for the
&ldquo;easy&rdquo; mode are also asked in the &ldquo;expert&rdquo; mode, etc.</li>
<li>Which namespace to choose: if you want to contribute the
templates and they might be useful for others: use the <code>templer</code>
namespace; for your own project/infrastructure specific
templates, use your company&rsquo;s namespace.</li>
</ul>
<p><a href="https://www.slideshare.net/cewing/jumpstart-your-development-with-zopeskel-14719067">View the slides</a>.</p>]]></content>
  </entry>
  <entry>
    <title type="html"><![CDATA[ZopeSkel - The past, present and future (Cris Ewing)]]></title>
    <link rel="alternate" href="https://markvanlent.dev/2012/10/12/zopeskel-past-present-and-future-cris-ewing/" type="text/html" />
    <id>https://markvanlent.dev/2012/10/12/zopeskel-past-present-and-future-cris-ewing/</id>
    <author>
      <name>map[name:Mark van Lent uri:https://markvanlent.dev/about/]</name>
    </author>
    <category term="plone" />
    <category term="ploneconf" />
    
    <updated>2021-08-19T13:13:50Z</updated>
    <published>2012-10-12T11:45:00Z</published>
    <content type="html"><![CDATA[<p>Cris is the maintainer of <a href="https://pypi.org/project/ZopeSkel/">ZopeSkel</a> for
three years now. This is a historical, non technical talk about ZopeSkel: where
did it start and where it is going.</p>
<h2 id="beginning">Beginning</h2>
<p>We used to have ArchGenXML to generate code for us. But it only
created (Archetype) content types. This may have been the reason for
content type centric development. Later we needed eggs and other
scaffolding and thus another tool.</p>
<p>On May 25th 2006, the first commit to ZopeSkel was made by Daniel
Nouri. From there it grew organically. Then local commands happened so
developers could enhance already created packages (for instance to
include portlets, content types). But most templates asked too many
questions.  And the descriptions around the question were not always
clear. Many templates looked similar so which one should your choose?
There was way too much (repeated!) code. That code was not updated
consistently so for example one template generated a <code>tests</code> directory
while another created a <code>tests.py</code> file.</p>
<p>To have local commands, your package has to depend on Paste. As a
result, the <code>Paste</code>, <code>PasteDeploy</code> and <code>PasteScript</code> eggs end up
<em>inside</em> your product. Even worse: if you are not careful, you can
accidentally add these packages to your version control system. This
is a big problem.</p>
<h2 id="zopeskel">ZopeSkel</h2>
<p>On the
<a href="https://web.archive.org/web/20120405004501/http://www.coactivate.org/projects/zopeskel-bbq-sprint/project-home">No-Fun ZopeSkel BBQ Sprint</a>
in 2009 the question &ldquo;Who is ZopeSkel for?&rdquo; was answered. It was
decided that is it primarily a tool to help newcomers. For experienced
developers it&rsquo;s easier to start with empty structure and fill the
bits and pieces in themselves.</p>
<p>The outcome of the BBQ sprint was the &ldquo;<code>bin/zopeskel</code>&rdquo; script which:</p>
<ul>
<li>Hides the “<code>paste create -t</code>” command</li>
<li>Provides inline validation</li>
<li>Help for questions</li>
<li>Provides &lsquo;classes&rsquo; of questions (easy, expert, all)</li>
<li>Gives good feedback while and after running</li>
</ul>
<p>However, the existing documentation was not cleaned up. As a result
people still use the &ldquo;<code>paste create -t</code>&rdquo; command and don&rsquo;t even know
what the &ldquo;<code>zopeskel</code>&rdquo; command is for.</p>
<p>Another outcome was that Cris became the official maintainer. And the
plan was formed to break up ZopeSkel (see the GitHub repository which
still contains a
<a href="https://github.com/collective/ZopeSkel/blob/2.x-maintenance/SPLITTING-PROPOSAL.txt">document</a>
with the reasoning behind this).</p>
<h2 id="templer">Templer</h2>
<p>Work to break up started in early 2010.
<a href="https://pypi.org/project/Templer/">Templer</a> provides templates in packages of
related functionality: a buildout package, Zope related things, Plone related
things, etc. But the commands for the user should remain the same because
there&rsquo;s so many documentation already available.</p>
<p>Main difference between the old ZopeSkel and Templer: you cannot
create a shared structure in ZopeSkel. Templer provides structures,
which are similar to templates but they cannot be run individually and
only exist to be included in templates. For instance you can pull the
structure for the requested licence when creating a package.</p>
<p>The new ZopeSkel version is a Templer application which bundles
stuff so you can use it as you were used to. You can just use
<code>easy_install</code> or <code>pip</code> to install ZopeSkel (your version of <code>pip</code>
needs to be new enough though).</p>
<p>Or put it in your development
buildout by including a part which includes PasteScript and ZopeSkel, for example:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ini" data-lang="ini"><span class="line"><span class="cl"><span class="na">parts</span> <span class="o">=</span><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">    ...
</span></span></span><span class="line"><span class="cl"><span class="s">    zopeskel</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">[zopeskel]</span>
</span></span><span class="line"><span class="cl"><span class="na">recipe</span> <span class="o">=</span> <span class="s">zc.recipe.egg</span>
</span></span><span class="line"><span class="cl"><span class="na">eggs</span> <span class="o">=</span><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">    PasteScript
</span></span></span><span class="line"><span class="cl"><span class="s">    ZopeSkel</span>
</span></span></code></pre></div><h2 id="whats-next">What&rsquo;s next</h2>
<ul>
<li>Dexterity templates (underway)</li>
<li>Buildouts (unified with installers)</li>
<li>Theme templates (Diazo, traditional?)</li>
<li>Local commands for
<ul>
<li>viewlet</li>
<li>utility</li>
<li>z3c form</li>
<li>dexterity schema builder</li>
<li>&hellip;</li>
</ul>
</li>
</ul>
<p>The
<a href="/2012/10/12/jump-start-your-development-with-zopeskel-cris-ewing/">next talk</a>
teaches <em>how</em> to create templates, in the sprint following the
conference you can actually <em>create</em> templates.</p>
<p>Note that Templer currently still depends on Paster and uses Cheeta templates.
Crushinator wants to solve these problems. The only dependency would be a
package for the templating language you want to use for your templates.</p>
<p><a href="https://www.slideshare.net/cewing/zopeskel-the-past-present-and-future">View the slides</a>
or <a href="https://www.youtube.com/watch?v=vrneRhD2_8U">watch the video</a>.</p>]]></content>
  </entry>
  <entry>
    <title type="html"><![CDATA[PloneNG: What&#39;s new in Plone 4.2, 4.3, and beyond (David Glick)]]></title>
    <link rel="alternate" href="https://markvanlent.dev/2012/10/12/ploneng-whats-new-in-plone-42-43-and-beyond-david-glick/" type="text/html" />
    <id>https://markvanlent.dev/2012/10/12/ploneng-whats-new-in-plone-42-43-and-beyond-david-glick/</id>
    <author>
      <name>map[name:Mark van Lent uri:https://markvanlent.dev/about/]</name>
    </author>
    <category term="plone" />
    <category term="ploneconf" />
    
    <updated>2021-08-19T13:13:50Z</updated>
    <published>2012-10-12T11:00:00Z</published>
    <content type="html"><![CDATA[<p>A overview of the changes in Plone 4.2 and 4.3.</p>
<p>David split up the changes into categories. But first something about
the process.</p>
<h2 id="plip-process">PLIP process</h2>
<p>A PLIP (Plone improvement proposal, basically a ticket) first needs to
be approved by the Framework Team. Once it has been approved,
implementation starts. When the code is ready the Framework Team does
a review. If the Framework Team says &ldquo;yes it&rsquo;s okay&rdquo; there is still
more work to be done before it is completely integrated in Plone
(like final documentation, small changes).</p>
<p>PLIP criteria:</p>
<ul>
<li>Feature balance (content managers <strong>and</strong> developers).</li>
<li>Useful for 80% (otherwise it should perhaps be an addon instead). Exception to
this rule: marketing related features (e.g. content staging and versioning;
not used much but important to have for software selection processes).</li>
<li>Maturity outside the code.</li>
<li>Code quality (clean code, tests, documentation, not over or under
architected)</li>
<li>Migration path for current users and developers.</li>
</ul>
<h2 id="what-has-been-added">What has been added?</h2>
<h3 id="changes-for-end-users">Changes for end users</h3>
<ul>
<li><strong>Improved search results</strong> (Plone 4.2). No advanced search form
anymore. (Tom Gross created
<a href="https://pypi.org/project/collective.searchform/">collective.searchform</a>
for those that want to have the old functionality back.)</li>
<li>You can make the <strong>document byline use the publication date</strong> (Plone
4.3).</li>
<li><strong>Plain text searches ignore accents</strong> (Plone 4.3).</li>
</ul>
<h3 id="content-managers">Content managers</h3>
<ul>
<li><strong>New collections</strong> (Plone 4.2). Completely new interface which
includes a query widget and a preview of the results
(<a href="https://pypi.org/project/plone.app.collection/">plone.app.collection</a>). The
old collections are still there. In a new Plone site they are
disabled, but they can be enabled. If you upgrade it is the other
way around: the new collections are not enabled by
default. Adding custom indexes is harder now. (The UI has not
been created for <code>plone.app.collection</code> yet.)</li>
<li><strong>In-Plone theme editor</strong> (Plone 4.2 and 4.3). You can upload a <code>.zip</code>
file with the theme which contains your <code>rules.xml</code> file. You can
also edit a theme with the ACE editor. And a rule builder to spit
out the Diazo rules file.</li>
<li><strong>Dexterity</strong> (Plone 4.3). Define content types through the web
without having to be a programmer. Some more things need to be
done to make this <em>really</em> useful. You can for instance not
change the view or the way the items are searched on in the
site. Note there are new instructions: you no longer need to
include a special known good set (also known as a KGS). But might
need to specify <code>plone.app.dexterity[grok,relations]</code> in your
eggs. Both the <code>grok</code> and <code>relations</code> parts were not ready for
default inclusion but are available and useful. If you used
Dexterity already, definitely include <code>relations</code>.</li>
<li><strong>Improved Syndication</strong> (Plone 4.3). There&rsquo;s a syndication control
panel to configure syndication. Writing new feeds is much easier
now.</li>
<li>Added <strong>&ldquo;test mail server&rdquo; button</strong> to the email configuration
settings (Plone 4.2). After you changed the settings, you can
have Plone test the connection to your mail server.</li>
</ul>
<h3 id="developer">Developer</h3>
<ul>
<li>Switch to <strong>HTML5</strong> (Plone 4.2). Also support for
<a href="https://modernizr.com/">Modernizr.js</a>. Plus miscellaneous cleanup things
(e.g. we now use the HTML5 <code>placeholder</code> attribute).</li>
<li><strong>Resource bundles for Resource Registries</strong> (Plone 4.2). Different
resources for different themes.</li>
<li>Add <strong><code>z3c.form</code> support to plone.app.portlets</strong> (Plone 4.3).</li>
<li><strong>API for password validation policy</strong> (Plone 4.3). You can
implement custom logic for password policy (length, characters, etc).</li>
<li>Provide <strong>subsection CSS classes on <code>&lt;body&gt;</code></strong>. (Plone 4.3) to make theming
easier, e.g. when using Diazo.</li>
</ul>
<h3 id="infrastructure">Infrastructure</h3>
<ul>
<li>Official <strong>support for Python 2.7</strong> (Plone 4.2). Continuous
integration is now setup for Python 2.6 and 2.7. Python 2.7 is a
more long term maintenance release than 2.6.</li>
<li>Declare <strong>dependency on Pillow</strong> (Plone 4.3) to solve problems with
PIL from the past. A bit experimental since it might not work
perfectly on all systems.</li>
<li>Upgrade to <strong>jQuery 1.7</strong> (Plone 4.3). Sizzle selectors are
slightly more strict (class name should be placed in double
quotes). Binding events is now preferred with &ldquo;<code>on</code>&rdquo; instead of
using &ldquo;<code>live</code>&rdquo; or binding by event name.</li>
<li><strong>Fewer dependencies</strong> (Plone 4.3).</li>
<li>Upgrade to <strong>newer version of TinyMCE</strong> (Plone 4.3). This version
of TinyMCE works with IE9. It also used to load a bunch of
separate resources in separate requests, they are now served as
one big file.</li>
</ul>
<p>Tip: upgrade to <a href="https://pypi.org/project/DateTime/">DateTime</a> version 3.0: it
uses far less memory!</p>
<h3 id="cleanup">Cleanup</h3>
<ul>
<li><strong>Unified batch implementation</strong> (Plone 4.3). <a href="https://pypi.org/project/plone.batching/">plone.batching</a>.</li>
<li><strong>Kupu is gone</strong> (Plone 4.3). It&rsquo;s an addon you explicitly have to
list as an egg in your buildout.</li>
<li><strong>KSS is gone</strong> (Plone 4.3). This is significant. It was a great
feature, but it&rsquo;s been made obsolete by jQuery. A 40% improvement
in page load speed has been seen by not having to parse KSS
rules. If you are using KSS you can install
<a href="https://pypi.org/project/plone.app.kss/">plone.app.kss</a> as an
addon.</li>
<li>The <strong><code>plone_deprecated</code> skin is no longer enabled</strong> (Plone
4.3). It is still there but it is just not used by default.</li>
</ul>
<h2 id="whats-next-beyond-43">What&rsquo;s next beyond 4.3?</h2>
<p>There are bunch of packages under consideration for Plone 4.4, for instance:</p>
<ul>
<li><a href="https://pypi.org/project/plone.app.contenttypes/">plone.app.contenttypes</a>
(a reimplementation of the Archetypes content types as Dexterity content types)</li>
<li><a href="https://pypi.org/project/plone.app.event/">plone.app.event</a>
(which adds recurring event support for Plone and contains
cleanup)</li>
<li><a href="https://pypi.org/project/plone.app.deco/">plone.app.deco</a></li>
<li><a href="https://pypi.org/project/plone.app.toolbar/">plone.app.toolbar</a></li>
<li><a href="https://pypi.org/project/plone.app.multilingual/">plone.app.multilingual</a>
(a replacement for LinguaPlone with Dexterity support)</li>
<li>Having a configurable CSS class for portlets</li>
</ul>
<p>Interesting PLIPs David would like to see:</p>
<ul>
<li>Change the logo in site settings.</li>
<li>Configure things without needing to go to the ZMI:
<ul>
<li><code>portal_actions</code></li>
<li>resource registries</li>
<li><code>portal_skins</code></li>
<li><code>portal_css</code></li>
<li><code>portal_javascripts</code></li>
</ul>
</li>
<li>Standardise how things are done in Plone core to make Plone better example material
<ul>
<li>skin layer items (turn them into browser views)</li>
<li>formlib (use <code>z3c.form</code> instead)</li>
<li><code>portal_properties</code> (move them to <code>plone.app.registry</code>)</li>
</ul>
</li>
</ul>
<p>David asks us to get involved in building the next version of Plone:</p>
<ul>
<li>Review PLIPs to aid the FT by giving feedback on a PLIP. (See
<a href="https://plone.org/roadmap">the Plone roadmap</a> for
the PLIPs.)</li>
<li>Champion a PLIP: take responsibility to make a PLIP happen
(coordinate developers, make sure things are moving along).</li>
</ul>
<p>What will be the next version, 4.4 or 5? If there is backwards
incompatible stuff we want to include, it&rsquo;s probably going to be
version 5. Then again, releasing version 5 might also &lsquo;just&rsquo; be good
for marketing reasons. In short: David also does not know yet.</p>
<p><a href="https://www.slideshare.net/davisagli/ploneng-whats-new-in-plone-42-43-and-beyond">View the slides</a>
or <a href="https://www.youtube.com/watch?v=WFSDzpP4Ueg">watch the video</a>.</p>]]></content>
  </entry>
  <entry>
    <title type="html"><![CDATA[Travis CI: easy and fun CI for your Plone packages (Nejc Zupan)]]></title>
    <link rel="alternate" href="https://markvanlent.dev/2012/10/12/travis-ci-easy-and-fun-ci-for-your-plone-packages-nejc-zupan/" type="text/html" />
    <id>https://markvanlent.dev/2012/10/12/travis-ci-easy-and-fun-ci-for-your-plone-packages-nejc-zupan/</id>
    <author>
      <name>map[name:Mark van Lent uri:https://markvanlent.dev/about/]</name>
    </author>
    <category term="plone" />
    <category term="ploneconf" />
    <category term="testing" />
    
    <updated>2021-08-20T19:50:51Z</updated>
    <published>2012-10-12T09:45:00Z</published>
    <content type="html"><![CDATA[<p>A talk about Travis CI: hosted continuous integration for the open
source community.</p>
<p>Ideally you run the tests of a project often (on every commit) in a clean
environment. This way you can make sure that not only the product works
properly, but also that the buildout of the product works on a clean system.
That last part is really helpful during sprints: if someone cannot get the
buildout running, it&rsquo;s most likely the problem of the machine of the developer,
not the product itself.</p>
<p>If you haven&rsquo;t seen the
<a href="https://github.com/collective/tutorial.todoapp">tutorial.todoapp</a> then
definitely check it out. It shows some great best practises, including
tests and CI.</p>
<p>Travis is free for any public GitHub repository. You can also have paid
subscriptions for private builds.</p>
<div class="note update">
  <div class="note_header">
    Update (2021-08-02)<span class="hidden">:</span>
  </div>
  <div class="note_body">
    Unfortunately Travis CI
<a href="https://blog.travis-ci.com/2020-11-02-travis-ci-new-billing">changed their terms</a>
so please do your own research to determine whether Travis CI is indeed free for
your use-case.
  </div>
</div>

<p>Travis already ran 757k tests for +10k open source projects. They are crowd
funded: +120k USD from +700 people.  They support a lot of programming languages
and preinstalled DBs (you only have to enable them).</p>
<p>Travis is very easy to setup. To get started you:</p>
<ul>
<li>Sign in to <a href="https://travis-ci.org/">travis-ci.org</a> with your GitHub account.</li>
<li>Enable a repository.</li>
<li>Add a <code>.travis.yml</code> file.</li>
<li>Push the <code>.travis.yml</code> file.</li>
</ul>
<p>Example of a very simple <code>.travis.yml</code> file:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">language</span><span class="p">:</span><span class="w"> </span><span class="l">python</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">python</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="m">2.7</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">install</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="l">python bootstrap.py</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="l">bin/buildout</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">script</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="l">bin/test</span><span class="w">
</span></span></span></code></pre></div><p>(Note that because the tests are run from a clean Ubuntu install, you
have to have a buildout configured for you project.)</p>
<p>With <a href="https://www.jenkins.io/">Jenkins</a> it is harder to get
started. With Travis the minimal configuration is quite simple. But
you can get more complex if you want to. The drawback is that you only
get the console output. With Jenkins you can get more information
(e.g. coverage reports).</p>
<p>There are a number of services on the default Ubuntu image that is
used. You just have to enable them. For instance, the X Virtual Frame
Buffer.</p>
<p>You can whitelist or blacklist branches of your repository. This
prevents errors when you are just trying things out. If you want to
skip a specific build from being tested, you can add &ldquo;<code>[ci skip]</code>&rdquo; to
the commit message.</p>
<p>Build notifications can be sent. Mail and IRC are the most common
ones, but many more options are available.</p>
<p>There is
<a href="https://docs.travis-ci.com/user/browser-extensions/">Travis browser extensions</a>
that will show you the Travis status of a project when you go to the
page. If you want to, you can also create a status image
(<code>https://travis-ci.org/[YOUR_GITHUB_USERNAME]/[YOUR_PROJECT_NAME].png</code>),
e.g for on your PyPI page.</p>
<p>You can also have pull request testing. If someone issues a pull
request from a branch, Travis merges the code and you get a
notification whether the pull request is good to merge because the
tests succeed (or not). You can even see the status per commit (if
there is some back-and-forth on an issue for example).</p>
<p>Limitations of Travis: there&rsquo;s a 15 minute build runtime limit.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> The
limit is for the entire build&mdash;from start to the end of the test. And
since the build starts from scratch every time, this may be an
issue. And again, the reporting is still limited.</p>
<p>Tips to speed up the build:</p>
<ul>
<li>Use a non-ancient zc.buildout version (1.6+)</li>
<li>Proper configuration (add &ldquo;<code>socket-timeout = 3</code>&rdquo; and
&ldquo;<code>allow-hosts = ...</code>&rdquo; to the <code>[buildout]</code> section)</li>
<li>Use Asko Soukka&rsquo;s trick to
<a href="https://datakurre.pandala.org/2012/09/speed-up-your-plone-add-on-tests-on.html/">speed up your Plone add-on tests on Travis CI</a>:
download the unified installer and extract that to your buildout
cache.</li>
</ul>
<p>Nejc would like to see Travis and Jenkins go hand in hand in Plone.</p>
<p>Advantages of Travis CI:</p>
<ul>
<li>New developers with broken builds.</li>
<li>Can also be used for non-Plone packages (simple Python libraries).</li>
<li>It&rsquo;s cool to do public CI for company owned public packages. This
way others can contribute and see if their build succeeds.</li>
</ul>
<p><a href="https://www.slideshare.net/zupo/travis-ci-fun-and-easy-ci-for-your-plone-packages">View the slides</a>
or <a href="https://www.youtube.com/watch?v=HsGLLGeXFOU">watch the video</a>.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Update (2021-08-02): This information also looks outdated. Please refer to
the <a href="https://docs.travis-ci.com/user/customizing-the-build/#build-timeouts">Travis CI documentation</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>]]></content>
  </entry>
  <entry>
    <title type="html"><![CDATA[Performance for product developers (Matthew Wilkes)]]></title>
    <link rel="alternate" href="https://markvanlent.dev/2012/10/12/performance-for-product-developers-matthew-wilkes/" type="text/html" />
    <id>https://markvanlent.dev/2012/10/12/performance-for-product-developers-matthew-wilkes/</id>
    <author>
      <name>map[name:Mark van Lent uri:https://markvanlent.dev/about/]</name>
    </author>
    <category term="plone" />
    <category term="ploneconf" />
    
    <updated>2021-08-19T13:13:50Z</updated>
    <published>2012-10-12T09:00:00Z</published>
    <content type="html"><![CDATA[<p>What can product developers do to make their products faster to use
and easier to cache.</p>
<p>Plone is currently pretty fast, especially for low edit sites. It runs
fine on a 256Mb VM. Things that help us: Varnish,
<a href="https://pypi.org/project/plone.app.caching/">plone.app.caching</a>. It&rsquo;s
easy to setup. Portal implementations are different because there are
a lot of authenticated users there.</p>
<p>But that&rsquo;s for integrators and users. What about product developers?</p>
<p>We&rsquo;ve got a blind spot for performance and security. We don&rsquo;t
deliberately write &lsquo;bad&rsquo; code. We do think about our data structures
(some even overdo it).</p>
<p>A recap on tips from an earlier presentation Matthew gave:</p>
<ul>
<li>The catalog is already really big. Don&rsquo;t add things to the
catalog if you can help it, this especially goes for indexes.</li>
<li>If you have to, please use an adapter based indexer not a raw
<code>FieldIndex</code>.</li>
<li>Use Dexterity, not Archetypes if you build custom content
types. You&rsquo;ll be sorry in a couple of years otherwise.</li>
<li>Not sure about what structure to use for your data? Use <code>OOBTree</code>.</li>
<li>Avoid big objects churn by storing <code>Lengths</code> of things you need
instead of iterating over all items just to find out how many
items there are.</li>
<li>Find a balance between huge objects and annotation soup. Too many
annotations are not good.</li>
<li><code>For</code> loops inside <code>for</code> loops are a recipe for slow code.</li>
<li>Don&rsquo;t forget <code>sets</code> and <code>itertools</code>. They are good.</li>
</ul>
<p>Very few people use already available tools. For instance: a show of
hands proved that <code>cache:ruleset</code> ZCML declaration are not used
much. If you <em>do</em> use this, you can get an enormous performance
boost. You can go from 79 milliseconds for a request without
<code>cache:ruleset</code> to zero milliseconds with the ruleset. You can
directly assign a ruleset to an interface. Integrators can help here
by adding these rulesets to products you use.</p>
<p>Edge side includes (ESIs) are generally used to do package
composition. But it&rsquo;s easy to leak data so be careful. An ESI is a way
to say you want to include a certain URL on a certain location. That
way you can cache the rest of the page and include e.g. the user name
dynamically. Again, make sure you don&rsquo;t cache secret stuff for
everyone. Don&rsquo;t trust on ETags since they can be faked. You will have
to have a custom VCL and code. ESIs can give your site a good boost,
but it&rsquo;s also hard work. It&rsquo;s a lot easier if addons are written with
ESI in mind. So plan your templates for ESIs:</p>
<ul>
<li>Create many small templates that can be easily customised.</li>
<li>Split out user and role based stuff in separate templates.</li>
</ul>
<p>Integrators should not need more than a couple of minutes to add
ESI to your templates.</p>
<p>As said, it&rsquo;s easy to make a mistake regarding testing. So you really
need to test the caching. This goes for integrators, but <em>also</em> for
product developers. Far too few people run automated tests on their
caching. If you already have <code>plone.app.testing</code> based tests, it is
easy to do: create a new layer using a ZServer, start up Varnish and
make some testbrowser calls.</p>
<p>We need helper classes and methods for writing cache tests and actual
tests in popular packages. That way they can serve as an example.</p>
<p>The current <code>plone.app.caching</code> rulesets are targeted at
integrators. Product developers need a series of rules which we agree
to use so configuration would be easier.</p>
<p>Want to help put this into practice? Mail to <code>sales</code> at
<code>thedistillery.eu</code>.</p>
<p><a href="https://www.slideshare.net/MatthewWilkes/performance-for-product-developers">View the slides</a>
or <a href="https://www.youtube.com/watch?v=lX-dBMO3Q_E">watch the video</a>.</p>]]></content>
  </entry>
  <entry>
    <title type="html"><![CDATA[Lightning talks (Thursday)]]></title>
    <link rel="alternate" href="https://markvanlent.dev/2012/10/11/lightning-talks/" type="text/html" />
    <id>https://markvanlent.dev/2012/10/11/lightning-talks/</id>
    <author>
      <name>map[name:Mark van Lent uri:https://markvanlent.dev/about/]</name>
    </author>
    <category term="plone" />
    <category term="ploneconf" />
    
    <updated>2021-08-19T13:13:50Z</updated>
    <published>2012-10-11T16:45:00Z</published>
    <content type="html"><![CDATA[<p>The lightning talks of the second day of the Plone Conference. This
time they were just three minutes a piece due to the large number of talks.</p>
<h2 id="balázs-ree">Balázs Ree</h2>
<p>SlickGrid Touch: Making a complex Javascript table widget work on
mobile devices. Although you&rsquo;ll want your website to work on mobile,
older Javascript widgets don&rsquo;t work on touch
devices. <a href="https://github.com/mleibman/SlickGrid">SlickGrid</a> doesn&rsquo;t
support touch devices.</p>
<p>Touch support means that you are able to select/unselect, follow link, select
row, show menu, scroll, reorder row, delete row.</p>
<h2 id="maurizio-delmonte">Maurizio Delmonte</h2>
<p>Maurizio is a project manager. He needed a project management
tool. ScrumDo is a Django tool, but integration with Plone is hard.
They created a Dexterity based tool and also want to sprint on it on
Saturday. Have a look at the
<a href="https://github.com/collective/collective.simplemanagement">simplemanagement</a>
repository.</p>
<h2 id="armin-stroß-radschinski">Armin Stroß-Radschinski</h2>
<p>The Python Software Foundation created Python Brochure. 32 pages A4
full colour. Their aim: 10.000 distributions world wide. Diverse target
groups. Check out
<a href="https://brochure.getpython.info/">brochure.getpython.info</a>.</p>
<h2 id="elizabeth-leddy">Elizabeth Leddy</h2>
<p>Sometimes you can easily fix your own system by watching your
logs. Plone logs you want to watch are located in <code>var/log</code>. The two
interesting logs are <code>event.log</code> and <code>instance-Z2.log</code>. You can also
find them using e.g. &ldquo;<code>locate event.log</code>&rdquo; on *nix based system.</p>
<p>On Linux systems also check out <code>/var/log</code>. Interesting files are
e.g. <code>faillog</code>, <code>messages</code> and <code>secure.log</code> or <code>auth.log</code>.</p>
<p>You can monitor a log file with <code>tail -f</code>.</p>
<p>Need help with your logs? Ask Elizabeth.</p>
<h2 id="martijn-faasen">Martijn Faasen</h2>
<p>Martijn presented <a href="https://github.com/faassen/crom">Crom</a>. Basically
it is zope.component redone: the same API but less cruft. He gave lots
of code examples. Unfortunately it&rsquo;s backwards incompatible so we
cannot use it in Plone.</p>
<h2 id="manabu-terada">Manabu Terada</h2>
<p>Fuzzy search in Plone. In an intranet the could not use Google but
they did want to have similar suggestions. They did not want to use
Solr because they found it too hard to install and config.</p>
<p>Their solution uses the <a href="https://en.wikipedia.org/wiki/Levenshtein_distance">Levenshtein
distance</a>, is Python only
and the Japanese language is supported (using MeCab).</p>
<h2 id="philip-bauer">Philip Bauer</h2>
<p>They reimplemented CorkboardMe in Plone for
use on an intranet:
<a href="https://github.com/collective/collective.noticeboard">collective.noticeboard</a>.
It is currently in a personal repository but it will be moved to the
collective mid November once it is finished.</p>
<h2 id="lars-van-de-kerkhof">Lars van de Kerkhof</h2>
<p>Lars created a post install hook for virtualenv:
<a href="https://github.com/specialunderwear/buildout-bash-completion">buildout bash completion</a>. With
it you can easily add the <code>bin</code> directory of your buildout to you
path. It also contains some commands that make working with a buildout
and virtualenv easier.</p>
<h2 id="wolfgang-thomans">Wolfgang Thomans</h2>
<p>They had 460GB of data in an Oracle database. Everything was stored
three times and 90% of the data was not used. After they cleaned up,
&lsquo;only&rsquo; 130Gb was left. They dumped the binary data on file system and
exported the relational data to a new database with a sane
structure. They used
<a href="https://pypi.org/project/collective.transmogrifier/">transmogrifier</a>. For
the files (that were already on file system) they created stubs in the
ZODB and then moved the files to the right location in the blob
storage.</p>
<h2 id="jamie-lentin">Jamie Lentin</h2>
<p>Jamie showed a product he is working on. It shows which Diazo theme
rules work and which do not by colouring them green and red. The product
is not yet available.</p>
<h2 id="tom-gross">Tom Gross</h2>
<p>How to make Plone fast? Avoid Plone and serve Javascript and CSS
directly from file system. See
<a href="https://github.com/tomgross/collective.assets">collective.assets</a> and
the
<a href="https://webassets.readthedocs.io/en/latest/index.html">webassets</a>.</p>
<h2 id="eric-brehault">Eric Brehault</h2>
<p>Eric presented
<a href="https://github.com/ebrehault/resurrectio">Resurrectio</a>, a Chrome
extension. From the documentation: &ldquo;Resurrectio is a Chrome extension
allowing to record a sequence of browser actions and to produce the
corresponding CasperJS script.&rdquo;</p>
<h2 id="jonas-baumann">Jonas Baumann</h2>
<p>His company created a book publishing addon:
<a href="https://github.com/4teamwork/ftw.book">ftw.book</a>. It uses
<a href="https://github.com/4teamwork/ftw.pdfgenerator">ftw.pdfgenerator</a>
(which is based on LaTeX) to generate PDFs out of content.</p>
<p>They used it for financial reports, court reports, end user product
documentation, &hellip;</p>
<h2 id="domen-kožar">Domen Kožar</h2>
<p>There is an Ubuntu bug in the network manager since 2008. To prevent
issues to remain open for that long, he launched
<code>fundhub.org</code> today. It&rsquo;s a crowdfunding site to
fix free software one bug at a time. It currently only supports
bitcoins because paying is hard and bitcoins made it easier.</p>
<p>Multiple pledgers per issue are possible.</p>
<p><a href="https://github.com/4teamwork/ftw.book">Watch the video</a>.</p>]]></content>
  </entry>
  <entry>
    <title type="html"><![CDATA[Essential development tools (Kim Chee Leong)]]></title>
    <link rel="alternate" href="https://markvanlent.dev/2012/10/11/essential-development-tools-kim-chee-leong/" type="text/html" />
    <id>https://markvanlent.dev/2012/10/11/essential-development-tools-kim-chee-leong/</id>
    <author>
      <name>map[name:Mark van Lent uri:https://markvanlent.dev/about/]</name>
    </author>
    <category term="development" />
    <category term="plone" />
    <category term="ploneconf" />
    
    <updated>2021-08-19T13:13:50Z</updated>
    <published>2012-10-11T15:00:00Z</published>
    <content type="html"><![CDATA[<p>Kim shows us a collection of tools that can be useful during
development.</p>
<p>When you want to get started with Plone development, you need to know
where to get help:</p>
<ul>
<li><a href="https://web.archive.org/web/20120420015404/http://collective-docs.readthedocs.org/en/latest/index.html">collective-docs.readthedocs.org</a></li>
<li>Search via <a href="https://duckduckgo.com/">DuckDuckGo</a>,
<a href="https://www.google.com/">Google</a>,
<a href="https://stackoverflow.com/questions/tagged/plone">Stack Overflow</a>
or the <a href="https://lists.plone.org/mailman/listinfo">Plone mailing lists</a></li>
<li>IRC (<code>#plone</code> on Freenode)</li>
<li>Plone books</li>
</ul>
<p>To get started with a buildout, theme or product, use
<a href="https://pypi.org/project/ZopeSkel/">ZopeSkel</a> or
<a href="https://pypi.org/project/Templer/">Templer</a>. Also check out the local commands
these provide.</p>
<p>To speed up buildout, you can:</p>
<ul>
<li>Use version 1.6+</li>
<li>Use <code>allow-hosts</code> to limit where buildout is looking</li>
<li>Use timeout <code>-t 5</code>.</li>
<li>Use <code>-N</code> so buildout doesn&rsquo;t look for newer packages</li>
<li>Create a shared local buildout cache</li>
<li>Check out Ross Patterson&rsquo;s blog post about <a href="https://www.rpatterson.net/blog/buildout-performance-improvements/">buildout performance improvements</a>.</li>
</ul>
<p>Use <a href="https://pypi.org/project/mr.developer/">mr.developer</a> to check out the code
of eggs in your buildout so you can easily develop on them. (And to update them
all at once when you continue working on a later moment, use <code>bin/develop up</code>.)</p>
<p>The package <a href="https://pypi.org/project/sauna.reload/">sauna.reload</a>
picks up changes in the files of your packages and restart Zope
automatically. But somehow Zope is restarted very quickly. For Plone 3
use <a href="https://pypi.org/project/plone.reload/">plone.reload</a>, which
requires manual action to reload Python code or ZCML.</p>
<p>With
<a href="https://pypi.org/project/collective.recipe.omelette/">collective.recipe.omelette</a>
it is easier to look into the code of Plone and third party addons.</p>
<p><a href="https://pypi.org/project/plone.app.debugtoolbar/">plone.app.debugtoolbar</a>
shows debug information and it allows you to do stuff you normally
need to do from the ZMI.</p>
<p><a href="https://pypi.org/project/plone.app.theming/">plone.app.themeing</a>
allows you to install a zip file with the theme (works with Diazo).</p>
<p>If a site is unresponsive, you can use
<a href="https://pypi.org/project/mr.freeze/">mr.freeze</a> to
investigate. You can use it to print a stack trace for all threads so you
can see what&rsquo;s going on.  Kim used to use
<a href="https://pypi.org/project/Products.signalstack/">Products.signalstack</a>,
but mr.freeze can do more, like drop Zope to a <code>pdb</code> debug prompt.</p>
<p>Use <a href="https://pypi.org/project/jarn.mkrelease/">jarn.mkrelease</a> or
<a href="https://pypi.org/project/zest.releaser/">zest.releaser</a> to
release a package. It beats performing all the steps individually by
hand.</p>
<p>Continuous integration with <a href="https://travis-ci.org/">Travis CI</a> for
open source GitHub projects or <a href="https://www.jenkins.io/">Jenkins</a> for
internal company projects. Travis <em>can</em> be used for closed source
projects but they don&rsquo;t advertise with it and it&rsquo;s quite expensive.</p>
<p><a href="https://pypi.org/project/plone.api/">plone.api</a> is still under
development but already very useful!</p>
<p><a href="https://pypi.org/project/Products.PDBDebugMode/">products.pdbdebugmode</a>
allows for post-mortem debugging, but it can conflict with
sauna.reload.</p>
<p>Finally: see
<a href="https://github.com/collective/collective.exampledevtools">collective.exampledevtools</a>
for more details.</p>
<p><a href="https://www.slideshare.net/kaceeleong/plone-conf-2012-essential-dev-tools">View the slides</a>
or <a href="https://www.youtube.com/watch?v=JojegotBiF4">watch the video</a>.</p>]]></content>
  </entry>
  <entry>
    <title type="html"><![CDATA[Modern scalable deployment for Plone (Christian Theune)]]></title>
    <link rel="alternate" href="https://markvanlent.dev/2012/10/11/modern-scalable-deployment-for-plone-christian-theune/" type="text/html" />
    <id>https://markvanlent.dev/2012/10/11/modern-scalable-deployment-for-plone-christian-theune/</id>
    <author>
      <name>map[name:Mark van Lent uri:https://markvanlent.dev/about/]</name>
    </author>
    <category term="devops" />
    <category term="plone" />
    <category term="ploneconf" />
    
    <updated>2021-08-19T13:13:50Z</updated>
    <published>2012-10-11T14:00:00Z</published>
    <content type="html"><![CDATA[<p>Steve McMahon
<a href="/2012/10/11/plone-production-deployment-secrets-tricks-steve-mcmahon/">talked</a>
about Plone specific stuff, Christian is going to talk about the stuff
around that.</p>
<p>A few years ago Gocept already did hosting, but it was neither ideal
for the customers nor for Gocept itself. They changed that and this
talk looks back on that.</p>
<p>Infrastructure basically marries software with entropy. The developer
environment is clean and you can always start fresh. Operations can
only start clean exactly once. Infrastructure make handling the
entropy bearable. For Gocept, infrastructure is building a platform
that the application developer can count on.</p>
<p>The first thing to have is a data centre. At Gocept they just
buy that; they do not want to manage the building, air conditioning,
etc. They take a data centre for granted and plug in their
hardware. The are four types of hardware: routers, storage servers,
virtualisation servers and backup servers.</p>
<p>Everything is run in a virtualised environment (which is really
affordable). The OS is also maintained by Gocept. There are only a few
components an application developer or customer can change. They
rather run five smaller Zope servers than a single bigger one. They
try to make all the pieces as small as possible.</p>
<p>Automation is handled via <a href="https://puppet.com/">Puppet</a>. They want
the automation to be convergent and idempotent: regardless of the
initial state it should converge to a certain state, no matter how
many times the scripts run. The scripts should also be versioned and have
everything as code so there is not much manual work necessary. Puppet
is triggered by cron but they are thinking about moving it to some
sort of message queue so machines can figure out if they are affected
by the change and can act on it.</p>
<p>Management was binary: either <em>I</em> manage something or <em>you</em>. But
there are also tools where you can allow someone to add a
snippet. Backups and other day-to-day operations also fall under
management. It&rsquo;s not something a application developer should need
to worry about.</p>
<p>For monitoring they use <a href="https://www.nagios.org/">Nagios</a>. It&rsquo;s good
enough.</p>
<p>You need a help desk for support. One reason is that you want to
shield your developers from getting interrupted continuously.</p>
<p>There&rsquo;s still a lot left for developers to do on the application
level. For instance deployment. It has to be quick, repeatable,
platform-independent and a single click. They currently use
<a href="https://pypi.org/project/batou/">Batou</a> which is inspired by
<a href="https://www.fabfile.org/">Fabric</a>.</p>
<p>Good components are e.g. Nginx, Varnish, HAProxy, PostgreSQL,
Memcached, Supervisor and Postfix. Bad components: Apache (because although
configtest says the config is okay, Apache might still crash), MySQL (BDB)
and OpenLDAP.</p>
<p>They use a &ldquo;production-ready&rdquo; checklist. It contains items like log
rotation, database maintenance, system startup/shutdown and monitoring
(processes and ports).</p>
<p>One config file per environment (ini style) and they AES encrypt it. This way
they can check in secret stuff into source control. Using PGP would be better
because then they can encrypt it in a way only certain developers can decrypt
it.</p>
<p>The staging environment should be identical to production. And the
configuration of your development environment should be structurally
identical (but you can e.g. leave out Nginx, etc).</p>
<p>Tips for web applications:</p>
<ul>
<li>Share nothing in your app (e.g. require a single server, or share something on
file system)</li>
<li>Have many small processes</li>
<li>Do not listen on a port if you are not ready (the opposite of what Zope does)</li>
<li>Never store runtime configuration in the database</li>
<li>Avoid synchronous external request and accidental write requests</li>
<li>Use feature switches. This mean you can, at runtime, turn of a feature that is
misbehaving or to handle heavy load.</li>
</ul>
<p>Use <a href="http://supervisord.org/">Supervisor</a> and
<a href="https://pypi.org/project/superlance/">Superlance</a> (httpok and
memmon) to kill of processes. Use the 3.0 release candidate of
Supervisor, it&rsquo;s stable.</p>
<p>Build tips:</p>
<ul>
<li>Use virtualenv and buildout combined</li>
<li>Use buildout to configure the Python environment. Don&rsquo;t compile stuff with it</li>
<li>Use small configuration files and extend them</li>
<li>Don&rsquo;t allow it to pick versions</li>
<li>Use &ldquo;<code>-t 3</code>&rdquo; to timeout</li>
<li>Use buildout =&gt; 1.6 for performance enhancement.</li>
<li>Do not use mr.developer in production</li>
<li>Use &ldquo;<code>allowed-hosts=</code>&rdquo; to limit the places where buildout tries to fetch
packages</li>
<li>Using several small buildout configuration</li>
<li>Use <a href="http://www.pypi-mirrors.org/">pypi-mirrors.org</a>.</li>
</ul>
<p>Servers:</p>
<ul>
<li>Use as much ram as you can afford to prevent read requests.</li>
<li>Plan for less than 40% disk usage so you can put the backup database next to
the (still running) production database you are going to replace.</li>
</ul>
<p>Load balancer: use &ldquo;leastconn&rdquo; to balance. HAProxy has live statistics
UI.</p>
<p>Nagios: model the dependencies so a broken router doesn&rsquo;t trigger many, many mails.
Use <a href="https://github.com/Toubib/check-webpage"><code>check_webpage.rb</code></a>.</p>
<p>SLAs set expectations. How much availability do you need? That depends
on how much you can afford. Don&rsquo;t think in &ldquo;nines&rdquo;: 99% means 72 hours
down/year. Does that mean you can just take down a server for three
days straight and still perform according to the SLA? 99.99% is just
54 minutes per year, this is really not much time!</p>
<p>Instead talk about how many hours downtime
per day/month are acceptable. How much does that downtime cost for the
customer? By having this cost clear, it&rsquo;s also clear what it&rsquo;s
worth.</p>
<p>Align technical and organisational measures (when will someone be able to handle
a problem). Failover is just a temporary measure to bridge the time it takes
someone can solve the problem.</p>
<h2 id="resources">Resources</h2>
<p>You can read the book <a href="https://www.amazon.com/Practice-System-Network-Administration-Second/dp/0321492668">The practice of system and network
administration</a>.</p>
<p><a href="https://www.slideshare.net/theuni/modern-scalable-deployment-for-plone">View the slides</a>
or <a href="https://www.youtube.com/watch?v=VfmDx6BdOwQ">watch the video</a>.</p>]]></content>
  </entry>
</feed>
