WEBVTT

00:00:00.001 --> 00:00:09.440
Talk Python To Me, episode number six, with guest Kenneth Wright, recorded Friday, April 17th, 2015.

00:00:09.440 --> 00:00:39.020
Hello and welcome to Talk Python To Me, a weekly podcast on Python,

00:00:39.020 --> 00:00:42.600
the language, the libraries, the ecosystem, and the personalities.

00:00:42.600 --> 00:00:44.420
This is your host, Michael Kennedy.

00:00:44.420 --> 00:00:47.120
Follow me on Twitter where I'm @mkennedy,

00:00:47.120 --> 00:00:51.780
and keep up with the show and listen to past episodes at talkpythontome.com.

00:00:51.780 --> 00:00:59.700
This episode will be talking to Kenneth Wright about requests, the package, API design, PyCon, and more.

00:00:59.700 --> 00:01:02.220
Hello, Michael here.

00:01:02.220 --> 00:01:04.220
I've got a couple of news items for you.

00:01:04.220 --> 00:01:08.600
First, thank you to everyone who contacted or mentioned the show on Twitter,

00:01:08.600 --> 00:01:10.240
where we're at Talk Python.

00:01:10.240 --> 00:01:12.880
I really appreciate the feedback and suggestions.

00:01:12.880 --> 00:01:17.160
It's also a nice way to let others know about the show, and it makes a big difference for us.

00:01:17.160 --> 00:01:21.660
Next, if you're listening to the show and you have not yet subscribed, please do.

00:01:21.660 --> 00:01:24.580
Open up your favorite podcatcher and search for Python.

00:01:24.580 --> 00:01:26.420
The show should be right near the top.

00:01:26.420 --> 00:01:29.160
If it isn't, send me a note and I'll try to fix that.

00:01:29.940 --> 00:01:31.080
How about a t-shirt?

00:01:31.080 --> 00:01:35.380
I think I have a really cool design for a Talk Python themed t-shirt.

00:01:35.380 --> 00:01:38.240
If there's enough interest, I'll actually create it.

00:01:38.240 --> 00:01:43.000
Visit talkpythontome.com, look in the footer, and click t-shirt,

00:01:43.220 --> 00:01:49.080
or just visit talkpythontome.com slash home slash shirt and press the button.

00:01:49.080 --> 00:01:53.620
Finally, I want to say thank you to Tobias, Macy, and Chris Patty.

00:01:53.620 --> 00:01:59.440
In some crazy coincidence, the Python community was without a proper podcast for almost a year.

00:01:59.680 --> 00:02:04.260
Then Tobias and Chris and I independently set about creating new podcasts.

00:02:04.260 --> 00:02:10.780
And with all the setup and scheduling and a million little items it takes to get a podcast off the ground,

00:02:10.780 --> 00:02:13.340
we ended up releasing in the very same week.

00:02:13.340 --> 00:02:14.140
Amazing.

00:02:14.140 --> 00:02:19.920
Check out their show called Podcast Under Under a Knit at podcastinit.com.

00:02:19.920 --> 00:02:23.860
Now, let's get on to speaking with the amazing Kenneth Wrights.

00:02:23.860 --> 00:02:26.140
Kenneth, welcome to the show.

00:02:26.140 --> 00:02:28.180
Thank you for having me, Michael.

00:02:28.900 --> 00:02:30.000
Yeah, this is great.

00:02:30.000 --> 00:02:35.700
You've built some amazing open source packages, and I'm glad we got a chance to share that with the world.

00:02:35.700 --> 00:02:36.940
Absolutely.

00:02:36.940 --> 00:02:38.000
I'm really glad to be here.

00:02:38.000 --> 00:02:39.080
Cool.

00:02:39.080 --> 00:02:43.820
So before we get into sort of modern day, what are you working on and so on,

00:02:43.820 --> 00:02:48.400
I think people find it really interesting to see how everyone has come to Python

00:02:48.400 --> 00:02:51.020
and got started in this whole community.

00:02:51.020 --> 00:02:55.580
So maybe you could just tell me a bit about how you got started in Python and what's your story?

00:02:55.580 --> 00:02:58.580
I started doing Python when I was in undergrad.

00:02:58.580 --> 00:03:02.120
I went to George Mason University, and they had a Python class.

00:03:02.120 --> 00:03:05.880
And I had already been doing a lot of programming languages throughout my life.

00:03:06.620 --> 00:03:11.280
You know, since I was a young kid, I was learning like basic and C and play with Pascal and stuff like that.

00:03:11.280 --> 00:03:13.920
And Python really attracted me as a language.

00:03:13.920 --> 00:03:19.040
And so I had dropped out of school shortly thereafter and just kind of started doing it full time.

00:03:19.040 --> 00:03:19.960
And here I am.

00:03:19.960 --> 00:03:21.260
That's awesome.

00:03:21.760 --> 00:03:24.940
So you're really glad you just took Python and ran with it, huh?

00:03:24.940 --> 00:03:25.640
It's working out well?

00:03:25.640 --> 00:03:26.980
Yeah, absolutely.

00:03:26.980 --> 00:03:31.400
I was doing PHP for a while, and I did a little bit of Java and all kinds of stuff.

00:03:31.400 --> 00:03:34.980
But Python has really resonated deeply with me and what I'm doing.

00:03:34.980 --> 00:03:36.020
Yeah, that's cool.

00:03:36.300 --> 00:03:45.960
So the reason that I reached out to you, the sort of thing that I know you for, if you will, is your request packages, which is sort of an HTTP client library for Python.

00:03:45.960 --> 00:03:51.080
Maybe start, I suspect a lot of people know about requests, but not everybody.

00:03:51.340 --> 00:03:53.800
So maybe give me like the 30-second elevator pitch.

00:03:53.800 --> 00:03:55.380
Like, what's wrong with URL lib?

00:03:55.380 --> 00:03:58.280
Why did you create this request package and go with that?

00:03:58.280 --> 00:04:01.440
Yeah, so request is called HTTP for humans.

00:04:01.440 --> 00:04:04.400
And originally when I created it, it was not called that.

00:04:04.400 --> 00:04:07.880
It was actually called HTTP for Python that doesn't suck.

00:04:07.880 --> 00:04:10.660
It was a much more negative title.

00:04:10.660 --> 00:04:13.280
And it kind of evolved as I was going along.

00:04:13.280 --> 00:04:17.020
And I decided I didn't want to be putting down other projects, but I wanted to be building up the community.

00:04:17.020 --> 00:04:19.060
So I called it HTTP for humans.

00:04:19.380 --> 00:04:25.740
And effectively the pitch is that if you're, you know, the internet is basically the way we communicate.

00:04:25.740 --> 00:04:30.880
You know, it's like everything that we do usually goes over the internet when we're building tools today.

00:04:30.880 --> 00:04:33.260
You know, the entire world revolves around the internet.

00:04:33.260 --> 00:04:39.480
And so making calls to the internet with Python should be as simple as the print statement.

00:04:39.480 --> 00:04:43.120
And if you use the built-in tools that come with Python, it's tremendously difficult.

00:04:43.120 --> 00:04:47.220
So I built requests to make it really great.

00:04:47.220 --> 00:04:48.840
And I believe I succeeded.

00:04:48.840 --> 00:04:51.220
Yeah, I think you did a really fine job.

00:04:51.220 --> 00:04:55.440
And, you know, whenever I've needed some sort of HTTP client for Python, I definitely use requests.

00:04:55.440 --> 00:05:04.180
I mean, you know, if I think what I have to write in order to do an authenticated request with URL lib, you know, it's ridiculous.

00:05:04.180 --> 00:05:07.540
The default password or password manager with a default realm?

00:05:07.540 --> 00:05:08.820
Yes, exactly.

00:05:08.820 --> 00:05:11.200
So you have to specify the domain or whatever it is.

00:05:11.200 --> 00:05:13.200
Take an opener and then install the opener.

00:05:13.200 --> 00:05:14.900
And then it's a nightmare.

00:05:14.900 --> 00:05:15.920
It's a total nightmare.

00:05:15.920 --> 00:05:18.460
So, yeah, it's definitely a breath of fresh air.

00:05:18.460 --> 00:05:19.280
Thank you.

00:05:19.280 --> 00:05:25.900
So, you know, building libraries like that, you probably spend a lot of time thinking about APIs and what makes a good API.

00:05:26.760 --> 00:05:27.080
Yeah.

00:05:27.080 --> 00:05:33.920
Request is kind of like my – if people ask me what my favorite libraries are, I usually answer request is my favorite one.

00:05:33.920 --> 00:05:35.660
Because it is.

00:05:35.660 --> 00:05:38.760
I've put a lot of thought and design into the way it works.

00:05:38.760 --> 00:05:43.820
And it is kind of like my personal, like, you know, totem of good design.

00:05:44.540 --> 00:05:48.300
And, yeah, there's a lot of – I'm very opinionated about certain things in Python.

00:05:48.300 --> 00:05:54.640
Actually, PyCon – Raymond Hediger just did a great talk at PyCon called Beyond Pep8.

00:05:54.640 --> 00:06:01.720
And he kind of got into a lot of these things, which was – it's all basically about, like, taking the basic data model in Python.

00:06:01.720 --> 00:06:07.760
And, you know, like, you can make an object behave in any number of ways and using properties and stuff.

00:06:07.760 --> 00:06:13.040
And I think it's a really good starting place for someone that wants to know how to build good Python code.

00:06:13.040 --> 00:06:13.380
Yeah.

00:06:13.380 --> 00:06:13.840
Okay.

00:06:13.880 --> 00:06:14.460
That's really cool.

00:06:14.460 --> 00:06:16.080
And, you know, all those shows are recorded.

00:06:16.080 --> 00:06:17.740
And we'll talk about that a little bit later.

00:06:17.740 --> 00:06:20.140
So I recommend people go check that one out.

00:06:20.140 --> 00:06:28.240
And just for the listeners who maybe are catching this later or got the recording after a few weeks later, you know, this is April 21st.

00:06:28.240 --> 00:06:30.860
And PyCon was – it was like a week ago?

00:06:30.860 --> 00:06:31.520
Yeah.

00:06:31.520 --> 00:06:34.520
I just got back two or three days ago from PyCon.

00:06:34.520 --> 00:06:34.700
Yeah.

00:06:34.700 --> 00:06:36.060
It was last week, wasn't it?

00:06:36.060 --> 00:06:36.400
That's right.

00:06:36.400 --> 00:06:37.260
Yeah.

00:06:37.260 --> 00:06:38.620
Well, I stayed extra long for the sprints.

00:06:38.620 --> 00:06:40.360
So it was good.

00:06:40.360 --> 00:06:41.780
I was there for, like, 12 days in total.

00:06:41.780 --> 00:06:42.420
It was ridiculous.

00:06:43.220 --> 00:06:43.660
Amazing.

00:06:43.660 --> 00:06:43.820
Amazing.

00:06:43.820 --> 00:06:44.140
Amazing.

00:06:44.140 --> 00:06:51.980
So before we get to that, you know, can you kind of say a few comments about what you think makes good API design?

00:06:51.980 --> 00:06:54.060
I mean, obviously, Request has it.

00:06:54.060 --> 00:06:56.160
But what do you think, like, the essential ingredients are?

00:06:56.640 --> 00:06:58.640
Well, so I have a litmus test that I pitch people.

00:06:58.640 --> 00:07:05.160
And it's basically that if you have to look at the documentation every time you use the module, then you should either find a new module or build a new module.

00:07:05.160 --> 00:07:07.780
That's a good plan.

00:07:07.780 --> 00:07:08.360
Yeah.

00:07:08.360 --> 00:07:08.860
Good recommendation.

00:07:09.080 --> 00:07:11.780
It's, like, surprisingly difficult when you're using code.

00:07:11.780 --> 00:07:12.960
Like, if you have to...

00:07:12.960 --> 00:07:16.820
I'm not saying, like, you know, if you pick it up for the first time in months, then looking at the docs.

00:07:16.820 --> 00:07:22.340
But, like, there are certain code bases where, like, you just have the docs and you're looking at them more than you're looking at the code.

00:07:22.740 --> 00:07:28.540
And to me, that's not, you know, that's a testament to an unergonomic design.

00:07:28.540 --> 00:07:29.200
Yeah.

00:07:29.200 --> 00:07:31.800
Or a really hard problem space, one of the two.

00:07:31.800 --> 00:07:32.720
Right.

00:07:32.720 --> 00:07:34.740
It could be a super hard problem space.

00:07:34.740 --> 00:07:35.300
But...

00:07:35.300 --> 00:07:42.280
But even in those cases, there's, you know, you can build a layered API and, you know, you can have a nice human layer as well as a low-level one.

00:07:42.280 --> 00:07:43.600
Absolutely.

00:07:43.600 --> 00:07:49.540
Just because your library might do 100 things, there's probably, you know, what, two or three very common use cases.

00:07:49.540 --> 00:07:53.280
Maybe there should be some, like, higher-level abstraction that you use for that.

00:07:53.280 --> 00:07:54.120
Precisely.

00:07:54.120 --> 00:07:55.500
And then you dig down.

00:07:55.500 --> 00:08:01.100
You know, I'm thinking of things like we just spoke to Mike Bayer from SQLAlchemy.

00:08:01.100 --> 00:08:01.820
Very nice.

00:08:01.820 --> 00:08:02.600
And with SQL...

00:08:02.600 --> 00:08:04.000
Yeah, which is a great conversation.

00:08:04.000 --> 00:08:09.740
And, you know, with SQLAlchemy, you've got two, literally two layers you can think of, right?

00:08:09.740 --> 00:08:12.880
There's, like, the SQLAlchemy core, which is purely about data access.

00:08:12.880 --> 00:08:18.900
Then there's the ORM, which is kind of like the, hey, let's keep it a little bit easier, but you have maybe less control over the performance.

00:08:19.340 --> 00:08:19.940
Or so on.

00:08:19.940 --> 00:08:24.660
It's funny you mention that, because I actually want to work on a new project that's like SQLAlchemy for humans.

00:08:24.660 --> 00:08:28.280
But we'll see how it goes.

00:08:28.280 --> 00:08:29.220
Yeah, excellent.

00:08:29.220 --> 00:08:29.620
Excellent.

00:08:29.620 --> 00:08:34.640
So before we move off of requests, let me ask you just a couple more questions on it.

00:08:34.640 --> 00:08:40.980
Are there, like, really notable users or sort of, like, famous use cases that you can talk about?

00:08:40.980 --> 00:08:43.880
Yeah, well, it's basically, it's quite ubiquitous.

00:08:44.080 --> 00:08:47.340
Basically, if anyone's doing Python and HTTP, they are using requests.

00:08:47.340 --> 00:08:52.840
The one that I'm the most proud of is Amazon uses it for their internal API tools.

00:08:53.100 --> 00:09:03.100
So everything that runs EC2 and S3 and all of AWS, every single API call goes through requests, which is astonishing, because that means, like, it's powering the entire internet.

00:09:03.100 --> 00:09:04.140
Yeah.

00:09:04.140 --> 00:09:08.760
And you, in some way, you are, like, a layer beneath so much of the internet.

00:09:08.760 --> 00:09:09.680
That's really cool.

00:09:09.900 --> 00:09:11.060
Yeah, I'm really proud of that.

00:09:11.060 --> 00:09:19.120
Speaking of APIs, you know, one of the things that really puts external pressure on APIs is the whole async programming model.

00:09:19.120 --> 00:09:29.360
So, you know, traditionally with things like Twisted, but, you know, more modern with AsyncIO, does requests have any support for that?

00:09:29.360 --> 00:09:34.080
Or what do you think about, you know, APIs in general adapting to these async stories?

00:09:34.580 --> 00:09:39.800
So the old way, sorry, like, kind of the current best practice way of doing it is using gevent.

00:09:39.800 --> 00:09:44.320
And what that does is it monkey patches the entire standard library.

00:09:44.320 --> 00:09:53.780
And it adds basically callbacks throughout every piece of blocking code in the standard library, in theory.

00:09:53.780 --> 00:09:55.140
I mean, that's what it's designed to do.

00:09:55.140 --> 00:09:58.180
It doesn't do a perfect job, but it gets the job done most of the time.

00:09:58.180 --> 00:10:07.400
And then what you do is you have an event loop, and you say, like, instead of, like, you know, you have a function that's, like, go get this HTTP request with requests, and that blocks.

00:10:07.400 --> 00:10:10.060
You know, it's, like, a very, like, blocky process.

00:10:10.060 --> 00:10:15.220
But if you do it with gevent, you can just say, like, run 100 of these, and it does them all concurrently, and it comes back.

00:10:15.220 --> 00:10:16.460
And it works really well.

00:10:16.460 --> 00:10:20.260
Then in Python 3, I think in 3.2 they added it.

00:10:20.260 --> 00:10:22.660
They added this new library called AsyncIO.

00:10:23.540 --> 00:10:26.060
And it's Guido's, it used to be called, known as Tulip.

00:10:26.060 --> 00:10:33.680
And it is the new asynchronous way of interacting with, just, you know, doing asynchronous work, especially over the network.

00:10:33.680 --> 00:10:35.440
And it's still very new.

00:10:35.440 --> 00:10:43.360
It's what is considered to be a provisional package within a standard library, which means that it is not officially done.

00:10:43.360 --> 00:10:49.940
So there's, like, a small core that's still being iterated on, and then there's going to be, like, an official HTTP client after that.

00:10:50.500 --> 00:10:58.960
And I don't necessarily think that will replace the usage of requests or these blocking-style services, but it's too early to tell, I would say.

00:10:58.960 --> 00:11:03.520
But right now you can use gevent, and, like, you get the best of both worlds, and it works really well.

00:11:03.520 --> 00:11:05.060
Yeah, that's, okay, that's really cool.

00:11:05.060 --> 00:11:09.840
I don't think every API or every use case needs to use AsyncIO.

00:11:09.840 --> 00:11:13.680
I mean, it's one of these special case scenarios.

00:11:13.680 --> 00:11:19.160
I'm running a web server, and I want to support, you know, 20,000 requests on this machine, right?

00:11:19.160 --> 00:11:21.540
Maybe you need to think about async programming.

00:11:21.540 --> 00:11:25.820
But if you're just writing, like, a basic web scraper, then maybe you do, maybe you don't.

00:11:25.820 --> 00:11:26.800
It depends what you're up to.

00:11:26.800 --> 00:11:30.560
Yeah, I mean, you can always scale as long as your performance is predictable.

00:11:30.560 --> 00:11:34.480
And unfortunately, when you're using something like gevent, it makes things a lot less predictable.

00:11:34.480 --> 00:11:37.500
But, you know, it depends on what you're doing, really.

00:11:37.500 --> 00:11:41.840
It's one of those things where you just have to try it and see if it works for your project.

00:11:42.060 --> 00:11:45.320
A lot of times, your code isn't compatible because of different C dependencies, because

00:11:45.320 --> 00:11:45.980
that always blocks.

00:11:45.980 --> 00:11:49.980
And, you know, it's kind of like this big hairball you're getting yourself into.

00:11:49.980 --> 00:11:55.140
But, you know, if you have the right type of code and you use gevent, you can, you know,

00:11:55.140 --> 00:11:58.380
come close to, like, node performance benchmarks and go.

00:11:58.380 --> 00:11:59.260
It's really fantastic.

00:11:59.260 --> 00:12:00.460
Yeah, that's really great.

00:12:00.460 --> 00:12:08.840
Michael here.

00:12:08.840 --> 00:12:13.260
Thank you so much for listening to and spreading the word about Talk Python TV.

00:12:13.260 --> 00:12:17.240
I'm still looking to line up stable corporate sponsorships, but I wanted to tell you about

00:12:17.240 --> 00:12:21.520
a community-based campaign I'm launching to allow listeners to directly support the show.

00:12:21.520 --> 00:12:23.700
We are running a Patreon campaign.

00:12:23.700 --> 00:12:26.880
Consider supporting us today at patreon.com slash mkennedy.

00:12:26.880 --> 00:12:27.900
And thanks for listening.

00:12:27.900 --> 00:12:40.000
Okay, so like we were saying before, you just came back from PyCon.

00:12:40.000 --> 00:12:41.440
And you, it's amazing.

00:12:41.440 --> 00:12:42.540
You spent 12 days there.

00:12:42.540 --> 00:12:44.000
You've been, like, completely immersed.

00:12:44.000 --> 00:12:44.680
What are your thoughts?

00:12:44.680 --> 00:12:46.420
On the conference itself?

00:12:46.420 --> 00:12:51.240
Yeah, just the whole experience and what was the vibe of Python this year and so on.

00:12:51.240 --> 00:12:55.480
Well, so PyCon is kind of like my way of measuring the year every year.

00:12:56.960 --> 00:13:00.360
Like, you know, every year, like, most people, like, think of the new year as the start of

00:13:00.360 --> 00:13:00.800
their new year.

00:13:00.800 --> 00:13:05.160
But for me, like, PyCon is kind of like where I, like, you know, sit down and think about

00:13:05.160 --> 00:13:06.200
my life and all this stuff.

00:13:06.200 --> 00:13:11.560
And it's great because, like, I go to all these tech conferences all the time for work and speak

00:13:11.560 --> 00:13:14.820
at these conferences and events and I hang out with all these people everywhere.

00:13:14.820 --> 00:13:16.800
And I get to see almost all of them at PyCon.

00:13:16.800 --> 00:13:18.460
So for me, it's a very social event.

00:13:18.460 --> 00:13:21.760
It's a very, it's very work-oriented, but it's also very personal.

00:13:22.340 --> 00:13:25.820
And it's just kind of like, you know, this most intense week of my life.

00:13:25.820 --> 00:13:28.200
And I had a really great PyCon.

00:13:28.200 --> 00:13:30.020
I'd say this is my best PyCon so far.

00:13:30.020 --> 00:13:33.800
The energy of the whole thing was really good.

00:13:33.800 --> 00:13:37.060
There were some things that were a little different this year, even from last year, which was also

00:13:37.060 --> 00:13:37.540
in Montreal.

00:13:37.540 --> 00:13:40.240
I don't know.

00:13:40.240 --> 00:13:40.800
I liked it, though.

00:13:40.800 --> 00:13:41.180
It was good.

00:13:42.180 --> 00:13:47.220
To me, I personally spent a lot more time interacting one-on-one with people instead

00:13:47.220 --> 00:13:50.680
of, like, doing these big group talks, like kind of normally happens where you get, like,

00:13:50.680 --> 00:13:52.620
20 people in a circle and everyone's talking.

00:13:52.620 --> 00:13:54.460
I used to do that constantly.

00:13:54.460 --> 00:13:59.080
And then this year, I spent a lot more time, like, you know, spending time with the people

00:13:59.080 --> 00:13:59.760
I wanted to see.

00:13:59.760 --> 00:14:01.560
And that seemed to be really beneficial to me.

00:14:01.560 --> 00:14:03.800
Yeah, that's really excellent.

00:14:03.800 --> 00:14:06.720
Some of my favorite conferences, I've hardly gone to any of the talks.

00:14:06.720 --> 00:14:10.700
It's just you kind of go there and you spend your time with the people and in the environment.

00:14:11.140 --> 00:14:13.220
And, you know, maybe you see the talks, maybe you don't.

00:14:13.220 --> 00:14:13.760
Exactly.

00:14:13.760 --> 00:14:15.580
At PyCon, that's known as the hallway track.

00:14:15.580 --> 00:14:17.000
Yeah, awesome.

00:14:17.000 --> 00:14:19.280
How many years have you been going?

00:14:19.280 --> 00:14:21.380
Excuse me.

00:14:21.380 --> 00:14:22.720
Let's see.

00:14:22.720 --> 00:14:24.420
This was, my first one was 2011.

00:14:24.420 --> 00:14:26.120
So, I guess this is my fourth PyCon.

00:14:26.120 --> 00:14:27.160
Excellent, excellent.

00:14:27.160 --> 00:14:28.600
Yeah, I couldn't go this year.

00:14:28.600 --> 00:14:32.140
My wife was also traveling and we have small kids and we'd be in trouble if we both left

00:14:32.140 --> 00:14:32.360
town.

00:14:32.360 --> 00:14:33.980
Well, there's always next year.

00:14:33.980 --> 00:14:36.840
Yeah, and it's coming to my hometown, so it's looking good.

00:14:36.840 --> 00:14:37.540
Yeah, that'll be great.

00:14:37.540 --> 00:14:40.760
Brandon Rhodes is running this year, so I'm really excited to see what he,

00:14:41.060 --> 00:14:42.160
what he does to it.

00:14:42.160 --> 00:14:43.780
Yeah, that'll be fantastic.

00:14:43.780 --> 00:14:48.940
So, can you tell me what some of your, you know, speaking of not going to the talks and

00:14:48.940 --> 00:14:52.480
then asking you the opposite question, can you tell me what some of your favorite sessions

00:14:52.480 --> 00:14:54.200
or topics that were covered at PyCon?

00:14:54.900 --> 00:14:58.000
Well, I didn't go to any talks.

00:14:58.000 --> 00:14:59.160
Awesome.

00:14:59.160 --> 00:15:00.840
So, you really enjoyed the hallway track.

00:15:00.840 --> 00:15:01.160
That's fantastic.

00:15:01.160 --> 00:15:05.480
Yeah, I have almost a no-talk policy because I go to, I go to a lot of conferences and they

00:15:05.480 --> 00:15:06.960
all kind of blur together eventually.

00:15:06.960 --> 00:15:09.980
But, and especially at PyCon, they're all already up online.

00:15:09.980 --> 00:15:11.080
Like, you can watch them now.

00:15:11.220 --> 00:15:13.920
And so, I just kind of, you know, I do that.

00:15:13.920 --> 00:15:15.500
And I, I'm there to see the people.

00:15:15.500 --> 00:15:17.100
But I have watched a few already.

00:15:17.100 --> 00:15:22.180
And I really enjoyed, Jacob Kaplan Moss, who is one of the runners of the Django

00:15:22.180 --> 00:15:22.560
project.

00:15:22.680 --> 00:15:28.300
And a coworker of mine did a really great keynote that I enjoyed, about just kind

00:15:28.300 --> 00:15:31.880
of like the diversity in tech, problem in that space.

00:15:31.880 --> 00:15:35.460
He, he went up on stage and was like, everybody, I'm a mediocre programmer.

00:15:35.460 --> 00:15:37.360
And I was like, that's pretty cool.

00:15:37.360 --> 00:15:40.700
And I was thinking like, if I was to do that talk, I think I would do the opposite.

00:15:40.700 --> 00:15:43.520
I'm like, I'm an amazing programmer and so are all of you.

00:15:43.520 --> 00:15:47.180
But, but, yeah, it was a good talk.

00:15:47.180 --> 00:15:49.680
And so, that's the only one I think I've really sat down and watched.

00:15:49.760 --> 00:15:52.580
Although I watched Raymond's talk as well on beyond pepe.

00:15:52.580 --> 00:15:57.680
And that was, I think, fantastic for, cause people, I've never seen it so well solidified

00:15:57.680 --> 00:15:59.740
before how to write good Pythonic code.

00:15:59.740 --> 00:16:01.600
So, I'd recommend checking that out as well.

00:16:01.600 --> 00:16:02.040
Okay.

00:16:02.040 --> 00:16:02.280
Yeah.

00:16:02.280 --> 00:16:03.800
Those, those both sound really awesome.

00:16:03.800 --> 00:16:09.780
So, because I couldn't go, I kind of, you know, YouTube was my connection to PyCon this

00:16:09.780 --> 00:16:09.940
year.

00:16:09.940 --> 00:16:14.980
So, I'm like, all right, well, let me go through and sort of make a playlist for myself and what

00:16:14.980 --> 00:16:19.740
I think, you know, at least just reading the descriptions seems like, you know,

00:16:19.740 --> 00:16:22.200
kind of essential or the real valuable stuff.

00:16:22.200 --> 00:16:26.340
Now, you know, not to disparage anybody else's stuff that's not on the list or whatever, but

00:16:26.340 --> 00:16:27.980
these are just the ones that jumped out at me.

00:16:27.980 --> 00:16:28.220
Right.

00:16:28.220 --> 00:16:28.600
Yeah.

00:16:28.600 --> 00:16:30.860
So, on YouTube, I made a playlist.

00:16:30.860 --> 00:16:37.400
You can find it at bit.ly slash PyCon 2015 MK, all lowercase.

00:16:38.360 --> 00:16:40.280
And I think, how many videos do I have there?

00:16:40.280 --> 00:16:42.360
I've got 29 videos, apparently.

00:16:42.360 --> 00:16:43.100
Nice.

00:16:43.100 --> 00:16:44.040
Yeah.

00:16:44.040 --> 00:16:48.700
And so, you know, some of them that I thought were pretty cool was there's one called Bytes

00:16:48.700 --> 00:16:51.520
Inside the Machine, Inside the CPython Interpreter.

00:16:51.520 --> 00:16:53.900
And that's by Allison Captur.

00:16:53.900 --> 00:16:58.420
And I thought that was really cool because a lot of time, you know, you spend time so high

00:16:58.420 --> 00:17:02.680
in sort of the Python code, like looking down at actually what happens when you run it.

00:17:03.140 --> 00:17:04.500
I thought that was pretty cool.

00:17:04.500 --> 00:17:08.120
Andrew Baker did one on demystifying Docker.

00:17:08.120 --> 00:17:09.060
Oh, yeah.

00:17:09.060 --> 00:17:11.280
And I think Docker is going to be massive.

00:17:11.280 --> 00:17:15.540
You know, it's already kind of massive, but I think it's just at the beginning, you know?

00:17:15.540 --> 00:17:16.160
I agree.

00:17:16.160 --> 00:17:17.560
Yeah.

00:17:17.560 --> 00:17:21.180
And so, I think understanding Docker is going to be really important if you're doing anything

00:17:21.180 --> 00:17:22.700
involving like a server.

00:17:22.700 --> 00:17:23.480
Which?

00:17:23.480 --> 00:17:25.140
It's pretty much everyone.

00:17:25.140 --> 00:17:25.700
Not everyone.

00:17:26.060 --> 00:17:30.600
There's plenty of people that just run, you know, scripts on their machines.

00:17:30.600 --> 00:17:33.000
But for the most part, I think people need to understand that.

00:17:33.000 --> 00:17:33.640
So, that's pretty cool.

00:17:33.640 --> 00:17:37.780
And then Gary Ward did one on how to write reusable code, which sounds a little bit like

00:17:37.780 --> 00:17:38.660
beyond PEPT-8.

00:17:38.660 --> 00:17:39.820
Yeah.

00:17:39.820 --> 00:17:40.600
Yeah.

00:17:40.600 --> 00:17:41.080
And let's see.

00:17:41.080 --> 00:17:41.580
A few more.

00:17:41.580 --> 00:17:43.840
Ryan Kelly did one on PyPy.js.

00:17:43.840 --> 00:17:45.680
Oh, I didn't hear about that.

00:17:45.680 --> 00:17:46.340
That sounds amazing.

00:17:46.340 --> 00:17:46.560
Yeah.

00:17:46.560 --> 00:17:47.420
Doesn't that sound cool?

00:17:47.420 --> 00:17:49.820
Like, you know, running Python.

00:17:49.820 --> 00:17:54.300
Is this a JavaScript interpreter?

00:17:54.740 --> 00:17:56.300
I don't remember exact.

00:17:56.300 --> 00:17:57.680
I think it.

00:17:57.680 --> 00:17:58.940
I suspect it is.

00:17:58.940 --> 00:18:03.940
Because PyPy is, in addition to being a Python interpreter, it's also a platform for building

00:18:03.940 --> 00:18:04.960
other interpreted languages.

00:18:04.960 --> 00:18:05.560
Right.

00:18:05.560 --> 00:18:06.240
It may well be.

00:18:06.240 --> 00:18:07.580
So, maybe it's running.

00:18:07.580 --> 00:18:07.960
Yeah.

00:18:07.960 --> 00:18:10.060
I actually should stop talking because I now know.

00:18:10.060 --> 00:18:11.820
I've now told you as much as I know about it.

00:18:11.820 --> 00:18:14.260
Other than watching it because that one I haven't seen.

00:18:14.260 --> 00:18:17.680
You know, I'd like to get your thoughts on one that Guido did.

00:18:17.680 --> 00:18:21.780
Just the topic, not because I know neither of us have seen it yet, is type hints.

00:18:21.780 --> 00:18:22.700
Oh, yes.

00:18:22.700 --> 00:18:24.060
I've talked to Guido about type hints.

00:18:24.500 --> 00:18:25.920
What do you think about type hints?

00:18:25.920 --> 00:18:27.120
I don't care about them.

00:18:27.120 --> 00:18:29.880
But I know he's really excited about them.

00:18:29.880 --> 00:18:31.360
And it's interesting.

00:18:31.360 --> 00:18:35.120
So, it seems like those are being built to serve this particular market that I am very

00:18:35.120 --> 00:18:35.880
disconnected from.

00:18:35.880 --> 00:18:39.920
And I think that the people that are involved in the core development of Python are connected

00:18:39.920 --> 00:18:40.180
to.

00:18:40.180 --> 00:18:44.680
And it seems to be like these people that are like building compilers and like, you know,

00:18:44.680 --> 00:18:48.520
they're like taking Python code and turning it into something else for like optimization

00:18:48.520 --> 00:18:49.140
and stuff.

00:18:49.240 --> 00:18:53.200
And I think that that's the idea behind type hints.

00:18:53.200 --> 00:18:55.540
I think that's like a use case.

00:18:55.540 --> 00:18:57.440
It's definitely a use case.

00:18:57.440 --> 00:19:01.680
Another one that jumps to mind is if you're building editors like the PyCharm guys.

00:19:01.820 --> 00:19:02.080
Yeah.

00:19:02.080 --> 00:19:08.800
And that seems just really odd to me to build, you know, to build language features around

00:19:08.800 --> 00:19:09.040
that.

00:19:09.040 --> 00:19:12.420
But because, but I'm not like, I'm not in that space.

00:19:12.420 --> 00:19:15.120
So, I don't know what the real motivation is.

00:19:15.120 --> 00:19:16.800
But it just seems a little odd to me.

00:19:16.800 --> 00:19:20.300
And everyone I talk to also doesn't care about type hints.

00:19:20.300 --> 00:19:23.220
But it's also one of those things that I don't think you'll need to care about if you're not

00:19:23.220 --> 00:19:24.040
going to use them probably.

00:19:25.040 --> 00:19:26.340
Yeah, I suspect that's right.

00:19:26.340 --> 00:19:31.980
You know, if you're coming from Java or C# or some other typeful language, that might

00:19:31.980 --> 00:19:33.360
convince you to make the leap.

00:19:33.360 --> 00:19:33.800
Yeah.

00:19:33.800 --> 00:19:37.880
Whereas if you've been doing Python for 10 years, you're like, we don't need this, you

00:19:37.880 --> 00:19:38.040
know?

00:19:38.040 --> 00:19:40.560
Yeah, I'm definitely in a different camp than Guido is.

00:19:40.560 --> 00:19:42.700
I'm very much, I love Python 2.7.

00:19:42.700 --> 00:19:45.120
And I feel like I could use it for the rest of my life.

00:19:45.120 --> 00:19:50.120
I'm planning on like, you know, fully embracing 3 when everyone else does.

00:19:51.220 --> 00:19:55.220
And so, there's a lot of, you know, like all this new development on these type hints and

00:19:55.220 --> 00:19:59.420
stuff doesn't sound as exciting to me as like, making sure that we have a way to like ship

00:19:59.420 --> 00:20:01.280
like standalone binaries.

00:20:01.280 --> 00:20:03.540
I feel like that would be a really great use of our time.

00:20:03.540 --> 00:20:06.040
I'm not saying that Guido shouldn't be working on this.

00:20:06.040 --> 00:20:08.080
Like, he should work on whatever he wants to work on.

00:20:08.080 --> 00:20:10.000
And I'm really excited that he's putting the work into this.

00:20:10.000 --> 00:20:15.320
But I hope other people, you know, don't stop working on other things because of it.

00:20:15.320 --> 00:20:16.280
And I don't think they will.

00:20:16.280 --> 00:20:16.900
That's not happening.

00:20:16.900 --> 00:20:18.680
I was at the Language Summit this year.

00:20:18.860 --> 00:20:21.620
And we had a really great conversation about the next year of Python.

00:20:21.620 --> 00:20:23.700
And there was a lot of talk.

00:20:23.700 --> 00:20:25.180
Guido did one on type hints.

00:20:25.180 --> 00:20:28.840
There's a lot of really great stuff that kind of came up.

00:20:28.840 --> 00:20:29.880
Okay, that's cool.

00:20:29.880 --> 00:20:31.900
Can you talk about what else was at the Language Summit?

00:20:31.900 --> 00:20:33.180
Let me think.

00:20:33.180 --> 00:20:34.660
I was only there for the second half.

00:20:34.660 --> 00:20:35.980
I did a talk on requests.

00:20:35.980 --> 00:20:40.300
And because everyone is really interested in adding it to the standard library.

00:20:40.760 --> 00:20:43.400
So I did a talk about the pros and cons of that.

00:20:43.400 --> 00:20:49.340
And basically stated that requests is a critical piece of infrastructure for the Python community.

00:20:49.340 --> 00:20:51.020
Because pip relies on it.

00:20:51.020 --> 00:20:52.180
And like pip ships with Python.

00:20:52.180 --> 00:20:56.580
And, you know, it's like the most popular Python package there is.

00:20:57.920 --> 00:21:00.040
So, and I have security updates.

00:21:00.040 --> 00:21:06.020
You know, when there's like a CVE that's released for HTTP and OpenSSL and stuff, we have to make changes.

00:21:06.020 --> 00:21:08.600
And, you know, Python has a 16-month release cycle.

00:21:08.600 --> 00:21:13.880
And we've released a version by maintainers in like 12 hours.

00:21:14.460 --> 00:21:16.300
So there's a big difference there.

00:21:16.300 --> 00:21:20.740
So if requests was to go into the standard library, it would be, I think, irresponsible.

00:21:20.740 --> 00:21:27.080
So we decided together as a group that requests is going to be officially recommended in the Python documentation.

00:21:27.080 --> 00:21:31.820
Instead of going into the standard library.

00:21:31.820 --> 00:21:33.360
Which seems like a good compromise.

00:21:33.360 --> 00:21:34.540
Right.

00:21:34.540 --> 00:21:35.540
That makes a lot of sense.

00:21:35.540 --> 00:21:41.200
And, you know, HTTP being such a critical but vulnerable layer as well.

00:21:41.200 --> 00:21:42.440
And morphic layer as well.

00:21:42.440 --> 00:21:44.380
What, sorry?

00:21:44.500 --> 00:21:45.560
Amorphic layer as well.

00:21:45.560 --> 00:21:46.560
It changes over time.

00:21:46.560 --> 00:21:47.560
Yeah, absolutely.

00:21:47.560 --> 00:21:48.880
It's definitely changing.

00:21:48.880 --> 00:21:54.200
And if that needs to be fixed, it needs to be fixed now, not in a year.

00:21:54.200 --> 00:21:55.060
So that's really interesting.

00:21:55.060 --> 00:21:57.140
Yeah, I think that was a good takeaway.

00:21:57.140 --> 00:21:58.580
It seems like a good takeaway.

00:21:58.580 --> 00:21:59.440
Cool.

00:21:59.440 --> 00:22:02.440
Well, I guess one more that I thought was worth calling out.

00:22:02.440 --> 00:22:03.840
And maybe we'll do a show on this one.

00:22:03.840 --> 00:22:05.620
It's a guy named David Beasley.

00:22:05.620 --> 00:22:06.100
Yes.

00:22:06.100 --> 00:22:09.040
Did one on modules and packages.

00:22:09.040 --> 00:22:10.120
Oh, very nice.

00:22:10.120 --> 00:22:13.120
Did a three-hour workshop on it.

00:22:13.700 --> 00:22:16.800
And you think, what is there to know about modules and packages for three hours?

00:22:16.800 --> 00:22:24.220
But actually, there's a lot of really interesting stuff about, like, maintainable sub-imports when you're building large packages.

00:22:24.220 --> 00:22:28.320
And all sorts of cool stuff that I think is actually a lot of people would get a lot out of.

00:22:28.380 --> 00:22:31.120
So that's also on that list of videos.

00:22:31.120 --> 00:22:32.940
Yeah, David Beasley always does amazing work.

00:22:32.940 --> 00:22:34.600
He's kind of crazy.

00:22:34.600 --> 00:22:36.900
Yeah, it was really good.

00:22:36.900 --> 00:22:38.320
So that was fantastic.

00:22:39.160 --> 00:22:46.200
So what else would you like to get out into the community about Python and just let people know while you got a chance?

00:22:46.200 --> 00:22:47.920
Let me think.

00:22:47.920 --> 00:22:51.760
I've been very concerned for a long time about the adoption of Python 3.

00:22:51.760 --> 00:22:52.820
And I still am.

00:22:52.820 --> 00:22:55.580
And we had some discussion about that at PyCon as well.

00:22:55.720 --> 00:22:56.720
And it's interesting.

00:22:56.720 --> 00:23:06.440
It seems as though on certain platforms, like where I work at Heroku, we have about a 10% in the last month or so deploy rate for Python 3, which is really surprising.

00:23:06.440 --> 00:23:15.280
And it seems to me as though this, and it's also, if you look at the cheese shop numbers, Python 3 is starting to get a little bit more usage.

00:23:15.280 --> 00:23:17.920
You know, it's still extremely minimal and far behind what we want.

00:23:17.920 --> 00:23:19.140
But the needle is moving.

00:23:19.140 --> 00:23:28.680
And it's really fascinating because the only thing that I can tell has changed is that Django, when they made their last release, they officially, they just used Python 3 by default.

00:23:28.680 --> 00:23:34.400
And that seems to have a tremendous impact on people, on users of the language in general.

00:23:34.520 --> 00:23:39.480
Just having literally the quick start for Django in all the documentation is just Python 3 by default.

00:23:39.480 --> 00:23:41.900
So I think that's really interesting.

00:23:41.900 --> 00:23:51.860
And I think that there's a lot to learn about that and just kind of think about that and just be like, you know, maybe if I share code samples with people, they should be Python 3, not Python 2.

00:23:51.860 --> 00:23:54.000
You know, maybe that'll help make a big difference.

00:23:54.000 --> 00:23:59.080
You know, if we just like shift our default mode, maybe it'll get us over this hump.

00:23:59.080 --> 00:24:01.440
Because I am concerned about the future of the language.

00:24:01.440 --> 00:24:03.680
I think that we have a big marketing problem.

00:24:03.940 --> 00:24:06.120
I think that there's this product that's being built that no one wants.

00:24:06.120 --> 00:24:07.580
And so no one's using it.

00:24:07.580 --> 00:24:11.680
And I think that it's just all about getting on the same page.

00:24:11.680 --> 00:24:14.340
Yeah, I think that's a really good idea.

00:24:14.340 --> 00:24:22.620
I mean, even if it's just going to blog something and put up a code snippet, if you started making that Python 3 more frequently, that would probably send some kind of signal to the world, you know?

00:24:22.820 --> 00:24:24.620
Yeah, it's just so interesting to see.

00:24:24.620 --> 00:24:26.920
I mean, like there's a, the needle is like actually moving.

00:24:26.920 --> 00:24:30.700
And it is because Django changed their docs to use Python 3.

00:24:30.700 --> 00:24:32.380
And that's just, that blows my mind.

00:24:32.380 --> 00:24:34.900
That's not, it can't be that easy.

00:24:36.960 --> 00:24:40.040
Well, nobody would have, you know, thought that would make the difference.

00:24:40.040 --> 00:24:43.280
But, you know, sometimes things are unpredictable, right?

00:24:43.420 --> 00:24:43.780
Exactly.

00:24:43.780 --> 00:24:44.080
Yeah.

00:24:44.080 --> 00:24:45.420
So I'm all in favor of us.

00:24:45.420 --> 00:24:47.620
You know, I've been for a long time.

00:24:47.620 --> 00:24:52.500
If you talk to me in private, I'd always say that I'm a Python 2 life, Python 2 user for life.

00:24:53.460 --> 00:24:54.780
And I do kind of feel that way.

00:24:54.780 --> 00:25:01.580
But the reality is that the Python community is valuable enough to me that I don't care what I'm using as long as we're all using the same thing.

00:25:01.580 --> 00:25:07.920
So I think that we should all just kind of embrace the change and just see what happens.

00:25:07.920 --> 00:25:14.900
You know, I think when you look at the actual code, sort of like modern Python 2 versus Python 3, there's not that much of a difference.

00:25:14.900 --> 00:25:18.780
It's kind of the libraries or the packages that you want to take along.

00:25:18.780 --> 00:25:20.280
Like, oh, this doesn't support Python 3.

00:25:20.280 --> 00:25:22.240
Well, this project isn't using Python 3.

00:25:22.600 --> 00:25:25.840
Yeah, it definitely depends on the style of project you're doing, too.

00:25:25.840 --> 00:25:36.520
So if you're doing something that deals with bytes as text, which I do a lot because I work with HTTP, then Python 3 is the worst language in human history, basically.

00:25:36.520 --> 00:25:38.000
Yeah, it's true.

00:25:38.000 --> 00:25:41.380
Because the string stuff is really pretty different, right?

00:25:41.380 --> 00:25:41.720
Yeah.

00:25:41.720 --> 00:25:49.620
So if you have a byte string and you can't do anything with it anymore, it's just like a byte array of bytes, you know, of integers.

00:25:51.740 --> 00:25:57.300
And so if you can't do, like, formatting and stuff, I think they added formatting back, actually, I think in 3.4.

00:25:57.300 --> 00:25:59.780
But they didn't add the .format method.

00:25:59.780 --> 00:26:04.580
They did the percentage, the modulus override, which is ridiculous.

00:26:04.580 --> 00:26:06.340
But so you can format strings again.

00:26:06.340 --> 00:26:08.140
But still, you can't parse them very easily.

00:26:08.140 --> 00:26:09.940
You can't work with them very easily as text.

00:26:10.140 --> 00:26:16.700
And to me, Python 3 makes a lot of sense in a world where everything is Unicode, but we don't live in that world.

00:26:16.700 --> 00:26:24.220
You know, because, like, when you're sending stuff over the internet, when you're writing it to disk, when you're sending an email, it's all actually bytes.

00:26:24.760 --> 00:26:29.620
And so I really enjoyed the flexibility that Python 2 had in that.

00:26:29.620 --> 00:26:31.380
And that was, like, my favorite part of the language.

00:26:31.380 --> 00:26:32.780
And they kind of took that away from me.

00:26:32.780 --> 00:26:37.240
So I am de-incentivized to use 3 personally.

00:26:37.520 --> 00:26:43.460
And if you look at, like, Armin Ronecker, the guy who wrote Flask, he writes really detailed blog posts about the same problem.

00:26:43.460 --> 00:26:45.200
And it sucks.

00:26:45.200 --> 00:26:50.340
But at the same time, like, if you – usually when you're interacting with that stuff, you're dealing with libraries.

00:26:50.340 --> 00:26:52.820
You know, we deal with it because we're library authors.

00:26:52.820 --> 00:26:55.540
So if we solve the problem, then it's okay for everybody else.

00:26:55.540 --> 00:26:56.020
Right.

00:26:56.020 --> 00:26:59.880
You guys are basically the firewall to that problem, right?

00:26:59.880 --> 00:27:02.380
You live literally at the network layer, both of you.

00:27:02.380 --> 00:27:04.840
And by the way, we're going to have him on and do a show on Flask.

00:27:04.840 --> 00:27:05.360
Oh, fantastic.

00:27:05.360 --> 00:27:06.800
And other topics as well pretty soon.

00:27:07.160 --> 00:27:08.600
I'm looking forward to listening to that.

00:27:08.600 --> 00:27:09.540
Yeah.

00:27:09.540 --> 00:27:14.040
But I think, you know, you probably feel it worse than a lot of people because you live at the network boundary.

00:27:14.040 --> 00:27:14.760
Yeah.

00:27:14.760 --> 00:27:20.560
To me, adding Python 3 to requests was, like, one of the most painful things I've ever done as a programmer.

00:27:20.560 --> 00:27:23.760
Definitely one of the most frustrating, if not the most frustrating.

00:27:23.760 --> 00:27:25.820
But I learned a lot from it, too.

00:27:25.820 --> 00:27:27.520
It got better in some ways.

00:27:27.520 --> 00:27:33.740
Like, in Python 2, it was admittedly unclear if you were dealing with bytes or Unicode.

00:27:34.060 --> 00:27:43.440
So before in requests, if you got back an HTTP response, and if I could decode it to Unicode, it would just be Unicode.

00:27:43.440 --> 00:27:47.260
The content of it would be, like, response.content.

00:27:48.720 --> 00:27:50.140
And if it was Unicode, it would be Unicode.

00:27:50.140 --> 00:27:51.040
If it was bytes, it would be bytes.

00:27:51.040 --> 00:27:52.140
And it would, like, change.

00:27:52.140 --> 00:27:56.480
And then when I went to 3, that, like, that API doesn't work anymore.

00:27:56.480 --> 00:27:57.520
It's just not possible.

00:27:57.520 --> 00:27:58.600
So you had to split them up.

00:27:58.640 --> 00:28:02.860
So now there's .content, which is always bytes, and there's .text, which is always Unicode.

00:28:02.860 --> 00:28:06.980
And that is a superior API design and something I should have done before.

00:28:06.980 --> 00:28:09.820
And using Python 3 helped me design it better.

00:28:09.820 --> 00:28:14.340
So I do think it's a good, you know, I think that there's a lot of benefits to using 3.

00:28:14.340 --> 00:28:18.860
I think that, you know, there'll be a lot less data loss errors that people have.

00:28:18.860 --> 00:28:21.680
But at the same time, it's, like, really fucking frustrating.

00:28:23.580 --> 00:28:24.760
Yeah, it makes a lot of sense.

00:28:24.760 --> 00:28:30.880
So how do you think Python 3 would look different if it was 90% use case?

00:28:30.880 --> 00:28:35.300
Like, do you think there would be different pressure applied to it?

00:28:35.300 --> 00:28:37.600
Or would it just be slightly more polished?

00:28:37.600 --> 00:28:40.600
Do you mean if I...

00:28:40.600 --> 00:28:42.720
So, like, with requests, I say that...

00:28:42.720 --> 00:28:49.820
Well, you'll imagine, like, we could snap our fingers and tomorrow, like, 90% of Python projects that are active today are using Python 3.

00:28:49.820 --> 00:28:50.100
Gotcha.

00:28:50.100 --> 00:28:51.680
What would that change?

00:28:51.680 --> 00:28:52.440
What would the world look like?

00:28:52.600 --> 00:28:56.240
Do you think Python 3 would be changed by that?

00:28:56.240 --> 00:28:57.940
Or do you think people would just adapt?

00:28:57.940 --> 00:29:03.780
Like, are there things in Python 3 that just haven't had enough, you know, we need it this way pressure put upon it?

00:29:03.780 --> 00:29:05.100
Oh, I see what you're saying.

00:29:05.100 --> 00:29:11.900
I feel like it is possible for us to have a 90% adoption rate now.

00:29:11.900 --> 00:29:13.660
It just takes a lot of time.

00:29:13.660 --> 00:29:22.080
And really the problem is that Python 3 right now isn't attractive enough to incentivize people to rewrite all their code to work with 3.

00:29:22.080 --> 00:29:24.460
If you have existing code, you know, you're not going to...

00:29:24.460 --> 00:29:26.120
You have to change it in order to get it to work.

00:29:26.860 --> 00:29:38.040
And so Python 3, I do think to get to that point, we either need a lot of time or we need to incentivize users by making something really attractive that looks really nice.

00:29:38.040 --> 00:29:40.780
You know, there's been some talks of, like, what if we remove the gill?

00:29:40.780 --> 00:29:42.160
Would that be attractive enough?

00:29:42.160 --> 00:29:43.680
You know, and stuff like that.

00:29:44.140 --> 00:29:45.540
There's a lot of different options.

00:29:45.540 --> 00:29:48.080
And none of them are very clear at this point.

00:29:48.080 --> 00:29:48.900
Right.

00:29:48.900 --> 00:29:50.100
That's a really interesting idea.

00:29:50.100 --> 00:29:52.360
And I do think you need, like, the killer reason.

00:29:52.360 --> 00:29:52.960
Yeah.

00:29:52.960 --> 00:29:56.580
It forced a lot of people to go to the trouble of actually changing code.

00:29:56.580 --> 00:29:59.260
Like, it's one thing to say, we'll do new projects at Python 3.

00:29:59.260 --> 00:30:05.240
But, you know, how many new projects do people do versus, like, we've had this whole infrastructure for 10 years and now.

00:30:05.680 --> 00:30:06.360
It's so funny.

00:30:06.360 --> 00:30:09.200
I went to go do that recently and it was just so frustrating.

00:30:09.200 --> 00:30:12.060
I think I was using Flask.

00:30:12.060 --> 00:30:12.900
I don't think it has.

00:30:12.900 --> 00:30:16.540
They support 3, but I don't know if it's, like, proper 3 support.

00:30:16.540 --> 00:30:17.900
There was something I was running into.

00:30:17.900 --> 00:30:20.600
And it was just, like, I wanted to throw my computer out the window.

00:30:20.600 --> 00:30:23.100
You know, and it's, like, everything works great with 2.

00:30:23.100 --> 00:30:24.100
Why should I have to deal with this?

00:30:24.100 --> 00:30:24.620
So I don't.

00:30:24.620 --> 00:30:26.880
And that's what everybody does because they don't.

00:30:26.880 --> 00:30:29.160
So it'll be interesting to see what happens.

00:30:29.160 --> 00:30:34.480
I have faith that the community will, you know, whatever happens is what is intended to happen.

00:30:34.680 --> 00:30:35.700
You know, it'll be for the best.

00:30:35.700 --> 00:30:37.640
Yeah.

00:30:37.640 --> 00:30:38.740
I agree.

00:30:38.740 --> 00:30:45.380
I think it's just a little unhealthy that there's such, like, the forward progress is kind of being put on the language on 3.

00:30:45.380 --> 00:30:48.480
But a lot of the real work is still being done in 2.

00:30:48.480 --> 00:30:51.760
And it just seems like that can't be a real positive thing.

00:30:51.760 --> 00:30:52.100
Yeah.

00:30:52.100 --> 00:30:57.240
And to me, the biggest problem is that we stand up and preach, you know, PEP20, the Xenopython, all the time.

00:30:57.240 --> 00:31:01.640
And one of the best ones in there is there should be one and only one obvious way to do it.

00:31:01.820 --> 00:31:05.340
And you go to python.org and you want to go download Python.

00:31:05.340 --> 00:31:08.860
And you have to pick Python 2 or Python 3.

00:31:08.860 --> 00:31:09.920
And it's like, what?

00:31:09.920 --> 00:31:11.160
No.

00:31:11.160 --> 00:31:15.140
You know, like, it's confusing for new users.

00:31:15.460 --> 00:31:18.260
And so you have a lot of new users that are using 3.

00:31:18.260 --> 00:31:19.960
And they're actually really adamant about 3.

00:31:20.340 --> 00:31:29.820
So if you go onto, like, Reddit or Hacker News and you see anything about Python 2, you'll have all these people that are, like, bashing them and being like, why aren't you using 3, man?

00:31:29.820 --> 00:31:31.040
That's so old.

00:31:31.040 --> 00:31:32.560
And it's like, who are these people?

00:31:32.560 --> 00:31:35.900
Because I go to conferences and I meet all the Python developers that go to conferences.

00:31:35.900 --> 00:31:37.940
And those people aren't at the conferences.

00:31:37.940 --> 00:31:39.580
And it took me a while to figure it out.

00:31:39.640 --> 00:31:40.840
It's the new people.

00:31:40.840 --> 00:31:47.940
Because when you're new and you're learning to code and it's like your hobby, you're, like, online all day, like, typing on Hacker News and on Reddit, you know?

00:31:47.940 --> 00:31:49.140
So there's, like...

00:31:49.140 --> 00:31:50.560
If you're not busy, you can go complain.

00:31:50.560 --> 00:31:51.320
Yeah, exactly.

00:31:51.560 --> 00:31:54.900
So, you know, the people who work for companies, they're using 2, you know?

00:31:54.900 --> 00:31:57.900
But, you know, the new kids are starting to use 3.

00:31:57.900 --> 00:32:02.000
And I would like for that to be the same community and not two different communities.

00:32:02.000 --> 00:32:04.520
And it appears as though at this time there are two different communities.

00:32:04.520 --> 00:32:05.840
So I'm just...

00:32:05.840 --> 00:32:08.460
I just want us to be unified instead of separated.

00:32:08.460 --> 00:32:09.160
Yeah.

00:32:09.160 --> 00:32:09.960
Well, that makes sense.

00:32:09.960 --> 00:32:13.260
I mean, if you're starting a new project, you have the flexibility and whatever.

00:32:13.260 --> 00:32:20.480
But if you're working on older technology that, you know, was written before Python 3 even came out, there's maybe no choice at all, right?

00:32:20.580 --> 00:32:21.100
It's...

00:32:21.100 --> 00:32:22.240
That's what you're going to be using.

00:32:22.240 --> 00:32:27.460
So a lot of the companies I visit, they're still Python 2 as well, of course.

00:32:27.460 --> 00:32:27.880
Yeah.

00:32:27.880 --> 00:32:31.900
I don't know any major companies that are using 3 at all, but I'm sure there are some.

00:32:31.900 --> 00:32:33.000
Yeah.

00:32:33.000 --> 00:32:36.760
There's a few I've talked to, but I can't...

00:32:36.760 --> 00:32:40.780
I don't want to say it because I might get it wrong and conflate them with other companies I spoke to.

00:32:40.780 --> 00:32:42.560
But yeah, there's a few, but you're right.

00:32:42.560 --> 00:32:44.300
But it's not a large portion.

00:32:44.300 --> 00:32:44.520
Yeah.

00:32:44.520 --> 00:32:49.060
But I'm hopeful that everything will unfold as it's supposed to.

00:32:49.500 --> 00:32:51.200
Did you guys talk about that at the Language Summit?

00:32:51.200 --> 00:32:54.020
It was not brought up as much as you'd think.

00:32:54.020 --> 00:32:54.920
It was more...

00:32:54.920 --> 00:32:56.060
So there was one great talk.

00:32:56.060 --> 00:32:58.920
It was by Jacob, again.

00:32:59.560 --> 00:33:08.740
And he went up on stage and he was kind of just showing some numbers that he has access to on different adoption rates.

00:33:08.740 --> 00:33:10.000
And it was interesting.

00:33:10.000 --> 00:33:15.760
So basically what he said was that, you know, if we want to treat this like a...

00:33:15.760 --> 00:33:16.520
Oh no, it was Glyph.

00:33:16.520 --> 00:33:17.500
Glyph did a talk.

00:33:17.500 --> 00:33:18.100
Sorry.

00:33:18.100 --> 00:33:21.280
Jacob did a great talk on this same subject, but Glyph did a fantastic talk.

00:33:21.280 --> 00:33:22.180
The author of Twisted.

00:33:23.020 --> 00:33:26.760
And he got up there and he was saying, you know, look at this problem space that we have.

00:33:26.760 --> 00:33:29.540
We all agree that it's a problem, right?

00:33:29.540 --> 00:33:30.260
And everyone agrees.

00:33:30.260 --> 00:33:31.300
And he moves forward.

00:33:31.300 --> 00:33:32.380
And he's like, okay.

00:33:32.380 --> 00:33:35.560
So the problem is that we don't know what...

00:33:35.560 --> 00:33:38.640
We don't have anything to measure to see if we're improving on this problem.

00:33:38.640 --> 00:33:42.280
So the first thing we need to do is decide what does...

00:33:42.280 --> 00:33:44.540
You know, when this problem is solved, what does that look like, right?

00:33:44.540 --> 00:33:47.320
So to do that, you have to decide to measure something.

00:33:47.320 --> 00:33:50.740
So, you know, ideally it'd be like 20%.

00:33:50.740 --> 00:33:54.920
You know, so an example metric would be like 50% of Python downloads,

00:33:54.920 --> 00:33:57.880
of package downloads from the GShop or Python 3.

00:33:57.880 --> 00:34:02.780
Or like a majority of the downloads from Python.org for Python versions would be Python 3.

00:34:02.780 --> 00:34:06.080
Like, you know, let's pick something and try to optimize it, basically.

00:34:06.080 --> 00:34:09.460
And that was very much like what he was going for.

00:34:09.460 --> 00:34:13.160
He was like, let's not leave this room until we decide on a metric together.

00:34:13.160 --> 00:34:15.740
Or at least decide that we need a metric, right?

00:34:15.740 --> 00:34:19.400
And so it seemed as though everyone agreed that we needed a metric.

00:34:19.400 --> 00:34:21.760
We didn't even come close to deciding what it was.

00:34:21.760 --> 00:34:24.600
But it was a good discussion.

00:34:24.600 --> 00:34:27.560
And I feel like that there's a lot of merit to that type of thinking.

00:34:27.560 --> 00:34:31.800
You know, treating us like a software project instead of like a hobby project, basically.

00:34:32.060 --> 00:34:32.420
Right.

00:34:32.420 --> 00:34:37.940
Well, yeah, let's make this a data-driven problem that we can apply graphs and science and statistics to or whatever, right?

00:34:37.940 --> 00:34:38.300
Exactly.

00:34:38.300 --> 00:34:38.660
Awesome.

00:34:38.660 --> 00:34:39.080
Exactly.

00:34:39.080 --> 00:34:41.040
So I think that's going to happen this year.

00:34:41.040 --> 00:34:42.460
It got everyone thinking, so.

00:34:42.460 --> 00:34:43.480
Yeah, that's cool.

00:34:43.480 --> 00:34:48.560
Like, one thought comes to mind is like track the number of requests from PIP2 versus PIP3.

00:34:48.560 --> 00:34:49.020
Precisely.

00:34:49.020 --> 00:34:51.720
Just, you know, just not necessarily even the downloads.

00:34:51.720 --> 00:34:56.160
Just the number of like how much are people using this version versus that version, right?

00:34:56.160 --> 00:34:56.880
Those kinds of things.

00:34:56.880 --> 00:34:58.020
You should totally be able to track that.

00:34:58.020 --> 00:35:00.720
Yeah, and so there's some really great blog posts that have come out about this.

00:35:00.720 --> 00:35:03.220
Donald Stuff just did one today.

00:35:03.220 --> 00:35:05.860
His domain is caremad.io, I believe.

00:35:05.860 --> 00:35:10.420
And he just did his big blog post breaking down all the PIPI numbers.

00:35:11.180 --> 00:35:13.800
So I highly recommend checking that out because it shows you it's weird.

00:35:13.800 --> 00:35:20.380
Web people are adopting Python 3 faster than the rest of the Python community by about 4%, which is pretty interesting.

00:35:20.380 --> 00:35:22.260
That is really interesting.

00:35:22.260 --> 00:35:28.260
I think that is something I would have not predicted but would say, yeah, that seems like you're telling me something true.

00:35:28.260 --> 00:35:32.420
You know, just hearing out of the blue is because you have so much more control over the server, right?

00:35:32.460 --> 00:35:33.920
You manage a thing.

00:35:33.920 --> 00:35:38.820
On the other hand, if you're shipping it out to the world, you don't know where it's going to land, right?

00:35:38.820 --> 00:35:39.200
Exactly.

00:35:39.200 --> 00:35:41.800
Yeah, there's a scientific Python community.

00:35:41.800 --> 00:35:46.560
And I think that they're having smaller amounts of 3 adoption, but I have to learn more.

00:35:46.560 --> 00:35:47.540
Yeah, okay, interesting.

00:35:47.540 --> 00:35:48.980
Like the IPython guys and so on.

00:35:48.980 --> 00:35:49.760
Yeah, and Continuum.

00:35:49.760 --> 00:35:51.920
And like they support 3 with like Anaconda.

00:35:52.300 --> 00:35:59.960
I think that is like a new thing that people are still adjusting to because these scientists, you know, if you're a data scientist, you're probably not a programmer.

00:35:59.960 --> 00:36:03.500
And, you know, you're someone who can use these tools.

00:36:03.500 --> 00:36:05.080
And so you don't care if it's 2 or 3.

00:36:05.080 --> 00:36:06.640
You just want to get your job done, basically.

00:36:06.640 --> 00:36:10.140
So I think 3 has a lot of political buy-in, basically.

00:36:10.140 --> 00:36:10.820
Cool.

00:36:10.820 --> 00:36:12.340
So you said you work at Heroku, right?

00:36:12.340 --> 00:36:12.520
I do.

00:36:12.520 --> 00:36:14.240
I'm the Python overlord at Heroku.

00:36:14.240 --> 00:36:16.720
It's good to be an overlord.

00:36:16.720 --> 00:36:18.140
I enjoy it.

00:36:18.140 --> 00:36:19.440
So what do you do in there?

00:36:19.440 --> 00:36:21.120
What do you guys do with Python at Heroku?

00:36:21.120 --> 00:36:24.820
So I am basically, you know, Heroku supports a number of languages.

00:36:24.820 --> 00:36:28.420
We have like Ruby, Java, Node, PHP support, Python.

00:36:28.420 --> 00:36:31.760
And I am just in charge of everything related to Python.

00:36:31.760 --> 00:36:34.320
So I write a lot of documentation.

00:36:34.320 --> 00:36:37.840
I help customers and I just improve the product.

00:36:37.840 --> 00:36:43.820
And if you do like get push Heroku and like you have a Python app, then all the code that runs that is me.

00:36:43.820 --> 00:36:49.000
And then I go to speak to conferences and, you know, I'm on a podcast.

00:36:49.000 --> 00:36:50.980
This is technically work, I guess.

00:36:50.980 --> 00:36:53.780
It's a good gig.

00:36:53.780 --> 00:36:54.480
Yeah, this is work.

00:36:54.480 --> 00:36:54.800
Yeah.

00:36:54.800 --> 00:36:55.720
That's awesome.

00:36:55.720 --> 00:37:02.440
Yeah, it's really cool to be kind of out there as the community front for a cool company like Heroku.

00:37:02.440 --> 00:37:03.480
Yeah, I enjoy it.

00:37:03.480 --> 00:37:05.480
Do you guys use it a lot internally?

00:37:05.480 --> 00:37:08.500
Like what can you talk about what technology you have for yourselves?

00:37:08.500 --> 00:37:08.880
Yeah.

00:37:08.960 --> 00:37:11.800
So there's a couple different teams internally that use a lot of Python.

00:37:11.800 --> 00:37:17.840
There's specific spots in Heroku that are just kind of infrastructure that are written in Python.

00:37:17.840 --> 00:37:25.700
So if all of our Postgres servers get continuously backed up, the wall logs get continuously backed up to S3.

00:37:26.260 --> 00:37:29.140
And it's written with a tool called Wally, which we have open sourced.

00:37:29.140 --> 00:37:32.140
And if you go onto our GitHub, you'll see it's written in Python.

00:37:32.140 --> 00:37:35.020
And a couple different things.

00:37:35.020 --> 00:37:44.300
If you do a git push to us, I believe over SSH, I believe all of those are received by a twisted conch shell, which is pretty cool in Python.

00:37:44.920 --> 00:37:48.140
But there's a couple different teams internally that also use a lot of Python.

00:37:48.140 --> 00:37:53.960
There's the Heroku Connect team, which lets you interact with your Salesforce's data over Postgres.

00:37:53.960 --> 00:37:57.600
It gives you a Postgres database to read and write all your Salesforce data to.

00:37:57.600 --> 00:37:59.780
And that's like a Django app.

00:37:59.780 --> 00:38:04.000
And there's a couple other teams that, you know, a lot of tools that are built with Python.

00:38:04.000 --> 00:38:04.860
Cool.

00:38:04.860 --> 00:38:06.160
That sounds really interesting.

00:38:06.160 --> 00:38:06.700
Yeah.

00:38:06.700 --> 00:38:07.500
It's pretty great.

00:38:07.500 --> 00:38:12.940
So before we go, let me ask you a question that asks, you know, all my guests.

00:38:12.940 --> 00:38:17.020
In addition to requests, what is your favorite package on PyPy?

00:38:17.020 --> 00:38:18.740
I have to pick one?

00:38:18.740 --> 00:38:21.160
Well, give me a couple that you really like.

00:38:21.160 --> 00:38:24.280
Just kind of mostly when I just draw people's attention to stuff that's cool.

00:38:24.280 --> 00:38:25.240
Okay.

00:38:25.240 --> 00:38:27.280
So one of my favorites is called DocOpt.

00:38:27.280 --> 00:38:28.980
D-O-C-O-P-T.

00:38:28.980 --> 00:38:30.940
And what that is.

00:38:30.940 --> 00:38:35.440
So if you want to do a command line tool, you have to parse command line arguments.

00:38:35.440 --> 00:38:37.960
And to do that, it's not very fun.

00:38:37.960 --> 00:38:41.740
There's arg parse and opt parse that are built into the standard library.

00:38:41.740 --> 00:38:42.680
And they're both terrible.

00:38:43.680 --> 00:38:45.720
I wrote something that makes it a little easier.

00:38:45.720 --> 00:38:46.940
But this guy killed it.

00:38:46.940 --> 00:38:55.760
So what he did was, it turns out that the help string that's printed out when you do like command dash H, right, on the command line.

00:38:55.760 --> 00:38:59.700
You know how you see those like little brackets and stuff that like tells you all the different options?

00:39:00.580 --> 00:39:02.800
That is an ANSI standard, it turns out.

00:39:03.600 --> 00:39:07.780
And so what he does is you just you write the help script.

00:39:07.780 --> 00:39:09.480
Like you write the help page.

00:39:09.480 --> 00:39:11.480
And you know, and you like say all the different options.

00:39:11.480 --> 00:39:15.640
And you write, you know, the little arguments and which ones are optional and which ones are positional and all this stuff.

00:39:15.640 --> 00:39:20.260
And from that, he completely writes all the parsing code for you.

00:39:20.640 --> 00:39:23.740
So you just give it a string and you just say, give me my arguments.

00:39:23.740 --> 00:39:27.200
And it gives you a dictionary with all the stuff and the booleans and the true falses.

00:39:27.200 --> 00:39:28.000
And it's incredible.

00:39:28.000 --> 00:39:28.760
I love it.

00:39:28.760 --> 00:39:30.920
And that is really fantastic.

00:39:30.920 --> 00:39:31.560
Yeah.

00:39:31.560 --> 00:39:34.300
And it's been it's been ported to like every language.

00:39:34.580 --> 00:39:36.320
So but I think Python is the default one.

00:39:36.320 --> 00:39:38.620
So it's I'm a big fan of that project.

00:39:38.620 --> 00:39:39.580
Right.

00:39:39.580 --> 00:39:40.000
That's cool.

00:39:40.000 --> 00:39:42.200
I always feel like I'm reinventing the wheel when I go over there.

00:39:42.200 --> 00:39:43.500
It's like, OK, start from scratch.

00:39:43.500 --> 00:39:45.320
So that's great to bring that in.

00:39:45.320 --> 00:39:45.960
Yeah.

00:39:45.960 --> 00:39:47.360
Let's see.

00:39:47.360 --> 00:39:50.020
Another one that I am excited about but haven't used yet.

00:39:50.020 --> 00:39:51.900
It's called Click by Armin Roeneker.

00:39:51.900 --> 00:39:54.980
And I'm sure you'll talk to him about that when you do your podcast with him.

00:39:54.980 --> 00:39:59.720
But a couple of years ago, I wrote a library for myself called Clint.

00:39:59.720 --> 00:40:03.080
And Clint was a command line application tools.

00:40:03.740 --> 00:40:05.120
It's a set of utilities, basically.

00:40:05.120 --> 00:40:10.780
I had a bunch of cool stuff in there like, you know, prompting for yes and no, parsing

00:40:10.780 --> 00:40:16.520
arguments, writing files to the home directory on every type of computer, you know.

00:40:16.520 --> 00:40:21.500
And I had my favorite module that I had in there was called eng.join.

00:40:21.500 --> 00:40:24.100
So you would give it, you know, a list of strings.

00:40:24.100 --> 00:40:30.680
And then it would it would join them properly with like an Oxford comma and conjunctions, you

00:40:30.680 --> 00:40:30.860
know.

00:40:30.860 --> 00:40:32.220
Oh, nice.

00:40:32.220 --> 00:40:32.620
Yeah.

00:40:32.620 --> 00:40:33.680
It's like really cool code.

00:40:33.680 --> 00:40:37.960
But it kind of I need to separate all that stuff out because it's kind of a dead project.

00:40:37.960 --> 00:40:38.960
I haven't used it in years.

00:40:38.960 --> 00:40:43.300
And click is Armin's approach to the same problem.

00:40:43.300 --> 00:40:45.240
It doesn't do all the same stuff.

00:40:45.240 --> 00:40:47.860
But it's like, you know, Armin does amazing code.

00:40:47.860 --> 00:40:52.000
And so this is a project that just is like, if you're going to write command line applications,

00:40:52.000 --> 00:40:53.140
you need to use click.

00:40:53.140 --> 00:40:54.960
So I'm really excited about that.

00:40:54.960 --> 00:40:55.460
Cool.

00:40:55.460 --> 00:40:56.320
Oh, excellent.

00:40:56.320 --> 00:40:57.580
Those are really nice.

00:40:58.000 --> 00:41:04.720
If I wanted to get started with Heroku as a Python, let's say I'm writing a Django app or Flask or something.

00:41:04.720 --> 00:41:05.500
What do I do?

00:41:05.500 --> 00:41:09.360
Well, you go to Heroku.com and you sign up for an account and it should tell you what to do.

00:41:09.360 --> 00:41:12.020
Awesome.

00:41:12.580 --> 00:41:12.900
Okay.

00:41:12.900 --> 00:41:14.600
So everyone check that out.

00:41:14.600 --> 00:41:15.060
Yeah.

00:41:15.060 --> 00:41:19.700
And if you have any questions about Heroku and Python, feel free to reach out to me or tweet at me or whatever.

00:41:19.700 --> 00:41:20.120
Yeah.

00:41:20.120 --> 00:41:20.540
Very cool.

00:41:20.540 --> 00:41:22.700
Any final shout outs you want to give?

00:41:22.700 --> 00:41:24.860
Off the top of my head?

00:41:24.860 --> 00:41:25.540
What do you think?

00:41:25.540 --> 00:41:28.820
I'm going to shout out to you for making this awesome podcast.

00:41:28.820 --> 00:41:29.960
Oh, thank you very much.

00:41:29.960 --> 00:41:30.600
I appreciate it.

00:41:30.600 --> 00:41:31.080
You're welcome.

00:41:31.280 --> 00:41:33.060
The world needs more Python podcasts.

00:41:33.060 --> 00:41:33.860
I agree.

00:41:33.860 --> 00:41:34.860
You're doing good work.

00:41:34.860 --> 00:41:35.560
Yeah.

00:41:35.560 --> 00:41:39.460
My original goal was not to start a Python podcast, but just to talk to some of them.

00:41:39.460 --> 00:41:43.620
And I found that they all had their last show like a year ago.

00:41:43.620 --> 00:41:44.240
I'm like, wait a minute.

00:41:44.240 --> 00:41:45.140
That can't be right.

00:41:45.140 --> 00:41:45.760
Nice.

00:41:45.760 --> 00:41:46.920
Looked and looked and looked and looked.

00:41:46.920 --> 00:41:47.300
Yeah.

00:41:47.300 --> 00:41:48.620
It's sadly right.

00:41:48.620 --> 00:41:49.400
Mine included.

00:41:49.400 --> 00:41:53.460
I have a one episode podcast, but it was great.

00:41:53.460 --> 00:41:54.660
It had 6,000 listens.

00:41:54.660 --> 00:41:55.720
That's awesome.

00:41:55.720 --> 00:41:57.620
Where do people find it?

00:41:57.620 --> 00:41:59.080
It's called Import This.

00:41:59.080 --> 00:42:00.340
Import This.

00:42:00.340 --> 00:42:01.240
It's called Skainer and I.

00:42:01.240 --> 00:42:04.000
And we have two other episodes recorded.

00:42:04.000 --> 00:42:05.420
It's just a matter of editing time.

00:42:05.420 --> 00:42:06.740
I would like to get a sponsor.

00:42:06.740 --> 00:42:09.900
So if we got a sponsor, it would be easier to edit.

00:42:09.900 --> 00:42:12.060
It would boost you back into it.

00:42:12.060 --> 00:42:12.540
Yeah.

00:42:12.540 --> 00:42:16.000
It's just like it took me eight hours to edit the first episode because I was doing like

00:42:16.000 --> 00:42:17.040
Radiolab quality.

00:42:17.040 --> 00:42:25.780
So I either need to just settle for lower quality or ideally I'd be able to pay a company to edit

00:42:25.780 --> 00:42:26.300
it for me.

00:42:26.300 --> 00:42:27.200
But I don't know.

00:42:27.200 --> 00:42:27.540
We'll see.

00:42:27.540 --> 00:42:29.080
Exactly.

00:42:29.080 --> 00:42:29.860
That would be nice.

00:42:29.980 --> 00:42:31.920
I think editing is actually the most work.

00:42:31.920 --> 00:42:32.660
It is.

00:42:32.660 --> 00:42:33.280
Yeah.

00:42:33.280 --> 00:42:34.060
It's ridiculous.

00:42:34.060 --> 00:42:36.860
So we'll get back to it eventually.

00:42:36.860 --> 00:42:38.840
Definitely.

00:42:38.840 --> 00:42:39.500
Well, you should.

00:42:39.500 --> 00:42:39.880
All right.

00:42:39.880 --> 00:42:41.440
Kenneth, thank you so much for being on the show.

00:42:41.440 --> 00:42:42.640
It's been really interesting.

00:42:42.640 --> 00:42:46.960
And I especially appreciate like the insight into the language summit and stuff like that.

00:42:46.960 --> 00:42:47.420
Absolutely.

00:42:47.420 --> 00:42:48.300
Thanks for having me.

00:42:48.300 --> 00:42:48.740
Yeah.

00:42:48.740 --> 00:42:49.120
You bet.

00:42:49.120 --> 00:42:50.720
And I will talk to you later.

00:42:50.720 --> 00:42:51.440
Have a good one.

00:42:52.760 --> 00:42:55.680
This has been another episode of talk Python to me.

00:42:55.980 --> 00:42:57.800
Today's guest was Kenneth Wright.

00:42:57.800 --> 00:42:58.860
Thanks, Kenneth.

00:42:58.860 --> 00:43:04.340
Remember, you can find the links from the show at talkpythontimmy.com slash episodes

00:43:04.340 --> 00:43:06.300
slash show slash six.

00:43:06.680 --> 00:43:11.640
And if you're feeling generous, please check out our Patreon campaign at patreon.com slash

00:43:11.640 --> 00:43:15.720
mkennedy or work with your company to encourage them to sponsor an episode.

00:43:15.720 --> 00:43:17.680
Be sure to subscribe to the show.

00:43:17.680 --> 00:43:23.280
Visit the website and choose subscribe in iTunes or grab the episode RSS feed and drop it into

00:43:23.280 --> 00:43:24.480
your favorite podcatcher.

00:43:24.480 --> 00:43:26.760
You can find both these in the footer of every page.

00:43:26.760 --> 00:43:28.300
This is your host, Michael Kennedy.

00:43:28.300 --> 00:43:29.460
Thanks for listening.

00:43:29.460 --> 00:43:50.920
Stay tuned.

00:43:50.920 --> 00:43:51.100
.

