 which are already converted. So if you are planning to do it yourself, you can get my scripts. They are not generic enough that you can use them out of the box. But you can move to GitHub as well. That's it. Questions? No time for questions, I think. But one minute. One minute. Ha ha. Any question? Now come and talk to me outdoors that are available. It's hard to stay on your spot. Yeah, I moved the cameras. But I realised you hadn't. I was like, oh, sorry. Right, I need both of my clothes on. Oh, yeah. And twist them or twist them, whatever. Thank you very much. I really wish the receiver had a longer battery life as this does. What output do you have? Oh, you've got a VG. There we go. Excellent. Yeah. Good one. Microphones. Microphones. Okay. We have two more. Okay. Posthems and ours. We have a backup one just in case. Okay, so. Pop that in your pocket. So, I don't have to speak too loud, right? Loud enough to project the room and all the changed levels as needed. Okay. So just this one as well. When I say there's two microphones. Wow. Two microphones. Cool. Pop that one in another pocket. Yeah. Or clip it on or whatever. We're done. Excellent. One Claudio says you're ready. One Claudio. I think so. Okay. Thank you very much for coming. We will talk about Simpa. Simpa. We have from a permanent perspective. I'm Marc Chentre. I came with my friend and colleague, David Verdun. We work at Renata, which is a national research and education network in France. Renata is hiring. So if you are a French public servant, don't hesitate to contact Guillaume Rousse. And there are a lot of people from university or Strasbourg there. Simpa. What is Simpa? Which is a very old, 20 year old mailing list manager. Really in open source from the very beginning in GPL. There is a lot of feature in Simpa because it's done for research and education network. And we have a huge amount of requests, feature requests. So there is so many of them. David gave a talk at Chiappi about it. So don't hesitate to YouTube. We made a survey in the year later. And we have a lot of astonishing numbers, which are available on Simpa.org. The thing to memorize is every two seconds somewhere in Simpa in the world is processing a new incoming message. We have a commercial support from contributors of the project. We just joined the open web consortium. We expect more partner. We expect more contributors. And Renata is really want to involve the community into the development process. By the way, in fact, Renata became a member of the community, not the real leader. So we have a GitHub. We have a free node. You can join us from the mailing list, developers one or user ones. But we have a small community of developers. This is a problem for Simpa because we have a lot of expectation. I talk about this in the lightning talk just to come. We have a lot of expectation for Simpa and we have so few contributors. Two, around two at Renata, two regular contributors and a lot of, you know, one patch man. And it seems the problem, the barrier for contribution, even my scream don't want to show that. Sorry. Yeah, let's be honest. It's pearl. It seems no one likes it. And I don't understand why. I have some clues. So the new cut base should be newcomer friendly and maybe simpler to maintain. We want to rewrite some power with a new coding style based on Simpa. Okay. We have on Simpa a lot of modules. We want to just reduce. We want to use the standard modules and tooling tensor to move the BX class. Actually, we want to ease the, the, the life of developers by as, as Damian Conway said, removing the infrastructure code. Okay. What is removing infrastructure code? It's the boring part will be higher hide in some modules with declarative syntax. Move is a perfect example. We use it. Sorry. We use it from 10 years. Yeah. I think we have 10 years. So basic example. We have this counter. I use the class counter with a constructor with a value method with the next method and with an add method. Value shows the value of the counter next increment and return and add, add a value and return. Okay. No big deal. And developer used to be happy with that. No. No one wants to write this kind of code anymore. We use move since 10 years and without that. And I don't want to, to, to, to, to describe move anymore. I mean, too many yapsies with move. So, but basically, we have just, we define a property which is value, which is read and write about. So the getter and setter will be created and with the default value zero. Okay. Then you have a next function, next method. Next with the method is a function that takes self as a first argument and value in the second argument. And then this is a part of more I don't like because it's O O programming and like, yeah, self value is self value plus one. So you have to write this, use the getter, make a computation and use the getter. And we will see later about the function add, the method add. Plus we have type checking. Okay. Type checking. You can use the user constraint. And basically what I say here is if it's a reference, it does contain something else. Oh, it's missing a plus. Sorry. It does not, if it's not a number, I die. Okay. There comes another structural module, which is type standard, which is the basic, basically type standard is an extension of wrapper over around type tiny. Type tiny is a module to declare the declarative way to define a type checker. So type standard provides some kind of new keywords like ints, for example, ints to check if it's ints, string to str to check if it's string and so on. And you can combine checkers with checkers. So you can write maybe string, which is maybe undefined string, actually. Array for string. So you define a list of string, instance of list, which is a reference to a list. So you can combine the, as you can combine the checker, you can combine the checker with another checker. We can nest something. So you write those kind of things. I want an array of maybe instance of list, which is a collection of list. Okay. But you define this way, this module, this syntax is only declarative. No more code. So you can use it for your declaration, for your property declaration. Back to this function, I said just before that I'm not happy with that. Because back in my old pair, this fry-zell one, I just can use plus-plus operator. I mean, why using a setter, then a getter? I just want to plus-plus. It's easier to write. And I spare some method calls. And I think, yeah, counter value is just the sub counter value, okay? With self as a first parameter and two as a second parameter. What if this value, this sub is L value? If you don't know L value, it's not a problem. L value is very simple. L value is a function that wraps a variable. So for example, I have my variable val, and I wrap this one into counter. So I can use a function to deal with a variable as it is a variable. So counter can be set, if it ends up, I set to three, and I increment it, okay? So it's a value captured in the variable. So if I have, if I can do that, I can have this, the first one. I love it because it's fragile. It's breaking the mu abstraction. The second is a mu variant, which I don't want to use. The third one is the one I expect, okay? Just plus, plus a property. So let's code it. And finally I said no. Now let's go shopping. Let's, let's try C pan. And I found it. We have mu x, mu x L value attribute. So you can just use mu it, mu x L value attribute, and to the, in the definition of your property, just add L value is one. So now the method next is written this way, which is okay for a Perl developer, a Perlbanger, and it scares the newbie still. Why? Why because of this crap, okay? We are used to it. It's okay for us. But for, for example, for a Python developer, it's unacceptable. They don't want to write this, to, to read this kind of stuff. So, yet another module. But yeah, okay. I know, I know what you, you, you think it's so powerful. I can do everything. Yes, it's powerful 10% of your time. The rest of your time, it's just boring. Okay? So, so that's why we have signatures. So 5.20 signatures, and we are in the Sampa project. We are starting five old one. Why? Because some people run some very old servers. And we decide that no one be left behind. So what to do? Signature, Perl 20, but from 12, we have Plagal Keyboard, which is you can create a new keyword to extend the syntax of Perl. And I don't want to use that because honestly, it's way beyond my, my skills. But some people, clever ones, use that to create, for example, function parameter, which is also Sipan. I just upload from Sipan. With function parameters, we have this new keyword, fun, which is a keyword that gives Perl the ability to have a signature, a decent one. So you are used to the old one and the Python people, for example, will prefer the fun keyword. Okay? Not a big deal, change, send the three letters, and you have signature since Perl 5.12. What if I want a parameter, a default parameter? Okay? We are used to, yeah, testing if the array contains the number of the value we want. The Python people are used to that, and Perl 5.20 are used to that, Perl 6 are used to that. So we will use that too. Okay? There are many other features in this module. For example, you can, for the people who tried Perl 6, we have this name parameter, which is really cool with some column notation, and you have these two, but I have no time. And, but here you can add maybe a type check, okay? This is a clutch in my first version because I just want to, I don't care, I don't spend time on things that, it's important that I don't spend some time for this kind of thing in my project. So, as always, you delegate to type standard. Type standard can be used in the signatures of type of function parameters. So now you can crash if someone, something else, for example, a reference is passed as a first element. Okay, another one. Clearly, this is a method, okay? Obviously, fun next, self as a first argument, this is a method, okay? So they introduce the keyword method. So you can just write, yeah. This is something I want to write. This is something that is readable for a newbie, okay? Always. And so, yeah, this kind of stuff. So we can, remember, I dropped the add and I said, okay, later. I just don't want to describe this thing because obviously the final version of add is that, which is so useless now because obviously plus equal x would be more natural. I will not define this function in my class. So, okay, it's way shorter than the previous version, okay, the parallel version. Also I get conventions. Conventions is I will use fun for private functions and I will use method for public methods, okay? Finally, finally, this is a final definition of the class, okay? So you have package counter, which is use moves, which is moves x value, type standard. This is the property definition and these are my two methods, okay? Any question? No? Okay. So in the real life, I need more stuff and I really want you to prevent the new people in the project to discover all these stuff by themselves because frankly, they don't. They don't spend time... Okay, when they want to use their time, they will go shopping on Amazon, not on C-Pan, okay? So they don't know those kinds of modules. So I brought them for you. I brought them for them. There are a lot of one. I don't have time to describe all those one. But here, we don't want this kind of boilerplate directly in the project, okay? So we wrap it into a module, which is Sympathik and Sympathik OO. So you use Sympathik OO, you use type standard, which is not included in the package because you need to import the things you want. So there is no value to import directly from Sympathik. So what? Finally, we use less code. You declarative things make less bug. Yeah, less and less bug. You can focus on your problem. You can solve your problem. More documentation and more tests because all those packages are maintained by very good pearl mongers who take care of their projects and more consistency because basically, if you want one obvious way to write it, you use it. It's a chair knowledge, so you can have some people from other projects that can help you chair maintenance because if you find a bug, you fix the bug, you fix the bug for all the project using this kind of module. So this is important. And we will have a well-documented coding style directly into the pod of Sympathik. So for the newcomer of the project, they have one pod to read with lots of links. With the other modules. So just use Sympathik if you want some procedural stuff. If you declare a Sympathik object, you can use a move wrapper. This is a work in progress. Any feedback and ideas are really, really welcome because, you know, I'm never sure about myself, so don't hesitate to do some comments. I will push Sympathik soon. The code is running, but I just need some extra documentation. Oh, yeah. The GitHub is on the project. Sorry. Yeah, this is the page of the project. Yes, this one. Okay, so don't hesitate to join the project. Contact us. Ask questions, feedback and everything. Any questions? Yes. If I was alone in charge, we will use per 20 because there are very good stuff in 20 that are obviously a very good reason to upgrade. Even if you are a system operator, just upgrade. The thing is, so I tried. I tried to convince system administrators. And the common thing is, yeah, but we are on Red Hat. And the problem with Red Hat is, yes, they have those, they have the software collection and you can upgrade. But if you do that, you lose your Red Hat support. So they are stuck to the old one and they don't want to move. So, and the problem is, we are a community and we want no one left behind. So we made a vote, a poll. And most of the people were okay for per 16, but two of them, I think, voted for 14. So we stayed in 14. Any other questions? Yeah. Basically, in the Sampa project, I started with the docker. The thing is, docker is probably no one with the same competent with docker tried it. But I tried and the thing is, Sampa starts a lot of demons. And having one demon by docker was way too far from my competence when I tried this. So it's a big fail for the moment. But it's a way to contribute. Anything? I have some, I have 20 still. 13 minutes. Okay, good. I have extra slide. Yeah, actually I was about, I was really scared to get out of time. So I removed a lot of slides that explains why actually remember this one. Yeah, this boy loved playing. I said I have no time to explain, but actually I have. So, yeah. Okay, those kind of codes I want to remove from the code base. You change the gear to the spool or you die. You open a fight or you die. You change the gear or you die. And if you are tired, you forget to die. Okay, it's boring to write. It's boring to read. And you are human. You can do mistakes. So use autodi, which is very simple. Use autodi and you write this code. Autodi is very simple. When you have a system error, it's through an exception, okay? So use autodi. Autodi, don't forget to die. Can someone tell me what this prints? Yeah, okay. There are crazy people in the room. Okay, just tell me. Now, the solution for this is learn parable by the art, okay? There are something like 40 variables. It's easy to learn. Or you can just use explicit English names. So use English, print GID, which is so much real. Pseudo-cyclomatic complexity removal. Which is. Actually, cyclomatic complexity is the way your code is nesting. Okay? You have a loop in a loop in a loop in a loop. Okay? Or a loop in a condition. And yeah. And the thing is, you can write this kind of stuff, okay? I found it a lot in sympa. And I really want to remove this code. Why? Because it's boring to read that and to edit that. Because if you look at this, die is a way to leave the function, okay? Return is a way to leave the function. So you don't need the block, okay? You can directly write this kind of code. It's the same thing and it's more readable. Don't do it, yeah. Another thing I would like, this is not about new modules. It's just about some codes, some coding style I want to document. If the community is agree. So do it. You have a user, my user. You have a fake it, which is something that comes from the configuration. And if you look at this code, you don't know what it is about, okay? And it's just about setting users, okay? If I write a thing like this with a do block, you can have this kind of stuff in Ruby, for example. It's really dramatic in the Ruby language. You remove the do and the Ruby syntax is quite okay. You have do with the fake it, which is local to the block. So it will disappear in the rest of your functions. So you don't pollute your namespace. And then you say, okay, if fake it, log in for blah, blah, blah, and return zero, okay? And affect my user with zero and affect my user with UID, okay? And you write it. If not the line of code is the same. But you declare what you are doing. I want to set user. And this is explicit without comments. Oops. Yeah. No, I run out of slides. Oh, yeah. Okay, four. Actually, I was about removing these slides because there is a... I don't think... I think it's a good idea. I asked from other developers of the project and they said... He said, actually, that it may be not a good idea. Do you know how to set up Perl 5 to have a complete UTF-8 environment? No? Me neither. So I use a module that do it for me. But basically, I have all... Okay, I will remove. But there is use UTF-8. And use UTF-8 say no, my Perl code can have some UTF-8 symbols into the source code, okay? You have also use open and I was... So UTF-8... Okay, notice this. I think this one. This is telling Perl that every new file descriptor will be open with UTF-8 layer. Exactly. Thank you. But this is this kind of... If you see the video from the former pumpkin Ricardo about UTF-8, there is a difference between this and those are not equivalent and this is the one to use actually. And I don't want to know that by the heart. So I just use a module that knows that for me. That's why UTF-8 all do that. Also, if I do just that, the thing is STD out, STDR and STD in are still in old encoding. So you have to re-open or use bin mode to set them in UTF-8. Or use STD. So now Perl bin mode all the other things. And maybe there are other program and I don't know them and I don't want to know. Because obviously I don't want to spend my time reading the documentation of Perl internals, okay? That's why use UTF-8 all. Other question? Thank you. Excuse me? Wait, I have to turn on the microphones. Thank you. Thank you very much for everything you are doing. No, it's fine. I don't think my record is doing the right job. Sorry? My screen record has done the right thing. Oh. We'll find out. Yeah. What do you need? Sorry, you've got... What's the word I've got to be going in? Sounds like it works. James and Claudio. Nice to meet you. What's your name? Claudio. Yeah, yeah. Do you have everything you need to have cable-wise? Is there a second plug-in of power? Yeah, yeah, there's a socket over there. I should have bought an extension cable with me. Yeah. Yeah, it's a slight issue because it's coming out that side. I do that. Yeah, we've got a minute.