published Nov 03, 2021, last modified Nov 04, 2021

Gil Forcada: meta and robots for a better developer experience

published Oct 04, 2023

Talk at Plone conference 2023, Eibar, Basque Country.

Who is here in Plone 20 years from now? We have a scale problem. People come and go, but Plone stays.

PEP420: Python native namespaces. You already get warnings when you still use other (setuptools) namespaces. Tricky to combine both in one namespace. It is best to switch in one day. We use about 100 Zope packages, 100 Plone packages, there are 200 or more collective packages, you may have internal namespaces.

How do we pass on knowledge? Can anyone here in the room make a Plone release if Maurits goes on vacation? There is documentation, training, a World Plone Day video of Maurits releasing Plone.

We can talk a lot to share knowledge, but we should also codify this knowledge. Create a predictable Developer Experience (DX). You work on a bugfix in a package, and do not need to worry if CI (continuous integration) is working, or wonder how to run the tests locally.

If you use an approach in one package and need to manually copy this approach to all other Plone packages, you will get tired, and make mistakes. If no check is done at every commit or PR, then you end up making several cleanup commits, fixing black/isort issues.

We have a long history of tools we use for checking code quality, including Jenkins, mr.roboto, GitHub Actions. When you create a patch in a PR, as occasional developer or big-time core Plone developer, the same checks should be run. Can you check this before you push a change? Yes.

How can you know if your add-on works? You write tests and run these automatically. Does your shiny new add-on still works after a few days when you have merged your own PR? Or after a few weeks when another developer creates a PR? Or a few months, after some dependencies get security releases? After a few years when there are new Plone and Python versions?

Introducing plone/meta, see https://github.com/plone/meta/. Original idea from https://github.com/zopefoundation/meta/. These are some templates for how you write setup.py, setup.cfg, pyproject.toml, GitHub action files, etc. It includes a tool you can point at a directory with your add-on, or a core Plone package, and apply the standards. Then run for example tox -e test to run the tests.

It also configures a tool for checking cyclic dependencies. When a cyclic dependency is discovered, you fix it. And because the check is done automatically, we guard against regressions, where cyclic dependencies would inadvertently be reintroduced.

It has various linters, formatters, a spell checker, check for release readiness.

Its main goal is for Plone packages, but you can use it for collective packages and packages from your company.

What is next? It would be good to test across different Plone and Python versions. Test ClassicUI and REST API.

Other ideas: plonecli/cookiecutter integration would be nice, so you get this configuration in new projects that you create. Create a local Plone instance with the add-on. Auto-update.

What is the power within? We use tox, but that is an implementation detail, could be nox, docker, containers, make.

Contributors are welcome: test it, use it, add fixes and features.

Questions? It would be good to support tests for frontend and backend, where the code is in sub directories instead of the top level folder. In the Zope meta repo there are already different skeletons, because they have normal Python packages, but also packages with C code which need different files and settings.

Innsbruck sprint: IT onboard

published Feb 07, 2023

Panel discussion during the Alpine City Sprint 2023.

This is a panel discussion on remote work and onboarding in IT, at the Alpine City Sprint 2023.
This is an Erasmus Plus project.
  • Dimitri, Center of Labour in Innsbruck.
  • Erico, working as employee for KitConcept, and company owner in Brasil.
  • Alessandro, working remotely
  • Cibilla, Fachgruppe, support employees, lots of ITers
  • Bernd, professor business education
  • Christine, IT project manager in Innsbruck, partner of IT Onboard.
IT Onboard: tools for students, employees, companies. Online interest test. Created an escape game for schools on how to work in IT. Vocational orientation: internship. We created guidelines for internship, especially for remote work.
Opportunities and risks of remote work.
Opportunity is that you have access to a larger pool of work people so you can get the right people for the right position.
Risks: cultural aspects. Not everyone is ready for remote work, they need other human beings around them.
Communication is key. Adapt your communication style.
Companies do not impose culture. Culture grows.
There are guidelines, but there is no recipe. You need to adapt your methods to your your employees.
Different timezones: what for one person is a last wrap up, for the other person is a first standup.
I was not looking to be a remote worker, it just happened. I needed more time for my family, which was difficult with the previous company I worked for. I started looking for a different company, and found it in Munich. They were already doing remote work, with someone in Scotland.
I like to have people around, so I enjoy company retreats. That did not happen during the pandemic, making it harder for me.
You can sometimes forget that you work for a company, and just do whatever you think is best. So please do spend time with colleagues, pair up with them.
The law in Austria lags behind for remote work. Especially social insurance can be a problem, and taxes. Or the companies have rigid rules, like overtime starts at 19 'o clock, when some of you start working. There are legal issues, and I expect some will come to court.
There is more competition, both for employers and employees. If someone in India can do the same work just as well as you in Austria, the Indian person will get the job because they can get paid less.
For remote workers, the employer tends to look more at output, where in an office you can easily show: I have been in the office for eight hours, it is time to go home. So at home you may actually work longer hours. Employees may need to be protected from themselves.
There is better compatibility between work time and family time, and less time spent in trains or your car. But the border between work and private time is low. This can be stressful.
Some employees really look for remote work, others are forced into it, mostly due to the pandemic.
Remote work can be highly valuable for some, and depressing for others. Having self management skills helps, you can get into a flow, put creativity to work, great. But how much of your life do you want to give to your remote work, and how much do you spare for other areas of your life?
Working three days at home and two days in the office in a different country, then it gets tricky. Social security is always paid in only one country.
What about fake independency? In Austria mostly a problem for your employer, if they hire you and basically still treat you as an employee, and you do not have any other employers. They will need to pay social insurance for you, at least if this takes a few months. But how can the employer know this beforehand? This is a reason for some large employers to not do this.
Every legal system in the world is made for people in one country working in that same country. That needs to change. There is no discussion on European or international level, only within Austria. Small example: if your kid breaks your laptop by accident, you have the same protection as if you would have done it yourself. Internationally we need to arrange things fairly, no single country can do this. Employees need to feel well.
Questions to ask yourself:
  • How do we want to work remotely?
  • What do we want to do remotely and what locally, in office?
Remote work is here to stay, and it needs its own rules.

Friday Lightning Talks

published Oct 14, 2022

Lightning talks at the Plone Conference 2022 in Namur, Belgium.

Fabio Kaiser Rauber: Interlegis Infrastructure

From Brazil. Interlegis is a program to merdernise and integrate the Brazilian Legislative Power. Hosted at a federal data center.

Small team requires more efficient processes. Automation is key to maintain quality. We started with shell scripts, then Puppet, then Docker in Rancher 1.0., then Ranger 2.1-2.3, now Rather 2.5. VMWare vSphere cloud native storage. So we use Kubernetes, more complex, but more powerful.

Helm is the packer manager for Kubernetes, allows templating of Kubernetes yaml files. You get Helm Charts.

See https://interlegis.leg.be.

Guido Stevens

In Ferrara we hatched a plan for world domination with Quaive. First step: The city of Namur will deploy a Quaive intranet next week.

Sorry I was not at the conference: I got married a few weeks ago.

Nicola Zambello: Introducing plone-remix

Working to minimalise the impact of IT on the environment. Remix is a full stack javascript web framework based on react-router. Everything is a form. #usetheplatform.

Now we have plone-remix. SSF-first with partial hydration. I need something light weight. plone-remix is a Plone front end with TypeScript, css framework agnostic. A catch-all route for contents, i18n, it is a Plone Rest API client

See https://github.com/raw-material/plone-remix and demo: https://github.com/nzambello/plone-remix-demo

Franco Pellegrini: Python blockchain conference

Mikko Ohtamaa asked me to show you this video. He organises the first Python blockchain conference. It is remote and free

See https://www.pychain.org/


Default page content type is replaced by new one where you can add text sections. Demo.

Steve Piercy: Documentation

Git clone https://github.com/plone/documentation/, do make install and make livehtml and you have a live preview on your computer while you are improving the documentation.

The search is much nicer, you can see in which context results are, and you can filter.

We hope to have a Dark Theme available soon.

Jens Klein: Plone mental model

See the Plone core development docs.

You have Products.CMFPlone at the top, then the core, then plone.base, and then other base packages. On top of CMFPlone you have for example restapi, working copy support. With this model in mind, you can start thinking about what really needs to be in core.

Jon Pentland: volto-plone-reloader

This makes plone.reload available via Volto.

See https://github.com/instification/volto-plone-reloader

Joël Lambilotte: François et Djoseph. And IMIO.

This is a statue near this building. There is a snail in a box, and they are afraid it gets out, because Namur people are called slow.

IMIO is a public company with 5 million euros revenue. 15% growth, 50 employees.

eDemocracy and FLOSS appeals to municipalities. Decisions of the public government are now automatically published. Unique project in Europe.

Neyts Zupan: Nix

How do I install Python? Elm? I need it to develop on https://paretosecurity.com/. cd into the directory, boom, I have the correct versions. Also for black, gecko driver, etc. The magic is Nix.

Maurits van Rees: Plone future

I work at Zest in the Netherlands, but live in Belgium now. I am starting my own company. No website yet, but you can mail me at maurits@py76.be. I will have no clients at the beginning, so I will have lots of time for core Plone at first. So Plone 6 will be finished within a week, and then I will get bored. So I have some ideas for the Plone future that I could work on. Maybe you could help during the sprints.

  • Policies for CMFEditions.
  • revisionmanager: allow purging all revisions older than 1 year
  • Image transform chain. See my focal points talk last year.
  • Make the code more Pythonic, use the walrus operator, etcetera.
  • More separation between backend and frontend, also in Classic.
  • Can Classic UI call the Rest API more?
  • Move all Classic UI code (p.a.layout/portlets/etc) into plone.classicui "mono repo".
  • Only load GS in zcml when plone.app.upgrade is available. Or some flag.
  • Toolbar by default at the top
  • Store the catalog in Postgres. Add-on. One per Plone site. <plone-site-id>_catalog . Integrate with querystring operators? NickJS (from Rob) does this. Replace the @search endpoint?
  • Get rid of relation catalog and intids, use a utility comparable to plone.app.redirection. Migration. Run side by side for comparison?
  • Unify viewlets and portlets into slots / blocks.
  • Auto save when editing a page. Or a block. Or only in TinyMCE or Slate.

Eric Brehault: Add GSOC ideas

We have lots of ideas for cool things in Plone. So add ideas for Google Summer of Code. Do not be lazy, file an idea, go for a mentorship.

Mikel Larreategi: plone i18n

Let's play a game with the language Kaixo. Kaixo means hello. Agur means Bye. Long string of word: "next year in our country". We come from the Basque country between Spain and France. Welcome in October/November next year.

Kim: Thank you

Thank you organisers from IMIO and Affinitic, and the city of Namur. This has been three years in the making. It was wonderful to meet each other after a long, long time.

Juggling the development of package-rich Python projects with mxdev

published Oct 14, 2022

Talk by Jens Klein at the Plone Conference 2022 in Namur.

mxdev is a utility that makes it easy to work with Python projects containing lots of packages, of which you only want to develop some. It works on top of stable constraints and uses the power of pip and git.

You learn

  • why we need it/ what problems it solves,
  • how it is used in your day to day work (based on Plone Backend),
  • how it compares to zc.buildout
  • how to extend it,
  • the current state of development and what our future plans are.

The release manager provides us with a pip constraints file with over 300 versions. You pip install Plone with these versions. Works fine. Now try to install a different version of plone.restapi, which is one of the pinned packages. Create an own constraints, interit from the upstream constraints, add new plone.restapi version. Try it: pip does not allow it, because there now are two conflicting version pins.

Now add mxdev to the requirements with a git url, in editable mode. Change something in it, commit.  Run pip install for this again. Boom, my changes are gone, because the package is checked out again, or reset to the given upstream commit.

Manually, you could download the constraints, edit them, and then it would work. Clone checkouts manually, and use filesystem path in the requirements.txt. It works, but you do not want this manually.

So I created a bash file to do this, but then thought, isn't there a Python tool for this? Well, there is Buildout. We love this, but it is unknown in the Python community.

So, I rolled my own solution: mxdev. It is a preprocessor. It reads its own configuration, fetches requirements and constraints files, replace constraints with version overrides, directly clone or update from vcs (git, etc). We have mx.ini for configuration, with version overrides and sections for packages to clone.

Packages and documentation: https://pypi.org/project/mxdev/

You can try it for Plone with cookiecutter-plone-starter.

Nobody cares about Plone: Selling a Plone website to somebody who doesn't care

published Oct 14, 2022

Talk by Talya Beyers and Karel Calitz at the Plone Conference 2022 in Namur.

The average client has no idea what Plone is, and they don’t really care. They won’t trust something they’ve never heard of, and there are plenty of other solutions out there that claim to offer the same things.

Designers and developers, on the other hand, do care about Plone: an elegant, powerful, secure, scalable, flexible solution to clients’ content management dilemmas. However, clients generally don’t care about the technical stuff – they just want to be online. It’s our job to tell them why Plone is the way to go.

In this talk, we share what we’ve learned about selling Plone to people who don’t care over the last 15 years.

When planning the trip here from South Africa, I was looking for a backpack. Why did I buy this one?

  1. It has some specific features.
  2. It looks good.
  3. It feels good.

I actually started at the bottom of the list. The brand is known to care about environment and their workers. Then number two, I like this black one. And only then I looked at the first item om the list.

We work at Juizi: websites worth having. We use Plone, and need to convince clients that Plone is a good choice. Mostly, they don't care.

Why don't people care about Plone? They don't know the name. Similar functionality is offered by other names that are more familiar.

What is Plone? You are here, so you know it. Plone is not so unique: most features are offered by most other CMSes as well. Some features we like: easy user management, content workflow and rules, many different content types. But the client is after a solution. What are benefits to the client? Explain the Plone features in terms of the customer. Will it get me online? Can my website grow? Is my website safe?

How do we sell Plone to people who don't care? Focus on the benefits, like: presence, freedom, safety.

Solve problems, rather than build new things. Clients think they are unique, but try to see the general feature that the really need. Think inside the box that Plone arrives in. Listen to wants and address needs. Never say never. Help the client funnel their budget to where it is needed.

Our team is our unique selling proposition. It sets us apart from anyone else. We don't just say we know how to use Plone. We highlight use cases. Clients stick around for years. A lot of business comes in through word of mouth.

In the backpack I bought, I could see the maker cared about it. His name was even in the label. We care about Plone.

Remember what clients are buying. They buy presence, freedom, and safety. Ensure they get this and they'll buy you.


These are calls to your emotions, offering presence, freedom, safety. Same as years earlier we said: "Plone gives you peace of mind." Can we prove that we are better at this than others? You can put up testimonials that highlight these things. Marketing in general is an ongoing conversation. Sales is story telling. Get them to listen, and they fall deeper and deeper in love with Plone.

If you enable your client to nicely and easily tell their story to their clients, then you both win.

Send them to the demo sites to try it out.

[Maurits: idea for my own company that I am starting up: have a few pages or paragraphs with features, and link them to a demo page where they can try it out themselves.]