German Perl/Raku Workshop Frankfurt 2023

8 minute read

It was that time of the year again: late winter/early spring; time for the German Perl/Raku Workshop. This year (2023) it was held in Frankfurt and thus hosted by the Frankfurt Perl Mongers.

What I really like about this event is the friendly atmosphere, the relaxed way that talks and discussions , as well as the opportunity to meet and catch up with the nice people who I’ve gotten to know in the Perl community.

GPW 2023 logo

These are the notes I made at the talks I attended; they just for me for easy future reference, so might not be useful to a much wider audience.

An interesting fact was that this was the 25th German Perl Workshop; the first being held in 1999.

Day 1 - 27.02.2023

Renee Bäcker - Webseiten testen mit Playwright

  • when testing websites, one can’t just use unit tests, for instance, JS can’t be tested and hence one needs something which can drive the browser directly.
  • Playwright
    • like Selenium etc.
    • written in nodejs
    • from Microsoft
    • works with many different browsers
  • playwright can generate code from user interactions in browser. Run npx playwright codegen and then click on elements and fill out fields etc. and then the playwright code will be auto-generated (in JS, Python or .NET).

Martin Becker - Infinity

  • how to handle infinity in software and hardware
  • discussed IEEE 754 infinity (-Inf, -Inf and NaN) in Perl and Raku
  • Raku handles complex arithmetic

Wieland Pusch - Installieren von Perl::LanguageServer in WSL2 (Walkthrough)

  • walk-through of how to install the dependencies required so that one can use the Perl language server on Windows (and Windows Subsystem for Linux) and thus be able to develop Perl code under VSCode.
  • VSCode talks to a WSL instance on localhost and that’s where the code is run.

Lee Johnson - Getting to Continuous Deployment

  • about what one needs to get in place so that one can start implementing continuous development.
  • monitoring is really important: how quickly do you know that there’s a problem in production after a change has been rolled out?
  • goal: want to reduce chance of problems happening on evenings/weekends
  • need consistency in all environments
    • need the same version of e.g. programming language, libraries and OS
  • need comprehensive automated testing
  • need CI (because of tests), which needs its own infrastructure
  • need a review and QA process, e.g. linting, formalise review to all merge requests (with some exceptions as appropriate)
  • need a staging environment (for larger changes, e.g. db upgrades)
  • will probably need an internal toolchain
  • need monitoring and alerting
  • wrt third party tools: choose wisely, couple loosely
  • need a rollback feature, which is built in to the deployment process
  • database changes can be rolled both forward and back
  • tip: continuously deploy all the internal things first
    • good proof of concept
    • if things go bad, it’s usually not a big issue and doesn’t hit the bottom line
  • works at PayProp; based in Switzerland

Max Maischein - Deployment mit Git als Transport

  • described how he deploys personal projects to his own servers
  • low complexity/low tech solutions to deploying personal project code

Nicholas Clark - Test::NoTty - faking successful failure

  • trying to use ttys with tests and stuff; fixing a problem at work
  • it turns out that the Test2 module can test the tty very easily (and sounds like Test2 has some advantages over the standard Test module.

Andrew Nugged - Perl and Koha Conference, Helsinki 2023 YAPC::Europe: uniting Communities, spreading Perl with Koha

  • Koha is an Open Source integrated library system written in Perl.
  • plan this year to have a YAPC in Helsinki and wants to have a full-featured YAPC again.
  • plan to have conference on 14-18 August 2023

Day 2 - 28.02.2023

Max Maischein - QR Codes zum Spaß und zum Login

  • creating them, reading them and how one can use them to transfer data between devices
  • can be used where someone has actual physical access to the QR code and the device reading it
  • strangely enough there used to be an ISO standard for QR codes, but it was revoked, and there’s currently no official standard.
  • one can create QR codes as PNG; Max has written a module to create QR codes as UTF-8 text output so that one can see QR codes in the terminal.
  • showed a demo app where he could use a QR code as a quick method to log in to a website.

Tina Müller - Test your App and get a Demo Video for free!

  • about OpenQA from OpenSUSE. It’s an automated test tool for operating systems.
  • can automatically generate videos of tests of running software
  • Tina has added mouse movement so that one can use the system to create more intuitive demo videos
  • OpenQA allows one to define areas on the screen which OpenQA should consider (one can also exclude areas), to reduce the amount of space for OpenQA to check. One can also define points where the mouse is supposed to click (great for testing GUI applications).
  • it’s possible to control how OpenQA interacts with a program via Perl
  • OpenQA has a Matrix channel, so one can also ask questions there
  • the system is also well documented

Nicholas Clark - Cron::Sequencer - replaying crontabs (and the pitfalls on the way)

  • cron dates from 1975
  • batch processing at work scheduled by crontab
  • tried re-running cron jobs (for testing and to capture corner cases), by resetting clock and db back to a known state and then re-running cron jobs
  • need to be very careful because mistakes can be very costly
  • production code interacts with banks
  • some code run once per month, once per year, some even rarer
  • had problems finding a Perl module which worked with crontabs well
  • wrote a crontab parser
  • added command line flags to help filter output to reduce noise in output (some jobs run every 5 mins; needed to remove ENV, MAILTO, etc.)
  • used Getopt::Long to handle command line argument parsing
  • created Cron::Sequencer (available on CPAN), which does everything he wanted to solve.

  • questions from me:
  • how much of code has been moved from crontabs to RabbitMQ? (GivenGain; Lee’s talk from last year). Do such changes cause more problems with replaying batch jobs?
    • getting further; lots of 5 minute jobs are converted to RabbitMQ and it’s possible to replay them
  • what happens if someone changes line order in crontabs?
    • not thought of this use-case; filtering only designed for a dev/debugging environment, hence not really needed for production

Raja Renga Bashyam - Perl T20 - The last minute challenges saved by perl

  • compared software development to cricket:
    • explorative research => timeless test matches
    • multi-year projects => 5 day tests
    • agile/scrum master => 1 day matches
    • innovator => T20 matches
  • these days, many things happening in software development happen really quickly, on really short timescales; much the same as in T20 cricket
  • Perl’s flexibility helped in being dynamic and innovative on short timescales
  • showed several examples of client requests where his company needed to be innovative and think laterally to solve tricky use cases.

Sören Laird Sörries - Die Wissenschaft vom Glück - The Science of Happiness

  • many ideas, thoughts, tips and reading references on the topic of happiness

Julien Fiegehenn - Github Workflows for CPAN modules

  • can build packages and run their test suites for several Perl versions and several different OSes automatically on commits and pull requests.
  • there are helper scripts and docker containers available from the Perl community to make building and testing Perl modules in GitHub Actions much easier.

Lightning Talks

Day 3 - 01.03.2023

Max Maischein - meine unvollendete Projekte

  • talked about projects that he’d started but never brought into “production” (or even had made it to “beta status”).
  • things fascinate him and he likes playing with the ideas in the code or what things can or could do.

Julien Fiegehenn - A DBIC::Debacle

  • told the story of a tricky bug he had in DBIx::Class at work and how one of his junior devs fixed it.
  • the bug that was found had been known in DBIx::Class since 2011
  • since DBIx::Class is no longer being maintained, needed to find a workaround
  • managed to come up with a workaround
  • implemented fix with “crazy” unit test to check everything still works (~3,500 lines of code)
  • found issues with GDPR (e.g. if someone wants their data deleted)

Renee Bäcker - Neue Perl-Features in 5.38

  • mostly small changes, bugfixes, doc updates, updated modules
  • some nice (small) additions
  • Perl 5.38 likely to be released in May/June 2023
  • changes:
    • no “true” value needed for modules anymore (e.g. the 1; at the end isn’t needed anymore)
    • //= and ||= are allowed in subroutine signatures (so that undef in input can be caught)
    • use of apostrophe ' as package separator is deprecated
    • new functions in builtin package: is_tainted, export_lexically
    • new experimental feature: class: beginnings of Corinna being added to core Perl

Lee Johnson - What Zelda taught me about nondeterministic polynomial time complexity

  • Legend of Zelda
    • a relatively linear game
  • there are speedruns and people try to play the game as quickly as possible
  • there’s now a randomised version of the game where the items are shuffled. The shuffling changes the possible route through the game; the randomiser still allows the game to be played to the end (there aren’t any non-playable games)
  • how was this possible?
  • used an old ROM and found the address space of every item in game
  • the randomiser then changes the game such that it’s like the Travelling Salesman Problem (which is NP-hard)
  • the randomiser creates a route so that the game is still solvable
  • showed running the randomiser to run the game with the debugger on so that one can see how the fill algorithm in the randomiser works.
  • there’s now a community around this randomiser for Zelda

Renee Bäcker - OWASP update

  • unfortunately missed the talk due to lunch taking longer than expected.

Rolf Langsdorf - Hold my place - extrapolating variables

  • good and bad practices with SQL in database-handling code when using placeholders in SQL code within Perl code.
  • has performance and security implications
  • has implemented a way to have the best of both worlds: be able to interpolate Perl variables into an SQL string however avoid security and performance issues.

Next year’s event

The desired dates for next year would be some time at the end of February, early March; at best (according to the organisers of this year’s event) would be between 13.3.2024–15.03.2024. Given that the Erlangen Perl Mongers have hosted the event every four years since 2008, it’s theoretically time for them to host the event again. They’re yet to make any comment either way.