Weblog

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

Lightning talks Friday

published Oct 17, 2025

Lightning talks on Friday at Plone Conference 2025 in Jyväskylä, Finland.

Fred: Sprint introduction

This weekend we have the sprint. This is a happy get-together where we talk and code and organise ourselves. Maybe you can get started with the Seven project (codename for the new Volto version). But basically you can work on anything, Plone or not. We start at 9. There is a stand-up at 10 o' clock, and wrap-up around 17.

See the sprint doc where you can add your name if you want to participate.

See also the #sprint channel on Discord.

Mari: Casseroles and the Finnish welfare state

Finnish cuisine has a reputation for being simple, even on festive occasions. Rutabaga casserole dates back to 1700s. Those were harsh times for Finland: crop failures, famine, plauge, wars. Casserole was the best we could get. It got better with the potate revolution (1800s). The potato improved food security. Early 1900s: urbanization and emerging middle class. They could have left the rutabaga behind, and follow higher classes of other countries. But the casseroles symbolize the "good old times" and a shared history. Starting at 1950, more women leave their homes, so dishes need to be simpler, more convenient. The welfare society takes shape.

Martin: Membership

Who here is not a Plone Foundation member. Have you attended more than two conferences? Have you organised a conference? Then you should become a member, come on! Fill in the application.

Timo: vibe coding and AI-assisted development

I started getting into electronics and Raspberry PI, with ChatGPT 4. With my son we got a Pico Go. He wants results in five minutes, an app on his phone. Trying ChatGPT and Claude. My son created a website that way. Think like a programmer: I told it to use Bootstrap as it is a good basis. And then I thought of another pet project: get Plone contributor statistics, to see how many PR and commits people have created during the years. I used Claude Code for this, created something in two evenings. Then used this for a Plone multi core setup. https://github.com/kitconcept/solr-multicore

Jakob: Beethovensprint

Let meintroduce a music group from my home town. Alien Fight Club. Their gitarist is Kolja. He also takes pictures, for example at Beethovensprints.

Beethovensprint 18-22 May 2026. Afterwards FedCon from 22-24 May, also in Bonn.

The week after is Buschenschanksprint

Erico: Volto image editor

Demo in Volto. Very nice!

Erico: State of Plone Typing

There are more than 10,000 project on PyPI that claim to use typing. It helps to know and document what you are doing. Frontend uses similar things. In the backend: see type hints in for example plone.exportimport. And we are being bullied, popular IDEs complain when we don't have them.

Plone includes 30 years of code, even from before the datetime library existed. And 170 and more different packages. I suggest creating plone-stubs as library so we can start slowly edit types to places. I have a proof of concept.

Alex Pilz: How to attract young talent.

Thank you Jyväskylä for a wonderful Plone Conference 2025. The young people I took here, got a good experience of the community. I am from Syslab, Munich, Germany. We have been using Plone for a long time. We have never organised a conference. Munich is a nice place. But we will not host the Plone conference there. We have found a nice place, where I have found the love of my life: Maastricht, the Netherlands. 21-27 September.

Karel Calitz: It's okay to talk about yourself and feel good about it.

In my twenties I joined a Big Brother Big Sister organisation, where you become a big brother or big sister to a kid who had less luck in family. We had to talk about feelings there.

I did not like talking about myself, my projects, sharing my work. For my website I had to make a shift to talk about it. Studies show you gain confidence by talking about yourself. Putting it into practice: share your work without apology, celebrate small wins, practice self-compassion, let pride fuel confidence for the next challenge. Open source depends on people who want to share their work and talk about it.

Naomi Woods: Sala Secure Oy

I work at the university here. The future of authentication is inclusive. A cyber security expert can use a secure VPN, an MFA, etc, but can their mother use that, or will she just re-use her passwords? Traditional MFA is too complex for many users. Our solution: SalaLogin. Authenticate with biometrics to their own device. Not many secret keys to remember. In our tests, people enjoy using it. We are looking for pilot and first customers. Can you help?

See https://salasecure.com

Astrid: Meeting

Possibly, January 2026, let's meet in Stellenbosch in South Africa. A bit less code-y and more strategic, get some momentum for the year there. Let us know if you are interested.

Sally: Plone Add-on competition

41 Plone add-ons were nominated this week.

  • 3rd place, 4 votes: collective.easyform, and "a boy got hero block" (please tell me what this is)
  • 2nd place, 5 votes: volto-form-block including volto.formsupport
  • 1st place, 6 votes: collective.exportimport

Photo competition

Winner is Jeremy, with the most-liked non-AI photo.

And see you at the sprints tomorrow.

Jayita Bhattacharyya: DSPy the Declarative Programming in the Era of AI

published Oct 17, 2025

Talk by Jayita Bhattacharyya at Plone Conference 2025 in Jyväskylä, Finland.

See https://dspy.ai

DSPy is an open source declarative framework for building modular, self-improving AI systems using structured code and natural-language modules, enabling fast iteration, composability, and model-agnostic deployment.

Prompts are a great way of communicating with LLMs, but they need to be elaborate and exhaustive, hard to maintain when changing from one LLM to another.

DSPy: the vibe prompter via programming. Small demo. You can ask it to show the prompt that is has actually sent to the LLM. https://hamel.dev/blog/posts/prompt/

GEPA: the game changer. Generic Pareto. It is a framework for optimizing arbitrary systems composes of text components, like AI prompts, code snippets, or textual specs, against any evaluation metric. It employes LLMs to reflect on system behavior and user feedback.

[Interesting talk, but not my area of expertise and way too much to write down, so look at the slides.]

Rémi Dubois and Benoît Suttor: Jenkins Out, GitHub Actions In: How We Made the Leap

published Oct 17, 2025

Talk by Rémi Dubois and Benoît Suttor at Plone Conference 2025 in Jyväskylä, Finland.

Here are the slides.

Legacy setup: single physical server, Ubuntu 14, Jenkins plus a lot of plugins, some Groovy pipelines of varying quality, hard to upgrade.

Why migrate? As you see, the Jenkins server was on its last legs, and we wanted to get more in line with the community. Why not Gitlab CI? We already had GitLab internally, but all Plone products are on GitHub, with all related GitHub Actions knowledge in the community.

We talked to our teams. Does the action workflow still suit your needs? What triggers the CI/CD? What would you improve?

We created the gha repository. This contains reusable composite actions. We use self-hosted action runners. These are defined in Docker images. They contain multiple Python versions, Plone buildout dependencies, etc.

Now a demo. When a PR is merged, a Docker image is built. When ready, it sends a message on Mattermost (similar to Slack). Then the new image is pulled, containers restarted. When a tag is created, this goes to production. We schedule that for the next day at 3 AM.

We kept an eye on observability, like the Mattermost notifications, also in case of problems.

Fun fact: the timing was perfect. The physical Jenkins server died due to disk failure a day before migration completed. We could not safe the data, but it was not needed.

Current WIP feature: shared reusable workflows on an organisation level. Align with plone.meta best practices.

Cheuk Ting Ho: Epic Evolution of Typing in Python: How We Get Here and Where Are We Going?

published Oct 17, 2025

Talk by Cheuk Ting Ho at Plone Conference 2025 in Jyväskylä, Finland.

Read about me: https://cheuk.dev

Question: What is the typing system of Python? Answer: Python is a dynamically typed language.

Strict typing can help avoid bugs, and make the expectations clearer.

Dynamically typed is good. It is easy to learn, faster to code if the code base is small, faster in runtime, makes for more flexible APIs, nice for prototypes.

Dynamically typed is bad. There are fewer signs of potential errors. A type mismatch will not raise an error until runtime. If the code base is big, it can be hard to maintain. Information about what input type works, needs then to be specified in documentation.

As Python grows, there are needs to overcome these disadvantages of dynamic typing. So Python evolved, and you can now use typing. A short history:

  • Before Python 3.5, there were already arbitrary annotations.
  • In Python 3.5, PEP 484: optional type hints, with the typing module added. This established gradual typing, giving space to gradually move code over to typing.
  • In Python 3.9, PEP 585: typing in the standard built-ins without always having to import typing; collection types.
  • In Python 3.12, PEP 695: type statement added. This introduces a first-class syntax for declaring type paremeters. It simplifies and clarifies.

But how can we achieve typing in Python? You can use type checkers. Static type checkers don't run your code: they just read it and check it that way. Examples: Mypy, Ty, Pyrefly. Dynamic validation: serializing complex data in runtime. Examples: Pydantic, Marshmallow.

Mypy is the reference implementation of PEP 484. Ty, Pyrefly and Pydantic (v2) are written in Rust, which improves the speed a lot.

Aroma Rodrigues: The limits of imagination

published Oct 17, 2025

Talk by Aroma Rodrigues at Plone Conference 2025 in Jyväskylä, Finland.

Historically we have all used computers mathematically, but now we get to use them linguistically. I will tell some stories of my work over time.

PyCon India: Terms and Conditions summarizer. You have an unreadable (for you) legal document. You get an email saying your rights have changed, but hardly anyone ever reads that. You could hire a lawyer, but I wanted to use a computer. Problem: no existing dataset. Approach: build a labeled dataset from scratch. Outcome: an NLP pipeline to extract obligations, permissions, and risks from such a doc. But the dataset was not really usable.

PyCon US 2024: Only bad demos in the building. With all the LLMs and AI, I was wondering what I would do if I could not keep my job? Maybe I could become a forensic portrait artist, so creating pictures of suspects of a robbery? I started experienting with giving a description of a man, and using an LLM to generate a picture. Kind of worked for some descriptions.

I also let an AI make a travelogue based on my photos. You run into things like the AI saying "I saw a car coming down the road" when I made the photo not for the car, but for the buildings.

Clothes matching: can AI do it? So picking out pieces of clothes that match nicely together. I got something together.

So basically, I can do anything!

PyCon-ZA 2019: NLP Fake News detector. There is improvement: today, LLMs offer richer context better understanding of blame dynamics, and scalable solutions. My source: 22M conversations from BuzzFeed on top 50 fake stories. Compare articles from spoof website and mainstream media. Use of fact-checking platforms like Alt News and SMHoaxSlayer. Looking for syntactic patterns, tagging statements to detect blame assignment, praise, event causality, active/passive voice patterning using nltk.RegExpParser.

PyCon Estonia 2023: If your friends are bullshitting, using SNLI. Goal: use LNP to spot contradictions in statements, proving when your friends are contradicting themselves. Check for two sentences: Entailment (they are roughly the same), contradition (they contradict), or neutrality (they are about something else).

I have lots more to tell, but time is up.