The Inevitable Tech Incident: The Lessons We Just Can't Seem to Learn
Published June 7, 2023
This video features Ahter Sönmez, Daniele Procida, David Vaz, Dawn Wages, Emma Delescolle, Ester Beltrami, Fabian Braun, Hana Burtin, Helen Williams, Laurence Billingham, Mia Bajić, Miguel Magalhães, Nina Menezes, Sheryll Holley and Zaid Al-Jubouri at DjangoCon Europe 2023 in Edinburgh, Scotland.
Lightning talks from DjangoCon Europe, 31st May 2023
https://pretalx.com/djangocon-europe-2023/talk/R7RAZP/
PyCon Portugal / DjangoCon Europe 2024
by David Vaz & Miguel MagalhĂŁes
https://youtu.be/Zc0W3L1tIZM?t=3
Learning from Git
How to version your Django models - Django CMS example
by Fabian Braun
https://youtu.be/Zc0W3L1tIZM?t=361
High dive numbers
Why we encode even when there aren't computers involved
by Helen Williams
https://youtu.be/Zc0W3L1tIZM?t=547
Make type hints easier
by Hana Burtin
https://youtu.be/Zc0W3L1tIZM?t=813
On being nice
Why it costs us nothing to be nice, and what we should do about it
by Daniele Procida
https://youtu.be/Zc0W3L1tIZM?t=1047
Open the dialogue with your browser
Intro to the new dialog HTML tag
by Emma Dellescolle
https://youtu.be/Zc0W3L1tIZM?t=1334
Rapid prototyping with Django
i.e. why you should come and work with me in the cabinet office
by Nina Menezes
https://youtu.be/Zc0W3L1tIZM?t=1597
PyconItalia 2024
by Ester Beltrami
https://youtu.be/Zc0W3L1tIZM?t=1891
super() stupid python tricks
by Laurence Billingham
https://youtu.be/Zc0W3L1tIZM?t=2038
What do Edinburgh and Prague have in common?
Europython and PyconCZ announcement
by Mia Bajic
https://youtu.be/Zc0W3L1tIZM?t=2343
In the world of AI, what is exclusively human?
by Ahter Sönmez
https://youtu.be/Zc0W3L1tIZM?t=2630
Progressing from machine karaoke to live band karaoke
Common pitfalls and how to avoid them, release your inner rock star
by Zaid Al-Jubouri
https://youtu.be/Zc0W3L1tIZM?t=2799
Ask me about the PSF!
Who are the PSF? What does the PSF do? How do I join?
by Dawn Wages
https://youtu.be/Zc0W3L1tIZM?t=3112
Human captioners - why are we still here?
by Sheryll Holley
https://youtu.be/Zc0W3L1tIZM?t=3515
The speakers announced upcoming community events, including PyCon Portugal in Coimbra, DjangoCon Europe 2024 in Vigo, PyCon Italia in Florence, EuroPython in Prague, and PyCon CZ, while encouraging people to submit talks, attend, sponsor, or help organise future DjangoCons. Technical presentations covered Django CMS’s content-group pattern for versioning and auditing editor changes, practical Python typing with less-restrictive interfaces and protocols, and the native HTML `<dialog>` element as a lightweight alternative to JavaScript-heavy modal components. Other speakers argued that kindness is more useful than vague “niceness,” explained how diving codes encode movement for international judges, explored rapid Django prototyping in UK government, and demonstrated—humorously—the dangers of using metaclasses and stack inspection to automate `super()` calls. The final presentation began comparing machine karaoke with live-band karaoke and described common performance mistakes before the transcript cuts off.
Summarised automatically from the transcript.
Automatically transcribed, so expect mistakes in names and technical terms.
Speaker 1: Hello. How many of you have not gone to uh Django Khan Europe last year in Portugal? No. Okay. And from those, how many of you would like to know uh to visit Portugal? Okay, so you have uh a really nice uh chance. Uh in september Pycon Portugal, Coimbra, which is a middle-of-the-country uh city, a relatively small city. We are still in the call for participation stage, so you can still get a free ticket if you want to give a talk or a workshop. And if you want you can grab your own tickets.
Speaker 1: And this is this is the smallest lightning talk, so we decided to bring you something extra.
Speaker 2: So as you know, the last uh three channels before this one was supposed to be in Portugal. three times in a row but with COVID it only happened twice and uh then the other two times uh being uh remote So we brought up a map of the last Django cons and uh it was in Prague, Berlin, Amsterdam, Zurich, Warsaw. uh friends Cardiff Budapest Florence Eidelberg Copenhagen Porto and this year in Edinburgh where we are but now the question remains Which country is up next?
Speaker 2: So the next Young Con Europe will be in Spain. That's right. Next year we'll meet in uh in Vigo. uh a city in the in Galicia in the north of uh of Spain and uh we have uh a quick video to show you
Speaker 1: Uh oh
Speaker 2: It's a really good video with a lot of uh stuff going on.
Speaker 1: Yeah, never mind.
Speaker 3: ¿Sabes cuál es sin duda el mejor destino para viajar? ¿Quieres conocer un lugar único? ¿Buscas algo fascinante que te sorprenda? Descubre la ciudad que se ilumina en todos los mapas porque es inigualable en el mundo. Vigo es el Mundo en la ciudad
Speaker 1: So for for those of you who don't know where Vigo is Here's here's here it is. It's um relatively close to Porto. You may wonder why. And uh I will give you an extra idea of the the city Um the main conference will happen in Auditorium Ar do Vigo, which is a relatively new building. with uh use conference hall and this might be the best part this is part of the conference center and uh probably it will be where we'll have our coffee
Speaker 1: breaks and uh lunch with uh seaside view But not all is good. We only uh applied because uh we felt that uh there wasn't any uh other team applying to organize Django Korn 2024. And as you see, it was true. And this is uh bittersweet because for us it's marvelous to organize another conference. But at the same time we are clearly uh worried about the future of DjangoCon Europe. So what we plan to do this year is to help uh to
Speaker 1: Ask for your help. Any one of you that are considering any time in the future to organize a Django Khan, please come along. Help us prepare this Django Khan. We all we have all the local support that we need, but we need all the community support in uh lots of uh teams we can share all our experience and maybe help you become the next uh Django Con organizer with success. That's what you are hoping.
Speaker 4: Do you need a lightning talk, MC Sorry? Do you need a lightning talk MC?
Speaker 1: No. We are in the end. We already have the the general email and the general site. No not much information, but we we have already started.
Speaker 4: Big round of applause, please. We have Take it away.
Speaker 5: Yeah, hello. I'm Fabian , the Django CMS fellow. A slight contrast, talking something more technical. I'll be Flushing code, don't worry, you don't have to read it. I'm not gonna explain it, but if you want to talk about it tomorrow at the sprint, um you're happily invited. Um Short background, Jungs MS is an enterprise great content management system and what happens there is many editors work on a web page. And sometimes they do not talk to each other. So someday someone finds his content is gone or changed or whatever. But why and where has it gone? So as a programmer there's a simple solution. I'd use, for example, Git, and
Speaker 5: there I know exactly who has done what. uh in the series of commits, where were they branched, when were they leader together? That's something we thought we'd need uh for our pages. code snippets, images, blog posts, but uh maybe any other model you have, maybe uh moths you're you're you're monitoring, whatever. So uh how could we get this done and Um so with the upcoming version new version of Django C M S4, we introduced a new uh design pattern. And that's just an example. If you had a Blog posts, you might have had collected all your data in one model. We would like to change the structure of this and say, okay, that's a blog post, and then we separate out the content, which we can then version.
Speaker 5: So that we can understand what has happened between those versions. And that's uh really easy to do. That's you have a post model and then you Change that to two models. It's not much to change, it's something. We call it the group of content pattern. Um but It helps a lot because to that we can adjust a version that can contain all the data we need. Who's done it? When has he done it? What state is it in? um and uh where did fork from so what's the source of the of the data uh and again I invite you to look at it or talk to us about it tomorrow And now for any model, may it be page uh HTML content or may it be uh moths in in in Belgium
Speaker 5: You can have a nice list in your um Django admin which gives you all the versions that have been there ever. who 's changed them, when. You can uh yeah do anything you like like uh publish them, revert them, archive them. Very nice. And you can even do that visually. So if you have actual content, you can see what has changed on the site or maybe even the HTML code if you're more like the coder to it. Yeah, that's Something I wanted to introduce to you really quick. I think I hope I'm in time. I'd love to talk to you about that. See you tomorrow.
Speaker 6: All right, thank you. Um so this is a talk for anyone who loves knowing what a secret code means Um and you might be like me on that one. So every dive has a code that identifies it. I it has the degree of difficulty, but it also has a code that uniquely identifies the dive. That code would look like this. A 103C. Alright, but um let me So the first digit here is telling me the starting position of the dive and the direction of rotation of the dive. So that one tells me our diver is starting facing towards the pool and rotating with their hands
Speaker 6: going forwards in front of them. The second digit here tells me that it is not a flying takeoff, so this is a binary digit Zero means we're not a flying takeoff. If it were a one, the diver would be starting with their arms teed out to the side like so. And the third digit here tells me the number of half rotations involved in the dive. So dives are measured in half rotations because quarter rotations are belly flops and those hurt. Uh so the three here means that our dive involves one and a half rotations. A diver starts standing upright, does a full somersault, and then continues around an extra half to land on their hands.
Speaker 6: And this final digit tells us the shape that the diver makes as they rotate. So we have a C here. That C tells me the diver will be in a tucked up like a ball shape. But what happens when we run out of digits here? We need something extra encoded. Well, we invent dive Unicode. Like this. So any dive that starts with the number five is a twisting dive So you may have recalled from my previous three-digit medal letter example, there was no twists in that dive.
Speaker 6: This dive stuck to the five. There will be twists Our second digit is now like that first digit telling us the starting position and rotation of the diver Two means that the dive starts facing away from the pool and continues rotating hands behind towards the pool. The flying does not happen in twisting dives, so we have dropped that digit completely, which means our third digit is now the number of half rotations in the dive. So this diver is doing a half a rotation. And our final digit is how many half twists they're doing. So this dive involves one half twist
Speaker 6: So they fall backward, do a half rotation and a half twist, and land in the water on their hands. Great. Just like Unicode. I mean, not really Um but these codes were weren't even created for talking with computers. They were created so that an international panel of judges who all speak different languages Could all know what the dive they're about to see is. They could all know that a double gainer is the same thing as a reverse double somersault, which is a 304. Yeah. And then look up the degree of difficulty. So all of this encoding is to enable communication.
Speaker 6: And I bet you can think of some of the encodings that you see out there in your regular life that are also to enable encode communication. Just like that. All right, thank you
Speaker 4: Okay.
Speaker 7: Yeah. So I'm Hannah. I work for Octopus. Um yeah, I want to talk to you really quickly about typing. Who in there use type-ins in the code every day. That's less than I expected, but who may who thinks that it's really frustrating There are a few. And yeah, sometimes my pie is not happy. And this is an example of what can happen I saw something really similar um in production code. So you have a code that works but then this happened. My pi say yeah but that don't work, that's not the correct types
Speaker 7: And then you are saying you uh you need to fix things fast, so you just say yeah my pie wants a list, I will give it a list. Don't do this please. Please try to find why it did it say it wants really a list. Because maybe what you have inside is A function that just uh command values and that is just using an iterator. And in this case, what you can do is instead of using the list type int just use iterable and this way that means that anything that you can iter in will work and my pie will be happy And basically that's it, that's how
Speaker 7: I rule or I will use my type-ins. If it's a function parameter, I try to put the type that is the le the less restrictive. And if it's uh what router function returns, I do the most restrictive. So here are some examples that you have from uh collect that's in the Summer Library, collection. abc. Um at in collection. abc you have the QR code to the Python documentation with all these needs collection that will help you avoid my PI issues. And uh well that's good, that's not
Speaker 7: always collection that causes issues, so we have other tools in Python for this. like uh protocols. Protocols were introduced in Python 3. 9 and basically that's a class you can declare anywhere you just say what your class has Like this one it's the class that has the function that is code parser. That put that get uh String input and you can use this and it will work. MyPy will be happy with any object that you pass to your function that just have a pass a method that called parser. So this will also help you make my Pi happy. And because I want
Speaker 7: to say to look a bit at the future In Python 3. 12 there are a lot of type improvements and the one that I find really interesting is this one. Now when you are doing general types you can just extend them a bit more doing I want a type that will derive from iterable and that will be that we are just uh avoid creating generic types and derivative derivative. So yeah, that's uh that's about it for all I would try to make my Pi uh happy and type in less frustrating Python So if you want the slide, yeah.
Speaker 8: I work at Canonical where I'm hiring for lots of different roles. My ambition for this conference is to go away with some new recruits, and if I don't, I'll be very disappointed in you. But I want to it means I've spoken to many dozens, if not hundreds, of candidates and interviewed them. And in all the interviews, uh I tell them that they can ask me questions and I will answer them all very candidly and and truthfully. And the question I've been asked many, many times is, is it a nice place to work? Now you've I had this advice, I'm sure, that it costs you absolutely nothing to be nice. And it's a true sentence. And do you know why that sentence is true?
Speaker 8: It's because being nice is absolutely worthless. That's why it costs you nothing. It's a gift without any value whatsoever. And the word nice has had this very long and winding um journey. We can trace it back to origins in meanings of ignorance or stupidity. So it's had I won't go into all that now, but now it's this kind of blah word that carries, that says, that implies commits almost nothing. It's everywhere and it governs us still. It's a weak and ineffectual ruler that we can't get rid of. So only sadists want to hurt people. But all of us sometimes must do things that are going to hurt someone else, that are going to cause pain and distress, like the doctor who has to deliver bad news, the teacher who has to tell a student something that's not going to be nice to hear.
Speaker 8: The partner Who has to say something that's going to hurt because that's the truth? Or the colleague who has to say something about your performance. There is no nice way to do these things, so we tend to put them off And do them badly because we don't want to hurt people. But our reluctance to do them further harms the person that we didn't want to hurt because for example we deny them of the opportunity to maybe to take the appropriate action. So Never hurting people, always being nice is impossible. But we can be kind. And kindness is actually what people are asking me about when they ask that question. Uh is what they want because being kind is completely different from being nice The good doctor, the teacher, the manager has to deliver bad news, make tough decisions, but can do it kindly with compassion, gentleness, and empathy.
Speaker 8: And they have to face up to the hurt and the fear and the distress of the other person. So being nice costs us nothing, but being kind can cost us a great deal It hurts us to see somebody else's pain, especially when we are the ones maybe responsible for causing or delivering it. It takes courage to look straight at it. And saving people from every pain is impossible. It's an impossible hope, but And being nice doesn't help them, but being kind does actually help them. Um because they get the truth, they get some comfort, and the kindness itself is an affirmation of value and humanity that uh we share. So I'm not saying it's bad to be nice, but someone who aspires to being nice is at risk of being a bad doctor, manager, or teacher, or a person to be in a relationship with, because those people are at risk of
Speaker 8: Doing more harm because they wanted to avoid bringing pain. And maybe it's not so admirable to um uh avoid the horror of somebody else's pain more than you attend to their actual needs. So nice has decayed into this vague sound of uh approval. Even blah seems to be a word with more clearly defined uh meaning. Um maybe we could take nice back to another word or maybe it's going to be swallowed up in this concept of the nice guy which will be a nice a and appropriate end for the word nice. But in the meantime I do my best to avoid being or saying nice because it's not a gift worth anything to anyone. It doesn't contain any kind of
Speaker 8: commitment or aspiration for them to live up to. Tell them that they're generous or warm or friendly or encouraging. That's something that somebody can keep with themselves that you have to dig deeper even to give them You give away away more when you say it. So if you find yourself tempted to be nice, ask yourself whether you're really flinching from the cost of somebody else's pain. So when I'm asked that question, I can say truthfully, well, maybe not nice, but it is a whole lot of other things, and I value them much more. Thank you.
Speaker 7: Yeah, hello everybody. I'm sorry to be the one to to break the stride that you had going with no pro technical problem during the day the talks.
Speaker 8: And so
Speaker 7: that's
Speaker 8: word that we had technical problems because I I tried to keep things simple. I just wanted one single page as a slide and to make things even more simple. This is just HTML. HTML it's it's been there for a while. It doesn't really change, right? It's always been the same. And uh one of the same thing that we've been doing with the schema is something that we all here love to do is uh centering things uh vertically on a screen. Uh and Yeah, that doesn't always work. It's not centered vertically, it's not really nice. But yeah, this works.
Speaker 7: This is this is basically the um uh the dialogue feature from uh Bootstrap And if you don't want to write JS, but you do want to uh rely on JS, you can have uh this. I know this is really small. Um You
Speaker 8: can write something like this, and there is no JS in there, it's like
Speaker 7: HTMX. You just add some tags. And uh you add a data target and data toggle and you will get a model. And that's really nice, but you do have to load a chunk of JS to get that Uh and this is how I used to to to write models. But no, there's something new in HTML actually.
Speaker 8: HTML is changing. This is the dialogue uh tag in HTML. And well
Speaker 7: it doesn't look as nice as the other one, but if I look at the code that I had to write to Diduda. I it's just a simple uh call in JavaScript that just uh
Speaker 8: show model and this is now uh something standard in almost every browser and you can show model and it will show a model and I can inspect that this is
Speaker 7: this is just a standard HTML tag, it's a dialogue tag that will not show up unless it says it has the attribute open. And you can toggle that attribute open with JavaScript. Or you can just have inside uh the that's Inside that tag you can have a button, a form and a button, and give a form method of dialogue and that will close the button. So That's that's nice, that's easy, that's just almost pure HTML, just a little bit of JavaScript. And if I don't want it to be a model and I don't want it to be centered on the screen vertically because nobody wants
Speaker 8: to center things vertically on the screen, I can just uh use show instead of show model and it will uh uh be shown there But yeah, it's a bit ugly or it's not as pretty. It's it's a bit like alert. And in some sense it it does it is like alert except that now you can put some HTML in your alerts But if you want to, you can uh actually uh put some um styling and this is still if I inspect this Uh this is still a dialogue tag. Uh here this is still H time HTML dialogue tag, except know that
Speaker 7: But since I have Bootstrap loaded on this on this webpage, I applied some style to it. It's completely stylable. You can style The dialogue itself you can style the backdrop, you can style everything you want. And if you want to, you can even have things like forms inside of that. And you can Get the output of the form and you can retrieve data from that form. And since it's uh completely HTML, you just do uh get element by ID and things like that, and you can
Speaker 6: uh
Speaker 7: access that with pure javascript with
Speaker 6: not
Speaker 7: without having the need to uh go to things like uh
Speaker 6: jQuery.
Speaker 7: And um I just wanted to tell you that you like cats and I'm done. So Hi, uh I'm Nina.
Speaker 6: I'm going to talk about rapid prototyping with Django and say about some of the things that I've learned in the past year, but also maybe persuade some of you to come and work with me. So who am I? So I'm from a team called i. ai, which is the incubator for automation and innovation in the Cabinet Office For those of you who don't know, the Cabinet Office is a central government department in the UK. This is why there's a picture of me outside number 10, which is a classic civil service thing. I did not know I was having a meeting. That's why I'm wearing leggings in that meeting. Not the best, but hey. So we're a small team, about 10 of us, and it's mostly software developers. And so what we do is we build working prototypes with code and we do it fast. And that's mostly using Django.
Speaker 6: Sometimes not, but mostly Django. So what do we work on? So we work on Prime Ministerial priority projects. So sometimes these are things that we have to turn around in a few days. or sometimes as longer-term projects. So for example at the moment we're working with the Department of Energy on an app which hopefully will go live this summer. We also work on internal projects to try and make the Cabinet Office number 10 and the civil service more efficient generally via automation. And that can be a variety of things. Um and a lot of our code is available um openly um just see our GitHub. So I can't really go into detail about a lot of those projects either because they're a bit sensitive or just it would take too long.
Speaker 6: But this is a fun app we created for an event recently. So given a job title, it generates the skills required for that job. So this uses GPT-3 and DALI for the images. I did not like plan for an AR-generated image to actually look creepily like me. Um but it does. Um so we just did this as quite a fun little app, but it actually uh turned out to be very useful. It's being used across the civil service to help develop consistent job descriptions because there's a whole variety of jobs out there. So what's worked well for us and made us fast, because that's one of the things that we have to do as a team, we have to do things fast. So obviously I'm playing to the crowd a little bit, but using Django. So like I say we're prototyping directly in code.
Speaker 6: We don't always have designs and we build and iterate. So We can produce production ready code pretty fast because of sort of Django's inbuilt features like security features. It's easy to manage users and so on. And if you write good code as we try and do as a team, it's quite easy to iterate and change it. Like we've built some apps, we've had them penetration tested, and they're ready to go. Another thing that's really useful, some of you who are UK-based might know about GDS, the Government Digital Service. They produce lots of designs and guidance and there's a lot of research gone into those, so it's really useful to use those. We're a small team, makes it easy to communicate. Although I have got a massive typo there in communication which isn't great.
Speaker 6: We've also got developers who are happy to get involved in other tasks. Like I say, there's sort of seven developers in a team of ten. So we get involved in sort of product management, user research. So it means we really understand the needs of the user and it means we can develop stuff faster. Another thing, we work on a lot of projects we're invested in and interests that interested in. Improved motivation goes a long way to like being more productive I think that's something that people don't always realize. Everyone complains about the public sector, you know, or public sector pay if you're a software developer, but actually there's lots of exciting things you can work on, and that's kind of why people stay Another thing that you have to deal with in this team is being relaxed about changing priorities. Things change all the time in the Cabinet Office, ministers, prime ministers, you just kind of have to deal with that.
Speaker 6: But yeah, at least you can enjoy it, enjoy being in the centre of government. It's also very exciting. Another thing that's good is that we're happy to fail fast. For understandable reasons a civil service is quite risk-averse, but we try and learn what we can and move on if needed. And also there's a big focus on learning in our team, and so we've got people at all all different levels And it's important, I think, to build skills within the civil service. Any of you who know really about the public sector in the UK, a lot of work gets contracted out. So sorry to any of you working on lucrative government contracts, but hopefully we'll build these skills internally. If you're interested, that's how to find me, more details about the jobs that are available, or just come and chat to me if you're interested
Speaker 6: generally. Thank you.
Speaker 4: Thank you very much. Yep, fantastic too.
Speaker 3: Thank you. Yeah, we're gonna talk about Paco in Italia 2024. Yeah
Speaker 6: The this edition has just ended suddenly. We had amazing time with uh three days of talks and workshops And four five amazing keynoters and our special guest Simantha Cristoforetti Um two social events, uh drinks and dinner. Um yeah we had uh like people coming for forty two countries actually Uh was a big event. Uh the good news is that you can re-watch it now. Uh the streaming are available on YouTube. We were gonna split the content. in this month, but you can already watch it. And yeah, the big news is that now we have the tapes for
Speaker 6: uh 2024 will be in Florence uh from Wednesday to Saturday. Uh first day will be like worship day um uh beginners uh uh or those who want to learn Python and public speech workshop and then three days of talks and workshop uh worship free by the way. You can follow us uh with the newsletter and our social media platform Anything uh Master Dom LinkedIn Twitter and Instagram. Yeah, I gonna go five seconds to scan the newsletter code. One two three
Speaker 6: Okay, if we have if you're gonna be a data, please subscribe. And now we are looking for sponsors. So it's a mini conference, and this year we were able to approve like twenty seven seven grants out of ninety-four uh requests so thanks our sponsor so if you want to consider sponsoring us let's write uh this email sponsor at bycon dot t or let's talk with me And yeah, that's is it. Thank you.
Speaker 4: Thank you, Esther. Thank you very much.
Speaker 8: Hi, I'm Lawrence. I've been doing Python for a while, certainly long enough to know better than to do some of the stupid stuff that I'm doing in this talk. I haven't done Django for ages though, and uh this conference made me realize I didn't really so much so much miss the framework as the community. So thank you all for making this a really nice place to be and for making this conference excellent. Um you might have seen some other talks where like People were saying that the use of super is considered harmful
Speaker 1: or even super. In this talk, I'm going to consider it obligatory. I've not only stolen Mark's hairstyle, if you can call this a style ,
Speaker 8: I've also stolen his talk format. He has a GitHub repo called Stupid Python Tricks, and it's open for contributions. This is the story of how I made a contribution to that. It started off innocently enough.
Speaker 6: My friend had had a really bad day. They had a very flaky test suite where depending on what order they ran their tests in, different things would fail But um if they ran a single test to debug it, everything would be fine. So it turned out that the hold through the Swiss cheese of their bad day Where's Tim? Thank you. Um, was that they'd forgotten to call super.
Speaker 8: teardown.
Speaker 6: And I was commiserating with them.
Speaker 8: Like I've done this, they did this, I'm sure a bunch of you in the audience have done a similar thing And I was just going, oh yeah, that sucks. It's a pain in the butt, but it's a thing that happens. Until my friend said, it would be great to have a built-in context manager that did this kind of thing automatically. I thought it would be good. It could even have a vaguely sensible public API where if you have a class that inherits from don't don't mind what the magic wands are for a while. If you made a base class that had that and
Speaker 1: you inherited
Speaker 6: you had a child class that inherited from that, you could just automatically call super on any method if you wanted. You could even make it run as an example, and it really does run, so you can see that we've actually called super after afterwards, even though we don't explicitly call it in our definition. Um how is that haggis made? You probably don't want to see this. Don't do this in production. So it starts out not so stupidly. Like forgetting to do some cleanup is like a try-except finally. And doing stuff with functions that take other functions is a decorator. So we just take a decorator that does try accept finally, and then some magic happens. This so far is not too stupid.
Speaker 6: We're definitely in stupid town now. What you do in that finally is um you just you basically pop the call stack, have a wander around in there and ask if anyone else around there has your name. And if they don't You just pop the call stack back the way it was and no one is any the wiser. However, if you pop the call stack and you go, hi, I'm Lawrence, are you Lawrence? Are you Lawrence? Are you Lawrence? And you find someone called Lawrence? This is gate-crashing a party to which you were definitely not been invited.
Speaker 8: It breaks locality of definition, but it does work. Um if you go
Speaker 6: hi, you're also called Lawrence, I've got some um arguments for you Please call yourself with these arguments. You can do that. You have to work out the context where your callable was defined, which is fine. You don't have to do anything too no, it is horrible to do that. So you go back traversing the inheritance the inheritance tree and you do literally wander around working out if any of the callables there have your name. That doesn't get you all callables. You have to do some other stuff. Sometimes you have to do stuff with locals. There's some other edge cases, but I I want to look at this code in particular. I am not currently clever enough to understand what this code does. I wrote it a few years ago
Speaker 6: I'm sure it's fine and we can merge it and use it in production though as well. And it won't last for the ten years mentioned in Sas Sasha's talk. Um You may have noticed that I've been pulling a a sleight of hand here. I've actually only taken us from the oh it's a pain in the ass when I forget to call super. teardown to I've now taken us to It's a pain in the ass when I forget to decorate my method. Which is still is still a pain in the ass. It might be the other butt cheek, but it's still terrible. Fortunately, how am I doing for time? Metaclasses to the rescue. I was kind of hoping. No, yeah, I was hoping that Mark would interrupt me. Um you can find the answer by uh Yeah.
Speaker 4: Finish your sentence. Oh no, not that. Yeah. Um you just you just make a meta class
Speaker 6: that applies the uh uh a plays the decorator to every callable or anything else in the tree and it's all fine it's it's production ready let's let's merge it.
Speaker 4: Yeah thank you very much Lawrence huge round of applause my crazy friends
Speaker 6: Hello everyone, my name is Mia and this is my second time at DjangoCon. First time was last year when I went to Porto I really loved it. It was great. I really like this open source swipe, this great atmosphere. So DjangoCon became my favorite conference. So here I am again. So I arrived on Sunday evening and uh af and I went for a short walk uh around my neighborhood and I took this photo. I think actually it's really nice. Uh in reality it was even nicer than the photo. Uh there is like a lot of towers there. You can see there was a sunset behind these towers. And actually this photo reminded me of one photo that I took some time ago, which is this photo. And this is photo of my hometown, Prague, Czech Republic. So I thought I could maybe tell you a bit uh
Speaker 6: something about Prague Uh so what is also nice about Prague is that we have a lot of hills, same like in Edinburgh and we have a lot of towers. Actually Prague is a bit bigger, so there's around one thousand of towers there and as you can see this is my favorite spotting product that I recommend it which is a nice park where you can watch the sunset behind the Prague castle which is the biggest and the nicest castle So in the country and there's a lot of pubs around so you can just go there, grab a beer, you know, just chit uh sit, uh chill and watch the sunset. Uh speaking of beer, I'm a huge fan of beer, I really love beers. So last night I went to some Scottish pub and uh just to try s just to taste some local beer. I really liked it. And uh if you like beer actually you would like Czech Republic because we are the biggest
Speaker 6: producer of beer in the world per capita. We are also the biggest consumer of beer in the world per capita, unfortunately. And this photo I especially like because it's This was this footage from Prague Beer Fest where I went with my friends from Python community. It was just a spontaneous event. Someone said like hey, there is a beer fest. Festival in Prague and we were like, hey, let's just go all together. So this is something really nice. We have a huge uh Python community. Uh if you wonder why the glass is so small, it is just because it's for digestation but if you like if you order a proper beer it looks like this. So there's also one interesting thing. So when I was on my way first day to the venue I saw a guy playing on bagpipes He played really well. It was really nice. And as probably all of you know, bagpipes are a
Speaker 6: traditional Scottish instrument. They're everywhere. uh here you could have probably seen it. Uh what you probably don't know and I didn't know it until recently that the the bagpipes are a thing in Czech Republic as well If you wonder how come, I have no idea. I have never actually seen it, but I live in Prague. Apparently it's something more like in some villages and smaller places And yesterday when I was Googling it, I found out that in Czech Republic in Strakonica, which is some s super small town in the middle of nowhere, there's an international bagpipe festival. And there are people from all over the So if the bagpipes are your things, then you could check out Czech Republic as well.
Speaker 6: Now we come to the last point, which is the best thing we have in common this year. So uh in Edinburgh this year there's a great Tech conference, DjangoCon, and in Prague actually it happens that we have two great conferences this year. So the first one is Europe Python 2023, which is the biggest European Python conference and the second biggest Python conference in the world. It will be held from 17th till 23rd of July, and you can look forward to two days of workshops, three days all talks and two days of sprints. You can expect many interesting talks, you can expect many attendees and also
Speaker 6: Also I would like to mention that Europe Python Society sponsors and supports many organizations in Europe, including DjangoCone. And in case you would like Prague and you would want to come again, or maybe you would like it so much that you would like to stay there for two more months, then we have also Also our local conference, PyCon CZ, which will be held in September. Our call for proposal will open next week. So in case you would like to prepare a proposal, you're free to. We'll have three tracks general one pie data and beginner check which is great uh if you're a first-time speaker so thank you very much for your attention and I hope to see you all in Prague.
Speaker 4: Thank you Mia
Speaker 7: Yes. Um actually th this is about tractor jokes. And uh how maybe AI jokes can can replace this because few weeks ago in one of our stand-ups we have a product manager, he's a great guy, so funny He was making some chat GPT joke and you know I always get things from the different sides. So I said It this is a nice joke, but it it I just thought of this question. So uh the question was in the new world of AI, what is exclusively human? And Uh you know it's what what will what what are the things that AI will will be never able to achieve?
Speaker 7: Uh that was my question to myself. So I just not not noted that down to to ask you um and maybe some drum roll for dancer
Speaker 8: there we go
Speaker 7: I don't know um But it's good to ask, I think. And I invite all of you to ask this question to yourselves. But then since I don't really have an answer, I have some candidates. I asked ChatGPT
Speaker 8: if Chat GPT has an answer and it
Speaker 7: kind of produced something. produce something but I think chat GPT failed. He it doesn't really understand the question. So I said Let's think about and uh I I just wanted to do this like a jazz musician, maybe y I could improvise here and you could shout out things. Feel free to do so. But my things that I learned from this conference are maybe imagination. I will never be able to imagine things because they know things, right? Um and maybe also emotion or emotional vitamins, you know, all this was part of the conference as well. You know, we we feel things and we do things that way.
Speaker 7: And that that's a big that's a strong part of how we do things and why we do things. Why does AI do things? Does it involve emotions? Maybe not. And yeah, maybe empathy. Sorry. This is frozen, sorry. Anyway, uh Chat GPT uh kind of interacted here. Uh yeah, thank you. That this was my talk.
Speaker 4: Thank you also
Speaker 7: Hello everyone, thank you for having me. Um yeah. So as mentioned, I'm going to be talking about machine karaoke and progressing from machine karaoke to live band karaoke and what come pitfalls people make when doing that
Speaker 8: and how we can fix those. Um obviously a very important topic. So what is karaoke? Um term originates from Japan, the whole concept ri originates from Japan. I think most people are somewhat familiar with it.
Speaker 7: You pick up pick a song, you get a mic sing along um and often for me you look a bit like an idiot but it's all for good fun. Um it's often done in private booths but sometimes uh at a public venue with a stage So, what's the difference between machine karaoke and live band karaoke? Uh, machine karaoke is kind of stereotypical, it's the most common type, I assume Most people are familiar with this one. Um it's quite an incredible feat of technology because it you know it that has song selection, lyric display, does all the uh AV, um and you can have some very fancy setups for for machine karaoke. Conversely, live band karaoke, it's a similar concept, you still pick a song, but the music is played by a live band
Speaker 8: And you are the lead singer. The band knows a select number of songs, but it's usually about a couple hundred actually, which is incredibly impressive for the band.
Speaker 7: So what gives me the right to talk about uh live band karaoke to yourselves? Um so I started with karaoke in 2019. Um that's A band with two ukulele players and some drums. Then moved on to rocky, which is more stereotypical rock band instruments
Speaker 8: were used. And then on to Liveband karaoke Pekham, which is uh obviously a very famous uh
Speaker 7: company, um, where I experienced like the darker side of live band karaoke. Um The last song someone sang Killing in the Name of uh by Raging It's the Machine and the the performer jumped off the stage to you know crowdsurf and landed on top of me. Um and I was not able to support his crowd surfing dreams, uh we both went right
Speaker 8: to the floor. But I was not discouraged. Um When I arrived in Edinburgh on
Speaker 7: Sunday evening, I found a live band karaoke event actually happening at the Three Sisters, and you can see on the right there myself performing So mistake number one, not knowing all the lyrics. Often with karaoke you get given the screen and the the words color or like there's a a dot trailing. But in Live Band karaoke you're often given all the lyrics in one go and you have to sometimes scroll through. It's a bit of a pain. Unfortunately there's no technology yet that will hear what you're saying and kind of follow along with you. And yeah, you you if you keep looking at the screen you tend to lose your place.
Speaker 7: So the solution for this is very complex. You memorize the lyrics before you go. Can be harder said than done, but you can do that by just Planning ahead which song you're going to sing, um, because you can often only sing one because it's in such high demand, um, and you just play that song on repeat. Uh mistake number two, not knowing the timing, the band will count you in, which is great, but you can ultimately lose track of where you are in the song, especially during a minute-long guitar solo. Um again the solution for this is listening to the song on repeat which gives you muscle memory and you can tell where to start and stop singing. Some people are musically talented and kick out beats that can help. I'm not one of those people. Singing the entire song in time without music is the ultimate test to know whether you truly know a song. So you know if you're bored you can just sing it in a mirror.
Speaker 7: Why not? Um mistake number three is not ensuring the crowd can hear you because the instruments they're very, very loud. I'm glad that this stock photo exists. They're often louder than the speakers that usually play the background music and the microphones you usually use for singing want to cut out background noise unlike these ones here, which kind of try and pick me up from a further distance. Solution to that it basically depends on your risk appetite, but the microphone should really nearly be touching your mouth. Um during during COVID the compares would mic the wipe mic wipe the mic between singers, but that doesn't happen anymore, so you can bring your own alcoholic wipes if you want to and wipe that give the mic a wipe. And if you can sing loudly and still hit notes, always a solid
Speaker 7: option. The last mistake is not having a great time. So the audience can tell when you're not into it, and they love it when you are. The solution is often liquid courage. That's a slippery slope. Can be dangerous if you get too drunk, then you can't really sing properly and you try and crowd surf on one person. Doesn't work. So the freak most frequently asked question I get, and it's only one question, I can't sing, should I do live bank karaoke? Yes. Here is an example of me. Oh, and we ran out of time
Speaker 4: Thank you, thank you, Zai.
Speaker 6: So who has heard of the PSF? Good. Okay. Uh who knows for sure they are a member of the PSF? Okay. Um maybe of that smaller group. Who sh is sure they know all of the ways to be a member of the PSF? All right, there you go. So everyone should learn something from this very short presentation. So my name is Don Wages. I am a director of the PSF. I started in 2022, so it's only been a year. I have learned a lot I am also a treasurer of the PSF and I did not know I wanted to be the treasurer of the PSF when I ran to be a director of the PSF, uh but I raised my hand when opportunity called and it ended up being a really, really great thing, and I'm gonna tell you a little bit more about this upcoming election season as well.
Speaker 6: If there's tons of links in here, so I would recommend like if you are interested at all, uh use the QR code.
Speaker 8: Or all of these things have been found uh I've got from Pyfound. python. org is our blog uh or uh python. org So who are on the PSF board from 2022 to 2023? We have the present Guido Van Rossom. Some of you may know this name. Uh we have the chair, Thomas Wooters, Vice Chair Elect Deborah Azevedo. Vice Chairs as well are Jeff Triplett and Nina Zacharenko. Jeff is someone very notable in the Django
Speaker 3: community as well. Uh we have the executive director uh director Deb Nicholson who is new. We had uh our previous uh executive director step down a previous a few years ago. So um Deb has been fantastic in in the role and we We go from one amazing person to another amazing person. This signifies really um interesting new chapters and ways that the PSS um PSF evolves. Um
Speaker 8: but everyone's able to really make their mark on Python um by volunteering and raising their hand and and joining that call. A lot of it is intimidation that we feel like we have to follow up with the great success of Python before, but there's tons of opportunities, tons of unanswered questions. And I have a couple of actions or questions or ideas on what I think could happen next as well. We have the assistant secretary, Olivia Solz, who is the person who ran PyCon. So if you were at PyCon, uh we used to have um excuse me, Eva was our previous executive director, Jackie was our previous um uh uh PyCon organizer, and Olivia did a kick butt job of doing PyCon this year. I'm the Treasurer, as I mentioned.
Speaker 8: We have an open position on the board for communications chair, and then Mariata was the PyCon US chair. And then that's the list of board of directors. Oh, the extra stars are people whose terms or their three-year terms are up this year and may or may not be uh rerunning. Um so we have four potential seats for uh running for nominations. Who are the PSF staff? We have an excellent staff who are paid to work on the PSF. This is the list. We have Deb Nicholson here as well, Lauren Curry, E. Durbin, Phyllis Dobbs, Olivia Soles. Joe Carey, Laura Graves, Chloe Gerardson, Lukash is the CPython developer and residence, Shemika Mohanan. And I just wanted to also highlight that not all of the people live in the US.
Speaker 8: We are a US organization, a nonprofit, but we can do cra contractors for open positions. And these are the three open positions at the moment that we will be hiring for. The communications professional has not been posted yet and it will be. I think the security developer and resonance has not been posted yet, but it was announced at PyCon Um so
Speaker 6: I hope to hear and see that I've inspired some of you all to throw your hat in the ring if this is interesting. What does the PSF board do? So we have uh our annual impact report, which is just like really beautifully designed as well. We put some like J 'en there, it's really great. But I recommend you going to that link um to see what we did in twenty twenty one. Um the twenty twenty two bo um uh
Speaker 8: presentation should be out relatively soon. Um you can also check out our meeting minutes. We have them up until January and I just pinged someone. We're gonna get the rest up um soon. We're all a bunch of um all humans so there's the the board memments are a a little late this time around. But if you want to keep up with what we're doing, we release all of our board memments. Okay, well I gotta zoom in. Uh here are some of the responsibilities. Uh we have bi-monthly meetings and we help with strategy. We want to make sure there is legal and ethical integrity. Um we are an ambassador of the PSF. This is why I'm up here Uh there these are all of the membership options. Basic membership, you do not get voting privileges, but it's still very important because we want to know what the denominator looks like. So if you do not have time or funds to give
Speaker 8: Still think of becoming a basic member and you're still a member of the PSF. A sustaining member, we have a new uh level of sustaining member where it has a sliding scale. So we're $99 US dollars is too much, you can go as low as twenty-five US dollars, which opens a whole swath of people to be able to access uh voting privileges now. This is the first election where uh we have the sliding scale sustaining membership. So please look into that. Uh we have managing or contributing members, so if you volunteer time or money up to uh about five hours a month You must recertify each year. It is a little bit tricky to figure out whether or not you've recertified and remember you will have to divide your attentions between uh PSF hyphen members.
Speaker 8: org It's on the link. I'm gonna have to rush through this. Um, also if you're a PSF fellow, you have lifetime voting privileges. All right, the elections timeline. Please look at this. It starts June 1st. Nominations are until the 15th Um, we announced the candidates on the 16th. Voting is between the 20th and the 30th. It is the month of June. Uh what do you need uh uh to be on the board? I think an interest in being a PSF advocate. Um we need energy industry and excuse me, energy and perspective to address international community. These are all my personal opinions. um on what I think the gaps will be as people leave and move forward. Okay. Uh this is like really important. So let me uh work in groups How we can do um Stu for
Speaker 8: you
Speaker 4: so sorry. Um stop stop big round of applause, please
Speaker 6: Haven't done this for a while, so bear with us. We did one in Heidelberg. My name is Cheryl as uh Mark has said. Andrew's at the back. Hi Andrew, do you want to say hi That's why I'm stuck up here and he's down there. Okay. Um, Trying to come up with a new subject for what we do because I don't want to explain every time what I do and go into depth because you would be
Speaker 8: having it every time we did a talk.
Speaker 6: So I thought, right, okay, AI we've just been through COVID. Let's uh let's have a look at why AI is not used for captioning. So let's go. So this is my keyboard. Just a quick explanation. So that's the machine that both myself and Andrew have. And these are the letters. So you combine letters in chords to make the words. So the word cat would be K, A, and T And you combine and you press chords of letters, they're matched against a dictionary entry, which then brings up the word. Just a note, you might have noticed some uh faux pas along the way this week. We do use a little bit of AI
Speaker 6: and sometimes the AI does it wrong. So if we mish hit a word sometimes something will come up that's not intended. I think mine yesterday was bra silly. It was meant to be Brazil and Andrew's star performance yesterday was asexual applause.
Speaker 8: We're not perfect. Okay, so this is just a quick clip of what we've provided in the past. So the top one is when I was in a big top in the middle of
Speaker 6: a field in England somewhere. doing a conference. So that was the setup there. Obviously bottom left is Tobias earlier this week and the other one is down in Butlins in Minehead, which is a holiday camp and we did captions there So, observations from one of my clients. She uses AI only when she has to. And a lot of my deaf clients will only use it when they have to. So why? I'll put these up so you can read them. And she finishes with, I am so grateful for the work that captioners do so that I can continue to work in a profession I enjoy.
Speaker 6: And it's really key for people who have got a hearing loss to have access to captions in the work that they do
Speaker 7: So, what can AI not do?
Speaker 6: It can't include music and
Speaker 7: or add
Speaker 6: lyrics. We get called in sometimes to do uh comedian captioning, which is very challenging. And often they will add lib over songs, they'll put their own song words, so it's not a case that AI can, you know, recognize what the song is. It might recognize the song, but if they've changed the lyrics, AI wouldn't have a clue Tackle double meaning. So we hit this earlier in the week. Um I'm not sure who was speaking, but the need for speed came up. And it wasn't fast and furious. It was maybe fast and furious with a loaf of bread. So it was need
Speaker 8: with a K. So very often, if it's in technical language, the AI won't
Speaker 6: wouldn't have got that right. We tackle nuances. So very often if somebody emphasizes a particular word, we could possibly put it in block capitals. We can emphasise maybe in a in a square bracket after to say what's going on. We can identify accents and language, and you may not think that that's that's very important, but we have a number of clients, and if somebody in a meeting has a very thick Italian accent or French accent If a deaf client is trying to lip read them, the lip pattern with somebody who is not a native English speaker will be different. So very often our clients say if there's any accents come up, can you actually tell me what the accent is?
Speaker 6: And that helps them. AI can't understand accents and dialects. Obviously I I just intimated that um accents are a problem, but you can get some really um really great mistakes with AI and it it can change the the whole meaning of a sentence if it doesn't understand. Accurately interpret speech patterns due to disability or injury. So there are people, um
Speaker 8: uh various things, stammering, Tourette 's
Speaker 6: cerebral palsy and sometimes our clients have quite a deaf voice. And I've watched AI on a on lots of Zoom calls. And when my client speaks, the AI Zoom captions, they they don't pick up anything. Literally it's just they're blank because they have no clue. I understood her perfectly, or him So it's this is something that AI just can't cope with. AI is unable to tailor vocabulary to specialized events and Chango Khan is a perfect example. So when I started and and Daniela uh dragged us in in the first year and and it was a bit of a baptism of fire So we we had
Speaker 6: words like whiskey and it wasn't the whiskey to drink, it was the WSGI. We've had Nginx which is not a very fast car. So it was uh over the years we've collected on our on our dictionary, we've collected words, uh and it makes our life a lot easier now. So this is the real problem, gestures. So if AI was doing this now, it wouldn't do anything It's you know it's a bunch of people laughing at a gif. Um but AI cannot do gestures. And I just like to say to give this example, and I hope not to offend anybody
Speaker 6: But I was on a call two weeks ago and my client was talking about regional differences in dialects in regards to sign language. So I live in Wales and the sign language for holiday is this. So it's as if you're waving a flag. And so my client says to um the other person on the call, what's the sign in England for holiday? And he goes So my client stopped And he smiled and he said, Can you repeat that?
Speaker 8: Because he happened to glance up. But this is again this is something that AI does not uh does does not cover but honestly that is the sign in England for holiday. It meets it means something else in Wales. You can probably guess. So that's basically all my talk is, but we don't only provide the words but a 3D meaningful experience. Communication is more than just words
Speaker 6: And a and a a big thank you to JengaCon for actually pulling us in to make your conference accessible. Thank you.
Speaker 4: Fantastic. Thank you, Cheryl.
The next DjangoCon Europe will be in Vigo, Galicia, in northern Spain.
Discussed at 1:51The organizers are asking people who may want to run a future DjangoCon to get involved now, learn from the Vigo team, and bring community support to the organizing effort.
Discussed at 4:46Django CMS 4 introduces a “group of content” pattern that separates a model’s content into a versionable model. This records who changed content, when, its state, and its source, and lets administrators publish, revert, archive, and visually compare versions.
Discussed at 6:51The code identifies the starting position and rotation, whether the takeoff is flying, the number of half-rotations, and the diver’s shape. For twisting dives, the code instead includes the starting position, half-rotations, and number of half-twists.
Discussed at 9:12Use the least restrictive type that a function parameter actually needs—for example, `Iterable` instead of `list` when the function only iterates over its input. For return values, use a more restrictive and precise type; protocols can describe the required methods without requiring a specific class.
Discussed at 14:21Being nice can be vague and avoid difficult truths, while being kind means delivering necessary criticism or bad news with compassion, empathy, and honesty. Kindness may hurt, but it better serves the other person’s real needs.
Discussed at 19:06Use the native HTML `<dialog>` element and call its `showModal()` method, or use a form with `method="dialog"` to close it. The element is supported by modern browsers, can be styled—including its backdrop—and can contain forms and other HTML.
Discussed at 23:58Django lets the team prototype directly in code, iterate without always having designs first, and reach production-ready software quickly through built-in security and user-management features. A small, cross-functional team and reusable government design guidance make the process faster too.
Discussed at 28:59Recordings from the recently completed event are already available on YouTube. The 2024 edition will take place in Florence from Wednesday through Saturday, with a workshop day followed by three days of talks and workshops.
Discussed at 31:44The talk demonstrates a decorator that searches the call stack and inheritance tree to find and invoke a matching parent method, then suggests using a metaclass to apply that decorator automatically. The speaker presents this as a deliberately dangerous “stupid Python trick,” not production advice.
Discussed at 35:22The speaker recommends a park overlooking Prague Castle for sunsets, with nearby pubs for a beer. Prague is also presented as a city with many towers, a strong Python community, and a notable beer culture.
Discussed at 39:57Machine karaoke supplies the backing track, lyrics, and audiovisual controls, while live-band karaoke has a real band play from a repertoire of a few hundred songs and the participant serves as lead singer.
Discussed at 47:09A common mistake is not knowing all the lyrics. Unlike machine karaoke, where lyrics are usually highlighted or advanced automatically, live-band karaoke may show all the words at once and require the singer to scroll and keep their place.
Discussed at 48:57Note: We understand that names change, people change, and bodies change. We respect each individual's journey and privacy. If you have any concerns about a video or need us to remove content, please don't hesitate to contact us. We will handle your request with care and promptly address any issues.
Published June 7, 2023
Published July 11, 2024
Published July 10, 2024
Published March 11, 2024
Published September 30, 2020
Published September 30, 2020
Published October 25, 2019
Published February 21, 2026
Published October 23, 2025
Published July 19, 2024
Published June 4, 2025
Published November 21, 2024
Published July 11, 2024
Published June 7, 2023
Published May 6, 2026
Published May 4, 2026
Published June 4, 2025
Published June 6, 2023
Published June 13, 2025
Published June 13, 2025
Published June 13, 2025
Published June 13, 2025
Published June 13, 2025
Published June 13, 2025