WEBVTT 00:00:00.001 --> 00:00:03.900 Hey there, thanks for listening. Before we jump into this episode, I just want to remind you 00:00:03.900 --> 00:00:09.700 that this episode is brought to you by us over at Talk Python Training and Brian through his pytest 00:00:09.700 --> 00:00:14.960 book. So if you want to get hands-on and learn something with Python, be sure to consider our 00:00:14.960 --> 00:00:21.760 courses over at Talk Python Training. Visit them via pythonbytes.fm/courses. And if you're 00:00:21.760 --> 00:00:27.360 looking to do testing and get better with pytest, check out Brian's book at pythonbytes.fm slash 00:00:27.360 --> 00:00:32.420 pytest. Enjoy the episode. Hello and welcome to Python Bytes, where we deliver Python news and 00:00:32.420 --> 00:00:40.160 headlines directly to your earbuds. This is episode 254, recorded on October 13th, 2021. I'm Michael 00:00:40.160 --> 00:00:45.220 Kennedy. And I'm Brian Okken. I'm Mohamed Raza. Yeah. Hey, Mohamed. Welcome. It's great to have 00:00:45.220 --> 00:00:49.220 you here. Good to have you on the show. Hi, Michael and Brian. I'm really excited to be on the show. 00:00:49.220 --> 00:00:54.400 It's been one of my goals. I started listening to podcasts when I was in college back as an 00:00:54.400 --> 00:00:59.100 undergrad. Wow. And your podcast, that was one of the reasons I developed a love for Python. So 00:00:59.100 --> 00:01:02.860 that's super amazing. Tell people a bit about yourself before we jump into this. 00:01:02.860 --> 00:01:07.820 I currently work at AWS, Amazon Web Services, as a professional service consultant. So my job 00:01:07.820 --> 00:01:14.460 is to help our customers in their cloud journey. So we basically do help them with our... 00:01:14.460 --> 00:01:19.460 We help them with different cloud services, such as if they want to do cloud migration or if they want 00:01:19.460 --> 00:01:24.800 like put some service on AWS cloud. So that's where professional services comes in to like 00:01:24.800 --> 00:01:30.300 implement and help them with their cloud journey. You must see a lot of different implementations and 00:01:30.300 --> 00:01:35.500 configurations and teams and types of software. You get exposed to a lot of things quickly like this, 00:01:35.500 --> 00:01:40.020 right? Yep. So it's pretty, it's pretty fun job. Like you work with different, wide, 00:01:40.020 --> 00:01:44.080 different customers. Like any customer has a different problem. So like you get to 00:01:44.080 --> 00:01:49.180 touch upon like different problems. So as a consultant, so it's a really amazing job. 00:01:49.180 --> 00:01:53.580 Yeah, that's awesome. That's one of the things I think, you know, for people who are early in their 00:01:53.580 --> 00:01:58.800 career to help them go fast and level up is get a lot of exposure to a lot of different things. 00:01:58.800 --> 00:02:00.980 Yep. And I totally agree with you. 00:02:00.980 --> 00:02:05.920 Awesome. Well, I think maybe Brian should kick us off with the first item. What do you think, Brian? 00:02:06.040 --> 00:02:12.000 So Python 310, we talked about this last week. Python 310 is out. It came out October 4th, 00:02:12.000 --> 00:02:16.840 it looks like. And I've been using it and a lot of people have been using it. But one of the things we 00:02:16.840 --> 00:02:24.140 do is we update our, with a project. If you support a package, you want to make sure to go and change your, 00:02:24.140 --> 00:02:29.860 your testing, your CI testing to make sure that you're using Python 310 instead of Python 3 dev, 00:02:29.860 --> 00:02:35.860 310 dev. That's what I was testing before. So as, but there's an issue. So 00:02:35.860 --> 00:02:41.560 Python or Anthony Shaw brought it up on Twitter, a bunch of other people did too. 00:02:41.560 --> 00:02:49.000 But I'm grabbing his, his tweet. It says basically, you can use 310 on GitHub actions now, 00:02:49.000 --> 00:02:54.700 but you need to make sure that you quote the 310. So this is... 00:02:54.700 --> 00:02:55.800 So you don't test on 3.1? 00:02:55.800 --> 00:02:57.440 Yeah, exactly. 00:02:57.440 --> 00:03:00.760 That's insane. The zero at the end matters. 00:03:01.200 --> 00:03:11.300 So I'm going to just grab my, one of my projects. I went and changed mine. And, and I just went ahead and put quotes on all of the versions on three, 00:03:11.300 --> 00:03:17.040 you don't have to do 3.7, 3.8, 3.9. Those are fine by themselves. But 3.10, if you, if you go from, 00:03:17.040 --> 00:03:24.480 if I had dash dot dev or dash dev, YAML convert, like thinks of it as a string. But as soon as I go to 3.10, 00:03:24.720 --> 00:03:40.480 it's 3.1. So yeah, you want to make sure to quote those. That's really it. And that's really what I wanted to cover is to make sure that people change their CI system to be testing with 3.10, but do it with quotes. If you're using YAML. 00:03:40.720 --> 00:03:43.400 Doesn't YAML understand significant digits? Come on. 00:03:43.400 --> 00:03:52.180 It's an interesting find though. Like, like YAML reading a 3.1, but it should read as 3.10. 00:03:52.180 --> 00:03:54.720 Yeah. I mean, I could see how you get there. Yeah. 00:03:54.720 --> 00:04:04.780 But at the same time, if you're talking versions and not just floating points, obviously the dots are not, you know, not, not decimal separators. They're separating full whole numbers, right? 00:04:04.780 --> 00:04:10.480 Which obviously then the zero matters. Interesting. That's a good find and good advice. I have a quick real-time follow-up for you, Brian. 00:04:10.700 --> 00:04:16.400 Remember I had complained about not being able to deploy to 3.10 in production. Yeah. 00:04:16.400 --> 00:04:20.480 Well, guess what? This is all 3.10. Woo. Oh, sweet. 00:04:20.480 --> 00:04:40.680 Yeah. I managed to get it working. MicroWSGI got updated so that it will now work on 3.10 install, building a wheel locally on Linux. And there was another dependency I couldn't make work, but then I realized, oh my gosh, I'm not even using this anymore. So I just took it out and then it works. So I put it on Talk Python, the podcast page for now. And if it doesn't freak out or cause problems, 00:04:40.680 --> 00:04:48.320 I'll roll out across like Talk Python training and Python bytes and stuff. So this is the guinea pig or the canary out there just hanging around. But so far it's perfect. 00:04:48.380 --> 00:04:48.880 Nice. 00:04:48.880 --> 00:05:01.140 Yeah. A couple of live stream thoughts here. Sam Morley. Hey, Sam. Says, oh my, that is interesting about 3.10. And Henry Schreiner. Hey, Henry. Henry and I are going to be talking on Talk Python really soon, by the way. 00:05:01.520 --> 00:05:14.360 Many YAML projects choose to accept floats and then just convert them to strings. Not specific to YAML. You could disallow floats here if you wrote that, if you wrote the action. Okay. Interesting. I didn't realize you could do that. Very cool. 00:05:14.360 --> 00:05:15.240 I didn't know that either. 00:05:15.600 --> 00:05:18.460 Okay. Did you know that Python's popular? 00:05:18.460 --> 00:05:19.360 Yeah. 00:05:19.360 --> 00:05:19.860 Yes. 00:05:21.120 --> 00:05:33.720 And it has found its way to be a little bit more popular than it has been recently. So, you know, it continues to grow. Brian Skin sent this over. Thank you, Brian. And the headline here is pretty neat. 00:05:34.120 --> 00:05:40.480 Beating C and Java, Python becomes the number one most popular programming language. Boom. Says Tobe. 00:05:40.480 --> 00:05:49.940 So, the Tobe index is interesting. To me, it feels like a little bit more of a lagging indicator. And it's also a bit more of a enterprise-focused indicator. 00:05:49.940 --> 00:05:58.980 So, that's why Java and C have been popular for so long. But apparently, Python has sort of made its way into that world as well. 00:05:59.620 --> 00:06:05.580 And they're quoting this article over here on ZDNet. And this is the thing I'm linking to. And it says, 00:06:05.580 --> 00:06:11.940 For the first time in more than 20 years, we have a new leader of the pack. The longstanding hegemi of Java and C is over. 00:06:11.940 --> 00:06:14.380 It's pretty good, right? 00:06:14.380 --> 00:06:22.380 It is. And I think it's one of the reasons that, like you said, the business community is using it a lot more in large companies. 00:06:22.520 --> 00:06:29.320 That might also be why we're seeing the numbers in surveys of Windows users using Python. 00:06:29.320 --> 00:06:30.240 Oh, yeah. 00:06:30.240 --> 00:06:31.520 Staying really high. 00:06:31.520 --> 00:06:33.920 Maybe it's because of that. 00:06:33.920 --> 00:06:38.440 I think one of the big reasons is, like, the entry to the language, the barrier entry is, like, pretty easy. 00:06:38.440 --> 00:06:40.760 Like, anybody could learn the language and get into the language. 00:06:40.760 --> 00:06:45.620 And the ecosystem and the libraries around the language, it just makes stuff so much easier to do. 00:06:45.740 --> 00:06:47.740 So that's one of the reasons it's at the top. 00:06:47.740 --> 00:06:49.600 I was also reading on Stack Overflow. 00:06:49.600 --> 00:06:55.640 Somebody shared on Reddit that Python has now most number of asked questions compared to Java now. 00:06:55.640 --> 00:06:57.000 Oh, interesting. 00:06:57.000 --> 00:06:58.680 Probably on Stack Overflow. 00:06:58.680 --> 00:06:58.980 Yeah. 00:06:58.980 --> 00:06:59.660 Nice. 00:06:59.660 --> 00:07:02.400 Somebody shared on Reddit as a discussion. 00:07:02.400 --> 00:07:03.240 Interesting. 00:07:03.560 --> 00:07:03.660 Yeah. 00:07:03.660 --> 00:07:04.700 So if we look here. 00:07:04.700 --> 00:07:05.000 You're going to do this. 00:07:05.000 --> 00:07:07.680 Oh, I want the most popular languages. 00:07:07.680 --> 00:07:08.100 Yeah. 00:07:08.100 --> 00:07:08.680 This is real time. 00:07:08.680 --> 00:07:09.020 Look at that. 00:07:09.020 --> 00:07:09.420 Oh, yeah. 00:07:09.420 --> 00:07:10.300 It's not even close. 00:07:10.300 --> 00:07:12.240 It's not even close. 00:07:12.240 --> 00:07:12.680 It is. 00:07:12.680 --> 00:07:18.860 I remember seeing that when this was back here, back in this area, 2017, and they predicted this. 00:07:18.860 --> 00:07:22.320 And they predicted something, like, a little bit even less than reality. 00:07:22.320 --> 00:07:23.460 And people are like, no way. 00:07:23.460 --> 00:07:25.220 There's no way it's going to just do that. 00:07:25.220 --> 00:07:28.540 And it's even more real wild than this. 00:07:28.540 --> 00:07:29.520 So very, very cool. 00:07:30.140 --> 00:07:31.860 So, yeah, super neat. 00:07:31.860 --> 00:07:36.920 I'm thinking this is just another sign that, you know, focusing on Python is good. 00:07:36.920 --> 00:07:41.740 Muhammad, I think you touched on a lot of reasons why, you know, people get attracted to it because 00:07:41.740 --> 00:07:45.060 it's easy and it's simple and it's clean and they just want to do a small thing. 00:07:45.060 --> 00:07:49.600 But then your small thing, as everyone knows, just gets slightly more complicated and more 00:07:49.600 --> 00:07:50.040 complicated. 00:07:50.040 --> 00:07:55.840 And a lot of times the thing you start with as something simple, it can't do, it can't grow 00:07:55.840 --> 00:07:58.520 to become the thing it eventually needs to become. 00:07:58.520 --> 00:08:01.220 But Python allows you to build way more complex software. 00:08:01.220 --> 00:08:05.000 So you don't get injected into like, well, I have to leave because, you know, I want to 00:08:05.000 --> 00:08:07.440 use threads and I'm using VB6 and it doesn't have threads. 00:08:07.440 --> 00:08:11.820 So I guess I'll go learn C or like, there's not that kind of story that happens around Python 00:08:11.820 --> 00:08:12.620 nearly as often. 00:08:12.620 --> 00:08:16.420 So people just stick in it, like accumulates like a snowball going downhill. 00:08:16.420 --> 00:08:17.100 Yeah. 00:08:17.100 --> 00:08:22.540 So Sam morally brought up that he thinks that some of this might be around the data science 00:08:22.540 --> 00:08:24.740 community coming into Python. 00:08:24.740 --> 00:08:26.220 Oh, I totally agree with that. 00:08:26.220 --> 00:08:26.460 Yeah. 00:08:26.460 --> 00:08:26.900 Yep. 00:08:26.900 --> 00:08:27.020 Yep. 00:08:27.020 --> 00:08:27.940 Very good. 00:08:27.940 --> 00:08:28.280 Very good. 00:08:28.280 --> 00:08:29.080 Okay. 00:08:29.080 --> 00:08:33.700 So yeah, Mohamed, I guess we got your item up next is the first one, right? 00:08:33.700 --> 00:08:34.280 Yeah. 00:08:34.280 --> 00:08:36.760 So the item that I chose was newspaper 3k. 00:08:36.760 --> 00:08:39.780 It's named a newspaper where the original name is 3k. 00:08:39.780 --> 00:08:41.860 It supports Python 3 now. 00:08:41.860 --> 00:08:43.220 It's an amazing library. 00:08:43.220 --> 00:08:44.140 I use it at work. 00:08:44.380 --> 00:08:47.240 I was helping auditors to generate news reports. 00:08:47.240 --> 00:08:51.560 So what they were doing was like going onto internet, finding news reports manually. 00:08:51.560 --> 00:08:57.540 So I was just using my job was to like write a flask web application and using this library 00:08:57.540 --> 00:09:02.940 and Google RSS feeds to find the news articles and then pass those links to this library to 00:09:02.940 --> 00:09:10.360 like generate useful information such as the description, the title, the length of the article and stuff like that. 00:09:10.360 --> 00:09:12.120 So like it helped me a lot. 00:09:12.120 --> 00:09:18.840 And then it'll help us like it helped me a lot in terms of automating the process, which people were doing manually where I was working. 00:09:18.840 --> 00:09:20.120 So this is an amazing. 00:09:20.120 --> 00:09:20.680 Oh, fantastic. 00:09:20.680 --> 00:09:21.300 Yeah. 00:09:21.300 --> 00:09:24.700 So newspaper 3k, it's like web scraping. 00:09:24.700 --> 00:09:25.460 Yeah. 00:09:25.460 --> 00:09:27.000 It's like web scraping. 00:09:27.000 --> 00:09:27.660 Yeah. 00:09:27.660 --> 00:09:31.260 But it has higher level semantics built into it. 00:09:31.260 --> 00:09:32.640 Like you can ask the title. 00:09:32.640 --> 00:09:34.060 When was it published? 00:09:34.060 --> 00:09:41.400 Not the some sort of e-tag weird thing on the server, but like when did the article declare that it was written sort of thing. 00:09:41.400 --> 00:09:41.620 Right. 00:09:41.620 --> 00:09:42.500 And who's the author? 00:09:42.500 --> 00:09:43.020 Yep. 00:09:43.020 --> 00:09:44.220 All sorts of cool stuff in there. 00:09:44.220 --> 00:09:47.040 And the best thing is like it also does the summary of the article. 00:09:47.260 --> 00:09:50.080 Like it's not to like 100%, right? 00:09:50.080 --> 00:09:53.240 But it's just like extractive summary of the article, which is pretty useful. 00:09:53.240 --> 00:10:00.820 Like if you like doing newspaper creation articles and stuff like that for like auditors I was doing this week, they found it really useful. 00:10:00.820 --> 00:10:01.500 Yeah. 00:10:01.500 --> 00:10:03.380 I'm totally going to use this. 00:10:03.380 --> 00:10:03.680 Yeah. 00:10:03.680 --> 00:10:05.780 I'm still one of those RSS readers. 00:10:05.780 --> 00:10:06.720 So, yeah. 00:10:06.720 --> 00:10:07.360 Yeah. 00:10:07.360 --> 00:10:07.880 Yeah. 00:10:07.880 --> 00:10:08.360 Super cool. 00:10:08.360 --> 00:10:16.360 So the API is basically you give it a URL and you say download and then parse and then you have article.authors, article.publishdate, 00:10:17.120 --> 00:10:20.160 article.text, top image, movies. 00:10:20.160 --> 00:10:24.540 If it contains any embedded video, you can even do keyword analysis on it. 00:10:24.540 --> 00:10:25.880 Keywords in summary. 00:10:25.880 --> 00:10:26.360 Yeah. 00:10:26.360 --> 00:10:26.740 Nice. 00:10:26.740 --> 00:10:30.320 But you can do all sorts of things that might be useful to you. 00:10:30.720 --> 00:10:35.820 So I can see that this is a cool input into other things, right? 00:10:35.820 --> 00:10:42.840 Like not just straight consuming the information, but if you're trying to understand trends and stuff, right? 00:10:42.840 --> 00:10:52.160 You could go around and just hit all the main websites and go and say, okay, show us the keywords and show us anything that's new or that is new and also appearing more frequently. 00:10:52.520 --> 00:11:04.520 If I remember correctly with this, there's also things you can do where you can follow, you can point it at a homepage and it'll give you like categories and all the articles in the categories. 00:11:04.520 --> 00:11:07.020 Like you could point it at CNN.com or something like that. 00:11:07.020 --> 00:11:07.440 Yeah. 00:11:07.440 --> 00:11:07.540 Yeah. 00:11:07.540 --> 00:11:08.060 Yeah. 00:11:08.060 --> 00:11:10.140 You can do all sorts of things with this. 00:11:10.140 --> 00:11:13.900 It just makes so much stuff easier compared to using BeautifulSoup. 00:11:13.900 --> 00:11:17.360 Like in BeautifulSoup, you like have to do and go scrape up yourself. 00:11:17.360 --> 00:11:19.320 But like this makes so much stuff easier. 00:11:19.320 --> 00:11:20.080 Yeah. 00:11:20.100 --> 00:11:21.520 So it's just an amazing library. 00:11:21.520 --> 00:11:22.120 Cool. 00:11:22.120 --> 00:11:22.800 Awesome. 00:11:22.800 --> 00:11:24.060 A good one for sure. 00:11:24.060 --> 00:11:25.800 All right, Brian, you're up next, I think. 00:11:25.800 --> 00:11:26.640 All right. 00:11:26.640 --> 00:11:31.700 Well, I'm going to cover something I'm like super excited about, but it's a little niche. 00:11:31.700 --> 00:11:35.280 Anyway, so editable install. 00:11:35.280 --> 00:11:47.880 So when you're working with a package, Python package and developing it, one of the things that I do a lot is I have it open in my editor, but I also have like a window open where I'm running pytest and stuff. 00:11:47.880 --> 00:11:51.960 So I need to, I want the package to be installed and it really helps if you're editable. 00:11:51.960 --> 00:11:59.220 It's editable so that when I make changes in the code, it's instantly appears in my, you know, my test window or whatever. 00:11:59.220 --> 00:12:03.060 And so pip supports this. 00:12:03.060 --> 00:12:07.720 It's a, you say pip install dash E and then give it a path to your local project. 00:12:07.720 --> 00:12:11.500 And apparently you can do a Git repos like this too. 00:12:11.500 --> 00:12:13.020 I don't know how that will work. 00:12:13.020 --> 00:12:13.640 Okay. 00:12:13.640 --> 00:12:16.200 That's interesting because you can do Git for pip. 00:12:16.520 --> 00:12:21.720 And so I guess instead of saying install it as a package installed as edible, but does it like clone it locally? 00:12:21.720 --> 00:12:22.500 What happens there? 00:12:22.500 --> 00:12:23.300 Well, it does. 00:12:23.300 --> 00:12:31.700 I mean, installing from a Git does clone it first, but I don't know what the point would be because you're still, you're not editing it on Git. 00:12:31.700 --> 00:12:34.060 Anyway, I used it for local directory. 00:12:34.580 --> 00:12:35.420 It's a cool feature. 00:12:35.420 --> 00:12:35.420 It's a cool feature. 00:12:35.420 --> 00:12:35.420 It's a cool feature. 00:12:35.420 --> 00:12:37.720 But it didn't. 00:12:37.720 --> 00:12:45.920 And I also like Flit, but Flit, but Flit uses PyProject.automal and pip installable dash E install dash. 00:12:45.920 --> 00:12:52.360 She didn't work with, with PyProject Intel last, this week, last week, really recently. 00:12:52.360 --> 00:13:01.420 So a workaround for Flit was you would have to install a PTH file or with a dash and you have to do, you have to install Flit first then. 00:13:01.420 --> 00:13:11.040 And this is a, if somebody's helping you, but they're not, they're not used to Flit, this is a weird thing to tell them about. 00:13:11.040 --> 00:13:13.620 You can do PTH file or sim length. 00:13:14.020 --> 00:13:22.980 But then there, there came along somebody that said, Hey, a PEP 660 said, Hey, we should do editable installs for project PyProject.automal projects. 00:13:22.980 --> 00:13:26.660 Also, it requires that the backend supports this also. 00:13:26.660 --> 00:13:29.540 So there's changes needed to both pip and Flit. 00:13:29.540 --> 00:13:31.920 However, now we have it. 00:13:31.920 --> 00:13:36.140 So, just recently, oh, let's jump back. 00:13:36.140 --> 00:13:39.080 Pip 21.3 came out. 00:13:39.080 --> 00:13:39.620 When was it? 00:13:39.620 --> 00:13:41.040 October 11th. 00:13:41.040 --> 00:13:42.180 Yeah, very recently. 00:13:42.620 --> 00:13:45.320 Flit 3.4 came out October 10th. 00:13:45.320 --> 00:13:55.040 And with these two things in place, you can now, you have to, you have to regenerate your project file or change it to use 3.4 for Flit. 00:13:55.040 --> 00:13:57.340 But, but editable installs work. 00:13:57.340 --> 00:13:59.440 and so I was playing with it. 00:13:59.440 --> 00:14:00.440 I'm like, this is so cool. 00:14:00.440 --> 00:14:01.980 I love doing this. 00:14:01.980 --> 00:14:06.180 but I was like, how do I get my, dependencies in there? 00:14:06.180 --> 00:14:11.840 So one of the things that, Flit allows and PyProject.automal allows is optional dependencies. 00:14:11.840 --> 00:14:19.200 So the normal dependencies, your project dependencies automatically get installed when you do a, install dashi. 00:14:19.200 --> 00:14:21.400 But the optional ones don't. 00:14:21.400 --> 00:14:23.420 So you have to give it a bracket. 00:14:23.420 --> 00:14:29.040 you know, you have to say like install the, my thing with the optional like test or doc or something. 00:14:29.040 --> 00:14:34.340 Well, the way you do that with, with a local directories, you have to just make sure you put it in quotes. 00:14:34.500 --> 00:14:38.680 So quote dot bracket test, close bracket, close quote. 00:14:38.680 --> 00:14:39.060 Okay. 00:14:39.060 --> 00:14:40.200 Totally obvious. 00:14:40.200 --> 00:14:43.540 Not totally obvious, but, not bad either. 00:14:43.540 --> 00:14:46.400 So, anyway, I'm excited about this a lot. 00:14:46.400 --> 00:14:46.880 Yeah. 00:14:46.880 --> 00:14:47.480 Yeah. 00:14:47.480 --> 00:14:48.120 That's really cool. 00:14:48.120 --> 00:14:48.880 Good find. 00:14:48.880 --> 00:14:50.060 let's see. 00:14:50.060 --> 00:14:50.920 out there. 00:14:50.920 --> 00:14:51.780 Follow up for you. 00:14:51.780 --> 00:14:52.320 Muhammad Okwai. 00:14:52.320 --> 00:14:55.800 Sam says, I still have nightmares of BS4 and feed parser. 00:14:55.800 --> 00:14:56.380 Yeah. 00:14:56.380 --> 00:14:57.000 Yeah, man. 00:14:57.000 --> 00:14:58.860 It's, it's really hard to work with BS4. 00:14:58.860 --> 00:15:02.880 BS4 is great for what it's for, but it's like assembly language is great. 00:15:02.880 --> 00:15:04.700 It doesn't mean I should write in it all the time. 00:15:04.700 --> 00:15:04.900 Right? 00:15:05.000 --> 00:15:05.640 No, I agree. 00:15:05.640 --> 00:15:09.360 And plus, I don't think BS4 does like scraping of dynamic pages for that. 00:15:09.360 --> 00:15:12.640 You like have to use, I forgot the package name. 00:15:12.640 --> 00:15:13.980 Selenium for that. 00:15:13.980 --> 00:15:14.640 Yeah. 00:15:14.640 --> 00:15:15.400 Yeah, you do. 00:15:15.400 --> 00:15:16.560 Okay. 00:15:16.560 --> 00:15:20.440 So the next one I want to talk about here is, is pretty cool. 00:15:20.440 --> 00:15:27.360 And it's, it's an unusual project because if you're going to go work on some Python data 00:15:27.360 --> 00:15:32.240 science, you usually want to go do that in notebooks, but you might just want to think 00:15:32.240 --> 00:15:34.200 about it as kind of like an Excel spreadsheet. 00:15:34.340 --> 00:15:37.760 You might want to walk up to it and go, okay, well, let me just see a grid of this. 00:15:37.760 --> 00:15:38.560 I'll filter it this way. 00:15:38.560 --> 00:15:39.780 I'm going to hide that column. 00:15:39.780 --> 00:15:44.480 I'm going to like remove, you know, only show data with some property and then look at it. 00:15:44.480 --> 00:15:46.360 That would be nice if you could visually do that. 00:15:46.360 --> 00:15:46.600 Right? 00:15:46.600 --> 00:15:51.980 So what we've got here, this one comes to us from, let me make sure to give attribution 00:15:51.980 --> 00:15:53.680 from Tomas Rolo. 00:15:53.680 --> 00:15:55.140 Thank you for sending that in. 00:15:55.140 --> 00:16:00.120 So it's this thing called Mido and Mido is a spreadsheet that helps you complete your Python 00:16:00.120 --> 00:16:00.700 analysis. 00:16:01.280 --> 00:16:06.600 What you do is you create the Mido sheet, which is like an embedded Excel thing, like 00:16:06.600 --> 00:16:09.040 thing or Google sheets thing into your notebook. 00:16:09.040 --> 00:16:10.440 You play around with that. 00:16:10.440 --> 00:16:12.680 And then the cell below, it writes the code. 00:16:12.680 --> 00:16:14.640 So let me see if I can show you an example here. 00:16:14.640 --> 00:16:17.160 So there's this spreadsheet up at the top. 00:16:17.160 --> 00:16:21.420 And as you interact with it, you can see there's this cell down here that says import Pandas 00:16:21.420 --> 00:16:24.540 is PD, Netflix titles equals PD dot read CSV. 00:16:24.540 --> 00:16:28.900 And it gives it a file because you clicked a button and said open CSV for your data source 00:16:28.900 --> 00:16:29.960 in that spreadsheet. 00:16:29.960 --> 00:16:33.380 And then they said, I want to, what do they say? 00:16:33.380 --> 00:16:36.840 They remove some of the columns like rating and type and so on. 00:16:36.840 --> 00:16:40.120 And then create a pivot table off of that. 00:16:40.120 --> 00:16:42.660 And it just writes all the Python code for you below. 00:16:42.740 --> 00:16:44.100 Yeah, I think right in the notebook. 00:16:44.100 --> 00:16:45.560 I kind of really like this library. 00:16:45.560 --> 00:16:50.260 Like it's going to make a lot of stuff easy for like people who are just doing data analysis 00:16:50.260 --> 00:16:53.820 because like what they do most of the time is like they're browsing Stack Overflow to like 00:16:53.820 --> 00:16:59.040 write the find and find the right answer to like solve their problem. 00:16:59.040 --> 00:17:01.260 So like this is going to save them a lot of time. 00:17:01.260 --> 00:17:02.240 I totally agree. 00:17:02.340 --> 00:17:05.920 And if you go and play with it, you'll see a section that says Mido code start. 00:17:05.920 --> 00:17:06.560 Do not edit. 00:17:06.560 --> 00:17:07.420 Mido code end. 00:17:07.420 --> 00:17:08.160 Do not edit. 00:17:08.160 --> 00:17:13.360 A totally reasonable use case for this, which might not be what Mido themselves recommend 00:17:13.360 --> 00:17:17.160 because they want to promote their tool and sort of be part of the story. 00:17:17.160 --> 00:17:22.460 But a reasonable thing to do would be to like embed this, play around with it to get just the 00:17:22.460 --> 00:17:28.260 right thing and then strip out the Mido bits and just leave the fragments that it wrote 00:17:28.260 --> 00:17:28.700 in there. 00:17:28.700 --> 00:17:30.560 Yeah, that would be amazing though. 00:17:30.560 --> 00:17:31.160 Yeah. 00:17:31.560 --> 00:17:31.720 Yeah. 00:17:31.720 --> 00:17:33.220 I mean, you don't have to tell anybody. 00:17:33.220 --> 00:17:34.200 He's just read you to do it. 00:17:34.200 --> 00:17:34.240 Yeah. 00:17:34.240 --> 00:17:34.600 Yeah. 00:17:34.600 --> 00:17:35.280 Yeah. 00:17:35.280 --> 00:17:36.420 No, that would be amazing. 00:17:36.420 --> 00:17:37.120 Yeah. 00:17:37.120 --> 00:17:40.620 And it even does really cool comments on the section. 00:17:40.620 --> 00:17:42.300 So it puts it all into one cell, right? 00:17:42.300 --> 00:17:44.720 Instead of a whole bunch of cells, which I think is reasonable. 00:17:44.720 --> 00:17:51.460 But it does like the comments that it writes are imported Netflix title CSV, pivoted Netflix 00:17:51.460 --> 00:17:58.280 title CSV into data frame two, flattened the column headers, reset the column name and indexes. 00:17:58.280 --> 00:18:00.220 Like those are meaningful comments, right? 00:18:00.260 --> 00:18:02.740 Like this is pretty nice actually what it generates. 00:18:02.740 --> 00:18:05.700 It's not horrible code that you would, you know, run away from. 00:18:05.700 --> 00:18:06.460 That's cool. 00:18:06.460 --> 00:18:07.280 Isn't that neat? 00:18:07.280 --> 00:18:12.460 So people who are really familiar with spreadsheets can kind of ease into data analysis. 00:18:12.460 --> 00:18:13.700 Yes, exactly. 00:18:14.100 --> 00:18:16.280 And they can do like really like easy tasks. 00:18:16.280 --> 00:18:20.920 Like if they want to filter out data instead of like going out and finding out how to use 00:18:20.920 --> 00:18:23.700 Pandas to like filter out data, they can directly use Mito for that. 00:18:23.700 --> 00:18:26.020 So it's going to like save them a lot of time on that. 00:18:26.020 --> 00:18:26.620 I agree. 00:18:26.620 --> 00:18:27.860 I could see myself using this. 00:18:27.860 --> 00:18:28.900 No, no doubt. 00:18:28.900 --> 00:18:31.540 I think Pandas is great, but I don't know it super well. 00:18:31.540 --> 00:18:35.920 And if I know, like I kind of want to do this thing, but I don't really know how I can select 00:18:35.920 --> 00:18:36.620 select to do that. 00:18:36.620 --> 00:18:36.860 Yeah. 00:18:36.860 --> 00:18:37.000 Okay. 00:18:37.360 --> 00:18:37.560 Yeah. 00:18:37.560 --> 00:18:39.760 That's, that's the thing about Pandas. 00:18:39.760 --> 00:18:44.080 Like Pandas is amazing, but there's like so much stuff in Pandas that you don't know top 00:18:44.080 --> 00:18:44.480 of your head. 00:18:44.480 --> 00:18:49.780 So you have to do like searching the documentation, like Google Stack Overflow for that. 00:18:49.780 --> 00:18:52.480 And I can see this library being really useful though. 00:18:52.480 --> 00:18:56.880 Like for that specific reason, like you want to do quick analysis, you use Mito for that 00:18:56.880 --> 00:18:59.700 and boom, you have the code right down generated. 00:18:59.700 --> 00:19:00.280 Yeah. 00:19:00.280 --> 00:19:00.860 Super cool. 00:19:00.860 --> 00:19:04.520 The other thing worth pointing out is you don't have to start your notebook this way. 00:19:04.860 --> 00:19:06.920 You can actually hand it an existing data frame. 00:19:06.920 --> 00:19:11.200 So you could do your work down until you get some data frame generated from who knows where 00:19:11.200 --> 00:19:15.340 and then hand that off to Mito and then have it write the, you know, the next fragment 00:19:15.340 --> 00:19:16.380 of code that you're going to write. 00:19:16.380 --> 00:19:18.000 So I think this is neat. 00:19:18.000 --> 00:19:19.720 I could totally see myself using it. 00:19:19.720 --> 00:19:24.140 There's a cool tutorial you can go through, but I recommend you watch the data slicing with 00:19:24.140 --> 00:19:25.860 Mito 2 video. 00:19:25.860 --> 00:19:27.080 That's right at the top of that. 00:19:27.080 --> 00:19:28.720 It's like, I don't know, a couple of minutes. 00:19:28.720 --> 00:19:29.240 How long is it? 00:19:29.240 --> 00:19:30.500 It's six and a half minutes. 00:19:30.500 --> 00:19:32.800 It'll give you a really good sense of what's happening there. 00:19:33.120 --> 00:19:37.180 The other thing worth pointing out is when you see plans at the top, that means it costs 00:19:37.180 --> 00:19:43.020 money, but there's a individual one that's just totally free forever. 00:19:43.020 --> 00:19:44.740 Works with JupyterLab 2 and 3. 00:19:44.740 --> 00:19:47.160 But if you want like team support, there's a paid thing. 00:19:47.160 --> 00:19:50.800 And given that they're creating this and giving out to the world, it seems fair enough. 00:19:50.800 --> 00:19:51.820 It's something you can plug in. 00:19:51.820 --> 00:19:54.060 You don't depend massively upon it. 00:19:54.060 --> 00:19:57.780 Like I said, you could even like use it to generate your code and then take it back out 00:19:57.780 --> 00:19:58.140 if you want. 00:19:58.140 --> 00:19:58.580 Yeah. 00:19:58.920 --> 00:20:01.780 So pretty cool props to Mito team. 00:20:01.780 --> 00:20:02.680 That's pretty nice. 00:20:02.680 --> 00:20:07.400 Brian, real-time follow-up here from Henry out in the audience. 00:20:07.400 --> 00:20:15.820 Editable installs aren't niche, but since we got editable installs for setup CFG only projects 00:20:15.820 --> 00:20:21.800 in pip 21.1, it's now just supported for arbitrary build backends in pip 21.3. 00:20:21.800 --> 00:20:22.320 Yeah. 00:20:22.320 --> 00:20:23.740 Thanks for the extra info. 00:20:23.740 --> 00:20:28.500 Also, ZDocs says edible installs. 00:20:28.500 --> 00:20:32.080 We probably said editable. 00:20:32.080 --> 00:20:32.640 Yeah. 00:20:32.640 --> 00:20:33.260 Editable. 00:20:33.260 --> 00:20:34.440 When we say editable. 00:20:34.440 --> 00:20:34.720 Editable. 00:20:34.720 --> 00:20:37.940 Indeed. 00:20:37.940 --> 00:20:38.420 Indeed. 00:20:38.420 --> 00:20:39.440 All right. 00:20:39.440 --> 00:20:40.380 Let's see. 00:20:40.380 --> 00:20:42.680 So, Mohamed, you got yours. 00:20:42.680 --> 00:20:44.100 You're up next, right? 00:20:44.100 --> 00:20:44.620 Yep. 00:20:44.620 --> 00:20:46.620 So, I have this library called TroposWriter. 00:20:46.620 --> 00:20:51.240 It's an amazing library and helps you generate CloudFormation templates writing Python. 00:20:51.240 --> 00:20:53.660 So, I do this on my job a lot. 00:20:53.660 --> 00:20:56.200 Like, I work with DevOps people writing CloudFormation templates. 00:20:56.200 --> 00:21:00.980 And sometimes it's hard to write CloudFormation templates because of the formatting part in YAML. 00:21:00.980 --> 00:21:02.360 YAML can get messy. 00:21:02.360 --> 00:21:05.700 Like, you might mess up the format and then your file won't even run. 00:21:05.700 --> 00:21:09.200 And then you'd be, like, hunting down where did I add extra space. 00:21:09.280 --> 00:21:17.380 So, this library solves a specific problem, like, helping you write templates using Python language. 00:21:17.380 --> 00:21:18.540 So, like, this is an amazing library. 00:21:18.540 --> 00:21:22.280 If you like writing a lot of CloudFormation template, I would definitely recommend using this. 00:21:22.280 --> 00:21:23.020 I see. 00:21:23.020 --> 00:21:25.700 So, normally you use an AWS CloudFormation JSON. 00:21:25.700 --> 00:21:26.540 Yeah. 00:21:26.920 --> 00:21:31.500 Most people use JSON and some people, like, so, it's, like, it's up to you. 00:21:31.500 --> 00:21:34.700 Like, it's, you can either write in JSON or write in, like, YAML. 00:21:34.700 --> 00:21:38.000 But let's say you're writing in JSON and, like, say you mess up the format. 00:21:38.000 --> 00:21:40.560 Like, let's say you mess up a bracket or a comma somewhere. 00:21:40.560 --> 00:21:44.540 Then you might be, like, if you don't have the right linter, then you might be, like, 00:21:44.540 --> 00:21:48.000 hunting down the files looking for, like, where did I miss the comma to fix this? 00:21:48.000 --> 00:21:53.480 So, like, when you, like, having large templates, it gets harder to, like, I would say, debug them. 00:21:53.480 --> 00:21:54.000 Yeah. 00:21:54.000 --> 00:21:57.560 Another thing that's nice is JSON is static, right? 00:21:57.560 --> 00:21:58.940 But Python code executes. 00:21:58.940 --> 00:22:01.780 So, you could, like, loop over stuff and say, I'm going to need 10 of these. 00:22:01.780 --> 00:22:05.120 So, let's call it this one, you know, one, two, three, you know, machine one, machine two, 00:22:05.120 --> 00:22:06.320 machine three, or whatever, right? 00:22:06.320 --> 00:22:06.620 Yeah. 00:22:06.620 --> 00:22:08.360 I was going to actually point that out. 00:22:08.360 --> 00:22:09.980 But, like, thank you for pointing that out. 00:22:09.980 --> 00:22:14.820 Like, I was going to say, like, you can actually, like, leverage the power of Python language 00:22:14.820 --> 00:22:16.000 to, like, iterator with stuff. 00:22:16.100 --> 00:22:17.480 Like, let's say you need 10 subnets. 00:22:17.480 --> 00:22:22.060 Instead of, like, writing 10 subnets in JSON, you could just iterate and then produce, like, 00:22:22.060 --> 00:22:22.880 10 subnets. 00:22:22.880 --> 00:22:23.520 Yeah. 00:22:23.520 --> 00:22:24.360 Exactly. 00:22:24.360 --> 00:22:25.180 That's awesome. 00:22:25.180 --> 00:22:25.780 Yeah. 00:22:25.780 --> 00:22:27.260 It just makes stuff so much easier. 00:22:27.260 --> 00:22:27.660 Yeah. 00:22:27.660 --> 00:22:28.200 Yeah. 00:22:28.200 --> 00:22:31.960 You know, you hear all the time with cloud stuff, infrastructure as code or. 00:22:31.960 --> 00:22:32.420 Yeah. 00:22:32.420 --> 00:22:33.680 You know, that kind of stuff. 00:22:33.680 --> 00:22:35.580 And it's just, it's like another layer, right? 00:22:35.580 --> 00:22:36.200 Yeah. 00:22:36.200 --> 00:22:37.240 No, I agree. 00:22:37.240 --> 00:22:38.160 I agree. 00:22:38.160 --> 00:22:38.780 Yeah. 00:22:38.780 --> 00:22:39.420 Very cool. 00:22:39.420 --> 00:22:42.040 Brian, you guys do anything with cloud stuff in your world? 00:22:42.040 --> 00:22:42.820 No. 00:22:42.820 --> 00:22:45.360 It's all hardware. 00:22:45.580 --> 00:22:46.020 Yeah. 00:22:46.020 --> 00:22:47.300 All behind the scenes. 00:22:47.300 --> 00:22:49.060 Well, I mean, we use them. 00:22:49.060 --> 00:22:52.800 We've got a lot of servers and stuff, and we've got a lot of services running, but they're 00:22:52.800 --> 00:22:54.120 all internal. 00:22:54.120 --> 00:22:55.980 We don't use a lot of cloud services. 00:22:55.980 --> 00:23:01.980 Some things are easing up a little bit that we're using because there's a lot of things 00:23:01.980 --> 00:23:05.160 that are just so much easier when you go into the open cloud. 00:23:05.380 --> 00:23:06.380 But there's security issues. 00:23:06.380 --> 00:23:07.380 Yeah. 00:23:07.380 --> 00:23:07.700 Yeah. 00:23:07.700 --> 00:23:08.840 For sure. 00:23:08.840 --> 00:23:09.480 All right. 00:23:09.480 --> 00:23:09.860 Awesome. 00:23:09.860 --> 00:23:12.420 Well, another good one for people doing AWS stuff. 00:23:12.420 --> 00:23:16.880 There's also the AWS cloud SDK or something like that. 00:23:17.100 --> 00:23:17.260 Yeah. 00:23:17.260 --> 00:23:17.880 Cloud SDK. 00:23:17.880 --> 00:23:20.440 What's the relationship with these two things? 00:23:20.440 --> 00:23:21.720 It's pretty similar. 00:23:21.720 --> 00:23:25.360 But it also has support for TypeScript. 00:23:25.360 --> 00:23:27.620 It also has support for Python and TypeScript. 00:23:27.620 --> 00:23:29.640 But it's more like a personal preference. 00:23:29.640 --> 00:23:33.140 So I prefer this library because it's pretty much supported in Python. 00:23:33.440 --> 00:23:35.580 From the start, it was built for Python. 00:23:35.580 --> 00:23:39.840 So that's why I like this library more than AWS cloud CDKs. 00:23:39.840 --> 00:23:42.600 But they both do the same job, basically. 00:23:42.600 --> 00:23:48.800 The only missing part is whenever the cloud CDK generates a template for you, it also allows 00:23:48.800 --> 00:23:51.480 you to deploy directly using the CDKs. 00:23:51.480 --> 00:23:56.680 But what Troposphere does, it allows you to generate the template, but it doesn't allow you 00:23:56.680 --> 00:23:59.400 to deploy it directly on the cloud. 00:23:59.400 --> 00:24:04.300 So you basically have to take the template and put it onto CloudFormation to deploy the 00:24:04.300 --> 00:24:04.720 resources. 00:24:04.720 --> 00:24:05.420 Yeah. 00:24:05.420 --> 00:24:06.280 That seems reasonable. 00:24:06.280 --> 00:24:10.580 You know, we could store those in version control and stuff like that. 00:24:10.580 --> 00:24:13.380 Like, here's what we did to change our cloud setup. 00:24:13.380 --> 00:24:15.100 And here it is in version control, right? 00:24:15.100 --> 00:24:15.460 Yep. 00:24:15.460 --> 00:24:16.080 Nice. 00:24:16.080 --> 00:24:19.480 Well, I think that brings us to our extras, Brian. 00:24:19.480 --> 00:24:20.280 Is that right? 00:24:20.280 --> 00:24:21.440 I guess so. 00:24:21.440 --> 00:24:21.660 Yeah. 00:24:21.660 --> 00:24:22.360 Yeah. 00:24:22.360 --> 00:24:23.040 I think so. 00:24:23.040 --> 00:24:24.400 You got anything you want to share with folks? 00:24:24.400 --> 00:24:29.360 Just that the PyCon 2022 site is there now. 00:24:29.360 --> 00:24:32.740 You can't sign up yet, but there's the 2222 site. 00:24:32.740 --> 00:24:36.080 I've seen some Salt Lake City mountains there. 00:24:36.080 --> 00:24:36.760 Yeah. 00:24:36.760 --> 00:24:38.380 I'm so excited to go to Salt Lake City. 00:24:38.380 --> 00:24:40.420 I assume you're going, hopefully. 00:24:40.420 --> 00:24:42.200 Hopefully, if I can. 00:24:42.200 --> 00:24:42.840 Yeah. 00:24:42.840 --> 00:24:44.960 I definitely have plans to. 00:24:44.960 --> 00:24:47.780 I can't wait to see everybody in person again. 00:24:47.780 --> 00:24:48.080 Yeah. 00:24:48.080 --> 00:24:53.140 It's so interesting to think about where we are with conferences and stuff. 00:24:53.140 --> 00:24:57.180 So, I was just at PyBay, which is really cool. 00:24:57.180 --> 00:25:00.420 And I'll pull up that on the screen here. 00:25:00.860 --> 00:25:03.360 Like, this is where the PyBay conference was held. 00:25:03.360 --> 00:25:07.760 Like, literally in this outdoor food cart area where there's a bunch of cabanas. 00:25:07.760 --> 00:25:11.720 And each cabana had its own TV and its audio video feed. 00:25:11.720 --> 00:25:14.380 So, you could be in groups of like six or seven outside. 00:25:14.380 --> 00:25:16.700 But there was like hundreds of people there, right? 00:25:16.700 --> 00:25:17.540 Which is really cool. 00:25:17.960 --> 00:25:23.060 And I think that that's kind of a template for going forward for a lot of things happening 00:25:23.060 --> 00:25:23.440 these days. 00:25:23.440 --> 00:25:27.500 I've actually invited Grace, who was one of the people who helped put this on the show. 00:25:27.500 --> 00:25:29.460 So, maybe we'll have her tell us more about this later. 00:25:29.460 --> 00:25:34.700 But I don't know how this works into an event as big as PyCon or as big as any of those, 00:25:34.700 --> 00:25:35.120 right? 00:25:35.120 --> 00:25:35.660 Yeah. 00:25:35.660 --> 00:25:37.900 I mean, you got to have a really big outdoor space. 00:25:37.900 --> 00:25:38.840 Would you be awesome? 00:25:38.840 --> 00:25:40.460 Maybe like a theme park? 00:25:40.460 --> 00:25:42.640 Like, I'm going to watch this one from the roller coaster. 00:25:42.640 --> 00:25:45.900 Yeah. 00:25:45.900 --> 00:25:46.400 Awesome. 00:25:46.400 --> 00:25:47.180 Yeah. 00:25:47.440 --> 00:25:50.560 So, Jose out there says, looking forward to attending my first PyCon. 00:25:50.560 --> 00:25:50.940 Yeah. 00:25:50.940 --> 00:25:52.280 It's super fun. 00:25:52.280 --> 00:25:54.740 And Teddy, hey, Teddy says, whoop, whoop, whoop, whoop, whoop, whoop, whoop, whoop, whoop, 00:25:54.740 --> 00:25:55.720 for the PyCon announcement. 00:25:55.720 --> 00:25:56.540 Yeah, that's great. 00:25:56.540 --> 00:25:57.220 How about you? 00:25:57.220 --> 00:25:57.780 Any extras? 00:25:57.780 --> 00:25:59.240 You know what? 00:25:59.240 --> 00:26:01.080 I didn't have any until I did. 00:26:01.080 --> 00:26:04.920 I actually wanted to just point out this tweet that I saw you put out here about. 00:26:04.920 --> 00:26:07.680 Oh, I think I just saw the tweet in the morning. 00:26:07.680 --> 00:26:08.700 Yeah. 00:26:08.700 --> 00:26:10.080 About PyE and V. 00:26:10.080 --> 00:26:10.360 Yeah. 00:26:10.360 --> 00:26:14.200 As having a challenge for Windows users. 00:26:14.200 --> 00:26:16.820 And if you make that the core part of your tutorial, 00:26:16.920 --> 00:26:23.380 then you're starting out putting Windows users who represent, what, 45% of the developers 00:26:23.380 --> 00:26:26.200 or something on the back foot on your tutorial. 00:26:26.200 --> 00:26:27.080 So, yeah. 00:26:27.080 --> 00:26:27.640 What do you think? 00:26:27.640 --> 00:26:31.400 Well, it was just like a comment. 00:26:31.400 --> 00:26:33.380 I saw a tutorial and I was like, why is this? 00:26:33.380 --> 00:26:35.400 I mean, that's not the default way to install Python. 00:26:35.860 --> 00:26:39.160 So, I put this out there and it kind of blew up a little bit. 00:26:39.160 --> 00:26:40.680 Yeah, exactly. 00:26:40.680 --> 00:26:42.680 Yeah, it's got like 121 likes. 00:26:42.680 --> 00:26:45.840 So, anyway, I think that's an interesting thing to add. 00:26:45.840 --> 00:26:50.300 Muhammad, you got any extras as well before we get to the next thing? 00:26:50.300 --> 00:26:52.220 So, my extra is like how to learn Linux. 00:26:52.220 --> 00:26:56.640 So, I read this article a long time ago, but like it's an amazing article for especially 00:26:56.640 --> 00:27:01.260 people who are like getting to Linux world and like learning command lines. 00:27:01.260 --> 00:27:07.620 So, like it talks about how you can use tools like using man pages and like help flags with 00:27:07.620 --> 00:27:07.960 the tool. 00:27:08.040 --> 00:27:11.980 So, like it gives you like info and insights about how do you actually use the tool and 00:27:11.980 --> 00:27:14.520 like exploring wikis and like stack of questions. 00:27:14.520 --> 00:27:18.660 I think it was an amazing article for like beginners who want to like, we're just getting 00:27:18.660 --> 00:27:20.680 into like command line or Linux world. 00:27:20.680 --> 00:27:21.600 That's cool. 00:27:21.600 --> 00:27:22.140 That's my experience. 00:27:22.140 --> 00:27:28.000 I find, I found the Linux command line macOS a little bit less because there's often an 00:27:28.000 --> 00:27:33.300 alternative, but certainly the Linux where the sole access to it was through an SSH. 00:27:33.300 --> 00:27:35.880 I found it intimidating when I first got into it. 00:27:35.880 --> 00:27:40.320 No, I actually, I actually got into Linux right after my first semester of college. 00:27:40.320 --> 00:27:41.660 I was just trying it. 00:27:41.660 --> 00:27:42.080 It was fun. 00:27:42.080 --> 00:27:46.020 And when I just took command line, I was like, wow, you can do so much in command line. 00:27:46.020 --> 00:27:47.960 And that rest is history. 00:27:47.960 --> 00:27:52.040 Like I've been using Linux for like, I would say five years now, but now I'm recently switched 00:27:52.040 --> 00:27:55.400 to macOS because of my work and I'm having hard time managing windows now. 00:27:55.400 --> 00:28:00.960 I guess I had trouble switching to PCs because I, oh my, it was in Solaris when I was 00:28:00.960 --> 00:28:01.500 in college. 00:28:01.500 --> 00:28:02.920 Oh, interesting. 00:28:02.920 --> 00:28:05.360 I remember walking by the Solaris going, oh, those are different. 00:28:05.360 --> 00:28:08.520 Very interesting. 00:28:08.520 --> 00:28:09.040 Yeah, cool. 00:28:09.040 --> 00:28:12.840 But no, this will be super helpful, especially to a lot of folks out there who don't work 00:28:12.840 --> 00:28:13.100 with a lot. 00:28:13.100 --> 00:28:17.160 I mean, now I'm totally comfortable with Linux, but I remember the learning experience. 00:28:17.160 --> 00:28:18.820 So I'm sure this will help others as well. 00:28:18.820 --> 00:28:19.320 Nice. 00:28:19.320 --> 00:28:19.640 All right. 00:28:19.640 --> 00:28:22.600 Well, I believe it is time for a joke. 00:28:23.080 --> 00:28:29.260 And speaking of real conferences, this is something that I, we've done before at the PyCon's. 00:28:29.260 --> 00:28:33.840 We did this at PyCon in Portland with the Portland Art Museum there. 00:28:33.840 --> 00:28:34.520 It was really fun. 00:28:34.880 --> 00:28:37.980 And it's the classic programmer paintings. 00:28:37.980 --> 00:28:39.040 I love these. 00:28:39.040 --> 00:28:39.320 Yeah. 00:28:39.320 --> 00:28:39.640 Yeah. 00:28:39.640 --> 00:28:47.200 So the idea is you take a legitimate historical, maybe 400 year old piece of fine art, and then 00:28:47.200 --> 00:28:53.340 you ignore the actual name and you put your own sort of techie interpretation upon it. 00:28:53.560 --> 00:29:03.120 So here, this one, we've got this balloon taking off into like a dark, cloudy red sky, 00:29:03.120 --> 00:29:06.200 and two wolves just like sort of forlorn watching it go. 00:29:06.200 --> 00:29:08.760 The ground is kind of on fire, but it's also snowy. 00:29:08.760 --> 00:29:09.900 I don't really understand that. 00:29:09.900 --> 00:29:10.100 Yeah. 00:29:10.500 --> 00:29:14.200 But that, you know, this is some proper painting that who knows what it is, right? 00:29:14.200 --> 00:29:19.680 But if you look at the title, the title is Alphabet Cancels Loon, right? 00:29:19.680 --> 00:29:23.660 Loon was their project where they'd put balloons up over places without much internet, and that 00:29:23.660 --> 00:29:25.000 would beam down internet. 00:29:25.000 --> 00:29:29.060 So here's like the final balloon balloon going off into the smoky sky. 00:29:29.060 --> 00:29:35.820 It's in Ziedislaw Besinski, 1979, oil on Masonite. 00:29:35.820 --> 00:29:36.480 Beautiful. 00:29:36.480 --> 00:29:38.320 Alphabet Cancels Loon. 00:29:38.320 --> 00:29:43.260 So we used to go around to the art museum there, and we would like at the conference 00:29:43.260 --> 00:29:44.980 or it would have like a dinner there or something. 00:29:44.980 --> 00:29:50.100 We'd just go around and like try to one-up each other on doing this to like real paintings. 00:29:50.100 --> 00:29:50.560 It was fun. 00:29:50.560 --> 00:29:54.820 But this whole classicprogrammerpaintings.com, endless joy right there. 00:29:54.820 --> 00:29:58.620 I'm definitely going to check these guys out. 00:29:58.620 --> 00:30:00.840 Yeah, you can spend a long time going through. 00:30:00.840 --> 00:30:03.440 It's been around for a while, so it's good stuff. 00:30:03.440 --> 00:30:06.400 I'm chuckling at some right now. 00:30:06.400 --> 00:30:07.460 I got to stop looking at it. 00:30:07.460 --> 00:30:07.980 Yeah, exactly. 00:30:07.980 --> 00:30:12.780 I'm strongly resisting the urge to just scroll through them because we're doing a show. 00:30:12.780 --> 00:30:13.660 I'll do it later. 00:30:13.660 --> 00:30:14.640 Thanks, Michael. 00:30:14.640 --> 00:30:15.040 Yeah. 00:30:15.040 --> 00:30:15.820 Yeah, you bet, Brian. 00:30:15.820 --> 00:30:16.660 Thanks for being here as always. 00:30:16.660 --> 00:30:18.000 And Mohamed, thank you for joining us. 00:30:18.000 --> 00:30:18.460 It's been great. 00:30:18.460 --> 00:30:20.640 And it was a pleasure to be here. 00:30:20.640 --> 00:30:21.220 Yeah. 00:30:21.220 --> 00:30:21.720 Thank you. 00:30:21.720 --> 00:30:22.380 You're welcome. 00:30:22.380 --> 00:30:23.480 Bye, everyone out there. 00:30:23.480 --> 00:30:24.260 Bye, everyone. 00:30:24.800 --> 00:30:26.220 Thanks for listening to Python Bytes. 00:30:26.220 --> 00:30:29.020 Follow the show on Twitter via at Python Bytes. 00:30:29.020 --> 00:30:32.160 That's Python Bytes as in B-Y-T-E-S. 00:30:32.520 --> 00:30:35.020 Get the full show notes over at Python Bytes.fm. 00:30:35.020 --> 00:30:39.940 If you have a news item we should cover, just visit Python Bytes.fm and click Submit in the 00:30:39.940 --> 00:30:40.380 nav bar. 00:30:40.380 --> 00:30:42.500 We're always on the lookout for sharing something cool. 00:30:42.500 --> 00:30:47.200 If you want to join us for the live recording, just visit the website and click Livestream to 00:30:47.200 --> 00:30:49.920 get notified of when our next episode goes live. 00:30:50.120 --> 00:30:54.320 That's usually happening at noon Pacific on Wednesdays over at YouTube. 00:30:54.320 --> 00:30:57.720 On behalf of myself and Brian Okken, this is Michael Kennedy. 00:30:57.720 --> 00:31:01.420 Thank you for listening and sharing this podcast with your friends and colleagues.