WEBVTT

00:00:00.001 --> 00:00:05.800
A strong community is one of Python's superpowers, and that's what this episode of Talk Python To Me is all about.

00:00:05.800 --> 00:00:09.480
It's PyLadies and Python Software Foundation with Lynn Root.

00:00:09.480 --> 00:00:14.420
Episode number 15, recorded Thursday, June 6, 2015.

00:00:14.420 --> 00:00:43.460
Hello, and welcome to Talk Python To Me,

00:00:43.460 --> 00:00:48.360
a weekly podcast on Python, the language, the libraries, the ecosystem, and the personalities.

00:00:48.360 --> 00:00:50.340
This is your host, Michael Kennedy.

00:00:50.340 --> 00:00:52.840
Follow me on Twitter, where I'm @mkennedy,

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

00:00:57.760 --> 00:01:02.880
This episode, we'll be talking to Lynn Root about PyLadies, Python Software Foundation,

00:01:02.880 --> 00:01:06.680
Python at Spotify, and the Python community at large.

00:01:06.680 --> 00:01:11.260
I'm really fortunate to have CodeChip and Hired sponsoring the show.

00:01:11.400 --> 00:01:13.660
Let me take just a few seconds to tell you about them.

00:01:13.660 --> 00:01:19.320
CodeChip is a platform for continuous integration and continuous delivery as a service.

00:01:19.320 --> 00:01:21.940
They encourage you to always keep shipping.

00:01:21.940 --> 00:01:25.300
Please take a moment and check them out at codeChip.com,

00:01:25.300 --> 00:01:27.680
or follow them on Twitter where they're at CodeChip.

00:01:28.720 --> 00:01:30.680
Hired wants to help you find your dream job.

00:01:30.680 --> 00:01:34.320
Hired is built specifically for developers looking for new opportunities.

00:01:34.320 --> 00:01:39.420
Check them out and get a very special offer at hired.com slash talkpythontome.

00:01:39.600 --> 00:01:43.520
And you'll find them on Twitter where they're at hired underscore HQ.

00:01:43.520 --> 00:01:47.180
Before we get to the show, I have a quick piece of news for you.

00:01:47.180 --> 00:01:51.180
Thanks to everyone who backed my Talk Python To Me t-shirt Kickstarter.

00:01:51.180 --> 00:01:55.660
This week is the last week to join and get your shirt and promotional slot.

00:01:55.660 --> 00:01:58.940
Check it out at bit.ly slash python shirt.

00:01:58.940 --> 00:02:01.460
Now, let's get right on to the interview with Lynn.

00:02:02.360 --> 00:02:03.620
Let me introduce Lynn.

00:02:03.620 --> 00:02:07.600
Lynn Root is an insomniatic software engineer for Spotify,

00:02:07.600 --> 00:02:10.980
the founder of the San Francisco chapter of PyLadies,

00:02:10.980 --> 00:02:14.020
a board member of the Python Software Foundation,

00:02:14.020 --> 00:02:16.860
and a member of the Django Software Foundation.

00:02:16.860 --> 00:02:18.600
Lynn, welcome to the show.

00:02:18.600 --> 00:02:20.140
Oh, thank you so much.

00:02:20.140 --> 00:02:23.400
Yeah, we have a lot to talk about today, a bunch of different topics.

00:02:23.400 --> 00:02:26.940
And, you know, I've read a little bit of what you've written online

00:02:26.940 --> 00:02:28.380
and checked out some of your talks.

00:02:28.380 --> 00:02:30.540
And you have a lot of interesting things going on.

00:02:30.540 --> 00:02:32.520
Yeah, I feel like I'm juggling a lot.

00:02:32.520 --> 00:02:33.340
But thank you.

00:02:33.340 --> 00:02:36.420
Yeah, the context switching is hard sometimes, isn't it?

00:02:36.420 --> 00:02:37.800
It really is.

00:02:37.800 --> 00:02:41.980
Yeah, but I think in the end, it's worth it to be part of a lot of exciting things.

00:02:41.980 --> 00:02:47.700
So let me be one of the first podcasts to say congratulations.

00:02:47.700 --> 00:02:51.260
I'm being reelected to the Python Software Foundation board.

00:02:51.260 --> 00:02:53.060
That happened just a couple days ago, right?

00:02:53.060 --> 00:02:53.920
Right, right.

00:02:53.920 --> 00:02:54.780
Thank you so much.

00:02:54.780 --> 00:02:55.080
Yeah.

00:02:55.080 --> 00:02:56.960
Yeah, you must be excited.

00:02:56.960 --> 00:02:58.420
How long have you been on the board?

00:02:58.920 --> 00:03:00.560
This will be my third year.

00:03:00.560 --> 00:03:02.480
So I've been on for the previous two years.

00:03:02.480 --> 00:03:03.020
Okay.

00:03:03.020 --> 00:03:03.920
Oh, very cool.

00:03:03.920 --> 00:03:04.500
Very cool.

00:03:04.500 --> 00:03:07.080
So I want to talk about that more.

00:03:07.080 --> 00:03:08.840
But let's start at the beginning.

00:03:08.840 --> 00:03:15.580
You've written a couple really cool articles about sort of your path into engineering

00:03:15.580 --> 00:03:17.880
and into programming and into Python.

00:03:18.880 --> 00:03:23.460
You know, you're doing a lot of work to help other people walk that path and take that journey

00:03:23.460 --> 00:03:24.200
in their own way.

00:03:24.200 --> 00:03:28.260
And I think it's really interesting to maybe cover some of that or talk a little bit about

00:03:28.260 --> 00:03:28.400
it.

00:03:28.400 --> 00:03:30.440
Can you maybe tell us how you got here?

00:03:30.440 --> 00:03:31.920
Sure, certainly.

00:03:32.840 --> 00:03:35.880
So yeah, I actually have a business degree.

00:03:35.880 --> 00:03:39.060
I went to Babson College in Massachusetts.

00:03:39.060 --> 00:03:42.460
And I graduated with like econ finance.

00:03:42.460 --> 00:03:48.000
But I don't know if you remember, but in like 2008, the economy kind of sucked.

00:03:48.560 --> 00:03:50.660
And that's the year I graduated in.

00:03:50.660 --> 00:03:57.140
So it was really, really kind of difficult to get a decent job in finance.

00:03:57.140 --> 00:04:00.500
But in terms of decent like paying.

00:04:01.500 --> 00:04:07.880
So I actually I started working as an analyst for a small bank for a few years.

00:04:07.880 --> 00:04:15.620
The economy is still crappy, but I wanted to get my master's degree in financial engineering.

00:04:15.620 --> 00:04:23.960
And Berkeley here in California actually has a really good program, like a one year master's

00:04:23.960 --> 00:04:25.880
of engineering or financial engineering.

00:04:25.880 --> 00:04:29.940
And but in order to apply, you kind of had to like know how to code.

00:04:30.940 --> 00:04:38.340
And me being a sort of a fresh graduate and like thinking, oh, I could still like learn

00:04:38.340 --> 00:04:39.000
how to study.

00:04:39.000 --> 00:04:39.580
Right.

00:04:39.580 --> 00:04:41.620
I just how hard can it be?

00:04:41.620 --> 00:04:42.000
Come on.

00:04:42.000 --> 00:04:42.480
Right.

00:04:42.480 --> 00:04:43.080
Yeah, exactly.

00:04:43.080 --> 00:04:50.840
I decided to enroll in like a Harvard's extension program, just like their intro to CS class.

00:04:50.840 --> 00:04:54.620
And so that was like the fall of 2011.

00:04:54.620 --> 00:04:58.180
And let me tell you, C is really hard.

00:04:58.180 --> 00:04:59.260
And I really sucked.

00:04:59.900 --> 00:05:03.140
Like I failed like a lot, all the midterms.

00:05:03.140 --> 00:05:07.380
I was crying a lot during the weekly homeworks.

00:05:07.380 --> 00:05:10.900
And it was just it was really tough.

00:05:10.900 --> 00:05:13.140
Were you wondering what you had gotten yourself into?

00:05:13.140 --> 00:05:14.240
Yeah, seriously.

00:05:14.240 --> 00:05:18.900
It was just like I literally just like was hoping to get a passing grade just to like get this

00:05:18.900 --> 00:05:19.760
over and done with.

00:05:20.840 --> 00:05:21.280
Yeah.

00:05:21.280 --> 00:05:21.320
Yeah.

00:05:21.320 --> 00:05:24.860
But like I couldn't who would subject themselves to this kind of thing.

00:05:24.860 --> 00:05:34.300
And but but oddly enough, towards the end of the semester, I saw some Python code and coming

00:05:34.300 --> 00:05:36.040
from C to Python.

00:05:36.040 --> 00:05:40.200
I was just like, wow, I like actually understand what's being written.

00:05:40.200 --> 00:05:41.420
I actually understand the logic.

00:05:41.420 --> 00:05:43.520
Like I can see what's going on here.

00:05:44.020 --> 00:05:49.520
So I actually decided to do my final project for the course in Python.

00:05:49.520 --> 00:05:54.560
I made a little Django website app that looking back now is really crappy code.

00:05:54.560 --> 00:05:56.300
But it worked.

00:05:56.620 --> 00:06:02.900
And somehow I got like an A minus in the course, even though I failed both midterms.

00:06:02.900 --> 00:06:04.480
That's amazing.

00:06:04.480 --> 00:06:07.000
The professor must have thought, well, she's come a long way.

00:06:07.000 --> 00:06:07.780
Look what she built.

00:06:07.780 --> 00:06:10.780
You know, let's just forget about about those bad midterms.

00:06:10.780 --> 00:06:11.740
Right.

00:06:11.740 --> 00:06:12.160
Exactly.

00:06:12.160 --> 00:06:16.940
I wonder if they ever questioned like the legitimacy of that code.

00:06:16.940 --> 00:06:19.300
Like, how could she come from this to that kind of thing?

00:06:19.300 --> 00:06:22.400
But like I really wrote it like I also wrote that crappy code.

00:06:22.980 --> 00:06:28.940
But anyways, I found it a lot more satisfying to like stay up at like 3 a.m.

00:06:28.940 --> 00:06:34.860
trying to like debug like this Django app than like looking at Excel spreadsheets,

00:06:34.860 --> 00:06:37.420
you know, like eight hours a day, five days a week.

00:06:37.420 --> 00:06:46.320
So I basically decided that I wanted to continue to learn but not pay Harvard another $2,000 for a course.

00:06:46.320 --> 00:06:49.720
So at the time I was in San Francisco.

00:06:49.720 --> 00:06:51.500
I still am in San Francisco.

00:06:51.760 --> 00:06:57.760
But at the time I kind of approached Women Who Code, the local meetup group here,

00:06:57.760 --> 00:07:02.720
and see who else could like would be interested in learning Python with me.

00:07:02.720 --> 00:07:10.080
So I started like a study group with other women and kind of led projects.

00:07:10.080 --> 00:07:15.540
Basically, I would do the project the week before and then sort of present it and we'd work through it together.

00:07:16.140 --> 00:07:16.940
That's really cool.

00:07:16.940 --> 00:07:20.900
And I think I recall from your article, there were quite a few people there, right?

00:07:20.900 --> 00:07:22.440
It was like 40 women or something like that?

00:07:22.440 --> 00:07:23.400
Yeah, exactly.

00:07:23.400 --> 00:07:24.020
That's awesome.

00:07:24.020 --> 00:07:24.620
Yeah.

00:07:24.620 --> 00:07:29.800
To be honest, I don't know if they came for like the free food at Dropbox or if they really wanted to know Python.

00:07:30.260 --> 00:07:33.100
But it was awesome to see them there.

00:07:33.100 --> 00:07:40.880
And there's a lot of great interest in continuing on because I had only planned like eight weeks once a week.

00:07:41.880 --> 00:07:46.460
And so that actually turned into like two PyLadies of San Francisco.

00:07:46.460 --> 00:07:48.200
I sort of stole those women.

00:07:48.200 --> 00:07:54.400
Not really steal, but like they helped me build sort of PyLadies of San Francisco.

00:07:54.680 --> 00:08:00.880
From there, I was able to subject other people to wanting to learn how to code with me.

00:08:00.880 --> 00:08:03.700
And I guess the rest is history.

00:08:03.700 --> 00:08:07.020
I sort of just kind of started talking about what I was doing.

00:08:07.020 --> 00:08:14.880
Kind of from the point of view of me being sort of selfish and like wanting to learn how to code with others with me.

00:08:15.180 --> 00:08:21.600
But it sort of morphed into like getting women involved in coding and me speaking about that.

00:08:21.600 --> 00:08:25.640
And that really helped me like land my first engineering job.

00:08:25.640 --> 00:08:26.400
That's really cool.

00:08:26.400 --> 00:08:29.360
You know, I do a lot of training for my job as well.

00:08:29.360 --> 00:08:38.380
And I think this pressure to put together a presentation, to learn it well enough to like present it to others, is a super powerful way to learn for yourself, actually.

00:08:38.380 --> 00:08:39.200
Right.

00:08:39.200 --> 00:08:39.480
Yeah.

00:08:39.480 --> 00:08:42.740
You better have the answer to the questions that you don't even think of right now, right?

00:08:42.740 --> 00:08:43.420
Exactly.

00:08:43.420 --> 00:08:44.960
Yeah.

00:08:44.960 --> 00:08:45.080
Yeah.

00:08:45.080 --> 00:08:46.120
Yeah.

00:08:46.120 --> 00:08:49.620
So you think that really helped you sort of gain the skills you needed?

00:08:49.620 --> 00:08:51.080
It definitely did.

00:08:51.080 --> 00:09:00.660
At least like helped me like understand what was going on rather than just copying, pasting code, which is like not a really good way to learn how to code.

00:09:00.660 --> 00:09:01.160
Sure.

00:09:01.160 --> 00:09:04.860
I think that happens more in this industry than people really want to admit, to be honest.

00:09:04.860 --> 00:09:05.920
I agree.

00:09:05.920 --> 00:09:11.460
I mean, I fully admit that there are some like Stack Overflow posts that I just copied and pasted.

00:09:11.460 --> 00:09:14.500
And it just happened to work and went on from there.

00:09:14.580 --> 00:09:16.740
So yeah, I believe it happens a lot.

00:09:16.740 --> 00:09:17.980
Yeah, I think so.

00:09:31.980 --> 00:09:37.500
CodeChip is a hosted continuous delivery service focused on speed, security, and customizability.

00:09:38.100 --> 00:09:43.340
You can set up continuous integration in a matter of seconds and automatically deploy when your tests have passed.

00:09:43.340 --> 00:09:46.580
CodeChip supports your GitHub and Bitbucket projects.

00:09:46.580 --> 00:09:49.360
You can get started with CodeChip's free plan today.

00:09:49.360 --> 00:09:57.840
Should you decide to go with a premium plan, Talk Python listeners can save 20% off any plan for the next three months by using the code TALKPython.

00:09:58.260 --> 00:09:59.580
All caps, no spaces.

00:09:59.580 --> 00:10:06.940
Check them out at CodeChip.com and tell them thanks for sponsoring the show on Twitter where they're at CodeChip.

00:10:12.620 --> 00:10:16.020
When you're doing C++ or C, it was just really frustrating.

00:10:16.020 --> 00:10:20.060
And just the simplicity of Python really resonated, huh?

00:10:20.060 --> 00:10:21.020
Definitely.

00:10:21.020 --> 00:10:21.620
Yeah.

00:10:21.620 --> 00:10:28.420
It's just like, oh, I can actually understand that you're defining a function and trying to do it, like, mangle the data in this way and return this.

00:10:28.560 --> 00:10:39.460
Like, I actually got that in me to be able to, like, a couple months later, I sort of finally understood, like, inheritance when I was digging through, like, Django, like, source code.

00:10:39.460 --> 00:10:48.400
And I was like, well, this actually makes sense to me than, like, programming, like, a Sudoku board in C where I just have no idea what I'm doing.

00:10:48.400 --> 00:10:49.180
Yeah.

00:10:49.180 --> 00:10:50.940
And pointers to pointers to a raise.

00:10:50.940 --> 00:10:51.580
Like, yikes.

00:10:51.580 --> 00:10:52.600
Uh-huh.

00:10:52.600 --> 00:10:53.160
Right.

00:10:53.160 --> 00:10:57.540
Let's maybe talk a little bit about PSF.

00:10:57.540 --> 00:10:58.400
Sure.

00:10:59.400 --> 00:11:03.580
I kind of know the mission statement of PSF.

00:11:03.580 --> 00:11:06.260
And I know that there's a board.

00:11:06.260 --> 00:11:15.060
But can you maybe tell all the listeners kind of what is the Python Software Foundation and what kinds of things do they do to help all of us?

00:11:15.060 --> 00:11:16.100
Sure.

00:11:16.100 --> 00:11:16.440
Yeah.

00:11:16.440 --> 00:11:19.180
So this question happens a lot, actually.

00:11:19.180 --> 00:11:24.940
And maybe it's a telling sign that we need to do better PR about who we are.

00:11:24.940 --> 00:11:44.700
But the PSF, the legalese or, like, what we are about in formal sense is both protecting the trademark of the Python language and kind of, like, owning that and stuff like that, as well as furthering, like, the language of, like, becoming more widespread.

00:11:44.800 --> 00:11:47.100
And that's essentially what it boils down to.

00:11:47.100 --> 00:11:55.760
And the PSF has, like, has the board with 11 directors and then has, like, a membership model.

00:11:55.760 --> 00:11:58.260
And there's a few different ways to be a member.

00:11:58.760 --> 00:12:10.480
But basically, the purpose of the PSF is to, like, make sure Python as a language can, like, remain a popular widely used language and kind of get it everywhere.

00:12:11.340 --> 00:12:19.060
And as a PSF board, we do a lot of both kind of just, like, answering simple questions, like, can I use Python here?

00:12:19.060 --> 00:12:20.700
Can I represent the logo here?

00:12:20.700 --> 00:12:21.980
Like, simple questions like that.

00:12:21.980 --> 00:12:25.740
We get a lot of, like, requests for, like, funding.

00:12:25.740 --> 00:12:34.820
Like, can you help with these, like, food costs for this, like, Python sprint or something like that.

00:12:34.820 --> 00:12:46.420
We help a lot of workshops, especially, like, the, like, young coder workshops that Katie and Barbara have been doing since 2012, I guess.

00:12:46.420 --> 00:12:59.180
And that is mostly based on, like, help getting, like, Raspberry Pis so that teenagers and young kids can, like, learn how to, like, program in Python and actually take home what they're doing.

00:12:59.580 --> 00:13:03.680
PSF sort of supports Python in that sort of way.

00:13:03.680 --> 00:13:09.540
And I guess that's as best off the top of my head of describing the PSF.

00:13:09.540 --> 00:13:09.940
Yeah.

00:13:09.940 --> 00:13:11.300
That's really cool.

00:13:11.300 --> 00:13:14.900
And I think it's just good to raise everyone's awareness about that.

00:13:14.900 --> 00:13:27.000
It's nice to have a single organization or group that is kind of can answer, like, public questions and make decisions and stuff like that around the publicity of Python and whatnot.

00:13:27.660 --> 00:13:32.100
I also heard that they were doing a lot to help promote the usage of Python 3.

00:13:32.100 --> 00:13:35.700
I feel like the PSF is usually, like, throwing, like, the money at it.

00:13:35.700 --> 00:13:41.040
Like, if someone requests, like, funding to help porting stuff, we're definitely 100% behind that.

00:13:41.040 --> 00:13:48.580
I feel like the louder voices of supporting Python 3 is more like Guido himself and some other core devs.

00:13:48.580 --> 00:13:53.520
We personally, the PSF doesn't really outwardly, like, back, like, public statements.

00:13:53.520 --> 00:14:04.200
But we're definitely, like, since, like, Python 3 is the future, we often get requests to help, like, funding, like, the porting of something from 2 to 3.

00:14:04.200 --> 00:14:09.580
Like, a really, like, established, like, library, like, mailman or something like that.

00:14:09.680 --> 00:14:09.900
Right.

00:14:09.900 --> 00:14:12.740
Of course, I had Chris McDonough on the show.

00:14:12.740 --> 00:14:14.180
I think that was show 3.

00:14:14.180 --> 00:14:14.920
Mm-hmm.

00:14:14.920 --> 00:14:18.720
And he talked about that story with Pyramid.

00:14:18.720 --> 00:14:19.440
Oh, yeah.

00:14:19.440 --> 00:14:20.920
The Pyramid web framework.

00:14:20.920 --> 00:14:21.540
Yeah.

00:14:21.880 --> 00:14:26.800
Apparently, he said, I'm dragging my feet on converting it to Python or, you know, supporting Python 3.

00:14:26.800 --> 00:14:30.940
And the PSF came along and helped out and said, can we give you a nudge to make you go do this?

00:14:30.940 --> 00:14:31.440
And he did.

00:14:31.440 --> 00:14:32.000
Yeah.

00:14:32.000 --> 00:14:33.800
That's awesome.

00:14:33.800 --> 00:14:34.280
Yeah.

00:14:34.280 --> 00:14:35.040
That's really cool.

00:14:35.040 --> 00:14:35.800
That's really cool.

00:14:35.800 --> 00:14:39.660
So, as a board member, what do you do there?

00:14:39.660 --> 00:14:48.120
The board member, being a board member is, it varies on how much work you want to put in.

00:14:49.420 --> 00:14:55.040
And, like, we have monthly meetings or somewhat monthly meetings, regular meetings.

00:14:55.040 --> 00:15:01.320
And we vote on stuff like, should we give money to these people or those folks?

00:15:01.320 --> 00:15:07.460
That's actually a lot of our conversation is deciding who to help out.

00:15:07.460 --> 00:15:11.560
As well as, like, let's see, like, sponsors.

00:15:11.560 --> 00:15:13.460
Like, who can we invite to be a sponsor?

00:15:13.460 --> 00:15:15.760
Who is applying to be a sponsor?

00:15:15.760 --> 00:15:17.580
Things like PyCon and so on?

00:15:18.140 --> 00:15:24.320
Well, so, that's actually, PyCon is, like, the only conference that is, like, directly supported by us.

00:15:24.320 --> 00:15:33.340
But we just sort of have, like, a PyCon officer that's supposed to be, like, the liaison between the two, like, organizations.

00:15:33.340 --> 00:15:41.460
And we definitely, like, a lot of the money comes out of the PSF and the sponsors of both the PSF and PyCon.

00:15:41.980 --> 00:15:47.060
But we definitely stay out of, like, the day-to-day logistics, the planning and stuff like that.

00:15:47.060 --> 00:15:47.400
Sure.

00:15:47.400 --> 00:15:47.980
More high level.

00:15:47.980 --> 00:15:48.540
That's cool.

00:15:48.540 --> 00:15:48.820
Yeah.

00:15:48.820 --> 00:15:49.380
Yeah.

00:15:50.420 --> 00:15:52.800
And just trying to think of other things.

00:15:52.800 --> 00:15:57.420
I just, like, it seems like every meeting we're voting on, like, five, like, new funding requests.

00:15:57.420 --> 00:16:04.000
But it's definitely, like, just to, like, help kind of guide, like, the PSF.

00:16:04.000 --> 00:16:19.040
Like, we recently started, somewhat recently, like, past year or so, started this, like, working group model where it kind of helps, like, people who want to get involved in the PSF and aren't, like, board members themselves can still, like, really contribute to the PSF.

00:16:19.040 --> 00:16:26.620
Like, we have a working group around, like, elections and, like, how to better, like, the process of elections.

00:16:26.620 --> 00:16:34.640
And the PSF's job is to sort of, like, recognize that working group and help provide the tools so that they can be successful.

00:16:34.640 --> 00:16:36.240
That's great.

00:16:36.240 --> 00:16:42.340
So if somebody out there is listening and they want to get involved, what kinds of things can they do and how do they go about that?

00:16:42.340 --> 00:16:44.260
Good question.

00:16:44.720 --> 00:16:49.000
So just to be a member, it's actually quite simple.

00:16:49.000 --> 00:16:53.880
It's just, like, python.org slash PSF slash membership.

00:16:55.160 --> 00:16:57.520
And there's, like, different membership classes.

00:16:57.520 --> 00:17:02.660
The most basic, the lowest tier one is called Basic Members where anyone can sign up.

00:17:02.660 --> 00:17:18.520
However, in order to be able to, like, vote and stuff, you'll either have to, like, be, like, a contributor in terms of, like, code or, like, sort of contributor in terms of, like, community, like a meetup organizer, like PyLadies organizer or something like that.

00:17:19.240 --> 00:17:23.480
Or you can, like, give money either as an individual or as a company yourself.

00:17:23.480 --> 00:17:32.560
And that's, like, how you can, like, vote in terms of, like, the board and, like, who to accept as company sponsors, stuff like that.

00:17:34.140 --> 00:17:46.680
And if you wanted to get, like, if someone wanted to get involved beyond that, at least become a Basic Member and, like, join all the mailing lists that I can't even remember off the top of my head that are interesting to them.

00:17:46.680 --> 00:17:55.860
And somewhere on our wiki, the wiki.python.org, is a list of all of our working groups.

00:17:57.080 --> 00:18:00.960
And I'm sorry, I don't have the link up right now.

00:18:00.960 --> 00:18:01.300
That's fine.

00:18:01.300 --> 00:18:02.180
We'll put it in the show notes.

00:18:02.180 --> 00:18:03.180
Oh, great.

00:18:03.180 --> 00:18:18.360
And that way they can, like, ping individual people of, like, who they want to, like, help out, like, maybe, like, outreach and education or, like, sprint, like, committee or the elections working group or something like that.

00:18:18.360 --> 00:18:20.680
And you can get involved in that way.

00:18:20.680 --> 00:18:24.700
Just participate in the discussion as much or as little as one wants.

00:18:25.860 --> 00:18:30.120
And then, yeah, we have a pretty active PSF members list.

00:18:30.120 --> 00:18:35.100
And that's also a good place to kind of have your ear to the ground and know what's going on.

00:18:35.100 --> 00:18:35.920
Okay.

00:18:35.920 --> 00:18:37.100
Yeah, that sounds really great.

00:18:37.100 --> 00:18:44.340
Basically, the starting points, go become a Basic Member and then go from there, which is just a matter of creating an account, more or less, right?

00:18:44.340 --> 00:18:44.840
Right.

00:18:44.840 --> 00:18:45.260
Yeah.

00:18:45.260 --> 00:18:48.180
We have, like, there's information, like, everywhere.

00:18:48.720 --> 00:18:58.380
And I'll be the first one to say or, like, to agree that it's really poorly laid out, like, where to find what information and, like, what could you be interested in?

00:18:58.380 --> 00:19:00.120
Like, I don't even know kind of thing.

00:19:00.120 --> 00:19:01.840
Is it, like, a new member or something like that?

00:19:01.900 --> 00:19:06.520
So it's definitely really hard to kind of, like, figure out where to go and stuff.

00:19:06.520 --> 00:19:11.800
But becoming a Basic Member and joining, like, the PSF members list is definitely, like, step one.

00:19:11.800 --> 00:19:14.400
And then you can ask as many questions as you want from there.

00:19:14.400 --> 00:19:15.000
Okay.

00:19:15.000 --> 00:19:15.940
Yeah, that's really helpful.

00:19:15.940 --> 00:19:16.400
Thanks.

00:19:16.900 --> 00:19:30.140
This episode is brought to you by Hired.

00:19:30.140 --> 00:19:36.600
Hired is a two-sided, curated marketplace that connects the world's knowledge workers to the best opportunities.

00:19:36.600 --> 00:19:45.760
Each offer you receive has salary and equity presented right up front, and you can view the offers to accept or reject them before you even talk to the company.

00:19:46.420 --> 00:19:51.380
Typically, candidates receive five or more offers in just the first week, and there are no obligations.

00:19:51.380 --> 00:19:52.120
Ever.

00:19:52.120 --> 00:19:54.200
Sounds pretty awesome, doesn't it?

00:19:54.200 --> 00:19:56.260
Well, did I mention there's a signing bonus?

00:19:56.260 --> 00:20:00.360
Everyone who accepts a job from Hired gets a $2,000 signing bonus.

00:20:00.360 --> 00:20:04.700
And as Talk Python listeners, it gets way sweeter.

00:20:04.700 --> 00:20:12.260
Use the link Hired.com slash Talk Python To Me, and Hired will double the signing bonus to $4,000.

00:20:12.260 --> 00:20:13.980
Opportunity's knocking.

00:20:13.980 --> 00:20:17.620
Visit Hired.com slash Talk Python To Me and answer the call.

00:20:17.620 --> 00:20:30.080
Another thing I wanted to talk to you about is PyLadies.

00:20:30.080 --> 00:20:35.460
And it sounds like PyLadies is sort of what became of your study group that you started.

00:20:35.460 --> 00:20:36.300
Right.

00:20:36.300 --> 00:20:36.760
Yeah.

00:20:36.940 --> 00:20:38.440
And I'm really surprised.

00:20:38.440 --> 00:20:42.400
You said that it didn't exist in San Francisco, but it did in L.A.

00:20:42.400 --> 00:20:44.920
And you're like, why is this thing not in San Francisco, right?

00:20:44.920 --> 00:20:45.780
Exactly.

00:20:45.780 --> 00:20:46.280
Yeah.

00:20:46.280 --> 00:20:48.080
Yeah.

00:20:48.080 --> 00:20:49.540
I mean, that's the whole reason I have this podcast.

00:20:49.540 --> 00:20:51.400
I went looking for a Python podcast.

00:20:51.400 --> 00:20:53.020
I'm like, why is there no Python podcast?

00:20:53.020 --> 00:20:53.920
What happened to them all?

00:20:54.000 --> 00:20:58.700
Well, I guess if you really want something, you might have to make it yourself sometimes,

00:20:58.700 --> 00:20:58.960
right?

00:20:58.960 --> 00:20:59.700
Exactly.

00:20:59.700 --> 00:21:00.360
Yeah.

00:21:00.360 --> 00:21:01.280
So you started PyLadies.

00:21:01.280 --> 00:21:01.860
That's awesome.

00:21:01.860 --> 00:21:03.800
How long has that been going on, actually?

00:21:03.800 --> 00:21:08.400
So the San Francisco PyLadies has been around since April 2012.

00:21:08.920 --> 00:21:11.660
So a little over three years, I guess, if my math is correct.

00:21:11.660 --> 00:21:18.000
And the first PyLadies in L.A. started sometime in the fall of 2011.

00:21:18.000 --> 00:21:19.540
I don't know exactly when.

00:21:19.540 --> 00:21:23.540
So it's pretty established in terms of communities.

00:21:23.540 --> 00:21:25.280
And yeah.

00:21:25.280 --> 00:21:26.420
Sure.

00:21:26.420 --> 00:21:29.780
It's a little regional because this is an international show.

00:21:29.780 --> 00:21:32.400
But for those listeners in San Francisco, where do you guys meet?

00:21:32.400 --> 00:21:34.700
Oh, it varies.

00:21:34.700 --> 00:21:40.780
I mean, tonight we have a meetup and we're going to the Uber office downtown.

00:21:40.780 --> 00:21:47.700
But we have a lot of weekly meetups, like study groups that go to the LinkedIn offices down

00:21:47.700 --> 00:21:53.460
in South Bay or Rackspace slash Geekdom up here in San Francisco area.

00:21:53.460 --> 00:21:59.040
But I mean, we have so many locations worldwide.

00:21:59.040 --> 00:22:04.260
And a lot of times it's just like regular meetups at a local coffee shop or something like that.

00:22:04.260 --> 00:22:04.580
Yeah.

00:22:04.580 --> 00:22:10.040
So if I wanted to see if my local city, like I live in Portland, Oregon, I want to know,

00:22:10.040 --> 00:22:10.900
hey, is there one in Portland?

00:22:10.900 --> 00:22:11.840
I think there is actually.

00:22:11.840 --> 00:22:13.080
There definitely is.

00:22:13.080 --> 00:22:13.300
Yeah.

00:22:13.300 --> 00:22:14.380
How would I find out about it?

00:22:14.380 --> 00:22:15.060
Certainly.

00:22:15.060 --> 00:22:15.400
Yeah.

00:22:15.400 --> 00:22:19.540
If you just go to like PyLadies.com, we have like a locations page.

00:22:19.540 --> 00:22:22.420
And we have a list of all like locations.

00:22:23.260 --> 00:22:29.720
There's some that aren't up there because in order to like have like your location up there,

00:22:29.720 --> 00:22:31.580
you have to do like a pull request on GitHub.

00:22:31.580 --> 00:22:37.060
And sometimes it's just too much for people to like do or too little of like a task item to

00:22:37.060 --> 00:22:37.740
like remember.

00:22:38.120 --> 00:22:40.480
So like that's not a complete list.

00:22:40.480 --> 00:22:44.440
But it's definitely a very good place to start.

00:22:44.440 --> 00:22:52.780
Now, if you find out that there is no PyLadies like locally, you're more than welcome to start

00:22:52.780 --> 00:22:55.520
one kind of like how I did myself and how you did your podcast.

00:22:56.800 --> 00:23:00.800
There's a nice little jumping off point, kit.pyladies.com.

00:23:00.800 --> 00:23:01.440
Oh, nice.

00:23:01.440 --> 00:23:02.280
Yeah.

00:23:02.280 --> 00:23:07.380
That's our like starter kit of like how to bring PyLadies to like your location if you want it.

00:23:07.380 --> 00:23:08.220
Cool.

00:23:08.220 --> 00:23:08.600
Yeah.

00:23:08.600 --> 00:23:09.360
We'll put that in the show notes.

00:23:09.360 --> 00:23:10.180
Yeah.

00:23:10.180 --> 00:23:16.220
I think it's really great that you're promoting more diversity in general and specifically about

00:23:16.220 --> 00:23:17.200
women in programming.

00:23:17.200 --> 00:23:25.600
You know, I have three daughters and, you know, I would like to see a world where they are excited

00:23:25.600 --> 00:23:29.040
about these kinds of things and feel like it's a welcoming place.

00:23:29.040 --> 00:23:30.640
Definitely.

00:23:30.640 --> 00:23:36.240
I don't know what it is about Python, but it seems like it has a better story in terms of

00:23:36.240 --> 00:23:38.120
diversity compared to other languages.

00:23:38.120 --> 00:23:39.940
I would agree with that.

00:23:39.940 --> 00:23:40.380
Yes.

00:23:40.380 --> 00:23:42.000
Go ahead.

00:23:42.000 --> 00:23:42.340
Yeah.

00:23:42.340 --> 00:23:45.500
I was going to say, I have no idea why this is the case, but I do a lot of training and I'll

00:23:45.500 --> 00:23:52.420
do training with like classes like MongoDB or C# or other things, JavaScript and so

00:23:52.420 --> 00:23:53.940
on in Python, of course.

00:23:53.940 --> 00:23:59.320
And it seems like the Python classes just have a whole, a whole different population that

00:23:59.320 --> 00:24:04.520
just seems to represent society more correctly than, than the other stuff, which, which is

00:24:04.520 --> 00:24:06.220
really nice, but I don't really know why.

00:24:06.220 --> 00:24:07.480
Right.

00:24:07.800 --> 00:24:15.140
I mean, I started to hypothesize this myself, at least comparing with like other like communities,

00:24:15.140 --> 00:24:19.940
not necessarily like C, but like, like Ruby or Java or Node, whatever.

00:24:20.940 --> 00:24:26.600
It really helps to have like sort of leadership of the community kind of really like buy in.

00:24:26.600 --> 00:24:31.360
But it really helps us that like Guido himself is really passionate.

00:24:31.360 --> 00:24:37.020
He was actually the first, one of the first speakers that I had at like my Women Who Code

00:24:37.020 --> 00:24:37.660
Study group.

00:24:37.660 --> 00:24:38.240
Oh, wow.

00:24:38.240 --> 00:24:38.720
That's excellent.

00:24:38.720 --> 00:24:39.740
Yeah, I know.

00:24:39.820 --> 00:24:42.720
So he's like 100% behind this, these sorts of efforts.

00:24:42.720 --> 00:24:46.560
And it's very convenient that he lives in the Bay Area for me, right?

00:24:46.560 --> 00:24:47.920
Yeah, that's cool.

00:24:47.920 --> 00:24:53.660
He had a really nice presentation that sort of touched on this at PyCon 2015 as well.

00:24:53.660 --> 00:24:54.500
Right.

00:24:54.500 --> 00:24:54.760
Yeah.

00:24:54.860 --> 00:25:01.120
He, he asked, or he wants, he wants basically like women as core developers, because currently

00:25:01.120 --> 00:25:01.920
there are none.

00:25:01.920 --> 00:25:07.060
And I think he was like, he's like, I'll help mentor folks or help mentor women to be a core

00:25:07.060 --> 00:25:07.480
developer.

00:25:07.480 --> 00:25:10.500
And, you know, I think that's like really awesome.

00:25:10.500 --> 00:25:16.040
And I'm, I'm actually, I have like a pretty good idea for a meetup here locally, since he,

00:25:16.040 --> 00:25:18.160
since he's like down the street, practically.

00:25:18.160 --> 00:25:23.640
So that's sort of help kind of get involved in committing to, to see Python.

00:25:23.880 --> 00:25:28.500
But yeah, it really, it definitely helps when like leadership like him and the PSF organization

00:25:28.500 --> 00:25:34.060
itself kind of set the tone of why it's important and, and people sort of just follow.

00:25:34.060 --> 00:25:40.820
Of course, you know, there's always descending voices in any community in any stance, but it

00:25:40.820 --> 00:25:46.580
really helps to see that like when leadership says that this is important, people will feel

00:25:46.580 --> 00:25:52.180
more, more willing to like help out or to like just be proactive about something.

00:25:52.180 --> 00:25:56.800
So I think that that's the difference between like the Python community and other communities.

00:25:56.800 --> 00:25:57.340
I agree.

00:25:57.340 --> 00:26:01.740
You know, there's probably a lot of people on these types of issues that are like sort

00:26:01.740 --> 00:26:05.400
of just sitting on the couch, like, I'd like to do something about it, but whatever.

00:26:05.400 --> 00:26:08.780
You know, those little nudges might be enough to actually make a change.

00:26:08.780 --> 00:26:09.300
Right.

00:26:09.300 --> 00:26:09.760
Exactly.

00:26:09.760 --> 00:26:14.320
Another thing I'd like to talk about is a project that you're involved with called New Coder

00:26:14.320 --> 00:26:15.800
at newcoder.io.

00:26:15.800 --> 00:26:16.620
Right.

00:26:16.620 --> 00:26:17.240
Yes.

00:26:17.240 --> 00:26:18.880
What's the story with that?

00:26:18.880 --> 00:26:19.440
That looks cool.

00:26:19.940 --> 00:26:20.480
Thank you.

00:26:20.480 --> 00:26:21.060
yeah.

00:26:21.060 --> 00:26:27.040
So this was, so I wrote this a couple of years ago, 2012, I believe is when I first

00:26:27.040 --> 00:26:27.660
released it.

00:26:27.660 --> 00:26:31.720
and it's basically, taking, no, it was 2013, I think.

00:26:31.720 --> 00:26:36.900
I'm basically taking all these sort of projects that I subjected to the people that came to my

00:26:36.900 --> 00:26:39.560
study group and, and made it in like written form.

00:26:39.560 --> 00:26:43.980
So like, not just like San Francisco piloties can use them, but like everyone who

00:26:43.980 --> 00:26:47.800
want, who's willing to learn Python and wanting to learn how to code can, can reach.

00:26:47.800 --> 00:26:53.880
So, the premise of this is like, say you, you know, did learn Python the hard

00:26:53.880 --> 00:26:58.700
way or dive into Python or some other sort of work book, like, like sort of goes through

00:26:58.700 --> 00:27:02.400
the syntax and a little bit of like logic of Python.

00:27:02.400 --> 00:27:04.080
And you're like, all right, what next?

00:27:04.080 --> 00:27:06.640
What can, like, I'm not going to get hired right now.

00:27:06.640 --> 00:27:09.300
So, what can I actually do?

00:27:09.300 --> 00:27:16.740
So, with new coder is, is there, it's five different, tutorials and, it sort

00:27:16.740 --> 00:27:20.260
of, it definitely graduates in sort of, difficulty.

00:27:20.260 --> 00:27:23.400
but, there's no real order.

00:27:23.400 --> 00:27:29.380
You can like choose whatever order that you want, but, it, the, it's meant to teach the

00:27:29.380 --> 00:27:35.820
new coder, like various things at various points in time with certain noob friendly language.

00:27:35.820 --> 00:27:39.280
and like asides, like you might not know this term.

00:27:39.280 --> 00:27:43.100
Like, or you might not understand what a class is or inheritance is.

00:27:43.100 --> 00:27:46.920
So here's where you can read more information or, or here's a little blurb that you can just

00:27:46.920 --> 00:27:47.560
go ahead and skip.

00:27:47.560 --> 00:27:49.460
If you actually do understand this kind of thing.

00:27:49.460 --> 00:27:50.080
Right.

00:27:50.080 --> 00:27:51.060
That's really cool.

00:27:51.160 --> 00:27:56.000
And I think one of the challenges people have, especially when you're a beginner is to put

00:27:56.000 --> 00:27:59.860
meaning behind the thing you're struggling with.

00:27:59.860 --> 00:28:05.720
So for example, if, if you're like having a really hard time with a for loop, foreign loop,

00:28:05.720 --> 00:28:10.240
or you're having a hard time with like if statements or functions, those are all so small building

00:28:10.240 --> 00:28:14.000
blocks that they're not interesting in and of themselves.

00:28:14.440 --> 00:28:18.200
But if, but if you can see like, okay, if I force myself to learn these little kind of

00:28:18.200 --> 00:28:23.280
trivial, not trivial, but you know, sort of fact based things that I have to just memorize

00:28:23.280 --> 00:28:26.940
or understand, I can do something awesome on the other side of that.

00:28:26.940 --> 00:28:32.080
And I think these projects are the key to like making that shortening that cycle, I guess.

00:28:32.080 --> 00:28:32.780
Yeah.

00:28:32.780 --> 00:28:33.180
Thank you.

00:28:33.240 --> 00:28:33.380
Yeah.

00:28:33.380 --> 00:28:36.320
That's definitely something I was trying to go for with that.

00:28:36.320 --> 00:28:41.640
But yeah, I've got, I've gotten a lot of good feedback from people just like sending emails

00:28:41.640 --> 00:28:45.020
saying, you know, like this is exactly what folks needed.

00:28:45.020 --> 00:28:50.880
And like, I find that when I lead workshops explaining these sorts of things in the way

00:28:50.880 --> 00:28:55.920
that I've written down a new coder, it helps people kind of like, like have those light bulb

00:28:55.920 --> 00:29:00.020
moments, which are really needed, especially when you're a new coder, because there are a lot

00:29:00.020 --> 00:29:01.100
of frustrating moments.

00:29:01.100 --> 00:29:04.020
And to have like a little light bulb moment is really reassuring.

00:29:04.020 --> 00:29:08.120
And then to have, and then to have something at the end of the tutorial that you can show

00:29:08.120 --> 00:29:13.620
off to someone else, that's also rewarding rather than like some simple exercise from like

00:29:13.620 --> 00:29:16.760
when Python the hard way, like, yay, I did a for loop.

00:29:16.760 --> 00:29:17.440
Look at that.

00:29:17.440 --> 00:29:18.620
Yeah, exactly.

00:29:18.620 --> 00:29:19.240
Yeah.

00:29:19.240 --> 00:29:25.220
If you have a tutorial with like, you know, data visualization, like from, map plotlib or

00:29:25.220 --> 00:29:26.980
something, it can actually show that to someone.

00:29:26.980 --> 00:29:28.100
Yeah.

00:29:28.100 --> 00:29:30.020
I think that that serves a lot of purposes.

00:29:30.400 --> 00:29:35.840
You know, I read somewhere, somebody had studied a bunch of entrepreneurs and people

00:29:35.840 --> 00:29:38.660
in Silicon Valley that, that became successful.

00:29:38.660 --> 00:29:42.840
And they said, it seems like by studying these people, we've, it's not necessarily the case

00:29:42.840 --> 00:29:46.800
that the people who succeed versus the people who fail are the ones who are the smartest.

00:29:46.800 --> 00:29:50.580
It seems like the most important skill is persistence.

00:29:50.580 --> 00:29:54.940
The ones who just keep trying until they find their way through these, these types of things

00:29:54.940 --> 00:29:58.260
that you have to power through when you're, you're getting started on stuff and, you know,

00:29:58.260 --> 00:30:00.700
more complex as you start companies and so on.

00:30:00.700 --> 00:30:02.640
It seems to be the most important skill.

00:30:02.640 --> 00:30:03.300
Right.

00:30:03.300 --> 00:30:03.660
Right.

00:30:03.660 --> 00:30:04.360
Yes, definitely.

00:30:04.360 --> 00:30:09.940
And I think tutorials and like concrete examples and stuff make it easier to be persistent because

00:30:09.940 --> 00:30:11.840
you see what's down the tunnel.

00:30:11.840 --> 00:30:13.900
You're not like, oh, I hate programming.

00:30:13.900 --> 00:30:14.760
It's all these little facts.

00:30:14.760 --> 00:30:18.700
It's like, it's kind of like learning math in the early days when, when nobody connects

00:30:18.700 --> 00:30:19.580
any dots for you.

00:30:19.820 --> 00:30:20.220
Right.

00:30:20.220 --> 00:30:20.720
Exactly.

00:30:20.720 --> 00:30:21.520
Yeah.

00:30:21.520 --> 00:30:22.380
Cool.

00:30:22.380 --> 00:30:24.600
So you have five tutorials up there now.

00:30:24.600 --> 00:30:30.600
You've got data visualization, APIs, networks, web scraping, and GUI stuff, right?

00:30:30.600 --> 00:30:31.400
Right.

00:30:31.400 --> 00:30:31.880
Yes.

00:30:31.880 --> 00:30:33.860
Yeah.

00:30:33.860 --> 00:30:34.520
So those are fun.

00:30:34.520 --> 00:30:37.460
And people, if they're, they're getting started or they want something more practical

00:30:37.460 --> 00:30:43.040
than just language stuff to play around with, or they need to recommend a resource for someone

00:30:43.040 --> 00:30:47.520
else, more likely if they're listening to this podcast, then, you know, check out newcoder.io and,

00:30:47.640 --> 00:30:48.740
you know, pass it around.

00:30:48.740 --> 00:30:50.520
Thanks for the plug.

00:30:50.520 --> 00:30:50.860
Yeah.

00:30:50.860 --> 00:30:51.180
Yeah.

00:30:51.180 --> 00:30:51.500
You bet.

00:30:51.500 --> 00:30:52.080
No problem.

00:30:52.080 --> 00:30:53.080
That's really cool.

00:30:53.080 --> 00:30:58.440
You also have some open source projects that you're working on connected to your work at

00:30:58.440 --> 00:30:59.360
Spotify, right?

00:30:59.360 --> 00:31:00.240
Right.

00:31:00.240 --> 00:31:00.780
Yes.

00:31:00.780 --> 00:31:02.340
Do you want to talk a little bit about those?

00:31:02.340 --> 00:31:03.120
Yeah.

00:31:03.120 --> 00:31:04.120
I'd love to.

00:31:04.120 --> 00:31:10.080
So conveniently, actually, this week right now is our hack week.

00:31:10.080 --> 00:31:15.480
About twice a year, Spotify holds hack weeks to just kind of hack on what you want, not

00:31:15.480 --> 00:31:18.180
necessarily like Spotify, but it could be Spotify related.

00:31:18.180 --> 00:31:28.220
And a year ago, I actually hacked together a prototype as a Flask app that was, it's like

00:31:28.220 --> 00:31:29.460
a playground for APIs.

00:31:29.460 --> 00:31:37.460
If you go to developer.spotify.com slash web dash API, there's a console linked there.

00:31:37.460 --> 00:31:42.360
And you can actually play with our APIs via the console to kind of figure out what goes

00:31:42.360 --> 00:31:46.300
on, what kind of responses you'll get, what kind of queries that we accept, that kind of

00:31:46.300 --> 00:31:46.620
stuff.

00:31:46.620 --> 00:31:50.960
I mean, it was pretty awesome because like it came out of a hack week.

00:31:50.960 --> 00:31:55.900
Everyone sort of like understood why it was important because I hated answering sort of the

00:31:55.900 --> 00:31:57.280
same questions over and over again.

00:31:57.280 --> 00:31:58.440
How do I use your API?

00:31:58.840 --> 00:31:59.640
So I built this.

00:31:59.640 --> 00:32:04.400
And I guess like a lot of people loved it that we just sort of put it out there and it's been

00:32:04.400 --> 00:32:05.160
really successful.

00:32:05.160 --> 00:32:10.460
And from that, I've, I'm open sourcing the technology behind that.

00:32:10.460 --> 00:32:15.700
And the first thing that I open source, which was just a couple weeks ago, is a RAML parser.

00:32:15.700 --> 00:32:18.760
And the actual library name is called RAMLifications.

00:32:18.760 --> 00:32:19.760
Good name.

00:32:20.080 --> 00:32:20.360
Yeah.

00:32:20.360 --> 00:32:21.540
I love punny names.

00:32:21.540 --> 00:32:27.360
But RAML is like, it stands for REST API markup language.

00:32:27.360 --> 00:32:30.020
And it's like YAML.

00:32:30.020 --> 00:32:35.920
And it's basically a way for you to kind of define how an API is.

00:32:35.920 --> 00:32:40.060
Like we have a Spotify API defined in RAML.

00:32:40.060 --> 00:32:46.260
And you can see the title is like web API and like the base URL, the version, like the endpoints,

00:32:46.260 --> 00:32:50.120
if it accepts like OAuth or, or something else, that kind of stuff.

00:32:50.120 --> 00:32:55.320
So it's a really like great, like source, like end all be all source for a web API.

00:32:55.320 --> 00:33:00.760
And so the RAMLifications, like it parses that into like Python, like objects.

00:33:00.760 --> 00:33:08.880
And then this week I'm taking that and writing like a static documentation generator.

00:33:09.240 --> 00:33:16.500
Just making like HTML files that you can like, like host anywhere that creates documentation off of RAML.

00:33:16.500 --> 00:33:25.540
So if you have your API, your REST API defined in RAML, and like you've written like all the docs in there kind of thing,

00:33:25.540 --> 00:33:30.020
you can just, you know, run it through this new project that hopefully will be open source soon.

00:33:30.020 --> 00:33:32.660
And you'll have some nice HTML files.

00:33:32.980 --> 00:33:38.860
And then from there, this is like the in-between step, I'll actually like open source the console itself.

00:33:38.860 --> 00:33:46.860
So that, so folks can make their own sort of web site for how to interact with, with their own API.

00:33:46.860 --> 00:33:49.040
Yeah, that's really neat.

00:33:49.040 --> 00:33:52.240
I think those are a cool set of projects that all kind of work together.

00:33:52.940 --> 00:33:59.960
A lot of times you'll end up with these, you know, just basically static documentation around, around people's APIs.

00:33:59.960 --> 00:34:11.060
And then, you know, if it doesn't quite work, like the way you're interpreting what they have written, or, you know, if, if it changes and the API documentation comes, becomes out of date, it's super frustrating.

00:34:11.060 --> 00:34:11.440
Right.

00:34:11.580 --> 00:34:17.700
And you end up writing these little, little apps to just like call the API and spit it out to go, okay, this is what I'm actually getting.

00:34:17.700 --> 00:34:18.580
What does it look like?

00:34:18.580 --> 00:34:22.380
And, and your, your web API console is just like, let's skip that.

00:34:22.380 --> 00:34:23.520
And you can just check it right here.

00:34:23.520 --> 00:34:24.660
Right, exactly.

00:34:24.660 --> 00:34:29.120
And some people are just more visual or more interactive rather than reading through documentation.

00:34:29.120 --> 00:34:30.720
So, yeah.

00:34:30.720 --> 00:34:31.380
Yeah.

00:34:31.380 --> 00:34:34.940
It's never really like inspiring to read through documentation.

00:34:34.940 --> 00:34:37.860
I think it kind of goes back to that persistence thing.

00:34:37.860 --> 00:34:44.800
Like, am I willing to power through this so I can have a cool app that uses Spotify or, or am I going to stop because the documentation is, is too much.

00:34:44.800 --> 00:34:45.060
Right.

00:34:45.060 --> 00:34:46.740
But luckily you're solving that problem.

00:34:46.740 --> 00:34:53.100
Have you noticed any change in like the adoption of the API or how long has it been out?

00:34:53.100 --> 00:34:53.400
It's not.

00:34:53.400 --> 00:34:57.420
I think it's been out at least six months or so.

00:34:57.420 --> 00:34:57.420
Okay.

00:34:57.420 --> 00:35:00.600
So maybe that it could possibly have some sort of effect you could see.

00:35:00.600 --> 00:35:01.980
Right.

00:35:01.980 --> 00:35:06.740
I'm going to be honest that I don't pay attention to our usage, web API usage.

00:35:06.740 --> 00:35:15.120
But I do know that like the site that the console itself gets maybe like low tens of thousands of views a month.

00:35:15.120 --> 00:35:17.340
So it is being used.

00:35:17.340 --> 00:35:20.520
And yeah, it's definitely an internal favorite too.

00:35:20.520 --> 00:35:20.880
Yeah.

00:35:20.880 --> 00:35:21.560
I'm sure.

00:35:21.560 --> 00:35:24.000
I'm like, oh, I want to test our own API.

00:35:24.000 --> 00:35:24.780
Let me go have a look.

00:35:24.780 --> 00:35:25.720
I forgot what this does.

00:35:25.720 --> 00:35:25.980
Right.

00:35:25.980 --> 00:35:27.260
I'm sure this happens.

00:35:27.260 --> 00:35:28.780
Or hey, you're new here.

00:35:28.780 --> 00:35:29.500
Go here first.

00:35:29.500 --> 00:35:30.320
Go check this out.

00:35:30.320 --> 00:35:30.640
Right.

00:35:30.640 --> 00:35:30.940
Yeah.

00:35:32.680 --> 00:35:33.080
Nice.

00:35:33.080 --> 00:35:36.860
So it sounds like these projects are really closely tied to what you're doing at Spotify.

00:35:36.860 --> 00:35:38.120
And they're all in Python.

00:35:38.120 --> 00:35:39.960
What's the story with Python at Spotify?

00:35:39.960 --> 00:35:40.860
Can you talk about that?

00:35:40.860 --> 00:35:42.280
Sure.

00:35:42.280 --> 00:35:44.380
It's actually kind of a sad story.

00:35:45.520 --> 00:35:53.820
So my team and what I do, I'm back an engineer with five other developers.

00:35:53.820 --> 00:35:56.860
And we do like strategic integrations.

00:35:56.860 --> 00:35:58.420
We're based in San Francisco.

00:35:58.840 --> 00:36:04.080
So like a lot of the integration projects is with other local San Francisco like companies.

00:36:04.080 --> 00:36:14.440
For instance, the recent Spotify and Uber integration where you can like listen to music during your ride through the car speakers.

00:36:14.440 --> 00:36:16.880
Like that was like us.

00:36:16.880 --> 00:36:18.240
That was our team that did that.

00:36:18.240 --> 00:36:18.900
That's pretty awesome.

00:36:18.900 --> 00:36:19.520
Yeah.

00:36:19.520 --> 00:36:21.040
So it was really awesome.

00:36:21.040 --> 00:36:21.560
Really fun.

00:36:21.560 --> 00:36:24.520
And so we do stuff like that.

00:36:25.380 --> 00:36:31.140
And in some cases stuff is written in Python, but more often than not it's now being like written in Java.

00:36:31.140 --> 00:36:47.220
The reason is we kind of like we kind of had this like corporate like mandate maybe about a year ago that we're kind of writing new services that have end user like facing like capabilities or like whatever.

00:36:47.220 --> 00:36:49.500
They have to be like written in Java.

00:36:50.500 --> 00:36:58.420
And it's because that I know a lot of people will say, well, wait, Spotify is like IO bound, not CPU bound.

00:36:58.420 --> 00:36:59.040
Why the move?

00:36:59.040 --> 00:37:01.160
And it's true that we are IO bound.

00:37:01.160 --> 00:37:18.080
And however, there's a lot of issues when trying to run like, I don't know, like 23 like processes of the same service on one machine trying to connect to the same Postgres database and memcache and stuff like that.

00:37:18.080 --> 00:37:24.980
So there's a lot of orchestration that gets complicated when you have multiple like Python processes running on one server.

00:37:24.980 --> 00:37:28.900
So believe me, I've tried, I've had many arguments.

00:37:28.900 --> 00:37:35.780
I've like sat down with our senior architect and really try to like go for Python and maybe PyPy or something like that.

00:37:35.780 --> 00:37:39.080
But in the end, I kind of like lost the argument.

00:37:39.840 --> 00:37:46.740
And so a lot of our end user facing stuff like the web API is written in Java.

00:37:46.740 --> 00:37:50.460
However, there's a lot of other stuff written in Python.

00:37:50.460 --> 00:37:56.660
For instance, let's see, all of our analytics stuff is in Python.

00:37:56.660 --> 00:38:04.740
We have Hadoop and we can run stuff with Java, but a lot of the actual jobs are written in Python.

00:38:04.740 --> 00:38:12.240
And then we have, let's see, like our DNS sort of service discovery systems written in Python.

00:38:12.240 --> 00:38:17.380
However, I think that's starting to move to our payment system in Python.

00:38:17.380 --> 00:38:31.740
Content management where like the labels that actually give us the music, that they'll dump a lot of metadata and songs itself to us, like FTP or something like that.

00:38:31.740 --> 00:38:37.880
And we process all of that in Python because it's like not really end user or speed.

00:38:37.880 --> 00:38:42.880
Yeah, you're not concerned about shaving that 5% performance off or whatever, right?

00:38:42.880 --> 00:38:44.120
Right, exactly.

00:38:44.120 --> 00:38:48.220
So there is a lot of Python within Spotify.

00:38:48.220 --> 00:38:50.940
It's just like not what...

00:38:50.940 --> 00:38:52.200
It's not at the center.

00:38:52.200 --> 00:38:53.960
Yeah, yeah, exactly.

00:38:53.960 --> 00:38:54.540
Yeah, okay.

00:38:54.540 --> 00:38:55.920
Well, that sounds really interesting.

00:38:56.920 --> 00:39:02.380
You were saying like some of the thoughts about like running a bunch of processes on this machine and on the treble.

00:39:02.380 --> 00:39:07.120
You know, maybe you guys could try some tricks with Docker.

00:39:07.120 --> 00:39:08.940
This could be a possibility.

00:39:08.940 --> 00:39:09.800
We actually...

00:39:09.800 --> 00:39:10.160
Have you tried that?

00:39:10.160 --> 00:39:11.880
We're actually using Docker.

00:39:11.880 --> 00:39:13.780
We're migrating towards Docker.

00:39:13.780 --> 00:39:17.940
We have open source Helios, which is our Docker manager or something like that.

00:39:18.720 --> 00:39:20.560
And that will also...

00:39:20.560 --> 00:39:27.140
That supposedly, in a lot of Pythonistas' eyes, will allow us to be okay with like running our services in Python.

00:39:27.140 --> 00:39:31.400
But it's still in the very early stages of like what Docker and Helios can do.

00:39:31.400 --> 00:39:32.380
Okay, that's really excellent.

00:39:32.380 --> 00:39:35.900
That's at github.com/Spotify slash Helios.

00:39:35.900 --> 00:39:37.380
I'll put that in the show notes as well.

00:39:37.380 --> 00:39:37.980
Very nice.

00:39:37.980 --> 00:39:38.940
Yeah.

00:39:39.200 --> 00:39:41.760
And then have you guys thought about Jython?

00:39:41.760 --> 00:39:43.740
Like if you're so into Java?

00:39:43.740 --> 00:39:45.860
Yeah.

00:39:45.860 --> 00:39:50.580
I actually don't know what our senior architect feels about that.

00:39:50.580 --> 00:39:51.380
I don't...

00:39:51.380 --> 00:39:53.940
Like I've actually never played with like within Jython.

00:39:53.940 --> 00:39:58.700
But it's definitely something to go the direction to look into.

00:39:58.700 --> 00:39:59.020
Sure.

00:39:59.020 --> 00:40:02.480
I know some of the other major companies around there are using it.

00:40:02.480 --> 00:40:05.440
But I probably shouldn't talk about it since I'm not sure if I'm supposed to.

00:40:05.440 --> 00:40:06.360
If I'm allowed to.

00:40:06.840 --> 00:40:13.280
But yeah, there's definitely some large like high-end web companies out there doing cool stuff with Jython.

00:40:13.280 --> 00:40:15.160
For a while, I thought it was dead.

00:40:15.160 --> 00:40:17.780
It seemed like it hadn't been updated in a long time.

00:40:17.780 --> 00:40:20.760
It was like supported like Python 2.5 or something.

00:40:20.760 --> 00:40:25.140
And finally, I think it now supports 2.7, but it still doesn't support 3 as far as I know.

00:40:25.140 --> 00:40:26.140
Mm-hmm.

00:40:26.140 --> 00:40:26.540
Right.

00:40:26.540 --> 00:40:33.900
A couple of years or maybe like a year and a half ago, we had one of the core developers of Jython come speak up, high ladies.

00:40:34.580 --> 00:40:38.160
And he was like, we just released 2.7 and now we can start 3.

00:40:38.160 --> 00:40:40.960
So there is energy and people behind it.

00:40:40.960 --> 00:40:42.400
It's just like not enough people.

00:40:42.400 --> 00:40:44.200
I'm sure it's a massive project.

00:40:44.200 --> 00:40:47.420
And if it doesn't have a lot of support, it's really hard to keep up.

00:40:47.420 --> 00:40:47.900
Definitely.

00:40:47.900 --> 00:40:53.400
But yeah, I'm glad to see it going because I know it enables some people to do cool stuff, which is all good.

00:40:53.400 --> 00:40:54.300
Mm-hmm.

00:40:54.300 --> 00:40:54.700
Right.

00:40:55.700 --> 00:41:01.060
So another thing that you like to do is speak in at conferences and user groups and meetups and stuff, right?

00:41:01.060 --> 00:41:01.920
Right.

00:41:01.920 --> 00:41:02.260
Yeah.

00:41:02.260 --> 00:41:08.640
And I saw you have a page with a whole bunch of sessions, like, I don't know, just a quick scroll count.

00:41:08.640 --> 00:41:12.880
It's like 15 or something, but quite a few at rogueland.com slash talks.

00:41:12.880 --> 00:41:14.080
Mm-hmm.

00:41:14.080 --> 00:41:18.720
Are there some of your favorites up there that you want to, like, point out to people, maybe have videos or something?

00:41:18.720 --> 00:41:19.120
Right.

00:41:20.560 --> 00:41:25.100
As an aside note, I literally just, like, over the weekend redid my site.

00:41:25.100 --> 00:41:28.380
And I only redid it for, like, the words part, like, the blog part.

00:41:28.380 --> 00:41:34.840
So I apologize if, like, people are going to, like, rogueland.com slash talks and be like, ew, this looks ugly.

00:41:34.840 --> 00:41:35.460
Like, whatever.

00:41:35.460 --> 00:41:36.380
Like, I'll get there.

00:41:36.380 --> 00:41:37.800
Let's say it looks minimalist, huh?

00:41:37.800 --> 00:41:38.460
Yeah.

00:41:38.460 --> 00:41:38.760
Yeah.

00:41:38.760 --> 00:41:39.500
Yeah, definitely.

00:41:39.500 --> 00:41:41.180
But yeah.

00:41:41.180 --> 00:41:45.820
So, like, actually, one of my favorite talks to give is how to spy with Python.

00:41:46.620 --> 00:41:55.200
And it's basically, like, working with Scapee, the project Scapee, to basically sniff, like, wireless traffic.

00:41:55.200 --> 00:41:58.180
It's a Python wrapper around TCP dump.

00:41:58.180 --> 00:42:04.740
And it's really fun to show people what you can do because that's basically what the NSA is doing.

00:42:04.740 --> 00:42:13.180
And, like, it's a tongue-in-cheek way to, like, show people, like, what's going on in, like, an international global level of, like, privacy issues.

00:42:13.800 --> 00:42:15.780
But Scapee is a lot of fun to play with.

00:42:15.780 --> 00:42:17.900
And it's one of my favorite talks to give.

00:42:17.900 --> 00:42:19.040
Yeah, that sounds really cool.

00:42:19.040 --> 00:42:19.760
Yeah.

00:42:19.760 --> 00:42:21.480
I recommend people check it out.

00:42:21.480 --> 00:42:24.760
And some of these are on YouTube and other places, Vimeo, whatever, right?

00:42:24.760 --> 00:42:26.100
Right, yeah.

00:42:26.100 --> 00:42:27.560
I try to link to everything.

00:42:27.560 --> 00:42:30.980
I should probably update some of this stuff, too.

00:42:30.980 --> 00:42:33.740
Well, if the page is in for a refresh, maybe, huh?

00:42:33.740 --> 00:42:34.640
Yeah, right.

00:42:34.640 --> 00:42:35.220
Cool.

00:42:36.240 --> 00:42:39.580
I'll put some of those in the show notes as well, and I'll link to that, of course.

00:42:39.580 --> 00:42:44.200
I think that just about covers all the stuff that I wanted to talk to you about.

00:42:44.200 --> 00:42:49.000
And I think it's a whole bunch of interesting paths.

00:42:49.000 --> 00:42:52.820
Like you said, it's a little scattered, but they're all super interesting.

00:42:52.820 --> 00:42:56.980
And so if people are out there with, like, meetups or user groups, can they, you know,

00:42:56.980 --> 00:43:00.720
do you recommend they go to New Coder and try some of your tutorials,

00:43:00.720 --> 00:43:03.620
maybe make those, like, workshops or sessions or something there?

00:43:04.840 --> 00:43:05.680
Yes, definitely.

00:43:05.680 --> 00:43:08.140
I have a couple of them.

00:43:08.140 --> 00:43:11.080
If you go to New Coder, I think it's just slash workshops,

00:43:11.080 --> 00:43:15.480
that there's, like, PDF versions of everything.

00:43:15.480 --> 00:43:18.380
They do need to be updated since my last site refresh.

00:43:18.380 --> 00:43:20.340
But everything's also on GitHub.

00:43:20.340 --> 00:43:25.000
And please feel free to, like, take them, adapt them however you want,

00:43:25.000 --> 00:43:26.700
and teach off them.

00:43:26.700 --> 00:43:32.500
A lot of PyLadies leaders actually take a couple of tutorials to lead their own workshops.

00:43:32.500 --> 00:43:33.800
So by all means.

00:43:34.640 --> 00:43:37.120
You know, I've done some stuff with Hour of Code and so on,

00:43:37.120 --> 00:43:40.320
and it seems really daunting to lead those types of groups

00:43:40.320 --> 00:43:43.700
and put something together for people to really appreciate.

00:43:43.700 --> 00:43:47.700
But if you can grab a resource like that, or, you know, in the case of Hour of Code,

00:43:47.700 --> 00:43:50.800
some of the little tutorials and stuff they have online,

00:43:50.800 --> 00:43:53.600
it makes it so much easier to get involved and help out in the community.

00:43:53.600 --> 00:43:54.960
Right, definitely.

00:43:54.960 --> 00:43:58.500
There's one more thing for people to, let's say it this way,

00:43:58.500 --> 00:44:01.240
there's one fewer excuse for people to use.

00:44:02.020 --> 00:44:02.700
Right, yeah.

00:44:02.700 --> 00:44:04.560
All right.

00:44:04.560 --> 00:44:08.280
Anything else you want to talk about while you're here?

00:44:08.280 --> 00:44:09.340
Let people know about?

00:44:09.340 --> 00:44:11.340
Well, I'll be at EuroPython.

00:44:11.340 --> 00:44:14.980
So if anyone else is going to EuroPython, come to say hi.

00:44:14.980 --> 00:44:16.240
I'm giving a couple talks there.

00:44:16.240 --> 00:44:17.680
That'll be excellent.

00:44:17.680 --> 00:44:18.300
What are the talks?

00:44:18.840 --> 00:44:21.060
One is one that I actually just gave this weekend.

00:44:21.060 --> 00:44:26.640
It's about how my team is doing metrics and how we're, like, it's metrics-driven development,

00:44:26.640 --> 00:44:30.420
how we're powering sort of the data that we are newly collecting behind, like,

00:44:30.420 --> 00:44:32.480
the sort of decisions that we're making.

00:44:32.480 --> 00:44:38.080
And the talk is about kind of taking what we learned and, like,

00:44:38.080 --> 00:44:40.880
you don't need to necessarily measure everything, but, like,

00:44:40.880 --> 00:44:43.480
what do you need to measure and how do you decide that?

00:44:43.940 --> 00:44:50.500
And then the other talk that I'll be giving is basically kind of sort of like a status update

00:44:50.500 --> 00:44:53.440
slash what we still need to do about, like, diversity in Python.

00:44:53.440 --> 00:45:01.560
We've come a long way, but there's still a long way to go to really sort of create a welcoming environment for everyone.

00:45:02.140 --> 00:45:06.700
And since Python community is a leader, we should, in that sort of thing,

00:45:06.700 --> 00:45:11.060
we should definitely continue to be a leader in being very diverse and welcoming.

00:45:11.060 --> 00:45:12.800
Yeah, I totally agree.

00:45:12.800 --> 00:45:16.760
And it seems like that's still a really positive thing going on there.

00:45:16.760 --> 00:45:18.060
It's just not done.

00:45:18.060 --> 00:45:19.640
Right, right, yeah.

00:45:19.640 --> 00:45:25.060
All right, so one of the questions I like to ask my guests before we wrap up a show is,

00:45:25.060 --> 00:45:29.340
what's your favorite PyPI package or thing out there that you'd like to tell everyone,

00:45:29.340 --> 00:45:30.580
hey, check this out, it's really cool?

00:45:31.580 --> 00:45:32.900
Ramifications, of course.

00:45:32.900 --> 00:45:34.700
Right, yeah.

00:45:34.700 --> 00:45:39.000
But besides something else that I've written,

00:45:39.000 --> 00:45:47.700
one of my favorite packages that kind of was released a few weeks ago was adders, A-T-T-R-S.

00:45:47.700 --> 00:45:54.240
And it's basically a package that allows you to, like, not have to write a bunch of boilerplate code.

00:45:54.240 --> 00:45:55.400
Like what? Give us an example.

00:45:55.400 --> 00:45:57.920
So actually, I use it in ramifications.

00:45:59.920 --> 00:46:08.780
Adders allows you to kind of, like, make a nice class and, like, set some attributes of, like,

00:46:08.780 --> 00:46:12.740
this should be in the init method or should be in the repr method.

00:46:12.740 --> 00:46:19.520
And allows you to do, like, some, like, comparisons, like a complete set of comparisons.

00:46:19.780 --> 00:46:24.100
It just, it makes, like, writing code even easier, even more simpler.

00:46:24.100 --> 00:46:24.740
Yeah.

00:46:24.740 --> 00:46:25.900
Yeah, that's cool.

00:46:25.900 --> 00:46:26.460
Very cool.

00:46:26.460 --> 00:46:28.160
Like default values and things like that.

00:46:28.160 --> 00:46:28.860
Right.

00:46:28.860 --> 00:46:29.220
Yeah.

00:46:29.220 --> 00:46:29.460
Okay.

00:46:29.460 --> 00:46:29.780
Exactly.

00:46:29.780 --> 00:46:30.380
Very nice.

00:46:30.380 --> 00:46:31.440
Yeah, I'll put that in the show notes.

00:46:31.440 --> 00:46:34.280
And they've got some good documentation as well.

00:46:34.280 --> 00:46:35.740
Yes, definitely.

00:46:35.740 --> 00:46:37.900
And, yeah, ramifications definitely uses it.

00:46:37.900 --> 00:46:40.720
And, like, so much more code would have been written without it.

00:46:40.720 --> 00:46:41.440
Really nice.

00:46:41.440 --> 00:46:41.920
Really nice.

00:46:42.360 --> 00:46:44.360
All right, final question before you go.

00:46:44.360 --> 00:46:46.360
What editor are you using these days?

00:46:46.360 --> 00:46:48.220
I use Sublime.

00:46:48.220 --> 00:46:48.660
Sublime.

00:46:48.660 --> 00:46:49.220
Oh, yeah.

00:46:49.220 --> 00:46:49.580
Yeah.

00:46:49.580 --> 00:46:51.220
I like Sublime as well.

00:46:51.220 --> 00:46:53.140
I do, too.

00:46:53.140 --> 00:46:56.320
My coworker's trying to get me to use, like, PyCharm or IntelliJ.

00:46:56.560 --> 00:46:58.620
But, I mean, every time I try, I just get sad.

00:46:58.620 --> 00:47:00.560
So, I just move back to Sublime.

00:47:00.560 --> 00:47:01.500
Yeah, that's really interesting.

00:47:01.500 --> 00:47:03.480
I use Sublime for a lot of things.

00:47:03.480 --> 00:47:06.180
I'm a big fan of PyCharm myself as well.

00:47:06.180 --> 00:47:11.140
But I certainly, you know, a close second is Sublime for many things.

00:47:11.140 --> 00:47:12.980
It's definitely nice.

00:47:12.980 --> 00:47:13.220
Right.

00:47:13.220 --> 00:47:15.400
All right, Lynn.

00:47:15.400 --> 00:47:16.480
Thank you for being on the show.

00:47:16.480 --> 00:47:19.440
It's been super interesting to touch on all these topics.

00:47:19.440 --> 00:47:20.540
Yes, thanks for having me.

00:47:20.540 --> 00:47:21.280
It's been a lot of fun.

00:47:21.280 --> 00:47:21.560
Yeah.

00:47:21.560 --> 00:47:22.080
Great.

00:47:22.080 --> 00:47:25.140
And we'll put links to, like, your website and your Twitter and everything in the show notes

00:47:25.140 --> 00:47:27.920
so people can just go to the website and find you that way.

00:47:27.920 --> 00:47:28.800
That's fantastic.

00:47:28.800 --> 00:47:29.820
Thank you so much.

00:47:29.820 --> 00:47:30.300
Thanks.

00:47:30.300 --> 00:47:30.520
Bye.

00:47:30.520 --> 00:47:34.160
This has been another episode of Talk Python To Me.

00:47:34.160 --> 00:47:35.920
Today's guest was Lynn Root.

00:47:35.920 --> 00:47:39.260
And this episode has been sponsored by Codeship and Hired.

00:47:39.260 --> 00:47:41.040
Thanks, guys, for supporting the show.

00:47:41.040 --> 00:47:46.480
Check out Codeship at Codeship.com and thank them on Twitter via at Codeship.

00:47:46.480 --> 00:47:48.620
Don't forget the discount code for listeners.

00:47:48.620 --> 00:47:49.320
It's easy.

00:47:49.320 --> 00:47:50.280
Talk Python.

00:47:50.280 --> 00:47:50.900
All caps.

00:47:50.900 --> 00:47:51.760
No spaces.

00:47:51.760 --> 00:47:54.960
Hired wants to help you find your next big thing.

00:47:54.960 --> 00:48:01.140
Visit Hired.com slash Talk Python To Me to get five or more offers with a salary and equity

00:48:01.140 --> 00:48:02.420
presented right up front.

00:48:02.420 --> 00:48:05.760
You'll also get a special listener signing bonus of $4,000.

00:48:05.760 --> 00:48:09.800
There are just two more days to get the Talk Python To Me t-shirt.

00:48:09.800 --> 00:48:14.800
Quick, go to bit.ly slash python shirt and reserve yours before the Kickstarter closes on Thursday.

00:48:14.800 --> 00:48:21.400
You can find the links from the show at Talk Python To Me.com slash episodes slash show slash 15.

00:48:22.200 --> 00:48:25.040
And before you go, be sure to subscribe to the show.

00:48:25.040 --> 00:48:27.740
Open your favorite podcatcher and search for Python.

00:48:27.740 --> 00:48:29.060
We should be right at the top.

00:48:29.060 --> 00:48:33.340
You can also find the iTunes and direct RSS feeds in the footer on the website.

00:48:33.340 --> 00:48:35.540
This is your host, Michael Kennedy.

00:48:35.540 --> 00:48:36.380
Thanks for listening.

00:48:36.380 --> 00:48:38.920
Smix, take us out of here.

00:48:38.920 --> 00:49:00.240
I'm first to follow.

