WEBVTT

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

00:00:05.480 --> 00:00:09.640
This is episode 104, recorded November 15th, 2018.

00:00:09.640 --> 00:00:10.560
I'm Michael Kennedy.

00:00:10.560 --> 00:00:11.440
And I'm Brian Okken.

00:00:11.440 --> 00:00:12.240
Hey, Brian. How you doing?

00:00:12.240 --> 00:00:13.240
I am great.

00:00:13.240 --> 00:00:14.900
Yeah, it's a wonderful day, isn't it?

00:00:14.900 --> 00:00:15.980
Yeah, it is.

00:00:15.980 --> 00:00:19.540
And I'm doing one of my favorite things, talking to you on a podcast.

00:00:19.540 --> 00:00:21.840
Yeah, same here. You're all about podcasting today.

00:00:21.840 --> 00:00:24.600
It's like you just block the whole calendar day.

00:00:24.600 --> 00:00:26.060
It's just all podcasting all day.

00:00:26.060 --> 00:00:27.320
Yeah, yeah.

00:00:27.320 --> 00:00:28.180
Right on.

00:00:28.280 --> 00:00:31.420
Well, I'm sure your other episodes on Test Code will come out good as well.

00:00:31.420 --> 00:00:35.120
But before we get to our episode, let's just say thanks to DigitalOcean.

00:00:35.120 --> 00:00:39.920
They support the podcast massively, and we're very thankful for that.

00:00:39.920 --> 00:00:42.140
Check them out at pythonbytes.fm/DigitalOcean.

00:00:42.140 --> 00:00:46.580
Get $100 credit for free for new users to use towards your virtual machines and whatnot.

00:00:46.580 --> 00:00:48.220
Tell you more about that later.

00:00:48.220 --> 00:00:55.920
Brian, I would normally ask you what your first assignment is or make some not very great transition into it

00:00:55.920 --> 00:00:57.900
about coyotes or something.

00:00:58.260 --> 00:01:00.000
But we're not going to go down the coyote route.

00:01:00.000 --> 00:01:01.740
Yeah, we have some exciting news.

00:01:01.740 --> 00:01:02.340
Yeah, we do.

00:01:02.340 --> 00:01:06.200
So there's two things I would like to tell you about the podcast.

00:01:06.200 --> 00:01:10.540
One is new and awesome, and one has just been around, but we haven't really bothered to talk

00:01:10.540 --> 00:01:11.600
about it, and I don't know why.

00:01:11.600 --> 00:01:12.900
So let's talk about it real quick.

00:01:12.900 --> 00:01:19.000
First of all, we talk about six items and maybe a few extras more or less each week, right, Brian?

00:01:19.000 --> 00:01:19.360
Yeah.

00:01:19.480 --> 00:01:21.020
Our episodes are 25 minutes.

00:01:21.020 --> 00:01:26.920
Wouldn't it be nice if you were interested in, say, the third thing to be able to just click on the third thing

00:01:26.920 --> 00:01:30.140
and hear just that if you wanted to jump back as a refresher or whatever?

00:01:30.140 --> 00:01:34.900
Yeah, like you said, if you heard it before and you're like, what did they say about Wiley?

00:01:35.160 --> 00:01:36.620
And you could go back and listen to that.

00:01:36.620 --> 00:01:37.300
Exactly.

00:01:37.300 --> 00:01:38.560
And we do have transcripts.

00:01:38.560 --> 00:01:40.060
We've always had transcripts, and that's great.

00:01:40.060 --> 00:01:45.580
But now the podcast MP3 comes with chapters in each episode.

00:01:46.040 --> 00:01:51.560
So if I open up, say, Overcast on my iPhone, and I flip over, I think I flipped to the right two times

00:01:51.560 --> 00:01:56.800
or something funky like that, I see every topic that we cover now, and you can click on any of them.

00:01:56.800 --> 00:01:58.620
It tells you how much time we spend on each one.

00:01:58.620 --> 00:01:59.240
You can click on it.

00:01:59.240 --> 00:02:01.180
You can get a little independent progress bar.

00:02:01.180 --> 00:02:01.660
It's beautiful.

00:02:01.660 --> 00:02:02.760
Yeah, it's nice.

00:02:02.760 --> 00:02:04.340
It also works in Apple Podcasts.

00:02:04.340 --> 00:02:05.160
You've got to swipe up.

00:02:05.160 --> 00:02:09.100
And all the other podcast players, I don't know, but they support the most of them.

00:02:09.100 --> 00:02:11.100
Which one do you listen with, Brian?

00:02:11.100 --> 00:02:12.400
What do I listen to?

00:02:12.400 --> 00:02:13.040
Overcast.

00:02:13.040 --> 00:02:13.660
Pocket Cast for a while.

00:02:13.660 --> 00:02:14.400
Yeah, Overcast.

00:02:14.400 --> 00:02:15.600
I like Overcast.

00:02:15.720 --> 00:02:18.700
It's not perfect, but it's better than the others, in my opinion, at least for iOS.

00:02:18.700 --> 00:02:21.540
Yeah, I like a lot of the features of it.

00:02:21.540 --> 00:02:22.280
I do, too.

00:02:22.280 --> 00:02:23.360
So chapters.

00:02:23.360 --> 00:02:25.900
Chapters are awesome, and they are now in there.

00:02:25.900 --> 00:02:31.660
And also, if you go to the episode page, I've updated the website for roughly the same capability.

00:02:31.660 --> 00:02:36.880
So there's a little play icon next to each chapter or each thing that we talk about.

00:02:36.880 --> 00:02:40.700
And this only works for episode 103 and forward.

00:02:40.700 --> 00:02:42.360
This doesn't work going way back in the past.

00:02:42.360 --> 00:02:44.700
But everything going forward, assuming we keep this up,

00:02:44.740 --> 00:02:48.260
is a lot of work to do the chapters and figure out the times and put in all the pieces.

00:02:48.260 --> 00:02:50.520
But hopefully people like it.

00:02:50.520 --> 00:02:53.160
And, you know, as long as we're doing it, I'll put it on the website.

00:02:53.160 --> 00:02:54.360
And you can click there as well.

00:02:54.360 --> 00:03:00.460
And one of the things I like about the website is if, like, I'm looking at a, you know, in the future, I'm looking back at an old episode.

00:03:00.980 --> 00:03:05.140
Yeah, I can listen to it without downloading the whole thing onto my iPhone or something.

00:03:05.140 --> 00:03:10.340
Yeah, and I think people also don't understand how much we use our own site as reference.

00:03:10.340 --> 00:03:11.380
Yeah.

00:03:11.380 --> 00:03:13.140
Like, did we talk about it?

00:03:13.140 --> 00:03:14.120
All right, throw it in the search engine.

00:03:14.120 --> 00:03:15.600
No, it's not there.

00:03:15.600 --> 00:03:16.600
So we probably didn't talk about it.

00:03:16.600 --> 00:03:17.580
Let me look at this other thing.

00:03:17.580 --> 00:03:18.860
Yeah, like, it's good for us.

00:03:18.860 --> 00:03:20.200
And other people can use it too, right?

00:03:20.400 --> 00:03:23.800
Yeah, I mean, we have over 100 episodes, six topics.

00:03:23.800 --> 00:03:25.600
We've covered over 600 things.

00:03:25.600 --> 00:03:27.220
So, yeah, it's hard to keep track.

00:03:27.220 --> 00:03:27.860
Sometimes multiple.

00:03:27.860 --> 00:03:29.160
Yeah, there's a ton of stuff in there.

00:03:29.160 --> 00:03:31.800
And it's good to go back and find the links and comments we put.

00:03:31.800 --> 00:03:34.820
So chapters, hopefully people enjoy them.

00:03:34.820 --> 00:03:37.940
Be sure to take advantage of them in your podcast player, especially for reference.

00:03:37.940 --> 00:03:40.400
And the other one is we have friends.

00:03:40.400 --> 00:03:41.620
It's great deaf friends, isn't it?

00:03:41.620 --> 00:03:43.020
Yes, friends of the show.

00:03:43.020 --> 00:03:46.440
We have friends of the show in the sense of people who send us stuff.

00:03:46.440 --> 00:03:47.460
And we love that.

00:03:47.460 --> 00:03:50.680
We also have the ability to send out notifications for everyone that cares.

00:03:50.680 --> 00:03:56.220
So if you visit pythonbytes.fm/friends dash of dash the dash show,

00:03:56.220 --> 00:03:58.740
or just pythonbytes.fm and click on it in the banner,

00:03:58.740 --> 00:04:01.780
then put in your email address and you'll get notifications.

00:04:01.780 --> 00:04:04.980
I'm going to try to start sending out more interesting stuff more frequently.

00:04:04.980 --> 00:04:06.100
You can check that out.

00:04:06.100 --> 00:04:09.100
But if you're not signed up there, you probably won't get it.

00:04:09.100 --> 00:04:10.400
So be sure to do that.

00:04:10.400 --> 00:04:13.640
You can even open up, say, Overcast, go to the show notes, click the title,

00:04:13.640 --> 00:04:16.720
and even become a friend of the show right from your podcast player.

00:04:16.900 --> 00:04:18.940
I think that's probably the most appropriate way to do it.

00:04:18.940 --> 00:04:22.820
So are we going to collect all these email addresses and then sell them to some list?

00:04:22.820 --> 00:04:24.940
Yeah, I think we're going to be so rich.

00:04:24.940 --> 00:04:26.740
We could probably sell them for two cents an email.

00:04:26.740 --> 00:04:29.380
No, we're not going to share those, of course.

00:04:29.380 --> 00:04:30.380
No, we hate spam.

00:04:30.380 --> 00:04:31.600
We won't do that either, of course.

00:04:31.600 --> 00:04:32.060
All right.

00:04:32.060 --> 00:04:34.360
Now it's time for the Wile E. Coyote.

00:04:34.360 --> 00:04:35.960
Yes, the Wile E. Coyote.

00:04:35.960 --> 00:04:37.580
And more friends.

00:04:37.580 --> 00:04:37.980
Right.

00:04:37.980 --> 00:04:42.140
So Anthony Shaw, we've talked about it.

00:04:42.140 --> 00:04:42.940
He's been on the show.

00:04:42.940 --> 00:04:45.560
He's been on both of our podcasts also.

00:04:45.560 --> 00:04:52.960
And he joked recently that he's going to, at PyCon 2019, he might put friend of the show

00:04:52.960 --> 00:04:55.220
as his name on his badge.

00:04:55.220 --> 00:04:56.360
Nice.

00:04:56.360 --> 00:05:01.600
So then one of the things that Ant or friend of the show or Anthony has been working on

00:05:01.600 --> 00:05:03.100
is a project called Wile E.

00:05:03.100 --> 00:05:09.520
And it is a Python application for tracking, reporting on timing, and complexity of the tests

00:05:09.520 --> 00:05:10.480
of your application.

00:05:10.480 --> 00:05:17.720
So it's sort of like we have some complexity checks for your application or for your module,

00:05:17.720 --> 00:05:20.160
but this is a complexity of your tests.

00:05:20.160 --> 00:05:21.980
And it's kind of an interesting project.

00:05:21.980 --> 00:05:25.320
But I'm not going to actually talk about the testing part of it.

00:05:25.320 --> 00:05:30.080
Why I brought it up is he's done something that I'm not going to say he's the first,

00:05:30.080 --> 00:05:32.180
because it's possible that somebody else has done.

00:05:32.180 --> 00:05:33.760
But it's the first that I've heard of.

00:05:33.760 --> 00:05:38.880
Somebody that's done this new pyproject.toml style packaging.

00:05:39.360 --> 00:05:41.160
So there's no setup.py.

00:05:41.160 --> 00:05:43.180
It is pip installable.

00:05:43.180 --> 00:05:46.460
And there's a lot of extra goodies that you can do with that.

00:05:46.460 --> 00:05:51.600
And he's figured out all of the weird things that you have to figure out to make this all

00:05:51.600 --> 00:05:51.960
work.

00:05:51.960 --> 00:05:55.140
So he's got like hooked up to read the docs.

00:05:55.140 --> 00:05:56.780
So the read the docs is generated.

00:05:56.780 --> 00:06:01.820
It's a restructured text-based documentation that gets pushed to read the docs.

00:06:01.820 --> 00:06:05.540
He's got it working on the talks is set up.

00:06:05.540 --> 00:06:07.520
So there's talks configuration in there.

00:06:07.520 --> 00:06:10.260
There's a black configuration within the project.

00:06:10.260 --> 00:06:12.540
There's all the things you'd expect.

00:06:12.540 --> 00:06:15.240
Plus, he's got pre-commit hooks set up.

00:06:15.240 --> 00:06:19.220
And this isn't really part of the pyproject part.

00:06:19.220 --> 00:06:22.280
But there is a pre-commit hook for an example.

00:06:22.280 --> 00:06:24.720
And also, how to use...

00:06:24.720 --> 00:06:30.160
If you're writing a tool that you want somebody else to be able to do pre-commit with, there's

00:06:30.160 --> 00:06:31.240
an example hook there.

00:06:31.240 --> 00:06:33.860
It's kind of a lot of goodies and it's not very much code.

00:06:33.860 --> 00:06:35.240
So I like it as an example.

00:06:35.240 --> 00:06:35.560
Yeah.

00:06:35.560 --> 00:06:36.640
Nice work, Anthony.

00:06:36.640 --> 00:06:37.960
That's really cool.

00:06:37.960 --> 00:06:39.920
I like the use of PyProject.

00:06:39.920 --> 00:06:41.500
Do you know if he's using poetry?

00:06:41.500 --> 00:06:42.720
He's using Flit.

00:06:42.720 --> 00:06:43.180
Flit.

00:06:43.180 --> 00:06:43.720
Okay.

00:06:44.060 --> 00:06:44.240
Right.

00:06:44.240 --> 00:06:50.880
So Flit is another one of the ones like poetry or pipfemf, but one of the ones that understands

00:06:50.880 --> 00:06:51.960
pyproject.toml.

00:06:51.960 --> 00:06:56.920
And if you're curious to learn more about pyproject.toml, we talked about it in Python Bytes 100.

00:06:56.920 --> 00:07:01.300
And then I also talked about it with Brett Cannon on testing code 52.

00:07:01.300 --> 00:07:01.700
Nice.

00:07:01.700 --> 00:07:01.960
Yeah.

00:07:01.960 --> 00:07:02.820
That's a really good example.

00:07:02.820 --> 00:07:05.840
Leave it to Anthony to be on the cutting edge of packaging.

00:07:05.840 --> 00:07:11.620
The other thing, it's a small package, but one of the things I like is his contributing

00:07:11.620 --> 00:07:14.720
guide includes the code of conduct right in there.

00:07:14.720 --> 00:07:18.760
And I think that's, instead of having it as a separate file, I like the idea of having it

00:07:18.760 --> 00:07:20.280
in this contributing guide.

00:07:20.280 --> 00:07:20.640
Yeah.

00:07:20.640 --> 00:07:25.500
I think the contributing guide should just link to Brett Cannon's presentation about open

00:07:25.500 --> 00:07:26.360
source expectations.

00:07:26.360 --> 00:07:27.340
Yeah.

00:07:27.340 --> 00:07:28.780
Anyway, don't be a jerk.

00:07:28.780 --> 00:07:29.960
Yeah.

00:07:29.960 --> 00:07:31.880
You're giving me a puppy with this PR.

00:07:31.880 --> 00:07:32.660
Just understand.

00:07:32.660 --> 00:07:33.460
Thank you.

00:07:33.460 --> 00:07:35.040
Thank you for the puppy.

00:07:35.040 --> 00:07:37.800
I think I will link to that in certain projects.

00:07:37.800 --> 00:07:41.080
Because I've got like, you know, like four contributors on my project.

00:07:41.080 --> 00:07:42.780
So, wow, it's just exploding.

00:07:42.780 --> 00:07:44.280
That's actually pretty good.

00:07:44.280 --> 00:07:48.960
I think the step from zero to one is bigger than from like one to 10.

00:07:48.960 --> 00:07:49.360
Maybe.

00:07:49.360 --> 00:07:51.320
For most projects to get anybody to care, right?

00:07:51.320 --> 00:07:51.640
Yeah.

00:07:51.640 --> 00:07:55.180
Well, and I'm having trouble getting myself to do more work on it.

00:07:55.180 --> 00:07:55.440
Yeah.

00:07:55.440 --> 00:07:56.560
That's a different problem.

00:07:56.560 --> 00:07:59.280
So, speaking of different problems.

00:07:59.280 --> 00:07:59.680
Yes.

00:07:59.680 --> 00:08:01.780
So, let's talk about data science for a minute.

00:08:01.780 --> 00:08:05.960
The Visual Studio Code folks are building some really interesting tools.

00:08:05.960 --> 00:08:10.340
And there's some quite unique things coming from it.

00:08:10.340 --> 00:08:13.040
So, you know, I'm a big fan of PyCharm.

00:08:13.040 --> 00:08:17.860
But if I'm not using PyCharm, VS Code is the thing that I would pick up and use.

00:08:17.860 --> 00:08:18.340
Right?

00:08:18.340 --> 00:08:21.440
So, it's like if I have something really small, I'll probably open it up with VS Code.

00:08:21.440 --> 00:08:23.580
Like real projects probably stick to PyCharm.

00:08:23.960 --> 00:08:25.840
But VS Code is definitely coming along.

00:08:25.840 --> 00:08:30.060
I'm sure Brett can't love that.

00:08:30.060 --> 00:08:30.900
For real projects.

00:08:30.900 --> 00:08:31.560
I know.

00:08:31.560 --> 00:08:37.000
I think it's more that PyCharm is more focused on working with lots of files and project stuff.

00:08:37.000 --> 00:08:40.820
And it doesn't make a lot of sense, as much sense to just opening up for like one file.

00:08:40.820 --> 00:08:42.880
It sort of can, but not as much.

00:08:42.880 --> 00:08:43.540
Yeah.

00:08:43.640 --> 00:08:46.180
So, VS Code is definitely coming along.

00:08:46.180 --> 00:08:50.600
And one of the things it hasn't had a lot of is support for some of the data science tools.

00:08:50.600 --> 00:08:59.760
But now, with the latest release, they just announced a really unique way of doing Jupyter Notebook type of support.

00:08:59.760 --> 00:09:00.360
Oh, wow.

00:09:00.360 --> 00:09:00.600
Right.

00:09:00.600 --> 00:09:03.980
So, normally, Jupyter Notebook is like you go and you open up the notebook.

00:09:03.980 --> 00:09:05.160
And you've got these cells.

00:09:05.160 --> 00:09:06.260
And you type in the cells.

00:09:06.260 --> 00:09:07.240
And you run the cells.

00:09:07.640 --> 00:09:12.520
And there's like these IPNB files, whatever the extension is.

00:09:12.520 --> 00:09:14.420
They're not really Python files.

00:09:14.420 --> 00:09:18.460
They're like XML or something weird in there that has like embedded Python that can run.

00:09:18.460 --> 00:09:18.720
Right.

00:09:18.720 --> 00:09:23.580
So, this leads to all sorts of funky things like profiling it or testing it.

00:09:23.580 --> 00:09:25.220
All those can be somewhat challenging.

00:09:25.220 --> 00:09:25.700
Right.

00:09:25.700 --> 00:09:28.060
Because you've got to get into the notebook and whatnot.

00:09:28.060 --> 00:09:28.900
Yeah.

00:09:28.900 --> 00:09:37.400
So, VS Code has taken like a pretty unique approach where what they'll do is they will turn their editor into like a notebook-like surface.

00:09:37.840 --> 00:09:40.740
But it's actually still a single Python file.

00:09:40.740 --> 00:09:42.600
And you just put, what's the syntax?

00:09:42.600 --> 00:09:44.820
You put hash percent percent.

00:09:44.820 --> 00:09:47.720
And that line defines a cell in the file.

00:09:47.720 --> 00:09:48.180
Mm.

00:09:48.180 --> 00:09:49.740
And you get separate output from them.

00:09:49.740 --> 00:09:49.840
Okay.

00:09:49.840 --> 00:09:55.140
You get separate graphs and all sorts of stuff that you would have in like a side window out of the Jupyter Notebooks.

00:09:55.140 --> 00:09:59.360
But you have a single Python file that you still treat as a single Python file.

00:09:59.360 --> 00:09:59.840
Okay.

00:09:59.840 --> 00:10:02.940
Does it generate a notebook file?

00:10:02.940 --> 00:10:04.560
I don't know if it generates it.

00:10:04.560 --> 00:10:05.580
It will import them.

00:10:05.680 --> 00:10:11.180
So, you could tell it to open a proper notebook and it'll convert it to this format that I just described.

00:10:11.180 --> 00:10:11.600
Okay.

00:10:11.600 --> 00:10:12.080
Neat.

00:10:12.080 --> 00:10:12.280
Yeah.

00:10:12.280 --> 00:10:20.140
So, if you're doing any sort of thing with notebooks, this is a really nice way to kind of work in a full-on text editor style.

00:10:20.740 --> 00:10:24.180
But still get all the benefits or most of the benefits, at least, of Jupyter.

00:10:24.180 --> 00:10:24.660
Yeah.

00:10:24.660 --> 00:10:27.400
I do like that they're continuing.

00:10:27.400 --> 00:10:30.680
I know that there's a lot of work on VS Code making it.

00:10:30.680 --> 00:10:34.000
They're trying to make it even better and better all the time.

00:10:34.000 --> 00:10:34.920
That's a good thing.

00:10:34.920 --> 00:10:35.180
Yeah.

00:10:35.200 --> 00:10:39.740
I guess some of the other things to throw out there that I added, now it has better support for virtual environments.

00:10:39.740 --> 00:10:44.760
So, you can like create a virtual environment in your project level directory and it'll detect it.

00:10:44.760 --> 00:10:45.560
Things like that.

00:10:45.560 --> 00:10:47.860
So, there's a few other nice things.

00:10:47.860 --> 00:10:49.020
Better completion, whatnot.

00:10:49.020 --> 00:10:53.460
But the big deal is really the Jupyter, pseudo-Jupyter support.

00:10:53.460 --> 00:10:53.840
Yeah.

00:10:53.840 --> 00:10:54.180
Cool.

00:10:54.300 --> 00:10:54.420
Yeah.

00:10:54.420 --> 00:10:54.800
It's pretty cool.

00:10:54.800 --> 00:10:58.340
I don't do that much with Jupyter, but if I did, I would definitely consider this.

00:10:58.340 --> 00:11:01.420
I don't know if you would say it's the right way, but it's definitely a good way.

00:11:01.420 --> 00:11:01.760
Yeah.

00:11:01.760 --> 00:11:05.160
I don't play Doctor on TV, but never mind.

00:11:05.160 --> 00:11:06.100
All right.

00:11:06.100 --> 00:11:07.120
So, speaking of the right way.

00:11:07.120 --> 00:11:09.260
Speaking of the right way.

00:11:09.260 --> 00:11:14.540
So, a lot of people have projects they're supporting or thinking about maybe not a lot of people.

00:11:14.540 --> 00:11:16.140
There are a lot of open source projects.

00:11:16.140 --> 00:11:24.020
One of the things that we've talked about is if you have users, they might get upset if you change things.

00:11:24.560 --> 00:11:25.820
And change is inevitable.

00:11:25.820 --> 00:11:26.920
Don't fear change.

00:11:26.920 --> 00:11:27.780
Send it to me.

00:11:27.780 --> 00:11:31.940
But one of the things you've got to think about is your API.

00:11:31.940 --> 00:11:34.060
And APIs evolve.

00:11:34.060 --> 00:11:37.960
And so, there's an article called API Evolution the Right Way.

00:11:37.960 --> 00:11:41.320
And this is written by A. Jesse Giroux Davis.

00:11:41.320 --> 00:11:43.800
And he is an excellent writer.

00:11:43.800 --> 00:11:49.680
I mean, even if you don't care about this topic, he puts really cool graphics in his articles.

00:11:49.680 --> 00:11:51.380
And also, he's just a good writer.

00:11:51.380 --> 00:11:52.480
He's a super storyteller.

00:11:52.660 --> 00:11:55.580
And this one is, no doubt, part of that.

00:11:55.580 --> 00:11:57.140
So, check it out for that alone, right?

00:11:57.140 --> 00:11:57.500
Yeah.

00:11:57.500 --> 00:12:01.640
And, like, it's, okay, the first line is, imagine you're a creator deity.

00:12:01.640 --> 00:12:03.560
I mean, that's just good.

00:12:03.560 --> 00:12:09.880
So, he does it in an analogy of, you know, a snake gaining wings and things like that.

00:12:09.880 --> 00:12:16.100
But, anyway, he talks about how to go about adding features, removing features, deleting features.

00:12:16.100 --> 00:12:18.000
That's something you sometimes have to do.

00:12:18.560 --> 00:12:26.360
And he also, and adding and removing, like, you probably wouldn't remove parameters from an API call.

00:12:26.360 --> 00:12:27.580
But you might add some.

00:12:27.580 --> 00:12:29.080
How to go about doing that.

00:12:29.080 --> 00:12:30.020
Changing behavior.

00:12:30.020 --> 00:12:33.780
Sometimes things just aren't working the way they should.

00:12:33.780 --> 00:12:35.660
And they should work different ways.

00:12:36.040 --> 00:12:42.840
And he also gives some examples and some examples of things that, even in the Python standard library, that changed.

00:12:42.840 --> 00:12:45.520
Because the way it used to work just was weird.

00:12:45.520 --> 00:12:49.960
One of his examples was that you could date times.

00:12:49.960 --> 00:12:56.580
So, if you did datetime.time with the parameters 0-0.

00:12:56.580 --> 00:12:59.620
So, that's an odd time.

00:12:59.620 --> 00:13:00.640
But it does happen.

00:13:00.640 --> 00:13:08.420
And it happens if you have it in a loop and are checking to see if the time is not null or something.

00:13:08.420 --> 00:13:11.100
But you just said if x or if time.

00:13:11.760 --> 00:13:15.720
That'll return true sometimes if it's 0-0.

00:13:15.720 --> 00:13:20.860
So, that's converting bools to time or time to bools.

00:13:20.860 --> 00:13:23.060
A valid time should return true.

00:13:23.060 --> 00:13:24.820
But it used to return false.

00:13:24.820 --> 00:13:27.980
And that was in pre, yeah, 3.4 and before.

00:13:27.980 --> 00:13:28.760
Oh, my gosh.

00:13:28.760 --> 00:13:29.620
It returned false.

00:13:29.620 --> 00:13:30.740
And that's just weird.

00:13:30.740 --> 00:13:36.500
You know, sometimes there's just behaviors in your code that you didn't intend that you need to change.

00:13:36.500 --> 00:13:41.440
And how to go about doing that in a nice way if you've got users in a public API.

00:13:41.440 --> 00:13:42.720
So, it's a good article.

00:13:42.720 --> 00:13:44.520
Yeah, he's got some good advice for sure.

00:13:44.520 --> 00:13:47.540
One of them includes not putting feathers on snakes.

00:13:47.540 --> 00:13:50.160
Another one is like evolve cautiously.

00:13:50.160 --> 00:13:53.040
You know, avoid bad features if you knew, right?

00:13:53.040 --> 00:13:56.100
Minimize features less to maintain.

00:13:56.100 --> 00:13:57.220
Keep features narrow.

00:13:57.220 --> 00:13:59.720
Mark experimental features as provisional.

00:13:59.720 --> 00:14:02.360
Delete gently and stuff like that.

00:14:02.360 --> 00:14:04.720
Yeah, provisional features actually are interesting.

00:14:05.380 --> 00:14:07.520
But they're still tricky.

00:14:07.520 --> 00:14:15.440
Like, for instance, pytest introduced an experiment on how to deal with fixtures at one point.

00:14:15.440 --> 00:14:19.820
And they're still, I guess, just recently deprecated them.

00:14:19.820 --> 00:14:22.300
Or they've been deprecated for a while.

00:14:22.300 --> 00:14:27.100
But it took a while to, it's hard to remove stuff because people might be using it.

00:14:27.100 --> 00:14:28.040
Yeah, yeah, definitely.

00:14:28.040 --> 00:14:31.680
Even if you say provisional, someone's going to be like, wait, why did that leave?

00:14:31.680 --> 00:14:32.300
I needed that.

00:14:32.300 --> 00:14:32.700
Yeah.

00:14:32.700 --> 00:14:35.180
It was a test.

00:14:35.620 --> 00:14:35.960
I don't know.

00:14:35.960 --> 00:14:36.960
Maybe separate branches.

00:14:36.960 --> 00:14:38.220
Maybe.

00:14:38.220 --> 00:14:38.760
I don't know.

00:14:38.760 --> 00:14:43.580
It's hard to know what to do to really push that out and let people test it, but then actually take it away.

00:14:43.580 --> 00:14:43.880
Yeah.

00:14:43.880 --> 00:14:44.220
Yeah.

00:14:44.220 --> 00:14:45.000
That's a tough one.

00:14:45.000 --> 00:14:46.020
Thanks for that advice.

00:14:46.020 --> 00:14:46.620
Yeah, yeah.

00:14:46.620 --> 00:14:48.540
Jesse, that's a great article.

00:14:48.740 --> 00:14:50.040
I really love it.

00:14:50.040 --> 00:14:52.380
The way all the pictures and the storytelling.

00:14:52.380 --> 00:14:54.140
And he's a great writer.

00:14:54.140 --> 00:14:54.760
Nicely done.

00:14:54.760 --> 00:14:59.800
Now, before we get back on one of our kicks, because it has returned.

00:15:00.020 --> 00:15:01.920
So I want to tell you all about DigitalOcean.

00:15:01.920 --> 00:15:05.740
So DigitalOcean, super big supporter of the show.

00:15:05.740 --> 00:15:08.880
They're sponsoring every episode for the second half of this year.

00:15:08.880 --> 00:15:10.260
So thank you to them for that.

00:15:10.800 --> 00:15:13.560
And we've talked about you're not Netflix.

00:15:13.560 --> 00:15:14.740
You're not LinkedIn.

00:15:14.740 --> 00:15:15.660
You're not Facebook.

00:15:15.660 --> 00:15:28.700
I just interviewed some guy from, a guy Colton from Adobe, talking about managing the security of 40,000 servers for some of their back-end stuff and how they do that.

00:15:28.700 --> 00:15:30.540
Some people have those problems.

00:15:30.540 --> 00:15:30.860
Yeah.

00:15:30.860 --> 00:15:33.460
And the systems that manage that get pretty complicated.

00:15:33.460 --> 00:15:39.340
But most people don't have that problem, and they shouldn't have to deal with systems that are way complicated to handle that kind of stuff, right?

00:15:39.340 --> 00:15:44.000
Most people want to spin up a server, have a database server, maybe a firewall, a static IP.

00:15:44.000 --> 00:15:48.320
And if that's the kind of thing you want, you can do quick, easy, affordable, reliable.

00:15:48.320 --> 00:15:49.580
Go check out DigitalOcean.

00:15:49.580 --> 00:15:51.280
So we use them.

00:15:51.280 --> 00:15:54.560
WeWork, Docker, GitLab, Slack, all those folks use them.

00:15:54.560 --> 00:15:57.100
And it's way, way cheaper, way, way simpler.

00:15:57.100 --> 00:15:58.660
You can get started right away.

00:15:58.660 --> 00:16:01.180
So check them out at pythonbytes.fm/DigitalOcean.

00:16:01.180 --> 00:16:03.760
Get $100 to play around and get started.

00:16:03.760 --> 00:16:06.760
And definitely recommend them working out well for us.

00:16:06.760 --> 00:16:07.960
Probably will for you as well.

00:16:07.960 --> 00:16:08.340
Yeah.

00:16:08.340 --> 00:16:08.820
Thanks.

00:16:08.820 --> 00:16:09.120
Yep.

00:16:09.120 --> 00:16:09.960
Thanks, DigitalOcean.

00:16:09.960 --> 00:16:11.180
Now, I'm trying to remember.

00:16:11.180 --> 00:16:12.180
Have we spoken about GUIs?

00:16:12.180 --> 00:16:13.020
I don't think we have.

00:16:13.020 --> 00:16:13.900
No, let's talk.

00:16:13.900 --> 00:16:15.320
We should totally do that.

00:16:15.320 --> 00:16:16.260
Let's talk about them.

00:16:16.260 --> 00:16:18.060
So actually, this is the thing.

00:16:18.060 --> 00:16:22.780
This is a, we talk about GUIs so much, this item is back on Python Bytes.

00:16:22.780 --> 00:16:27.180
Like it is previously on episode 90, we spoke about this thing called PySimpleGUI.

00:16:27.580 --> 00:16:43.920
And PySimpleGUI, GUI is, I would put it in the category of this other thing called GUI, G-O-O-E-Y, which is, these are like really simple ways to build kind of standard, not overly customized UIs.

00:16:43.980 --> 00:16:46.280
I just like quickly want to get like a UI up.

00:16:46.280 --> 00:16:48.620
Like I can get some input, show some stuff to the user.

00:16:48.620 --> 00:16:56.900
This one is more advanced than GUI, but still it's kind of meant to be, I want to get up something quick and not like massively complicated, right?

00:16:56.980 --> 00:17:02.680
Like you wouldn't build like a full on web browser in here, but you might build like a little utility that you all use.

00:17:02.680 --> 00:17:08.860
So the idea is you sort of declare the types of controls that go on your layout and then it pops up.

00:17:09.160 --> 00:17:20.580
Now, one of my complaints back when we were on this kick in episode 90 was this is based on TK Enter and it looks like it's straight out of 1990, which was amazing because I love history.

00:17:20.580 --> 00:17:23.380
But I don't want my modern apps to look that way, right?

00:17:23.380 --> 00:17:25.200
And I mean, that's not a...

00:17:25.200 --> 00:17:26.980
It's great music, bad user interfaces.

00:17:26.980 --> 00:17:27.540
Exactly.

00:17:27.540 --> 00:17:30.740
I mean, come on, Black, Pearl Jam, we even have a package named after.

00:17:30.740 --> 00:17:38.880
Anyway, so the idea is you can simply create these GUIs, but the drawback was it was built on TK Enter.

00:17:39.280 --> 00:17:39.480
Right?

00:17:39.480 --> 00:17:43.440
Which you can build nice stuff, but it just looks a little out of place.

00:17:43.440 --> 00:17:48.620
I think maybe based on our feedback, certainly on other people's feedback, Mike decided, you know what?

00:17:48.620 --> 00:17:51.680
Let's try to create this for Qt because Qt looks modern.

00:17:51.680 --> 00:17:53.020
Qt looks nice, right?

00:17:53.020 --> 00:17:55.580
Like Qt is definitely a good looking framework.

00:17:55.580 --> 00:17:59.300
Like if you build an app in there, you might not know that it's not native.

00:17:59.300 --> 00:18:01.480
It's not built with Xcode, right?

00:18:01.480 --> 00:18:03.480
And Coco, something like that on Mac.

00:18:03.480 --> 00:18:05.840
So he took a shot at it.

00:18:06.000 --> 00:18:09.220
And in one week, he fully created a Qt version.

00:18:09.220 --> 00:18:15.920
So now you have TK Enter if you want no dependencies, and you have a Qt version if you want it to not look like, you know, Pearl Jam loved it.

00:18:15.920 --> 00:18:19.620
It really does look nice.

00:18:19.720 --> 00:18:21.720
So I'm excited about this, actually.

00:18:21.720 --> 00:18:22.460
Yeah.

00:18:22.460 --> 00:18:22.660
Yeah.

00:18:22.660 --> 00:18:24.520
The new one is looking quite good.

00:18:24.520 --> 00:18:26.040
So it's sort of a declarative little builder.

00:18:26.040 --> 00:18:30.460
All you got to do is pip install PySide 2, and it has no dependencies.

00:18:30.460 --> 00:18:31.780
It's a single Python file.

00:18:31.780 --> 00:18:34.420
It only works on modern Python as well.

00:18:34.420 --> 00:18:36.140
But he's sort of inspired by this.

00:18:36.140 --> 00:18:39.760
He's also working towards a WX Python and a Kivy.

00:18:39.920 --> 00:18:43.880
And if he gets Kivy going, that would be pretty sweet because that would be mobile.

00:18:43.880 --> 00:18:44.400
Yeah.

00:18:44.400 --> 00:18:44.720
Right.

00:18:44.720 --> 00:18:46.620
So, so far, everything has been desktop.

00:18:46.620 --> 00:18:50.720
But if he can get Kivy going, Kivy's a mobile Python framework, and that would be pretty killer.

00:18:50.720 --> 00:18:55.360
Well, and also, it'd be kind of a cool thing to try to do something.

00:18:55.360 --> 00:19:02.520
Like, if you had similar code and ran it, generated all these different versions, and then you can kind of look to see which one you like better.

00:19:02.640 --> 00:19:03.400
Yeah, exactly.

00:19:03.400 --> 00:19:09.280
And the, I should point out, the API is identical from TKenter and Qt, right?

00:19:09.280 --> 00:19:09.500
Yeah.

00:19:09.500 --> 00:19:11.240
So you just, you just do a different import statement.

00:19:11.240 --> 00:19:14.240
You import the Qt one instead of the standard one.

00:19:14.240 --> 00:19:17.260
And as long as you have the dependencies in place, like, the API doesn't change.

00:19:17.260 --> 00:19:18.900
So you could, I mean, even do that at runtime.

00:19:18.900 --> 00:19:21.420
Like, see if they have Qt installed.

00:19:21.420 --> 00:19:24.580
If they don't fall back to TKenter and apologize a little bit.

00:19:24.580 --> 00:19:26.420
Sorry.

00:19:26.420 --> 00:19:29.180
But if you want this to look better, you got to go run this line.

00:19:29.640 --> 00:19:40.880
No, you should go do something like check out the Fman build system, which will let you then take this thing, package it up as a installer for a binary, standalone binary for the various OSs, and then you'll be in business.

00:19:40.880 --> 00:19:42.020
And you can make millions.

00:19:42.020 --> 00:19:44.340
Millions and millions of cents.

00:19:44.340 --> 00:19:45.300
Yes.

00:19:45.300 --> 00:19:45.420
Okay.

00:19:45.420 --> 00:19:46.400
Okay.

00:19:46.400 --> 00:19:47.640
All right.

00:19:47.640 --> 00:19:56.180
So nothing major, but just sort of an update on that one, because I think the featuring, the ability to use Qt here is actually a really, really big deal.

00:19:56.740 --> 00:20:07.840
One of the other major things happening right now is a lot of the core development around Python is kind of put on hold because nobody knows who to ask on how something gets approved, who approves it, or anything.

00:20:07.840 --> 00:20:09.080
Tell us more about this.

00:20:09.180 --> 00:20:12.380
People at the heart of Python are the core developers.

00:20:12.380 --> 00:20:14.260
They're trying to figure out all this stuff.

00:20:14.260 --> 00:20:27.560
And since Guido has stepped down as official benevolent dictator for life, I'm not sure how that works, but the governance model around Python is changing.

00:20:27.560 --> 00:20:31.140
I think it used to be go ask Guido for final word, and that was that.

00:20:31.140 --> 00:20:31.840
Yeah.

00:20:31.840 --> 00:20:35.200
I think it may have been a little more structured than that.

00:20:35.200 --> 00:20:36.820
I'm summarizing.

00:20:36.960 --> 00:20:37.620
I'm summarizing.

00:20:37.620 --> 00:20:41.380
How do we go forward is a topic.

00:20:41.380 --> 00:20:47.460
And Victor Stinner, who is one of the core developers also, I met him last year at PyCon, great guy.

00:20:48.060 --> 00:20:53.480
He came up with this summary of there's a whole bunch of competing governance models.

00:20:53.480 --> 00:21:00.260
And they are summarized at actually what there's one PEP called PEP 8000 that summarizes all of them.

00:21:00.260 --> 00:21:02.580
But they don't it doesn't really compare them.

00:21:02.580 --> 00:21:04.480
It's just a quick summary of the different ones.

00:21:04.480 --> 00:21:08.580
But there's a they're numbered 10 through 16.

00:21:08.580 --> 00:21:09.360
Why is that?

00:21:09.360 --> 00:21:11.420
There's zero one, two.

00:21:11.620 --> 00:21:13.480
I think there's seven different models.

00:21:13.480 --> 00:21:19.240
Of course, Victor has put together a comparison of the different ones and how in different ways.

00:21:19.240 --> 00:21:30.940
So, for instance, comparing them, what their hierarchy is like, how many people are involved, what the terminal limits look like, what's the PEP process going to be like and whether they include code of conduct and stuff.

00:21:31.280 --> 00:21:34.520
And my guess is none of these are going to win just wholeheartedly.

00:21:34.520 --> 00:21:40.280
There's probably going to be pieces of the different PEPs that get combined into whatever we end up with.

00:21:40.280 --> 00:21:47.100
But if you're curious about what the core developers are up to for your future, you can look at some of this stuff.

00:21:47.100 --> 00:21:48.380
Yeah, this is really interesting.

00:21:48.380 --> 00:21:50.520
And it's a bit of a catch 22, right?

00:21:50.520 --> 00:21:53.140
Like, who even decides on the governance model?

00:21:55.280 --> 00:21:55.960
Well, right.

00:21:55.960 --> 00:22:02.440
Because Guido explicitly said when he stepped back to just standard core developer was, and I'm not going to decide for you.

00:22:02.440 --> 00:22:04.140
You all have to decide for yourselves.

00:22:04.140 --> 00:22:06.740
I guess maybe vote by a core developer team.

00:22:06.740 --> 00:22:07.160
I don't know.

00:22:07.160 --> 00:22:07.620
Yeah.

00:22:07.620 --> 00:22:08.980
So, there's only seven.

00:22:08.980 --> 00:22:13.240
So, like, for instance, the first one is we just pick another leader.

00:22:13.240 --> 00:22:18.520
So, it's something kind of like we have now, but it's a different person, a technical leader governance model.

00:22:18.520 --> 00:22:21.160
There's one that's led by a trio.

00:22:21.160 --> 00:22:25.380
So, kind of like that, kind of like Guido, but three other people kind of share that.

00:22:25.380 --> 00:22:30.800
You know, when we talked to Brett Cannon and Carol Willing back on, what was that episode?

00:22:30.800 --> 00:22:32.500
Around 90-ish.

00:22:32.500 --> 00:22:32.940
I'm not sure.

00:22:32.940 --> 00:22:33.640
Do you remember?

00:22:33.640 --> 00:22:34.680
Wasn't it 100?

00:22:34.680 --> 00:22:35.720
No, that was a different one.

00:22:35.720 --> 00:22:36.160
Oh, okay.

00:22:36.160 --> 00:22:38.860
We did a special dedicated one on this whole topic.

00:22:38.860 --> 00:22:40.660
I just don't remember exactly what the number was.

00:22:40.660 --> 00:22:41.520
The number was.

00:22:41.520 --> 00:22:50.680
But anyway, I thought it was really interesting that I thought, of course, there's going to have to be an odd number of leaders because you're going to need a tiebreaker, right?

00:22:51.160 --> 00:22:51.320
Yeah.

00:22:51.320 --> 00:22:56.940
And Brett pointed out that some people are saying, you know, actually, it may be better to have an even number.

00:22:56.940 --> 00:22:58.860
So, ties mean do nothing.

00:22:58.860 --> 00:23:10.140
And you have to have a majority, like a clear majority to make any changes, which actually, I think, so maybe, like, led by four or six or something like that actually is an interesting option.

00:23:10.140 --> 00:23:10.420
Yeah.

00:23:10.420 --> 00:23:18.900
But I think it's kind of cool that this is all happening in the open and people can comment on the different proposals and they can also comment on this summary.

00:23:18.900 --> 00:23:19.200
Yeah.

00:23:19.200 --> 00:23:21.340
They definitely can, right, at the bottom of the show page.

00:23:21.340 --> 00:23:21.640
Yeah.

00:23:21.640 --> 00:23:22.000
Nice.

00:23:22.000 --> 00:23:22.300
All right.

00:23:22.300 --> 00:23:23.380
Well, thanks for featuring that.

00:23:23.380 --> 00:23:24.420
It's going to be interesting.

00:23:24.420 --> 00:23:29.620
And I would guess we hear by the time PyCon happens what the decision is.

00:23:29.780 --> 00:23:38.660
I doubt they can go that long, more than, you know, close to a year without having any form of leading person or group.

00:23:38.660 --> 00:23:43.940
One of the options that's not on the table is we can just say we're done and not develop Python anymore.

00:23:43.940 --> 00:23:46.220
No, that's not an option.

00:23:46.220 --> 00:23:46.880
We can't do that.

00:23:46.880 --> 00:23:47.180
Right.

00:23:47.420 --> 00:23:48.560
It's just doing too well.

00:23:48.560 --> 00:23:52.340
But, you know, I guess it's always an implicit option if we could just stop.

00:23:52.340 --> 00:23:53.220
All right.

00:23:53.220 --> 00:23:57.740
So the last one that I want to cover, the last main topic, is this thing called Shiboken.

00:23:57.740 --> 00:24:01.100
Because it comes from GUIs and I'm back on my GUI kick.

00:24:01.100 --> 00:24:03.640
No, that's sort of true, but that's not why I care about it.

00:24:03.640 --> 00:24:16.080
So Shiboken is this subsystem that the Qt folks made to create the Qt for Python, which is basically they go to the Qt libraries, which are all C++ header files,

00:24:16.340 --> 00:24:25.780
and they want to make Python versions of that without maintaining a separate library that is, you know, here's the Qt one, here's the Python one, they'll get out of sync and whatnot.

00:24:25.780 --> 00:24:33.020
So they created this thing called Shiboken, and the idea is you can run Shiboken against arbitrary C, C++ code,

00:24:33.020 --> 00:24:37.980
and it will output Python libraries that interact with that at a C level.

00:24:37.980 --> 00:24:38.760
That's cool.

00:24:38.760 --> 00:24:39.040
Right.

00:24:39.040 --> 00:24:43.560
So if you have any C code you want to interact with, you can just run this against it.

00:24:44.060 --> 00:24:48.740
And it has like a type system, which is an XML file type of thing that you can customize.

00:24:48.740 --> 00:24:55.980
So if you see, you know, this thing star in C, well, what that means is actually this type in Python.

00:24:55.980 --> 00:24:56.660
Right.

00:24:56.660 --> 00:24:58.760
So you can manage that a little bit.

00:24:58.760 --> 00:24:59.000
Right.

00:24:59.000 --> 00:25:03.980
Like standard string is actually, you know, str in Python, and you could tell it to do those mappings.

00:25:04.460 --> 00:25:11.320
But then you point it at these libraries, and it can, you know, extract them, you can hide functions or add functions, all sorts of stuff.

00:25:11.320 --> 00:25:12.400
So it's pretty cool.

00:25:12.400 --> 00:25:13.160
That is great.

00:25:13.160 --> 00:25:14.420
Automating the boring stuff.

00:25:14.420 --> 00:25:14.840
Exactly.

00:25:14.840 --> 00:25:16.200
Definitely automating the boring stuff.

00:25:16.740 --> 00:25:26.060
So these folks are creating and maintaining it to build PySide 2, basically, at least the wrapper part of PySide 2.

00:25:26.060 --> 00:25:29.640
But you can use it for whatever you want if you have C code.

00:25:29.640 --> 00:25:33.080
It has nothing to do with GUIs or Qt or anything like that.

00:25:33.080 --> 00:25:35.440
And there's two interesting blog posts.

00:25:35.540 --> 00:25:38.100
One is Qt for Python under the hood, which I'll link to.

00:25:38.100 --> 00:25:47.000
And that one basically shows you how this fits into their overall build system, which has Clang and C++ and CPython and all sorts of stuff.

00:25:47.000 --> 00:25:53.160
And then one that's sort of a tutorial called Write Your Own Python Bindings.

00:25:53.160 --> 00:25:56.620
And that one takes you through the process of more or less what I'm describing here.

00:25:56.620 --> 00:26:05.180
It creates some non-trivial C++ classes with public, private members using the standard library and things like that.

00:26:05.700 --> 00:26:08.000
And then it creates a Python wrapper and then uses it.

00:26:08.000 --> 00:26:08.400
It's pretty cool.

00:26:08.400 --> 00:26:08.840
Yeah.

00:26:08.840 --> 00:26:09.820
That is neat.

00:26:09.820 --> 00:26:11.560
Any idea where the name came from?

00:26:11.560 --> 00:26:11.880
No.

00:26:11.880 --> 00:26:15.080
No idea at all.

00:26:15.080 --> 00:26:18.000
There's probably a really great story where the name came from.

00:26:18.000 --> 00:26:18.260
Yeah.

00:26:18.260 --> 00:26:19.380
But I don't know where it came from.

00:26:19.380 --> 00:26:23.860
So this is one of the options if you want to do C++ stuff.

00:26:23.860 --> 00:26:27.040
But there's others as well, right?

00:26:27.040 --> 00:26:28.300
So you could use CFFI.

00:26:28.300 --> 00:26:32.980
This is sort of a more modern way to explicitly write these mappings.

00:26:33.840 --> 00:26:36.700
And Dan Bader over on dbader.org actually has a good write-up on that.

00:26:36.700 --> 00:26:37.360
So I'll link to that.

00:26:37.360 --> 00:26:46.600
Or you could use Cython, which actually is a really cool way to just directly import and start using C libraries.

00:26:46.600 --> 00:26:50.740
Just basically you define the function shape and then you import the header.

00:26:50.740 --> 00:26:52.880
You say, this function comes from this header file.

00:26:52.880 --> 00:26:53.800
Let's roll with that.

00:26:53.800 --> 00:26:55.740
And then you just start using it in Python.

00:26:55.740 --> 00:26:59.300
Of course, you've got to compile your Cython code with Cython.

00:26:59.460 --> 00:27:00.180
But it's pretty nice.

00:27:00.180 --> 00:27:03.160
And so there's a good example of doing that from scratch as well.

00:27:03.160 --> 00:27:06.140
So Shabokan, these other two, they're all quite interesting.

00:27:06.140 --> 00:27:06.920
I'll link to them all.

00:27:06.920 --> 00:27:07.420
Nice.

00:27:07.420 --> 00:27:07.700
Yeah.

00:27:07.700 --> 00:27:09.500
Well, that's it for our official items, right?

00:27:09.500 --> 00:27:10.560
You got anything else you want to share?

00:27:10.560 --> 00:27:11.260
I don't.

00:27:11.260 --> 00:27:11.880
Do you?

00:27:11.980 --> 00:27:16.300
I actually have a whole bunch of stuff that I'm very excited about, but it's very short.

00:27:16.300 --> 00:27:17.120
So let me just tell you.

00:27:17.120 --> 00:27:19.280
First of all, I bought my PyCon ticket.

00:27:19.280 --> 00:27:19.840
Woo!

00:27:19.840 --> 00:27:22.440
I still need to do that.

00:27:22.440 --> 00:27:23.040
Yeah.

00:27:23.040 --> 00:27:24.200
It's exciting.

00:27:24.200 --> 00:27:27.900
The big news is that the PyCon tickets went on sale just like three or four days ago.

00:27:28.220 --> 00:27:34.300
So I don't know if it sold out last year or not, but you don't want to be looking, you

00:27:34.300 --> 00:27:38.760
know, standing outside there by the Great Lakes in Cleveland, looking at the windows with all

00:27:38.760 --> 00:27:42.820
the people enjoying themselves and not being able to go in, get your PyCon ticket as soon

00:27:42.820 --> 00:27:44.020
as you can, because it's going to be fun.

00:27:44.020 --> 00:27:44.760
It's always fun.

00:27:44.760 --> 00:27:46.100
I'm looking forward to being there with you, Brian.

00:27:46.100 --> 00:27:46.960
Yeah.

00:27:46.960 --> 00:27:47.520
It's going to be awesome.

00:27:47.520 --> 00:27:52.520
And if you would like a closer, smaller, but still fun version, closer by definition

00:27:52.520 --> 00:27:58.060
to Brian and me, PyCascades tickets also went on sale just a couple of days ago.

00:27:58.060 --> 00:28:01.380
And this is the much smaller, like 200 person conference in Seattle.

00:28:01.380 --> 00:28:04.240
And this one will definitely sell out because it's so small.

00:28:04.240 --> 00:28:04.540
Yeah.

00:28:04.540 --> 00:28:09.420
I think they received over 200 talk submissions and they can only have 200 people.

00:28:09.420 --> 00:28:11.380
So I'm pretty sure it's going to sell out.

00:28:11.380 --> 00:28:11.680
Yeah.

00:28:11.680 --> 00:28:11.980
Yeah.

00:28:11.980 --> 00:28:13.140
So look into that.

00:28:13.140 --> 00:28:14.100
That one's cheaper, smaller.

00:28:14.100 --> 00:28:17.500
And if you're in the Northwest, closer, but maybe that doesn't describe.

00:28:17.500 --> 00:28:19.660
Many of the listeners, but yeah, it does for us.

00:28:19.660 --> 00:28:22.980
So I'm going to be going this year, but it's the first time I didn't go last year.

00:28:22.980 --> 00:28:24.800
So I'm excited to check it out.

00:28:24.800 --> 00:28:25.680
Yeah, I'm excited.

00:28:25.680 --> 00:28:26.780
This will be my second year.

00:28:26.780 --> 00:28:28.580
I'm also going and it's going to be great.

00:28:28.580 --> 00:28:29.360
Okay.

00:28:29.360 --> 00:28:30.580
So those are the conference stories.

00:28:30.580 --> 00:28:32.000
Those are the two big conferences.

00:28:32.000 --> 00:28:34.060
You know, definitely the PyCon one is a big deal.

00:28:34.060 --> 00:28:36.400
The other one is, have I talked about GUIs?

00:28:36.400 --> 00:28:36.820
No.

00:28:36.820 --> 00:28:40.260
So the other one is a book that caught my attention.

00:28:40.260 --> 00:28:44.320
Like there's tons of Python books and, you know, sometimes they're interesting sounding, but

00:28:44.320 --> 00:28:49.440
this one really seemed to have a unique, like really to draw the reader in.

00:28:49.440 --> 00:28:51.020
It was really a cool angle on it.

00:28:51.020 --> 00:28:54.760
It's called Mission Python Code a Space Adventure Game.

00:28:54.760 --> 00:29:00.340
So basically it sets up the story of this universe that you have to save and it takes you using

00:29:00.340 --> 00:29:05.700
PyGame and PyGame Zero and all sorts of stuff to create games with sounds and graphics and

00:29:05.700 --> 00:29:07.020
just walks you through building this game.

00:29:07.020 --> 00:29:10.020
And I think it looks like a super fun way to get into PyGame.

00:29:10.020 --> 00:29:12.140
That's kind of exciting to check this out too.

00:29:12.140 --> 00:29:12.600
It looks fun.

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

00:29:12.920 --> 00:29:14.860
I'm like, maybe this needs to be one of my projects.

00:29:14.860 --> 00:29:17.500
And then I remind myself, no, you're already too busy.

00:29:17.500 --> 00:29:18.760
Please don't do this to yourself.

00:29:18.760 --> 00:29:20.220
Yeah.

00:29:20.220 --> 00:29:24.740
Like somebody said that we ought to go off and learn data science together.

00:29:24.740 --> 00:29:28.000
But yeah, there's a lot going on in both of our lives.

00:29:28.000 --> 00:29:28.320
Yeah.

00:29:28.320 --> 00:29:29.020
Yeah, for sure.

00:29:29.020 --> 00:29:32.300
Much of around Python, but that bucket is getting quite full.

00:29:32.300 --> 00:29:35.740
So, but I, this is definitely one of the things that tempted me to like add one more

00:29:35.740 --> 00:29:36.360
thing to the bucket.

00:29:36.360 --> 00:29:36.980
It looks interesting.

00:29:36.980 --> 00:29:37.240
Yeah.

00:29:37.240 --> 00:29:37.580
All right.

00:29:37.580 --> 00:29:40.900
Brian, thanks for being here and sharing all this with me and everyone else.

00:29:40.900 --> 00:29:41.140
Yeah.

00:29:41.140 --> 00:29:41.520
Thank you.

00:29:41.520 --> 00:29:41.820
You bet.

00:29:41.820 --> 00:29:42.020
Bye.

00:29:42.020 --> 00:29:44.000
Thank you for listening to Python Bytes.

00:29:44.000 --> 00:29:46.540
Follow the show on Twitter via at Python Bytes.

00:29:46.540 --> 00:29:49.420
That's Python Bytes as in B-Y-T-E-S.

00:29:49.420 --> 00:29:52.860
And get the full show notes at pythonbytes.fm.

00:29:52.860 --> 00:29:57.180
If you have a news item you want featured, just visit pythonbytes.fm and send it our way.

00:29:57.180 --> 00:29:59.900
We're always on the lookout for sharing something cool.

00:29:59.900 --> 00:30:03.280
On behalf of myself and Brian Okken, this is Michael Kennedy.

00:30:03.280 --> 00:30:06.800
Thank you for listening and sharing this podcast with your friends and colleagues.

