forked from mikeckennedy/talk-python-transcripts
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy path006_Requests_PyCon_and_Pythons_future_with_Kenneth_Rietz.vtt
2726 lines (1817 loc) · 73 KB
/
006_Requests_PyCon_and_Pythons_future_with_Kenneth_Rietz.vtt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
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, 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, 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.