#181: 30 amazing Python projects Transcript
00:00 Listeners often tell me one of the really valuable aspects of this podcast is the packages and libraries that they hear about and start using in their projects.
00:08 On this episode, I've invited Brian Okken, my co-host over on Python Bytes, to take this idea to 11.
00:14 We're going to cover the top 30 Python packages from the past year, a metric to be determined later in the show.
00:20 This is Talk Python to Me, episode 181, recorded October 3rd, 2018.
00:26 Welcome to Talk Python to Me, a weekly podcast on Python, the language, the libraries, the ecosystem, and the personalities.
00:46 This is your host, Michael Kennedy. Follow me on Twitter where I'm @mkennedy.
00:50 Keep up with the show and listen to past episodes at talkpython.fm and follow the show on Twitter via at Talk Python.
00:56 This episode is brought to you by Linode and CloudBold.
01:00 Please check out what they're offering during their segments. Really helps support the show.
01:04 Brian, welcome back to Talk Python.
01:06 Oh, yeah, thanks.
01:07 Yeah, you've been here a bunch of times on this show.
01:10 And of course, we meet up quite often on Python Bytes, right?
01:14 Yeah, every week.
01:15 Every week. That's such a fun show.
01:17 And so we get to talk, you know, this is like the sort of extended edition of Python Bytes in some sense for our topic today.
01:25 Because on Python Bytes, we meet up, we talk about a couple of cool projects we found this week.
01:29 This one is, hey, here's a whole bunch of cool projects found throughout the year.
01:34 But this time we didn't pick it, did we?
01:35 No, it came from, where did it come from?
01:38 MyBridge AI.
01:39 It wasn't even from a person then.
01:41 No, so there's this app, this company, I guess, called MyBridge.
01:47 And they kind of like Zite or Flipboard curate a list of articles and other interesting reading.
01:55 But instead of just trying to do that for general population, they try to do that for professionals in various industries.
02:01 So one of the things they came up with was 30 amazing Python projects, the 2018 edition.
02:08 And we're just going to go through that list and just talk about these projects and sort of shine a light on some cool stuff that, well, this AI picked out for us.
02:15 Yeah.
02:15 And it's one of the interesting things is the, you can, I mean, like individuals can go in and do just the popularity of a, like the number of stars or the number of, maybe that number of downloads on PyPI or something.
02:30 But this is also, they also used the engagement, I'm guessing, how many, how often things get added to possibly and recency.
02:40 So if things haven't been edited for a long time, they're probably not going to be on the list.
02:44 Right.
02:45 Or stuff that maybe is new, but it has the same number of stars or something that's old, right?
02:49 That would make it more valuable.
02:51 Yeah.
02:51 So before we get into our main topic, though, let's just do a little background on you since it's been a while since you've been on this show.
02:57 Although I'm sure many people that listen to Talk Python also listen to Python Bytes.
03:00 A couple of things that you're notable for.
03:03 One is the pytest book, right?
03:05 What's the title of your book?
03:06 Python Testing with pytest.
03:08 Not very creative, but is exactly what it is.
03:11 Yeah, it's quite descriptive.
03:12 It starts out with an introduction just to get people's feet wet with pytest.
03:17 I've had a lot of people say that they didn't get lost with it, but a lot of the stuff there is stuff that they'll use down the road.
03:24 Like we get into building plugins and things like that.
03:27 Yeah, yeah.
03:28 Very nice.
03:28 And what do you do day to day?
03:29 Do something testing related, right?
03:31 Yeah, I make test equipment.
03:33 So I work for Roden Schwartz and make electronic test equipment.
03:39 And me specifically, I'm a manager for some C++ people that do embedded and a test team that does testing of the hardware.
03:48 Nice.
03:48 That's very cool.
03:49 All right.
03:50 So are you ready to get into our topics?
03:52 Yeah, definitely.
03:53 What's our first one?
03:54 The first one is Home Assistant at homeassistant.io.
03:58 And it is a open source automation, home automation that puts local control and privacy first.
04:05 So I haven't actually played with this, but it looks super awesome.
04:08 So there's a lot of different automated home automation things out there like Nest and others.
04:15 And then some do-it-yourself stuff like with Raspberry Pi and Arduino projects.
04:20 But this is sort of an overreaching one that interacts with all of these things.
04:26 And you can control multiple devices with one interface, track multiple devices, and then have some cross-device automation and notifications.
04:37 Like, for instance, you could monitor the soil moisture outside and then alert you, send you an email or something if it's too dry or something like that.
04:49 Even better, how about have it automatically turn on your sprinklers?
04:53 Because you have smart sprinklers, right?
04:55 You're right.
04:56 Only when it's needed because not when it rained.
04:58 Yeah.
04:58 One of the things I want to play with is the ability to, there's a location things where you can hook up through your, allow an app on your cell phone or something to know where you are.
05:08 And you can say, hey, when I leave my work, go ahead and turn the air conditioning up or the heat up in the house so that the temperature's right when I get home, regardless of when I left work.
05:18 So that'd be fun.
05:19 Yeah.
05:20 There's all sorts of cool stuff.
05:21 Another thing I want to give a shout out to here is Haas.
05:25 I guess the way you'd say it shortening would be Haas.io, H-A-S-S.io.
05:29 Or maybe Haas, like the avocado.
05:30 Yeah, I guess so.
05:31 Okay.
05:32 So this is a little thing that you can run on a Raspberry Pi that is like an embedded home assistant.
05:40 So you can just have a Raspberry Pi in your house and you have a private server that controls all of your devices.
05:46 And it's an iPhone app you can install that then talks to this private server and all sorts of cool stuff.
05:52 That's cool.
05:53 So you're not dependent on a cloud service or something for these sorts of things.
05:58 Right.
05:58 Exactly.
05:59 Yeah.
05:59 Isn't that cool?
06:00 Nice.
06:00 Yeah.
06:01 Yeah.
06:01 So Home Assistant, if you're doing anything with a smart home and you care at all about Python, there's tons of integration and it's all in Python, which is amazing.
06:08 Well, what's next?
06:09 Next up, we have PyTorch, which is a deep learning library, which is pretty awesome, right?
06:15 Yeah.
06:15 Is that from Microsoft or who's that from?
06:18 I think it's its own project.
06:19 Okay.
06:19 It's even coming out with a new version here pretty soon or maybe already.
06:23 Yeah.
06:24 So what's really cool about PyTorch, it's basically lets you do a lot of GPU accelerated, like tensor deep learning type of stuff, deep neural networks and so on.
06:34 But the new thing that's cool is in PyTorch 1.0 coming along, you can accelerate your Python machine learning code with native code.
06:45 So they've actually created their own little mini language called TorchScript.
06:49 And TorchScript is a subset of Python that can be compiled into either C++ or other high speed languages.
06:56 Nice.
06:57 This is very cool.
06:58 Yeah, it's pretty cool.
06:59 So it's already had like support for Cython to extend it, but now it even has support for its own special language coming soon.
07:06 So I think that's an RC1.
07:07 So if you're doing any machine learning, PyTorch, you probably already know about it, but quite cool.
07:11 And this little TorchScript subset thing is quite interesting as well.
07:16 Yeah.
07:17 Normally, I'm pretty happy about these new libraries, but sometimes, you know, not too much, right?
07:21 Yeah, I kind of get a little grumpy.
07:23 You can definitely get grumpy.
07:25 Well, grumpy is next on our list.
07:28 And grumpy is a Python to Go or Trans compiler.
07:32 Maybe it's the same thing.
07:33 Yeah.
07:33 And runtime.
07:34 So you can write Python code and have it run on a Go runtime.
07:39 Sure, why not?
07:40 That's pretty interesting.
07:41 Yeah, why not?
07:42 I mean, one of the things you get is pretty good support for concurrency because Go is all about that, right?
07:46 So that's kind of cool.
07:47 One of the things that kind of makes me grumpy about grumpy is that it's a legacy Python, not modern Python.
07:54 Oh, it's 2.7.
07:56 Yeah, the reason is this is a super focused project from the YouTube team.
08:02 And the YouTube team is running YouTube on Python 2.7.
08:07 And they're trying to make it go faster because they have requirements that I suspect most people don't have.
08:13 I mean, our podcast, Python Bytes, for example, gets a lot of traffic, right?
08:16 Yeah.
08:17 But, you know, if you look at YouTube, they get a million page views per second.
08:22 Yeah.
08:23 That's a lot of traffic.
08:24 That's a lot.
08:25 So actually, I had the grumpy guys on, well, the guy behind grumpy on Talk Python in episode 95.
08:33 And a lot of these topics we've covered in one place or another.
08:35 So I'll try to give a shout out to like more deep coverage on them if that's interesting to you.
08:40 But yeah, grumpy is kind of interesting.
08:43 I hope I would love to see this go somewhere.
08:44 Actually, I would love to see alternate core implementations.
08:48 Like I would love to see a Rust re-implementation of CPython, the runtime as well.
08:53 So pretty cool.
08:54 Yeah.
08:54 So Go has asynchronous stuff and so does Python.
08:57 And as of Python 3.5, we have async and await, right?
09:02 And that kind of unlocks a certain type of really good concurrency, which is the kind that is based on IO.
09:08 That's waiting on databases, waiting on microservices, waiting on the file system.
09:13 You know what websites do a lot of?
09:17 Wait on stuff.
09:18 Wait on stuff, right?
09:19 Wait on databases.
09:21 Wait on web services, et cetera.
09:22 And so Sanic is one of the big frameworks that came out pretty recently and is one of the really fast async and await based Python web frameworks.
09:32 And like it seems like all the new web frameworks that are coming out, they're like, yeah, we're basically the Flask API with a different implementation.
09:39 And this is no different.
09:40 Yeah.
09:41 One of the things that's kind of fun with Sanic is there's been a lot of like proof of concept things coming up.
09:46 But this one does look like it's gaining traction.
09:49 Yeah.
09:49 It's pretty cool.
09:50 And it's based on this thing called UV loop, which is an alternate implementation of asyncio in Python.
09:55 That's about twice to four times as fast.
09:58 So that's also pretty cool that it's based on that.
10:00 And also Sanic just announced, we'll probably cover this over on Python Bytes at some point, but they just announced that they're a community driven organization.
10:08 Used to be a project by a guy and now it's sort of its own thing.
10:12 A little bit like Palette's is to Flask.
10:13 There's that organization.
10:15 Oh, nice.
10:15 So if you're looking to contribute to projects, this is a good chance to do that.
10:19 They even, I don't know how many projects do this, but I think this is a great idea.
10:23 They say in there that you can go to GitHub and look through the various items and they'll put a help wanted tag on things they think would be a good thing for somebody to grab and contribute.
10:34 That's cool.
10:35 Yeah, it's pretty nice.
10:36 Yeah.
10:36 They're on fire, aren't they?
10:37 Yeah.
10:38 And they are on fire.
10:40 And next up is Python Fire.
10:42 So Python Fire is a, it's an interesting little project in, well, I don't know how little it is.
10:48 I haven't looked at the source code, but it's a different take on command line.
10:51 It's a little in scope though.
10:53 Yeah, a little in scope.
10:54 A different take on command line interface generation.
10:57 I'm familiar with Click and there's quite a few others, but Python Fire does it kind of a little different.
11:04 You put some boilerplate, not a whole bunch, but a little bit in one of your files.
11:08 And then you can, all the functions within that module get exposed as command line arguments.
11:14 And it's kind of magical how it works.
11:18 And it's fun.
11:19 It's a, if you're confused by generating command line interfaces, check this out.
11:24 It also, they kind of push it for people that are like, you just quick and dirty just for yourself or your small team.
11:31 These are, this might be a good thing.
11:32 Yeah, it's pretty cool.
11:33 Their little subtitle or whatever is automatically generating command line interfaces from absolutely any Python object.
11:40 That's pretty cool.
11:41 Yeah.
11:41 And then their documentation is beefed up recently.
11:44 So they, they've built a guide and there's a lot more easier ways to get into it now.
11:49 So that's cool.
11:49 Yeah, that's cool.
11:50 And this is from Google.
11:51 So, you know, you can pretty much trust.
11:53 It's probably pretty good, pretty nicely put together.
11:55 Yeah.
11:55 So going back to machine learning, our next one is Spacey.
12:00 When you think, when I think, at least when I think of machine learning and like text understanding, natural language understanding, I always thought of NLTP.
12:09 That seemed like the way to go.
12:11 But Spacey is the new fancy way to do that apparently.
12:15 And it's written in Python and Cython.
12:17 So it makes it super fast.
12:19 Yeah, this looks, this looks very interesting.
12:21 And natural language processing is actually, it's getting used quite a bit.
12:25 Yeah.
12:26 Anytime you want to take text and understand what the words mean, this is it, right?
12:31 If you say wanted to, maybe you were an algorithmic trader and you were studying the live flow of data on Twitter and trying to look for sentiment analysis around a particular stock and then having automatic trading happen on that.
12:44 You probably would put Spacey in there.
12:46 Yeah, sure.
12:47 Or do you want to?
12:48 Just grabbing an example out of the scenario.
12:50 Or maybe tracking the emotions of a certain chief of a country on Twitter.
12:57 You can maybe use this.
12:58 I'm not sure.
12:59 I'm not sure we'll understand that.
13:01 You can try.
13:01 All right.
13:03 So speaking of something I don't understand, and I want to understand it, help me understand PIP-ENV.
13:08 PIP-ENV?
13:09 PIP-ENV.
13:10 There's so many ways to create virtual environments and work with them and dependencies and so on.
13:17 And then there's this other way with PIP-ENV, which is really awesome, that applies some of the time.
13:22 It's done partly by Kenneth Wright.
13:23 So very cool.
13:24 But I don't know where it fits in my world still.
13:27 It's for applications.
13:28 And it's really good for coordinating all of the dependencies for application developers.
13:35 So if you've got a team of people working on an application, I think this is a good way to go.
13:41 Some of the ways to get to is built in work to separate deployment environments versus development environments, because you might need you might need extra things around like pytest and document generation and stuff like that.
13:56 If you're doing development that you don't need when you're just deploying, having those separated out is handled by PIP-ENV rather beautifully.
14:03 Yeah, nice.
14:05 So it creates and manages virtual environments.
14:07 It replaces requirements.txt and friends with the pip file and the pip file.lock.
14:13 And it sort of pins the versions and all of those kinds of things.
14:17 So pretty interesting.
14:18 I got to say, I'm still pip install dash R some stuff these days.
14:22 It also, it can generate your requirements file.
14:24 So it can play nice.
14:26 You can have a project play in both worlds at the same time.
14:29 Yeah, that's cool.
14:29 No, it's a good project.
14:31 And I just, I need to, you know, shake myself out of my rut and learn this as well.
14:36 And then I can decide better where it fits for me.
14:38 So one thing I've always wanted to do is create like a product that I could sell out of little tiny, like IoT smart things.
14:48 And I'm still trying to understand like what that might be.
14:50 But if I were to do that, I know what project.
14:53 Yeah, MicroPython.
14:54 Right on, MicroPython.
14:55 Tell us what that is.
14:56 No, it's your turn.
14:56 All right.
14:59 So MicroPython is basically a Python implementation of the operating system that runs microcontrollers.
15:08 So it's not like I have a Raspberry Pi, which is running some variation of Linux, and then I can install CPython on there.
15:15 It's like Python itself is the operating system.
15:19 And you can do insane things.
15:21 Like you can hook up a Lambda expression to a hardware.
15:24 Yeah, that's so cool.
15:24 Like that low level.
15:26 Isn't that amazing?
15:27 So you could like put this on like a $5 little embedded chip.
15:31 And it's got pretty good support.
15:33 It's Python 3.
15:33 And there's the Mu editor and other editors that can talk directly to it.
15:39 So developing in this world sounds fun.
15:42 It's been going for a few years.
15:43 And it's still going strong.
15:45 So I'm super excited for that.
15:46 Yeah.
15:47 A MicroPython evangelist.
15:48 Or maybe a prophet.
15:49 Ah, yes.
15:51 It's as if a prophet for it.
15:54 Indeed, prophet is the next one.
15:56 What's that?
15:56 I actually don't know.
15:57 I should have taken the last one.
15:59 It's a tool for producing high quality forecasts for time series data that has multiple seasonality with linear and nonlinear growth.
16:08 I don't even know what that I just read.
16:11 So, yeah.
16:11 So the idea is this is a project from Facebook.
16:14 So it's for predicting trends and time series data that might not be like stock prices.
16:21 Yeah.
16:22 Like stock prices or things that are not just completely linear, completely the same, right?
16:27 Like the seasonality and the nonlinear growth and things like that.
16:30 So it's just a really advanced library for predicting, given a time series of data, what's going to happen in the future.
16:36 Oh, there's a lot of uses for that.
16:38 That sounds neat.
16:39 Yeah.
16:39 Yeah.
16:40 It's pretty cool.
16:40 And from Facebook, I bet they do a little bit of predicting and analyzing and stuff like that with like your feed and whatnot.
16:46 Yeah.
16:46 And maybe for like predicting ad prices and things like that.
16:50 Yeah, exactly.
16:50 This portion of Talk Python to me is brought to you by Linode.
16:56 Are you looking for bulletproof hosting that's fast, simple, and incredibly affordable?
17:00 Look past that bookstore and check out Linode at talkpython.fm/Linode.
17:05 That's L-I-N-O-D-E.
17:07 Plans start at just $5 a month for a dedicated server with a gig of RAM.
17:11 They have 10 data centers across the globe.
17:14 So no matter where you are, there's a data center near you.
17:16 Whether you want to run your Python web app, host a private Git server, or file server,
17:21 you'll get native SSDs on all the machines, a newly upgraded 200 gigabit network, 24-7 friendly support,
17:29 even on holidays, and a seven-day money-back guarantee.
17:31 Do you need a little help with your infrastructure?
17:34 They even offer professional services to help you get started with architecture, migrations, and more.
17:40 Get a dedicated server for free for the next four months.
17:43 Just visit talkpython.fm/Linode.
17:46 The next one is something called Serpent AI.
17:50 And we actually talked about this back on Python Bytes number 50, but this is really cool.
17:54 It is cool.
17:55 It's like AI with game development, or actually, you better take this one too.
18:01 I'm not sure what this is.
18:02 So the idea is if you have an AI and you want to train it, you could construct like a fake world for it, right?
18:10 You could tell it, all right, you're in a box, you can move around, or like you're in a maze,
18:14 and you'd have to build that maze, right?
18:16 For your game.
18:17 You'd basically have to build a miniature game and then try to teach a character in the game a thing if you want to develop AI.
18:23 But we have all these real games that are super, super interesting, super nuanced, right?
18:30 Like games you might play.
18:32 Okay.
18:32 Racing games, first-person shooter games, whatever.
18:35 So Serpent AI attempts to let you control that game with Python, whatever that game is.
18:42 They claim you can turn any video game into a sandbox environment for AI and bot programming.
18:48 So imagine I'm trying to create a robot that can interact with the world.
18:52 You could try to create your own world, or you could stick that thing in Grand Theft Auto or some other game and make it run around and go,
19:00 okay, well, it's really good in this world.
19:02 So it's a little bit, let's use sidestep creating the environment for testing AI.
19:06 That's so cool.
19:07 Yeah.
19:07 Yeah.
19:08 It says it even works with like games based on Steam or stuff like that.
19:12 So it's pretty cool.
19:13 The guy who creates it also does a Twitch programming channel.
19:16 Okay.
19:17 It's kind of interesting, right?
19:18 Yeah.
19:18 So like he'll like fire it up and say, all right, I'm going to go and take this game.
19:23 I'm going to create an AI that's going to do this.
19:25 And he'll just like start from scratch.
19:26 So if, you know, if you got a Friday night and you don't got anything going on, you could watch that.
19:32 Oh, yeah.
19:32 That sounds great.
19:33 Because I don't really want to do it myself, but I'd like to watch somebody else do it.
19:36 Exactly.
19:37 Yeah.
19:37 All right.
19:38 So that's a good one.
19:39 If you're into like creating AIs and bots and stuff like that.
19:42 Pretty awesome.
19:43 Yeah.
19:43 The next one is just beautiful, right?
19:45 Yeah.
19:46 It is nice.
19:46 And this one I actually can understand.
19:48 So it's good.
19:49 Next one is Dash.
19:50 Tell us about it.
19:51 It's a framework for building analytical web applications.
19:54 But so it's kind of like you need plots and, you know, Python code interactions.
20:00 But you need some real-time stuff.
20:02 So you like you want to zoom in and look at new data and have data go back and forth.
20:08 And usually you do JavaScript or something like that and maybe React or something.
20:13 And this is, it's built on top of Plotly and React and Flask.
20:19 And it's just really, it's really a beautiful interface for data and for interacting with stuff on the web.
20:26 So I actually tried to use this.
20:28 And I think it would be fine for most applications.
20:31 But you do need to have either use their server or you can set up your own server.
20:36 But there needs to be a server to do a lot of the crunching.
20:40 So.
20:40 Right.
20:41 So basically you need a server that runs Flask.
20:45 Okay.
20:46 Their thing that's derived on top of Flash.
20:49 Yeah.
20:49 Right.
20:50 Yeah.
20:50 Yeah.
20:50 So if you go and open up the link, go to their main website, there's a part that says Dash is productive.
20:57 And it shows the amount of code to create this cool graph that's totally interactable, zoomable, drop down to choose different data sources.
21:05 And you basically have to say, I would like to graph these things and my data source is Google and my date range is this year.
21:15 And somehow it can just go and get like stock data and other stuff like straight from Google.
21:21 You don't even need to provide it the data.
21:23 Wow.
21:24 Yeah.
21:24 That's neat.
21:25 So there's a lot of, if you're trying to create visualizations on the internet and you're mostly happy writing in Python, this is a really pretty sweet thing.
21:33 Yeah, it is.
21:34 And it's really pretty.
21:35 Yeah, it's definitely pretty.
21:36 So, you know, another place where a lot of pretty stuff gets put is on Instagram.
21:39 Yeah.
21:40 This is actually an amusing little project called Instapy.
21:45 It's for trying to make your own Instagram bots.
21:48 And it's built just as if you were interacting with Instagram yourself through a webpage because it's built on Selenium and it's Python powered Selenium.
21:58 It's kind of a little pet project that might be used for, you know, like automatically farming out likes and commenting on certain pictures that have something in it or something like that or comments and followers.
22:13 There's a lot of stuff it's a good thing.
22:15 I'm not sure it's one of those.
22:17 Is this a good thing or a bad thing?
22:18 Yes, I know.
22:19 It was a little bit like that.
22:20 It's definitely interesting.
22:21 Yeah, it's definitely interesting.
22:22 Like I can see if you were, say, a social media company, like you did social media as a consulting project for large companies, you could write some cool automation that maybe automatically analyzes all the ways people interacted with you, store them, generate reports, stuff like that.
22:40 Yeah, so there's some good uses, but there's also, you know, bots in general.
22:45 I feel the same way about Twitter bots.
22:47 They kind of bug me, but what are you going to do?
22:49 It's the internet.
22:50 Yeah.
22:51 Yep.
22:52 Speaking of the internet, the internet's full of APIs.
22:54 And the next project is API Star, which this is a project that fully embraces Python 3.
23:05 So this is from Tom Christie, the guy who wrote Django REST Framework, but this is sort of his reimagining of what a REST Framework would look like in Python with Python 3.5 and above.
23:15 And it's really cool because it does things like the arguments to your API methods use type annotations to get their values.
23:24 So you can have like a variable or an argument colon and say this comes from the header and it's automatically extracted out of the header because of the type hint and things like that.
23:32 It's pretty crazy.
23:33 So yeah, this is a good one.
23:35 Yep.
23:35 Very good.
23:35 And you said you talked with him about it on one of your episodes, right?
23:39 I did back in episode 125.
23:41 I had Tom on there to talk about that.
23:43 So definitely a link to that as well.
23:45 Okay.
23:46 All right.
23:46 This next one, I'm going to let you do this because this one sounds simple.
23:50 Yeah, sure.
23:50 It's very simple.
23:52 I don't even know how to pronounce it.
23:54 It's spelled F-A-I-S-S.
23:57 Maybe F-A-I-S-S?
23:58 F-A-I-S?
23:59 Yeah.
23:59 F-A-I-S?
24:00 I'm going F-A-I-S because it has to do with similarity and stuff.
24:03 Maybe F-A-I-S.
24:04 I'm going F-A-I-S.
24:05 Oh, okay.
24:06 It's a library for efficient similarity search and clustering of dense vectors.
24:12 Of course.
24:12 I have to do that all the time.
24:14 Of course.
24:14 It's a data science-y thing for people that understand that.
24:18 You probably understand.
24:19 Contains algorithms that search in sets of vectors of any size, even ones that don't fit in your RAM.
24:26 So that is big.
24:27 It's written in C++, so it's going to be fast.
24:29 And it's written by Facebook.
24:31 Yeah, it's another one of the Facebook AI projects.
24:34 And it also runs on GPUs.
24:36 So it's another specialized AI system.
24:39 I feel kind of a little, I feel a little bit like I'm not entirely keeping up with the whole world of AI.
24:45 It's going so fast.
24:46 No, but now I get the name.
24:47 It's Facebook AI similarity search.
24:51 Yeah, there you go.
24:51 Right on.
24:52 Okay.
24:53 Yeah.
24:53 And who knows, maybe even when it auto tags you.
24:57 Who knows?
24:58 Maybe it's using this.
24:58 Maybe.
24:59 All right.
24:59 So another one that's interesting, sticking with the web for a little bit, is Mechanical Soup.
25:03 Yeah.
25:04 Actually, I hadn't heard of this before I ran across this list.
25:07 So this is neat.
25:07 I haven't either.
25:08 Yeah.
25:09 And that's why I like this little article project that we're covering.
25:12 Because I would say a good five or six of these.
25:14 I'm like, whoa, I'd never even heard of this.
25:16 Mechanical Soup is an automation library for interacting with websites.
25:22 So a little like Selenium, a little like Requests.
25:24 It'll keep cookies and send them around.
25:27 It'll follow redirects and interact with links and forms and all kinds of stuff, which is pretty awesome.
25:32 Yeah.
25:32 I want to give sort of notable mention as well to another one from Kenneth Wright's here called Requests HTML, which is somewhat similar.
25:41 So this is Mechanical Soup, like Beautiful Soup.
25:44 And Requests, you know, everyone knows what Requests is.
25:47 Well, Kenneth Wright's created another project called Requests HTML, which kind of merges Beautiful Soup and Requests as well.
25:53 So they're in the same space.
25:55 Yeah.
25:55 And, you know, if something goes wrong, you can get an exception.
25:59 But at least you can make them better, right?
26:01 Yes.
26:02 With better exceptions.
26:03 What's that?
26:04 The better exceptions is just it's a you kind of have to modify your code a little bit to make use of these.
26:10 But it intercepts the exception process so that you're the output, the tracebacks from your exceptions are easier to read and prettier.
26:18 There's colors in there and it tells you what values are and it kind of points the value to the variable.
26:24 And actually, it's kind of fun.
26:26 It's a neat thing to check out.
26:28 Yeah, it basically creates little like lines mapping parts of the code.
26:32 And one of the things that's actually super cool, if you look at the GitHub screenshot there, when it shows you the error, do you see, Brian, how it actually shows you the values of the functions that the values that were passed to the function?
26:47 That is so incredibly cool.
26:49 So you'll say this function was called and it crashed.
26:51 And not only does it just say, too bad it was on this line and color it in like indented, but like if it has a say, here's a function called deep and it takes A plus B and it'll have little visual lines going A is 2 and B is 15 in this crash.
27:06 Like that is awesome.
27:07 Yeah.
27:07 And it's even though it'll even go back a little bit and interpret things beforehand.
27:12 So I'm not sure how this is doing it, but it's pretty cool.
27:14 It's definitely cool.
27:15 It's definitely better, isn't it?
27:16 Yeah.
27:17 Yeah.
27:17 For me, it's similar to most of my, a lot of time I'm in the testing world and pytest does a lot of this stuff for you also.
27:24 It isn't as pretty with the colors and everything.
27:27 Yeah.
27:27 Quite cool.
27:28 Anyway.
27:28 So have you heard the saying that if you have a problem that you solve with regular expressions, then you solve it with regular expressions.
27:36 Now you have two problems.
27:37 Yeah.
27:38 This next one is meant to kind of make that go from one to zero, not one to two.
27:44 Tell us about it.
27:46 One to zero.
27:47 I don't get that.
27:48 Well, you have a problem and it's solved rather than I had a problem.
27:51 Now I have two problems.
27:52 Now you have two problems.
27:53 So it's flash text.
27:55 And it's a very focused solution for searching and search and replace and things that you would often use regex for and finding words within sentences and grouping them into.
28:07 You can have a set of phrases that all kind of phrases that all kind of mean the same thing.
28:12 If you want New York and big apple to mean the same thing.
28:15 You can search them together.
28:16 You can search them together.
28:16 And it's like really, really fast.
28:19 Like if you look at the link that will conclude, it has some graphs on a search size compared to regex.
28:26 And it's kind of incredible.
28:28 Yeah.
28:28 It's really nice.
28:29 And so you can say it'll take like the sentence.
28:33 I love big apple and, you know, the big apple and the Bay area or something like that.
28:38 But if you've told it big apple is a stand in for New York and you ask, Hey, what keywords are here?
28:43 It says New York and Bay area.
28:44 Or you could also put San Francisco, right?
28:46 Yeah.
28:47 So, so quite cool.
28:49 And it's a way to sort of normalize text data for various things people might say.
28:53 I like it.
28:54 Yeah.
28:55 It's super simple and you don't have to write regular expressions.
28:57 So that's good.
28:58 Yeah.
29:00 I'm not really afraid of regular expressions, but yeah.
29:03 Anyway.
29:04 Yeah.
29:04 I'm not terribly afraid of them, but they're not the first thing I'd jump for.
29:06 Okay.
29:07 So I find dates in Python to be surprisingly not obvious.
29:13 How about you?
29:13 Well, they're really easy until they're not easy.
29:15 Exactly.
29:16 You're like, wait a minute.
29:17 That one has a time zone in it and that one doesn't.
29:19 You're done.
29:20 Too bad.
29:20 Good luck with that.
29:23 There's a lot of projects in Python to deal with, deal with date time.
29:27 And Maya is one that is, is from Kenneth Reitz.
29:32 Yeah.
29:32 And so, so it's a for humans application.
29:36 Yeah.
29:37 People feel better when whatever their project that they're using, like request HTTP for humans,
29:43 right?
29:43 So this is date times for humans.
29:44 Quite nice.
29:45 So if you're working with date times, it has a lot of, a lot of cool features and, and simplifies things around date times.
29:53 Some of the slang features are kind of fun.
29:55 So you can say, do things like give it a date and say a week ago or, and have it generate things like those sorts of slang versions of words.
30:05 And so interacting with putting out text, you don't want to use JavaScript.
30:17 You want to keep it on the Python side.
30:19 Maya is a good choice.
30:20 But anyway.
30:22 Yeah.
30:23 Yeah.
30:23 It's cool.
30:24 Yeah.
30:24 It's cool.
30:25 So you can say like slang time and it'll say that's, you know, 23 hours from now, or that's tomorrow, or it's yesterday, which is a real nice way to not be overly precise.
30:32 If you want to just put that on like a forum or something to that effect.
30:35 This portion of talk Python to me is brought to you by Cloudbolt.
30:40 Friends don't let friends violate PEP 8, nor do they let them spend their days in an unfulfilled work environment.
30:46 Good news.
30:47 Your friends at Cloudbolt want your help developing their state-of-the-art cloud management software.
30:52 Built with Django and ranked as the number one product of its kind, Cloudbolt is looking for talented engineers of all types.
30:59 Located in beautiful Portland, Oregon, Cloudbolt is an hour from the Pacific Ocean and Mount Hood.
31:04 You're not in Portland?
31:05 Not a problem.
31:06 Cloudbolt offers a relocation stipend to the Pacific Northwest and is also hiring solution engineers from everywhere around the globe.
31:13 Whether you're interested in containers, hypervisors, or just writing clean performant Python code, Cloudbolt would love to hear from you.
31:20 Visit talkpython.fm/Cloudbolt for more information.
31:24 That's talkpython.fm/Cloudbolt.
31:27 So I think this next one is right up your alley, Brian.
31:31 Really?
31:32 I do.
31:33 I do.
31:34 I'll take it for you, but I think it's up your alley.
31:37 So I don't know how to say it.
31:39 Mimesis?
31:39 Mimesis?
31:41 I'm going to go with mimesis.
31:42 I don't know.
31:42 So it's another one of these fake.
31:43 It's another one of these faker libraries.
31:46 So the idea is you can go and say, I would like to create a person object.
31:50 And you can ask, what's their occupation?
31:51 How old are they?
31:53 You know, what's their name?
31:54 And you can tell things like, please answer me in English or German or whatever.
31:59 And it will basically generate fake test data.
32:02 So you could, you know, create a fake database and put it in a SQLite file, then use that
32:09 for testing or things like that.
32:10 So pretty cool.
32:11 Oh, yeah.
32:11 That does look neat.
32:13 And it looks like they have a page on like, well, why am I using this versus something else?
32:17 So they have a comparison to other libraries.
32:20 So it's good when people are trying to decide.
32:23 Yeah, it has a cool function called identifier.
32:25 And you can give it a mask, just like number, number, number, dash, dash, number, number,
32:29 slash, number.
32:29 And it'll like create one.
32:32 So if you need, say, like social security numbers or something else like that, it'll,
32:37 it's really easy to generate those.
32:38 Quite nice.
32:39 Yeah, I could see where that'd be useful.
32:41 Neat.
32:41 Yep.
32:41 So this next one is called open paperless for scanning documents.
32:47 I know, I don't know anything about this.
32:48 Tell me about that one.
32:49 Well, so this is a, I didn't know about this before reading this.
32:53 So apparently there's a, a document management system called the Mayan EDMS.
32:58 So I'm guessing Mayan electronic document management system, probably for some reason,
33:05 there's open paperless is a, even though the Mayan EDMS is a, is an open project.
33:12 Also the interface, apparently at least some people don't like the interface.
33:15 So open paperless is a Python interface to this system and a simplified interface to it.
33:22 So probably only have concern with, for people that interested in that, but maybe I should be.
33:28 Yeah.
33:28 Well, it's, it's got a lot of possibility for the automate the boring stuff type of things,
33:32 right?
33:33 Like I'm so tired of being in this office and doing this.
33:35 Like, can I write Python to make my job better?
33:37 Yeah, definitely.
33:38 Right.
33:39 Like I don't use paper for anything.
33:40 I'm not sure it'd be any value to me, but I can see how it would be for others.
33:44 Yeah.
33:44 And like things like places where you have to keep signed, keep copies of signed contracts
33:49 and receipts and all sorts of, there's a lot of jobs where you have to keep at least the,
33:54 a scan of the physical version.
33:56 So that would be good.
33:57 All right.
33:58 This next one is a shout out to my, one of my absolute favorite TV series.
34:02 And it scares me to death.
34:04 Really?
34:05 So F society.
34:06 Okay.
34:07 That's the hacker crew from Mr. Robot.
34:10 Okay.
34:10 It means a couple of things.
34:12 It's a play on like that little arcade where they, they all hung out where the U and the
34:17 N fell off, but also, you know, the more obscene version of it as well.
34:21 But so this one is a set of tools for hackers.
34:25 If you're doing penetration testing or things like that.
34:29 So you can check out, this is on GitHub and you can go and grab it.
34:33 So if you say wanted to turn this loose against your code or your infrastructure to see what
34:38 would happen if somebody else did that, you might want to give that a look.
34:41 Yeah.
34:42 And hopefully the people that you're trying to protect from aren't using the same tools,
34:46 but you know, that's, that's one of those good thing, bad things sort of things, but yeah,
34:50 for sure.
34:50 Yeah.
34:51 And it turns out that a Python is a big hit with hackers.
34:53 It's actually an interesting article about like the growth of Python adoption amongst hackers
34:59 was like 77% over the last year or something crazy.
35:03 like that.
35:03 Well, they're a segment of the population and Python's growing in all segments.
35:07 So yeah, that's right.
35:08 It's just, maybe it's because of all the opportunities to do live coding.
35:12 It definitely could be.
35:15 So this, you can take your program and you can hook up a debugger to it and sort of step
35:20 through.
35:21 That could be like PDB or that could be PyJarm or something like that.
35:25 But this live Python one is a little bit more of a, I would like to sit back and watch how
35:32 my program works.
35:33 Right.
35:34 Yeah.
35:34 And I'm still kind of a little confused by this one, but it's a, it's an application that's,
35:39 so you have to, it sits on your desktop and yeah, you kind of watch as your program's running
35:45 to tracing sort of thing.
35:46 And then you can see lots of stuff going on inside.
35:50 Yeah.
35:50 So it says, it lets you basically watch your program run like a movie.
35:56 So you can say, go and I'll sit back and it'll show like the execution through your program,
36:02 as well as like a stack of variables, like a watch window of variables just on the side
36:06 there, which is, it's pretty cool.
36:08 Yeah.
36:08 Maybe you could just have it.
36:09 You could have that just running while you're at lunch and people think you're working while
36:14 you're.
36:16 I'm sorry.
36:16 I'm not, I'm not coming back.
36:17 I'm compiling.
36:18 Yeah.
36:18 I don't know.
36:20 It might be fun.
36:21 I think it's a good idea.
36:22 I saw there was some coffee cup that you can get that it'll like heat itself up at like
36:27 six 30 in the morning and to like start to steam before you get into the office.
36:31 So it looks like you're in early, you just stepped out.
36:33 So this can go along with that.
36:34 Yeah.
36:35 So I told you I was confused about PIPF, right?
36:40 Yeah.
36:40 Yeah.
36:41 Still, still confused.
36:42 And Hatch is also pretty awesome, but it also makes me confused because there's a
36:46 there's all these different ways of what time might work with stuff.
36:48 So Hatch is another package manager, virtual environment manager for Python, which is pretty
36:55 cool and on our list.
36:55 Yeah.
36:56 And it also like they're taking over lots of other stuff too.
36:59 So it, it does things like start a project and like cookie gutter that kind of does in
37:04 it.
37:04 It also does things like push up to PIPI and, and a whole bunch of other things.
37:10 Right.
37:10 It has pytest support.
37:11 Yeah.
37:12 Yeah.
37:12 I don't have any issues with all the tools by themselves.
37:15 So I'm still, yeah, I don't, I don't think I need this, but you know, but a lot of people
37:20 use it and like it over other things.
37:22 Yeah.
37:22 It's cool.
37:23 And I think what this really means that there's all these different ways of doing this stuff.
37:27 It's like, it's just not really totally nailed down.
37:30 Like I recently interviewed the folks around the Python language summit, which is where the
37:36 core developers get together.
37:37 And one of, one of the topics at the core developers meeting in 2018 was virtual environments.
37:44 Do we need them?
37:47 Why are they so hard to teach?
37:49 Can we make them simpler?
37:50 Right.
37:51 I'm telling you, this is just like the fact that there's all these different solutions,
37:54 I mean, it's just not quite a solved problem.
37:56 So I guess that's, you know, it's good that people are trying to solve the problem.
37:59 Yeah, definitely.
38:00 This next one that came up is, I guess if you're in the right space, it'll be useful.
38:05 I'm not totally entirely sure, but number 24 is tangent, which is, it does source to source
38:12 debuggable derivatives.
38:13 Sure.
38:14 In pure Python.
38:14 Why not?
38:15 As in, you know, DYDX.
38:17 Yeah.
38:19 The first derivative of a thing.
38:22 So anyway, it's, if you have to do numerical differentiation, Python, it's pretty cool.
38:27 I probably don't want to say more than that about this one.
38:29 Sure.
38:29 So previously we had profit.
38:30 Did you foresee that Clairvoyant was coming?
38:33 Yeah, I knew that.
38:35 Because I wrote it in here, in the list.
38:39 So Clairvoyant, which is like kind of an awesome name for a project.
38:42 It's a software designed to identify and monitor social and historical cues for short-term stock
38:50 movement.
38:50 So it's, oh yeah, it's like kind of like profit, but focused on stocks.
38:55 I'm guessing.
38:56 Yeah.
38:56 Yeah.
38:57 Nice.
38:58 Yeah.
38:58 For all the algorithmic traders out there.
39:00 Here you go.
39:01 One that is pretty promising is called Monkey Type.
39:05 And that will come from Instagram, I believe, right?
39:07 Yeah, that's from Instagram.
39:09 So we have mypy, we have Monkey Type, and a couple of these other systems that are out
39:16 there trying to take code annotations and help us either evolve or better understand our code
39:21 or lent them to make sure they're correct based on their typing, right?
39:24 Yeah.
39:24 And so this one's kind of a runtime thing that it's, so if you, if you're not sure how your
39:29 code is being used, it can take a look at your, at how it's being used in runtime and
39:34 tell you what the types are.
39:36 What's really interesting is it'll generate a stub.
39:39 You know, the stubs, like it might say def add a colon int, b colon int, goes to int, and
39:46 then just dot, dot, dot instead of an implementation.
39:49 And then Python itself and mypy and PyCharm and whatnot can use that to actually validate
39:55 your code.
39:56 So it doesn't even have to modify your code.
39:58 It can generate these sort of parallel side type definition files, these stub files, and
40:04 put it on a type shed.
40:05 It'd be pretty cool.
40:06 Yeah.
40:06 And I think it might be kind of fun to use as a, just to, to go over some code to see
40:11 if what you think you're doing is really actually how it's being used.
40:15 Right.
40:15 And it's based on how it works at runtime.
40:17 So it looks at your code and says, well, every time you call this function, you pass an int.
40:20 So that's getting a colon int put on it right there.
40:25 Yeah.
40:25 You thought it was a string.
40:26 It's not.
40:27 It's an int.
40:27 No, it's an int.
40:28 That's why it's never equal to the string.
40:30 So, and you can even say, okay, do that and apply those back to my code and I'll put Python
40:37 three.
40:37 Yeah.
40:38 Annotations.
40:38 It'll rewrite your code that has no annotations with annotations guessed from runtime behavior.
40:44 That's pretty awesome.
40:44 Yeah.
40:45 That's nice.
40:45 And then you can just diff it and see what it does and whatever.
40:49 Yeah.
40:50 And then we have, there's so much stuff happening on the space.
40:52 These are not, this next year are not really on the list.
40:55 But we have mypy, which we talked about, right?
40:57 And there's mypyc, which will take this code here that we're talking about and compile it
41:02 to C. Standard Python with annotations compiled to C automatically.
41:06 Okay.
41:07 I'm not sure how that helps me.
41:09 That's a new project coming from Dropbox, actually.
41:11 Okay.
41:11 Because compiled Python needs annotations?
41:15 No.
41:16 If you want to, let's say you want to write a C extension.
41:20 One thing you could do is write the C code, compile it, and then import it.
41:24 The other thing you could do is just say this module, I would like to run through mypyc,
41:28 and now it's a C extension.
41:29 Oh, okay.
41:30 Now I get it.
41:31 Yeah?
41:31 Yeah.
41:32 I'm slow.
41:33 I know you work at a place where they do C and C++, but not everyone necessarily wants
41:37 to write it, right?
41:38 So this will let you skip that or maintain all Python, but still get this equivalent of what
41:42 had happened if you had done C compilation.
41:45 Why are we even writing C anymore if we could just have this?
41:48 I know.
41:48 And the other thing I want to throw in there is Cython will also take this code and compile
41:53 it to C as well with new...
41:56 Now it just does the Python 3 type annotations, and it would make that work as well.
42:00 So you could take monkey type and get yourself into a place where either of those things would
42:05 work on it.
42:05 It'd be pretty cool.
42:06 Nice.
42:06 They all fit together.
42:07 Yes.
42:07 You know, I don't know how many people listen to Python bytes, but if they did, they have
42:13 to know we've been on a GUI trip, right?
42:15 Yeah.
42:15 With the help of a lot of people telling us stuff.
42:18 We're like, oh, there's four.
42:19 They're like, no, no, no.
42:19 Let me tell you.
42:21 Let's count the ways.
42:22 Yeah.
42:23 So there's lots of ways to do user interfaces in Python.
42:26 One of the interesting ones is Eel.
42:28 Yeah.
42:28 Which I'm amused by the name because I got to make the obvious pun.
42:31 It's...
42:32 Or the...
42:33 Just state the obvious.
42:34 It's an electric Python.
42:35 Like Electron, but with Python.
42:38 Get it, Eel?
42:39 I love it.
42:39 I love it.
42:40 The name is actually really awesome.
42:41 So for those who don't know, ElectronJS...
42:45 A lot of apps, probably one of the more notable ones is actually Slack, I believe.
42:50 I'm pretty sure Slack is certainly Visual Studio Code is an ElectronJS app.
42:54 Atom is an ElectronJS app.
42:55 Basically write in web stuff, HTML, JavaScript, CSS, and then run in on top of Node and embedded
43:03 Chrome.
43:03 So this lets you take Python and replace the Node side with it somewhat.
43:08 And it says it's for simple Electron-like apps, which is pretty cool.
43:14 So another one, speaking of listeners helping us out, that's pretty awesome, that I think
43:19 is more full-featured, is called Python Electron.
43:22 And I'm going to put a link to that in the show notes as well.
43:25 And there's actually some pretty cool interaction of here's how you write your Python code and use
43:33 zero MQ to communicate back and forth with the browser.
43:36 So pretty cool.
43:38 You can write just like standard Python and then you have an object and you just say,
43:43 this object is...
43:44 I would like to take this object and make it the API that my app can communicate with.
43:50 It's cool.
43:50 Yeah, neat.
43:51 I would say that was even surprising.
43:52 It was surprising.
43:55 And next up is Surprise.
43:56 So Surprise stands for Simple Python Recommendation System Engine.
44:02 The U and the R are silent.
44:05 A Python scikit...
44:07 Scikit's a noun?
44:08 A Python scikit for building and analyzing recommender systems.
44:11 Yeah, that's pretty cool.
44:13 So if you have any sort of e-commerce system or if you read this article, you might also
44:17 like that article.
44:18 Here you go.
44:19 Surprise lib.com, right?
44:21 Yeah.
44:21 Nice.
44:22 Nice.
44:22 So we talked about mechanical soup.
44:25 The other one that we have previously talked about on Python Bytes not long ago is something
44:29 called Gain, which is a web crawler, much like the other ones we talked about.
44:34 But this one is special because it's based on AsyncIO, which is really cool, and UVloop and
44:40 AIOHTP and things like that.
44:42 Yeah.
44:42 It's a web crawler framework thing.
44:44 Yes.
44:45 You basically give it, you know, here is, let's say, a URL.
44:49 Start here.
44:50 And then go actually find all the other URLs and crawl them.
44:54 So basically, if you wanted to create DuckDuckGo, start here.
44:58 Yeah.
45:01 We need another one of those.
45:02 That's right.
45:03 But if you want to go to a website and sort of explore all the links and start downloading
45:07 and processing that stuff, Gain is pretty awesome because it does it super, super low latency
45:12 and in parallel with AsyncIO.
45:14 And actually, so I like projects like this, not necessarily to make commercial products out
45:19 of them, but for your own thing.
45:20 So if you've got a large website that you're maintaining or a company website or your own
45:26 personal one or whatever, and you want to make sure things are working right, being able
45:30 to crawl it and then interact with, instead of having hooks, you've got a tool for web crawling
45:36 that you can hook other Python up to.
45:39 There's a lot of stuff you can do with that and having it do it quickly on maybe your
45:44 limited little CPU that you've got playing around.
45:47 I think it's neat.
45:48 Yeah, that's awesome.
45:49 So yeah, that's a really good example as well is if I've got a large website, maybe it's even
45:54 like a CMS or something where I don't necessarily control all the stuff that goes into it.
45:59 You want to make sure there's no broken links.
46:01 You can easily do that with Gain.
46:02 That'd be cool.
46:03 Make that part of your automated build.
46:04 All right.
46:05 The last one here is one of these automate the boring stuff type things.
46:09 It's not interesting to many people, but if you need it, you really need it.
46:13 So if you would like to interact with PDFs and get data out of them, then PDF tab extract is
46:22 for you, right?
46:22 Yeah.
46:23 And the, I mean, the article and the, the, the, even the read me on this show some kind
46:29 of amazingly horrible scans of documents.
46:32 They're not straight.
46:34 Oh, they are horrible.
46:35 Oh my goodness.
46:36 They're so bad.
46:37 Yeah.
46:37 And there's like, I can hardly read them.
46:39 Yeah.
46:39 You can hardly read them.
46:40 And yet this has, this is a way to OCR and extract data and then create data sets out of,
46:47 out of like scans of things with tables in them.
46:51 So one of those things of, if you need to, if you need to, if this is your job, yeah, automating
46:57 this is a good idea.
46:58 That is so awesome because normally what you could do with some of the tools for PDFs is
47:03 get the text represented in the file.
47:06 But this, these examples are not that these are, here's your tabular data just scanned from
47:12 an image.
47:13 Now get the text out of it.
47:14 Yeah.
47:15 Yeah.
47:15 Cool.
47:15 So I'm sure that's going to make someone's day.
47:17 Right.
47:18 So that's our, our top 30 from 2018, which is really based a little bit on slightly older
47:23 data, but it was fun to cover with you, Brian.
47:25 It definitely was fun.
47:26 and, similar feel is, Python bytes.
47:30 So if you, if you like this sort of a thing, we get to spend a little bit more time per
47:35 topic on Python bytes.
47:36 So head over to there and check us out there.
47:39 Yeah, absolutely.
47:39 That's a fun podcast for sure.
47:41 So do check that one out.
47:43 All right.
47:44 Before you go though, there's the two questions.
47:45 I always, always get to ask if you're going to write some code these days, what editor Python
47:50 code specifically.
47:52 PyCharm, always now has incredible pytest support.
47:56 And then I also got, I'm going to get this wrong, but I got, Oliver Best Walter keyed
48:01 me onto a project called like, power mode or something.
48:06 And, when you, when you type it's like sparks and fire comes out and it's just a blast.
48:12 So I'm using that all the time now.
48:14 So you want to feel powerful.
48:17 Like I'm kind of just low energy this morning.
48:20 All right.
48:20 Yeah.
48:20 Power mode, baby.
48:21 It's all.
48:22 When you, when, when you copy and paste a chunk of code also, or cut a big chunk of
48:26 code, it pops up like a bam, like a, on comics.
48:30 it's neat.
48:31 Oh my gosh.
48:32 I have to find this.
48:33 You're going to change my, the way my, my, coding works.
48:38 This is going to be bad.
48:39 I had to turn off the flames and the shaking of the screen.
48:42 Cause I could, it can't work like that, but the sparks, I can, I can just work with those
48:46 sparks.
48:47 And so that's pretty excellent.
48:49 Normally I would ask you for a notable PI PI package, but we literally just covered like
48:54 35 PI packages.
48:56 Definitely.
48:56 So I think we're good.
48:58 I think we're good on that one, but let me swap that one out.
49:00 Just let, why don't you tell people about testing code, your other podcast, which you didn't give
49:04 a shout out to yet.
49:05 Oh yeah.
49:05 I also do another podcast called testing code.
49:08 That's a test and code T a two.
49:12 I can't spell today.
49:13 T E S T A N D C O D E.F.
49:16 That's not that FM.
49:17 Why am I doing that?
49:18 It's testing code.com.
49:20 That's it.
49:20 Yeah.
49:21 We cover all bunch of stuff.
49:22 We don't just do testing and cover a lot of other things too.
49:25 I know that we already have talk Python, but I do a little bit different take on things
49:30 and it's fun.
49:31 And I'm ramping things up.
49:32 We're doing weekly, weekly podcasts for the rest of the year.
49:35 That's awesome.
49:36 And you've had some pretty notable folks on there, so that's good.
49:38 Keep it up.
49:38 Thanks.
49:39 All right.
49:39 Well, hopefully people have found a couple of things that really apply to what they're
49:43 doing that they maybe hadn't heard of.
49:45 I know I had when I went through this.
49:46 Yeah, I did too.
49:47 It was a surprising.
49:49 It was very surprising.
49:50 My clairvoyance wasn't good.
49:52 My prophecies were not.
49:53 A lot to gain.
49:54 We're going to stop now.
49:55 Oh, sorry.
49:56 Oh my gosh, there was a lot to gain.
49:58 All right.
49:59 Let's just leave it there, Brian.
50:01 Thank you so much for coming.
50:02 Bye.
50:02 Thank you.
50:03 Bye.
50:03 This has been another episode of Talk Python to Me.
50:07 Our guest on this episode was Brian Okken, and it's been brought to you by Linode and Cloudbolt.
50:12 Linode is bulletproof hosting for whatever you're building with Python.
50:16 Get four months free at talkpython.fm/Linode.
50:21 That's L-I-N-O-D-E.
50:22 Spend your work time fulfilled.
50:25 Write Python and Django code at Cloudbolt, developing their state-of-the-art cloud management software
50:29 in beautiful Portland, Oregon.
50:31 Visit talkpython.fm/Cloudbolt to join the team.
50:36 Want to level up your Python?
50:38 If you're just getting started, try my Python jumpstart by building 10 apps or our brand
50:42 new 100 days of code in Python.
50:44 And if you're interested in more than one course, be sure to check out the Everything Bundle.
50:48 It's like a subscription that never expires.
50:50 Be sure to subscribe to the show.
50:53 Open your favorite podcatcher and search for Python.
50:55 We should be right at the top.
50:56 You can also find the iTunes feed at /itunes, Google Play feed at /play, and direct
51:02 rss feed at /rss on talkpython.fm.
51:05 This is your host, Michael Kennedy.
51:07 Thanks so much for listening.
51:09 I really appreciate it.
51:10 Now get out there and write some Python code.
51:12 I'll see you next time.
51:32 Thank you.