« Return to show page
Transcript for Episode #203:
Scripting a masterpiece for Python web automation
00:00 Hello, and welcome to Python bytes where we deliver Python news and headlines directly to your earbuds. This is Episode 203. Recorded October 7 2020, Michael Kennedy and I am Brian McCann. And this episode is brought to you by data dog. Thank you data dog for supporting us Python bytes FM slash data dog and a lot of cool stuff out there. I'll tell you more about it later. Brian, can you believe we're like, well into the two hundreds? Well, well, by three.
00:25 Yeah, we're getting a good start already.
00:27 Yeah, a month almost Yeah, I guess a month because that's zero based, which is pretty awesome. Now, speaking of things that are awesome. digitalocean was a sponsor of the show for a while, but before they were sponsors, we actually just use them, as you know, hosting our infrastructure. And we still do. So when you download the mp3 or your podcast player talks to something, it's talking to our services on digitalocean, and so on. And over there, we just have a set of virtual machines, some database servers, some other things, and they manage themselves as kind of a cluster. And by manage themselves, I mean, I manage them. I mean, they mostly take care of themselves, but I do have to log in and take care of. But there are different ways of hosting your apps that don't require you to actually log in and configure servers and make sure they're all good, and so on. Often, that's called platform as a service. We also have Kubernetes clusters and things like that, where you just say, here's a definition of my code, please make it go on the internet. Right. So what I want to talk about is digitalocean, just launched a new app platform that is a platform as a service. And like I said, I'm a fan of digitalocean because they're simple and straightforward, and affordable and easy to use, but really high quality. So I think that it's worth
01:42 pointing out this new platform that they just launched, you're comfortable with doing your own work droplet, or whatever it is exactly. I'm not. So yeah, I'm kind of looking forward to trying something like this. And I've
01:53 got a ton of different apps, and they have inner connections within each other that they have to care about. And like, there's a lot of stuff where, you know, at some point, it makes sense to go down that path with various things that all work together. But if I just got an app, but I wanted to get on the internet, you know, often you don't want to deal with or worry about those things or, you know, forget to apply an OS patch, or, you know, how many, how many times I mean, I'm large scale VC funded professional web apps, say, we're going to be experiencing downtime for the next 30 minutes, or for four hours. I'm just like, what could you possibly be doing that takes four hours, I just, it's like boggles my mind that you're not able to do it better than four hours of downtime. And so platforms like this mean zero downtime deployment, and things like that. So really, really neat. So they've announced this new app platform, I want to point out, this is not an ad, this is just something I think is cool. So I'm sharing with you. Yeah. So yeah. So they came up with this new app platform that, you know, you say, it's pretty modern. It's like, how do you get your code into it? You pointed out your GitHub repository, you don't like log into it into a good thing, you just say, I'm going to give you access to my source code. And it will automatically deploy from that. That would be one nice way to get it over there and get it set up. But you also might want continuous deployment. So if I push like, how do you get a new version with zero downtime deployments and all that? Well, you just push to a particular branch that you decide upon, and it automatically notices that and does it redeploy. That's pretty sweet, like so I have that for like talk Python training. If I push to a production branch, it'll automatically do the checkout. And sure the requirements are built recreated, either, right, that this just happened. And this is just part of it. Right? That's pretty neat. Yeah, yeah, I don't want to do that myself. I didn't either. But it was better than logging in all the time. So this is built on top of digitalocean Kubernetes, which is interesting, because a lot of platform as a service type of things are opaque. Like, well, you can give us access to your code, and we'll make it run and magic. But really all this is, is they'll orchestrate running your code on top of their Kubernetes clusters, which means you can like define Docker files in your repository that are going to be part of the app that runs in Kubernetes, you can use some of the tools actually, to talk to the underlying infrastructure. So it's not a closed environment, you can actually kind of get down to the infrastructure layer a little bit more. So all the these things are pretty neat has automaticall handling of traffic spikes for simple, simple, simple apps for static apps, it's free for three limit for three of them, right? For real apps, I guess apps that run code, like Python, you can pay five bucks for like a simple version, like on a shared server. Or you can pay 12 bucks for a more pro version that has more features, CDN, SSL, all those kinds of things. And then if you want to scale it up, you can pay tons, right, you can pay like $150 to run it on a huge server or a bunch of different small servers and there's a whole scaling thing that you can do, but there's a pretty decent offering. It's still not as cheap as running on your own. But just like you said, a lot of people don't want to run it on their own. And that's not their expertise. And why should they be doing that? Right?
05:06 Yeah, I would like if you were I were to offer to do all of my server stuff for me. I would totally buy you dinner once a month.
05:16 Yeah, that's kind of the price. Right? But this should be like a cheap dinner. Like Muchos gracias type of, you know, into a lot isn't a coke. Not a flaming neon?
05:24 Yeah. Maybe just like a $5. gift card to Starbucks. Yeah, there you go. I could totally get to scones.
05:29 Anyway, if you are thinking about running your, you know, I talked to so many people, students of the courses and stuff and they're like, I got my app. And now I got to put it online. Like what a pain, I can't get nginx configured right, or this other thing or so on. This is another solid option. Now, that has a nice, you know, push to a branch, deploy, run your stuffs, zero downtime, you know, it probably most comparable to Heroku. I would say in the Python ecosystem. Yeah, I'm alright. Well, people could check this out. I think it's, I think is a cool offering. I will not be personally using it. Because there's a bunch of little gotchas like, you know, it would be better if, right, for example, I don't want to use their hosted Postgres database, I want to run a MongoDB server just fine. It's no problem, you can do that there. But you can't like what I do on the MongoDB servers, in order to talk to it, you have to be within a whitelist of known IP addresses that the servers, the web servers, and API servers have, I suppose, like 10 API's in the world that can talk to that server and no others. The thing is, with these Kubernetes clusters, when you push, redeploy, it will regenerate it and re host it potentially somewhere else. And the IP address keeps changing. So you can't do things like have a custom database server that has, you know, firewall limited, restricted, like VPN type of stuff, those types of things don't exist, most people probably don't care. I care. So I'm not doing it. You can't do Mongo with this, you can do Mongo, but you would have to have the MongoDB database port, listen on the open Internet, rather than be restricted to just a few IP addresses. Maybe they've figured this out, and it's buried in the spine. It's something that like, there's a whole conversation about, like, here's the things we're going to add, here's the things that it doesn't currently do. Here's some workarounds, etc, etc. So anyway, there's a whole conversation, you can check it out. But if you do things like use their hosted database, which would make sense in a pass type of story, you don't have these problems, right? They automatically wire that stuff up. When you want to break the rules, you get in trouble. So you're a fan of Shakespeare's that right? had gone to Medford I'm sorry, it's Ashland down there. You can actually there's a whole like Shakespeare week and
07:40 yeah, does action still there with the fires? No, bad? I hope
07:45 Yeah, no, I've always wanted to but people that don't live in Oregon have no idea what we're talking about. But there's a small town in southern Oregon that does a lot of Shakespeare plays. And that sort of transition was because I want to talk about playwright. So Microsoft put out an announcement announcing playwright for Python. I was trying to look into this. I didn't I guess I quite haven't quite got that whether or not playwright was a thing before playwright for Python, or, or not. But in any case, it's a Microsoft thing. And it's a way to drive and in test your web application through easily. So I would say end to end testing solution. It's open source and whatnot. But in their announcement, it's pretty cool announcement gives examples and everything. So I'm going to read their pitch. The pitch for it is with the playwright API, you can author indent tests that run on all modern web browsers, playwright delivers automation that is faster, more reliable, and more capable than existing testing solutions. And I'm guessing by existing testing solutions is a nice way for them to say, we are better than Selenium.
08:54 Yeah, that's what I was thinking as well.
08:56 So there's already a PI test plugin. There's a runs on Python. And there's a little, we've said that we like animated GIFs of, of how it works. And on their announcement page, there's a little animation and I was actually pretty impressed with. With that a little bit. There's a you can so you can drive, drive, even from a command line or interactive shell, you can drive the drive some playing with it, which is nice. So a few of the benefits apparently, it's timeout free automation. So this play right automatically waits for the user interface to be ready before you act on it again. I know there's some workarounds and there's some some wrappers on top of selenium that do that also. But this is built into the system. It's intended to stay modern with emulation of mobile viewports geolocation, web permissions, you can automate scenarios across multiple pages. I don't really test websites that much, but I didn't know that that was difficult before so apparently that's easier now. cross platform of course, or cross browser Of course because Cuz you have to test against different things they use a chromium driver for Chrome edge emulation WebKit driver for Safari and Firefox driver. And supposedly the safari rendering driver even works on Windows and Linux. So you don't actually have to have an Apple computers to do that. So pi tests compatible and Django compatible I'm sure it's compatible, lots of other stuff too. But the examples on the announcement, show pi test examples in Django examples, which is cool. They even mentioned that, of course, you can run this from your continuous integration server, and including GitHub actions, and others. So you must be happy to see that it's pi test, like natively pi test friendly,
10:44 like with fixtures and whatnot.
10:45 I love that that's that. Obviously, it worked to the point now where if you have a new testing tool, you may as well in the announcement, tell people whether or not you can run it with PI test because people are going to ask, but that's a good state to be in the pipe. Yeah.
10:58 So for example, like the simple Hello, world sort of test is just go to make sure that you get like a header text on a page. So it says define a function, which takes a page with type annotations, by the way, double props for that. So page, and then that's already a fixture from the framework and pi test. So it automatically passes that over set up, you just all you do is say it takes a page and page, go to URL, a cert page, that inner text of each one equal equal, you know, the text you're looking for. There's also more like that you could do with like beautifulsoup, like stuff. But there's the kind of drive it Yeah, good.
11:34 That's a two lines of code for a test to make sure there's some things on our webpage. That's pretty cool.
13:05 Yes, I listened that episode. And thanks for reminding me. I was like, I gotta check that out.
13:09 Yeah, I used to, but I haven't checked it out. But it definitely looks neat. So this though, I like it. I mean, it looks at least as neat as Selenium. I don't know. Maybe it's even better. So pretty cool. Yeah. Also cool. Data dog. They're actually sponsoring the show Now unlike digitalocean, where I just found something that I liked from someone who happened to be a sponsor, but data dog are sponsoring the show, not making them any less cool. So let me ask you a question. Do you have an app in production that's slower than you like its performance? Maybe he's all over the place, sometimes fast, sometimes slow. Here's the important question. Do you know why what data dog you will you can troubleshoot your performance with data dogs and and tracing, get detailed flame graphs identify bottlenecks and latency in that finicky app of yours? be the hero that got your app back on track at your company? Get started with a free trial? And I believe they send you a T shirt, a little cool t shirt still over at Python byte set FM slash data dog. Brian, something we haven't spoken about nearly enough. Is async. io and async. And await. We touched on that a little.
14:14 Okay, yeah, we've talked about
14:16 some, some, I believe some maybe. So one of the things that async IO is for I mean, you look at the name. It's around, waiting on IO waiting on external things like network calls, API calls, and so on, right?
14:33 Oh, I thought it was just trying to be cool. Like, Oh, my God, I Oh,
14:36 it could be that. Or it could just be like the Italian pronunciation. I see. Yo, that's good. No, it's beautiful. So when I think of files, I think of IO. Like if Sony said, What is IO? I would take file IO. And that's the first thing I would say. And yet, Python doesn't have built in support for asynchronously working with file IO. That's bizarre, right? Yeah. Is I believe there's External package, I think I saw it somewhere on like awesome async IO or someone who lists like that, that somebody had built something along those lines. But there's a cool article called asynchronously opening and closing files in async. io by Chris Whelan's. No, he wrote this and said, Look, async IO has great support for a networking and sub process, inter process communication stuff, but no file operations like open reading, writing and closing files. And if you're talking to something that might take a long time, I mean, I don't know about you, but I've got a pretty region SSD on both my computers. So maybe I don't need this. Unless you're at that corporate. Maybe you're logged into a corporate VPN and you've mapped a network share over to your drive, and then you try to read from that all of a sudden, your net your file IO might get super slow, right?
15:46 Well, even on SSDs fallows slower than memory minds. Yeah,
15:50 that's much lower. So there's certainly situations where this could be extreme like the network one, but you're right, even normal file, io can be slow, if you're really looking to like, squeeze out the most concurrency. So basically, he wrote a little article working through it. And it's ridiculously short, actually, on how you can do this. Right. So basically says, Look, if I use open open file in Python, I would, as a decent pythonic bit of code, typically I would write with open thing as file IO object, right File Stream. Let's build that for. So they want to call a open, which is an asynchronous one. And it's kind of bizarre and weird that Python has this, but it doesn't. I think it's neat. It has a async with blocks, when you do async things that have to be asynchronously managed within context managers. So he said, let's write this. So it implements the async with style, which is really simple. You basically implement a couple of methods instead of Dunder, enter Dunder exit, you do Dunder, enter, Dunder, a exit, and so on. Okay. And then he says, Okay, well, what we're gonna do is we're going to define a function that just opens a file, super easy. But then we're going to run it in an async i o event loop by saying run in executor. And what that means is async, io will create a thread pool, where it's going to run over on a background thread. And then it just runs that and lets you await it. And that's basically it. In any there's not much code now. It's like the opening bid is 123. It's six lines of code, putting that function name, which has to be there are five lines of writing code.
17:27 Yeah. And one of the things I like about this is not because I really want to do async file stuff, it's because it's a neat, neat little example, that I can get my head around. So that if I have some other process or other slow thing that I want to make a simplified, this might be an example. To do that.
17:46 Yeah, absolutely. So I think this is super instructive. And interesting. I'll also throw out that there is an AI Oh, files package. I think it's files plural. Maybe it's file, no file, singular. ai o file, which you can pip install, and then just do this instead of like, see the tutorial. But the I think the value here is like, well, what else doesn't have async support? And what could I just kick over to a thread, but then integrate into async? iO event loops? Yeah. So yes, indeed. Your else is nice. Excel. Like so many people who can't do any programming, or any scripting or anything, they can just go to excel and like drag and drop a little, you know, formula and paste it over. And then they're good to go. Yeah. Except, except, except it's 2020. That's the problem.
18:35 Yeah. So this is only tangentially related to Python. Mostly, it's that people start using databases in Python stop using Excel so much. This article we had a lot of people actually say, Did you guys see this? Yeah. So yeah, lots of people brought this up to us. I've got an article that I picked. There's a bunch of articles also. But I picked the bbc.com article because it didn't have very many ads. So the BBC article says Excel, while using Microsoft's tool caused COVID-19 results to be lost. Wow. So there's a apparently, if you haven't heard about this, apparently there were 16,000 coronavirus cases that went unreported in England. The good news is they Well sort of good they did all it only took like a few days for somebody to notice this. But there is a few days where where there was some stuff not getting tracked, right. And policy was like hey, things are getting better. We're trending down. This is amazing.
19:35 Yeah, exactly. No. Yeah. So bad. Just didn't read it.
19:39 So apparently, well, yeah. You had a several commercial for testing firms, filling out CSV files and sending them to a forget the name of the place something some health organization in England that was pulling all this stuff together. And they were pulling it together by putting it all in an Excel XLS template that can be then uploaded to a central system and made available to NHS test and trace team as well as other government computer dashboards. But the use of the XLS template made it so that there was a limit of 65,000 rows. Actually, that just gives me nightmares to think of a 65,000 row Excel spreadsheet. But apparently, that's the limit. Nobody quite noticed that they'd hit it. It didn't say anything about failing. And people noticed. Some people said, well, you should have used XLS x, because that increases the limit by 16 times, but still Excel for this. Of course, I was thinking, why are you doing this in Excel. And in this article, they had a quote from Professor john cough, CRO, sorry, Crowcroft from the University of Cambridge. He says, Excel is always meant for people mucking around with a bunch of data on their small company to see what it looked like. And then when you need something more serious, you build something bespoke that works. There's dozens of other things that could do. But you wouldn't use an XLS. Nobody would start with that.
21:11 Exactly. Apparently, people did, though. And so people should be using Python. Yeah,
21:16 it's not good. It's not good. So I think there's a really interesting trend of moving towards things like pandas to answer these questions, right? Yeah. I don't think that's the answer for everybody. Right? Like, Oh, well, Excel is kind of clumsy for you. So here's what you should do is you should learn a whole bunch of programming, right? I mean, here's a random story that I would, what are the more frustrating thing? So my corporate days is, when I was doing training, we would have to write proposals to send off to clients and like, here's what we're gonna cover. And here's what I teach. Here's your goals. And here's the timeline, so on, and I would send that off as a Word document and work with one of the sales people I worked with. And they said, they'd send out to the client, some somebody changed. The word doc, like a docx said, Oh, Michael, I need you to replace this word with that word. And so she sent me the document back and asked me to replace that word with that where I'm like, do you not know about command R or Ctrl? r? Like, whatever the Replace hotkey is? And why would you ever send me a file and just I need this word to do a Find and Replace with that word. But I need to do I've heard I was just like, so anyway, I'm thinking of that person using Excel like you would I would never suggest that that person learned. That said a lot of Excel power users, I think would do really well to adopt Jupiter lab, and pandas and stuff. And actually, Chris Moffitt, who's does practical business. Python just did a webcast with us over we talked about it before, but it's the recordings up now you can check that out. That'll give you some concrete tips to avoid the Excel if possible.
22:49 Oh, nice, good resource. Links in our show notes.
22:52 Yeah. Would you be a fan of getting documents sent to you and asked to do a find replace on a word?
22:57 I've totally had that happen? Yeah, I sent you the doc, you could just, I mean, maybe send it back to me and said, say, Hey, I made some updates. And here's my updates if you need to store the guy. Exactly.
23:09 Yeah, just make sure I did it. Right. It may be but I mean, it was pretty straightforward. Anyway, let's move on. I'm sure everyone out there has a story like that of you wouldn't believe what I had to do in my corporate job. So this next one comes to us from a listener, Preston Daniel, who's given us lots of cool feedback, and ideas. And this one is called locust.io. This is actually a pretty good pairing with playwright. Okay, so play right is about validating that what is on the web page. Makes sense. I can go login and press the button. And then I go to this page, and this text is here, something like that, right? As a continuous integration. So locus is about to you know, that works. What if 10 people do it at the same time? What if 100 people do it at the same time? on our current infrastructure, you hear about things like the whole healthcare debacle, where they spent hundreds of millions of dollars of code on code on these projects, and like a few people logged in, and they just failed. And you just wonder like, could you just tried it? Just maybe just seeing like, if we call that API 10 times a second? Well, it actually take it right. And so tools like this are exactly what you want. It's really cool for just simulating, accessing a bunch of different sites.
23:09 I was just thinking one good use for this may have been Sorry to interrupt. Maybe the schools could have done this before they had everybody login so that everybody, all the kids on their laptops, or their tablets wouldn't have said on day one. I don't know what's going on. It won't let me in.
23:09 I think this is cool. And you're saying that there's a game website that's using this.
23:09 There is in the notes that they say when they talk about the features, they say, look, you can define user behavior and code suit just plain Python code, which is neat. it's scalable, so you can run it, like I said, and then it's battle tested. Because Lucas has been used to simulate millions of simultaneous users on battle log the web app for Battlefield games. And so they could say, you really could say, look, this is battlefield battle tested. Nice. I don't know if anybody's seen the trailer for the battlefield games. I've not been paying attention to it for ever, but for many, many years, at least, wow, these games have come a long ways. Like, if you watch the trailer for the latest one, that's crazy, crazy stuff. But it's kind of also beside the point. I think this way of saying like, this is what a website user does, they log in, and then they go to this page. And I might also visit this page, and you set up things like not just I want to have. So when you answer questions like how many users can we support? Typical users not like pathological they don't go to like your account page and hold down Command R or Ctrl R and just refresh it as hard as they can, right? They'll go there, and they'll spend like three or four seconds, five seconds, and then they'll go to another thing. They'll spend 10 seconds there, then they'll go off and they'll click this button, right? They'll have normal human behavior. So one of the things you set up in this class you define that represents a user on your site is a wait time. So do the wait time is between 515 seconds. And then you ask can it take a million users, it doesn't just do a million concurrent requests. It has like a million of these things, randomly waiting between five to 15 seconds as they're kind of like interacting randomly with your site. Oh, cool. So yes,
23:09 you could sort of scale this, then you could start with something like some long wait times. And then make sure that it can handle like thousand users or something. And then yeah, gradually make it shorter, so that it's hidden on your server harder.
23:09 Yeah, exactly. I think this is really neat. So yeah, I don't know that I'll necessarily be using it right now. But if I create something new, especially something I'm sure it's gonna get a lot of traffic, then I would definitely use this. It looks really neat. It's pretty an open source, like write it in Python, like, Why the heck not? The only reason I wouldn't use it now is I've already had like, some really big spike events. I'm like, Okay, well, it's, you know, everything's running like 2% 5% CPU, it's like, it's fine. I don't know,
23:09 you could totally see. I mean, there's a huge use case for this is that like people that have the they're rolling out a new app, or even if they're an existing company, rolling out something new, and everything looks fine on their server, even when they're testing with like, two or three consecutive tests or something. But are we ready to roll it out? We don't know how many people are going to hit it. So they go sort of gauge that. But
23:09 the one that I always have in mind when I think about this is you've got some app, it's been out there and it's kind of getting some traction, and your company's getting some traction in it. And the company decides we're gonna run a Superbowl ad, or we're gonna spend we're gonna launch some huge marketing campaign on Black Friday. That's like on, like you way, way out of bounds of what we normally do. The last thing I mean, you only get one shot for your app to work when that Superbowl ad runs, or on that black friday event. If it just goes down for that little bit of time. It's not like well, we got it up. It's fine. Now it's you've lost that moment. And that million dollar spend or whatever the heck it turns out to be. So it's like those moments where a spike is unknown, but also the time which you get to deal with it is short.
23:09 Yeah. Or things like yeah, I'm pretty sure that the health care market Place websites ready?
23:09 Fine. Yeah, sure. Mr. President is gonna be fine. It won't be like blemish your record for all of history. All right, speaking of things that I'm sure gonna be fine hack tober fest was such a, it's a good idea. In theory potentially,
23:09 we're like in middle October, or deep into October already. I don't know how your repos did but I
23:09 got a lot of attention.
23:09 Did you? Yeah, no, my Yes, mine didn't so much. I'll tell
23:09 you about that. But go ahead and tell it tell people where we're going with this.
23:09 Okay, so hack tober Fest, hopefully you know about it. But if you don't, it's an interesting idea sponsored by digitalocean and other sponsors, again, digitalocean not sponsoring this episode. Overall, it's a good idea. So the idea is to encourage people to contribute to open source by bribing them with a T shirt and other swag
23:09 that works for geeks. We love our T shirts, like how are you gonna be like wearing your clothes? What do you put in your closet?
23:09 Yeah, maybe maybe you can buy a T shirt with a half an hour of work, but we're gonna like, have you worked for like hours and just get one t shirt. Anyway, there's always been some spam with this people abusing it, but I think it was not as prevalent as this year. But what happened this year, and I'm gonna link to a video by Anthony sudeley. Titled what's wrong with Oktoberfest, he introduces what pack tober fest is some of the problems and he recommended some solutions. We're not going to cover those today. But apparently, there was a YouTuber this year, I think it was in India, that did a video on how to get a free t shirt by doing like, it's basically how to get free t free swag with not much work. And it did this video to show you how to submit a pull request to a project and only do things something like update the readme to say an awesome project or change its with it is or something like that. And then do a pull request saying document or improved docs. And do that for four different repos. And there, you got a T shirt. Yeah,
23:09 I met many of these people.
23:09 It turned into a big problem. So I was actually really thrilled with how fast digitalocean and whoever's working on heck tober fest fixed it, or at least hopefully, I'm sure people are still trying to do this. So I'm sure there's a lot of spam going on. But they changed the rules. So as of the third, they updated the rules to try to reduce the spam, one of the big things is maintainers can opt in by adding a heck tober fest topic to the repo. So a whole bunch of stale old repos won't get hit hopefully. And then also you can you can mark any PR, that's dumb, as invalid, and it invalidates stuff. And actually, the full rules is, let's see, we're going to have it in the show notes. It's a little pseudocode. So if you submit a PR in the month of October, and the PR is labeled as hack tober fest accepted by the maintainer, or you submitted it to a repo with hack tober fest topic, and the pull request was merged or it was approved. So you can't just submit it and get your T shirt, it has to be like some maintainer has to say, yeah, this is good, or I approve it or whatever. It's not automatic anymore. And also, if you are a maintainer, and you're in, you've dealt with all the spam, sorry about that. But also, I'd like to, I'd like to encourage more people to do Oktoberfest, because it's a cool thing. I didn't want to bring it up before, because I didn't want to encourage spam. But I think these changes will help. And if you're a maintainer, please be sure to do those notifications by November 1, because that's the deadline. So
23:09 yeah, interesting. I had no idea what was going on until I saw Anthony T. Lee's post, or Twitter message, you know, somebody came over to some of the, I have 222 repositories, most of which are public between the courses and various other things. So there's a bunch of opportunity to go in and make changes, right. So somebody came along to the beginner Python for absolute beginners course and said, I would like to add a few little tips for some beginners to make this slightly better, as you know, we can't change anything because it needs to match what's in the video. But if you had a little section that had like, some tips, and they were meaningful, sure, I guess it's okay. And then the next day I woke up with like, 10 prs, not necessarily from this person, but from a bunch of different people with weird things like change the readme from this, you know, check out our latest course to check out the latest course and just changing like the word our to the and I'm like, what is going on, and I saw Anthony's thing, and I okay, close, close, close, close, close, close, close, just jump straight out. Like I don't even want to talk to these people. This is super annoying, and they weren't just making changes to the readme, they would go into they would make changes to like XML configuration documents. Like you can't change that that's machine that's read by the machine right? That's gonna break something if I accept this not only is it like, annoying, but I got to deal with it. But if I were to accept that I'm pretty sure would break. I think maybe it was like formatting like putting a node closing knowed bit like on on a line above or I put in a space. I mean, I don't think it actually broke it, but it's really weird stuff. And I didn't understand I was coming from Oktoberfest. I was being hacked by the October festers. Yeah, but it has stopped since they made these changes, which is great.
23:09 Oh, as a sub, so most of that stuff was in the first few days.
23:09 Yeah, I haven't seen in the last couple days. I didn't realize that's probably because the rules change I just went through and like, just denied everything that I saw coming in.
23:09 Yeah. I wonder if they forced to take down that video. Maybe it's good.
23:09 Yeah. But who knows? Well, I know that that's it for all of our main topics. Got anything else you wanna throw out real quick, before we wrap it up at with a joke?
23:09 I don't I could totally use a joke. But do you have any extra things? I do.
23:09 There's a really cool conference. It's, I believe, theoretically was supposed to be this year in Vancouver, BC, which is an absolutely wonderful town to visit called pi cascades cycles between Vancouver, Seattle and Portland. Well, this year, it's taken a diversion to cycle to the internet, because 2020 although it's in 2021, like still planning now. So pi cascades 2021 will take place Saturday, February 20. From the world, I don't know if they're having any local stuff going on. But um, anyway, it's basically a virtual conference in the call for proposals is open. So if you'd like to give a presentation there, you can do that by November 10. submitted proposals. So that would be cool. You know, I think talking at get togethers like this meetups, the smaller not a full blown pi con, but pi cascades and other types of events are a really good way to sort of raise your profile and stretch here, your comfort zone as a developer, so I encourage people to do it. Also.
23:09 I spoke at the 2020 version that was just before the world fell apart. That's right.
23:09 I was there. My daughter and I watched from the back it was great. Next thing, other thing, Patricia Rhines Raines, who is a researcher at the Barcelona supercomputing Center, which by the way, they have this virtual tour he sent me Oh my god, it is so awesome. They have like a pop song for it. It is held inside is the the super literally the supercomputer is inside an old Cathedral. So like where you know, where all the arches are, and where the sermons would have been given. Like, that's where the supercomputer is. That's pretty awesome.
23:09 Can we put that link in the show notes? Yeah,
23:09 yeah, yeah, I'll put it in there. But that's not why he sent it to me. He said, Hey, I happen to work here. And I use Jupiter a lot. You spoke about black cell magic. And then another black format or plugin for Jupiter notebooks. Three said, You should also check out NB black and B underscore black, which works in Jupiter and Jupiter lab. And there's another one that only works in Jupiter lab called the Jupiter lab code for matter. So just like always, we mentioned one thing that we kind of discover. And then listeners are like, that's great. And, and and here's a bunch of other stuff. So thank you for that. Patricia.
23:09 Yeah. Nice. I love that, like the multiple tool thing. That's right.
23:09 Yeah, indeed. All right, let's do a joke. I've chosen some very clear ones that actually have a visual component. As you know, I don't know why I do that. But that's what I've done. So, so why don't you I'll let you do the first one. I'll do the second one. So the way and people who don't know this is a classical programmer painting. And the idea is this is a legitimate real painting from some museum. Typically, they're hundreds of years old. But there's instead of having, you know, like, flowers in the the tide pools or whatever, some random thing that the artist named it, it's renamed with a programming title. Okay. Yeah. So why don't you quickly describe your picture and then tell us the title?
23:09 Okay, so the picture is, it's a white kind of a white gray background. I think it's snow or something. There's some horses riding lizard almost. Yeah, it's horrible. Yeah. And there's some horses running to versus running, pulling a, like a sled or something. I don't know. There's somebody laying on the sled. Hi, with the title delivering a feature in the time of a code freeze.
23:09 This is by Anthony Petroski. Oil on wood. 1883. That's beautiful. All right. So the one that I got here, it's these three guys. They look highly skeptical. Almost like they're on some kind of mission sneaking out of like really tall grass on a boat. And so kind of swamp you can see them like really slowly sort of approaching and the title is Red Hat Enterprise Linux. Sis admins entering the Docker convention floor oil on canvas. 1882. Isn't that a great one? Like look at their face? Yeah, that'd be we got to check this out. I click on the link in your podcast player and see it.
23:09 They're like Angry pirates in a canoe.
23:09 Yeah, it's sort of a pirate feel to it. Like they're like all what are we doing here? We're breaking in such a weird world, this Docker Kubernetes
23:09 I love this thing of like programmer. On all paintings it's a it's funny.
23:09 Yeah. If there's ever some sort of, like artwork exhibition at a pie con, this is happening.
23:09 We could probably do it virtually somehow try to do it at home or to a conference.
23:09 Yes, I think we could. Yeah, yeah, I will. Thanks for being here as always, and thank you, everyone. Listen. Yep. Bye bye. Thank you for listening to Python bytes. Follow the show on Twitter via at Python bytes events Python bytes as mb yts and get the full show notes at python bytes.fm. If you have a news item you want featured just visit Python bisetta fm and send it our way. We're always on the lookout for sharing something cool. On behalf of myself and Brian knockin. This is Michael Kennedy. Thank you for listening and sharing this podcast with your friends and colleagues.