--- date: 2018-08-23 tags: Perl Conference description: > My feedback and comments on some of the talks I attended during The Perl Conference in Glasgow, in 2018. --- = The Perl Conference in Glasgow :toc: preamble This year the European Perl Conference was hosted in Glasgow, and of course I've attended a number of presentations there. On some of these, I have some feedback or comments. These talks, and the feedback I have for them, are detailed in this blog post. == Discourse Without Drama [NOTE] ==== There used to be comments here to show a different perspective to the speaker. However, someone's lightning talk has been removed because https://act.perlconference.org/tpc-2018-glasgow/news/1568[some people played the "offended" card], and no specifics are being published about it. Therefore, I cannot make any assertions on what is and what is not allowed, and have to assume that criticism of harmful beliefs will be shut down. As such, I have removed the comments which used to be here, in an attempt to keep it from detracting from the rest of my post. ==== == European Perl Mongers Organiser's Forum 2018 The Perl community isn't big nowadays, however, the Perl 6 language also offers a lot of concepts which are very well suited for modern programming. Sadly, if no new users try out the language, it will be all for nothing. As such, we need to bring new blood in to the community. One of the ways of doing this is by extending our promoting efforts outside of the Perl community. Most people who like Perl are in a social bubble with other people that are also familiar with the Perl programming language, be it 5 or 6. But we need to reach new people as well, who will most likely be outside of this social bubble. These people don't have to be techies either, they might just as well be marketeers or designers. I myself am part of the "techies", so I'll stick to this particular group for now. And I know people like me can be found at meetups, so it would be worthwhile to promote Perl at meetups which are not dedicated to Perl. Think of more generic programming meetups, or GNU+Linux User Groups. We have to be mindful not to be too pushy, though. Listen to other people, and try to understand the problem they're facing. Most of them will not be open to using a different language immediately, especially not Perl (which sadly has a particularly bad standing amongst people unfamiliar with it). Try to assist them with their issues, and slowly introduce them to Perl (6) if it helps to showcase what you mean. It might also be interesting to show people examples on how to solve certain issues before telling them the language's name, so they don't have a negative preconception solely from the name. Another thing to note is that Perl is more than just a programming language. It's a community, and a large library of modules, known as CPAN. And CPAN offers some nifty tools, such as the CPAN testers, which help ensure module developers that their code runs on a massive set of platforms and Perl versions. This has led me to consider the creation of a new Perl 6 module: `CPAN::Tester`, to make it easy for people to contribute to a large-scale testing environment for Perl 6. The idea is that one can run `CPAN::Tester` on their machine, which will keep track of new Perl 6 modules being uploaded to CPAN. The results are to be sent to another server (or multiple servers), which can aggregate the data and show a matrix of test results. This aggregating server could also be built as a Perl 6 module, possibly named `CPAN::Tester::ResultsServer`. This would make setting up an environment similar to CPAN testers for Perl 5 quite easy for Perl 6. == Perl 6 in Real Life $Work The speaker shows the perfect use case for https://docs.perl6.org/language/grammars[Perl 6 grammars], advanced yet readable parsing of text and performing actions with the results. It's an interesting talk, showcasing some nifty grammar constructs. The best part of this is that it actually runs in production, where it parses over 700 files, consisting over 100,000 lines of code, in about 22 seconds (on his laptop). This goes to show that Perl 6 is no longer "too slow to use in production". It might be interesting to run this application of grammars on every Perl 6 release to gather more information on the speed improvements of Perl 6, much like Tux's `Text::CSV` runs. == Releasing a Perl 6 Module The speaker starts off with detailing the platform which most Perl 6 modules use to host their code repository, GitHub. He also touched upon automated testing using Travis and AppVeyor. It was good to show how to make use of these, as automated testing oftentimes stops unintended bugs from reaching end users. But, I personally prefer GitLab over GitHub, as they have much better testing functionality, and they actually release their own platform as an open source package. I'd like more GitLab love from the community and speakers as well if possible. This would also make the speaker's CI configuration simpler, for which he currently uses a `.travis.yml` file. This requires him to build Perl 6 from source every test run, wasting quite a lot of time. It was also noted that there's a module to help you set up this module skeleton, `mi6`. The speaker also noted that it doesn't seem to add much once you know how a Perl 6 module is organized, and I tend to agree with this. Actually, I made a module precisely because I agree with him here, `App::Assixt`. This module intends to smoothen the entire course of module development, not just the creation of a skeleton file. It will take care of keeping your `META6.json` up to date, and ease uploading your module to CPAN as well. Lastly, the speaker says the `META6.json` documentation can be found in S22. While this is technically correct, S22 is *not* the implementation's documentation, this lives in the official Perl 6 documentation instead. S22 offers many additional information to be stored in the `META6.json`, but using these fields will actually break installation of your module through `zef`, rendering it unusable by others. I would strongly recommend people not to use S22 when trying to figure out what they can or cannot do with their `META6.json`. == How to become CPAN contributor? Submitting a pull request (or more correctly named, merge request) to a repository is possibly the most straightforward way to help out other projects. However, sometimes it will take a long time to get a response. The speaker notes this can actually be on the scale of years. I have authored a number of modules myself, and have been in the situation where I had not realized I got a merge request from another person (same goes for issue reports). I would recommend people who are not getting timely responses to their contributions to contact the maintainer via other channels which are more suited for communications. Think of email or IRC, for instance. You'll generally have a much better chance of getting a timely response from the author, and then you can work out your contribution and see if you can get it merged into the main project. The speaker also lists a couple of ways to get started with contributing to modules. One thing I missed in particular was the Squashathons footnote:[A Squashathon is like a hackathon, except everyone in the world is invited, and you can help out over the Internet, staying in your own home. Of course, you can still meet up with other developers and make it a social gathering in the real world as well!] for Perl 6. These generally offer a good entry point to help out with the language's development and the ecosystem's maintainance. Near the end, it was pointed out that it is a good idea to have a thick skin. Even when it's not intended, people can come accross as rude. This is in opposition to the talking point of the speaker yesterday (_Discourse Without Drama_), but he does raise a good point here. People oftentimes don't mean to insult you, but context is easily lost in written communications. Try to stay mature and professional, you can simply ask for clarification. If you feel the person remains hostile towards you, walk away. There's plenty of other projects that would love your contributions! == Conference Organizers & European Perl Mongers Organiser's Forum 2018 BoF Well, that's certainly a mouthful for a heading, and it even contains an abbreviation! This event was not a presentation, but a platform to exchange ideas together. One of the items that were up for discussion was _A Conference Toolkit_, or ACT for short. This is the platform used to organize Perl events, such as this conference and Perl workshops throughout the world. However, ACT is dated. They enabled HTTPS a short while ago, but it's still not the default because people don't want to risk breaking the platform. I think this is enough of an indication that it might be time to make something new to replace it. And I'm not alone in that sentiment, it seems. However, ACT is big and contains a lot of data we don't want to lose. It's a massive undertaking to make a new tool that works at least as well, and allows us to make use of the old data as well. There is a Trello board available that lists all the features that would be required to implement, so that's a good start already. I think now it needs a dedicated product owner with people contributing code, so a start can be made. This does seem like a touchy subject, since I'm far from the first person to want this. Many before me have tried and failed already. As such, I'd propose not making it a Perl centric tool. Make it a modular, generic event organizing tool. Get a good database design that we can import our old data into, so nothing is lost, but things can be converted to be more useful for our current needs. This way, we can work in small steps, and maybe even reach contributors from outside the regular Perl circles. This might even bring in new partnerships (or sponsors) towards the Perl community. Personally, I'd like to see something like this to be written in Perl 6. This way, it could also be used as a showcase project for the Perl 6 programming language. == Writing a Perl 6 Module Perl 6 has this very neat feature called https://docs.perl6.org/language/typesystem#index-entry-subset-subset[subsets]. These can be used to make your own types with very little effort, which can help tremendously to keep your code clean and concise. There are two arguments I have in favour of subsets that the speaker did not touch upon. First off, using a subset instead of a `where` clause in a sub or method signature will bring much better error messages. If you use a `where` in your signature, and the check fails, you'll get an error that there was no signature that matched `where { ... }`. Secondly, if you want to use abstract methods, you can't really use a `where`. https://stackoverflow.com/questions/51570655/how-to-use-abstract-multi-methods-containing-a-where[I've asked a question about this on Stack Overflow], which has the details as to why this doesn't work the way you might expect. Next, there's some cool things about operators in Perl 6. There are many of these available by default, and it's _very_ easy to add new ones yourself as well. In fact, the `Math::Matrix` module used throughout the presentation makes some available as well. Thanks to the ease of adding operators in Perl 6, if you have a `Math::Matrix $m` in Perl 6, you can get the norm by writing `|| $m ||`. This is the mathematically correct way to write this, making it easy to understand for everyone using matrixes in their daily lives. If you're a mathematician, small things like these are great to have. I have some comments on the `Math::Matrix` module itself as well, based on slides shown in the presentiation. The first thing I noticed is that there's a `norm` method using a `where` clause when it's not needed: [source,perl6] ---- method norm (Str $which where * eq 'row-sum') ---- This can be written instead as: [source,perl6] ---- method norm ('row-sum') ---- This is shorter and clearer, and you'll get better feedback from the compiler as well. I https://github.com/pierre-vigier/Perl6-Math-Matrix/pull/49[submitted a pull request on the GitHub repository] in an attempt to improve this, which got merged! The speaker was not aware it could be done in this manner, so I'm proud I got to teach him something right after he did his presentation. == Winding down I've had a great time at the Perl conference, spoke to many people with whom I've had some great discussions. I got to meet and personally thank a number of people who've helped me out over the past year as well. A big thank you to all the people who made this conference possible, and I hope to see you all again in Riga!