 Okay, who knows what's aligning talk? Okay, there is like half of the people that is not raising the high the hand because maybe you are tired so aligning talk is a Five minutes talk about anything you want to talk about right? It can be drinking a pint of Guinness in the ferryman or it can be something related with Python The good thing is that you have five minutes Good news also for us. It's only five minutes. So is it really boring? In five minutes, we can just stop I'm going to have a timer in my phone And if you see I need the help of everyone here At five minutes, I'm going to raise my hand and if the speaker is still speaking Please start clapping to interrupt the person that those are the rules And the first lightning talk today is BB that is going to talk about the Europe item society and I'm setting my timer Yeah All right, go good evening. How's everyone doing? All right So I'm gonna I'm gonna hopefully bore you only for the next three minutes because I do not intend on You know going through the nerve-wracking experience of speaking for five minutes in front of the tough crowd over here What I'm gonna be talking about is Is basically presenting a case to volunteer and help us Build the future of your python conferences, right? We've been organizing it for a for a very long time. This is the second time that I've been doing it and I wanted us just just basically give you an insight about what goes on Behind the scenes, right in case you did not know this conference is organized by your python society, right? We're completely volunteer driven. We do not take a single penny out of whatever is Generated from the conference all of this goes back to the community, right? So it's it's really important for us to to have people who can who can help us build the next generation of your python, right? And and and and put it together So I'm gonna show like a personal snippet of how how much flexibility you have When you volunteer with your python so to give to give you a quick brief I'm VB. I am a volunteer with the comps Like communications so all the tweets that you see on Europe. I think all the all the shitty ones are are mine And the and the good ones are from the from the other volunteers and so on I also helped a bit about bit with the with the program and so on So here's here's what I did in March 31. There's a newsletter that we that we publish every Month and I was just playing around with some stupid stuff And I put something together and I sent this email out to every newsletter subscriber with the subject eat the spaghetti to forget to forget he told a gritty and and I Missed or rather I messed up the subject itself. So instead of spaghetti. I wrote so getty Obviously I I handled it like a champ And my response was something like this on discord. I was like what OMG? Ah But Nevertheless We we did like because we're a we're a community conference people did take it up with a You know, nobody took offense and everyone was was was was actually quite happy In fact, my my best message so far was I found the eat the so getty To forget you the regretty the best email subject ever and I'm very disappointed about the correction All right, so the point that I'm trying to make is if you're if you're looking for If you're if you're looking for an avenue where and you can mess up Fix things and then get back up again the next day then Euro Python is the place for you All right, we were open to new ideas. We're open to any sorts of things that you want to do We're realistically where we just we just want you to you know to sort of come up And and just say hey, I want to do this and we'll make it happen for you, right? You want to you want to come up with the with the next hybrid? Sort of agenda for a 15-day conference. You want to do this in the Himalayas? Well, maybe not as yes, but we're we're there for you So those were the those were the messed up things and here's an example of of how we also try to do some new things every now And then so there was a There was a chat on discord where and someone was like hey, we're going to Dublin Why don't we reach out to local Irish tech communities in Dublin and and just you know try and help them out and We just sent like a couple of emails to different different Irish tech communities and all of us in different countries Just caught on a zoom call just to discuss how best we can How best we can you know put together this Euro Python, you know a lot of it a lot of what you see from food to you know the social events and whatnot was was through the Was through the sort of feedback from them So again, the point is if you want to help us out to put together Euro Python in 2023 and beyond we're more than happy to have you on board with that Feel free to find anyone who wears a yellow yellow shirt anyone with an organizer badge outside We're more than happy to have a chat or just send us an email on volunteer at the rate your Python. You Thank you so much for your time That was perfect timing Okay, Rodrigo's next. Oh Sorry Yeah Omar and Sebastian is going to the announcement while you configure your computer Perfect. Hi. How many of you are using VS code? Hands up a lot of people. How many of you are using Vim? How many of you know what our dot files Well, that's a quite a few people How many of you heard about the ripgrep exa fd those CLI tools cool So for the rest of you who wants to learn about those things I'm trying to organize an open space session tomorrow at 2 where I want to Present some tools that I'm using and have a chat with other people about like plugins for Vim Vim for Vim VS code Linux CLI tools dot files stuff like that. So tomorrow at 2 open spaces. I hope to see some of you Thank you So next one is so Omar Yeah, replacing Omar. My name is now. It's a clone of Omar. Yeah Please Patrick. I see you in the list and I don't see you in the queue and Rodomir Also, if you're here, you're in the list. Okay, go five minutes So my name is Dawood. I am one of the founders of Gradio and that is a Python library I'll be talking about today But also here to announce the hugging face Gradio hackathon that we're running this week and until the end of next week So you can find us on the Europe Python website and go to the events tab and you'll see us right here And so is anyone here interested in machine learning? Raise your hands. Okay. So quite a few of you good. That's a good sign So yes, you should definitely participate in this hackathon if you're interested in machine learning You don't have to be an expert in machine learning at all. We make it really easy to create demos with machine learning models So find the events tab and it'll take you to our Europe Python organization on hugging face and you can join this Organization just like 75 other people have and upload your demos here So some of you might be thinking what is Gradio? What is hugging face? How many of you here have heard of hugging face before? Oh Wow, okay a good amount. How many of you have heard of Gradio before? Okay, so still some some of you have That's good. So Once you join this organization, you can upload your models and you have a chance to win prizes like t-shirts and such So for those of you who have not heard of Gradio Gradio is a Python library So you can pip install it within a few lines of code have a web interface running and wrapped around your machine learning model So here's a few examples here. He's like a sketch demo question answering image segmentation speech verification So we have a library of a bunch of UI elements Where where you can wrap your machine learning model around and that's that's what Gradio is I'm sure maybe a lot of you have seen the most popular Gradio demo here. Dali mini. Here's an example generation here Minions attending Europe Python hackathon How many of you have played with the Dali mini demo before? Okay, so a good amount of you again. I'm sure you have so if you haven't definitely Google Dali mini It'll be the first link and type in any text prompt and you'll see Generated images. So this is an example of a Gradio demo You can find more examples on hugging face spaces We have a bunch like anime again and arcane again and a bunch of different computer vision or interesting Spaces you can play around with so once again Join please join the hugging face hackathon And if you have any questions or if you run into any issues We have a booth a table on the first floor. You'll see a big hugging face emoji right by the banner I'll be standing there. Omar will be standing there. You can ask us any questions and reach out to us there Yeah, thank you Cool. Thank you very much So the next talk is Rodrigo He's going to talk about smush all the things That's a surprise talk this I'm not going to be talking about smush all the things right? That's just the title I gave it cool So no, I just just wanted to make it clear After Rodrigo, we will have Alex doing a one-minute announcement and then we have remote talk Yeah, by the way, I will be interacting with you and I don't have a lot of time So you have to be snappy in your replies, okay? That's gonna be important for me Can I oh, okay, so let's smush all the things. My name is Rodrigo I hope you you're all doing well and I don't really like to label people but you guys If folks look like you enjoy Python, so check out my Python work at one Twitter and now let's go for a quiz So who can tell me what's one plus two plus three plus four? Ten amazing. So if you understand this expression and the result, can you please clap just a little bit? Okay, that's fine. Perfect. Okay, so next quiz What's one times two times three times four? 24 great if you understand the expression and if you understand why the result is 24, can you please clap? Okay, amazing now. What's true and true and false and true That's false. Okay, let's just pretend that's the operator and I didn't have much space there So it is false. Now if you understand the expression and the result, can you please clap? Okay, amazing everyone understands these expressions, right because they're fairly simple now the question is What's the pattern here because these expressions? They're very they're struck structurally similar to each other So what's the pattern here and the pattern is we have a binary function in all of them We have a bunch of values that I was working with and when I take that binary function And I smush all of the values together I get a single results So that's the pattern the common pattern in these expressions Now is this pattern of taking a binary function and smushing a bunch of values together a useful pattern? Clap if you think it's a useful pattern Okay, it is a useful pattern because these are well-known functions or well-known built-ins You've got some math.prod and all So this pattern is useful this pattern of taking a bunch of things a binary function Smooshing everything together into a single value and this pattern has a name and the name is reduce If you are a func tools you have reducing there Some is reduced with plus math.prod is reduced with times and all is reduced with the operator and Right, so some is a reduce prod is a reduce mean is a reduce max is a reduce join is a reduce Something else. I forgot is a reduce. So there's a bunch of reduces that are baked into the language all of the most common cases So why is this relevant? Why am I spending my five minutes here talking about this? Because I think that understanding that reduce is the common factor to all of these functions the three examples I showed and some others really gives you a deeper understanding of these functions and It essentially means that if you understand how reduces even if it's because of these specific examples You have one more tool in your tool belt and as programmers We want tools in our tool belt and the more philosophical point I think which for me is really beautiful is that when you connect all of these dots things start to make sense Instead of being in a vacuum you start seeing how everything is related and how everything is connected And I just personally I find it very very interesting useful and nice So that was it. Thank you for your time and reach out to me over there are three mile Bye Cool. Thank you very much. Our next speaker is remote. So Hello, how are you doing? Hi everyone? Hey, welcome to your Python Where are you streaming from? I'm from Italy. Nice. Yeah, I hope you can hear me. Well, it's perfect. So now you have five minutes Well, okay Stopping from now. Yes, go Okay, I will talk about jungle version useful tool Last couple of years for a kind of version control for your jungle models Well, I am Danny. I'm from Italy as I was saying and I am a full cycle developer working with JavaScript to sorry for that and Python and Okay, let's talk about jungle version By definition is an extension to the jungle web framework that provides version control for model instances What are its features? Well, you can hold back to any point in a model instance string You can recover related models instances and all of this with a simple and many integration you can install using the pencil jungle version and adding a conversion to install a dot in jungle settings and Then you need to run manage dot PI Migrate because it's creating default tables for history from all models and Then you can integrate it into the admin in your model admin like this one you need to import the version admin from a version of admin and Extend the your admin version and the admin model Like this After that you need to launch manage dot PI create initial revisions because this comment is creating all the first version in jungle version tables internal tables After that in the admin in the model admin this page You will see this button here. I think it's a little tiny Yeah, there is a recovered related contacts or Records from your model and you will see a list of the latest records Same for the change page. You will see a history button on the top right of the page Who will open a change history for that specific record? You have a lot of management comments Basic to our create initial regions For as I said create the first revision of a specific record You can bind it to a specific model and also have a custom comment but not only this you can have a lot of other special comments or create initial revisions and you just need to Use the dash dash help command for more informations Please note that for larger basis this comment Okay, take a while. So what take a note of this Also, there is the late regions comment with no arguments Note that this comment with the late your entire mission history. So you might prefer to use it Binding to a specific model or using base or keep for keeping last regions or last base You can also register a model for using with the API in using the syntax register the entire model or specific fields to include or exclude and And What about jungler a springer if you are using web API where you can use jungle version rest framework Sorry for the wrong name. Totally my fault. I created this package for Halloween An endpoint an API endpoint to display the spatter version history You can install like this having the version middleware So we will do well in setting and Then you can register your model as we saw before and Last thing you need to extend history model you set in your views For jungler a springer and this will provide you a lot of endpoints. The first one is the history of revisions for specific record The second one and the displays the specific region for a specific record 31 displays a list of related records for a model and last one Robert a previous version You have also a lot of mixing for Etc. And that's it Thank you. Thank you very much You're out of time. Yeah. Sorry. Thank you for joining so next one Okay Who was here yesterday and like basil? Okay, who is still wasn't here yesterday and still likes basil? Great. So how would you like to go to basil? Like because there's a great conference there. It's your sci-pi. It's a conference for the scientific packages So who likes scikit-learn? Whoo. Yeah, so here scikit-learn people you can meet there We have we have tutorials on scikit-learn pandas jupiter and things and like to this two days of tutorials And two days of talks one day of sprints to work also on the packages So they constantly get better and we're very happy to announce we announced the the list of session was just released today So just go to the website and you can see all the sessions that will take place ticket sales are open on as being an academic conference the ticket prices are Moderate so if you're a student your sci-pi is also a great place to go and Yeah, that's basically it. So see you back in august in basil Of course, I don't want to add something and if you're a maintainer of any of those packages or related packages We are also organizing the maintainers track. That's not through a CFP. It's it's much more casual It usually means we're a bunch of people sitting together like around table and discussing common issues If you're interested contact one of us. Cool. Thank you very much So while the next person is connecting the laptop I want to ask Patrick is rodo me here or Arturo or Alena here ready. Yeah, cool Please we read rodo me. Yeah, let's hope it works It takes it takes a few seconds You have to say a joke Okay, hello, you're a python. My name is Peter so bot I'm gonna talk really fast because this could probably be a half hour talk But I'm gonna give it in five minutes I'm gonna talk about reverse engineering keynote with Python LLDB in protobuf So what is keynote if you haven't heard of keynote before it's the app I'm using to make this presentation It's PowerPoint but made by Apple. It's really really nice to some smooth animations and cool stuff What I don't like about keynote is that it uses a proprietary file format There's no way to open up a keynote file and edit it from Python or edit it in your text editor Or really make any sort of automation happen outside of keynote itself So let's bust this open and reverse engineer it in about five minutes First off, let's look at the bytes of the file This is the bytes of a keynote file here. You'll notice that it actually starts with two letters PK That's a good hint that it might be a zip file And that actually is because the guy who invented the zip file format was named Phil Katz And so he made the header his own initials. I should really make a file format now That's a great idea But if we just try to unzip a keynote file here We can do that with the unzip command of the command line and it works It actually gives us all of these files here and you see a lot of them are JPEGs So if you just want to change the images in a keynote file, that's easy to do But there's other stuff as well What if you want to change the text or automate any sort of other parameters of your file? All of that's down here in these IWA files, which stands for I work archive I work as the old name for keynote if you open one of these it's not actually as useful There's no markers in here There's something to hint at what this file might be But you can scroll through and kind of see some of the text that was in your keynote application or your keynote document there And here we have with P and then TLL and stuff like that and you can see from my first slide I had the same kind of text now some characters are missing. So this is a hint that this might be compressed So let's try and find out what compression format was used here We can find this out by looking through the symbols of keynote itself with this long command of command line We use the NM command and look for is it bees it maybe or is it busy to or is it? Deflate or is it snappy these are all different compression formats and this last command actually gives me a bunch of output Which is a good hint that maybe keynote is using snappy for compression. So let's use Python for this Let's use the snappy Python library open up that file that we just had there and try to decompress the file If we chop up the first four bytes it actually works So we're actually able to get some real content back and you notice the full text content is available there But there's all these pink bytes there There's all these bytes that are not really intelligible and they don't make sense compared to the text in there So there must be some other encoding format being used and to find that out we can go back to our NM command again and Type all this stuff in and look through all the rest of the strings to see maybe is there some hint at what's being used in Here now keynote is made by Apple so something stood out to me in here And that's the fact that the word Google shows up three times at the bottom here And that's actually Google's protobuf library being used by Apple for encoding the keynote files themselves So knowing a little bit about how protobufs work if you have protobuf in your application You need to put the schemas or the format of your protobuf documents into the application itself So we can do RG here ripgrep for the protofiles in keynote and then we find them They're actually in there so we write a little bit of Python which are not going to show on the screen You can extract all of that data and dump that to protofiles They can just sit in a directory right there and suddenly now we have the schemas to decode What's happening on the inside of keynote, but there's still one problem all these have human readable names internally keynote doesn't use human readable names So we're going to have to bust keynote open and use Python to actually inject code into it and extract data to decode all this stuff This is where LLDB comes in LLDB is a low-level debugger It is a debugging tool that you might use on the command line for inspecting or debugging binary applications in our case We're going to call it from Python. So we'll do import LLDB and script the entire process We'll import LLDB create a debugger set it to synchronous mode and then we'll say let's open up keynote So set a target to the path to the keynote binary Then we'll set a breakpoint. You can do this LLDB really really easily But in Python, it's also easy You can programmatically create a breakpoint here and say when the application is done launching break on this method So break on send finish launching notification, which just happens as part of the boot process of any macOS app Then we launch the app and then immediately after the app gets launched We'll hit that breakpoint automatically and we can run a couple commands here to grab the current thread grab the current stack frame and Actually inject some objective C code So this is to be honest the most interesting part to me You can take this string of objective C code inject it into the process have it compiled on the fly Have it run and then take the result as a string back in your Python code and once we have the result We have all the information we need to turn this back into Information we can use to decode the IWA files we saw So now we can go from that binary blob on the left to YAML on the right-hand side And if you want to actually do this for your own keynote presentations I happen to make a library for it called keynote parser so you can use keynote parser directly But I hope that instead of just the library you've had your interest peeked a little bit into how you can reverse Engineering applications with Python and kind of break things apart and play with the inside. Thanks so much Thank you. Thank you very much So the next one is something about don't do something with mox Yes, I really like those two words together. All right. Okay levels levels there we go So I'm standing here because I've made a stupid joke on internet and while it didn't get me fired It got me to write this short talk since then I've transformed it into a blog post which I will tweet out later So if this is too fast for you and it is gonna be fast Maybe read it up later So of course this has nothing to do with manners and it's a mantra from the London school of test driven development And it's about third-party dependencies in tests So now I'm gonna tell you why you should mock API's that you don't control and what to do instead And as a case study, I will use a very simple HTTP client Say you are running a docker container registry and sometimes you want to have an overview over the containers that you are in Repositories, so you want to have the list of the names along with the tags and this data is available from the HTTP API if you don't know About anything what I've just talked about it doesn't matter. You just have to know we are gonna talk about again to an HTTP API So we will write a function that fetches the data from this API and That returns a dictionary from the repo names to the version tags for each repo And we will call it get repos with tags. There we go. So this function takes a preconfigured HTTP X client HTTP X is really good and We built a dictionary from the repo names to the tags So first we ask the catalog endpoint for a list of repository names and extracted from the JSON response Then we iterate over the names of those repositories and for each repository We will get the list of the tags and again We extract them from the JSON response and we return the dictionary. All right So our first site this doesn't look that bad actually because we are passing in a client So we can pass in a fake client a mock if you want and that doesn't talk to the network at all You can return any data you want you can also simulate errors, which is very useful yet I'm here to tell you to not do this and this is not great. Why well if you want to test this You end up with this monstrosity You need three nested marks just to verify that if you call the get method with If the get method returns an empty list that you are the function returns an empty dictionary now This is the logic we are testing and it's drowning in this noise And the problem here is you are testing business logic and we have to mirror the structure of an HTTP client library We have to even fake JSON payloads and none of this belongs into business logic tests So this makes a test less expressive and it also makes them more brittle because you don't want to rewrite your business test Just because you switched out your HTTP libraries, which takes us to the core point there's a difference between owning a component and like an HTTP library or a database driver and Owning the API to say it component in other words if you want to have an API that you don't own and you want to mock it You've write a thin layer around it and mock that and this is what we're gonna do right now and I was too slow switching slides I'm sorry So we all have a class we call it docker registry client. It has an HTTP x client and we write them get repos method There it is. It's the same code like before and if you do the same thing for get repo tags It gets the repo name returns the tags, right? It's important to keep this layer as simple as possible because this is the hardest one to test This is interacting with a dirty world So adding logic into this layer means that you are just moving the problems into different layers. It's not helpful So now we rewrite our function and it looks like this now look at this much more dramatic Now you can actually see that you could make it addicted comprehension something that was not as obvious before So we got cleaner code. This is already a big win here now Let's rewrite the test and look that only one mock one lambda. It's simpler. The font is bigger so it's clearly better and Once you want to do more complex tests like when get repos doesn't just return an empty list You just add a mock or a lambda for the the tags function You don't have to have the a smart get method mocked out which is possible, but messy So obviously this makes more sense in more complex Software, but the same rules apply And this is it. This is why you don't mock what you don't own. I'm Hinnick. I'm at Hinnick on Twitter I'm happy to talk about all this kind of stuff. I have opinions come and fight me. Thank you Thank you very much You see have 20 seconds. Let me tell you more about my opinions. Okay, we're going to steal the adapter because I think Let me see Yep, I don't have the others here Two reminders, I have a Sony phone there that was in the floor here So if someone goes the phone and if you have a ticket for social even go and pick up the physical ticket Okay Yes, hello everyone, my name is Patrick I am one of the organizer of this conference and I really want to invite you to come for a run tomorrow If you want to if you want to, you know, choose which Time of the day you can go on discord We have a like very simple poll so you can choose and you can come run with us but other than running I really like it writing tools for other people and one of the tools I built recently is called latest cop and Is I built it because I was a bit frustrated by you know I think to find the latest version of a software like Python for example, you have to go to the website You have to parse this file this page and maybe find it here And I wanted to find to make something that's a bit easier to use so this latest those cut we can go type Python and get the latest version You can also use it from the command line so you can use it with curl You can use it you can pop it to other commands and for some reason it also works from SSH So you can go there And you can get the latest version of Python Yeah, hopefully it's useful for someone go to latest doc out and use it. Thank you Cool. Thank you Patrick. So next one is roll on me. Sorry I think yeah, yeah, hopefully Sorry if I was mixing Let's hope No, I need to to say some history about Dublin. Where are you to when I was in Dublin I can I can mean almost there Yes Okay, so five minutes go. Thank you. So I want to tell you about a certain mechanism that's fit entomologists and then so shall Science people have discovered it's about how arms and termites and Wikipedia editors and open source developers build large things Basically How do you build something big right? You start a committee and you discuss how you are going to build it in Very tiny details and then when you have it ready You give the plans to the developers and the developers of course go and implement it, right? only one problems and and open source developers don't read so So instead how they work is they just go on the side and look around and See oh, there is something missing there. I will I will add it or Here there is a comment that says all Disney's fixing So maybe I will look into fixing that so they basically use their environment and The pheromones or comments that are added to that environment by other Agents working along them to decide what to do and how to do it when that's called this way they can build really really big things without first planning them upfront and You know the plan tends to you know not survive actual Implementation there is always changing requirements. There is always Unforeseen circumstances that that you need to take into account with this kind of you know Strategy you actually adapt the circumstances as they are discovered and it's a very Robust way of building software Maybe the end result doesn't look great. There are some you know extrusions that don't have any Use and don't don't look pretty but over the years because the work of so many Agents is accumulating Over the work of previous and you get those these incremental improvement huge projects huge old projects. I don't know like emacs or Veeam or Not just text editor like BSD kernel Things like that. They really grow Very big and very solid and very useful And that that mechanism is called stigma that there's a mechanism of Looking at your environment and reacting to it and building The thing in by multiple agent without actually communicating directly There is only one problem with stigma. It's a sensitive to external stimuli Which is most of the time it's good, right? You want to adapt to the world around you the problem is if you have Building a nest and you put some sugar around it you can divert some of the ants from making them ignore the pheromones and instead follow the sugar and This way you can kind of Take over the project You just need very little sugar because only a few ants will leave enough pheromones for other ants to follow What you can do? You can make the ants focus on just one part of the nest That you care about and abandon all the rest in open source projects You can recognize that this is happening if you have like a bug report that everybody Things is important, but it's not being worked on for ten years Because everybody is working on something else. Maybe something is wrong there, but there are more things you can do If you keep moving the sugar around You can do something that's called it move fast and break things So basically you prevent this accumulation of quality this accumulation of work from happening and the project actually never gets finished never gets anywhere and If there are projects that are also depending on it. You are also destroying those products so it's very dangerous if you have such such Interference from outside into a project where where stigma where the internal communication Happens to the environment That's all. Thank you Thank you very much Rotomere Now we're going to welcome Racer Arturo with a talk about MOC scikit-learn Just a second while we set up the AV Eduardo if you're here, please report there It is not working But then You can Okay, good Hello everyone. I'm really glad to be here. I'm going to present the MOOC on machine learning in Python with scikit-learn Some of you may already know it, but because we already had a couple of sessions and It's a work that we have between the scikit-learn core developers or at least a subset of us and Some French to institutions which are the India and the France University and numeric and my name is Arturo more You can find me in my social networks like that so Why do I have to pay attention to this guy if it's so late and we all want to go to the social event Well, because a couple of years ago. There was this tweet From this person saying that We have a regularization implemented by default in the logistic regression in scikit-learn and His he claims that probably not a lot of authors Know about this even if it's in the documentation So of course, I mean it's in the documentation But also we wanted to create a MOOC for people that even if they have a background in machine learning they can find or How to use good practices like Hyperparameter tuning so that they don't really have to worry if this is the default the default value or not So what makes us different? First of all, I would say that it's Moderated by some of the core developers as I already said It's also quite good because you have nothing to install in the phone platform You you have everything provided We also have an static version which is this one here and it's accessible during the whole year, but In the phone platform, you can also get a free attestation Whenever you have a score above above 60% of the questions We have quizzes and we have Grab up quizzes, but I'm going to come back to this later and Also something that I find quite important is that we are following the spirit of open source meaning that everybody can contribute to the course and Make a pull request to say like okay, maybe this can be explored a little bit more in detail Maybe this was not phrased correctly Maybe I can add up a Grab up table these kind of things. So we are really open to to getting feedback from users and educators and That's the site where you can make your pull request and this is the phone site that I was mentioning so Our philosophy is hands-on you learn by doing and it's divided in seven models plus one introductory model We have 15 video lessons that hopefully are not very distractful, but the other way around it They are meant to make the course more friendly and didactic and Also, we have a 70 programming notebooks with 21 exercise that are not graded But what we grade is the 26 quizzes and grab up quizzes In particular the seven modules contain a Narrative of having the predicted pipeline so that from the very first notebook you get to Explore a bit the data set and you've built your first more model great And in particular you can Learn a lot about hyper parameter tuning and don't commit don't make these kind of mistakes that the guy in the tweet say so in each session we have had like a around 105,000 1500 sorry Participants per session and a lot of very positive feedback in the forum. We have a very active forum. I Just want to invite you to join this common effort learn something new We are opening a new session in October. So stay tuned and many thanks to all of you This is the team on left hand the teachers and right hand the pedagogical Technical team. Thank you. Thank you very much Arturo Up next on the stage will have Elena announcing a Python weekend conference Yeah In the meantime, I'll tell you that the roster for the lighting talks is pretty full today There will be another round of lightning talks tomorrow and registrations for those will open at 8 a.m. So be first So you got a slot. Is it working? Oh my god. I Broke it Guys, I'm super sorry about that In the meantime, I can announce more For instance, the fact that tomorrow morning at 9 a.m. We'll be welcoming you all here for a Announcement and then follow a keynote session. It's gonna be on the gill. It's something you probably have never heard of Because it's a very very foreign concept in most Python developers and something about multi multi-threading or processing I forgot which one exactly doesn't really matter. It's interchangeable Yeah, so there's that we're nearly done right because I'm not really good at analyzing things Sure, of course Oh, you were joking Yeah, sure, so Yeah, okay, it's fine Hi guys. Hey, I'm a link. I'm tech community manager at one fruit company give it at com travel and tech Maybe you know us so we is my internal Python community Organizing all kind of crazy Python events all over the Europe. Thanks to our travel company We are traveling a lot and I just wanted to announce our next Python weekend in Barcelona It will be from 19th to 21st of August and you can check out all the information at Code give you come Python weekend It's highly intensive educational event where we will be building the prototype of give it at com core technology Our eight mentors will be guiding you on this process and it's completely free for the community. So just check out the link I hope you captured that. Yeah and Pink me on Twitter if you have any questions about that and I will see you soon. Okay Thank You Elena We'll now close off the lightning talks with the last talk of the day I have the honor of announcing Jacob who is the Europe Python Society auditor and a long contributing member to our efforts and He will talk about Testing inner functions So I assume that you all have heard about inner functions in Python They are functions inside the scope of another function You have the basic case Where you have just a function inside a function like on my slide here I have the function f with g and h as Inner functions. They're also called nested functions We have a more advanced Model where we have the function inside a method instead and we also have the possibility of doing deep and nesting So far nothing really interesting But how do we test inner functions? We don't Because we can't reach them, right? They are in an inner scope because we want nobody else to to depend on them so that we can use them To implement something that is an implementation detail So wouldn't it be nice if we could do something like this? Where we from a package which we call nested import nested and as in our tests we import our Function f our class C and our function m and then we test for exam example the function g Which is an inner function and we use some sort of way to get access to this Saying that well it comes from the function f. It's called g and it needs to have the Free variables v1 and v2 set and then I do the test And I do the same thing With the other cases as well I can test my Function h I can make the test My function k which is inside the C dot foo method and I can do nested testing where I need to fish out The function n and from the function n I need to fish out the function. Oh Well, it turns out that this is possible So Let's go see the magic because that's where the real fun begins so this function nested takes a Reference to the outer function We give it the inner name and we give it the free variables So then first we check that this is actually a callable Which we do by checking that it the outer function is an instance of types function type or types dot method type and Then we take out the code object of this Function and then we go through Something called co constants in this one which are the actual References to all the constants inside this function object which includes all the the inner functions and An inner function is of an instance of the type types dot code type and It has the name We're low and if it has the name we're looking for then we create a new function object that contains the code object of that and We bind the free variables So that they each have a closure and we do that up in this function at the top called free bars oops and If you want to get access to this nested function Nested module then it's available at this URL who learned something new great. I Didn't come up with this myself. I found it as On stack overflow with no upvotes Thank you Thank you, Jacob I'd like to ask you to join me in one more round of applause for all of our lightning talk contributors for today