Weblog

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

Lightning talks Wednesday

published Oct 04, 2023

Lightning talks on Wednesday at the Plone conference 2023 in Eibar, Basque Country.

Luistxo from CodeSyntax: Count von Count speaks Basque

Counting 1 to 10: bat, bi, hiru, lau, bost, sei, zazpi, zortzi, bederatzi, hamar. Eskerrik asko!

Dylan and Jon: Is Plone 6 Mach?

What is Mach? New buzzword gimmick. An alliance of mainly CMS vendors. Promise: scalability, flexibility, innovation, improved performance. Micro services, API first, Cloud-hosted, Headless.

Yes, Volto is API first. No, Plone Classic and Volto are not headless. But you can plug a front-end into the REST API. Microservices: no, it is a big monoliths, but you could add logic in micro services. Cloud native: yes (ish). Could be SAAS, though no one is offering this at the moment.

Let's go MACHO: Open source.

Karel: true costs of migration

In South Africa there is no power 24 hours a day, which actually means water is a problem. So we got a filtration system, but got into unexpected problems. That can happen during Plone migrations as well. You have expected and quantifiable costs, but also probable and/or unquantifiable costs. Do integrations work? Can the team be onboarded easily? What will you do once you find out what you did not know at the beginning? Migration may not be the best answer, but can be very expensive.

Code Syntax: #PrettyEibar competition

Take pictures from Eibar, post on Twitter/X/Mastodon, tag with #ploneconf2023, on Friday the winner will get a delicious price.

Fred van Dijk: "Lies to children"

You should try Terry Pratchett's parody fantasy novels. He also wrote "The science of Disc world" with two scientists. This introduced "lies to children". Lying is part of education. You tell that everything consists of tiny blocks, keeping it simple, but then you get to protons, electrons, Maxwell, snares, etc.

Let's market Plone 6 and 7. As developers we try to answer stupid questions honestly. Should be store everything in one big container? Developers: noooo! But maybe for test driving Plone it is okay. One click install to Plone! That is marketing.

Alexander Loechel: eduTAP

Bridging online identity for reliable and trustworthy service access. From eduGAIN and eduroam to eduTAP. Tap to pay, tap to open a door, not tapping a beer. Vision of European Commission: mobility for students should be as smooth as possible. Plastic cards for this is old. We are going to an interoperable campus card. A common ID for all education world wide. This works with wallet apps on your phone. Deliverables: core, libs, docs, central service directory.

Manabu Terada: PoC for LLM search on Plone

Want to search on sentences within an Intranet Plone. Basics of LLM vector search. The PoC worked, but not yet in Plone. So create a few index class, inherited from ZCTextIndex.

Package: https://github.com/cmscom/c2.search.llm. Repo and name may change. Sample package requires a GPU, did not work on my Mac M1.

Also: PyCon APAC 2023 is in Tokyo Japan, 27-28th.

Michael McFadden: demo search on rfa.org in Basque with Nuclia

It works!

Erico Andrei: a bunch of (crazy) ideas

Ideas that need some implementation, will pay with beer.

  1. Move your add-on tests to pytest, using pytest-plone
  2. Move my add-on.
  3. Add new features to plone.api. We had features in 2013. Ten years later we have the same features plus relations. Nothing else. Add for example api for vocabularies.
  4. Create an add-on that stores blobs on an object store: S3, mini, etc. CloudFlare and Thumbor do stuff as well.
  5. Implement a Volto block of every entry in the Wordpress.com list of available blocks.
  6. ActivityPub support for Plone.
  7. Make the most innovative implementation of a new plone.distribution.

Johannes Raggam: Debug javascript in classic Plone

It is documented in the mockup readme: https://github.com/plone/mockup#development

Basically: start the development server of mockup, get the url, paste it in the plone bundle in the Resource Registries. Then add debugger; somewhere in the mockup javascript.

Michael McFadden: Video Content for Plone

published Oct 04, 2023

Talk by Michael McFadden (a.k.a. flipmc) at Plone conference 2023, Eibar, Basque Country.

We do a lot of video in Plone at Radio Free Asia: https://www.rfa.org/english/video

How do we start with video in Plone? Just add a new content-type. Then add a template, use the html5 video tag and pass it a url. And it kind of works.

But we added a stream view and set some headers that helps for streaming.

So someone uploads a two hour Ultra HD video and you get a ticket: "Plone is slow" Your job is to fix it. And now the sysadmin is on the line and says: "We are seeing some troubling disk usage."

Okay, start offloading to an external server.

What I was doing here, was a journey: instead of thinking it completely through and designing a perfect solution and never shipping it, I just started coding and getting something out there that kind of worked and that we could improve.

We never used blobs here, we just did not have the disk space. Saving a 50 TB video would give 503 as feedback. "What is this nginx thingie, I thought we were using Plone?"

So we hired a javascript developer to help here, and they saw a progress bar. And I wrote a z3c.form custom widget. Without even using jQuery. And then when you click Save, you only post some metadata to Plone, with the video already being somewhere else. This worked nicely.

And now a video on our site went viral. Google for "gutter oil", if you have a strong stomach. So the CEO gets a message, look at this video, and opens it on the phone in the DC metro, and the video does not load. "Plone is broken."

Video encoding to get it to a reasonable resolution. Use ffmpeg to get it done. Don't look at its code, don't create an event handler for this. You would do this somewhere externally. Amazon S3 or something. We use Kaltora.

"Variable/adaptive bitrate video delivery." Such buzzwords get you a new job and 20 grand extra. Chop the video into fragments. You can load video fragments on different resolutions, depending on your bandwidth. Code this into an m3u8 file.

So I created https://github.com/flipmcf/CasterPak, creating HLS stream packaging for video on demand, with a built in file cache.

We abstract away the complexity. How leaky is this abstraction? A native video content type in Plone, is this possible? With code like this, it starts maybe becoming possible. We can push it.

Audience: you can look at https://peertube.tv/ or https://mediacms.io/.

Piero Nicolli: What's new in CSS in 2023

published Oct 04, 2023

Talk by Piero Nicolli at Plone conference 2023 in Eibar, Basque Country.

With container queries you can query the size of a parent element and apply styles based on that. This is useful when media queries are not enough. Supported in all major browsers.

:has(). In Firefox still experimental. Apply styles to elements that contain the selector.

New nth-of selectors.

Text wrap balancing. Only latest chrome. Only use this for progressive enhancement.

initial-letter. Not yet in Firefox. For showing the first letter much larger.

Dynamic viewport units. All major browsers. Helps when 100v is too large because the browser shows toolbars. You have small and large viewport height and width: svh, svw, lvh, lvw. And dynamic: dvh, dvw.

Wide-gamut color spaces.  Allows for more vivid colors to be used. color-mix to mix two colours to create new values based on the channels of the colours getting mixed. Welcome dynamic color palettes without needing preprocessors.

Nesting is now supported in all major browsers, without preprocessors like scss.

Cascade layers. You can define layers and specify in which order they are applied.

Individual transform properties in all major browsers.translate, rotate and scale can be specified on their own line, so also overridden without overriding the complete transform line.

Extra: view transitions, only in latest chrome. Only in SPAs for now.

See https://developer.chrome.com/blog/whats-new-css-ui-2023/

css preprocessors will be used less, but they are still useful when you are working with a css framework like Bootstrap.

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.
Panel:
  • 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.