Skip to content. | Skip to navigation

Personal tools
Log in
You are here: Home

Latest Plone Posts

Python Meeting Düsseldorf - 2017-01-18

From Planet Plone. Published on Jan 16, 2017.

The following text is in German, since we're announcing a regional user group meeting in Düsseldorf, Germany.


Das nächste Python Meeting Düsseldorf findet an folgendem Termin statt:

18.01.2017, 18:00 Uhr
Raum 1, 2.OG im Bürgerhaus Stadtteilzentrum Bilk
Düsseldorfer Arcaden, Bachstr. 145, 40217 Düsseldorf


Bereits angemeldete Vorträge

Charlie Clark
        "Kurze Einführung in openpyxl und Pandas"

Jochen Wersdörfer

Marc-Andre Lemburg
        "Optimierung in Python mit PuLP"

Weitere Vorträge können gerne noch angemeldet werden. Bei Interesse, bitte unter melden.

Startzeit und Ort

Wir treffen uns um 18:00 Uhr im Bürgerhaus in den Düsseldorfer Arcaden.

Das Bürgerhaus teilt sich den Eingang mit dem Schwimmbad und befindet sich an der Seite der Tiefgarageneinfahrt der Düsseldorfer Arcaden.

Über dem Eingang steht ein großes "Schwimm’ in Bilk" Logo. Hinter der Tür direkt links zu den zwei Aufzügen, dann in den 2. Stock hochfahren. Der Eingang zum Raum 1 liegt direkt links, wenn man aus dem Aufzug kommt.

>>> Eingang in Google Street View


Das Python Meeting Düsseldorf ist eine regelmäßige Veranstaltung in Düsseldorf, die sich an Python Begeisterte aus der Region wendet.

Einen guten Überblick über die Vorträge bietet unser PyDDF YouTube-Kanal, auf dem wir Videos der Vorträge nach den Meetings veröffentlichen.

Veranstaltet wird das Meeting von der GmbH, Langenfeld, in Zusammenarbeit mit Clark Consulting & Research, Düsseldorf:


Das Python Meeting Düsseldorf nutzt eine Mischung aus (Lightning) Talks und offener Diskussion.

Vorträge können vorher angemeldet werden, oder auch spontan während des Treffens eingebracht werden. Ein Beamer mit XGA Auflösung steht zur Verfügung.

(Lightning) Talk Anmeldung bitte formlos per EMail an


Das Python Meeting Düsseldorf wird von Python Nutzern für Python Nutzer veranstaltet.

Da Tagungsraum, Beamer, Internet und Getränke Kosten produzieren, bitten wir die Teilnehmer um einen Beitrag in Höhe von EUR 10,00 inkl. 19% Mwst. Schüler und Studenten zahlen EUR 5,00 inkl. 19% Mwst.

Wir möchten alle Teilnehmer bitten, den Betrag in bar mitzubringen.


Da wir nur für ca. 20 Personen Sitzplätze haben, möchten wir bitten, sich per EMail anzumelden. Damit wird keine Verpflichtung eingegangen. Es erleichtert uns allerdings die Planung.

Meeting Anmeldung bitte formlos per EMail an

Weitere Informationen

Weitere Informationen finden Sie auf der Webseite des Meetings:


Viel Spaß !

Marc-Andre Lemburg,

How to monitor your Plone servers with Sentry

From Planet Plone. Published on Dec 30, 2016.

use the free Sentry error tracking service to stay on top of production errors

Quills blogging add-on for Plone gets some attention

From Planet Plone. Published on Dec 27, 2016.

release 1.8.1

How to enable online reading of Taylor & Francis journals from your Plone site

From Planet Plone. Published on Dec 27, 2016.

a Plone external method to allow member-only access to reading an online journal

Plone performance: threads or instances?

By hvelarde ( from Planet Plone. Published on Dec 23, 2016.

Recently we had a discussion on the Plone community forum on how to increase performance of Plone-based sites.

I was arguing in favor of instances, because some time ago I read a blog post by davisagli taking about the impact of the Python GIL on performance of multicore servers. Others, like jensens and djay, were skeptical on this argument and told me not to overestimate that.

So, I decide to test this using the production servers of one of our customers.

The site is currently running on 2 different DigitalOcean servers with 4 processors and 8GB RAM; we are using Cloudflare in front of it, and round-robin, DNS-based load balancing.

Prior to my changes, both servers were running with the same configuration:
  • nginx, doing caching of static files and proxy rewrites
  • Varnish, doing caching and URL-based load balancing
  • 4 Plone instances running on ZEO client mode, with 1 thread and 100.000 objects in cache

Both servers where running also a ZEO server on ZRS configuration, one as a master and the other as a slave, doing blob storage replication.

First, here we have some information from this morning, before I made the changes. Here are some graphics I obtained using New Relic on the master:

Here is the same information from the slave:

As you can see, everything is running smoothly: CPU consumption is low and memory consumption is high and… yes, we have an issue with some PhamtomJS processes left behind.

This is what I did later:

  • on the master server, I restarted the 4 instances
  • on the slave server, I changed the configuration of instance1 to use 4 threads and restarted it; I stopped the other 3 instances
I also stopped the memmon Supervisor plugin (just because I had no idea on how much memory the slave server instance will be consuming after the changes), and killed all PhamtomJS processes.

The servers have been running for a couple of hours now and I can share the results. This is the master server:

And this is now the slave:

The only obvious change here is in memory consumption: wow! the sole instance on the slave server is consuming 1GB less than the 4 instances in the master server!

Let's do a little bit more research now. Here we have some information on database activity on the master server (just one instance for the sake of simplicity):

Now here is some similar information for the slave server:

I can say that I was expecting this: there's a lot more activity and the caching is not very well utilized on the slave server (see, smcmahon, that's the beauty of the URL-based load balancing on Varnish demonstrated).

Let's try a different look, now using the vmstat command:

Not many differences here: the CPU is idle most of the time and the interrupts and context switching are almost the same.

Now let's see how much our instances are being used, with the varnishstat command:

Here you can see why there's not too much difference: in fact Varnish is taking care of nearly 90% of the requests and we have only around 3 requests/second hitting the servers.

Let's make another test to see how quickly we are responding the requests using the varnishhist command:

Again, there's almost no difference here.

Conclusion: for our particular case, using threads seems not to affect too much the performance and has a positive impact on memory consumption.

What I'm going to do now is to change the configuration used in production to have 2 instances and 2 threads… why? because restarting a single instance on a server for maintenance purposes would let us without backends during the process if we were using only one instance.

Share and enjoy!

Plumi now on Debian Jessie, Ubuntu 16.04 and Centos 7

By anna from Planet Plone. Published on Dec 21, 2016.

We are very excited to announce that after much effort, Plumi is now available to install on Debian Jessie, Ubuntu 16.04 (latest stable) and Centos 7. The latest code is available here on Github: Documentation on how to install is available here: Further documentation including an introduction, installation, theming and maintenance guide has […]

Ten years of Plumi and looking ahead to 2017

By anna from Planet Plone. Published on Dec 21, 2016.

It’s been ten years now since we released our first public version of Plumi with a vision to provide free democratic access to video distribution, and I’m very proud of EngageMedia’s work to sustain the project through many successes and challenges. I’d like to thank the whole team at EngageMedia, and all our visionaries, programmers, […]

A Shout Out to Shout IRC

By from Planet Plone. Published on Dec 14, 2016.

I’m back on IRC for the foreseeable future, and loving it. Thank you Shout IRC.



A few years ago, I got old and gave up running command line IRC clients. I’ve run them all or at least a lot of them, including one whose name is almost certainly in the crosshairs of political correctness. Most recently I ran Weechat and irssi before that. For a while, I gave up IRC completely because I couldn’t be bothered. But I missed it, and nothing else seemed to suffice. I tried Slack and thought it was OK, but not IRC. I tried various web clients, but couldn’t find one I could stand to use long term. Then Shout IRC came along.

Stay online

I tried Shout for the first time over a year ago, but never bothered to create a Shout account on my server. This was a mistake, since user account creation enables one of Shout’s most powerful features: Stay online on IRC even when you log out.


I had gotten annoyed with having to login each time, so I stopped using Shout for a while. I heard good things about Kiwi, but was disappointed to see no npm release. This led me back to Shout, which does have an npm release. What follows are configuration details for, for posterity. (I added Let’s Encrypt at the last minute for good measure.)



  • EC2 t2.micro running Ubuntu 16.04.1 LTS


apt-get install aptitude
aptitude update; aptitude upgrade -y
aptitude install nginx nodejs-legacy npm python python-pip


sudo -H pip install dotfiles


sudo npm install -g shout

Certbot (Let’s Encrypt)

sudo certbot certonly --manual


server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 301 https://$host$request_uri;
server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    root /var/www/html;
    server_name _;
    location / {
        proxy_pass http://localhost:9000;
    location /.well-known/acme-challenge/AamTqX-Ic-YERnU0RWS2X_WpszSUsi2lIoXkMYOy_Fs {
        add_header Content-Type text/plain;
        return 200 "AamTqX-Ic-YERnU0RWS2X_WpszSUsi2lIoXkMYOy_Fs.gPCswvmAzfObWoqUg6d_…";
    ssl    on;
    ssl_certificate    /etc/ssl/fullchain.pem;
    ssl_certificate_key    /etc/ssl/privkey.pem;


(I store my .shout directory, which includes my Shout & Freenode credentials, in a private dotfiles repository.)

git clone Dotfiles
dotfiles -s


I’m currently running shout --private in screen, but may eventually add a systemd service for it.

Integration of Plone 5 with SMASHDOCS

From Planet Plone. Published on Dec 06, 2016.

SMASHDOCS is a web-based collaborative editor solution that we integrated with Plone 5...and the good thing: Smashdocs is available for free for NGOs.

Small Plone team ready for interesting problems

By David Bain ( from Planet Plone. Published on Nov 30, 2016.

Starting December 1, 2016 the Alteroo team will be available for new Plone gigs.

Our team members are ready to dive into modern Plone development including Diazo and Mosaic on Plone 5. We also have experience with older versions of Plone.

If you're into checking boxes we also have experience with Javascript/ReactJS/Webpack/Babel, Pyramid/Kotti, Firebase, QA, Linux server administration and General Design skills.

Send an email to newgigs - [ at ]-

Faster tests and python 3

By gforcada from Planet Plone. Published on Nov 28, 2016.

2x faster Thanks to the Plone Foundation that is sponsoring a new dedicated server for our jenkins nodes (the machines that run our test suite on every change), the Plone community is starting to enjoy faster builds (twice as fast!). If your pull request or jenkins job runs on Node 5 or Node 6 you … Continua la lectura de Faster tests and python 3

Using SCSS mixins to render repetitive selectors

By Thijs Kramer from Planet Plone. Published on Nov 25, 2016.

In a project that I’m currently working on I needed per heading different font sizes and line heights per breakpoint.

Looking for new challenges

By Martijn Faassen from Planet Plone. Published on Nov 23, 2016.

Fair warning: In this blog post I aim to sell myself. I'm looking for an exciting and challenging new freelance engagement.

I'm a software developer and I have been one professionally for about 20 years now. I have deep experience, and I continue to learn and create. I know what real-world codebases look like, and I know software development is also about people. I think I can offer lot of value. I can develop software for you, and I can also help you improve the way you develop software.

I see myself as a creative developer -- I want to invent things to improve life for myself and others. Creativity is what attracts me to software development the most. Creativity is transformative. If you need a bit of transformation in your software, talk to me.

I'm a web application developer. I've focused on web development since the late 90s. In that period I've seen the web grow from static websites and with a few server-side Perl scripts thrown in to the dynamic application platform it is today. I started developing web applications with the server-side, the only game in town then, but over the last 10 years I've shifted more and more to the client-side and JavaScript, where much of the creativity is today. I am however still very much at home on the server as well. I've done React, I've done REST, I've done hypermedia APIs, I've dug into GraphQL. If you need a web developer with deep insight in the whole stack, look no further.

I've focused on Python for the better part of my software development career. I came to Python early; I have seen Python grow from a small language with no name recognition to the enormously popular language it is today. I greatly enjoy using it. I've also criticized it where I felt it was needed, painful as it was. If you need a very experienced Python developer, contact me.

But in the last decade I've started to use JavaScript more and more. Thanks to the React community I've learned a few new things about functional programming; it's exciting to see it become relevant to the web. I haven't stopped looking at interesting new languages. I'm a developer who can look beyond a single programming language.

I have repeatedly demonstrated I can take a large piece of software and transform it:

  • Back in the day, I rejuvenated the Zope web framework with Five, a technology that is still in use by the Plone CMS today.
  • I took libxml2, a huge C library that was difficult to use for Python developers, and created the most powerful XML library in the Python world: lxml. I used the predecessor to Cython to do this (in 2004!).
  • I created a simpler, better way to use Zope with Grok. I've helped add web capabilities to existing codebases with a deep history.

I can help you open up your codebase to new possibilities.

I can build on other people's foundations, but I can also build new foundations. In the last few years I've created Morepath, a web framework that compresses the power I expect into a few thousand lines of Python code.

I'm not afraid to say I've also created many a thing that went nowhere. In 2010 I created Obviel, a client-side web framework. I took concepts like model/view separation and templates and a form library and brought them to JavaScript and the client. I thought I was doing something new in 2010, something that people hadn't really thought of yet. It turns out everybody had the same idea about the same time. Backbone burst upon the scene and Obviel never got any traction. Now I'm a frontend web framework hipster; I was doing them before it was cool. It was worth it, because I gained deep insights in what makes a frontend framework tick.

These days I prefer to use React for front-end application development. React is awesome. With React Native a mere web developer such as myself can even build a real mobile app. Want a developer that loves React but is also tempered by experience? Look no further.

I'm looking for a new challenge. I want to help build, create and transform. I work from home (in the Netherlands) so I can enjoy my family and garden, but I can certainly come visit you on a regular basis. I write code, I write docs, I write tests, I give talks, I give training, and I review your code. I am open, constructively critical and honest. I contribute a bit of insight here and there. My services are not cheap, but they are worth it.

In summary, here I am: a very experienced, creative web developer who looks a little bit beyond what's in front of him.

Think you have an interesting challenge for me? Please drop me a mail at and let's talk.

Project Makefile Open for Business

By from Planet Plone. Published on Nov 22, 2016.

Makefile for Python Web Development & Related Projects

A while back I was asked to speak to the Configuration Management Working Group of DC:


From that moment on, it was on: an excuse to finish and talk about the Makefile I’d been dragging around formerly since January and informerly much longer.

Finishing the Makefile

I started writing slides on the impressive then I realized I had to finished the Makefile to finish the slides. This mostly involved deciding on target names and testing target execution.

Finishing the Slides

As I mentioned above, is very nice. I had hoped to be able to build the slides myself with reveal.js, but in lieu of JavaScript skills I settled on using the editor. Later I exported and converted them to PDF with pandoc, which was not as nice (through no fault of pandoc, I’m sure; I just wish I could get a better PDF copy from the HTML export.)

Closed for Business

For month after month as I continued to tweak, the project-makefile repository README contained the following:


At some point I started using a ``Makefile`` in my Python projects. This repository
contains that ``Makefile``.


Open for Business

Now it contains this:



    curl -O



    Usage: make [TARGET]
    Available targets:

        - ablog
        - ablog-build
        - ablog-clean
        - ablog-init
        - ablog-install
        - ablog-serve
        - co
        - commit
        - commit-auto
        - commit-edit
        - django
        - django-clean
        - django-clean-migrations
        - django-init
        - django-install
        - django-migrate
        - django-migrations
        - django-serve
        - django-shell
        - django-static
        - django-su
        - django-test
        - django-yapf
        - git-checkout-remotes
        - git-commit
        - git-commit-auto
        - git-commit-auto-push
        - git-commit-edit
        - git-push
        - grunt
        - grunt-file
        - grunt-init
        - grunt-install
        - grunt-serve
        - h
        - he
        - heroku
        - heroku-debug-off
        - heroku-debug-on
        - heroku-init
        - heroku-push
        - heroku-remote
        - heroku-shell
        - heroku-web-off
        - heroku-web-on
        - install
        - lint
        - npm
        - npm-init
        - npm-install
        - package
        - package-check-manifest
        - package-init
        - package-lint
        - package-pyroma
        - package-readme
        - package-release
        - package-release-test
        - package-test
        - pdf
        - plone
        - plone-heroku
        - plone-init
        - plone-install
        - plone-serve
        - push
        - python-clean
        - python-flake
        - python-freeze
        - python-install
        - python-lint
        - python-serve
        - python-virtualenv
        - python-wc
        - python-yapf
        - release
        - release-test
        - review
        - serve
        - sphinx
        - sphinx-build
        - sphinx-clean
        - sphinx-init
        - sphinx-install
        - sphinx-serve
        - test
        - vagrant
        - vagrant-clean
        - vagrant-down
        - vagrant-init
        - vagrant-up
        - vagrant-update
        - vm

- Check out the `slides <>`_ for more information.

Now I invite everyone to use and contribute!

eGenix PyRun - One file Python Runtime 2.2.3 GA

From Planet Plone. Published on Nov 21, 2016.


eGenix PyRun is our open source, one file, no installation version of Python, making the distribution of a Python interpreter to run based scripts and applications to Unix based systems as simple as copying a single file.

eGenix PyRun's executable only needs 11MB for Python 2 and 13MB for Python 3, but still supports most Python application and scripts - and it can be compressed to just 3-4MB using upx, if needed.

Compared to a regular Python installation of typically 100MB on disk, eGenix PyRun is ideal for applications and scripts that need to be distributed to several target machines, client installations or customers.

It makes "installing" Python on a Unix based system as simple as copying a single file.

eGenix has been using eGenix PyRun internally in the mxODBC Connect Server product since 2008 with great success and decided to make it available as a stand-alone open-source product.

We provide both the source archive to build your own eGenix PyRun, as well as pre-compiled binaries for Linux, FreeBSD and Mac OS X, as 32- and 64-bit versions. The binaries can be downloaded manually, or you can let our automatic install script install-pyrun take care of the installation: ./install-pyrun dir and you're done.

Please see the product page for more details:

    >>> eGenix PyRun - One file Python Runtime


This minor level release of eGenix PyRun comes with the following enhancements:

Enhancements / Changes

  • Removed lzma module from PyRun for Python 3.x again, since this caused too many issues with incompatible/missing references. The module is still being built as optional add-on and can be used if the necessary libs are available, but it will no longer prevent PyRun from working altogether.

install-pyrun Enhancements

  • Updated install-pyrun to default to eGenix PyRun 2.2.3 and its feature set.
For a complete list of changes, please see the eGenix PyRun Changelog.


Please visit the eGenix PyRun product page for downloads, instructions on installation and documentation of the product.


Commercial support for this product is available directly from

Please see the support section of our website for details.

More Information

For more information on eGenix PyRun, licensing and download instructions, please write to

Enjoy !

Marc-Andre Lemburg,