WEBVTT

00:00:00.001 --> 00:00:03.600
Hey everyone, 2020 has been quite the year, hasn't it?

00:00:03.600 --> 00:00:05.780
Definitely one of those for the history books.

00:00:05.780 --> 00:00:11.820
So over on Talk Python To Me, I did a year in review show and it actually had me and Brian

00:00:11.820 --> 00:00:16.940
on there along with a bunch of other really great guests who have been on this show and

00:00:16.940 --> 00:00:18.020
on Talk Python before.

00:00:18.020 --> 00:00:22.700
So I thought what we could do for our year in review here is to bring you that same show,

00:00:22.700 --> 00:00:24.220
to bring you that same conversation.

00:00:24.220 --> 00:00:28.700
In fact, it was more in the style of Python Bytes than it was Talk Python to be honest.

00:00:28.700 --> 00:00:29.980
So I think it belongs here.

00:00:30.220 --> 00:00:37.080
So without further ado, let's join that conversation where we look back on 2020 with Cecil Phillip,

00:00:37.080 --> 00:00:42.540
Ines Montani, Jay Miller, Paul Everett, Reuven Lerner, Matt Harrison, Brian Okken, and me.

00:00:42.540 --> 00:00:46.660
Enjoy the show and thank you so much for listening to Python Bytes this year.

00:00:46.660 --> 00:00:47.900
We'll see you in 2021.

00:00:47.900 --> 00:00:51.700
So let's go ahead and just kick off this episode.

00:00:51.700 --> 00:00:53.880
This one is a little bit different than the standard show.

00:00:53.880 --> 00:00:58.360
Everyone here has been a guest and a great guest and some of you even repeat guests.

00:00:58.360 --> 00:01:02.140
Some of you are a repeat guest and scheduled for more episodes even, hint, hint, Ines.

00:01:02.140 --> 00:01:04.020
But let's go ahead and kick it off.

00:01:04.020 --> 00:01:05.660
So this is going to be a year in review.

00:01:05.660 --> 00:01:08.140
There's a bunch of us here, seven or eight of us.

00:01:08.140 --> 00:01:10.120
And I'll just do a quick introduction.

00:01:10.120 --> 00:01:12.540
Let me just welcome you individually on.

00:01:12.540 --> 00:01:16.020
You could say, you know, a couple sentences about who you are and whatnot so people know.

00:01:16.020 --> 00:01:20.540
And then we're just going to get into what you thought was the most interesting, impactful

00:01:20.540 --> 00:01:21.300
thing of the year.

00:01:21.460 --> 00:01:23.100
And I have some software to help me do this.

00:01:23.100 --> 00:01:24.140
So let me run it here.

00:01:24.140 --> 00:01:24.760
Darn it.

00:01:24.760 --> 00:01:25.400
It's me.

00:01:25.400 --> 00:01:25.880
All right.

00:01:25.880 --> 00:01:26.500
We'll go back to that.

00:01:26.500 --> 00:01:28.400
Well, let me welcome you all.

00:01:28.400 --> 00:01:29.040
Then we'll go through this.

00:01:29.040 --> 00:01:32.460
So Jay, Jay Miller, welcome to Talk By The Me again.

00:01:32.460 --> 00:01:33.360
Happy to be here.

00:01:33.360 --> 00:01:35.200
I haven't been a guest in like three years.

00:01:35.200 --> 00:01:38.020
So I know, but your episode was so popular.

00:01:38.020 --> 00:01:40.380
Like over a hundred thousand people listen to your episode.

00:01:40.380 --> 00:01:40.980
Can you believe that?

00:01:40.980 --> 00:01:41.940
That's so insane.

00:01:41.940 --> 00:01:43.500
I'm shutting down my podcast.

00:01:43.500 --> 00:01:44.660
I don't get those kind of listens.

00:01:46.000 --> 00:01:47.040
Tell people about yourself.

00:01:47.040 --> 00:01:48.580
Sure.

00:01:48.580 --> 00:01:49.320
Jay Miller.

00:01:49.320 --> 00:01:53.740
I'm a podcaster, developer, now developer advocate for Elastic.

00:01:53.740 --> 00:01:58.560
You know, the people that do search and we are database shots again, Michael.

00:01:58.560 --> 00:02:02.200
But yeah, I'm just happy to be here.

00:02:02.200 --> 00:02:03.160
Yeah, that's it.

00:02:03.160 --> 00:02:03.800
Awesome.

00:02:03.800 --> 00:02:04.280
Welcome.

00:02:04.280 --> 00:02:05.260
Reuven Lerner.

00:02:05.260 --> 00:02:06.180
Welcome back.

00:02:06.180 --> 00:02:07.060
Good to see you, man.

00:02:07.060 --> 00:02:07.420
Hey there.

00:02:07.420 --> 00:02:07.980
Nice to be here.

00:02:07.980 --> 00:02:09.260
How early is it?

00:02:09.260 --> 00:02:10.180
It's not that early.

00:02:10.180 --> 00:02:10.940
It's only 530.

00:02:10.940 --> 00:02:11.720
Oh, okay.

00:02:11.720 --> 00:02:13.720
Well, thank you so much for waking up early and making.

00:02:13.720 --> 00:02:17.000
Yeah, we have people from basically every corner of the world.

00:02:17.000 --> 00:02:20.300
So yeah, tell people about yourself again, if they haven't heard the episodes.

00:02:20.300 --> 00:02:20.840
Sure.

00:02:20.840 --> 00:02:22.840
So I'm a Python trainer.

00:02:22.840 --> 00:02:27.040
So most days I'm in different companies doing on-site training.

00:02:27.040 --> 00:02:29.640
Nowadays, a little less on-site for some strange reason.

00:02:29.640 --> 00:02:34.220
And so I normally do corporate training, everything from intro to Python for non-programmers all

00:02:34.220 --> 00:02:35.640
the way up to advanced Python workshops.

00:02:35.640 --> 00:02:38.980
And I also sell a whole bunch of courses online to individuals.

00:02:38.980 --> 00:02:40.240
Oh, and I have my book.

00:02:40.240 --> 00:02:41.680
My book, Python Workout.

00:02:41.680 --> 00:02:42.220
Yay.

00:02:42.440 --> 00:02:44.940
Yeah, and we're streaming live with video.

00:02:44.940 --> 00:02:45.740
So you can hold it up.

00:02:45.740 --> 00:02:46.400
Yeah, that's awesome.

00:02:46.400 --> 00:02:47.880
Oh, I can hold it up.

00:02:47.880 --> 00:02:49.120
Python Workout.

00:02:49.120 --> 00:02:49.420
Awesome.

00:02:49.420 --> 00:02:50.640
And it's the picture of me on the cover, of course.

00:02:50.640 --> 00:02:51.420
Of course.

00:02:51.420 --> 00:02:51.680
Yeah.

00:02:51.680 --> 00:02:53.640
That was when you were working out, preparing for the Olympics.

00:02:53.640 --> 00:02:54.440
Precisely.

00:02:54.440 --> 00:02:54.800
Precisely.

00:02:54.800 --> 00:02:55.260
Yeah, exactly.

00:02:55.260 --> 00:02:58.600
So we'll be sure to link to your book and some of your courses as well.

00:02:58.600 --> 00:03:01.680
Ines, welcome from the other side of the world.

00:03:01.680 --> 00:03:03.660
Yeah, I'm currently in Australia.

00:03:03.660 --> 00:03:06.180
Escaped the EU lockdowns.

00:03:06.180 --> 00:03:06.780
And now I'm here.

00:03:06.780 --> 00:03:07.880
Yeah, happy to be back.

00:03:07.880 --> 00:03:09.820
I think I've been on a few of your podcasts.

00:03:09.820 --> 00:03:11.100
But it's always my favorite podcast.

00:03:11.100 --> 00:03:11.900
Oh, thank you.

00:03:11.900 --> 00:03:14.020
Yeah, it's awesome to have you here.

00:03:14.020 --> 00:03:18.980
And I have definitely dreamed about, well, my daughter goes to school online.

00:03:18.980 --> 00:03:20.600
I always work online.

00:03:20.600 --> 00:03:23.160
Maybe we should just go somewhere by a beach away from people.

00:03:23.160 --> 00:03:24.640
How can we do that where it's warm?

00:03:24.640 --> 00:03:24.980
Right?

00:03:24.980 --> 00:03:26.140
And it seems like you pulled it off.

00:03:26.140 --> 00:03:26.660
Beautiful.

00:03:26.660 --> 00:03:27.620
All right, Paul.

00:03:27.620 --> 00:03:28.340
Paul Everett, welcome.

00:03:28.740 --> 00:03:30.540
I just saw Anthony Shaw talking.

00:03:30.540 --> 00:03:36.720
So if you want to talk about converting your life to work at the beach, just subscribe to his damn Twitter account.

00:03:36.720 --> 00:03:37.940
Welcome, Anthony Shaw.

00:03:37.940 --> 00:03:39.200
Anthony, I'm raging against you.

00:03:39.200 --> 00:03:40.240
Oh, my gosh.

00:03:40.240 --> 00:03:41.160
Also from Australia.

00:03:41.160 --> 00:03:41.720
Hey, Anthony.

00:03:41.720 --> 00:03:44.140
And Andrew from PyCharm is here.

00:03:44.140 --> 00:03:45.260
A bunch of folks.

00:03:45.260 --> 00:03:45.900
Mark, awesome.

00:03:45.900 --> 00:03:47.040
Paul, introduce yourself.

00:03:47.340 --> 00:03:47.520
Sure.

00:03:47.520 --> 00:03:51.660
Developer advocate at JetBrains for Python stuff and web stuff.

00:03:51.660 --> 00:03:54.800
Most known for giving the Python 1994 talk.

00:03:54.800 --> 00:04:01.020
My purpose on this panel is to increase the median age so that we all qualify for the discount at the buffet.

00:04:01.020 --> 00:04:02.180
Hey, man.

00:04:02.180 --> 00:04:02.860
I'm right there with you.

00:04:02.860 --> 00:04:03.580
Right there with you.

00:04:03.580 --> 00:04:03.840
Awesome.

00:04:03.840 --> 00:04:04.780
Nice to have you, Paul.

00:04:04.780 --> 00:04:06.880
Brian, we've met before, right?

00:04:06.880 --> 00:04:07.620
Yeah.

00:04:07.620 --> 00:04:11.080
Brian Okken, he and I co-host Python Bytes Together.

00:04:11.420 --> 00:04:13.280
And you've been on the show quite a few times as well.

00:04:13.280 --> 00:04:15.840
Last time, I think we covered 30 pytest plugins.

00:04:15.840 --> 00:04:17.060
That was quite the whirlwind tour.

00:04:17.060 --> 00:04:17.540
Yeah.

00:04:17.540 --> 00:04:20.760
So I highly recommend this book to anybody that wants to learn pytest.

00:04:20.760 --> 00:04:21.220
Awesome.

00:04:21.220 --> 00:04:22.640
Matt Harrison, welcome back.

00:04:22.640 --> 00:04:23.100
Thanks.

00:04:23.100 --> 00:04:23.780
Good to be here.

00:04:23.780 --> 00:04:26.540
I guess I'm similar to Reuben.

00:04:26.540 --> 00:04:29.940
I do corporate training and consulting in Python and data science.

00:04:29.940 --> 00:04:33.560
And I guess since we're flaunting books, I'll flaunt my latest book.

00:04:33.560 --> 00:04:34.180
Wait, wait.

00:04:34.180 --> 00:04:35.920
The tiny Python 3 notebook.

00:04:35.920 --> 00:04:36.300
Awesome.

00:04:36.300 --> 00:04:36.960
Tiny Python notebook.

00:04:36.960 --> 00:04:37.900
It's very small.

00:04:37.900 --> 00:04:38.480
Anyway.

00:04:38.480 --> 00:04:39.200
It is tiny.

00:04:39.200 --> 00:04:41.080
Well, what I was going to say, Matt, is like,

00:04:41.120 --> 00:04:43.960
you're going to need to be like basically an octopus to hold up all your books.

00:04:43.960 --> 00:04:45.900
Like multiple books on each tentacle.

00:04:45.900 --> 00:04:47.120
I've got a few here.

00:04:47.120 --> 00:04:48.460
So yeah, it's good to be here.

00:04:48.460 --> 00:04:49.240
Thanks for having me on.

00:04:49.240 --> 00:04:49.680
Yeah.

00:04:49.680 --> 00:04:49.840
Yeah.

00:04:49.840 --> 00:04:52.000
You were just recently on about learning how to learn.

00:04:52.000 --> 00:04:52.520
Yeah.

00:04:52.520 --> 00:04:55.100
Does it count if I have everyone else's book?

00:04:55.100 --> 00:04:55.920
Yes, it does.

00:04:55.920 --> 00:04:58.980
But it would also be hard to hold them all up, especially if you got all of Matt's.

00:04:58.980 --> 00:05:00.920
Cecil Phillip, man.

00:05:00.920 --> 00:05:01.220
Hello.

00:05:01.220 --> 00:05:01.900
Good to see you, friend.

00:05:01.900 --> 00:05:03.440
Hey, thanks for having me on.

00:05:03.440 --> 00:05:06.740
I don't have any books to share, but because I hate writing.

00:05:06.740 --> 00:05:07.700
So I don't write anything.

00:05:07.700 --> 00:05:08.820
I do do some video.

00:05:08.820 --> 00:05:09.940
So if y'all are interested.

00:05:10.480 --> 00:05:13.820
I do do a weekly Python stream on Wednesdays.

00:05:13.820 --> 00:05:17.580
So if you folks want to check it out, it's on Twitch at the Microsoft developer account.

00:05:17.580 --> 00:05:22.480
And we do very beginner friendly conversations about Python and stuff like that.

00:05:22.480 --> 00:05:24.320
And Michael, you were just on the other day too, right?

00:05:24.320 --> 00:05:24.580
Yeah.

00:05:24.580 --> 00:05:25.640
It was so fun to be on there with you.

00:05:25.640 --> 00:05:27.160
We got to play around with FastAPI.

00:05:27.160 --> 00:05:28.580
And man, that's a cool framework.

00:05:28.580 --> 00:05:30.060
So it's Coding from the Beach.

00:05:30.060 --> 00:05:31.100
What's the name of the show?

00:05:31.100 --> 00:05:32.400
That's a good name, actually.

00:05:32.400 --> 00:05:33.480
Maybe I should coin that one.

00:05:33.480 --> 00:05:36.100
No, so we do Pi Weekly.

00:05:36.100 --> 00:05:39.060
So it's me and my coworker, Brian Clark.

00:05:39.060 --> 00:05:44.740
And we kind of approach Python from the perspective of beginners, but also from two people that

00:05:44.740 --> 00:05:47.260
don't necessarily know Python very well.

00:05:47.260 --> 00:05:49.240
So Brian is a JavaScript guy.

00:05:49.240 --> 00:05:50.060
I'm a .NET guy.

00:05:50.060 --> 00:05:52.440
But we're both, I like to call it Pi curious.

00:05:52.440 --> 00:05:53.280
You know what I mean?

00:05:53.280 --> 00:05:54.240
Like we're Python curious.

00:05:54.820 --> 00:05:59.180
And, you know, we definitely want to show people like the different perspectives of learning

00:05:59.180 --> 00:05:59.880
like new languages.

00:05:59.880 --> 00:06:00.460
Yeah.

00:06:00.460 --> 00:06:01.200
It's super interesting.

00:06:01.200 --> 00:06:02.140
And it's really low key.

00:06:02.140 --> 00:06:08.720
It's like you said, it's this Twitch sort of exploration style of code, not polished presentation

00:06:08.720 --> 00:06:09.100
style.

00:06:09.100 --> 00:06:13.260
So you just guys sit down, take feedback from the audiences and go with it.

00:06:13.260 --> 00:06:13.620
Yeah.

00:06:13.620 --> 00:06:15.640
I love the show because I'm never prepared.

00:06:15.640 --> 00:06:19.360
Like I kind of just show up and talk about stuff and people love it.

00:06:19.360 --> 00:06:21.080
And it's great.

00:06:21.080 --> 00:06:23.180
I don't have to do notes or anything like that.

00:06:23.240 --> 00:06:25.400
We just kind of be like, hey, what do we want to learn about today?

00:06:25.400 --> 00:06:25.740
Right.

00:06:25.740 --> 00:06:26.580
Well, let's go ahead and do it.

00:06:26.580 --> 00:06:26.980
Yeah.

00:06:26.980 --> 00:06:27.660
Fantastic.

00:06:27.660 --> 00:06:28.540
All right.

00:06:28.540 --> 00:06:32.620
Well, given how many of us there are, let's go ahead and just jump in and we're going to

00:06:32.620 --> 00:06:33.540
do our year in review.

00:06:33.540 --> 00:06:36.880
And so I've written a small piece of Python software here in the REPL.

00:06:36.880 --> 00:06:37.800
It's very advanced.

00:06:37.800 --> 00:06:39.080
It's at least four lines of code.

00:06:39.080 --> 00:06:39.760
I got to tell you.

00:06:39.760 --> 00:06:42.920
And what it's going to do is going to pick one of you and then we're going to have you

00:06:42.920 --> 00:06:47.900
talk about what you felt was the most significant or impactful thing that you saw

00:06:47.900 --> 00:06:49.220
happening in the Python space.

00:06:49.220 --> 00:06:52.180
So round one, Cecil, you're on screen.

00:06:52.440 --> 00:06:53.560
It pulled you up.

00:06:53.560 --> 00:06:54.140
Go for it.

00:06:54.140 --> 00:06:54.760
I got lucky.

00:06:54.760 --> 00:06:55.160
Okay.

00:06:55.160 --> 00:07:01.360
So the most exciting thing that I think happened in the world of Python and one that I have

00:07:01.360 --> 00:07:06.860
a little bit of a close relationship to is the fact that Guido van Rossum joined Microsoft

00:07:06.860 --> 00:07:08.500
just a couple of weeks ago.

00:07:08.500 --> 00:07:11.920
So I didn't mention this before, but I do work at Microsoft as a developer advocate.

00:07:12.340 --> 00:07:18.680
And I think for me, it's been a really interesting to kind of see how the company has been embracing

00:07:18.680 --> 00:07:24.160
open source and working with a lot of the creators and now seeing a lot of the leaders of the industry

00:07:24.160 --> 00:07:25.760
kind of join the company.

00:07:25.760 --> 00:07:26.520
You know what I mean?

00:07:26.520 --> 00:07:29.360
It kind of, you know, it's a kind of, it's like a different world.

00:07:29.360 --> 00:07:32.260
I mean, I don't know how else to explain it or talk about it.

00:07:32.260 --> 00:07:33.920
It's been really great to have him here.

00:07:34.300 --> 00:07:39.020
I had the opportunity actually to interview him and we did like an internal interview

00:07:39.020 --> 00:07:42.480
just talking about like, well, what made you decide to come out of retirement?

00:07:42.480 --> 00:07:43.720
That's awesome.

00:07:43.720 --> 00:07:44.840
Was this on channel nine?

00:07:44.840 --> 00:07:46.340
Is it public or is it?

00:07:46.340 --> 00:07:47.160
No, it was internal.

00:07:47.160 --> 00:07:48.140
It was an internal interview.

00:07:48.140 --> 00:07:50.280
I don't know what his, his, I don't know.

00:07:50.320 --> 00:07:53.060
I'm sure he'll do some other ones, but we, it was an internal one.

00:07:53.060 --> 00:07:54.340
Did you make him whiteboard?

00:07:54.340 --> 00:07:56.240
No, we didn't do him any whiteboarding.

00:07:56.240 --> 00:07:58.320
We did ask him what some of his favorite shows were.

00:07:58.320 --> 00:07:59.740
So that was, that was pretty interesting.

00:07:59.740 --> 00:08:03.040
We asked him like the Star Trek versus Star Wars conversation too.

00:08:03.040 --> 00:08:05.020
I couldn't, I couldn't handle that pressure.

00:08:05.020 --> 00:08:06.560
It's hard, man.

00:08:06.560 --> 00:08:07.140
Tough crowd.

00:08:07.140 --> 00:08:08.000
Tough crowd.

00:08:08.000 --> 00:08:12.680
I think it's definitely amazing to be able to see folks from the industry, like kind of

00:08:12.680 --> 00:08:17.780
embracing like these different companies and us really supporting open source in a very

00:08:17.780 --> 00:08:19.020
like authentic way.

00:08:19.020 --> 00:08:19.460
Yeah.

00:08:19.460 --> 00:08:20.860
It's such a big change.

00:08:20.860 --> 00:08:24.880
And Reuben, you were just talking before we started streaming, I think about, you know,

00:08:24.880 --> 00:08:26.380
10 years ago, how this was really different.

00:08:26.380 --> 00:08:27.040
Oh yeah.

00:08:27.040 --> 00:08:31.820
I mean like even more, but yeah, even 10 years ago, the notion that Microsoft would be so

00:08:31.820 --> 00:08:36.680
involved in the open source space and specifically the Python space was basically unthinkable.

00:08:36.680 --> 00:08:40.280
I mean, I think it was Steve Ballmer who said that, you know, Microsoft, not Microsoft,

00:08:40.280 --> 00:08:45.660
like the Linux and open source were a cancer on the industry and they were definitely seen, you know,

00:08:45.660 --> 00:08:49.000
Microsoft was seen as an enemy of the open source world.

00:08:49.000 --> 00:08:51.580
And it's been truly amazing to see them just embrace it.

00:08:51.580 --> 00:08:54.820
I mean, you see the booth at Python, you see the VS Code investment.

00:08:54.820 --> 00:08:56.100
It's very, very impressive.

00:08:56.100 --> 00:09:00.180
And it demonstrates, and he says, we'll say this earlier, like how much leadership at the

00:09:00.180 --> 00:09:03.160
top really can change the direction and the attitude of a company.

00:09:03.160 --> 00:09:07.700
And that filters through to even the lower level people and the decisions made there.

00:09:07.700 --> 00:09:08.120
Yeah.

00:09:08.120 --> 00:09:09.800
That's a lot of hard work, right?

00:09:09.800 --> 00:09:13.580
Because if you think about it, we've had different leadership for a very long time.

00:09:13.580 --> 00:09:18.340
And so for some of us, some of this change that people are still recognizing, I mean, we've been

00:09:18.340 --> 00:09:19.540
doing it for a very long time.

00:09:19.540 --> 00:09:20.220
You know what I mean?

00:09:20.220 --> 00:09:24.600
Like we didn't just in 2020 decide, oh, hey, let's adopt and support open source.

00:09:24.760 --> 00:09:28.820
It's been one of those things that have been building, you know, very much over time.

00:09:28.820 --> 00:09:32.900
But, you know, the fact of the matter is like you still have those old stigmas that we still

00:09:32.900 --> 00:09:33.480
have to shake.

00:09:33.480 --> 00:09:37.360
And, you know, we still have a lot of folks that we have to help convince that we're not

00:09:37.360 --> 00:09:40.560
the death star and we won't, you know, destroy the world kind of thing.

00:09:42.800 --> 00:09:46.640
But I think it's a good responsibility to take on because there's also, you know, there's

00:09:46.640 --> 00:09:47.360
a lot to fuck up.

00:09:47.360 --> 00:09:51.960
And if you commit to like doing something like, you know, GitHub acquisition and say, okay,

00:09:51.960 --> 00:09:55.780
we're doing that and we're running it, you know, we're good sign forward because every

00:09:55.780 --> 00:09:59.160
misstep can have like, you know, a really big impact.

00:09:59.160 --> 00:10:02.900
You know, if Microsoft starts doing bad things again, people are not going to be, you know,

00:10:02.900 --> 00:10:03.800
very forgiving at all.

00:10:03.800 --> 00:10:08.400
So I think that was the most sensitive one of them all is the GitHub acquisition because

00:10:08.400 --> 00:10:10.920
what they do to Azure is kind of their story.

00:10:10.920 --> 00:10:12.360
What they do to Windows is their story.

00:10:12.360 --> 00:10:14.200
But what they do to GitHub, that's everyone's story.

00:10:14.200 --> 00:10:16.280
And all of a sudden, that was a big deal.

00:10:16.280 --> 00:10:22.080
And on top of that, you have the ability to give GitHub a little bit more power in the space.

00:10:22.080 --> 00:10:26.500
Like, I mean, we've all been kind of watching what's happening with like YouTube DL and stuff

00:10:26.500 --> 00:10:27.100
like that.

00:10:27.100 --> 00:10:31.220
And just seeing the support, it's not just GitHub anymore.

00:10:31.220 --> 00:10:37.840
Now it's like, okay, what does one of the wealthiest companies in the world, you know, say

00:10:37.840 --> 00:10:42.340
about this particular position that YouTubers have a problem with that people in tech,

00:10:42.340 --> 00:10:45.580
have a problem with like a lot of abusive behavior.

00:10:45.580 --> 00:10:48.780
And on top of that, you're providing support for things likenpm.

00:10:48.780 --> 00:10:50.120
It's one of those questions.

00:10:50.120 --> 00:10:55.820
We all want to contribute to open source, but none of us have the financial ability to contribute

00:10:55.820 --> 00:10:58.000
like a company like Microsoft can.

00:10:58.000 --> 00:11:02.200
So I'm not just saying we're going to be a part of it, but saying, no, we're really going

00:11:02.200 --> 00:11:04.020
to be a part of it is like a huge deal.

00:11:04.380 --> 00:11:04.740
Yeah.

00:11:04.740 --> 00:11:07.920
The million dollar defense fund that they just announced is a big deal.

00:11:07.920 --> 00:11:08.800
Yeah, for sure.

00:11:08.800 --> 00:11:10.660
And when you think about GitHub, right?

00:11:10.660 --> 00:11:15.420
Like you think about like developer culture, that's what GitHub kind of represents to me

00:11:15.420 --> 00:11:18.840
is the new, you know, the future of developer culture.

00:11:18.840 --> 00:11:20.000
Like how do we collaborate?

00:11:20.000 --> 00:11:21.120
How do we work with each other?

00:11:21.120 --> 00:11:25.640
How do we share not just source code, but like experiences and knowledge, right?

00:11:25.640 --> 00:11:27.980
Through like something that we can all connect together with.

00:11:27.980 --> 00:11:28.960
That's code, right?

00:11:28.960 --> 00:11:34.320
And then kind of circling it back around to Vita, being able to, again, see these leaders

00:11:34.320 --> 00:11:39.860
of these really large open source projects put their faith in the company and even considering

00:11:39.860 --> 00:11:42.280
what the past of the company was to what it is today.

00:11:42.280 --> 00:11:46.800
I think hopefully like the rest of the open source world would start to realize that we

00:11:46.800 --> 00:11:51.500
are serious about being good open source citizens and supporting the culture and the community.

00:11:51.500 --> 00:11:54.560
I mean, me personally, I'm just really excited to see what he's going to do, what he's going

00:11:54.560 --> 00:11:55.140
to work on.

00:11:55.140 --> 00:11:56.360
The future is bright, man.

00:11:56.360 --> 00:11:57.220
Yeah, absolutely.

00:11:57.220 --> 00:12:03.360
I think someone on Twitter had said, so now we actually hire folks that contributes

00:12:03.360 --> 00:12:08.680
to, you know, obviously C# and F sharp and the .NET stuff, but also folks that contribute

00:12:08.680 --> 00:12:12.920
to Java, Rust, C++, and obviously Python, right?

00:12:12.920 --> 00:12:16.400
So we have a whole host of language folks underneath the umbrella of the company.

00:12:16.400 --> 00:12:20.960
And so now being able to have that space of collaboration, like underneath the umbrella

00:12:20.960 --> 00:12:24.600
of one company, I think is going to be really interesting to see what the next couple of years

00:12:24.600 --> 00:12:25.040
looks like.

00:12:25.040 --> 00:12:25.340
Yeah.

00:12:25.380 --> 00:12:28.260
You're going to have to come back in six months and give us an update on all the Python

00:12:28.260 --> 00:12:29.000
changes you see.

00:12:29.000 --> 00:12:30.340
I'll give you the six month update on it.

00:12:30.340 --> 00:12:34.160
This episode is brought to you by Linode.

00:12:34.160 --> 00:12:39.200
Simplify your infrastructure and cut your cloud bills in half with Linode's Linux virtual machines.

00:12:39.200 --> 00:12:43.100
Develop, deploy, and scale your modern applications faster and easier.

00:12:43.100 --> 00:12:47.900
Whether you're developing a personal project or managing larger workloads, you deserve simple,

00:12:47.900 --> 00:12:50.600
affordable, and accessible cloud computing solutions.

00:12:50.600 --> 00:12:54.680
As listeners of Python Bytes, you'll get $100 free credit.

00:12:55.140 --> 00:12:58.820
You can find all the details at pythonbytes.fm/Linode.

00:12:58.820 --> 00:13:03.680
Linode has data centers all around the world with the same simple and consistent pricing,

00:13:03.680 --> 00:13:05.060
regardless of location.

00:13:05.060 --> 00:13:08.240
Choose the data center that's nearest to you and your users.

00:13:08.240 --> 00:13:15.560
You'll receive 24-7, 365 human support with no tiers or handoffs, regardless of your plan size.

00:13:15.880 --> 00:13:22.860
You can choose shared or dedicated compute instances, or you can use your $100 in credit on the S3 compatible object storage,

00:13:22.860 --> 00:13:25.560
managed Kubernetes clusters, and more.

00:13:25.560 --> 00:13:28.100
If it runs on Linux, it runs on Linode.

00:13:28.100 --> 00:13:33.620
Visit pythonbytes.fm/Linode and click that create free account button to get started.

00:13:34.900 --> 00:13:36.640
All right, I'm going to run the chooser.

00:13:36.640 --> 00:13:38.420
Hall, it has chosen you.

00:13:38.420 --> 00:13:40.460
Not sure about your chooser algorithm here.

00:13:40.460 --> 00:13:41.440
There doesn't seem to be...

00:13:41.440 --> 00:13:44.960
Random dot choice.

00:13:44.960 --> 00:13:45.760
I'm telling you.

00:13:46.760 --> 00:13:52.560
This time, it's not a good time to talk about election strategies, seeing as how it chose you first.

00:13:52.560 --> 00:13:53.760
It could be flawed.

00:13:53.760 --> 00:13:55.080
We're reviewing it.

00:13:55.080 --> 00:13:57.440
Are you changing the random seat on every...

00:13:57.440 --> 00:13:58.480
Exactly.

00:13:58.480 --> 00:13:59.200
Exactly.

00:14:00.160 --> 00:14:00.800
Yeah, I should be.

00:14:00.800 --> 00:14:04.340
My topic is things change, nothing changes.

00:14:04.340 --> 00:14:07.280
And I think I'm maybe stealing someone else's topic.

00:14:07.280 --> 00:14:10.180
So I appreciate your random algorithm choosing me first.

00:14:10.180 --> 00:14:14.940
And it's kind of along the line, I'm kind of interested in open source communities over the years and decades

00:14:14.940 --> 00:14:17.240
and why one works, why one doesn't.

00:14:17.240 --> 00:14:23.180
In particular, a lot of open source projects that get successful kind of founder when the founder leaves.

00:14:23.180 --> 00:14:28.860
And over the last couple of years, you've seen Guido transition out, stepping down as BDFL.

00:14:29.540 --> 00:14:33.200
And kind of a new language governance model that he didn't even decide on.

00:14:33.200 --> 00:14:34.160
He let it emerge.

00:14:34.160 --> 00:14:39.520
And then new release managers, new PSF directors, all happening this year.

00:14:39.520 --> 00:14:43.360
A pandemic, which kind of destroyed the big fundraiser.

00:14:43.360 --> 00:14:45.840
An organizing event called PyCon.

00:14:45.840 --> 00:14:51.880
Python 2.7, end of life, which I guess a lot of us thought would never effing happen.

00:14:51.880 --> 00:14:53.100
And it effing happened.

00:14:53.100 --> 00:15:02.060
And through all of this change for a project that was like reaching mega escape velocity and popularity, nothing changed.

00:15:02.060 --> 00:15:03.200
Everyone's like, who cares?

00:15:03.200 --> 00:15:05.960
Python just kept on doing its business.

00:15:05.960 --> 00:15:07.740
Releases kept cranking out.

00:15:07.740 --> 00:15:09.180
Peps kept cranking out.

00:15:09.180 --> 00:15:10.100
Elections.

00:15:10.100 --> 00:15:12.580
Well, Python elections kept cranking out.

00:15:12.580 --> 00:15:15.700
Michael and Brian kept cranking out podcasts.

00:15:15.700 --> 00:15:16.500
Hallelujah.

00:15:16.920 --> 00:15:18.460
Something good happened in 2020.

00:15:18.460 --> 00:15:21.020
And so it's interesting to me.

00:15:21.020 --> 00:15:24.640
Healthy projects are those with kind of a healthy bench, kind of a middle management.

00:15:24.640 --> 00:15:27.060
Python has a hell of a middle management now.

00:15:27.060 --> 00:15:27.700
It's awesome.

00:15:27.700 --> 00:15:30.940
And it's like middle management in every vector now.

00:15:31.080 --> 00:15:37.520
It's got language leadership, middle management, foundation leadership, middle management, conferences.

00:15:37.520 --> 00:15:40.760
All the regional conferences are kicking ass, even online.

00:15:40.760 --> 00:15:51.200
So it's really good for me to see kind of a balance between some of the old heroes like Brett Cannon, who gave this awesome keynote two or three or four years ago at PyCon about open source.

00:15:51.360 --> 00:15:54.420
And then some of the new heroes like Marlene Mangami.

00:15:54.420 --> 00:15:57.840
When I give the Python 1994 talk, sometimes I give it with Barry.

00:15:57.840 --> 00:16:01.580
And it's like, well, did you ever know back then that it was good?

00:16:01.580 --> 00:16:02.780
Hell no, we didn't know.

00:16:02.780 --> 00:16:10.000
And so seeing all of this happen, seeing generation after generation come in, do their thing, raise the next generation is pretty cool to see.

00:16:10.000 --> 00:16:11.300
Yeah, it's fantastic.

00:16:11.300 --> 00:16:17.120
And I know there was a lot of uncertainty when Guido stepped down about, oh my gosh, what's going to happen.

00:16:17.120 --> 00:16:19.560
But it's kind of been a non-issue, which is good.

00:16:19.560 --> 00:16:21.020
Non-issue in a good way.

00:16:21.020 --> 00:16:28.080
Yeah, I think it's really nice to also have some stability, even especially nowadays, that's quite rare.

00:16:28.080 --> 00:16:36.060
And just to see stuff just works, nothing goes wrong, no drama, nothing terrible, just drama is almost boring.

00:16:36.060 --> 00:16:37.560
Yeah, boring is good these days.

00:16:37.560 --> 00:16:42.140
One of the things that really surprises me, Paul, as you mentioned the escape velocity,

00:16:42.140 --> 00:16:48.780
what's weird to me is how Python went like 20 years on medium, like simmer popularity,

00:16:48.780 --> 00:16:51.960
and then it hit the afterburners and took off, right?

00:16:51.960 --> 00:16:58.540
It seems just, I think there's going to be some interesting studies done about why or how did a language that had kind of been around for 20 years,

00:16:58.540 --> 00:17:01.480
all of a sudden really dramatically improve in popularity.

00:17:01.480 --> 00:17:05.680
And I have some ideas, but I just think that that's an interesting aspect of what you're talking about here.

00:17:05.680 --> 00:17:17.760
Yeah, it's also the whole aspect of the previous like Microsoft and Java and sort of, I guess, big money behind those sorts of languages in like the early 2000s, pushing them.

00:17:17.760 --> 00:17:27.740
And then I think community and to the point of like developer gave developers what they wanted rather than maybe say enterprise-y languages.

00:17:27.740 --> 00:17:32.080
And then I think there's a whole confluence of other things that happened as well.

00:17:32.080 --> 00:17:34.020
But it is kind of crazy, right?

00:17:34.020 --> 00:17:40.440
That like one of the top, if not the top languages right now, they're almost 30 years old.

00:17:40.440 --> 00:17:41.840
And it's got issues.

00:17:41.840 --> 00:17:45.220
It's got warts and whatnot, but it's a thriving language.

00:17:45.220 --> 00:17:49.520
And, you know, without significant big companies behind it, right?

00:17:49.520 --> 00:17:54.340
That it's competing with companies that have thrown millions of dollars into development of these things.

00:17:54.340 --> 00:17:55.360
Yeah, absolutely.

00:17:55.360 --> 00:17:58.720
And Matt and Ines, you two are on the data science side.

00:17:58.720 --> 00:18:05.380
And I think the data science and computational folks are the ones that poured the gas on the fire and really made it take off.

00:18:05.380 --> 00:18:09.300
And that's not where the growth necessarily completely is, but I think that gave it a serious kick.

00:18:09.300 --> 00:18:09.660
Yeah.

00:18:09.660 --> 00:18:12.020
No, actually, because I get asked about this a lot.

00:18:12.020 --> 00:18:16.020
Like, oh, what do you think made Python the language for machine learning data science?

00:18:16.020 --> 00:18:21.680
And my theory is actually that, A, Python, of course, was lucky that it was in the right place at the right time.

00:18:21.680 --> 00:18:24.900
But I think actually it won because it's a general purpose language.

00:18:24.900 --> 00:18:29.580
People can come from other fields of Python into machine learning data science, for example.

00:18:29.580 --> 00:18:31.420
Like, what did people do before?

00:18:31.420 --> 00:18:35.660
If you look at kind of, you know, these surveys of what they use Python for before, it's a lot of web stuff.

00:18:35.660 --> 00:18:38.160
You can build kind of anything in Python.

00:18:38.160 --> 00:18:43.140
And I think that's what makes it so appealing and much more appealing than, let's say, like an AI language.

00:18:43.140 --> 00:18:48.080
And that's also, in my opinion, why a lot of these attempts at making an AI language haven't taken off.

00:18:48.080 --> 00:18:49.440
And people are like, no, Python is great.

00:18:49.440 --> 00:18:51.840
It's fast enough.

00:18:51.840 --> 00:18:52.920
It's usable enough.

00:18:52.920 --> 00:18:57.420
But I think the general purpose-ness really is what kind of got it over the edge there.

00:18:57.420 --> 00:19:03.020
A lot of people that I'm teaching or training are people who don't want to be programmers.

00:19:03.020 --> 00:19:04.960
They want to use Python as a tool.

00:19:04.960 --> 00:19:06.180
It's like Excel to them.

00:19:06.180 --> 00:19:07.540
They don't want to be programmers.

00:19:07.540 --> 00:19:14.700
And so something that they can pick up and it just sort of works and they can go to Stack Overflow and copy something.

00:19:14.700 --> 00:19:20.080
And as long as they get the indentation right, it sort of works as long as they're using the right version or whatever.

00:19:20.080 --> 00:19:21.440
There's no compiling.

00:19:21.440 --> 00:19:22.220
There's no linking.

00:19:22.220 --> 00:19:22.940
Yeah.

00:19:22.940 --> 00:19:23.460
Weirdness.

00:19:23.760 --> 00:19:30.480
And then you have things like Google Colab or whatever, where you have an environment, it's all set up, and you can just sort of go, right?

00:19:30.600 --> 00:19:39.460
And so that is really empowering for people who don't want to be programmers but view Python as a tool, a necessary tool that they need to leverage.

00:19:39.460 --> 00:19:44.980
And in addition, there's over a quarter of a million packages on PyPI, right?

00:19:44.980 --> 00:19:48.560
And that's like literally standing on the shoulders of giants.

00:19:48.560 --> 00:19:54.560
You can go there and pick out something that you want to do, and you're a pipa install away from it.

00:19:55.120 --> 00:19:57.240
And that's super powerful, right?

00:19:57.240 --> 00:19:59.560
You don't have to set up a huge environment.

00:19:59.560 --> 00:20:07.260
And yeah, it just really simplifies life for a lot of these people who don't want to be programmers but want to leverage these really cool.

00:20:07.260 --> 00:20:12.220
But at the same time, you do have very strong support for C extensions.

00:20:12.220 --> 00:20:20.280
So if you're looking at the top packages people download from PyPI, most of them are written in C, Siphon, whatever.

00:20:20.280 --> 00:20:21.980
That's what makes them so powerful.

00:20:22.180 --> 00:20:26.360
So we have that while also being able to provide a pretty good developer experience.

00:20:26.360 --> 00:20:27.680
Yeah, absolutely.

00:20:27.680 --> 00:20:36.480
I think it was Seymour Papper who talked about a good language having, he was talking about a logo, but it's even more appropriate for Python, having low floors and high ceiling.

00:20:36.480 --> 00:20:39.500
That's really easy to get in and do simple stuff.

00:20:39.500 --> 00:20:41.860
But when you want to do complex stuff, you're not limited.

00:20:41.860 --> 00:20:47.600
And so just yesterday, I was doing a workshop with people, and someone who had just started with Python, I said,

00:20:47.660 --> 00:20:51.240
Oh, but look what we can do if we sort of extend it several layers.

00:20:51.240 --> 00:20:57.000
And he was amazed how complex you can get and how sophisticated you can get just in a few lines of code.

00:20:57.000 --> 00:21:00.640
It's really a testament to the elegance of the design of the language, I think.

00:21:00.640 --> 00:21:01.000
Yeah.

00:21:01.000 --> 00:21:07.240
Andre Vlasowski in chat makes a good point that many folks say Python is their second favorite language.

00:21:07.340 --> 00:21:10.420
And there's something to be said for that.

00:21:10.420 --> 00:21:11.560
Derek, sorry.

00:21:11.560 --> 00:21:12.540
Should be there first.

00:21:12.540 --> 00:21:13.780
I'm with you.

00:21:13.780 --> 00:21:14.300
I'm with you.

00:21:14.300 --> 00:21:19.060
Well, to that point, I mean, it's also been said that Python is the second best language for doing things right.

00:21:19.060 --> 00:21:20.820
So you might have a language that's better.

00:21:20.820 --> 00:21:22.180
Yeah, that's actually his quote.

00:21:22.180 --> 00:21:22.920
I got it wrong.

00:21:22.920 --> 00:21:23.600
Data science.

00:21:23.600 --> 00:21:25.720
Or you might have a language that's better for web apps.

00:21:25.720 --> 00:21:28.500
You might have a language that's better for like system admin.

00:21:29.060 --> 00:21:33.160
But there's probably not a language that's going to like get you all three of those, right?

00:21:33.160 --> 00:21:40.760
And Python is sort of that Venn diagram that gets you in the middle and is good enough to do a lot of what you want to do.

00:21:40.760 --> 00:21:41.360
Absolutely.

00:21:41.360 --> 00:21:42.580
Random or not choice?

00:21:42.580 --> 00:21:43.780
Chooses Brian Okken.

00:21:43.780 --> 00:21:44.540
Well, hey.

00:21:44.540 --> 00:21:44.980
Cool.

00:21:44.980 --> 00:21:46.140
Let me pull up my notes.

00:21:46.140 --> 00:21:46.980
It was interesting.

00:21:46.980 --> 00:21:47.960
We were talking about Microsoft.

00:21:47.960 --> 00:21:52.020
And I didn't choose this, but I'm going to mention it anyway.

00:21:52.020 --> 00:21:55.220
Tons of projects switched over to GitHub Actions in 2020.

00:21:55.880 --> 00:22:01.760
And I mean, because it just kind of hit the area right like at the end of 2019.

00:22:01.760 --> 00:22:05.260
So I saw a lot of projects migrating to GitHub Actions.

00:22:05.260 --> 00:22:08.580
Anyway, I wanted to talk about packaging, which is sort of related.

00:22:08.580 --> 00:22:10.020
There's a couple things.

00:22:10.020 --> 00:22:11.200
I know I was supposed to pick one.

00:22:11.200 --> 00:22:12.780
The exciting thing happened today.

00:22:12.780 --> 00:22:18.900
PIP 20.3 was released and the dependency resolver is now the default.

00:22:18.900 --> 00:22:23.020
The dependency resolver is already angry at me for trying to deploy some Dependabot changes.

00:22:24.940 --> 00:22:27.320
I'm excited about this and it's bit me already too.

00:22:27.320 --> 00:22:31.720
I had requirements.txt files that have broken dependencies.

00:22:31.720 --> 00:22:35.240
So I have to go look at those and see, well, which, you know, I have to pay attention to it.

00:22:35.240 --> 00:22:40.240
So there's a little bit of pain for some people, but it was such a long struggle.

00:22:40.240 --> 00:22:46.060
And I look back and the request for a dependency resolver came in 2013.

00:22:46.780 --> 00:22:50.360
So seven years later, but something magical happened in 2019.

00:22:50.360 --> 00:22:56.160
And that was some money from Mozilla came through and they threw some of that money at the dependency resolver.

00:22:56.160 --> 00:22:57.120
That was pretty cool.

00:22:57.120 --> 00:22:57.560
Yeah.

00:22:57.560 --> 00:22:58.280
That's a big deal.

00:22:58.280 --> 00:23:06.900
That money was, there's been a couple of these experiences where money was given to Python specifically to hire a team to improve something.

00:23:07.060 --> 00:23:09.800
PyPI, the rewrite of pypi.org was one.

00:23:09.800 --> 00:23:10.580
And then this is another.

00:23:10.580 --> 00:23:11.140
Yeah.

00:23:11.140 --> 00:23:12.580
And they rolled it out in several versions.

00:23:12.580 --> 00:23:15.180
So we had our version early, early in the year.

00:23:15.320 --> 00:23:22.780
And then around July, we had another version that had a different flag that you could try it out with to try to get some of the early adopters to try it out to make sure it's working.

00:23:22.780 --> 00:23:25.360
And then today it's rolled out for good.

00:23:25.360 --> 00:23:26.980
And I'm pretty excited about it.

00:23:26.980 --> 00:23:29.160
I kind of want to tie this in with the packaging.

00:23:29.160 --> 00:23:37.960
I've seen a lot of progress on and a lot of adoption of the pyproject.toml kind of taking over more packages and more uses.

00:23:37.960 --> 00:23:43.380
So we saw Flit used to have its own any file now only uses pyproject.toml.

00:23:43.820 --> 00:23:50.020
There's been additions to the metadata definition that hopefully will take hold.

00:23:50.020 --> 00:23:55.220
And even pytest now, you can throw your configuration in a pyproject.toml.

00:23:55.220 --> 00:24:01.560
And I've seen more and more projects getting pressure from their users to say, I don't want another any file.

00:24:01.560 --> 00:24:04.620
I want to put my settings in the pyproject.toml.

00:24:04.620 --> 00:24:05.800
So that's a good thing.

00:24:05.800 --> 00:24:06.660
Yeah, absolutely.

00:24:06.660 --> 00:24:08.100
You know, a couple of things on that.

00:24:08.100 --> 00:24:11.160
You talked about two things when you talked about packaging and you talked about GitHub.

00:24:11.680 --> 00:24:16.540
I mean, the fact that now you can actually do some package work within GitHub itself.

00:24:16.540 --> 00:24:22.300
I built a lot of small little tools, not things that I would want to go on PyPI.

00:24:22.300 --> 00:24:24.980
I know we don't need to clutter that up anymore with my garbage.

00:24:24.980 --> 00:24:29.460
But it's great when I can just say like, hey, here's a link.

00:24:29.500 --> 00:24:36.540
And if you're really concerned on how to add it, you can just pip install but point to this GitHub, you know, and that works.

00:24:36.540 --> 00:24:37.120
Yeah.

00:24:37.120 --> 00:24:46.260
And also the stuff about finding security vulnerabilities automatically and doing PRs for you that GitHub does against like your various package definitions.

00:24:46.260 --> 00:24:47.300
I think that's great as well.

00:24:47.540 --> 00:24:53.740
Hey, has anybody ever put a JavaScript package on the GitHub package.json?

00:24:53.740 --> 00:24:55.700
Probably, but not me.

00:24:55.700 --> 00:24:57.520
I have.

00:24:57.520 --> 00:24:59.660
You know, this is a Python podcast, right?

00:24:59.660 --> 00:25:00.300
No worse.

00:25:00.300 --> 00:25:01.540
It's Gatsby.

00:25:01.780 --> 00:25:06.740
So I basically put 500,000 JavaScript packages into my repo.

00:25:06.740 --> 00:25:07.260
Yeah.

00:25:07.260 --> 00:25:09.300
And I'm not.

00:25:09.300 --> 00:25:15.080
That is something I appreciate about Python a lot that like I asked you, I never thought I'd say this, but like I do prefer also that.

00:25:15.220 --> 00:25:20.640
I can't resolve the Dependabot security mega warnings fast enough.

00:25:20.640 --> 00:25:22.420
It's just incredible.

00:25:22.420 --> 00:25:23.100
I know.

00:25:23.100 --> 00:25:24.700
And I just turn them off, right?

00:25:24.700 --> 00:25:25.820
Like, you just don't.

00:25:25.820 --> 00:25:26.240
Yeah.

00:25:26.240 --> 00:25:27.860
That totally fixes it.

00:25:27.860 --> 00:25:28.180
You're right.

00:25:28.180 --> 00:25:30.360
That is one way to do it.

00:25:30.360 --> 00:25:30.740
Yes.

00:25:30.740 --> 00:25:34.220
It's like I've always said that's a problem with writing tests, right?

00:25:34.220 --> 00:25:39.900
Like when I started programming, I was all like kind of hate writing these tests because they keep pointing out shit that's kind of wrong.

00:25:39.900 --> 00:25:40.860
And then I have to fix that.

00:25:40.860 --> 00:25:41.940
But I don't have tests.

00:25:41.940 --> 00:25:43.160
It all works fine.

00:25:43.160 --> 00:25:43.780
And then I'm happy.

00:25:43.780 --> 00:25:45.200
Same with, I don't know, TypeScript.

00:25:45.200 --> 00:25:45.680
Exactly.

00:25:45.680 --> 00:25:47.040
I actually even type hints to some.

00:25:47.040 --> 00:25:49.920
Fuck, yeah, I know that's kind of wrong.

00:25:49.920 --> 00:25:51.420
So now I actually have to fix it.

00:25:51.420 --> 00:25:53.000
So, you know, just don't.

00:25:53.000 --> 00:25:54.980
So we should not let you speak it on high school.

00:25:54.980 --> 00:25:57.900
It's the see no evil, hear no evil.

00:25:57.900 --> 00:26:03.400
I do think that the Dependabot stuff, there is something about turning it off.

00:26:03.400 --> 00:26:04.280
It drives me crazy.

00:26:04.280 --> 00:26:05.300
I really value it.

00:26:05.300 --> 00:26:15.180
But at the same time, the reason I had this conflict with the dependency resolver is it told me I should give me a PR to upgrade one thing, but not one of the dependencies for which

00:26:15.180 --> 00:26:16.740
the newer version was required.

00:26:16.740 --> 00:26:18.100
It would break the resolver.

00:26:18.100 --> 00:26:19.900
It's just like, ah, what is this thing doing?

00:26:19.900 --> 00:26:20.860
All right.

00:26:20.860 --> 00:26:21.360
Very good.

00:26:21.360 --> 00:26:21.980
Very good, Brian.

00:26:21.980 --> 00:26:22.580
The chooser.

00:26:22.580 --> 00:26:26.240
Sorry, you need a batch, batch dependency resolver.

00:26:26.240 --> 00:26:26.800
Yes.

00:26:26.800 --> 00:26:31.160
One that resolves everything at once and then makes sure you've got a working state at the end.

00:26:31.160 --> 00:26:33.520
Well, the thing is, the pimp is fine.

00:26:33.520 --> 00:26:34.540
It was right.

00:26:34.540 --> 00:26:39.440
It's that Dependabot, if you have 100, I probably had 20 dependencies in this thing.

00:26:39.440 --> 00:26:42.380
It gives you one PR for each line.

00:26:42.860 --> 00:26:44.820
Sometimes it lags a day on the other one.

00:26:44.820 --> 00:26:47.620
And if it gets it out of order, then the resolver gets it.

00:26:47.620 --> 00:26:48.420
Anyway, long story.

00:26:48.420 --> 00:26:49.080
Frustrating.

00:26:49.080 --> 00:26:55.180
I mean, to be fair, speaking of dependency resolving from the perspective of a library developer, it is hard.

00:26:55.320 --> 00:26:57.640
And it's, you know, you do want to use versioning properly.

00:26:57.640 --> 00:27:09.820
And I do feel like there's this eternal conflict between how do we manage dependencies properly for users and how can we make sure that we can define how our packages depend on each other in a way that's reasonable.

00:27:10.240 --> 00:27:12.240
Because not, you know, use semantic versioning.

00:27:12.240 --> 00:27:14.240
Not everything is a major release.

00:27:14.240 --> 00:27:15.700
Not everything is a breaking release.

00:27:15.700 --> 00:27:17.540
But stuff just depends on each other.

00:27:17.540 --> 00:27:18.640
And you don't want to lock people in.

00:27:18.640 --> 00:27:25.620
There's always this, you know, the idea is you should be able to pick up your project a year later with its requirements and it should run.

00:27:25.620 --> 00:27:27.640
And that's really, really, really hard.

00:27:27.640 --> 00:27:28.300
Yeah.

00:27:28.300 --> 00:27:31.640
And if it gets wrong, then you probably get a lot of email or a lot of GitHub issues.

00:27:31.640 --> 00:27:37.140
Hey, Brian, on your topic of PyProject Toml, what's the latest, greatest on editable installs?

00:27:37.220 --> 00:27:40.780
I don't think it's completely working for all the same.

00:27:40.780 --> 00:27:43.740
So I'd like to be able to say pip install dash E.

00:27:43.740 --> 00:27:44.440
Is it dash E?

00:27:44.440 --> 00:27:45.900
And just a project.

00:27:45.900 --> 00:27:52.600
You can say pip install just a directory no matter what kind of packager it has.

00:27:52.600 --> 00:27:53.560
So that works now.

00:27:53.560 --> 00:27:57.380
So you can, if you, even if you use flit or something, you can't do dash E.

00:27:57.380 --> 00:28:01.900
But flit itself, for instance, has its own editable install thing.

00:28:01.900 --> 00:28:03.820
And I don't know what poetry does.

00:28:03.820 --> 00:28:04.620
I don't use poetry.

00:28:04.620 --> 00:28:06.160
So it's a different command.

00:28:06.300 --> 00:28:08.420
I'm annoyed that it doesn't just convert it.

00:28:08.420 --> 00:28:09.660
I wish it would plug it in.

00:28:09.660 --> 00:28:14.620
But I think that'll be coming in maybe in 2020 or 20, probably not this year.

00:28:14.620 --> 00:28:15.760
Maybe next year.

00:28:15.760 --> 00:28:16.240
Hopefully.

00:28:16.240 --> 00:28:16.780
Yep.

00:28:16.780 --> 00:28:22.120
Badwolf says in the chats, what is the quick solution for getting pip version updated?

00:28:22.120 --> 00:28:23.680
The first thing you created a virtual environment.

00:28:23.680 --> 00:28:25.460
This is another thing that drives me crazy about pip.

00:28:25.460 --> 00:28:27.820
And if that could get changed, I would love it.

00:28:27.820 --> 00:28:32.400
When you create a new virtual environment, basically for about a week, you have the latest pip.

00:28:32.680 --> 00:28:36.880
And then afterwards, soon as you pip install something, it says, warning, your pip is out

00:28:36.880 --> 00:28:37.220
of date.

00:28:37.220 --> 00:28:38.420
As soon as you create a virtual environment.

00:28:38.420 --> 00:28:39.900
It's like, well, why didn't you just update it?

00:28:39.900 --> 00:28:42.280
I want, if you're going to tell me it's wrong, just fix it.

00:28:42.280 --> 00:28:43.520
You can use virtual environment.

00:28:43.520 --> 00:28:45.480
Instead of VENV, use virtual environment.

00:28:45.480 --> 00:28:50.260
Because then you can update your pip and you can update the global one and install it in

00:28:50.260 --> 00:28:50.940
all your environments.

00:28:50.940 --> 00:28:51.540
Interesting.

00:28:51.540 --> 00:28:52.280
Yeah.

00:28:52.280 --> 00:28:56.520
I just wrote an alias that will create the virtual environment, upgrade pip and set up

00:28:56.520 --> 00:28:57.600
tools, and then activate it.

00:28:57.600 --> 00:28:58.160
Other way around.

00:28:58.160 --> 00:28:59.120
Activate it, then upgrade.

00:28:59.120 --> 00:28:59.780
Yeah.

00:28:59.780 --> 00:29:00.280
Yeah.

00:29:00.280 --> 00:29:00.500
It's funny.

00:29:00.500 --> 00:29:02.260
I have a shortcut like that too.

00:29:02.260 --> 00:29:02.760
Yeah.

00:29:02.760 --> 00:29:03.000
Awesome.

00:29:03.000 --> 00:29:06.940
And then you can also have it install everything you need, you know, in the same command,

00:29:06.940 --> 00:29:11.360
automatically create once, which I shared my script somewhere, I think on Twitter, if

00:29:11.360 --> 00:29:12.020
anyone's interested.

00:29:12.020 --> 00:29:12.580
Nice.

00:29:12.580 --> 00:29:12.760
Yeah.

00:29:12.760 --> 00:29:13.620
Mine's just V and V.

00:29:13.620 --> 00:29:15.340
I just type V and V and magic happens.

00:29:15.340 --> 00:29:16.460
I don't think of it anymore.

00:29:16.460 --> 00:29:21.440
Well, when I finally switched to virtual LENV, it's like, I make so many virtual environments.

00:29:21.440 --> 00:29:22.520
It's so much faster.

00:29:22.520 --> 00:29:27.800
And just that, even just a few seconds, several times a day, it's worth it for me.

00:29:27.800 --> 00:29:28.520
So yeah.

00:29:28.520 --> 00:29:29.640
Awesome.

00:29:29.640 --> 00:29:30.140
All right.

00:29:30.140 --> 00:29:33.260
I've chosen next and there's a dependency in the chooser.

00:29:33.260 --> 00:29:34.960
So it's worked correctly.

00:29:34.960 --> 00:29:37.060
So it's chosen me actually to talk about the next thing.

00:29:37.060 --> 00:29:40.800
And Paul touched on this, but I think this is a really important one.

00:29:40.800 --> 00:29:45.460
Like this is the year that Python 2 actually went away.

00:29:45.460 --> 00:29:53.680
And it's, I just spent so long having to justify why Python 3 is the right thing or more often

00:29:53.680 --> 00:29:55.880
teaching people, no, no, no, you can't type Python.

00:29:55.880 --> 00:29:56.860
Please don't do that.

00:29:56.860 --> 00:29:58.380
Unless you're on Windows and you have to do that.

00:29:58.380 --> 00:30:00.300
But if you're not on Windows, then you better not do that.

00:30:00.300 --> 00:30:02.600
So you got to, you know, it's just like this drag.

00:30:02.700 --> 00:30:07.520
It always felt like things like Django or Flask and whatnot were being held back.

00:30:07.520 --> 00:30:11.200
All these libraries were being held back by Python 2 support.

00:30:11.200 --> 00:30:13.180
And last year they started dropping it.

00:30:13.180 --> 00:30:15.400
And then Python 2 itself actually went away.

00:30:15.400 --> 00:30:19.520
Brian and I tried to create the right nomenclature around this, I guess.

00:30:19.520 --> 00:30:23.600
It's calling it legacy Python and modern Python rather than 2 and 3.

00:30:23.600 --> 00:30:24.640
And that was, that was fun.

00:30:24.640 --> 00:30:27.420
People started to quote it and use that terminology, which was kind of cool.

00:30:27.580 --> 00:30:32.420
I don't know how well it worked, but it's really nice that Python 2 is finally officially

00:30:32.420 --> 00:30:32.820
gone.

00:30:32.820 --> 00:30:37.540
And I thought there'd be a bunch of people would freak out for Python and start creating

00:30:37.540 --> 00:30:39.180
like alternate old versions.

00:30:39.180 --> 00:30:43.240
And I haven't, besides some like support, commercial support stuff, I've really seen that happening.

00:30:43.240 --> 00:30:45.280
So it's, it's pretty interesting, I think.

00:30:45.280 --> 00:30:45.660
Yeah.

00:30:45.660 --> 00:30:51.460
I think we should have brought like horns and stuff and like, you know, maybe just, just.

00:30:51.460 --> 00:30:55.460
Some of those little pop, like bottle looking stuff on New Year's.

00:30:55.460 --> 00:30:55.800
Absolutely.

00:30:56.540 --> 00:30:56.720
Yeah.

00:30:56.720 --> 00:30:58.960
I mean, we really didn't get the party we were hoping for, right?

00:30:58.960 --> 00:31:04.340
Like PyCon was supposed to be this big send off for Python 2, but no, there was not so

00:31:04.340 --> 00:31:05.040
much of a PyCon.

00:31:05.040 --> 00:31:05.780
Not really.

00:31:05.780 --> 00:31:07.240
I mean, there's online, but it wasn't the same.

00:31:07.240 --> 00:31:12.080
Now we just got to wait until we have all of the articles about the companies that finally

00:31:12.080 --> 00:31:17.980
decided to switch and the steps that they took that they avoided for the last decade to,

00:31:17.980 --> 00:31:19.500
to make this a reality.

00:31:19.500 --> 00:31:20.000
Yeah.

00:31:20.000 --> 00:31:24.840
I mean, one of my biggest corporate training clients, they have been using Python 2 for years

00:31:24.840 --> 00:31:29.680
and years and they do all sorts of testing of hardware using windows.

00:31:30.020 --> 00:31:32.280
And so with all sorts of custom C extensions.

00:31:32.280 --> 00:31:36.200
So I've been saying to them for years, every time I do training, look, you should really

00:31:36.200 --> 00:31:38.800
think about Python 3 and you should realize you should move in that direction.

00:31:38.800 --> 00:31:41.100
And their attitude was basically, no, no, no.

00:31:41.100 --> 00:31:43.720
We've got so much invested in what we've done.

00:31:43.720 --> 00:31:44.860
We're not really going to upgrade.

00:31:45.260 --> 00:31:49.620
And finally, about, I guess, a year ago, they realized, huh, we're going to be stuck on

00:31:49.620 --> 00:31:53.220
our own maintaining everything, including all these packages of PyPI.

00:31:53.220 --> 00:31:55.700
Maybe it's time to start talking about it.

00:31:55.700 --> 00:31:58.060
And so I'm actually doing some training for them now.

00:31:58.060 --> 00:32:01.880
And I asked a group, should we do Python 2 or should we do Python 3?

00:32:01.880 --> 00:32:05.480
And the majority actually said it's okay to use 3 because our group has switched.

00:32:05.480 --> 00:32:11.540
So if they are moving, it's clear that even sort of the draggiest of the draggiest companies

00:32:11.540 --> 00:32:12.460
are doing it.

00:32:12.460 --> 00:32:17.280
Yeah, I was just going to echo what Ruben said that when you have success and you get

00:32:17.280 --> 00:32:22.120
enterprises using your stuff and enterprises are slow to move.

00:32:22.120 --> 00:32:27.380
And I don't want to criticize Python 3 too much, but I think if they would have put f-strings

00:32:27.380 --> 00:32:29.620
in 3.0, then they wouldn't have had this problem.

00:32:29.760 --> 00:32:33.560
But because they waited to put f-strings in, then they had people dragging their feet.

00:32:33.560 --> 00:32:34.580
So weird how that dragged.

00:32:34.580 --> 00:32:36.920
That was one of the most popular features, for sure.

00:32:36.920 --> 00:32:40.420
So you're saying the walrus operator was what finally did it?

00:32:40.420 --> 00:32:44.360
I'm not going to go there.

00:32:44.360 --> 00:32:46.840
You know, I was not super excited about the walrus operator.

00:32:46.840 --> 00:32:48.220
I find myself using it all the time.

00:32:48.220 --> 00:32:48.760
I like it.

00:32:48.760 --> 00:32:49.420
It's neat.

00:32:49.420 --> 00:32:50.260
Oh, it's cool.

00:32:50.260 --> 00:32:51.540
I think it definitely solves a problem.

00:32:51.540 --> 00:32:53.120
I just, wait, that's 3.8, right?

00:32:53.120 --> 00:32:53.840
The walrus?

00:32:53.840 --> 00:32:54.860
I believe so.

00:32:54.860 --> 00:32:55.580
Yeah.

00:32:55.580 --> 00:32:56.100
Yeah.

00:32:56.100 --> 00:32:59.560
I'm still, I mean, I feel like I'm now back at like, okay, we finally dropped support

00:32:59.560 --> 00:33:01.500
for two from all of our libraries that we're developing.

00:33:01.500 --> 00:33:03.820
And now we're on 3.6 because.

00:33:03.820 --> 00:33:04.660
No, no, no.

00:33:04.660 --> 00:33:06.600
The 3.9 is current.

00:33:06.600 --> 00:33:08.860
3.8 is now the new legacy Python.

00:33:08.860 --> 00:33:12.940
Ines, how was it for you?

00:33:12.940 --> 00:33:14.620
Like as a library developer?

00:33:14.620 --> 00:33:15.380
Yeah.

00:33:15.380 --> 00:33:19.500
I mean, I feel like I only really got to use Python 3 this year.

00:33:19.500 --> 00:33:24.160
I mean, of course I've been using it privately for much longer, but I would say in mid this

00:33:24.160 --> 00:33:25.540
year, I was finally like, cool.

00:33:25.540 --> 00:33:26.920
I just use type hints.

00:33:26.920 --> 00:33:30.900
I use f-strings across all of our projects because before our dependencies had to support

00:33:30.900 --> 00:33:34.180
people on two and our old version of space, they had to support people who wanted to use

00:33:34.180 --> 00:33:34.340
two.

00:33:34.340 --> 00:33:36.600
So that's, that kind of becomes the baseline.

00:33:36.600 --> 00:33:38.640
And now we've moved that up to 3.6.

00:33:38.640 --> 00:33:41.300
And so on to 3.6 is dead.

00:33:41.300 --> 00:33:44.740
There's still always new features that, you know, we can't just, you know, ship.

00:33:44.860 --> 00:33:45.180
Yeah.

00:33:45.180 --> 00:33:51.080
But that step from 2 to 3.6 is going to be way bigger than 3.6 to 7, right?

00:33:51.080 --> 00:33:54.760
That's a very small step to 3.6 to 3.7 or 3.7 to 3.8.

00:33:54.760 --> 00:33:56.120
So you've, you've done the big step.

00:33:56.120 --> 00:33:57.180
Yeah.

00:33:57.180 --> 00:33:57.500
Yeah.

00:33:57.500 --> 00:34:01.300
And some of the new features, it's like, yeah, whatever I can, you know, live without writing

00:34:01.300 --> 00:34:04.140
those in my code base and people can still use them in their code bases.

00:34:04.280 --> 00:34:08.460
But yeah, all the new versions we're going to publish, like spaCy 3, that's coming soon.

00:34:08.460 --> 00:34:13.140
We'll use Python 3 in the code base and we'll only work with Python 3.

00:34:13.140 --> 00:34:18.280
We want to distribute wheels for Python 2, which we might have not even done for a while because

00:34:18.280 --> 00:34:22.880
it's really, really a pain for some of our more abstract and complex dependencies that we're

00:34:22.880 --> 00:34:23.340
also building.

00:34:23.340 --> 00:34:24.020
Yeah, cool.

00:34:24.020 --> 00:34:25.140
So far, people haven't really complained.

00:34:25.140 --> 00:34:27.960
Like I was, I was expecting people to complain a bit more, but like, no.

00:34:27.960 --> 00:34:33.500
Well, if you look at the PSF JetBrains survey, the data science folks, that side of the

00:34:33.500 --> 00:34:37.620
house have definitely moved to Python 3 quicker and bigger than the web team.

00:34:37.620 --> 00:34:39.920
I'm actually surprised how quickly people move up.

00:34:39.920 --> 00:34:43.700
Like, you know, I don't know, even after 3.9 came out, we've had people requesting like,

00:34:43.700 --> 00:34:47.720
oh my God, why does your, you know, annotation tool not work on, you know, 3.9?

00:34:47.720 --> 00:34:48.740
Or why does this not work?

00:34:48.740 --> 00:34:50.960
And it's like, nothing works on 3.9.

00:34:50.960 --> 00:34:53.800
Or it's like, LCI doesn't do 3.9 yet.

00:34:53.800 --> 00:34:55.180
Like I can't build anything.

00:34:55.180 --> 00:34:57.540
None of our other packages run.

00:34:57.540 --> 00:34:58.240
Like, sorry.

00:34:58.240 --> 00:35:03.440
I felt like a big person developer for like the first time ever when I actually got,

00:35:03.440 --> 00:35:07.160
my first issue with running the latest and greatest Python.

00:35:07.160 --> 00:35:10.880
It was because I was running GCP and I kept running into an error, running into an error.

00:35:10.880 --> 00:35:11.740
And I was like, you know what?

00:35:11.740 --> 00:35:13.160
It used to work.

00:35:13.160 --> 00:35:14.940
Let me just try it on 3.8.5.

00:35:14.940 --> 00:35:16.220
And then sure enough, it worked perfectly.

00:35:16.220 --> 00:35:17.740
And I was like, I've done it.

00:35:17.740 --> 00:35:19.140
I've reached the new achievement.

00:35:20.560 --> 00:35:21.000
Nice.

00:35:21.000 --> 00:35:21.180
Yeah.

00:35:21.180 --> 00:35:25.440
I've taken down the Talk Python training website by shipping the walrus operator accidentally.

00:35:25.440 --> 00:35:28.000
At the time, Ubuntu didn't support it.

00:35:28.000 --> 00:35:34.020
A quick question or a comment from Zach in the comments about when, you know, we can actually

00:35:34.020 --> 00:35:36.660
say legacy Python's gone when the OS vendor stops supporting it.

00:35:36.660 --> 00:35:42.080
I think Python 2 is no longer shipping with the new macOS and Canonical is starting to make

00:35:42.080 --> 00:35:43.680
Python 3.8 the default.

00:35:43.680 --> 00:35:45.080
So I think we're getting there.

00:35:45.080 --> 00:35:51.640
I thought they were removing Python in general from macOS and just making you install it yourself.

00:35:52.000 --> 00:35:54.220
I think there might be some internal system thing.

00:35:54.220 --> 00:35:58.600
I saw people talking about the system Python 3.8, even though I agree I heard the same thing

00:35:58.600 --> 00:35:58.940
you said.

00:35:58.940 --> 00:36:00.360
But I don't have a fresh install.

00:36:00.360 --> 00:36:02.520
I think it's not actually such a bad idea.

00:36:02.520 --> 00:36:06.320
Like I think, you know, for most things you do, you have to install some extra stuff anyway.

00:36:06.320 --> 00:36:11.740
So making it a more explicit install from a user's perspective, I think isn't even so terrible.

00:36:11.740 --> 00:36:12.280
Yeah.

00:36:12.280 --> 00:36:16.280
Because otherwise, you know, if you just type in Python, you just run into all kinds of potential

00:36:16.280 --> 00:36:17.240
issues anyway.

00:36:17.240 --> 00:36:18.520
Yeah.

00:36:18.520 --> 00:36:19.820
Especially when it's super out of date.

00:36:19.820 --> 00:36:20.340
All right.

00:36:20.400 --> 00:36:24.240
Yeah, I definitely end up like telling people in my courses, oh, you're using a Mac?

00:36:24.240 --> 00:36:24.720
Yeah.

00:36:24.720 --> 00:36:26.180
Ignore the Python that's installed.

00:36:26.180 --> 00:36:27.680
I know this is a Python course.

00:36:27.680 --> 00:36:29.020
Ignore the ones that's installed.

00:36:29.020 --> 00:36:31.180
And here are ways that you can install it on your own.

00:36:31.180 --> 00:36:32.360
So it'll be up to date.

00:36:32.360 --> 00:36:35.320
And here's how you can make sure it doesn't conflict with what's already installed.

00:36:35.320 --> 00:36:38.680
So maybe removing it all together is not such a terrible thing.

00:36:38.680 --> 00:36:39.620
Yeah, for sure.

00:36:39.620 --> 00:36:40.740
Homebrew, homebrew.

00:36:40.740 --> 00:36:41.540
All right.

00:36:41.540 --> 00:36:43.960
Ines, the voting system has chosen you next.

00:36:43.960 --> 00:36:45.560
Unmute myself and look at my notes.

00:36:45.560 --> 00:36:45.880
Yeah.

00:36:45.880 --> 00:36:50.260
So I think I've already mentioned the topic I was going to talk about, about

00:36:50.260 --> 00:36:51.860
five times so far.

00:36:51.860 --> 00:36:59.080
But yeah, I think in 2020, we really saw the ecosystem around type hints, static type checking,

00:36:59.080 --> 00:37:02.300
types in general mature and really be widely adopted.

00:37:02.300 --> 00:37:06.420
And I do think a part of that is the more widespread adoption of Python 3.

00:37:06.600 --> 00:37:12.100
Because before that, to be fair, you could use type hints before Python 3 just for completeness.

00:37:12.100 --> 00:37:13.980
But like, that's not what people did.

00:37:13.980 --> 00:37:15.100
And it looked very, very different.

00:37:15.100 --> 00:37:20.420
So yeah, now and actually, even I couldn't really imagine writing code without type hints anymore.

00:37:20.420 --> 00:37:25.840
Like if I write something and I'm not adding any types, it feels kind of naked and it feels kind of wrong.

00:37:25.880 --> 00:37:29.900
And I actually feel like, oh my God, I might be missing some issues here.

00:37:29.900 --> 00:37:31.160
Maybe I'm not catching some bugs.

00:37:31.160 --> 00:37:32.860
So yeah, which is quite surprising.

00:37:32.860 --> 00:37:39.140
But it says something considering I only just recently was able to really embrace all the new Python 3 stuff.

00:37:39.140 --> 00:37:40.640
Yeah, that's a pretty quick transition.

00:37:40.640 --> 00:37:41.800
Find it, yeah.

00:37:41.800 --> 00:37:45.740
I depend on this thing now that like previously you had to stay away from.

00:37:45.740 --> 00:37:46.260
Yeah.

00:37:46.260 --> 00:37:50.800
And I have static type checking enabled in Visual Studio Code.

00:37:50.800 --> 00:37:54.040
It underlines things if you pass in the wrong types.

00:37:54.040 --> 00:37:58.360
It gives you all these nice like autocomplete prompts or previews if you want to.

00:37:58.360 --> 00:38:01.960
That's also something I've gotten really, really used to over a really short period of time.

00:38:01.960 --> 00:38:02.640
Like, I don't know.

00:38:02.640 --> 00:38:04.260
What about you, everyone?

00:38:04.260 --> 00:38:05.480
Like, do you use type hints?

00:38:05.700 --> 00:38:07.280
Like, can we have like an opinion, Paul?

00:38:07.280 --> 00:38:09.820
Like, just raise the hand and then we summarize it for people who just...

00:38:09.820 --> 00:38:11.020
End of hand race.

00:38:11.020 --> 00:38:11.780
Everybody.

00:38:11.780 --> 00:38:17.380
I'm slowly starting to use them more and more.

00:38:17.380 --> 00:38:19.260
I see the advantages.

00:38:19.260 --> 00:38:24.180
And in part, as I mentioned before, we started recording, like, because my students are encouraging me to use it more and more.

00:38:24.180 --> 00:38:24.980
Because they want it.

00:38:24.980 --> 00:38:28.100
Because they come from languages where there's no such thing as optional type hints.

00:38:28.100 --> 00:38:30.540
It's, you must do this or the program does not run.

00:38:30.540 --> 00:38:31.960
So, what do you know?

00:38:31.960 --> 00:38:32.880
They can actually be useful.

00:38:33.180 --> 00:38:38.480
Yeah, I think that's one of the biggest benefits that I like about the type hinting system is that it's optional.

00:38:38.480 --> 00:38:39.980
So, you could choose to use it.

00:38:39.980 --> 00:38:42.480
And then, if you don't need it, then we could just take it out.

00:38:42.480 --> 00:38:45.460
Because for me, like, I believe in lazy, being a lazy developer.

00:38:45.460 --> 00:38:49.480
And stuff like type hints just make certain things a little bit more discoverable.

00:38:49.480 --> 00:38:50.540
Right?

00:38:50.540 --> 00:38:52.800
And kind of like what we were saying before.

00:38:52.800 --> 00:38:57.380
Like, it just improves your tooling to be able to discover more of your code for you.

00:38:57.560 --> 00:38:58.420
I like to use it.

00:38:58.420 --> 00:39:01.840
I like to use it for APIs, especially for package interfaces.

00:39:01.840 --> 00:39:08.100
So, that people using a package can use the editor tools and stuff like that for the hints.

00:39:08.100 --> 00:39:10.640
And also, just wherever it makes sense.

00:39:10.640 --> 00:39:16.180
I mean, if it looks like it actually detracts from readability, then I take it out.

00:39:16.180 --> 00:39:17.660
Readability is above all for me.

00:39:18.240 --> 00:39:20.140
So, if it's usable and readable, it helps.

00:39:20.140 --> 00:39:21.540
I feel like they're working on that.

00:39:21.540 --> 00:39:22.020
I just wouldn't advocate.

00:39:22.020 --> 00:39:22.660
Oh, sorry.

00:39:22.660 --> 00:39:23.840
Any, like, I don't know.

00:39:23.840 --> 00:39:29.400
If you have a function that takes several arguments and then returns, like, a callback, that gives you this kind of typing.

00:39:29.400 --> 00:39:30.860
I wouldn't advocate for that necessarily.

00:39:30.860 --> 00:39:31.780
But, yeah.

00:39:31.780 --> 00:39:37.020
And I feel like they're working on some of that confusion as well and some of that, like, clutter and blood.

00:39:37.020 --> 00:39:39.940
I mean, that was, I talk about that 3.9 story.

00:39:39.940 --> 00:39:44.700
It was because I was tired of typing, typing.list or typing.dict.

00:39:44.760 --> 00:39:46.820
And it was just like, oh, you mean I can just do this now?

00:39:46.820 --> 00:39:49.640
Like, and then sure enough, you know, stuff crashes.

00:39:49.640 --> 00:39:50.880
And it's like, well, guess not.

00:39:50.880 --> 00:39:51.420
Maybe later.

00:39:51.420 --> 00:40:08.240
But it's great that for people who are looking at Python as a tool that they're using, not the language that they're writing on a day-to-day, but just flat out the tool that they're using, they don't know what we're talking about half the time.

00:40:08.240 --> 00:40:12.040
But they can kind of look at something and go, STR, hmm.

00:40:12.040 --> 00:40:14.240
Someone mentioned a string that one time.

00:40:14.300 --> 00:40:15.400
Maybe that's what that is.

00:40:15.400 --> 00:40:19.420
You know, it's a lot easier than just looking at the code and trying to figure it out.

00:40:19.420 --> 00:40:19.820
Yeah.

00:40:19.820 --> 00:40:23.940
And speaking of tools, I think type-ins, they're not only that syntax feature.

00:40:23.940 --> 00:40:32.180
They've really enabled this whole new ecosystem of tools that use type-ins to accomplish something else or in a creative way.

00:40:32.180 --> 00:40:35.100
And I think many of them have been covered on this podcast previously.

00:40:35.180 --> 00:40:41.540
For example, there's Pydantic, which uses type-ins in actually one of my favorite creative ways for data validation, settings management.

00:40:41.540 --> 00:40:46.920
It's actually a library we've adopted across a lot of our projects to just quickly, you know, you define this interface.

00:40:46.920 --> 00:40:47.840
Here's what I expect.

00:40:47.840 --> 00:40:51.260
You get like, you know, kind of like JSON schema just with type-ins.

00:40:51.400 --> 00:40:52.580
Pydantic is so wonderful.

00:40:52.580 --> 00:40:53.620
Yeah, you're right.

00:40:53.620 --> 00:40:54.500
It's really nice.

00:40:54.500 --> 00:40:55.260
It's really nice.

00:40:55.260 --> 00:40:59.960
Yeah, I would say it's one of my favorite recent discoveries in terms of Python developer tools.

00:40:59.960 --> 00:41:08.220
And then, of course, there's FastAPI and Typer developed by my colleague, Sebastian, which probably has been discussed a lot on this and related podcast.

00:41:08.380 --> 00:41:11.260
Yeah, he was on the show not long ago, like 10 shows ago or so.

00:41:11.260 --> 00:41:13.400
And yeah, that's a fantastic framework, too.

00:41:13.400 --> 00:41:28.800
Yeah, so that's, I think it's also partly what really popular, popularized, great word, type-ins in as a tool for, yeah, developing applications and so on, I think.

00:41:28.800 --> 00:41:29.960
Also actually Pydantic.

00:41:30.320 --> 00:41:44.140
And yeah, we've also, in 2020, I think, released our machine learning library, Think, which kind of functions more like an interface layer and lets you write neural networks, combine layers written in different frameworks like PyTorch, TensorFlow.

00:41:44.140 --> 00:41:49.100
And we've included custom types for arrays and all that stuff that passes through the network.

00:41:49.100 --> 00:41:52.920
Because, you know, if you're doing machine learning, a lot of it is like really abstract.

00:41:52.920 --> 00:41:57.180
You have like this multidimensional array as in like 300 dimensions.

00:41:57.520 --> 00:42:00.740
And then that goes through and then it gets transformed and then it goes all the way back.

00:42:00.740 --> 00:42:02.800
And at the end, you're hoping to get something out.

00:42:02.800 --> 00:42:03.980
And there's a lot that can go wrong.

00:42:03.980 --> 00:42:07.040
And it's not even about like, oh, how experienced are you as a programmer?

00:42:07.040 --> 00:42:09.100
It's like that shit's just abstract.

00:42:09.100 --> 00:42:15.060
And we can make it a bit less abstract even by just providing custom types that you can declare.

00:42:15.060 --> 00:42:18.740
So it's easier to see what goes in, what comes out.

00:42:18.740 --> 00:42:20.700
Do these layers fit together?

00:42:20.700 --> 00:42:21.400
Do they not?

00:42:21.400 --> 00:42:31.820
Because otherwise, yeah, you easily end up with these very hard to debug NumPy errors triggered by like five layers deep that tell you that you can't broadcast that shape into this other shape.

00:42:31.820 --> 00:42:33.720
And you're like, yeah, that's going to be fun.

00:42:33.720 --> 00:42:34.720
This doesn't help me.

00:42:34.720 --> 00:42:35.240
I have no idea.

00:42:35.240 --> 00:42:41.220
Yeah, I think there's also things like mypyC, which will compile stuff that has types.

00:42:41.220 --> 00:42:45.760
And there's Cython, which will use the new Python type hints to compile to much faster code.

00:42:45.760 --> 00:42:47.440
So there's a lot of neat things coming out of it.

00:42:47.440 --> 00:42:47.840
Yeah.

00:42:47.840 --> 00:43:03.380
And I think especially also for abstract stuff like machine learning, there are lots of use cases that web type hints and type-based validation is really promising because we can also take something a developer already knows, like typing your functions, typing your layers, and it will just work and do some extra stuff if you want it to.

00:43:03.380 --> 00:43:06.120
Watching mypy evolve is really cool.

00:43:06.860 --> 00:43:12.200
For think, we've briefly dabbled in custom mypy plugins for a bit.

00:43:12.200 --> 00:43:18.180
We have a plugin that checks if two layers you're chaining together return the correct types.

00:43:18.180 --> 00:43:31.580
Like if you have one layer that returns a two-dimensional array of floats and the other layer expects a two-dimensional array of integers or four dimensions, whatever, you can actually see that underlined in your editor done by mypy as you type the code.

00:43:31.580 --> 00:43:37.120
So you can prevent a bug before you even type it and introduce it.

00:43:37.120 --> 00:43:37.980
So that's cool.

00:43:37.980 --> 00:43:40.340
And I think that's all very actively developing.

00:43:40.340 --> 00:43:43.140
So I think there's so much potential for custom plugins.

00:43:43.140 --> 00:43:49.540
Like imagine more libraries just coming with their own mypy plugins that help the developers use those libraries better.

00:43:49.540 --> 00:43:51.380
I think, yeah, that's all super cool.

00:43:51.380 --> 00:43:53.720
Yeah, it's early days and there's a bunch of great tools.

00:43:53.720 --> 00:43:57.060
Cecil, let me round this out with coming back to one thing you said.

00:43:57.100 --> 00:43:58.260
You talked about how it was optional.

00:43:58.260 --> 00:44:07.420
The closest analogy that I think we have to this in other languages has got to be TypeScript, which is like JavaScript plus types and a little transpiling thing.

00:44:07.420 --> 00:44:08.460
And it's all cool.

00:44:08.460 --> 00:44:11.700
But all my interactions with TypeScript are like, oh, you haven't declared this thing right.

00:44:11.700 --> 00:44:15.960
This thing's, it's like, it's as picky as C++ or C# or Java.

00:44:16.300 --> 00:44:23.840
But it's, it's not as like built from the start, like the tools aren't necessarily all there to make that fit together.

00:44:23.840 --> 00:44:30.120
So I always feel like I'm kind of stumbling over the things like 80% of the time it's helped me and 20% of the time it frustrates me.

00:44:30.120 --> 00:44:34.000
Whereas like here you can just kind of, you can leave it off, take it or leave it if it's good, not good.

00:44:34.000 --> 00:44:34.540
Yeah.

00:44:34.860 --> 00:44:35.040
Yeah.

00:44:35.040 --> 00:44:41.020
I think TypeScript definitely helped with some learnings about how developers want to interact with typing.

00:44:41.020 --> 00:44:46.960
I think the thing with TypeScript, it is very, like there's a lot of features in there and it's very customizable.

00:44:46.960 --> 00:44:50.560
But, you know, it's kind of like you have like a nail, right?

00:44:50.560 --> 00:44:51.600
And it gave you a jackhammer.

00:44:51.600 --> 00:44:53.100
You really don't need the jackhammer.

00:44:53.100 --> 00:44:54.380
Exactly.

00:44:54.380 --> 00:44:56.900
Maybe a little finishing hammer would be nice.

00:44:57.300 --> 00:44:57.460
Yeah.

00:44:57.460 --> 00:44:59.280
There's a lot of different things that you can customize.

00:44:59.280 --> 00:45:00.420
And some people need that.

00:45:00.420 --> 00:45:04.500
But I think for 90% of folks, I'm making up that number.

00:45:04.500 --> 00:45:05.200
That's not a real number.

00:45:05.200 --> 00:45:11.140
But for a lot of folks, you probably don't need a lot of those knobs to turn and options to set.

00:45:11.140 --> 00:45:11.900
Yeah, absolutely.

00:45:11.900 --> 00:45:15.780
There was like a two-year period with TypeScript where I'd read the roadmap.

00:45:15.780 --> 00:45:18.680
They do a great job of running their project.

00:45:18.680 --> 00:45:19.700
Great job.

00:45:19.700 --> 00:45:23.840
But they put a feature in using words I didn't know from type theory.

00:45:23.840 --> 00:45:26.860
And my answer was, oh, that's for Angular.

00:45:27.280 --> 00:45:28.160
Oh, that's for Angular.

00:45:28.160 --> 00:45:30.320
Oh, Angular is the only one having that problem.

00:45:30.320 --> 00:45:33.120
There's some serious machinery.

00:45:33.120 --> 00:45:34.600
Yeah, there is.

00:45:34.600 --> 00:45:34.980
All right.

00:45:34.980 --> 00:45:38.380
Final thought on this from the chat is Eric O'Shaughnessy says,

00:45:38.380 --> 00:45:41.060
I love how typing solidifies the author's intent.

00:45:41.060 --> 00:45:41.600
Yeah.

00:45:41.600 --> 00:45:42.200
All right.

00:45:42.200 --> 00:45:44.920
Let's have the chooser choose again.

00:45:44.920 --> 00:45:45.620
Jay.

00:45:45.620 --> 00:45:46.280
All right.

00:45:46.280 --> 00:45:48.620
So I totally didn't peanut butter on this.

00:45:48.620 --> 00:45:52.180
But as y'all were talking, I just got some wonderful ideas.

00:45:52.180 --> 00:45:57.020
And I immediately started thinking about just the doubling down of some of the

00:45:57.020 --> 00:46:02.220
technologies that we've seen kind of pop up over the last couple of years, but then truly

00:46:02.220 --> 00:46:02.640
evolve.

00:46:02.640 --> 00:46:07.740
And one of the biggest examples of that, and I know I'm five years, daily, dollar short here,

00:46:07.740 --> 00:46:15.520
but anything Jupyter Notebook related, it's not just for the solo data scientist anymore.

00:46:16.620 --> 00:46:18.320
collaborative Jupyter Notebooks.

00:46:18.320 --> 00:46:21.920
Like to me that I know people that just have dreams about that.

00:46:21.920 --> 00:46:23.340
And they're like the best dreams ever.

00:46:23.900 --> 00:46:31.000
And, you know, I know, Mike, you just did a podcast episode a few weeks back about that.

00:46:31.000 --> 00:46:32.940
And we were talking about it on Python Bytes a little bit.

00:46:32.940 --> 00:46:35.400
They're like, it's not just one option anymore.

00:46:35.400 --> 00:46:38.960
It's, you know, there's cocalc, there's PyBinder, there's DeepNote.

00:46:38.960 --> 00:46:41.680
Apparently I'm a DeepNote influencer and I didn't even know it.

00:46:41.820 --> 00:46:42.300
That's awesome.

00:46:42.300 --> 00:46:44.280
You are bringing it up again.

00:46:44.280 --> 00:46:45.580
Again, exactly.

00:46:45.580 --> 00:46:50.120
But not just in like Jupyter land, we have like crazy ideas.

00:46:50.120 --> 00:46:54.400
Like what if we could do Python on the front end with Anvil?

00:46:54.680 --> 00:46:59.620
And like now Anvil is saying like, hey, we're going to open source some of our server technology

00:46:59.620 --> 00:47:02.580
so that you can take this technology and do it yourself.

00:47:02.580 --> 00:47:07.000
And I think that that's just like with Type Hints, we're coming up with these ideas and

00:47:07.000 --> 00:47:08.660
we're taking them a step further.

00:47:08.660 --> 00:47:14.820
I think that this is what, in my opinion, has kept me in the Python ecosystem as long as it

00:47:14.820 --> 00:47:22.000
has, is because I'm constantly learning about like brand new ways to do a thing in Python.

00:47:22.260 --> 00:47:25.500
And I have to talk about this because I told people in my Slack channel that I would.

00:47:25.500 --> 00:47:29.680
But like we just, you know, at Elastic, we just launched a brand new tool called Elant

00:47:29.680 --> 00:47:30.300
and it's in beta.

00:47:30.300 --> 00:47:33.800
And the whole idea is it's like a Pandas data frame.

00:47:33.800 --> 00:47:37.840
But instead of storing all of your data in memory, you can store it in an Elastic search,

00:47:37.840 --> 00:47:38.720
you know, data store.

00:47:38.720 --> 00:47:39.820
Oh, that's an interesting idea.

00:47:39.820 --> 00:47:47.140
So now instead of being limited to what your RAM can hold, you're limited to how much space

00:47:47.140 --> 00:47:50.500
you got and you can run search and you can run queries on it.

00:47:50.600 --> 00:47:55.120
You can tie it into things like, you know, scikit learn and TensorFlow and do, you know,

00:47:55.120 --> 00:47:56.440
any type of machine learning on it.

00:47:56.440 --> 00:48:02.060
And at the end of the day, you're doing transforms on the data as it's in the data store.

00:48:02.060 --> 00:48:06.160
So there's no more downloading a bunch of data, working on it and trying to re-upload it.

00:48:06.160 --> 00:48:13.540
And it's off of the backs of crazy ideas from people crazier than I am that are just like,

00:48:13.540 --> 00:48:14.880
hey, what if we could do this?

00:48:14.880 --> 00:48:19.980
And, you know, to me, that's all I wanted to do with Python is just make up goofy stuff

00:48:19.980 --> 00:48:21.020
and see if it would work.

00:48:21.020 --> 00:48:22.360
I think that's an interesting idea.

00:48:22.360 --> 00:48:26.320
You could start using things like lots of data and things like serverless,

00:48:26.320 --> 00:48:29.740
where you get really short execution times and not much power.

00:48:29.740 --> 00:48:33.700
But if it's already in something like Elastic, you could do pandas against it,

00:48:33.700 --> 00:48:38.900
like quote pandas, like the API against it without really suffering a lot of trying to

00:48:38.900 --> 00:48:43.780
download it to your little Docker Lambda callback thing before it runs out of time to execute

00:48:43.780 --> 00:48:44.140
and whatnot.

00:48:44.140 --> 00:48:44.620
Yeah.

00:48:44.620 --> 00:48:48.560
Actually, I think I've seen some people do some cool stuff with spaCy and Elastic as well,

00:48:48.560 --> 00:48:53.360
you know, processing all the huge volumes of text, which also I think is such an interesting

00:48:53.360 --> 00:48:55.300
part of our application of data science.

00:48:55.400 --> 00:48:59.260
Like, you know, you want to have, you have so much text that, you know, you can't even,

00:48:59.260 --> 00:49:00.240
nobody can read it.

00:49:00.240 --> 00:49:05.820
You can barely store it, but you can still analyze it and process it and find something out about

00:49:05.820 --> 00:49:06.440
it that otherwise.

00:49:06.440 --> 00:49:08.760
So yeah, that's, that actually sounds quite cool.

00:49:08.760 --> 00:49:14.840
I mean, the problems I was, I was having initially was just this amazing problem of like, I've got

00:49:14.840 --> 00:49:18.300
a million lines of data that I need to do something with.

00:49:18.300 --> 00:49:20.020
And I've got this little Mac mini here.

00:49:20.020 --> 00:49:22.300
That's just chugging along, trying its best.

00:49:22.300 --> 00:49:24.820
And everyone's like, well, why don't you just use the Google API?

00:49:24.820 --> 00:49:26.380
And it was like, okay, well, I did the math.

00:49:26.380 --> 00:49:27.840
I'm going to need $20,000.

00:49:27.840 --> 00:49:30.780
And it's like, okay, so we can't use the Google API.

00:49:30.780 --> 00:49:32.060
We can't solve it with that problem.

00:49:32.060 --> 00:49:32.880
What else do we got?

00:49:32.880 --> 00:49:36.640
And now it's like, oh, wait, you mean I can just store all this data?

00:49:36.640 --> 00:49:41.380
Because I'm, it's only a few gigs, but then I can just hit my local server as many times

00:49:41.380 --> 00:49:41.840
as I want.

00:49:41.840 --> 00:49:47.220
Let, you know, search store or any type of data store that's good at retrieving the data

00:49:47.220 --> 00:49:50.000
as I want it, as I need it, and then let it do its thing.

00:49:50.320 --> 00:49:53.740
Like that solved a $20,000 problem.

00:49:53.740 --> 00:49:56.140
I mean, even, even a site for the cash.

00:49:56.140 --> 00:49:57.540
Do you want to send all your data to Google?

00:49:57.540 --> 00:49:58.280
Probably not.

00:49:58.280 --> 00:49:58.940
Yeah.

00:49:58.940 --> 00:50:00.460
I mean, that's awesome.

00:50:00.460 --> 00:50:02.280
Even if it were free.

00:50:03.880 --> 00:50:05.700
You can also send it to Facebook while you're at it.

00:50:05.700 --> 00:50:06.660
I don't know.

00:50:06.660 --> 00:50:08.480
I was, I was working with police call records.

00:50:08.480 --> 00:50:10.860
So I don't want to send that data anywhere.

00:50:10.860 --> 00:50:12.500
I don't want to be on a watch list.

00:50:12.500 --> 00:50:13.840
No, exactly.

00:50:13.840 --> 00:50:17.740
And I think those are like really, a lot of these really important applications of the technology

00:50:17.740 --> 00:50:21.520
when in the health domain, people are doing good and useful stuff, but they should not

00:50:21.520 --> 00:50:26.960
do that stuff at that type of cost, which means sharing all of their sensitive data with

00:50:26.960 --> 00:50:29.580
companies that will, you know, want it for some other reason.

00:50:29.580 --> 00:50:30.280
Yeah, absolutely.

00:50:30.720 --> 00:50:32.320
Matt, Reuven, you guys do training.

00:50:32.320 --> 00:50:34.040
What's the Jupyter story around there?

00:50:34.040 --> 00:50:38.380
I did a class with not Jupyter, but it was all collab based this morning.

00:50:38.380 --> 00:50:40.280
So yeah, I use it a lot.

00:50:40.280 --> 00:50:41.880
I think it's great for beginners.

00:50:41.880 --> 00:50:48.740
Like I said, for a lot of people who are scientists or engineers, that's what they sort of consider

00:50:48.740 --> 00:50:49.220
Excel.

00:50:49.620 --> 00:50:53.500
And so a lot of them sort of want to sit in Jupyter all day.

00:50:53.500 --> 00:50:59.560
They don't even want to like think about modules or code or even software engineering.

00:50:59.560 --> 00:50:59.980
Right.

00:50:59.980 --> 00:51:05.420
And so it's somewhat of a challenge for me to sort of say, okay, let's talk about some engineering

00:51:05.420 --> 00:51:09.160
skills and some good best practices for Python projects.

00:51:09.160 --> 00:51:10.780
And I'm like, oh, I don't want to leave Jupyter.

00:51:10.780 --> 00:51:11.220
Right.

00:51:11.220 --> 00:51:12.260
Can I do this all in Jupyter?

00:51:12.260 --> 00:51:15.960
I'm like, well, you could, but you kind of don't want to per se.

00:51:16.320 --> 00:51:17.280
But yeah, definitely cool.

00:51:17.280 --> 00:51:24.520
I think what I'd love to see is Inez's fancy mypyChecker hooked up with pandas on Jupyter.

00:51:24.520 --> 00:51:29.100
That would make my day because that's one of the things that I find confuses people just

00:51:29.100 --> 00:51:34.420
with pandas having 50 ways to do things and then objects returning five different types

00:51:34.420 --> 00:51:39.740
or methods that return five different types that like you don't get any tab completion or

00:51:39.740 --> 00:51:43.580
any of that good stuff in Jupyter when you're doing a lot of the machine learning stuff.

00:51:43.960 --> 00:51:48.720
Yeah. And a bunch of like grownup engineering stuff is coming to Jupyter, right? Like NBDev,

00:51:48.720 --> 00:51:54.400
NBQA, some of these other stuff that's coming there is making it way more interesting for that

00:51:54.400 --> 00:51:54.640
regard.

00:51:54.640 --> 00:51:59.920
Yeah. The NBDev stuff is interesting just coming. I mean, that's sort of taking it to that sort

00:51:59.920 --> 00:52:03.660
of literate style of programming where we're going to stay in Jupyter all day and do everything

00:52:03.660 --> 00:52:07.560
from that. And then, you know, Netflix has their stuff where they're deploying Jupyter

00:52:07.560 --> 00:52:09.240
notebooks to production.

00:52:09.240 --> 00:52:10.480
Yeah. It was paper mill. Yeah.

00:52:10.480 --> 00:52:12.780
Reuben, how about you? And then I'm going to run the chooser.

00:52:12.780 --> 00:52:18.740
So I, yeah, I mean, I use, oh, so I use Jupyter every day for my training. I don't use slides. I

00:52:18.740 --> 00:52:24.880
just do live coding. And I find that's a great way to show them not just sort of the answer. This

00:52:24.880 --> 00:52:29.520
is how you code something, but this is the process you use to get to the solution because teaching

00:52:29.520 --> 00:52:33.480
people that process is really important. And it also means I can share with them everything that

00:52:33.480 --> 00:52:37.840
I typed during the day really, really easily. People are a little resistant to using it first,

00:52:37.840 --> 00:52:41.560
especially experienced developers. They're like, wait, what is this thing? Why are you not using a normal

00:52:41.560 --> 00:52:46.040
IDE? I'm actually forced myself in the last year to remember, oh yeah, we should do a few exercises

00:52:46.040 --> 00:52:51.200
and tell them to use the IDE so they won't think that everything is done in Jupyter. That's a great

00:52:51.200 --> 00:52:53.940
environment. But like, there are other ways to develop software.

00:52:53.940 --> 00:52:56.820
Why does Python only run in this weird web browser thing?

00:52:56.820 --> 00:52:58.220
Right, exactly.

00:52:58.220 --> 00:53:03.460
Speaking of this, this is another, I think this is another reason why Python has taken off so much,

00:53:03.520 --> 00:53:09.400
just that you want stuff to be dynamic. If you're doing the sort of data science-y type of work,

00:53:09.400 --> 00:53:14.000
you want to run your code that way, even if you're running it in an IDE in a more traditional way.

00:53:14.000 --> 00:53:18.040
But I think Jupyter has especially, not just like, oh, you want to have like these little notebook

00:53:18.040 --> 00:53:21.600
cells in your browser, but more like, this is the type of way you want to interact with code,

00:53:21.600 --> 00:53:23.960
run something, change a line, run again, run that part.

00:53:23.960 --> 00:53:30.600
Well, that's where they're coming from too. They're coming from notebook environments. And so this makes sense for a lot of these people.

00:53:30.600 --> 00:53:37.240
And being able to just explain it, you know, on the same, just in one look, like instead of going,

00:53:37.240 --> 00:53:44.100
here's five slides explaining what I'm about to do, or here's just the code. Now let me sit here and explain it to you.

00:53:44.100 --> 00:53:50.620
I can literally break it down line by line. Okay, this is what's about to happen now. Let's run this and watch it happening as we go.

00:53:50.620 --> 00:53:57.240
So for people who don't write Python full time, again, it's amazing because for them, they can see it piece by piece.

00:53:57.240 --> 00:54:01.480
Just like, you know, my daughter, I'm just trying to teach her how to read early. And it's just like,

00:54:01.480 --> 00:54:09.140
like break it up piece by piece. And like, you can do that when you're training young, experienced wise Pythonistas and just say,

00:54:09.140 --> 00:54:16.240
like, hey, let's just look at what this does. And if we want to dig into it, it's almost like having a debugger in your presentation

00:54:16.380 --> 00:54:22.220
and just being able to like stop at any point in time and go, all right, let's, let's jump in. Let's go deeper. Let's really talk about this.

00:54:22.220 --> 00:54:25.180
Yeah. Or be able to step back two lines of any execution.

00:54:25.180 --> 00:54:25.780
True.

00:54:25.780 --> 00:54:27.440
All right. Just for the time sake.

00:54:27.440 --> 00:54:28.320
I started using...

00:54:28.320 --> 00:54:30.700
Go ahead. Last thought, Reuben. You get the final thought on this one.

00:54:30.700 --> 00:54:38.440
I started using more and more markup in my notebooks as well to like sort of document what I'm doing explicitly and sort of,

00:54:38.440 --> 00:54:45.020
instead of just using hashtags and comments. So it becomes much more obvious with bullet points. I think people are enjoying that as well.

00:54:45.020 --> 00:54:52.140
Yeah, that's great. And that's, I mean, that's part of the Zen of notebooks. All right. And you're up next. The random choices selected you.

00:54:52.140 --> 00:54:59.620
Okay. So my big story for this year is very small story, a microscopic story. It's COVID. It's the coronavirus,

00:55:00.100 --> 00:55:06.820
which I think for the first time ever, it's the topic that everyone is speaking about in every country,

00:55:06.820 --> 00:55:11.940
every walk of life, like whoever I talk to, wherever they are, this is the only thing people talk about

00:55:11.940 --> 00:55:16.720
because it has such a profound effect on everything we've done. Now, you know, this is a Python show.

00:55:16.720 --> 00:55:21.740
So we'll talk about the Python aspect of it. And I'm not trying to minimize at all the extraordinary pain

00:55:21.740 --> 00:55:27.660
that people are going through physically, medically, emotionally, financially, on, on, and on.

00:55:27.660 --> 00:55:33.520
But Python is considered, has continued sort of chugging along throughout this crisis. In fact,

00:55:33.520 --> 00:55:38.020
like we've seen that big companies, high tech companies are actually among the winners in this

00:55:38.020 --> 00:55:42.900
as the whole world has gone digital and companies are hiring Python developers. They're increasingly

00:55:42.900 --> 00:55:47.680
desperate for Python developers. The number of people in my corporate training classes, who, when we go around,

00:55:47.680 --> 00:55:52.720
everyone introduces themselves, who were hired in the last six months is amazing to me. Like these are

00:55:52.720 --> 00:55:57.240
people who are working from home, were interviewed from home, hired from home, and are now doing training

00:55:57.240 --> 00:56:03.320
from home as their companies sort of grow in interest and power and everything. So people who have Python

00:56:03.320 --> 00:56:09.060
skills have continued to be, and I would even say are increasingly in demand, which is amazing. The bad news

00:56:09.060 --> 00:56:15.600
among the bad news is of course, so I mentioned this before, Python and all the other meetings and meetups

00:56:15.600 --> 00:56:19.440
and gatherings have suffered as a result. The good news in this front is I've been able to speak at

00:56:19.440 --> 00:56:24.440
many more conferences than I would have been able to because, hey, I can attend the conference from my

00:56:24.440 --> 00:56:29.500
home office. I don't need to fly anywhere, go anywhere. But you know what? All of these conferences,

00:56:29.500 --> 00:56:34.220
these online solutions are still really lacking. At the end of the day, as much as we want to say,

00:56:34.220 --> 00:56:38.500
we're virtual, we're online, we communicate this way. And that is an important part of things,

00:56:38.500 --> 00:56:43.700
that face-to-face contact, that personal contact is really missing. And I'm really feeling it. I've only been

00:56:43.700 --> 00:56:47.700
doing conferences for a few years now. And boy, I really miss being in the same room as other people

00:56:47.700 --> 00:56:51.380
and talking to them and chatting and just sort of randomly bumping into people. And then you also

00:56:51.380 --> 00:56:56.660
have the financial aspect of it that someone was mentioning earlier, the PSF, their big fundraiser

00:56:56.660 --> 00:57:01.260
each year is Python. And I'm sure it was a hit for them not just not to have it this year, but to have

00:57:01.260 --> 00:57:06.360
to cancel the venue. And I am extremely skeptical that's going to happen in person. I know EuroPython

00:57:06.360 --> 00:57:12.600
already said it's not happening in 2021. And we'll have to see exactly how this affects the community

00:57:12.600 --> 00:57:17.180
going forward. I'd say so far, we're doing okay. But you know, here's an opportunity for someone to

00:57:17.180 --> 00:57:23.220
figure out how can we do conferences online that are effective in a closer way to what we've been

00:57:23.220 --> 00:57:28.100
doing so far. The news is, I would say, unbalanced good for Python and for people who know Python,

00:57:28.360 --> 00:57:35.300
but still pretty, pretty bad overall. And also add that like these vaccines, I mean, boy, oh boy, if they

00:57:35.300 --> 00:57:40.940
work, this is going to be like, I'm super not as a biologist or anything, but I'm so amazingly impressed

00:57:40.940 --> 00:57:46.700
with all the science and the work that people have been doing on this front. And I think this has a chance

00:57:46.700 --> 00:57:49.660
also to affect our lives moving forward, how they develop them.

00:57:49.660 --> 00:57:55.680
They just need to make a PyCon bubble. So in the United States, the NBA was continuing to play because they

00:57:55.680 --> 00:58:02.880
they had a bubble where they isolated all the players for however long, right? So we just all go to somewhere

00:58:02.880 --> 00:58:05.680
and bubble up for however long.

00:58:05.680 --> 00:58:06.780
Then we can have our conference online.

00:58:06.780 --> 00:58:08.240
I'll isolate with you guys for a month.

00:58:08.240 --> 00:58:10.560
I don't know if my family will let me do that.

00:58:10.560 --> 00:58:12.900
Jay, we'll just do it in San Diego, man. It's nice there.

00:58:12.900 --> 00:58:13.640
Okay, I'm all for it.

00:58:13.640 --> 00:58:15.680
Coronado Island, we'll just get a section of it, okay?

00:58:15.680 --> 00:58:16.140
Yeah.

00:58:16.140 --> 00:58:22.840
But we're not mandatory quarantine for like conferences. I just did two-week quarantine here to be able to enter

00:58:22.840 --> 00:58:23.320
Australia.

00:58:23.320 --> 00:58:24.540
Yeah, just in Australia.

00:58:25.540 --> 00:58:27.960
Make PyCon in Australia.

00:58:27.960 --> 00:58:29.100
That sounds okay to me.

00:58:29.100 --> 00:58:29.780
Problem solved.

00:58:29.780 --> 00:58:34.960
Well, I mean, to be fair, it's expensive. So I wouldn't, you know, it's like, you know,

00:58:34.960 --> 00:58:40.000
would you want to pay like, you know, your conference plus two weeks at a hotel in order to do that?

00:58:40.000 --> 00:58:45.180
I don't think that'd be even less inclusive than a lot of these conferences already are.

00:58:45.440 --> 00:58:46.960
I don't want to take all of this thunder.

00:58:46.960 --> 00:58:53.600
But one of the first conferences that I watched was, Cecil, please remind me now because I'm blanking.

00:58:53.600 --> 00:58:54.860
That's how long of a year it's been.

00:58:54.860 --> 00:58:56.640
The conference that you helped put on.

00:58:56.640 --> 00:58:59.000
And the Juneteenth Con.

00:58:59.180 --> 00:58:59.460
Yeah.

00:58:59.460 --> 00:58:59.500
Yeah.

00:58:59.500 --> 00:59:03.300
And with that, I mean, one, great conference.

00:59:03.300 --> 00:59:05.500
I'm sorry I screwed up on remembering the name.

00:59:05.500 --> 00:59:06.600
That's my fault, not yours.

00:59:07.120 --> 00:59:14.860
But also the sheer fact that that conference was organized in two weeks and it was an amazing

00:59:14.860 --> 00:59:15.440
conference.

00:59:15.440 --> 00:59:16.580
Like the ability.

00:59:16.580 --> 00:59:18.960
And that could never have been done if it was in person, right?

00:59:19.180 --> 00:59:19.540
Yes.

00:59:19.540 --> 00:59:25.220
So like the accessibility that you're providing to new speakers, people that normally would

00:59:25.220 --> 00:59:27.640
not be able to get up and give a presentation.

00:59:27.640 --> 00:59:32.580
Like I've had that conversation so many times of like the type of talks that I like to create

00:59:32.580 --> 00:59:35.860
are not the type of talks you see at PyCon and there's a reason why.

00:59:35.860 --> 00:59:37.340
And it's not a bad thing.

00:59:37.340 --> 00:59:38.820
It's just, it is what it is.

00:59:38.820 --> 00:59:43.500
And I think when you're able to say, you know what, let's do a conference.

00:59:43.500 --> 00:59:44.720
Let's make this happen.

00:59:44.720 --> 00:59:46.000
Let's just get up.

00:59:46.000 --> 00:59:47.200
We can have fun with it.

00:59:47.620 --> 00:59:51.280
I've seen some conference talks that were literally small budget films.

00:59:51.280 --> 00:59:53.380
Like they had multiple casts.

00:59:53.380 --> 00:59:58.120
I've done transcriptions on conference talks that literally had, like they gave me the script

00:59:58.120 --> 00:59:59.820
and said, all right, here you go.

00:59:59.820 --> 01:00:06.160
So like when you can actually do things like that and think outside the box and use this

01:00:06.160 --> 01:00:09.360
time to readjust the needle.

01:00:09.360 --> 01:00:13.580
There was a good podcast episode on more than just code.

01:00:13.580 --> 01:00:14.800
I believe not more than just code.

01:00:14.800 --> 01:00:15.440
I don't remember what it is.

01:00:15.440 --> 01:00:16.360
I'll find it greater than code.

01:00:16.360 --> 01:00:16.880
That's what it was.

01:00:17.000 --> 01:00:23.660
And they said, if we haven't taken this time to do something better when things are different,

01:00:23.660 --> 01:00:28.800
when things have improved, then shame on all of us because yes, this sucked, but it caused

01:00:28.800 --> 01:00:34.140
us to think so much outside the box that we should be able to take all that knowledge with

01:00:34.140 --> 01:00:37.900
us when we can get back in the box and just have a ton of fun with it.

01:00:37.900 --> 01:00:38.200
Yeah.

01:00:38.200 --> 01:00:43.340
I think a lot of opportunities been made available for people to attend conferences and for people

01:00:43.340 --> 01:00:48.860
to get jobs where companies would previously say, no, you have to move to San Francisco or

01:00:48.860 --> 01:00:50.040
to Omaha or whatever.

01:00:50.040 --> 01:00:50.880
It's like, well, you know what?

01:00:50.880 --> 01:00:51.940
No one's going to the office.

01:00:51.940 --> 01:00:55.900
Let's try hiring from the best in the world instead of the best in Nebraska or whatever.

01:00:55.900 --> 01:01:01.260
I think that might be the biggest fallout of this, Michael, is just the change in everything

01:01:01.260 --> 01:01:03.560
being centrally located in Silicon Valley.

01:01:03.560 --> 01:01:04.040
Yeah.

01:01:04.040 --> 01:01:09.660
I've heard of a lot of people that actually just have jobs in the Valley that have moved

01:01:09.660 --> 01:01:14.580
back to where their parents are because it's like 10 times cheaper or something like that.

01:01:14.580 --> 01:01:16.780
And they're not going to want to move back.

01:01:16.780 --> 01:01:18.200
Yeah.

01:01:18.200 --> 01:01:21.600
Have you heard that some companies are then readjusting their salaries?

01:01:21.600 --> 01:01:25.300
They're saying, well, if you live outside of the Bay Area, then it's cheaper.

01:01:25.460 --> 01:01:27.620
So we're going to cut their salary as a result.

01:01:27.620 --> 01:01:27.900
Yeah.

01:01:27.900 --> 01:01:30.020
But people have always been doing that.

01:01:30.020 --> 01:01:31.900
That's like, unfortunately, not new.

01:01:31.900 --> 01:01:37.280
So if you're listening and this happens, you can say, well, you no longer have to pay

01:01:37.280 --> 01:01:40.500
$17 million for my office area.

01:01:40.500 --> 01:01:42.540
So let's call it an even swap.

01:01:42.540 --> 01:01:48.940
Just keep a virtual address in the Bay Area.

01:01:48.940 --> 01:01:49.400
Exactly.

01:01:49.400 --> 01:01:51.140
My PO box is right down on Fifth Street.

01:01:51.140 --> 01:01:51.720
All right.

01:01:51.720 --> 01:01:52.760
Last one.

01:01:52.760 --> 01:01:55.400
This random choice was easy because we're down to our final.

01:01:55.560 --> 01:01:56.180
Excellent guest.

01:01:56.180 --> 01:01:57.820
Matt Harrison, what do you got for us?

01:01:57.820 --> 01:01:58.400
Okay.

01:01:58.400 --> 01:02:02.540
My thought was just on sort of the hardware aspect of things this year.

01:02:02.540 --> 01:02:07.560
So I have a daughter who started college this year for better or for worse.

01:02:07.560 --> 01:02:10.820
And she's learning both C++ and Python right now.

01:02:10.820 --> 01:02:14.560
Her linear algebra class has a Python lab, which I think is awesome.

01:02:14.560 --> 01:02:15.780
I wish I had that.

01:02:15.780 --> 01:02:19.400
But I was actually helping her with some homework.

01:02:19.400 --> 01:02:22.480
I wasn't doing it, but she was like, I can't figure this out.

01:02:22.480 --> 01:02:24.440
So I was her rubber duck the other night.

01:02:25.180 --> 01:02:27.920
And her issue was allocating memory, right?

01:02:27.920 --> 01:02:33.460
And so one of the things that's nice about Python is you don't have to worry about allocating

01:02:33.460 --> 01:02:33.900
memory.

01:02:33.900 --> 01:02:39.820
And she got all the output, but she was just double freeing a pointer here, which they checked

01:02:39.820 --> 01:02:40.440
on submission.

01:02:40.980 --> 01:02:43.720
So Python's now, now we're seeing Python.

01:02:43.720 --> 01:02:45.520
And I'll just tie this.

01:02:45.520 --> 01:02:50.740
Like I have a client who wants next year wants me to do a training on GPUs with Python, which

01:02:50.740 --> 01:02:53.980
just goes to show like my clients tend to be big companies.

01:02:53.980 --> 01:03:01.260
And so big companies are now leveraging like specialized technology to do things very quickly, right?

01:03:01.260 --> 01:03:08.000
And if you have a GPU, you can get 10,000 times performance that you get out of a CPU.

01:03:08.320 --> 01:03:09.900
So I think that's super exciting.

01:03:09.900 --> 01:03:14.380
There's the Rapids project, which is heavily sponsored by NVIDIA.

01:03:14.380 --> 01:03:17.300
And I'm super impressed with that.

01:03:17.300 --> 01:03:23.680
They're basically like taking well-known APIs and basically saying, hey, your code basically

01:03:23.680 --> 01:03:28.960
change an import or, you know, with the change of an import and this hardware, your code will

01:03:28.960 --> 01:03:30.720
run X times faster or whatever.

01:03:31.040 --> 01:03:33.380
And so I think that's super compelling and exciting.

01:03:33.380 --> 01:03:37.640
Not that necessarily everyone will have access to those sorts of things, but it's now, it's

01:03:37.640 --> 01:03:40.420
now getting to the point where it's becoming more common.

01:03:40.420 --> 01:03:44.280
On the note of hardware, I think another thing that was really interesting this year was the

01:03:44.280 --> 01:03:46.800
Apple M1 chip coming out.

01:03:46.800 --> 01:03:53.720
I actually bought a beefy PC this year, having run a MacBook for 15 years, just because due to

01:03:53.720 --> 01:03:59.040
Corona and whatnot, I needed something beefy to start doing virtual sharing and presentation

01:03:59.040 --> 01:04:01.580
like this and my MacBook just wasn't cutting it.

01:04:01.580 --> 01:04:08.140
But the thing I don't like about my PC is that it has, it sounds like it's going to take

01:04:08.140 --> 01:04:10.320
off every time I start doing something, right?

01:04:10.320 --> 01:04:14.680
Like modern Intel chips can take us to Mars if they want to.

01:04:14.680 --> 01:04:17.340
We just need to like make a huge drone out of them.

01:04:17.340 --> 01:04:24.140
And so I'm super excited to see, like, if you can get a silent MacBook that, you know, is

01:04:24.140 --> 01:04:26.900
super powerful, runs faster than Intel chips.

01:04:27.100 --> 01:04:31.100
That's super compelling, especially if they allow you to get a little bit more RAM, which

01:04:31.100 --> 01:04:33.900
from the machine learning side is interesting to me.

01:04:33.900 --> 01:04:37.540
But I'm also excited about the competition factor of that.

01:04:37.540 --> 01:04:42.200
I think like Intel and the chipset has sort of stagnated for the past couple of years.

01:04:42.200 --> 01:04:45.440
We've sort of run out of the end of Moore's law per se.

01:04:46.020 --> 01:04:52.640
So I think both the GPU and the M1, it'll be interesting to see what the competition is from

01:04:52.640 --> 01:04:58.260
the PC manufacturers if they're going to, you know, do a similar everything on a chip thing

01:04:58.260 --> 01:05:01.380
or just sort of go with what they've been going with.

01:05:01.380 --> 01:05:02.960
I think competition is good.

01:05:02.960 --> 01:05:07.020
And so I'm excited that Apple did this, even though there's going to be some growing pains

01:05:07.020 --> 01:05:11.900
and Python might have some issues at first, but I think in the end, new technologies, new

01:05:11.900 --> 01:05:16.840
hardware that allow us to write at high levels and not have to worry about freeing and allocating

01:05:16.840 --> 01:05:20.280
memory, which again, a lot of people are using Python don't care about that.

01:05:20.280 --> 01:05:21.440
They don't want to be programmers.

01:05:21.440 --> 01:05:26.620
They want to leverage great code, stand on the shoulders of giants and the latest and greatest

01:05:26.620 --> 01:05:29.560
software and hardware and have it be fast.

01:05:29.660 --> 01:05:32.300
So I'm super excited about the future with them.

01:05:32.300 --> 01:05:34.240
Yeah, I'm really excited about both these things.

01:05:34.240 --> 01:05:36.880
Like the whole GPU revolution is incredible.

01:05:36.880 --> 01:05:40.160
And the Apple M1 stuff is going to be really, really interesting.

01:05:40.160 --> 01:05:43.920
Like you, I bought a maxed out Mac mini.

01:05:43.920 --> 01:05:48.460
I actually had already ordered a top of the line MacBook Pro 16 inch.

01:05:48.460 --> 01:05:49.580
And then that came out.

01:05:49.580 --> 01:05:50.500
I started seeing the reviews.

01:05:50.500 --> 01:05:51.100
I'm like, you know what?

01:05:51.100 --> 01:05:51.520
Forget it.

01:05:51.520 --> 01:05:53.100
I'm not getting that thing.

01:05:53.100 --> 01:05:54.540
I'm getting this new one to try it out.

01:05:54.540 --> 01:05:57.640
And it does have some drawbacks, like Docker doesn't work right away.

01:05:57.640 --> 01:05:59.160
Maybe it will, maybe it won't.

01:05:59.160 --> 01:06:01.840
But I have a 2018 MacBook Pro.

01:06:01.840 --> 01:06:02.420
That's pretty good.

01:06:02.420 --> 01:06:06.500
I have a SimRacing 16 core machine over there.

01:06:06.500 --> 01:06:08.960
Like I've got plenty of Intel stuff to work.

01:06:08.960 --> 01:06:10.140
So I'm going to try to jump on this.

01:06:10.140 --> 01:06:14.180
And I think the interesting Python angle here, besides just having stuff to run our code in

01:06:14.180 --> 01:06:18.580
is, you know, Inu's talked about like her CI didn't support 3.9 right away.

01:06:18.580 --> 01:06:23.000
Well, who's CI is going to build wheels for Apple M1 straight away and things like that.

01:06:23.000 --> 01:06:26.380
There's going to be some interesting growing pains, especially on the data science side,

01:06:26.380 --> 01:06:28.420
as this true platform shift happens.

01:06:28.660 --> 01:06:31.900
It's fun that you mentioned that because actually, yeah, when this came out, we were also thinking

01:06:31.900 --> 01:06:33.140
like, ah, maybe we should get one of these.

01:06:33.140 --> 01:06:36.940
You know, we want to make sure spaCy compiles properly on it and we can really, you know,

01:06:36.940 --> 01:06:37.840
optimize for that.

01:06:37.840 --> 01:06:39.000
And did you guys get one?

01:06:39.000 --> 01:06:39.180
Yeah.

01:06:39.180 --> 01:06:41.820
Because someone has to do it or so, you know, not yet.

01:06:41.820 --> 01:06:42.040
No.

01:06:42.040 --> 01:06:43.700
Also, it's a bit difficult with the traveling.

01:06:43.920 --> 01:06:46.960
But like, yeah, that's kind of when we have other priorities too.

01:06:46.960 --> 01:06:50.460
This is not, I wouldn't put this like at the very top, but like, it's definitely something

01:06:50.460 --> 01:06:50.940
we want to do.

01:06:50.940 --> 01:06:54.000
But at the same time, we also want to keep optimizing for CPU.

01:06:54.000 --> 01:06:55.040
Like that's the other thing.

01:06:55.040 --> 01:06:59.380
Of course, you know, even all the new, these new NLP models, all of that stuff, obviously,

01:06:59.380 --> 01:07:00.940
runs great on a GPU.

01:07:00.940 --> 01:07:02.280
And we'll see a lot of improvements.

01:07:02.280 --> 01:07:06.380
And we also see this become much more available and cheaper for people to use.

01:07:06.380 --> 01:07:10.460
But at the same time, we're still, we're still optimizing our tools and libraries for CPU.

01:07:10.460 --> 01:07:12.760
Like you can run it on your random laptop.

01:07:12.760 --> 01:07:15.660
And also it's still for a long time, it will be cheaper still.

01:07:15.660 --> 01:07:19.320
If you just, you know, you want to run lots of machines and you can get those, you know,

01:07:19.320 --> 01:07:20.620
much cheaper in the cloud.

01:07:20.620 --> 01:07:25.500
And if you can parallelize, you can train, train your models very efficiently on CPU.

01:07:25.500 --> 01:07:26.580
If you can get it to work.

01:07:26.580 --> 01:07:26.980
Yeah.

01:07:26.980 --> 01:07:29.200
That will always be cheaper for a long time.

01:07:29.540 --> 01:07:34.420
There's a lot to say about just the overall cost of computing as a whole.

01:07:34.420 --> 01:07:36.020
I mean, this is great.

01:07:36.020 --> 01:07:36.800
This is $10.

01:07:36.800 --> 01:07:39.880
And I mean, I can run a lot of stuff on that.

01:07:39.880 --> 01:07:41.160
You're holding up a circuit.

01:07:41.160 --> 01:07:44.480
Well, this is the Adafruit thing just for the people who are not on the video.

01:07:44.480 --> 01:07:45.020
Oh, yeah.

01:07:45.020 --> 01:07:45.360
Sorry.

01:07:45.360 --> 01:07:47.620
I'm holding a Raspberry Pi Zero W.

01:07:47.620 --> 01:07:51.520
So it's like, you know, four gigs of RAM, like enough.

01:07:51.520 --> 01:07:55.640
You can buy a 64 gig like flash drive for $3 now.

01:07:55.640 --> 01:07:57.160
Like it's amazing.

01:07:57.320 --> 01:08:00.840
Like just the overall cost of compute has dropped so much.

01:08:00.840 --> 01:08:01.520
I mean, what was it?

01:08:01.520 --> 01:08:03.080
The, what is the Raspberry Pi?

01:08:03.080 --> 01:08:03.860
400?

01:08:03.860 --> 01:08:07.200
400 where it's just, it looks like a keyboard, but it's actually a whole computer.

01:08:07.200 --> 01:08:07.760
Yeah.

01:08:07.820 --> 01:08:16.180
So it's like, as we continue to do more and more, we're doing it with less and less and it's cheaper and cheaper and cheaper.

01:08:16.180 --> 01:08:20.820
And most of us are coming from someplace where the cost of living is too damn high.

01:08:21.360 --> 01:08:26.780
And we're able to say that we can afford to buy a $15 Pi Zero and not think about it too hard.

01:08:26.780 --> 01:08:35.920
But the fact that we're getting to that point where you can have people all over the world where the question isn't anymore, how do I get a computing device in my hands?

01:08:35.920 --> 01:08:38.980
It's like, okay, now I have some choices and they're all affordable.

01:08:39.160 --> 01:08:46.280
Like to me, that's, we're going to see a lot of things come where Brian Okken is right now, where VS 2103 is in the future.

01:08:46.280 --> 01:08:48.160
There's going to be a lot of great things coming.

01:08:48.160 --> 01:08:49.400
And yes, I'm looking at chat.

01:08:50.040 --> 01:08:55.480
I have my kids to have one of those one laptop per child's in their bedroom over there, right?

01:08:55.480 --> 01:08:59.800
Which I think that the Raspberry Pi 400 is sort of...

01:08:59.800 --> 01:09:00.780
It's the next gen of that.

01:09:00.780 --> 01:09:04.160
It's actually something that makes sense.

01:09:04.160 --> 01:09:05.620
Everyone has a TV, right?

01:09:05.620 --> 01:09:09.340
And you can just plug it in and you're not in somewhere.

01:09:09.340 --> 01:09:10.520
I mean, you're in Linux.

01:09:10.520 --> 01:09:13.640
So yeah, you're in a weird environment, but you can run...

01:09:13.640 --> 01:09:15.360
Is that one of the laptops with the hand crank on it?

01:09:15.360 --> 01:09:16.020
Yeah.

01:09:16.020 --> 01:09:17.580
Well, it has a little wings.

01:09:17.580 --> 01:09:19.180
Mine didn't have the hand crank, but...

01:09:19.180 --> 01:09:19.520
Okay.

01:09:19.800 --> 01:09:22.680
I actually like, I kept hearing about Raspberry Pi.

01:09:22.680 --> 01:09:25.840
And so I decided to order one recently and I haven't done anything with it.

01:09:25.840 --> 01:09:28.680
I like just came a few days ago, but I'm looking at this thing.

01:09:28.680 --> 01:09:34.360
I'm like, oh my God, this little card here that cost me less than a hundred dollars, a lot less than that,

01:09:34.360 --> 01:09:39.020
is more powerful than the computer I use to run my entire business for years and years and years.

01:09:39.020 --> 01:09:40.900
It's just astonishing to me.

01:09:40.900 --> 01:09:41.340
Yeah.

01:09:41.340 --> 01:09:44.000
So I think that's probably a good place to round out the show.

01:09:44.000 --> 01:09:45.900
Like the future is so exciting.

01:09:45.900 --> 01:09:48.780
And in some ways we're like kind of living there, right?

01:09:48.780 --> 01:09:50.420
Some of these things that are coming out are so amazing.

01:09:50.420 --> 01:09:53.540
And I just want to say thank you all to you all for being here.

01:09:53.540 --> 01:09:56.080
You're all doing such amazing work and it's really humbling.

01:09:56.080 --> 01:10:02.080
You all took time from crazy schedules, from traveling, from weird locations to just be here and make this whole event happen.

01:10:02.860 --> 01:10:04.660
Thank you for listening to Python Bytes.

01:10:04.660 --> 01:10:07.220
Follow the show on Twitter via at Python Bytes.

01:10:07.220 --> 01:10:10.100
That's Python Bytes as in B-Y-T-E-S.

01:10:10.100 --> 01:10:13.520
And get the full show notes at pythonbytes.fm.

01:10:13.520 --> 01:10:17.880
If you have a news item you want featured, just visit pythonbytes.fm and send it our way.

01:10:17.880 --> 01:10:20.580
We're always on the lookout for sharing something cool.

01:10:20.580 --> 01:10:23.960
On behalf of myself and Brian Okken, this is Michael Kennedy.

01:10:23.960 --> 01:10:27.600
Thank you for listening and sharing this podcast with your friends and colleagues.

