 Yay, I feel like people can't wait to get a pint of Guinness, that's what I'm feeling. But this year in Europe Python, we are doing things a little bit different. So some of you may notice that we only got four confirmed slots for the licensing talk in person here, because we have reserved some slots for the remote licensing talk. So if you are watching us remotely, you can actually sign up for licensing talk. Pay attention to the venue that we would put the sign up link there tomorrow, so pay attention. So today we have a remote licensing talk from our good friend VB. So are we ready for the first licensing talk? I don't know how it works, but yeah, we'll see. Hello, hello. Okay, VB is... Oh, hey, VB, hello. Oh, okay, you are giving a licensing talk, right? So okay, there you go. Oh, Francesco, we're in the wrong spot. Oh, no. God damn, what? We might as well do a licensing talk then. Sure. Hello. Oh, by the way, you have one minute, so don't drink too much. By the way, first of all, we would like to thank the organizers of Europe Python for giving us the opportunity to give a remote talk, because we're so remote that we can't even see the venue from here right now. But well, while we're at it, we just want to take a minute to tell you about the social event that's happening tomorrow. Yeah, we have a social event tomorrow, and we have only a few tickets left, so if you want, grab your ticket now. It's going to be tomorrow at the venue, starting from 7.30, live entertainment, food, some drinks, lots of fun. And dancing, Irish dancing. Also. Yes, and also, last but not the least, since we are almost towards the end of the first day, just want to say a huge thank you to all the volunteers and the Ops team for putting together such a brilliant hybrid event. Cheers and enjoy your time. Thank you so much. So this is how we do a remote licensing talk. So yeah, so you get the idea. Also, a few things about licensing talk, in case you're new here, that at the, you know, when we invite the speaker and stuff, and then we, if it's almost towards the time that they have to get off stage, we'll do the tab, so they have to finish the sentence, and then we'll give them a big round of applause. So for normal licensing talk, we have five minutes for all the speakers to sign up. So first one will be Ram Ratcham, that's your talk. So please get ready, come on stage and get yourself set up. And then the next one is, sorry, I'm very bad at names, and I can't read very well. Theus, there is, yes, that's your talk. So you also get ready because we don't have much time. And then that would be, so like, if you remember you signed up on the first page, just get ready somewhere there, because you'll be on stage before you know it. So I think that's more or less it while people are setting it up. I also want to let you know that those, the way you saw the first remote lighting talk actually happens in the ferry man, just opposite the other venue, and they do Guinness, so you can try. Who has tried a Guinness here? Oh, actually it's ready. Okay, I'll talk to you later. You have five minutes, there you go. Wait a minute, hold on, I didn't see it set up yet, sorry. Oh really? My computer's stuck, seriously. Okay, it's not connected yet, right? Yes, sorry. Okay. Okay, so usually I start the timer when it's ready, but okay, now you have the screen, so let's start. Right, I practiced like 50 times, you know? Never happened until now. Okay, have a buddy. Thanks for coming to my talk. My name is Ram, this is talk about my research. My research into using machine learning to understand our society. So in a way that somewhat related to the previous talk, about the way that the AI interacts with how we deal with each other. So this is something that is insane, interesting to me, and now I'm working on it full-time. And I have four minutes, I guess, to convince you of how interesting that is. And after the session, I'm going to check out my site and sign up to that mailing list to get monthly updates about my research. So my goal is to use machine learning to understand people and how they behave to each other. And this is a subfield on machine learning called multi-agent reinforcement learning. So when I say I can get answers, I want to get answers to the big question that we have about human society, that sounds, I mean, it is enticing, but it sounds vague. So let's look at a demo. So this is an AI playing the video game Mario. And the interesting thing here is that the AI hasn't been told the rules of the game. They just took an AI and they hooked it up to the Mario system, and you just figured out how to play the game or its own without even knowing the rules, right? It just got the video output, played for 1,000 hours. First, it just did random stuff. But through trial and error, it figured out how to win. So I think this demo is insanely cool. I mean, we've seen a bunch of cool AI demos in the last couple of years, like Dali 2 or GPT-3. And it sort of mimicked the way that humans behave, like the way we talk or the way that we look like. But this demo looks very human, not because it's trying to be human, but because it's just a creature out there making decisions in an unknown environment and dealing with the consequences of these decisions. So when I see this demo, I think, super cool, I want to take it further. And the place I want to take it further is to have multiple Marios, to have multiple AI agents that move around in the world meet each other. Like, I want to know, I mean, are they going to be friends? Are they going to do stuff together and have it like a society? I mean, there is something insane interesting to me. So lots of other researchers had the same idea. And this is a video by OpenAI. It's called OpenAI Hide and Seek. I recommend you check out the full video on YouTube. And they've got two teams of AI agents playing against each other, and the red team are trying to find the blue team, and each team is developing strategies to beat the other team. And they're developing these strategies on their own, and each strategy is sort of like an answer to the strategy of the other team. So this is an awesome demo. I hope you check out the whole thing. But there is something about it which I don't like. There is a very, very beautiful cooperation there, but that's because the agents are rewarded based on whether their team succeeded or failed. Like, in a way, they are the perfect team players because they are sort of a hive mind. They all just want this team to succeed. There is no conflict between the individual and the team. And that's what's interesting to me. I want to see the behavior of creatures that are part of a team, they're able to act as a group, but not because they are a hive mind, because they are individuals who choose to act as a group. So many other researchers have tried the same thing, and as soon as they put multiple AI agents in environment, they immediately become the worst people possible. Let's see a demo. This is a demo, this is a research from DeepMind from about a year ago. This is an AI agent playing a game where it wants to eat as many apples as possible. If it eats all the apples off a tree, the tree dies, and there are no more apples. So the single agent is playing the game perfectly because it's letting the apples regenerate. Here's what happens when we have multiple agents with multiple trees. Immediately, they eat all the apples and kill all the trees. And the interesting thing is that we have seen this behavior in real people, sort of tragedy of the common, it's very familiar to us. There's something that's frustrating to us about real people. And like when it happens with people, we can say that's just the way people are, that's just who it is. But now with multi-agent Ariel, we have an opportunity to look at it as a social dynamics problem. We can say this is the exact same algorithm as a single agent, but the social dynamics is a problem. So we have a chance here to sort of improve the way that we treat each other and collaborate on large-scale projects, which is to me an interesting. I have lots more to say. I ran out of time. Please check out my site, and please sign up to get monthly updates about my progress. Thank you. Thank you. Amazing, and you are right on time. So that's perfect. Okay, so you know things, things, things. Okay. Next is the building of approachable applications, and after that we'll slide in a one-minute special lightning talk from Hug Your Face. So then after is Ben North, if you're here. Hello. Okay. Yes. So please get your computer ready because once we plug in, and if your computer is on screen, then you are on. But I am still seeing a black screen for some reason. There you go. Hello. What happened? Technical support, please. Oh, okay. Yeah, okay. It kind of worked. Oh, it doesn't work. Okay. Yeah. Well, okay. That's good. There you go. There's your time. Starts now. So we all know that building distributed systems is hard and a cause of a lot of headaches. And I want to introduce you to a product called Cyclone DDS, which is an implementation of DDS itself, which is an open standard, that can help you build distributed systems and hopefully take those headaches away from you. So first a quick overview of why distributed systems even cause headaches and it's because the distributed nature of a system creeps into all the scopes of your software. At every point, you have to take into account that, oh, what's the latency on this? When is this coming in? Or where do I have to send my data? Is there some dynamic agent in the system that I also want to send my data to? And this really causes distributed systems to often fall short in the real-time domain. The complexity can hugely explode and be a full-time job for many developers at the same time. And if you want to change something, certainly you have 50 applications to update because somewhere a new temperature sensor has one more data point that it adds to the system. So what is DDS? DDS stands for Data Distribution Service. It's a common standard standardized by the Object Management Group in 2002-2004 that abstracts away a distributed system into a global data space with topics with writers and readers. You specify a delivery contract for each of those readers and writers that says, okay, this data should be reliable or I only want to see the highest priority system. So there is a way to fall back if something crashes. Maybe you want to keep data on disk or so you can reprovision an application that crashes and have end-to-end encryption. It's an open standard. There are multiple implementations. So you don't have vendor lock-in. And even these implementations are interoperable on the wire. So you can have systems from multiple companies talking to each other without problems. Now Cyclone DDS is an open source implementation of DDS. Just develop on GitHub. We have C, C++ and Python APIs, which again interoperable. You don't know what's on the other end might be another programming language. Your objects are just compatible with each other. And in my humble opinion, we have the only nice DDS Python API available. The one by the big American company, RTI, is absolutely horrendous. We have a friendly BSD3 license. You can use it in anything. I work for a commercial company, but all of our code is donated to the Eclipse Open Software Foundation. So we can't take it away from you, even though we make it. Here's some example codes, which I'll put this presentation somewhere and you can look back at it. But these two applications, you can start in a single process within one machine or over the network, or even across the internet. You don't have to change any code and they will talk to each other. And that is my talk. If you want a demo or discuss something at all, please talk to me in the next coming days. Thank you so much. Wow, if everybody is as efficient, that would be great. So thank you so much. And next speaker, please get ready. And yeah, so I was talking about the Guinness, who already had a real Irish Guinness. Yay, congratulations. You have tried a real Guinness. Does it really taste different? Yes. Yes, yeah. Okay, good. But also it's not like, you know, it's Dublin, not just offer Guinness, the black stuff. We also offer other like good food and whiskey and all the stuff. So while you're here, okay, so watch the lighting for us. Okay, so there you go. Five minutes. Here we go. Hello, everyone. My name is Pavlo Andrichenko. I've been a member of the Euro-Python community since Bilbao. What do I do for, like what's my day job? What do I do for a living? I build production applications in Python. And I try to make them supportable. What do I mean by that? Well, I've been doing it for, actually for over 10 years. So I think I've seen the good, the bad and the ugly. I obviously don't have much time, so I will not go into the cost and benefits, why an application should be supportable. So rather what I'm going to give you is two bullet points to remember that I think is important. So why is it important to make your, to build your system, to build your application, to make it as supportable as possible? Because the chance, if you're working on a distributed system, whether it's an open source project or whether you work for a medium or large company, the chances are that it's not going to be you who will be dealing with the production busts or likewise it's not going to be you who will be enhancing the code that you've been working on. Okay, so when it comes to dealing with support incidents with the production busts, so someone and presumably someone else will be investigating those. How can you help them? How can you make their job easier? If you want to Google, so there is a framework whose name escapes me now. So one of these steps, one of the steps of the framework is logging. So you need to provide as much information as possible about the problem. And you should also include as much context, sort of concept of tracing. Include as much information about the context. If there is data involved, where the data came from, username, transaction ID, et cetera, et cetera. Specifically in Python, you need to be smart about dealing with exceptions and how you handle exceptions. If you re-raise an exception, make sure that you use raise or raise from to preserve the stack trace because that will contain a lot of valuable information. Okay, and when it comes to writing code and if someone else, if there are chances that someone else is going to be working on the code or extending the code that you are working on. Well, you need to bear in mind that readability and common paradigms tend to win in the long run. So bear that in mind when sort of writing fancy code. And always comments and meaningful, I mean meaningful doc strings go a long way. So I hope that's common sense. So just to recap, to make sure that the system that you're working on is as supportable as possible. First keyword, I guess, that I want you to remember is logging. So log as much information as possible. Even though your code could be as tested so you could have high coverage, you can have 100% coverage, you can use hypothesis testing, but still, production incidents do happen. So to help those people who deal with those incidents include as much information as possible. And for those people who will be maintaining the code that you are writing, make sure that your code is readable and understandable. Thank you. Great, amazing. So right on time. And next lightning talk will be a special lightning talk that's like one minute long from the team of Huggingface. Yep. Yes. No, you're not. Or... Oh, Pablo is ready. Okay, we will swap the order a little bit and we'll let Pablo give one minute lightning talk and then we can have Huggingface coming back after Dominic, maybe. Okay. I will be quick. Hello, I'm Pablo. I'm the release manager of Python 3.10 and 3.11. But I'm here because I have something to confess. I come from the future and the future is bright. You know, we have cure all diseases, everyone is happy, nobody complains on Twitter, it's cool. But all of this was possible only because one reason, the C-Python team released successfully 3.11 with no bugs, right? And my mission, I have came to the past to tell you that, you know, we need to achieve this future and the only way to do it is if you help us to test Python 3.11, right? We have released Python 3.11 beta 4. We only have one more beta and then we will enter release candidate. And it turns out that Python 3.11, you know, it's going to be super fast and super cool and it's going to solve all problems in the world. But, you know, it has a lot of changes, so it's a bit unstable at the moment. And we need to make sure that we are not going to break your super cool library or your ML model or, I don't know, your joke generator or whatever you do. So please go and download that Python 3.11 beta whatever beta and try your test. It's very important. Save the future. That's exactly one minute. It's like 59 seconds. Amazing. So next we will have Ben off. Yes, you're ready? Okay, you can come on stage and you will have more than one minute. You will have five minutes. So yeah, while you're setting up, I will tell you a little bit of my funny story that I experienced in Dublin. So not this time, but like around half a year ago, I came to Dublin for visiting and I joined a tour. So there was a tour guide, right? Local tour guide. I'll tell you later. Okay, so five minutes. There you go. Start now. Thank you. Hello. My name is Ben. I'd like to tell you about a research project I'm working on with colleagues at Trinity College Dublin and with Tu Dublin. We're supported by the Science Foundation Ireland. We're building a system to help people start learning Python. This is MIT's scratch environment. Has anybody here familiar with scratch? Oh, lots. Lots. Great. So this is many young students how they get their first exposure to the ideas of programming. They do it through scratch. It's engaging. You have graphics. You have sounds. You have sprites, which have scripts which run concurrently in response to events like key presses or taps or clicks. You write these scripts by joining together action blocks like move forward, play this trumpet sound. You have control blocks like repeat these other blocks 10 times. Scratch has a stage where your program runs and it has a coding area where you assemble your program from the available blocks. With this system, young people gain what the Raspberry Pi Foundation have called scratch superpowers. They can make very cool things. Often, students then start to learn Python, which is a good thing. I don't need to convince this audience. But if you're used to writing programs like this, then Python can be a very different experience. Somebody expressed the feeling as all the color goes out of the rainbow. Students often have to write sequential text input, text output programs. Usually, there's nothing like sprites. Usually, there's no graphics. Usually, there's no sound. Usually, there's no concurrency. And on top of all these changes to their mental model of how you write a computer program, the learner also has to very carefully type in their code instead of building it from blocks. For many learners, this is too much of a leap. They lose interest at a crucial stage in their computer science journey. We think it would be better if students could keep their interest in computer science and computer programming. We want people to be able to make their own technology, not just consume other peoples, have fun being creative. We want people to have an idea of how software works so they can better understand the public debates about, for instance, bias in AI systems that we were just hearing about. Now, I have to admit, I have cherry picked a bit here. There are systems like Pygame Zero and tools like Mu, which help a lot. But even with these, Python coding is still a very different experience to creating games or visual art with Scratch. To help students with this leap, we've built Pitch, a bridge from Scratch to Python. It lets learners keep their Scratch knowledge of how you write a computer program, sprites, graphics, sounds, event-driven concurrency, while they learn the Python language. It's Python through the lens of Scratch. Pitch is live now. It has the same stage as Scratch. It has a coding area like Scratch, but where they write their event-driven code in Python rather than by joining blocks together. They learn about Python's syntax and semantics in a familiar setting and paradigm. Pitch is free software, open source. It runs in the browser using Sculpt. We've been trialing this in schools, as well as places like Coderdojos, technology summer camps, computer gaming courses, the feedback has been positive, so we think we have a good approach here about how to help students learn Python. We've started to explore some ideas about how to help learners move from Pitch onto real-world Python, maybe web or data science, where the power of Python lets them do things they couldn't do in Scratch. We're working on a simpler UI to avoid some of the boilerplate code. We've got proof of concept, physical computing working, everybody likes flashing lights. For a school setting, there's a lot needed beyond the core system. We do have learning materials built into Pitch, but we need to expand them, align them better with the curriculum. That's why we've built Pitch, what it is, where we plan to take it. We'd love to talk to anybody involved with Python in education. We're mostly thinking of school students aged from maybe 12 up to 17. We'd love more people to try Pitch with their students, give us feedback. We'd love to learn from educators about what would make their classroom experience smoother, maybe autograding of assessments. We'd love to talk with people who could fund or sponsor further development. Please get in touch if you'd like to talk with us about any of this. Thank you for your time. Okay, thank you so much. It's very nice to watch and talk. So is Dominic here already? No, not ready. So, wow, Dominic, are you here? Please come here and get ready. So while we are finding him, oh, oh, it's you. So maybe I will let Dominic go first. Is that okay, Alex? Yeah. Okay, Dominic, come here. Yeah, come here, come here, come here. So Chin, if we offer one a little bit, then maybe Chin can also go as well. Are you here, Chin? Get ready yet? Okay, okay. So, yeah, so talk about my tour guide. So he said that, so don't take it as an official advice, right? It's not an official advice. The tour guide talked to us and tell us that don't follow the green man. So I guess while jail walking is a thing here in Dublin. Okay, so lightning talk. Five minutes left. So hi, I'm Dominic or disconnected and this is programming languages are hard or maybe should I say programming is hard in general. So we will talk about a few issues. The first one is file permission issues. So let's look at bash versus programming links in terms of file permissions. So we have an IPython environment here. And so let's maybe create some file like y. And as you can see, this file has those kinds of permissions. And now if you do something like chmode 700 on this file and then you, well, look it up again, it has proper permissions, right? So let's try to do the same in Python. So, you know, os chmode, the y and 7 0 0. Now if you look over this file, it has completely different permissions. Yeah, and that's a bit problematic. And, you know, the issue here is that this is decimal and chmode basically expects the permissions in octal numbers. So to make it proper, we would have to do this, right? And then we can see this is the expected result. But what this actually did here, because we can see those weird permissions, like we can write to this file as a user, we can read it as a group and execute or write to it. And we can read and there's this t. This t is called a sticky bit. It's not very useful in this case, but yeah, there is something like this on Linux. But basically this means that, you know, we kind of expected the file to be only readable, writeable and executable by us, but we ended up with a file that everyone can read, which can be disastrous. You know, it can be a security issue in the end. Um, so yeah, let's maybe look how people deal with it or like, do they make such bugs? So if we go over a website called RepUp, that's like a random search over Git repos, it's not very, it's not that good, like it has some limitations. But if we go over here and like type some kind of regular expression like this, where, you know, we are looking for our chmode with some whatever name and permissions that do not start with zero, then we can see that people actually do such mistakes. And you know, they can end up with incorrect file permissions that may then be readable by others. And if it's some secrets file, then it can be a huge problem. Obviously it's not only about Python, like if we remove the OS dot here and like search again, you can see that, you know, in Kotlin they do the same. Obviously this may actually be proper here, like they have a comment here saying that, you know, this 448 is an octal 07.0.0, so probably this one is correct here. But usually it's not so correct. And by the way, one more thing maybe, I will just show you that this oct 7.0.0 is basically this permission. And we can of course compare it to doing this manually, so 0, 0, sorry, 1, 4, 2, 7, 4. Why? And I can show you that, I can show you that, you know, this is the incorrect permission here, right? Another example, you can look for this particular case, because, you know, that was kind of the problematic one. And as you can see, people also do it in Java, in Python. Well, okay, it's a test project in some other Python code. But this, you know, as I said, GrapUp is just very limited, so it doesn't really show all GitHub results here. That's the first thing. And second of all, there are other functions that have this similar problem, like OS.open will also allow you to provide permissions as well. Okay, so I have a random thought here, or maybe a wishful thinking. You know, maybe programming languages should allow you to define in their type system that a given type should be an integer octal or an integer hex value when you type in an integer literal, because then we would not have those kind of issues, at least when someone hardcodes the value and doesn't provide, you know, it as a variable that is defined somewhere else. Obviously, this should be in oct here, not hex. Yeah, and maybe mypy could detect it. Okay, another issue is about regular expressions. So, you know, there is this meme that when you are using regular expressions, you have actually two problems. And one problem with regular expression is something like this. If you have a regular expression like this, those dots here are actually meaning that this is any character. So if you want to match domains and write a regular expression like this, this is an issue. And obviously, people do such mistakes. And it's pretty trivial to find them. I even found one in signal desktop. This is like an encrypted messenger. And they had something like this. Supported media domains regular expression. Yeah, and they had an issue like this. But there are other as well. Yeah. Thank you very much. Okay, thanks. The last slide. Okay, thank you. Thank you so much. So, unfortunately, yeah, this is a little bit overrun, but that's fine. Next, I think Alex want to show something for 10 seconds. So I'll let him do it. Yeah, so... Well, I think you take more than 10 seconds to show it. No, it's not. Okay. Well, you need a... Oh, well. Oh, okay. Otherwise, I've got to kick you out because you take more than 10 seconds already. So, right. The screen. Come on. 10. Come on. You only have 10 seconds. Come on. Come on. Okay. Okay. All right. Okay, one. Who likes Basil? Okay. We will tell you more about Basil tomorrow at Lighting Talks. Thank you very much. That's it. The shortest Lighting Talk ever in Europe. Hi, Ben. Thank you so much. Okay. So, we have Chin. Chin. Also, Hucking Face. Kind of... You missed your slot. Omar from Hucking Face. Are you still here? No. No, then we'll have Chin. Then that's it for today after Chin. But Chin has something to talk about Oh, the sports python thing. Does it work for your computer? Come on, there's no USB. You have a dongle at hand, isn't it? A what? You have the adapter at hand, isn't it? Yeah, I was like expecting that. So, let's hope this doesn't take too long to set up. So, yeah. So Dublin has a lot to offer. But do be careful when you're on the roll. I cycle in the morning here and I have a few bruises already because the bicycles are too big for me. And I struggle to get on, you know. Yeah, so. But, yeah, Chin, you have five seconds. Sorry, five minutes. It's getting shorter and shorter, isn't it? Okay, five minutes. Let's go. Discrimination. Hi, everyone. Okay, five seconds. No, five minutes. Okay. So, I was writing to some of you today. So, sorry if I'm repeating this, but never mind. Tough. TLDR. So, for the rest of you who didn't know, there are some new educational python freebies coming your way. They are specifically sports-related, open educational resources, or OER. The origin is that the EPS kindly accepted a grant proposal from my ed tech startup a few months ago to see an initiative called SportsPython, which is what I spent all the money on. No, I'm joking. Joking. This is our setup contribution. I am proud of this though because we got PSF sign off on using the Python snake logo. I don't know if Mark Andre is here, but thank you to the Trademark Committee for that. And why? Why are we doing this project? To help make Python education more accessible and enable a more inclusive and representative community. Yes, I spelled that right. Thank you. Some evidence. Oh, my friend here. Some evidence. Sports as a gateway to Python works. So, the proposal for this open educational resource project was actually based on a priority closed initiative that I have been doing with some disadvantaged kids in South London schools. So, these are actually a cohort of, if you know anything about education, then this will make sense, if not, don't worry. Year 12, BTEC IT students. So, they had no Python experience. A couple had some coding experience, but very little. And in four sessions, during a related Football Analytics program, they loved it. Look, see, happy smiley faces. That's me in the middle and the stripes. Okay, so the first project deliverables are, I'm sorry, I'm biased. It is going to be on football, because I know it best. But I'll have you speak to some people who have been pitching things like rugby and basketball and rock climbing. But the first project was based on this match, was an Arsenal Manu match. I actually disliked both teams. So, that made it very easy to code up, because I am a Chelsea fan. So, the data, I basically sat there and I coded up almost 2,000 records of events from that match. So, that was a pain. However, oh, also, there are some artwork bonus deliverables that we have created. So, these are some beautiful icons, which I got a designer to do. Again, it will be part of the, it's an open educational resource for everyone to use. So, alongside the core docs, which will have code examples for how to use the open educational resources. So, this, for example, is like using the data and the coordinates and the icons to recreate the first Arsenal goal. This is a, oh, this is Ronaldo's touches from the match. And then this is a heat map of Ronaldo's, again, I think touches. So, stuff like that is the kind of things which the project will enable. The docs will show people how to create. So, it's for learners, not just kids, but anyone, but also educators to use. Sustainability is a challenge. So, if you have, if you're not using it because you really know how to do Python, if you have time and or your organization or someone you know has money, that would be great. I'm speaking to sponsors here, hello. Because I do have a repo, it's got nothing in it, but I took the name, so that's cool. I also have the Twitter handle, but again, I have no time to actually do any tweets. So, a lot of help would be useful. And if that has sounded interesting at all, do come visit my table on the ground floor to find out more. It's the one with the balloons and like the grass pitch. Thank you very much. Thank you so much. And I think that kind of ties up our licensing talks. Sorry if you can't get in today. You can try again tomorrow. Also, as a reminder, there are remotes lots. So, you know, you don't have to go to the ferryman to give the licensing talk. But if you're a remote participant, genuinely, like not in Dublin, you could sign up for a licensing talk. You can give your licensing talk at home. So, yeah, that's it for today. And thank you so much for joining, and I hope you enjoy your evening in Dublin. Thank you so much.