Brought to you by Michael and Brian - take a Talk Python course or get Brian's pytest book


Transcript #282: Don't Embarrass Me in Front of The Wizards

Return to episode page view on github
Recorded on Tuesday, May 3, 2022.

00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.

00:05 This is episode 282, recorded May 3rd, 2022.

00:11 I'm Michael Kennedy.

00:12 And I am Brian Okken.

00:13 It's great to have you here, Brian. It's just us, just the two of us.

00:16 Yeah, just like old times.

00:17 I know, but we have our friends out in the audience, so we're not entirely alone.

00:22 It's great.

00:22 So let's kick it off.

00:25 I know you have a particularly exciting announcement.

00:29 It's a very important topic to cover here.

00:31 So let's go do it.

00:33 Okay, so PyScript.

00:35 So this was an announcement at PyCon US by Anaconda's CEO, Peter Wang, during a keynote.

00:43 I wasn't there, but everybody was tweeting about it.

00:46 So it almost felt like I was there.

00:49 But I haven't seen the presentation, so I can't wait till that goes online.

00:55 I know.

00:57 Are the videos, I have not seen the videos for the presentations at PyCon out yet.

01:01 Are they out yet?

01:02 And I just missed it?

01:03 I haven't looked.

01:04 Is my YouTube broken?

01:05 It should be full of this stuff.

01:07 Like, what's up with, is it supposed to be next day or something?

01:11 I don't know.

01:11 I know, I know.

01:12 Anyway.

01:13 I would have loved to live stream it, but I didn't see an option.

01:15 So anyway, I'm looking forward to watching this one in particular when it comes out, because

01:19 this is big news.

01:20 So PyScript is Python in the browser.

01:22 So what does that mean?

01:24 It is built on top of Pyodide, which is a port of CPython based on WebAssembly.

01:29 I'm pretty sure we've covered Pyodide before.

01:32 So this is a pretty neat thing.

01:34 And one of the things that this, so the PyScript.net, you go to it, it's got a little, it's kind

01:40 of actually, it's like hype and it sounds neat.

01:43 And you can do Python in the browser.

01:45 Neat with the PyScript tags.

01:46 But what does that mean?

01:48 So there's a, if you go down to the bottom, there's a GitHub repo that you can go look

01:53 at.

01:53 This is what I suggest.

01:55 And this will talk about, there's a getting started guide.

01:58 But what I did is just followed this.

02:02 I cloned the repo and then I went in and did the, into the JavaScript area and then did NPM

02:08 install and then did this dev run, run dev thing.

02:12 So this only take me like five minutes to get this far.

02:16 And, and what you have is you've got one of the things that it has is it has an examples

02:21 folder and you can just open this up now in your local, your local browse, local host.

02:26 And there's all these cool demos.

02:28 Like there's a, a REPL where you can just do, it's kind of like a Jupyter where you can

02:33 say like X equals three.

02:35 Let's do this.

02:36 And then X.

02:37 And then if I do shift enter, it evaluates it.

02:40 How neat is that?

02:41 That's pretty neat.

02:41 That's awesome.

02:42 Yeah.

02:43 To do app here.

02:45 So make sure you listen to our podcasts, go buy Python testing with pytest.

02:49 We'll check that.

02:50 Cause we know you already bought that.

02:51 So, and then there's an example with D3 graphics.

02:56 This is neat.

02:57 I don't think I've ever done this.

02:59 There's an Altair example.

03:00 And this is pretty fun.

03:02 Cause you click around and it changes the above.

03:04 It's like an interactive thing.

03:06 This is fun.

03:07 I, we, we use Altair with a project at work.

03:10 So this is neat.

03:11 The Mandelbrot set.

03:13 So there's some code.

03:14 So all of this code is in the repo.

03:15 So you can look at the examples and look exactly how the code is done.

03:19 There's a HTML file and a Python file for all of these.

03:22 So you can check it out.

03:24 Actually, I don't know about the Python thing.

03:25 It's a, it's, it's HTML and Python within the HTML code embedded.

03:30 So there isn't a separate file, but you have, you can do imports and all this sort of stuff

03:34 too.

03:34 Oh, I went too far, but I wanted to bring up, there's also an article that we're going

03:39 to link to in the show notes that is called, PyScript, unleash the power of Python

03:45 in your browser.

03:45 this is by Eric Lewis Lewinson and, it runs through it's, it's a pretty interesting,

03:52 a little quick read of what it is.

03:54 If you're not familiar with, WebAssembly and pyodide.

03:57 So it's nice.

03:59 What do you think, Michael?

04:00 So excited.

04:01 I am very excited.

04:02 You know, there's been progress on the WebAssembly plus Python side on several occurrences that

04:10 were, they give you a sense of what's possible, but they didn't give you a thing to build with.

04:15 You know what I mean?

04:16 Yeah.

04:16 So for example, pyodide is awesome, but it's kind of like, well, if I want to sort of host

04:21 a Jupyter kernel in my browser, like I can, I can kind of do that.

04:25 Right.

04:26 the WebAssembly Python itself is great, but it doesn't specify a way to have a UI

04:32 of your webpage interact with Python.

04:34 It's just, oh, you could execute Python over here.

04:36 Well, like, and then what, you know what I mean?

04:38 Which is, which is still good, but there's not something where like, I can have a button

04:43 on there that like wires up to this thing in Python.

04:46 And I can have this list that binds in that way and so on.

04:49 And this looks like we might be there.

04:53 Like one of the things they talk about on the page is not just running Python in the browser

04:58 and the Python ecosystem, as you pointed out, but really importantly, two more things, Python

05:03 with JavaScript, bi-directional communication between Python and JavaScript objects.

05:07 Yeah.

05:08 So you can wire into like events on the page and other, DOM type of things.

05:13 Yes.

05:13 And then a visual application development ties in with that with, use readily available

05:19 curated UI components, such as buttons, containers, text boxes, and more.

05:22 Oh yeah.

05:23 Yeah.

05:24 Yeah.

05:25 I mean, like these are just a little quick examples, but I'd love to see some, some,

05:28 bigger examples of things like that.

05:30 Like, being able to connect, it, you know, yeah.

05:34 JavaScript interaction with, stuff on, on the Python side.

05:37 That'll be neat.

05:38 Yeah.

05:39 It's weird to see Python written just straight in the browser, you know?

05:43 Yeah.

05:43 Like here you have like angle bracket, pi dash script, and then just import anti-gravity,

05:48 anti-gravity dot fly.

05:49 Like, wait, what?

05:51 Well, so this, this is a good example.

05:53 I, I picked this example for one is because it does, it does do an import.

05:57 So this, it, there's like a path thing you see, you set up.

06:00 So you can put code, you can put code, all your code doesn't have to be in HTML.

06:04 It can be in, in a Python file.

06:07 So you can debug it there, which that's where you want to debug it.

06:10 And then you can import it and call it within Python.

06:12 And so this is probably more where I would use it is, putting most of my code somewhere

06:17 else.

06:17 And then.

06:18 Yeah.

06:19 That's what I want to see.

06:20 I would want to see just Python files and just, effectively a script tag for it.

06:25 I mean, you probably, maybe you can't do it directly as a script tag, but you could do,

06:29 you know, bracket, high script, and then just import and run.

06:32 Right.

06:32 Yeah.

06:33 So the point, basically.

06:34 I haven't looked at this before.

06:35 So the anti-gravity.py that is, bringing in is bringing in some pyodide stuff and,

06:42 to be able to work it.

06:43 So I'm seeing some from, doc, this is Python code from document or sorry, from JS import

06:50 document.

06:51 Yeah.

06:52 And set interval.

06:52 And so those are the things you do there.

06:55 let's see.

06:56 Are there any, any callbacks?

06:58 I don't see any callbacks there.

07:00 Oh yeah.

07:00 Yeah.

07:00 This set interval as a callback self.move when the interval, the JavaScript interval

07:04 fires.

07:05 So under, under fly, that is, hooking into a timer there.

07:09 Yeah.

07:10 Timer callback.

07:10 So we should check that out.

07:11 So where's, where's that?

07:12 so the, I should have done this ahead of time.

07:17 The anti-gravity is not linked to, but I'll just like bring it up.

07:20 Anti-gravity based on.

07:23 Wow.

07:25 Oh my gosh.

07:26 This is so amazing.

07:27 People have to do this.

07:28 Oh, this is cool.

07:30 We all know import anti-gravity and we've got to know the XKCD that comes up, but yes,

07:35 this is so good.

07:37 It's great.

07:37 It's alive.

07:38 It's not just, is the person who, who says, how are you flying?

07:41 The person says, I'm playing with Python.

07:42 Like that thing is alive and cruising around.

07:44 I love it.

07:45 Yeah.

07:45 And that's based on the callback, right?

07:47 That's, that's calling Python based on the set interval, timer callback in JavaScript.

07:51 Yep.

07:51 Yeah.

07:52 And, and to me, that has been the missing piece.

07:55 Like how do I wire up?

07:56 It's like great if I can just execute Python and have, you know, like a number of things.

08:00 But what I want is view and Python or reactive.

08:03 I want to build the UI and Python and just not deal with JavaScript and be able to do so

08:08 many more things on the front end.

08:11 I mean, this opens up stuff like, progressive web apps, which could be really amazing for the Python space.

08:19 Right?

08:19 Like I'm here in Vivaldi.

08:21 If I go to my email client, just in the browser, I can right click and install.

08:25 It gets its own app that works offline.

08:28 It like pull this data down into local DB or whatever.

08:30 Theoretically you could do this, right?

08:32 You could pull down the CPython WASM.

08:35 You can pull down the 5k I script file and then just somehow use JavaScript to Python to talk to local

08:43 DBs.

08:43 I mean, what if we get like ORMs in Python going, oh yeah, we have one of our backends is the web

08:49 browser, local DB.

08:50 Yeah.

08:51 Or something that would mean, this is great.

08:53 I would love, I'm very excited for where this might go.

08:56 Sky's the limit, right?

08:57 That's what that little flying character is saying at least.

09:01 Yeah.

09:01 Okay.

09:03 So, well, good job Anaconda folks.

09:05 And I believe this was Fabio and crew.

09:08 So really, really nice.

09:09 That was super psyched.

09:10 How am I going to follow that one up, right?

09:11 I mean, come on.

09:12 It's just, I'll, I'll give it a try.

09:15 No, I've got some good items.

09:17 They're just not flying around.

09:19 Amazing Python in the browser.

09:21 Amazing.

09:21 So Bloomberg has a lot of Python going on and Bloomberg actually has a pretty cool,

09:28 like tech engineering blog where they talk about some of the stuff going on at Bloomberg,

09:32 right?

09:33 Yeah.

09:33 One of the really good articles I read from this, from them was about how to really set

09:39 up and run micro whiskey in production.

09:41 And it was like this huge, long, deep list of like, here's a bunch of flags you probably

09:45 never thought about.

09:46 And here's why you should care about them in Python.

09:48 Really good stuff.

09:49 So they're back with another thing that they use that is cool called memory, like memory,

09:56 but memory.

09:57 It is a memory profile for Python.

10:00 So if you want to understand the performance of your application, especially around memory,

10:06 here's a pretty neat tool.

10:09 Now, let me just get that right out of the way before I forget.

10:11 Linux only.

10:13 So if you're not using Linux, just close your ears.

10:15 No, just kidding.

10:16 Like you could all, if you're on Windows, you could just run your Python app under WSL and

10:21 then profile it and then go back to running on Windows.

10:23 Or if you're on Mac, just do a VM or something, right?

10:26 Anyway, it only runs on Linux.

10:28 But because Python is so similar across the platforms, I'm sure you could just test your

10:33 code there, even if that's not the main use case.

10:35 All right.

10:36 So you get all these different visualizations of memory usage.

10:39 It can track allocations for Python code in native extension modules, like NumPy or something

10:45 like that.

10:46 And even within CPython itself.

10:48 So you get sort of a holistic view of the memory, which is pretty awesome.

10:52 Yeah.

10:53 And it'll give you different memory reports.

10:55 We'll talk about them a little bit.

10:57 And you can use it as a CLI tool, just like kind of like time it or whatever.

11:01 You can just say memory run my app.

11:03 And then when your app exits, it's like, and here's what happened.

11:07 One of the things that's super challenging about complicated applications and web apps

11:12 and stuff is you want to focus on a particular scenario.

11:15 And there's so much overhead of like startup and other things.

11:19 So for example, if I just want to profile a FastAPI API call, if I just say run it up

11:26 and then I go hit that API, all of the infrastructure starting up UVicorn and FastAPI and Python, it

11:33 just like, it just dwarfs whatever that little thing is usually.

11:36 So there's also a programmable API that says, you know, you could create like a context manager.

11:41 Like, I don't know if it actually is that way, but you could certainly build it if it doesn't exist.

11:44 Like with memory profile here and just do a little block of code and then get an answer,

11:49 which I think is pretty neat.

11:50 Alvaro asks if it accepts an entry point.

11:53 I suspect you could call an entry point because you just do the run on the command prompt.

12:00 So you could probably pass it over.

12:02 Whatever you run.

12:02 Yeah.

12:02 Yeah, exactly.

12:03 But the problem is there's still like the startup of just CPython itself, right?

12:08 Like I always find just the imports and all that is just way more overhead than, you know,

12:14 it clutters it up.

12:15 Anyway, let's hit some notable features of Memray.

12:18 It traces every function call as opposed to sampling it.

12:22 So instead of just going every millisecond, what are you doing now?

12:25 What are you doing now?

12:26 Let's just record that, right?

12:27 It actually exactly traces so you don't miss any functions being called, even if they're brief.

12:33 It handles native calls in C++ libraries.

12:36 So the entire stack is represented in the results, which is pretty cool.

12:40 That's pretty neat.

12:40 Yeah, that's pretty dope.

12:42 Apparently it's blazing fast.

12:44 There's some kind of character.

12:45 I think it's a race car there.

12:46 It causes minimal slowdown in the app if you're doing Python tracing.

12:51 If you do the native code stuff, it's a little bit slower, it says, but that's optional.

12:54 You get a bunch of reports.

12:55 We'll see those in a minute.

12:56 It works on Python threads.

12:58 So you can see, I know all these people watching, but you check out the webpage.

13:02 There's a little thread, like a sewing thread emoji.

13:05 Or a Twitter thread.

13:06 Yeah, dude.

13:09 So it also works on native threads, like C++ threads and native extensions,

13:12 which it represents as an alien plus the thread icon.

13:18 I love it.

13:18 Alien threads, yeah.

13:19 Yeah, yeah, yeah.

13:20 So let's look over here real quick.

13:22 We'll look at just, I guess, the reporting, right?

13:24 I mean, the running is super simple, as I said.

13:26 Memory run Python file with arguments.

13:29 Or memory run dash M module with arguments.

13:32 These are the places you could put your entry point and so on.

13:35 And Dean, in the audience, says we've had a rich spotting.

13:39 Okay?

13:39 I haven't pulled that up yet, but very nice.

13:42 So there's different ways in which you can view it.

13:44 And the first one that I ran across, which is pretty interesting, if you're familiar with glances or you want to go old school, like top,

13:50 or one of these things you can run in just the terminal and get, like, not really with rich, not rich, not rich with top,

13:58 but rich output like glances, is you can run it in a live mode where, while it's running,

14:05 it'll show you what's happening with the memory.

14:07 That is so awesome.

14:08 That's pretty cool.

14:09 Yeah.

14:10 Yeah.

14:10 Yeah.

14:11 So instead of just showing you a memory graph, it's like, guess what?

14:13 We're running here right now with this many allocations and so on.

14:17 Yeah.

14:17 Like that looks super neat.

14:19 Yeah.

14:19 And if you've got something interactive, you can interact with it and watch the memory change then.

14:24 Yeah.

14:25 Yeah.

14:26 You can cycle through threads.

14:27 You can sort by total memory or its own memory of the, that's a common thing you do in profiling like this and all of the stuff it's called,

14:36 or just this method itself, sort by allocations versus memory usages, all kinds of stuff.

14:41 So that's really neat.

14:42 It will track the allocations across forks, as in process, sub process.

14:49 Oh, okay.

14:49 Why would you care?

14:50 Because multi-processing.

14:51 If you want to track some kind of multi-processing memory workflow, it'll actually do that.

14:56 Just you do dash, dash, follow fork, and it'll like aggregate the stats across the different processes.

15:01 Kind of insane.

15:02 Let's see if we can get down here.

15:05 You can do, they have the summary reporter, which is kind of a nice, just,

15:09 you know, this is probably what you would expect.

15:11 Flame graphs.

15:11 If I can get down here somewhere, it'll show like sort of the color and the width of these bars.

15:17 It'll show you how significant it is.

15:19 there's a nice tree version that'll show you the biggest 10 allocations.

15:23 And then a call stack sort of in and out with trees and like how much memory is being allocated in each one of those and so on.

15:30 That's nice.

15:30 Yeah.

15:30 This is a nice app, right?

15:32 Nice utility.

15:33 Definitely.

15:34 Cool.

15:34 Yeah.

15:35 Indeed.

15:36 Indeed.

15:36 Indeed.

15:36 So if you want to track down memory leaks or you're just wondering like,

15:40 why is my program using so much memory?

15:43 Fire it up.

15:44 Let it run for a while.

15:44 See what happens.

15:45 Yeah.

15:46 Cool.

15:46 All right.

15:47 Back to you, Brian.

15:49 Well, I want to bring up a, a pie test tool.

15:52 So, it was a, I, I have a recent, I've often used a pie test X dist, for parallel.

16:01 So X dist is a way you can just say that it's, it's, it's the one that I heard about first for running pie tests in parallel.

16:08 So you've got, you know, like tons of tons of unit tests, maybe, and you want to just speed them up.

16:13 you can throw them, throw a dash in for something like that at it.

16:17 and it'll, and it'll, it'll just throw them, and, and there was, I think it was Bruno Olivier,

16:34 suggested a couple of alternatives.

16:37 And one of them was pie test parallel, which, I, I, I know I've run across,

16:42 but I haven't played with it for a while.

16:43 So I tried it out and it's actually like really cool.

16:47 So one of the, one of the pie test X does does a lot.

16:50 One of the things it does is it not just, it's not just multi-processor,

16:55 but it can be on different actual different computers.

16:58 So you can launch them on.

16:59 Oh, nice.

17:00 Like grid computing almost.

17:01 Yeah.

17:02 You can SSH into different systems and have it run in parallel.

17:05 but that, you know, you don't, I don't usually need that kind of power.

17:10 the one thing it doesn't do is thread.

17:12 So it's, it's process based and pie test parallel does both.

17:16 So you can say, you can give it, you can give it, well, where we have, I'm going to go down to the examples.

17:24 So you can give it number of workers and it'll tell it to, that's how many,

17:29 processes it'll spin up or how many CPUs.

17:32 now you can also give it test per worker and then it'll run in multi-threading mode.

17:38 and you can give it auto on both of these.

17:41 And it's, this is extremely useful for, you have to, by default, this is turned off by default.

17:48 The, the, the features, if you just say workers equals five or something,

17:51 it won't do multiple threat, multi-threading.

17:54 And the reason is it, because you need to make sure your tests are thread safe.

17:59 and many are not.

18:01 So I tried it on a couple of my, even if they're isolated, they might not be thread safe,

18:05 right?

18:05 Yes.

18:06 that's, that's another level of consideration.

18:09 However, if there are, there's a lot of small, especially small, not really unit like system tests,

18:16 but a lot of unit tests are just testing a little Python code.

18:18 If you've got a part of that is a lot of projects, that's a big chunk of the test load.

18:23 So being able to do multi-threading is really nice, but you know, even with just multi-processing,

18:29 I tried this on a few different projects and there were like, I tried it on flask and the,

18:35 the, the parallel version using pytest parallel was like three times faster than the

18:43 ex-dist version.

18:44 So, so based on your, I, there's, there was another one that, Bruno mentioned,

18:50 but I think these two are really solid ex-dist and parallel.

18:53 So if you want to speed up your test run times, I would try both on your project and just see,

18:58 play with them.

18:59 And see, see which one's faster on, many of the projects I tried parallel was at least as fast or faster than

19:06 ex-dist.

19:07 So it's kind of nice.

19:08 Yeah, it's cool.

19:10 This looks great.

19:10 I like it.

19:11 And having your test run faster is always good.

19:15 Do you do anything crazy?

19:16 Like, do you set up your editor to auto run tests on file change or anything like

19:20 that?

19:20 sometimes, one of the things that I've always, I've done it a few times,

19:25 but it always makes me nervous.

19:26 I'm like, ah, just like it's unnerving to me that it just keeps running.

19:29 One of the things that I really like around that was added to PI test not

19:34 too long ago was, is stepwise.

19:37 So that's not really all the running it all the time, but, stepwise will,

19:42 and this would be a handy one to, to run all the time.

19:44 So what stepwise does is it takes, you can run all your tests in stepwise.

19:49 And when you run it again, it'll start at the first failing test because it assumes you're trying to fix

19:55 something.

19:55 It'll start at that and then run until it finds a failure.

19:59 So if you, if you haven't fixed this first failure, it'll just keep running that one until you fixed it and it'll go to the next one.

20:05 and, so I do that a lot while I'm trying to debug something.

20:09 and, and hooking that up with like an auto, like a watch feature.

20:14 There's a bunch of ways you can watch your code to, to do that.

20:17 yeah, it's fun.

20:19 Nice.

20:19 Very cool.

20:21 So let's do some real time follow up here.

20:23 First, Alvaro is being all mischievous asking, I wonder what would happen if I install both plugins,

20:29 both X, just in parallel.

20:31 I, you can, I don't know if I've, you can run them at the same time.

20:35 I should try.

20:36 I have it installed on like the flask one.

20:38 I ran it.

20:38 I installed both of them.

20:40 And then try it in both, but not at the same time.

20:42 I'll have to try the forks.

20:43 It's going to go so fast.

20:44 And then just going back to PyScript, there's like tons of excitement about PyScript.

20:49 Yeah.

20:49 Dale's excited.

20:50 Brandon's excited.

20:51 and David says, I hope someday I, I can say back in my day, you couldn't just learn Python.

20:57 You had to learn JavaScript too.

20:59 Yeah.

20:59 Indeed.

21:00 Indeed.

21:00 let's see.

21:02 So I got one more to cover that is going to be fun as well.

21:07 And this one comes to us from former, guest co-host, Michael Feigert, sorry,

21:14 Matthew Feigert.

21:14 And Matthew is a great support of the show.

21:17 It sends all sorts of interesting things in to help us out and good ideas.

21:22 And this is yet another one coming from the data science side of things saying,

21:27 you know, one of the things you have to do often in say a Jupyter notebook is go download a file off

21:33 of an API or just some link or S3 bucket or whatever.

21:36 And you want to process it.

21:37 And if you use requests while great, you end up making the request, verifying that it worked,

21:44 reading the stream into bytes, writing the bytes to a file, picking a file name and then using that file name to open it.

21:50 And then say, now you can process it.

21:52 Right.

21:52 Yeah.

21:53 So there's this thing called pooch, a friend to fetch your data files.

21:57 All right, pooch, go get, go get my files.

21:59 Like a little, a little, a friendly dog that also seems to hold a snake in its mouth.

22:04 So that's pretty cool.

22:05 Anyway, who wouldn't want a dog that can wrangle snakes to go help you with your notebooks?

22:10 Anyway, the idea is you can do all of what I described with requests.

22:15 You can do that in one line of code.

22:16 Oh, wow.

22:17 Yeah.

22:17 And you get other cool features as well.

22:19 So, it says, look, you can just make this one function call and it'll save it.

22:24 And it'll also cache your files locally.

22:26 So some of these files that data scientists especially work with are massive,

22:30 right?

22:30 You know, it's like a gig.

22:31 And every time you run the notebook, you don't want it to download the gig again.

22:34 You just want it to run more quickly.

22:36 So you can set up a location for it to cache it.

22:38 you can pass in a hash of the file to say, I want to get this file and I expect it to be this MD five or whatever the heck

22:47 the hash is that they're using so that you can be sure it doesn't change.

22:50 Right.

22:51 So if you're doing like reproducible data science, you say, what you do is you download this file,

22:56 then you apply this algorithm, then you get this picture.

22:58 Well, if the data changes, I bet the picture changes.

23:00 Right.

23:00 And so you can put it like a layer of verification that it's unchanged from the

23:05 last time you decided what it should be.

23:07 That's pretty cool.

23:08 You can do multiple protocols.

23:10 So not just HTTP, HTTPS, but FTP.

23:13 Oh my gosh.

23:14 S FTP.

23:15 Oh yeah.

23:16 It's what else.

23:17 Basic off.

23:17 It'll also automatically resolve DOIs, digital object identifiers, which are used in places like big share and Zen Zenodo.

23:28 And this is about the reproducible science.

23:30 Like here's that, here's the file.

23:32 And like, we've been assigned an immutable ID that we can always refer back to it.

23:36 So you can just say, here's the ID and it'll actually get the file and it'll even unzip and

23:39 decompress files upon download.

23:41 Neat.

23:41 Pretty neat.

23:42 Huh?

23:42 Yeah.

23:43 Yeah.

23:43 Pretty straightforward.

23:44 Let's, let me see if I can find an example of.

23:46 I love, I like the, the, the section of learning about it.

23:50 It's called training your pooch.

23:51 That's cute.

23:52 Oh, nice.

23:55 I love it.

23:55 Apparently it has progress bars.

23:57 Always download actions, logging, and you get multiple files, but the main use case is just file equals pooch.retrieve URL done.

24:07 That seems pretty nice.

24:08 Yeah.

24:09 That's great.

24:09 It's my data.

24:10 Here it is.

24:11 Oh, cool.

24:12 So Pamphill Roy on the audience says, Hey folks, funny.

24:15 We're adding this to scipy optional to have a scipy dataset sub module.

24:20 scikit image is using this as well.

24:22 I had no idea.

24:23 Very cool.

24:24 Thanks for the extra background there.

24:25 Cool.

24:25 Yeah.

24:26 But I think this is great.

24:27 In fact, I know it's sells itself.

24:30 It bills itself as being for data science.

24:32 I also like to download files sometimes and not go through five or six lines of code.

24:37 I could use this.

24:37 Yeah.

24:38 Yeah.

24:38 There's, there's a lot of stuff that data science people are doing that we can use in lots of other

24:43 fields.

24:43 So.

24:44 Indeed.

24:44 I do think that's actually one of the really interesting aspects of Python is we have so

24:50 many people from these different areas that it's not just all, you know, CS grads doing

24:54 the same thing.

24:55 Yeah.

24:55 Yeah, for sure.

24:56 All right.

24:58 Well, those are my items for today, Brian.

25:00 Nice.

25:01 I don't have any extras today.

25:05 Do you have any extra information in stuff?

25:07 I do.

25:08 I do have extras.

25:10 So this one I'm very, very excited about.

25:13 I have a new course that I just released called up and running with Git, a pragmatic UI based

25:19 introduction.

25:20 So I'm really excited.

25:22 I just released.

25:23 I haven't really even announced it yet, but I finished getting it all public and online

25:27 and turned all the GitHub repos public and all that stuff right before we jumped on the

25:31 call today.

25:31 And the idea is there are tons of Git courses.

25:34 So why create a Git course?

25:35 Well, I feel like so many of them are just like, okay, we're just going to work in the

25:41 terminal or the command prompt.

25:42 And you're just going to assume that like, that's the world of Git that you live in, like

25:47 kind of a least common denominator approach.

25:48 And while that, that is useful.

25:50 Like, I don't think that's how most people are working, right?

25:52 If you're in Visual Studio Code or PyCharm, like there's great hotkeys just to do the

25:57 Git stuff and see the history and whatnot.

25:58 And there's other tools like SourceTree and Power and others.

26:01 So it kind of takes this approach of like, well, let's take all the modern tools that give

26:06 you the best visibility and teach you Git with that.

26:08 So super fun.

26:10 Which GUI tools are you using then?

26:12 Which ones are you using?

26:13 Visual Studio Code.

26:14 Okay.

26:14 PyCharm.

26:15 SourceTree.

26:16 Okay.

26:16 Those are the things.

26:17 And so I've done a lot of work.

26:19 I've tried to take some of my experience from doing some work on YouTube where I was

26:23 experimenting with like setup and presentations and stuff.

26:27 And I think I have a really neat, polished experience for this course with like lots of

26:32 cool visuals and graphics and video and stuff.

26:35 So hopefully people really enjoy it.

26:37 Anyway, this is my extra.

26:38 I just sent this out to the world.

26:40 I'm pretty excited about this.

26:41 Nice.

26:42 Congrats.

26:42 Yeah.

26:43 Thanks.

26:43 Thanks so much.

26:44 You have no extras.

26:45 Does that mean you're ready for some humor?

26:47 Yes.

26:48 Always.

26:48 All right.

26:49 All right.

26:49 This one.

26:50 I chose this.

26:51 Honestly, I just chose it just because of the title.

26:53 So there's Robert.

26:57 Is this Robert Downey Jr. looking at somebody in like some kind of wizard situation?

27:02 Right?

27:02 Like.

27:02 Yeah.

27:03 This is like Endgame or something.

27:05 Okay.

27:05 Yeah.

27:06 I don't know the movie.

27:06 Like apparently I stopped watching movies at some point.

27:09 Now I don't.

27:09 I'm out of touch.

27:11 So anyway, the title is when your code stopped working during an interview or it could be

27:16 a demo presentation or whatever.

27:18 Like you want to, you want to tell us what this is about, what that's going on here?

27:21 So he's, he's, he's looking back at Banner.

27:25 So who's the Hulk?

27:26 He says, dude, you're embarrassing me in front of the wizards.

27:29 Yeah.

27:30 Because, yeah.

27:31 Because Banner wasn't able to become the Hulk.

27:33 So at the time.

27:34 Right, dude.

27:35 Don't, don't embarrass me in front of the wizards.

27:37 I just, I love to think of programmers as kind of like the modern day wizards.

27:40 Like we can think of things and then poof, they, they kind of come into existence.

27:43 Yeah.

27:44 It's good.

27:45 And also while working on that Git course, I had this pretty fun experience.

27:49 Like right while I was recording it.

27:51 Nice.

27:53 And I'm just sitting there and then.

27:55 Git was down.

27:56 How often does GitHub itself go down?

27:58 But no.

27:59 Oh no.

27:59 There's like an, the Octa cat is falling like with a 500 sign in its hands.

28:04 Toops.

28:05 Which of course made me.

28:07 I love the.

28:07 Redo that section of the course.

28:09 Yeah.

28:09 I like the expression on your face for that.

28:11 It's like.

28:12 Yes.

28:13 Exactly.

28:13 People seem to really like that tweet.

28:15 I'll, I'll put it in the show notes if people can check it out.

28:17 Anyway, dude, don't embarrass me in front of the wizards.

28:20 That's what I got for you.

28:21 Yeah.

28:22 Good.

28:23 Good, good.

28:24 Well, thanks.

28:25 Thanks a lot again.

28:26 It's a great show.

28:28 Yeah.

28:28 Sure was.

28:29 Thanks.

28:29 Thanks, Brian.

28:30 Thanks for everyone who came.

Back to show page