WEBVTT

00:00:00.001 --> 00:00:00.560
Hey, Brian.

00:00:00.560 --> 00:00:01.060
Hey.

00:00:01.060 --> 00:00:04.940
I see that you've come wielding a staff of mighty power.

00:00:04.940 --> 00:00:07.800
I was cleaning my office and I found the Python staff.

00:00:07.800 --> 00:00:09.920
So I'm like, I'm working this out for the show.

00:00:09.920 --> 00:00:12.200
Yeah, that was when we used to go to conferences.

00:00:12.200 --> 00:00:12.840
Do you remember that?

00:00:12.840 --> 00:00:14.340
Like people, they'd all get together.

00:00:14.340 --> 00:00:15.840
I think they might be making a comeback.

00:00:15.840 --> 00:00:16.780
I think so.

00:00:16.780 --> 00:00:19.760
I think I might be attending some conferences in the future.

00:00:19.760 --> 00:00:20.280
Awesome.

00:00:20.280 --> 00:00:20.840
So am I.

00:00:20.840 --> 00:00:21.520
I'm looking forward to it.

00:00:21.520 --> 00:00:22.640
Before we get to our topics,

00:00:22.640 --> 00:00:27.260
also want to say thank you to a new sponsor this week.

00:00:27.260 --> 00:00:29.640
Not totally new, but new for recent times.

00:00:30.160 --> 00:00:31.940
Compiler, the podcast from Red Hat.

00:00:31.940 --> 00:00:34.340
So awesome to have the support from Red Hat.

00:00:34.340 --> 00:00:36.880
We're going to be telling you more about them later.

00:00:36.880 --> 00:00:38.920
But Brian, let's just mix it up.

00:00:38.920 --> 00:00:39.620
Let's make it different.

00:00:39.620 --> 00:00:42.660
This is episode 308, recorded November 1st, 2022.

00:00:42.660 --> 00:00:43.620
I'm Michael Kennedy.

00:00:43.620 --> 00:00:44.660
And I'm Brian Okken.

00:00:44.660 --> 00:00:46.020
Let's do it.

00:00:46.020 --> 00:00:47.920
I did want to talk about PyCon.

00:00:47.920 --> 00:00:50.540
Yeah, so PyCon is coming up.

00:00:50.540 --> 00:00:52.040
So when is it?

00:00:52.040 --> 00:00:56.160
I wrote this down even so I could remember.

00:00:56.160 --> 00:00:58.320
It's April 19th to the 23rd.

00:00:58.640 --> 00:01:05.560
But we bring up PyCon US because the site just launched recently.

00:01:05.560 --> 00:01:07.120
So pretty excited about that.

00:01:07.120 --> 00:01:12.220
Linking to a blog post about the site launch and the call for proposals.

00:01:12.220 --> 00:01:16.260
So again, it's going to be, let's just hop over to the big one.

00:01:16.260 --> 00:01:19.080
It's kind of a cool look to it now.

00:01:19.580 --> 00:01:25.680
It's an homage to some of the old ones because there's, what's the 20th anniversary special?

00:01:25.680 --> 00:01:27.600
So it's some of the old pictures.

00:01:27.600 --> 00:01:28.700
So you can try to see.

00:01:28.700 --> 00:01:28.800
Oh, I see.

00:01:28.800 --> 00:01:30.120
So it's a bunch of tiles.

00:01:30.120 --> 00:01:34.020
And the different tiles are actually like the hero image or whatever.

00:01:34.020 --> 00:01:34.620
Yeah.

00:01:34.620 --> 00:01:35.440
From that year.

00:01:35.440 --> 00:01:37.760
Or bits of it or something.

00:01:37.760 --> 00:01:38.460
Yeah.

00:01:38.900 --> 00:01:40.780
It looks cool.

00:01:40.780 --> 00:01:45.300
So PyCon US is going to be April 19th to the 23rd.

00:01:45.300 --> 00:01:46.560
Well, that's when the talks are.

00:01:46.560 --> 00:01:47.540
It's longer.

00:01:47.740 --> 00:01:49.740
So there's tutorials ahead of time.

00:01:49.740 --> 00:01:53.700
And then there's hack days or whatever you call those afterwards.

00:01:53.700 --> 00:01:56.360
So if you can stay longer, awesome.

00:01:56.360 --> 00:01:58.820
But the talk part is the 19th through the 23rd.

00:01:58.820 --> 00:01:59.560
Salt Lake City.

00:02:00.340 --> 00:02:02.120
The site looks great.

00:02:02.120 --> 00:02:04.260
The call for proposals is up.

00:02:04.260 --> 00:02:09.320
And that's really kind of what I wanted to highlight is so people start thinking about your talks.

00:02:09.320 --> 00:02:15.580
And of course, yeah, we've got some more information about talks coming up later in the show.

00:02:15.580 --> 00:02:18.120
But the deadlines, what are the deadlines?

00:02:18.120 --> 00:02:21.880
So we've got the CFP just opened, just opened the 18th.

00:02:21.880 --> 00:02:25.120
And then it's through December 9th.

00:02:25.120 --> 00:02:27.500
So, but don't wait until December.

00:02:27.500 --> 00:02:28.960
Get those in early.

00:02:29.320 --> 00:02:30.320
So anyway.

00:02:30.320 --> 00:02:31.220
Yeah, excellent.

00:02:31.220 --> 00:02:35.160
I think I'm going to submit some because I kind of think I want to go to PyCon this year.

00:02:35.160 --> 00:02:36.700
I didn't go last year.

00:02:36.700 --> 00:02:39.200
Have you thought about it yet, Michael?

00:02:39.200 --> 00:02:40.540
Yeah, I've definitely thought about it.

00:02:40.540 --> 00:02:42.340
I'm very much considering going.

00:02:42.340 --> 00:02:48.200
You know, for me, it's like, is Talk Python going to get a booth and have like a bunch of presence there?

00:02:48.200 --> 00:02:53.040
In which case, going to the conference means hanging out at the booth for three days, which is kind of awesome.

00:02:53.040 --> 00:02:55.120
But also, it's like not exactly a conference.

00:02:55.120 --> 00:02:59.200
Maybe I'll go low key and submit a talk and then just like cruise around the hall.

00:02:59.300 --> 00:03:00.200
I haven't decided.

00:03:00.200 --> 00:03:00.660
Right.

00:03:00.660 --> 00:03:02.660
Do a bunch of podcast recording live there.

00:03:02.660 --> 00:03:02.840
Right.

00:03:02.840 --> 00:03:04.760
So there's there's tradeoffs to both, obviously.

00:03:04.760 --> 00:03:07.200
So I got to got to think about what I might want to do.

00:03:07.200 --> 00:03:10.080
Yeah, I think I'm going to submit some talks.

00:03:10.180 --> 00:03:17.540
One of the things I wanted to bring up with submitting talks is to not to do it because it's a good experience to submit a talk.

00:03:17.540 --> 00:03:22.280
Even if you don't get the talk, it's the process of going through that submittal process.

00:03:22.280 --> 00:03:27.480
I think it's it's it's a growing growth experience, even if even if it gets rejected.

00:03:27.480 --> 00:03:33.140
And don't feel bad because tons of people submit talks and they can't accept all of them, obviously.

00:03:33.440 --> 00:03:33.940
So, yeah.

00:03:33.940 --> 00:03:34.380
Yeah.

00:03:34.380 --> 00:03:35.060
Absolutely.

00:03:35.060 --> 00:03:35.720
Cool.

00:03:35.720 --> 00:03:36.160
Cool.

00:03:36.160 --> 00:03:36.660
Yeah.

00:03:36.660 --> 00:03:37.800
That'd be exciting.

00:03:37.800 --> 00:03:41.260
I actually want to do a bit of bookkeeping before we move on.

00:03:41.260 --> 00:03:42.420
Yeah, it's a good idea.

00:03:42.420 --> 00:03:47.880
For people who typically attend our live stream recording, which we really appreciate that.

00:03:47.880 --> 00:03:48.440
That's awesome.

00:03:48.900 --> 00:03:58.120
We see a bunch of familiar faces in the chat already out here and we do that live on YouTube and then we polish it up and send it out to the world over the audio channels.

00:03:58.120 --> 00:04:01.740
So I think you can get a lot out of the video version.

00:04:01.740 --> 00:04:04.400
That said, we're moving the video version, right?

00:04:04.400 --> 00:04:05.280
We are.

00:04:05.280 --> 00:04:06.660
And it's my fault.

00:04:06.660 --> 00:04:15.340
So I've got a periodic meeting that happens in my day job and it happens at noon on Tuesdays.

00:04:15.340 --> 00:04:17.600
And that's when we usually used to record.

00:04:17.600 --> 00:04:19.500
So we're just shifting it a little bit.

00:04:19.500 --> 00:04:22.220
So we're going to do 11 a.m. on Tuesdays.

00:04:22.220 --> 00:04:22.740
Exactly.

00:04:22.740 --> 00:04:25.460
It's just an hour earlier on Tuesdays.

00:04:25.460 --> 00:04:32.320
So I want to encourage people to go to Python Bytes.fm slash YouTube and it'll take you over to our channel.

00:04:32.320 --> 00:04:36.960
If you subscribe and get notified, you'll just get a pop up when we're streaming live.

00:04:36.960 --> 00:04:38.120
And if you've got time, you can drop it.

00:04:38.120 --> 00:04:39.440
You don't have to plan too much about it.

00:04:39.440 --> 00:04:47.000
So anyway, encourage people to be part of the YouTube experience here because we put a lot of stuff on the screen and it makes it even a little bit cooler, I think.

00:04:47.460 --> 00:04:53.900
And while we're bookkeeping and it's 11, if you can make it 11 a.m. on Tuesdays, maybe you want to be on the show.

00:04:53.900 --> 00:04:56.040
So reach out if you'd like to be a guest host.

00:04:56.040 --> 00:04:57.140
We still do those.

00:04:57.140 --> 00:04:58.380
Yeah, exactly.

00:04:58.380 --> 00:04:59.060
I do.

00:04:59.060 --> 00:05:00.580
I wonder if I've got anything to talk about.

00:05:00.580 --> 00:05:00.880
Let's see.

00:05:00.880 --> 00:05:01.740
How about NEIO?

00:05:01.740 --> 00:05:06.500
NEIO is a framework that lets you build async things.

00:05:06.560 --> 00:05:13.100
And when you first hear about it, it looks like it's kind of for making network libraries.

00:05:13.100 --> 00:05:20.800
Like if you were making a low-level network app and you wanted it to be concurrent and asynchronous, like, well, you could use NEIO, which would be cool.

00:05:20.880 --> 00:05:24.700
And it has the ability to be, how did Alex, the creator of it, put it?

00:05:24.700 --> 00:05:28.720
Something like a framework that goes above the asyncio frameworks.

00:05:28.720 --> 00:05:35.340
So it doesn't, like, if you think of Trio or Curio, those are replacements for asyncio.

00:05:35.520 --> 00:05:41.800
Whereas NEIO will run on top and integrate with asyncio, or it will run on top of and integrate with Trio.

00:05:41.800 --> 00:05:45.680
So you can kind of add it into whatever you're doing, which I think is pretty sweet.

00:05:45.680 --> 00:05:50.500
But I think its little elevator pitch or whatever here sells it a bit short.

00:05:50.500 --> 00:05:57.980
So I just wanted to talk about some awesome building blocks that people can use from NEIO that I think would make it really fun.

00:05:57.980 --> 00:06:04.980
All right, so one of the 3.11 features actually is this idea of task groups.

00:06:04.980 --> 00:06:14.180
And they also have this concept of task groups over, they had it originally in Trio, and then it comes over here about these groups.

00:06:14.180 --> 00:06:22.180
And what you can do is you can basically create a task group, do a bunch of work on them, and then when it exits that width block, it's all finished.

00:06:22.180 --> 00:06:27.480
So if you're not ready to go to 3.11, but you want to have task groups, here's one way to get it.

00:06:27.520 --> 00:06:29.060
So that's one thing that's kind of cool.

00:06:29.060 --> 00:06:34.060
It supports cancellation and timeout, which is important, especially as a group of related things.

00:06:34.060 --> 00:06:39.140
But one of the things I want to touch on here that's pretty cool is the synchronization primitives.

00:06:39.140 --> 00:06:44.580
Remember a few weeks ago, Guido wrote that article about people at a table and semaphores and stuff?

00:06:44.580 --> 00:06:45.000
Yeah.

00:06:45.000 --> 00:06:46.160
Yeah, so...

00:06:46.160 --> 00:06:46.500
That's the thing.

00:06:46.500 --> 00:06:47.420
Yeah, exactly.

00:06:47.420 --> 00:06:51.120
So there's a couple of those types of primitives here that are really neat.

00:06:51.120 --> 00:06:59.640
So they've got events, which allow you to just run up to a point and wait until some other asyncio thing comes along and says, now go.

00:06:59.640 --> 00:07:06.560
And these are similar to the events that are built into the standard library, but they're not reentrant.

00:07:06.560 --> 00:07:07.660
And they have a little bit...

00:07:07.660 --> 00:07:13.820
They claim to have a better way of presenting a race condition, a little bit closer to Trio.

00:07:13.820 --> 00:07:15.120
So there's those.

00:07:15.120 --> 00:07:18.520
And one of the ones over here that's cool is capacity limiters.

00:07:18.520 --> 00:07:20.160
I think I did talk about this one before.

00:07:20.160 --> 00:07:24.460
So you can go over here and just say, I want to only do...

00:07:24.460 --> 00:07:26.500
In this case, the example says, create a capacity limiter two.

00:07:26.500 --> 00:07:27.800
I only want to do two things at a time.

00:07:27.800 --> 00:07:28.580
But yeah.

00:07:29.580 --> 00:07:30.880
Then, let's see.

00:07:30.880 --> 00:07:33.500
Another one is this working with threads.

00:07:33.500 --> 00:07:34.240
Pretty awesome.

00:07:34.240 --> 00:07:36.020
So you can...

00:07:36.020 --> 00:07:44.060
Given some function that is just a regular function, you can turn it into async, but actually have it execute on a background thread with two thread.

00:07:44.060 --> 00:07:44.620
Wow.

00:07:44.620 --> 00:07:45.000
Give it that.

00:07:45.000 --> 00:07:49.100
And then you can await it just like other things that mix into your asyncio world.

00:07:49.100 --> 00:07:50.980
You can also do it in reverse.

00:07:50.980 --> 00:07:57.280
If you're over in a thread and you need to run it on the async event loop, you can also push it.

00:07:57.280 --> 00:07:59.120
You can say from thread and to thread.

00:07:59.420 --> 00:08:00.520
The two thread is the...

00:08:00.520 --> 00:08:01.260
I believe the one that...

00:08:01.260 --> 00:08:02.600
Now the from thread will push it back.

00:08:02.600 --> 00:08:04.360
Back to the async event loop, which is cool.

00:08:04.360 --> 00:08:05.780
Let's see.

00:08:05.780 --> 00:08:09.060
Also, subprocesses are pretty awesome.

00:08:09.060 --> 00:08:10.980
So you can do...

00:08:10.980 --> 00:08:17.500
Like you have this idea of running your code in a thread because it's not async, but you want it to be kind of concurrent and mix it in.

00:08:17.500 --> 00:08:19.140
You can do the same thing with subprocess.

00:08:19.140 --> 00:08:20.320
And this is super cool.

00:08:20.320 --> 00:08:26.480
So you can say just run process and then it becomes something that's a task that you can await along with your other things.

00:08:26.480 --> 00:08:26.980
Nice.

00:08:26.980 --> 00:08:27.400
Which is sweet.

00:08:27.620 --> 00:08:33.500
And then you can even go as far as to open the process and then like asynchronously work with it.

00:08:33.500 --> 00:08:41.560
So here's an example of where you open some process and then you create a text receive stream from its standard out and you just cruise around and read from it while it's running.

00:08:41.560 --> 00:08:42.820
Awaiting all the time.

00:08:42.820 --> 00:08:43.360
Wow.

00:08:43.360 --> 00:08:44.220
That's neat, right?

00:08:44.480 --> 00:08:44.800
Yeah.

00:08:44.800 --> 00:08:48.440
So it just grabs it while it's printing out?

00:08:48.440 --> 00:08:49.460
Yeah.

00:08:49.460 --> 00:08:58.300
So basically what I think it does is it creates a stream that you can await and then it's just listening for process messages to come through.

00:08:58.300 --> 00:09:02.020
And then it, you know, like the task kind of partially completes, right?

00:09:02.020 --> 00:09:03.940
Because it's an async for loop.

00:09:04.260 --> 00:09:08.620
So you asynchronously wait for an item to come in and then it kicks it one time around the loop and then it waits again.

00:09:08.620 --> 00:09:10.620
And yeah, it's pretty cool how it juggles that.

00:09:10.620 --> 00:09:10.980
Yeah.

00:09:11.140 --> 00:09:15.680
And then finally here, the file support.

00:09:15.680 --> 00:09:22.940
So you can now, instead of saying open, you just say any IO dot open file, but you can async await it.

00:09:22.940 --> 00:09:24.420
You know, it's crazy.

00:09:24.420 --> 00:09:25.500
Async with await.

00:09:25.500 --> 00:09:27.080
There's a lot of crazy stuff happening.

00:09:27.080 --> 00:09:29.180
But then you can await the reads and so on.

00:09:29.260 --> 00:09:33.220
Now there's not actual asynchronous behavior in Python.

00:09:33.220 --> 00:09:34.940
So how does it manage this?

00:09:34.940 --> 00:09:39.740
Basically, it creates a wrapper that uses threads that does the file IO.

00:09:39.740 --> 00:09:44.400
And then it just sort of coordinates the communication of the IO back and forth on the threads.

00:09:44.400 --> 00:09:49.500
As soon as it comes back from IO, which should release the GIL because it's off doing its own thing in the OS.

00:09:49.500 --> 00:09:50.820
So it should be pretty good anyway.

00:09:50.820 --> 00:10:02.200
It looks like maybe I haven't used this, but it looks like it makes things like subprocesses and threads and normal async and await all kind of look the same.

00:10:02.200 --> 00:10:03.560
Yeah, exactly.

00:10:03.560 --> 00:10:08.520
It's like a unifying API across the different scenarios, which is really cool.

00:10:08.520 --> 00:10:10.980
Once you kind of wrap it, you're like, oh, there's just a bunch of tasks.

00:10:10.980 --> 00:10:12.660
I just call await on them.

00:10:12.660 --> 00:10:13.240
Good to go.

00:10:13.240 --> 00:10:13.720
Nice.

00:10:13.720 --> 00:10:21.100
And then possibly it wouldn't be too much if you had to change your mind and have something be a subprocess or a thread.

00:10:21.100 --> 00:10:24.640
Instead, it might not wreak havoc on your design too much.

00:10:24.640 --> 00:10:25.520
Yeah, exactly.

00:10:25.520 --> 00:10:27.560
You almost don't even have to worry about it.

00:10:27.560 --> 00:10:31.780
As long as the parameters can be passed, right?

00:10:31.780 --> 00:10:36.300
They've got to be pick a little bowl to go across the wire there.

00:10:36.300 --> 00:10:43.100
But as long as they can be passed to the process as well as to a thread, then you just get a task back that talks to you.

00:10:43.100 --> 00:10:43.360
It's cool.

00:10:43.360 --> 00:10:45.000
I'll definitely take a look at this.

00:10:45.000 --> 00:10:51.320
Just before I move off of this, I just want to say also I interviewed Alex Grunholm over on Talk Python.

00:10:51.320 --> 00:10:52.700
When was that?

00:10:52.700 --> 00:10:53.540
September.

00:10:53.540 --> 00:10:55.280
Actually released it in October, though.

00:10:55.280 --> 00:10:58.800
So effectively October or a couple weeks ago.

00:10:58.800 --> 00:11:02.960
And people can check that out if they want to dive deep into it and hear that story.

00:11:02.960 --> 00:11:04.820
Anyway, I feel like, yeah, yeah.

00:11:04.820 --> 00:11:05.260
Thanks.

00:11:05.260 --> 00:11:07.620
I do just feel like any I.O. sells itself a bit short.

00:11:07.620 --> 00:11:09.320
Say, no, it's like a network library.

00:11:09.320 --> 00:11:10.920
Like, oh, I don't need a network library.

00:11:10.920 --> 00:11:13.380
But no, there's like all these little cool building blocks in there.

00:11:13.380 --> 00:11:14.080
Pretty cool.

00:11:14.080 --> 00:11:15.260
Have you used it?

00:11:15.260 --> 00:11:16.980
Is it pretty nice to use?

00:11:16.980 --> 00:11:18.220
I've not used it.

00:11:18.220 --> 00:11:18.660
Okay.

00:11:18.660 --> 00:11:30.080
I'm still working on getting my interesting projects more async capable, you know, before, like, for example, getting some of the web stuff in the front end can be more async and so on.

00:11:30.080 --> 00:11:33.800
Then I can start bringing these fun ideas in more on real projects.

00:11:34.220 --> 00:11:35.500
Back to your topic real quick.

00:11:35.500 --> 00:11:42.460
Brandon and Audien says, if one was looking at submitting to PyCon, what's the difference between a tutorial versus a talk?

00:11:42.460 --> 00:11:43.080
Time?

00:11:43.080 --> 00:11:43.880
What else, Brian?

00:11:43.880 --> 00:11:44.940
Hands on exercises?

00:11:44.940 --> 00:11:45.260
Right.

00:11:45.380 --> 00:11:48.440
So, tutorials are, what, like three hours or something?

00:11:48.440 --> 00:11:49.780
I can't remember how long they are.

00:11:49.780 --> 00:11:53.020
And, okay, so they're three hours.

00:11:53.020 --> 00:11:54.080
They're also at a different time.

00:11:54.080 --> 00:11:55.660
So, they're like not on the same day.

00:11:55.660 --> 00:11:56.500
The day before or something.

00:11:56.500 --> 00:11:59.480
I mean, I think they're like two or three days before.

00:11:59.480 --> 00:12:01.920
I can't remember how many days before they run them.

00:12:01.920 --> 00:12:02.880
I should have looked this up.

00:12:02.880 --> 00:12:03.080
Yeah.

00:12:03.300 --> 00:12:04.360
But they're before the conference.

00:12:04.360 --> 00:12:08.100
So, you have to, you have more hotel tickets to get, for instance.

00:12:08.100 --> 00:12:11.100
But since it's three hours and a talk is what?

00:12:11.100 --> 00:12:12.720
Like 25 minutes or something?

00:12:12.720 --> 00:12:13.040
25 minutes, yeah.

00:12:13.040 --> 00:12:13.140
Half hour?

00:12:13.140 --> 00:12:18.000
Since there are more work to prepare for a tutorial, you get paid for them.

00:12:18.000 --> 00:12:19.760
You get a little stipend.

00:12:19.960 --> 00:12:23.240
But also, people have to pay to talk, go to the tutorial.

00:12:23.240 --> 00:12:24.140
So, you know.

00:12:24.140 --> 00:12:26.180
But I think there are cool things.

00:12:26.180 --> 00:12:30.780
I know a handful of the people we know do like to do tutorials if they can.

00:12:30.780 --> 00:12:31.640
Yeah.

00:12:31.640 --> 00:12:36.800
I think it's also a lot more guiding people through hands-on coding than it is, I'm here

00:12:36.800 --> 00:12:37.580
to like present.

00:12:37.580 --> 00:12:38.180
Yeah.

00:12:38.180 --> 00:12:38.960
It's not a three hour.

00:12:38.960 --> 00:12:40.680
It shouldn't be a three hour presentation.

00:12:40.680 --> 00:12:45.220
It's like, we're going to present something and then have exercises for people to work on.

00:12:45.220 --> 00:12:47.400
People bring their laptops in and stuff like that.

00:12:47.400 --> 00:12:48.000
Yeah.

00:12:48.000 --> 00:12:48.540
Yeah.

00:12:48.960 --> 00:12:52.460
But then there's also, one of the things that people forget about is posters.

00:12:52.460 --> 00:12:53.860
Posters are also pretty cool.

00:12:53.860 --> 00:12:59.580
On the last day of the, on Sunday, I think it's on Sunday, they have the posters up.

00:12:59.580 --> 00:13:01.200
The posters and the job fair, right?

00:13:01.200 --> 00:13:02.240
Yeah, I think so.

00:13:02.240 --> 00:13:03.840
The job fair and the posters at the same time.

00:13:03.840 --> 00:13:06.260
And it really literally is a poster.

00:13:06.260 --> 00:13:12.020
So that if you get one of the poster spots, you get a section where you get to have your

00:13:12.020 --> 00:13:15.360
poster up and you can describe whatever you want on there.

00:13:15.360 --> 00:13:18.180
Hopefully it's fairly entertaining to look at and read.

00:13:18.180 --> 00:13:19.440
And then you get to hang out.

00:13:19.440 --> 00:13:22.700
So let's say you've got a project you want to talk to people about.

00:13:22.700 --> 00:13:24.260
It's not really a presentation.

00:13:24.260 --> 00:13:28.120
You have your poster up and you just hang out there and then people come around and ask you

00:13:28.120 --> 00:13:28.560
questions.

00:13:28.560 --> 00:13:29.000
Yeah.

00:13:29.000 --> 00:13:29.480
That's pretty neat.

00:13:29.480 --> 00:13:29.840
Absolutely.

00:13:29.840 --> 00:13:30.260
Yeah.

00:13:30.260 --> 00:13:30.600
Yeah.

00:13:30.600 --> 00:13:33.540
If you want to have a chance to just have a conversation around something you're working

00:13:33.540 --> 00:13:35.540
on, but not go all in on a talk.

00:13:35.540 --> 00:13:37.240
I tried to submit a keynote once.

00:13:37.240 --> 00:13:38.240
Turns out you can't do it.

00:13:38.640 --> 00:13:40.780
Oh, are they, do they ask people or something?

00:13:40.780 --> 00:13:42.420
Keynotes are invite only, Michael.

00:13:42.420 --> 00:13:43.480
You can't submit a keynote.

00:13:43.480 --> 00:13:44.920
I'm like, well, I'm submitting one.

00:13:44.920 --> 00:13:46.240
You can turn it down if you want.

00:13:46.240 --> 00:13:47.360
They did.

00:13:47.360 --> 00:13:47.860
It's all right.

00:13:47.860 --> 00:13:49.020
Okay.

00:13:49.300 --> 00:13:51.320
Now, I want to tell you about one more thing.

00:13:51.320 --> 00:13:51.680
Awesome.

00:13:51.680 --> 00:13:53.520
One awesome thing before we move on, Brian.

00:13:53.520 --> 00:13:57.200
I'll tell you about compiler podcasts from Red Hat.

00:13:57.480 --> 00:14:01.480
So super cool to have Red Hat come along and supporting the show.

00:14:01.480 --> 00:14:06.000
And, you know, like pretty much everyone listening, you and I were fans of podcasts.

00:14:06.000 --> 00:14:10.380
And so it's awesome to have this compiler from Red Hat supporting the show.

00:14:10.380 --> 00:14:12.700
Really, really good show that they have themselves.

00:14:12.700 --> 00:14:14.700
It's very highly edited and polished.

00:14:14.700 --> 00:14:15.780
So that's excellent.

00:14:15.780 --> 00:14:20.140
If you want to stay on top of tech without dedicating tons of time to it, you can listen

00:14:20.140 --> 00:14:20.620
to compiler.

00:14:20.620 --> 00:14:25.220
They present different perspectives and topics and insights from the tech industry, free from

00:14:25.220 --> 00:14:26.360
jargon and judgment.

00:14:26.660 --> 00:14:30.900
They want to discover where technology is headed beyond the headlines and create a place for

00:14:30.900 --> 00:14:33.320
new IT professionals to learn, grow and thrive.

00:14:33.320 --> 00:14:38.020
They help people break through barriers and challenges, turning code into community at all

00:14:38.020 --> 00:14:39.220
the levels of the enterprise.

00:14:39.220 --> 00:14:43.580
One recent interesting episode is the one about the great stack debate.

00:14:43.580 --> 00:14:48.040
I love, love, love talking about, talking to people about their architecture and the trade

00:14:48.040 --> 00:14:52.840
ops and choices that they made and what the costs and challenges and, you know, it smiled

00:14:52.840 --> 00:14:54.100
and frowns that result from that.

00:14:54.100 --> 00:14:56.500
So you can definitely check out the great stack debate.

00:14:56.640 --> 00:14:57.140
That's a fun one.

00:14:57.140 --> 00:15:01.980
They answer the question of whether software is like an onion or like it's lasagna or whether

00:15:01.980 --> 00:15:04.060
it's some other more complicated dish.

00:15:04.060 --> 00:15:05.080
So you can check that.

00:15:05.080 --> 00:15:05.600
That's a lot of fun.

00:15:05.600 --> 00:15:06.740
And it's actually first.

00:15:06.740 --> 00:15:07.280
Yeah, go ahead.

00:15:07.280 --> 00:15:09.840
Looks like the most recent one is about testing, too.

00:15:09.840 --> 00:15:11.180
I better check that out.

00:15:11.180 --> 00:15:11.620
Yeah.

00:15:11.620 --> 00:15:12.500
You got to get in there.

00:15:12.500 --> 00:15:17.200
They have a whole series on the compiler, the compiler series on software stacks.

00:15:17.200 --> 00:15:19.320
And I guess testing is an important part of that.

00:15:19.320 --> 00:15:19.620
It's awesome.

00:15:19.620 --> 00:15:20.040
Yeah.

00:15:20.080 --> 00:15:23.560
So learn about compiler at pythonbytes.fm/compiler.

00:15:23.560 --> 00:15:25.540
The link is in your podcast player show notes.

00:15:25.540 --> 00:15:31.820
I know you could just search for compiler and sign up, but follow the link and click on your podcast player there and subscribe.

00:15:31.820 --> 00:15:35.920
That way it would really help us let them know that you heard about them from us.

00:15:35.960 --> 00:15:38.740
So thanks to compiler for keeping this show going strong.

00:15:38.740 --> 00:15:39.780
All right, Brian, what's next?

00:15:39.780 --> 00:15:42.680
Well, I was going to talk about conference talks.

00:15:42.680 --> 00:15:45.980
So some more.

00:15:45.980 --> 00:15:54.000
So I think everybody should try because I actually I I was terrified to do my first talk and I think it was a good experience.

00:15:54.000 --> 00:16:04.040
So Reuven Lerner, Reuven Lerner, friend of the show and all around awesome guy, wrote an article called how to propose a winning conference talk.

00:16:04.040 --> 00:16:05.380
So we're linking to that.

00:16:05.380 --> 00:16:08.800
And what there's a lot of there's a lot of articles on how to do a talk.

00:16:08.800 --> 00:16:11.880
And what I like, what I really like about this is it's short.

00:16:11.880 --> 00:16:16.480
There's a there's a few things that he focuses on.

00:16:16.920 --> 00:16:24.440
One of the first is like coming up with ideas and he like part of his audience is also other trainers.

00:16:24.440 --> 00:16:28.560
So but I think that more people are trainers than you realize.

00:16:28.560 --> 00:16:35.220
So maybe you're maybe you actually teach people like Reuven does or, you know, you have a training gig.

00:16:35.220 --> 00:16:46.100
But you could teach mentor or lead or coach in other ways just by being the resident Python guy or girl or woman or whatever at your company.

00:16:46.100 --> 00:16:47.620
And when people come to you and ask questions.

00:16:47.620 --> 00:16:51.760
So one of the some of those things are to come up with a list of things to talk about.

00:16:51.760 --> 00:16:54.280
What questions do people ask you all the time?

00:16:54.280 --> 00:16:56.380
Those are great things to break talks about.

00:16:56.380 --> 00:17:02.060
Maybe what knowledge, what knowledge do you think people should have that they just don't know to ask about?

00:17:02.060 --> 00:17:03.720
Those are also great topics.

00:17:03.720 --> 00:17:08.460
And then also, where do you see that people just don't seem to get it?

00:17:08.460 --> 00:17:11.340
And so somehow they're not getting some concept.

00:17:11.340 --> 00:17:14.160
They don't quite get it from whatever they've sought out.

00:17:14.160 --> 00:17:15.400
Those are also great things.

00:17:15.400 --> 00:17:20.060
And if and if that if you're still stumped, he says, well, check out Stack Overflow.

00:17:20.060 --> 00:17:22.100
What kind of questions come up there all the time?

00:17:22.100 --> 00:17:24.980
Those are those are good things to maybe give a talk about.

00:17:24.980 --> 00:17:27.400
So, hey, I got a cheat code for people listening.

00:17:27.400 --> 00:17:27.960
OK.

00:17:27.960 --> 00:17:31.840
What awesome thing did you hear about on Python bytes that was like new to you?

00:17:31.840 --> 00:17:33.480
And there's not a talk at the conference.

00:17:33.480 --> 00:17:34.120
I'm serious.

00:17:34.120 --> 00:17:35.560
Yeah, exactly.

00:17:35.800 --> 00:17:35.920
Yeah.

00:17:35.920 --> 00:17:40.820
You know, rewind a handful of episodes and go through and go, that sounds interesting.

00:17:40.820 --> 00:17:44.440
And, you know, spend a few hours researching it and come up with a talk.

00:17:44.440 --> 00:17:44.840
Why not?

00:17:44.840 --> 00:17:45.240
Right.

00:17:45.240 --> 00:17:45.400
Right.

00:17:45.400 --> 00:17:46.540
It's interesting to me.

00:17:46.540 --> 00:17:47.160
I want to learn it.

00:17:47.160 --> 00:17:48.200
And then I could present it.

00:17:48.200 --> 00:17:50.240
You know, you could test drive these things.

00:17:50.460 --> 00:17:51.980
So it's smaller regional conferences.

00:17:51.980 --> 00:17:54.400
You could test drive them at meetups.

00:17:54.400 --> 00:17:58.340
You could test drive them as like a YouTube video that you post somewhere or even a blog

00:17:58.340 --> 00:17:58.820
post you write.

00:17:58.820 --> 00:18:02.840
Like there's a bunch of let me take a shot at it and then build some confidence and then

00:18:02.840 --> 00:18:06.080
submit it to PyCon US or Europe or wherever.

00:18:06.080 --> 00:18:06.640
Yeah.

00:18:06.640 --> 00:18:11.600
He goes on to talk about using an outline.

00:18:11.600 --> 00:18:19.700
And even if you don't go for a talk, maybe I don't remember if I think PyCon US does ask

00:18:19.700 --> 00:18:21.260
for this, but some don't.

00:18:21.260 --> 00:18:25.000
But even if it's not asked for, come up with an outline with times.

00:18:25.000 --> 00:18:26.820
And that part freaked me out.

00:18:26.820 --> 00:18:28.320
I'm like, how do I do that?

00:18:28.320 --> 00:18:32.100
But his example is fairly not scary.

00:18:32.100 --> 00:18:35.860
It's kind of the bullet points of the sort of stuff you're going to talk about.

00:18:35.860 --> 00:18:38.240
And how long you intend to talk about it.

00:18:38.240 --> 00:18:40.480
And this is actually really important.

00:18:40.480 --> 00:18:44.560
I, when I, when I finally embraced this and went, I got to think about this.

00:18:44.560 --> 00:18:49.640
And I kind of do this hand in hand with this, the next step, the next step, he said, is you

00:18:49.640 --> 00:18:52.700
don't just need an outline.

00:18:52.700 --> 00:18:56.680
You need a summary and you kind of need a short summary and a long summary possibly.

00:18:56.680 --> 00:19:03.200
And that's, and you should include, I can't remember where he wrote this down, but you

00:19:03.200 --> 00:19:05.280
should include, what is it?

00:19:05.280 --> 00:19:10.440
the value that people get, what benefit they'll get from your talk and what knowledge

00:19:10.440 --> 00:19:14.860
they'll get, what they'll have when they leave your talk and how will that help them?

00:19:14.860 --> 00:19:16.440
And think about those.

00:19:16.440 --> 00:19:20.260
And that while you're putting through your, your outline together too, as to where you

00:19:20.260 --> 00:19:24.520
want to spend your time and, you know, be paying attention that you do want to have some,

00:19:24.520 --> 00:19:26.240
some wrap up time possibly.

00:19:26.660 --> 00:19:29.160
And you might want some introduction time.

00:19:29.160 --> 00:19:31.400
So include that and think about those times.

00:19:31.400 --> 00:19:35.760
And then you've got just these little tiny one or two minute, one or two or three or four

00:19:35.760 --> 00:19:38.600
minute segments that you've got to come up with words for.

00:19:39.260 --> 00:19:45.420
And that's actually a lot easier to deal with than thinking I got to come up with 25 minutes.

00:19:45.420 --> 00:19:46.200
Right.

00:19:46.200 --> 00:19:46.920
So yeah.

00:19:46.920 --> 00:19:49.760
Like an example here, it says generate warnings, two minutes.

00:19:49.760 --> 00:19:52.220
Could you spend two minutes talking about generating warnings?

00:19:52.220 --> 00:19:53.560
I imagine you could.

00:19:53.560 --> 00:19:55.260
Yeah.

00:19:55.420 --> 00:19:58.640
And if it's important, put throw, throw some time into it.

00:19:58.640 --> 00:20:03.980
But the, the, one of the things I wanted to highlight on this, I really liked this write

00:20:03.980 --> 00:20:04.300
up.

00:20:04.300 --> 00:20:05.780
He also, a couple more things.

00:20:05.780 --> 00:20:08.820
One is submit the same talk to multiple conferences.

00:20:08.820 --> 00:20:10.200
You can do that.

00:20:10.200 --> 00:20:12.700
And you don't even have, it doesn't even have to be new.

00:20:12.700 --> 00:20:17.640
You could have already submitted, presented it somewhere and it might already be on YouTube.

00:20:17.640 --> 00:20:19.540
And you're like, really?

00:20:19.540 --> 00:20:20.580
I can do that.

00:20:20.580 --> 00:20:21.500
Yes, really.

00:20:21.500 --> 00:20:22.320
You can do that.

00:20:22.460 --> 00:20:25.620
some people give talks at multiple conferences and it's fine.

00:20:25.620 --> 00:20:28.060
You don't have to come up with a brand new talk for every conference.

00:20:28.060 --> 00:20:31.820
the other thing is the list of outline, the list of topics.

00:20:31.820 --> 00:20:35.500
My mistake, the first time I wrote, gave a talk was I did this.

00:20:35.500 --> 00:20:37.880
I went, what are all the things I'd like to talk about?

00:20:37.880 --> 00:20:40.700
And then I crammed them all into the, into one talk.

00:20:40.700 --> 00:20:42.840
this is not what you want to do.

00:20:42.840 --> 00:20:47.780
You want to pick like, you know, one focused thing so that you can go at a reasonably comfortable

00:20:47.780 --> 00:20:48.360
pace.

00:20:48.360 --> 00:20:51.120
You don't want to be talking a hundred miles an hour.

00:20:51.320 --> 00:20:52.500
People can't keep up with you.

00:20:52.500 --> 00:20:54.660
There are some people I'm, I'm good.

00:20:54.660 --> 00:20:55.640
Don't get me wrong.

00:20:55.640 --> 00:20:59.480
There's some people that can talk really fast and pack a lot of information and they're really

00:20:59.480 --> 00:21:00.080
good about it.

00:21:00.080 --> 00:21:04.640
And it's still entertaining, but I think the average person would be better at trying to

00:21:04.640 --> 00:21:05.880
go at a little slower pace.

00:21:05.880 --> 00:21:06.560
So, yeah.

00:21:06.560 --> 00:21:07.000
Yeah.

00:21:07.000 --> 00:21:10.960
I totally agree about the, that, and you know, that could be your, like, you could come up

00:21:10.960 --> 00:21:12.500
with that list of all the things you want to talk about.

00:21:12.580 --> 00:21:15.440
And then that could be the source for two or three talks.

00:21:15.440 --> 00:21:15.880
Yeah.

00:21:15.880 --> 00:21:16.320
Yep.

00:21:16.320 --> 00:21:16.480
Right.

00:21:16.480 --> 00:21:19.620
Like, God, this is two, this is kind of like, this all stuff seems to be about fixtures.

00:21:19.620 --> 00:21:23.140
So let's have to do a, like five things that are awesome about fixtures you didn't know.

00:21:23.140 --> 00:21:26.960
And here's like why you should care about structuring your, I don't know, whatever.

00:21:27.220 --> 00:21:32.160
And if they get rejected, but from every conference that you submitted to, you're still one because

00:21:32.160 --> 00:21:33.860
you did all that, that work.

00:21:33.860 --> 00:21:39.320
Just turn it into a, like a blog post or a, or a YouTube video or something.

00:21:39.320 --> 00:21:40.160
Yeah, absolutely.

00:21:40.160 --> 00:21:42.160
A bunch of good feedback from the audience.

00:21:42.160 --> 00:21:46.780
John out there says a great place to give a talk is at the user group kind of matched

00:21:46.780 --> 00:21:48.180
exactly the same time I said that.

00:21:48.180 --> 00:21:49.100
So I definitely agree.

00:21:49.100 --> 00:21:49.740
Green there.

00:21:49.740 --> 00:21:52.560
Brandon says, give it a lunch and learn at your company.

00:21:52.560 --> 00:21:53.420
Great idea.

00:21:53.420 --> 00:21:53.820
Yeah.

00:21:53.820 --> 00:21:54.720
That's a really good idea.

00:21:54.720 --> 00:21:56.780
And casual viewer number three.

00:21:57.140 --> 00:22:01.520
does my team as a show and tell, like meeting on Fridays, a show off stuff.

00:22:01.520 --> 00:22:03.460
People can talk about that'd be impactful.

00:22:03.460 --> 00:22:04.440
Also a good place.

00:22:04.440 --> 00:22:04.660
Yeah.

00:22:04.660 --> 00:22:05.320
A lot of good ideas.

00:22:05.320 --> 00:22:08.200
If the venue doesn't exist, you may well be able to create it.

00:22:08.200 --> 00:22:08.420
Yeah.

00:22:08.420 --> 00:22:10.900
And you might get, you might get promoted because of it.

00:22:10.900 --> 00:22:14.320
Cause you're like, Oh, people will know that you're the expert in the company that they

00:22:14.320 --> 00:22:15.080
didn't know before.

00:22:15.080 --> 00:22:15.520
It's good.

00:22:15.520 --> 00:22:16.000
That's right.

00:22:16.000 --> 00:22:16.560
That's right.

00:22:16.560 --> 00:22:16.980
All right.

00:22:16.980 --> 00:22:21.880
I want to come back to something that I know we talked about before, but a feature of it.

00:22:21.880 --> 00:22:27.060
So we talked about Sanic when it came out, there was Sanic and Jopronto and a couple

00:22:27.060 --> 00:22:27.660
other things.

00:22:27.660 --> 00:22:29.860
This, I believe predates FastAPI even.

00:22:29.860 --> 00:22:35.660
And it was one of the very first high, high performance async frameworks for Python.

00:22:35.660 --> 00:22:36.260
Very cool.

00:22:36.260 --> 00:22:40.520
I hadn't really been tracking it that much lately, but if you drop over by the GitHub,

00:22:40.520 --> 00:22:44.160
uh, github.com/Sanic dash org, go to Sanic.

00:22:44.160 --> 00:22:47.200
16,000 stars, 1,500 forks.

00:22:47.200 --> 00:22:48.360
It's going really strong.

00:22:48.580 --> 00:22:50.480
I, I totally did not.

00:22:50.480 --> 00:22:52.120
I've not been tracking it well enough.

00:22:52.120 --> 00:22:54.140
So this is, this is really fantastic.

00:22:54.140 --> 00:22:58.220
So cool way to build asynchronous web apps and Python.

00:22:58.220 --> 00:23:02.180
It's, it claims to be unopinionated and flexible.

00:23:02.180 --> 00:23:07.980
It is the plastic that you build your APIs and your web apps out of as you like, rather than

00:23:07.980 --> 00:23:10.260
being very structured in the way you put stuff together.

00:23:10.260 --> 00:23:14.140
So if you're looking forward to that good, it's, I said, super fast.

00:23:14.380 --> 00:23:19.540
that was its original selling point and apparently used by millions of people, which

00:23:19.540 --> 00:23:20.480
is pretty awesome.

00:23:20.480 --> 00:23:26.360
So what I want to point out here is not Sanic exactly, but rather a new feature that was shared

00:23:26.360 --> 00:23:33.140
with us by Felix and Felix pointed out that, Adam, one of the maintainers just added this

00:23:33.140 --> 00:23:37.640
concept of a worker manager into the new version of Sanic.

00:23:37.640 --> 00:23:43.800
So, if you, if you want to run background work, like I want to send an email or I want to

00:23:43.800 --> 00:23:50.100
send, and do other, like lots of processing or computational work in the background, it's

00:23:50.100 --> 00:23:54.300
going to block up not just a single request, but it's going to block up potentially the

00:23:54.300 --> 00:23:55.400
whole web server, right?

00:23:55.400 --> 00:23:58.800
You get a bunch of things that are querying tons of data or doing a bunch of computation,

00:23:58.800 --> 00:24:03.500
then all of a sudden, or even calling other APIs, potentially that could log up the server,

00:24:03.500 --> 00:24:05.440
especially if it can't be done asynchronously.

00:24:05.440 --> 00:24:11.980
So they added this concept of kind of like a lightweight celery type of thing, where you can push

00:24:11.980 --> 00:24:14.680
the work off to it and have it run in the background and manage that.

00:24:14.680 --> 00:24:15.100
Okay.

00:24:15.100 --> 00:24:18.000
Except for it's just an API inside of Sanic.

00:24:18.000 --> 00:24:22.180
And it starts a sub process that hangs around and does that background work for you.

00:24:22.180 --> 00:24:24.520
So it's like, you don't have to manage another server.

00:24:24.520 --> 00:24:30.000
You don't have to set up celery or Redis and then some worker mechanism to process the messages

00:24:30.000 --> 00:24:30.680
coming out of there.

00:24:30.680 --> 00:24:34.120
You just kick the work over to this, worker manager and off it goes.

00:24:34.120 --> 00:24:34.720
Nice.

00:24:34.720 --> 00:24:35.200
Yeah.

00:24:35.200 --> 00:24:35.740
That's pretty cool.

00:24:35.740 --> 00:24:36.180
Pretty cool, huh?

00:24:36.420 --> 00:24:36.660
Yeah.

00:24:36.660 --> 00:24:37.080
Yeah.

00:24:37.080 --> 00:24:43.680
And the way that it works is, basically you can hook into, some lifetime events.

00:24:43.680 --> 00:24:48.760
Like you can use a decorator app dot before server start, and you can go make sure that

00:24:48.760 --> 00:24:51.880
there's a queue that can be used for the communication across that.

00:24:51.880 --> 00:24:53.360
And then you can handle on request.

00:24:53.360 --> 00:24:57.680
And then, when a request comes in, you can like push work over, over to it.

00:24:57.680 --> 00:24:58.000
Yeah.

00:24:58.000 --> 00:25:02.780
Anyway, you can even get it to do like some cool little printout of like the status of what

00:25:02.780 --> 00:25:04.500
the workers are up to and so on.

00:25:04.500 --> 00:25:06.000
So anyway, pretty neat.

00:25:06.000 --> 00:25:10.180
if you need to run asynchronous work and you're looking at a web framework, you know,

00:25:10.180 --> 00:25:11.060
maybe check out Sanic.

00:25:11.060 --> 00:25:15.120
It's got this, this cool feature and it's got a lot of nice async and await features as well.

00:25:15.120 --> 00:25:15.520
Cool.

00:25:15.520 --> 00:25:15.980
Nice.

00:25:15.980 --> 00:25:17.300
All right.

00:25:17.300 --> 00:25:19.780
that's it for our main items, isn't it?

00:25:19.780 --> 00:25:20.820
I guess it is.

00:25:20.820 --> 00:25:21.080
Yeah.

00:25:21.080 --> 00:25:25.240
before we move off this real quick, casual viewer says FastAPI is something similar

00:25:25.240 --> 00:25:26.940
called background task.

00:25:26.940 --> 00:25:27.560
Okay.

00:25:27.560 --> 00:25:28.180
Good to know.

00:25:28.180 --> 00:25:32.200
And yeah, and you can also build those out of your, on your own, using like

00:25:32.200 --> 00:25:33.680
multi-processing or something, but.

00:25:33.680 --> 00:25:34.500
Or any IO.

00:25:34.500 --> 00:25:35.840
Or any IO for sure.

00:25:35.840 --> 00:25:40.360
One of the real challenges of all of those like roll your own things are usually what happens

00:25:40.360 --> 00:25:43.880
is you, you farm out your web server.

00:25:43.880 --> 00:25:48.500
So for example, on Talk Python Training, I think we have eight worker processes that are cruising

00:25:48.500 --> 00:25:49.040
around waiting.

00:25:49.040 --> 00:25:51.680
And like, as far as they're concerned, they are the website.

00:25:51.680 --> 00:25:52.100
Right.

00:25:52.100 --> 00:25:56.320
And if all those things start kicking off background work and they start starting their

00:25:56.320 --> 00:26:00.500
own processes, it'll be like, why are there 17 worker processes cruising around?

00:26:00.500 --> 00:26:01.400
I don't know what's going on.

00:26:01.400 --> 00:26:05.020
So yeah, it's kind of cool to have something that's a little more structured, like that.

00:26:05.020 --> 00:26:05.440
All right.

00:26:05.440 --> 00:26:06.080
extras.

00:26:06.080 --> 00:26:07.260
You said you got some extras.

00:26:07.260 --> 00:26:07.900
Tell us about them.

00:26:07.900 --> 00:26:10.880
well, stuck on the presentation thing.

00:26:10.880 --> 00:26:16.680
but, I ran across this, article called create presentations with, from Jupyter

00:26:16.680 --> 00:26:17.040
notebooks.

00:26:17.520 --> 00:26:19.880
And, I just wanted to link to it.

00:26:19.880 --> 00:26:24.200
If you, if you're thinking about doing a presentation and you want to possibly just use your Jupyter

00:26:24.200 --> 00:26:26.020
notebook, apparently it's built in.

00:26:26.020 --> 00:26:27.780
I didn't know that it was just built in.

00:26:27.780 --> 00:26:33.540
so this just walks through the built-in features of how to, so you gotta, you've got

00:26:33.540 --> 00:26:37.760
a Jupyter notebook, you walk, what you can even do some markdown.

00:26:37.760 --> 00:26:42.240
You can do markdown Jupyter anyway, but there's ways to have both code and markdown together

00:26:42.240 --> 00:26:46.220
with this, with IPython display markdown, which is cool.

00:26:46.220 --> 00:26:51.920
and then it, it goes through a couple more examples of things, but then there's this,

00:26:51.920 --> 00:26:52.460
a dropdown.

00:26:52.460 --> 00:26:57.820
You can just say view, view cell toolbar slideshow.

00:26:57.820 --> 00:27:04.460
And then you select, you select slide for each of your, little cells and they become

00:27:04.460 --> 00:27:05.900
slides in your presentation.

00:27:05.900 --> 00:27:13.120
And then you can use, then you can use the built-in NB convert to convert it to,

00:27:13.120 --> 00:27:14.660
uh, presentation.

00:27:14.660 --> 00:27:17.700
So just got an HTML presentation right there.

00:27:17.700 --> 00:27:19.020
So that's pretty neat.

00:27:19.020 --> 00:27:21.500
You can say slide.

00:27:21.500 --> 00:27:23.600
You can say it's a sub slide, a fragment.

00:27:23.600 --> 00:27:27.340
You could skip and you could even make it notes just for like a presentation view.

00:27:27.340 --> 00:27:29.800
That's pretty flexible for per cell in Jupyter.

00:27:29.800 --> 00:27:30.420
That's awesome.

00:27:30.420 --> 00:27:33.080
And then there's ways to either show it by default.

00:27:33.080 --> 00:27:35.980
It shows the code, but you can have a hide the code apparently.

00:27:36.240 --> 00:27:40.260
And then if you want to be able to, to, instead of doing the command line thing, if you want

00:27:40.260 --> 00:27:44.780
to toggle back and forth while you're developing it, they're recommending using the rise

00:27:44.780 --> 00:27:45.180
extension.

00:27:45.520 --> 00:27:46.840
And I tried that.

00:27:46.840 --> 00:27:49.180
I'm like, is this, is it really this easy?

00:27:49.180 --> 00:27:55.620
And so I tried it out and sure enough, it's just, I just went through some of the examples

00:27:55.620 --> 00:27:56.780
and it's really pretty cool.

00:27:56.780 --> 00:28:01.400
And with rise, we've got like these examples and then you can just with rise, you can just

00:28:01.400 --> 00:28:03.880
select this little, this little, icon here.

00:28:03.940 --> 00:28:07.600
It looks like a graph and it just enters into slideshow mode.

00:28:07.600 --> 00:28:08.760
nice.

00:28:08.760 --> 00:28:11.920
Then it, so what happens if you hit space in that mode?

00:28:11.920 --> 00:28:15.020
Does it like automatically take you from one to one?

00:28:15.020 --> 00:28:15.660
Okay, cool.

00:28:15.660 --> 00:28:15.900
Yeah.

00:28:15.900 --> 00:28:16.480
Very nice.

00:28:16.480 --> 00:28:19.400
And you can, you can do the arrows back and forth and stuff.

00:28:19.400 --> 00:28:24.420
You can, so you kind of, it doesn't look as good as the actual presentation at the

00:28:24.420 --> 00:28:28.600
output, but especially if you're trying to like kind of toggle back and forth to see,

00:28:28.600 --> 00:28:31.680
isn't like, is my, is my stuff too big?

00:28:31.680 --> 00:28:36.740
Like right now I w I would totally alter this because it, it, it looks too, it doesn't look

00:28:36.740 --> 00:28:37.260
good right now.

00:28:37.260 --> 00:28:42.940
but that's kind of what you do with slideshows is you sort of work, work with them until they

00:28:42.940 --> 00:28:43.360
look good.

00:28:43.360 --> 00:28:46.720
But anyway, so this is, something I wanted to share.

00:28:46.720 --> 00:28:51.280
It was just this, if you want to try using Jupyter for your presentation, here's a link

00:28:51.280 --> 00:28:53.700
kind of maybe take a look at this article.

00:28:53.700 --> 00:29:01.660
the other thing I wanted to point out as an extra is, what Python py test as

00:29:01.660 --> 00:29:04.200
7.2 py test 7.2 released.

00:29:04.200 --> 00:29:10.120
I don't normally like, I mean, I love, I'm personally, if I'm like ready to try every

00:29:10.120 --> 00:29:14.920
new release that comes out, but why I'm bringing this up, is there's a couple of things that

00:29:14.920 --> 00:29:16.200
bit us at work.

00:29:16.200 --> 00:29:22.220
And I want to, if they might bite you, the PI library is now separated from py test.

00:29:22.220 --> 00:29:27.340
So you don't get the PI library by default when you import, when you, you're installing

00:29:27.340 --> 00:29:27.920
py test.

00:29:27.920 --> 00:29:32.540
So if you are using the PI library, you just have to make that one of your own requirements.

00:29:32.540 --> 00:29:35.420
You were cheating and not stating it as a requirement.

00:29:35.420 --> 00:29:36.800
Cause I'd always be there.

00:29:36.800 --> 00:29:37.180
We know.

00:29:37.180 --> 00:29:41.040
I don't think we were, I don't think we were using it at all, but I think we may have

00:29:41.040 --> 00:29:44.040
declared like, like py path or something like that.

00:29:44.040 --> 00:29:44.320
Yeah.

00:29:44.320 --> 00:29:44.780
Whatever.

00:29:44.780 --> 00:29:48.860
a couple more things, that I think is neat.

00:29:48.980 --> 00:29:55.640
a few releases ago, I added, the test paths, so that you can add a import path,

00:29:55.640 --> 00:29:59.080
uh, to your, for where, like where your source code is.

00:29:59.080 --> 00:30:03.820
And, for this release, they added a shell style wildcard support.

00:30:03.820 --> 00:30:04.840
So that's pretty cool.

00:30:04.840 --> 00:30:07.780
and there's a whole bunch of cool features.

00:30:07.780 --> 00:30:11.360
So, yeah, check out py tests if you're up for it.

00:30:11.360 --> 00:30:14.820
Oh, one of the things, I'm really glad they deprecated nose.

00:30:14.820 --> 00:30:15.440
I can't remember.

00:30:15.440 --> 00:30:18.840
Can't remember where it's listed here, but they're, they're not using.

00:30:18.840 --> 00:30:21.460
So set up this, just the keywords, set up and tear down.

00:30:21.460 --> 00:30:22.700
You could define functions.

00:30:22.700 --> 00:30:26.620
You were able to define functions, set up and tear down, and those were run automatically,

00:30:26.620 --> 00:30:30.880
but those were run automatically because they were part of the nose support.

00:30:30.880 --> 00:30:35.500
So even if you don't know what nose is, if you're using those, those are deprecated.

00:30:35.500 --> 00:30:36.820
So stop using those.

00:30:36.820 --> 00:30:41.160
there's other ways to, to do set up and tear down with py test.

00:30:41.160 --> 00:30:43.300
And so check that out if you're using that.

00:30:43.300 --> 00:30:47.620
And I'm, and then the first edition of the py test book, I actually talked about set up and

00:30:47.620 --> 00:30:51.000
tear down and luckily in the second edition, I took those out.

00:30:51.000 --> 00:30:52.360
So yeah.

00:30:52.360 --> 00:30:52.840
Very good.

00:30:52.840 --> 00:30:53.260
You saw that.

00:30:53.260 --> 00:30:53.600
Awesome.

00:30:53.600 --> 00:30:55.180
Awesome.

00:30:55.180 --> 00:30:55.740
Cool.

00:30:55.740 --> 00:30:59.320
bit of followup on your Jupyter item here.

00:30:59.320 --> 00:31:03.600
Henry Schreiner says, you can also use this in labs in JupyterLab, not the old notebook.

00:31:03.600 --> 00:31:08.520
So if you want to use rise live editable presentations, that still requires the old notebook.

00:31:08.520 --> 00:31:08.900
Same.

00:31:08.900 --> 00:31:09.240
Okay.

00:31:09.240 --> 00:31:09.720
Okay.

00:31:09.720 --> 00:31:12.120
So you can do use JupyterLab for presentations too.

00:31:12.120 --> 00:31:12.660
Awesome.

00:31:12.940 --> 00:31:13.080
Yeah.

00:31:13.080 --> 00:31:13.620
Yeah.

00:31:13.620 --> 00:31:13.940
Very cool.

00:31:13.940 --> 00:31:20.940
And then also Brandon points out that background task from when we credited FastAPI may actually

00:31:20.940 --> 00:31:21.800
come from starlet.

00:31:21.800 --> 00:31:24.760
For those of you don't know, FastAPI is a layer on top of starlet.

00:31:24.760 --> 00:31:29.140
So a lot of times what people perceive as a FastAPI feature is actually a starlet feature.

00:31:29.320 --> 00:31:36.540
And, it also, Henry says that also now the notebooks now warn you, if you return

00:31:36.540 --> 00:31:41.660
from a test on, sorry, now also warns you for a term from a pitest function, this would

00:31:41.660 --> 00:31:43.080
be an error in pitest eight.

00:31:43.080 --> 00:31:43.460
Okay.

00:31:43.460 --> 00:31:44.020
Yeah.

00:31:44.280 --> 00:31:48.600
Well, yeah, apparently some people were like returning true or false from their test functions

00:31:48.600 --> 00:31:52.780
and, and wanting that to like indicate whether a test passed or failed.

00:31:52.780 --> 00:31:53.700
Don't do that.

00:31:53.700 --> 00:31:55.540
Didn't you just parse the print statements?

00:31:55.540 --> 00:31:58.340
No, it's an exception.

00:31:58.340 --> 00:32:00.560
If an exception happens, that's a failure.

00:32:00.560 --> 00:32:01.920
So of course.

00:32:01.920 --> 00:32:02.320
All right.

00:32:02.320 --> 00:32:05.020
I got a few extras and we'll, we'll bust out some jokes.

00:32:05.020 --> 00:32:05.480
These are quick.

00:32:05.480 --> 00:32:11.580
Rich, the colorizing formatting, awesome TUI foundation is great.

00:32:11.580 --> 00:32:13.560
Now available on PyScript.

00:32:13.560 --> 00:32:19.680
So rich, yeah, you just, you just do rich things and just, you know, print this stuff

00:32:19.680 --> 00:32:20.060
all out.

00:32:20.060 --> 00:32:20.720
And guess what?

00:32:20.720 --> 00:32:25.100
It now comes out as like colorized output and HTML, I guess.

00:32:25.100 --> 00:32:29.780
I'm not sure, where the destination is going to land, but, it says rebel.

00:32:29.780 --> 00:32:32.720
So I'm guessing, maybe, prints out in the rebel there.

00:32:32.720 --> 00:32:35.460
Anyway, there's a bunch of notes on how to use rich in PyScript.

00:32:35.540 --> 00:32:38.960
So if you like PyScript and you're tracking that project and you like rich, put them together.

00:32:38.960 --> 00:32:43.280
Also, we talked about, YouTube videos and you could get a, make a talk.

00:32:43.280 --> 00:32:44.120
You could just make it a video.

00:32:44.120 --> 00:32:50.720
So I did a Python 311 in 100 seconds video that I released, yesterday, the day before.

00:32:50.720 --> 00:32:51.900
I think it was yesterday actually.

00:32:51.900 --> 00:32:52.360
Yeah.

00:32:52.360 --> 00:32:55.340
Anyway, people can check that out if they've got a hundred seconds to spare and they want

00:32:55.340 --> 00:32:58.600
to know what's cool about Python 311 and why it's neat.

00:32:58.600 --> 00:32:59.700
that's fun.

00:32:59.700 --> 00:33:01.120
links in the show notes there.

00:33:01.120 --> 00:33:01.800
All right.

00:33:01.800 --> 00:33:02.580
Ready for some jokes?

00:33:02.580 --> 00:33:03.260
Yes.

00:33:03.260 --> 00:33:03.740
Okay.

00:33:03.980 --> 00:33:08.700
So here's one, it's titled laughter in Linux, but it's about windows.

00:33:08.700 --> 00:33:12.760
So you might have to go back a ways for people to get this joke, but let's see.

00:33:12.760 --> 00:33:14.640
I know you spent some time in windows, Brian.

00:33:14.640 --> 00:33:15.580
Let me see what you think about this.

00:33:15.800 --> 00:33:20.420
So here's like, sort of a karate master type of scenario.

00:33:20.420 --> 00:33:26.020
And like the sensei says, it's time for you to look inward and start asking yourself the

00:33:26.020 --> 00:33:26.600
big question.

00:33:26.600 --> 00:33:28.220
What happened to the A and B drive?

00:33:28.220 --> 00:33:29.360
Hmm.

00:33:29.620 --> 00:33:31.000
Because it's all you see, right?

00:33:31.000 --> 00:33:32.020
It's all you see.

00:33:32.020 --> 00:33:34.200
It used to make that noise.

00:33:34.200 --> 00:33:36.480
Pretty much.

00:33:36.480 --> 00:33:38.000
If it's not a C drive, it makes noise.

00:33:38.000 --> 00:33:39.740
It's my understanding from my history.

00:33:39.740 --> 00:33:42.580
It, some of them make that, sort of a disky noise.

00:33:42.580 --> 00:33:46.520
Are there like a CD seeking noise, but there's always a noise associated with a non C drive.

00:33:46.520 --> 00:33:48.220
I know that's not always true, but it's fun.

00:33:49.340 --> 00:33:49.740
All right.

00:33:49.740 --> 00:33:50.240
Other one.

00:33:50.240 --> 00:33:55.880
This one is not about OSs and discs, but rather databases and it's dating advice.

00:33:55.880 --> 00:34:00.900
So here's a woman talking to a clearly nerdy programmer type.

00:34:00.900 --> 00:34:04.420
And it says, what do you need for a good relationship?

00:34:04.420 --> 00:34:05.600
The guy looks at her.

00:34:05.600 --> 00:34:06.920
Obviously primary keys.

00:34:06.920 --> 00:34:07.900
Primary keys.

00:34:07.900 --> 00:34:11.120
Yeah.

00:34:11.120 --> 00:34:12.060
So bad.

00:34:12.060 --> 00:34:13.620
Anyway, that's what I got.

00:34:13.620 --> 00:34:15.060
Dude from the IT crowd.

00:34:15.060 --> 00:34:15.620
Okay.

00:34:15.620 --> 00:34:15.960
Yeah.

00:34:15.960 --> 00:34:16.340
Yeah.

00:34:16.340 --> 00:34:18.520
I need to watch more TV to fully catch the means.

00:34:18.520 --> 00:34:18.940
Don't I?

00:34:19.280 --> 00:34:20.700
So, yeah.

00:34:20.700 --> 00:34:21.180
Cool.

00:34:21.180 --> 00:34:21.700
All right.

00:34:21.700 --> 00:34:23.620
Well, always fun to have you here.

00:34:23.620 --> 00:34:25.120
Definitely.

00:34:25.120 --> 00:34:25.840
Thanks.

00:34:25.840 --> 00:34:28.260
And thanks everybody for showing up an hour early.

00:34:28.260 --> 00:34:29.300
I really appreciate it.

00:34:29.300 --> 00:34:29.860
Yeah, absolutely.

00:34:29.860 --> 00:34:32.680
Try to be the, we'll try to stick to that time for a while.

00:34:32.680 --> 00:34:35.380
And I guess we'll let you know if we don't.

00:34:35.380 --> 00:34:35.900
All right.

00:34:35.900 --> 00:34:36.500
See y'all later.

