German Perl/Raku Workshop Frankfurt 2024

12 minute read

This week I was at the German Perl/Raku Workshop in Frankfurt. This is the main yearly meetup of the German-speaking Perl/Raku community. The event isn’t just restricted to German speakers, though, as many talks are held in English and often the slides are in English even if the talk is given in German. This means that not only do people attend from Germany, Austria and Switzerland, but this year there were also attendees from England, France, the Netherlands, and even India!

Unfortunately, I was only able to attend the first two days of the conference due to other commitments, hence I missed out on the talks on day 3, which was a pity as they also looked rather interesting.

The workshop was, as usual, very well organised and was run–as it had been last year–by the frankfurt.pm Perl mongers. It was even hosted at the same venue as last year. This made finding one’s way around the area very easy because things like shops, hotels, and public transport were familiar from last year.

One change from last year was that it started each day at 10am instead of the more usual 9am. This was really nice as it made the pace feel rather relaxed and meant that one could get more sleep the night before. It also gave more time to enjoy a relaxed breakfast coffee somewhere local before arriving at the workshop.

There also seemed to be more people attending than last year; the room at the venue seemed to be almost at capacity. This was a good thing because there were new faces in the crowd and there were new people giving talks about what they were doing with Perl thus giving fresh perspectives.

It was great to catch up with old friends and acquaintances, swap stories both old and new, and hear what new things were happening at people’s work and within the community as a whole.

Many thanks to frankfurt.pm for organising the conference!

The notes below are those I took during the talks I attended. They’re not likely to be useful to a general audience (although maybe some of the links could be interesting). I’m posting this here as a way for me to have an online reference of what I saw, what I learned, and to jog my memory in the future if need be.

Day 1 2024-04-15

Renee Bäcker - Programmieren mit KI

  • showed on the basis of demos how one can use ChatGPT to create an application
  • one definitely needs to check what answers ChatGPT delivers
  • one can even get advice as to how the database should be structured
  • when one wants actual code, ChatGPT will even propose a directory layout and generate fairly basic commented code
  • if one asks for specifics, then one can get many more details
  • one can use ChatGPT in VSCode via Codeium
  • ChatGPT is slowly getting better and better at returning sensible and useful results
  • MetaGPT - project to create requirements, user stories, code, tests, etc. by running ChatGPT several times with appropriate input
  • need to be careful what one enters into the prompt; e.g. no sensitive data
  • ChatGPT 4 is much better than ChatGPT 3.5 in terms of answer quality

Tina Müller - CPAN Modules in the openSUSE Build Service

  • Tina’s new blog: https://perlpunk.github.io/
  • it’s possible to use OBS (openSUSE Build Service) to build packages; not only for openSUSE but also Debian and other systems
  • osc is a command line tool for the openSUSE Build Service; Open Build Service commander; used to configure a project to be built in OBS
  • osc is a bit like using svn
  • can configure things to run a build on each commit to the main branch
  • also possible to organise things so that on pull requests, new builds in OBS are triggered. This needs a bit more work because GitHub developer tokens are needed.
  • OBS currently only shows checks on GitHub once a build is finished; it doesn’t (yet) show pending/running builds
  • the OpenFactory is used by openSUSE to build all (e.g.) Perl modules available in openSUSE. There are about 1400 Perl modules in openSUSE. Extracting metadata is hard. Thus there is a cpanspec script which is used to automatically extract dist metadata and create a spec file for openSUSE so that the dist can be built.

Curtis Poe - AI–This Talk is Always Out of Date

  • AI means large language models (LLMs) in this talk
  • GitHub Copilot can be used in an editor, to help one stay “in the zone” when programming and not get distracted after wanting to look something up
  • prompt engineering is a useful skill to learn
  • one can iterate with prompt engineering, which is helpful to get better and better results
  • huggingface.co - like GitHub for LLMs
  • https://poe.com - access to very many AI systems in one interface
  • given enough context, ChatGPT can give very good, accurate answers
  • in SW devel: best practices -> design patterns -> frameworks; this process can take time
  • with AI this is happening now and very quickly
  • Devin - AI software engineer
  • short term - AI augmenting SW engineers rather than replacing them; future is uncertain
  • labour market is transforming rather than simply reducing
  • what’s best for you?
    • assess level of AI experience
    • assess level of risk
  • https://besuper.ai -> interactive video lessons to learn AI tools
  • LLMs generate code similar to junior devs; one has to treat the code as such and hence update things to make it more maintainable.

Lee Johnson - Work It, Make It, Clearer, Faster

  • originally a talk that Lee and Nick gave internally at work recently.
  • code in presentations can be distracting; people often end up reading the code instead of listening to the presentation
  • does code need fixing if it’s been working in production for the last 20 years? Sometimes… it depends.
  • showed an example of needing to fix and refactor a method used in code at work
  • heuristic: aim to reduce cognitive overload; move complex processing into a separate routine
  • good use of whitespace can help in readability
  • use strangler pattern to maintain outside API compliance but improve internal naming
  • example was actually much more complex because code duplication and repository duplication and then changes being made for specific countries. The story of how this was resolved is an involved story…

Herbert Breunung - Farbreich mit Perl 5

  • discussed a module he’s written which handles different kinds of colour spaces.
  • lots of explanation and background information about the different kinds of colour space
  • very powerful module; has many features and covers most of the different kinds of colour space; lots of tests; good docs
  • had put an enormous amount of thought into the API, the method names that are available, and the arguments one can use so that one can cover a very large number of colour spaces and operations on colours with a minimum of cognitive load

Silvan Dolezalek - Shopsoftware in Perl - seit 25 Jahren. Herausforderungen und Aussicht im Detail

  • CosmoShop - eBusiness creation software
  • started in 1997
  • after getting experience in building various websites, and then wrote shop software to support that development
  • stopped being an agency for lots of different things and decided to turn things around and focus on the CosmoShop software. The team really stands behind the product and this helped push development and overall business success
  • have moved more into B2B; easier than B2C
  • use a plugin system for core, installation and user level extensions. This helped simplify extending code and making sites specific for customers, however allowed a level of generality that a lot could be reused for all customers.
  • upgrading is of utmost importance for customers, so they have made it as simple as possible to start a new site and to upgrade an existing site

Day 2

Erkan Yanar - Endstation K8s

  • explained, via several examples, Kubernetes, how one starts it up, why one uses it, how to set up pods, how a deployment is structured, etc.
  • not strictly necessary to use Docker underneath k8s
  • config files in hist GitHub account: https://github.com/erkules/k8sworkshop
  • Erkan’s website: https://linsenraum.de/

Michael Lang - Perl im Container

  • showed how he tests applications with multiple Perl versions
  • works at SAP in cloud lifecycle management
  • currently building a system between alert processing and alerting software tools to handle the flow of information between the two
  • had migrated from Travis CI to GitHub Actions
  • needed to run self-hosted actions and standard Perl actions on GitHub don’t work on self-hosted systems
  • solution: build own Docker containers and run tests in them
  • Docker dive utility shows lots of detailed information about layers in Docker container which one can then use to optimise the size of Docker images

Nicholas Clark - Code coverage for merge requests with GitLab and Devel::Cover

  • explained differences between statement, branch and conditional coverage, which are statistics collected in Devel::Cover.
  • if files aren’t run at all, their coverage isn’t counted at all, which means that the percentages are higher than what they should be because lots of lines aren’t counted.
  • to fix this for PayProp’s use case, Nick created a script to touch coverage files so that the un-run files get accounted for in the coverage statistics
  • diff-cover tool for local coverage diff reports; extends Devel::Cover by just showing coverage for diffs themselves in the same way that GitLab does in merge requests. The tool’s output has issues though, so it’s still not a fantastic solution for locally viewing GitLab-equivalent coverage info in diffs.

Ralf Schwab - Hip-Hop-Hooks | Wie der CosmoShop mit generischen Hookpoints in Perl-Objekten umspringt

  • in order to enable easier and friction-less upgrades of customer software CosmoShop uses plugins where one can call hook functions to dynamically load/run routines as necessary (via AUTOLOAD).
  • have created their own hook system built on top of Perl’s OO system which uses AUTOLOAD to ensure that the appropriate functions are found and run (and hooked) at runtime.
  • makes the software very modular
  • how to get this new system into customer systems? With patience. The above idea was worked out and began in 2014 and the migration is still in progress to get the changes onto customer systems because of how slowly users upgrade their systems

Andrii Nugged - Koha Open Source Ambassadors Initiative

  • is starting an ambassadors program for Koha to help enrich Perl and Koha communities
  • https://PerlKohaCon.fi/ambassadors
  • Koha in active development
  • there are new positions in community member companies around the world
  • YAPC::EU and Koha Con were combined last year in Helsinki
  • wants to extend Koha usage worldwide and this will feed back positively to Perl community. Wants interaction between both communities.

Renee Bäcker - Neues in Perl 5.40

  • 5.40 likely to be released in May
  • builtin pragma; now the keywords true, false mean true and false; makes booleans much clearer
  • inf keyword represents infinity; handy for certain kinds of comparison
  • nan is for comparisons with a quantity that is NaN
  • stringify converts variables, objects into a string (much easier than previous solutions)
  • load_module enables one to dynamically load a module, the name of which might have been determined from a variable
  • the :reader attribute has been added to the new class system
  • there won’t be a :writer method as there are too many edge cases to handle in Perl core
  • __CLASS__ keyword contains the name of the class
  • Term2::Suite is now a new module in core

Julien Fiegehenn - Making humans want to be developers

  • discussed having people try out being a developer before they want to commit to learning/studying to become a developer
  • having interns can cut down on hiring costs because one can take them on long-term
  • gives access to fresh talent
  • more exposure as a company
  • this can be a lot of work: supervising interns, thinking projects for them to do
  • having interns helps build personal connections and networking, as well as for the company
  • sometimes appropriate to have an interview process for interns

Lee Johnson - Perl at PayProp

  • PayProp handles reconciliation payments for rental properties: https://www.payprop.com/
  • versions of Perl and modules used are same from dev, to testing, staging, prod etc.; things are thus very consistent
  • currently moving from CGI.pm to Mojolicious (about 2/3 complete)
  • issues/challenges
    • Mojolicious moves fast
    • they don’t do backwards compatibility
    • commit messages are poor
  • are starting to add an ORM; because don’t want to write dbi/SQL directly anymore
  • ORM usage allows them to hide some of the legacy issues in schema
  • are using DBIx::Class
  • unfortunately it’s currently unmaintained, but it allows a certain amount of flexibility, for instance one can still drop down to SQL if necessary
  • use Moose for OOP
  • slowly improving testing (regression, unit, integration)
  • PayProp encourages actively contributing to CPAN
  • hiring devs has the issue that some people who have known Perl don’t know the current ecosystem
  • Perl is still in a lot of places
  • newcomers to Perl often don’t have preconceptions; can help with onboarding or getting new talent

Renee Bäcker - Content-Security-Policy - der Alleskönner-Header

  • showed the kinds of things one can do with the Content-Security-Policy HTTP header
  • with Content-Security-Policy, one can control which sources elements are allowed to have so that noone can hack things or change things around so that they are from trustworthy sources
  • there are very many options that one can set
  • default-src: define sources for all elements; can actually set sources for all elements individually
  • can build upon default-src; i.e. one can disable everything and then incrementally allow the things one wants to have
  • need to think about what to allow and how far as can still create security holes if not careful
  • set headers in Apache/nginx

Max Maischein - AI::Ollama - Perl-Interface zu Ollama Modellen

  • wanted to search local content on own computer; hard to do with basic directory structure. One can use an AI (running locally) to index images and music and finally be able to search for things.
  • use semi automatic tagging: ask AI for three genres and then one can choose one oneself. -> works well for music
  • specify in prompt that one wants JSON with a particular structure
  • how to handle images?
  • ollama.ai: contains more than one model; Llama2 understands images
  • run ollama locally
  • AI::Ollama::Client: https://metacpan.org/dist/AI-Ollama-Client
  • language model training data can be automatically downloaded or one can download the trained model oneself to the local machine and then run the model locally on own images

Lightning talks

  • ntfy - small program to send a message basically anywhere (https://ntfy.sh/)
  • https://cpan-audit.de - check for security issues in cpanfile entries