WEBVTT

00:00:00.001 --> 00:00:03.320
People often ask me how they can find a Python community to be part of,

00:00:03.320 --> 00:00:08.000
maybe a discussion forum or a Slack channel. This week, we look at one of the most active

00:00:08.000 --> 00:00:13.700
communities, Python Discord. It's Python on a Discord server, but much more than that too.

00:00:13.700 --> 00:00:18.440
You'll meet Leon Sandøy, who along with a team of folks runs Python Discord.

00:00:18.440 --> 00:00:26.000
Join us on this episode of Talk Python To Me, number 305, recorded February 17th, 2021.

00:00:26.000 --> 00:00:44.120
Welcome to Talk Python To Me, a weekly podcast on Python, the language, the libraries,

00:00:44.120 --> 00:00:48.660
the ecosystem, and the personalities. This is your host, Michael Kennedy. Follow me on Twitter,

00:00:48.660 --> 00:00:53.460
where I'm @mkennedy, and keep up with the show and listen to past episodes at talkpython.fm,

00:00:53.580 --> 00:01:00.620
and follow the show on Twitter via at talkpython. This episode is brought to you by Linode and us.

00:01:00.620 --> 00:01:02.900
Leon, welcome to Talk Python To Me.

00:01:02.900 --> 00:01:04.320
Thank you. Thanks for having me on.

00:01:04.320 --> 00:01:08.720
Yeah, it's great to have you on. You're doing such interesting work in the community,

00:01:08.720 --> 00:01:13.700
and I'm excited to just give you a chance to share what you're doing with the world. It's

00:01:13.700 --> 00:01:18.400
cool what's going on over at Python Discord, and it's a lot bigger than I think people realize.

00:01:18.400 --> 00:01:24.500
Yeah, especially the last year, it's completely taken off. It's quadrupled in size over the last

00:01:24.500 --> 00:01:24.980
year. Wow.

00:01:24.980 --> 00:01:32.500
And we have 150,000 users now, 100 members of staff, and we're involved in all sorts of conferences and

00:01:32.500 --> 00:01:38.040
helping out in the ecosystem overall, I think. It's starting to become a big deal. I'm really

00:01:38.040 --> 00:01:39.120
excited to be part of it.

00:01:39.120 --> 00:01:42.220
Yeah, I would say that's fantastic. Now, before we get into the main topic,

00:01:42.220 --> 00:01:46.540
let's hear a little bit about you and your background. How did you get into programming in Python?

00:01:46.540 --> 00:01:51.740
It's an interesting story. When I was six, my grandpa bought me my first computer,

00:01:51.740 --> 00:01:59.080
and he was like an autodidact. He was an engineer, like a petroleum engineer, and he learned all sorts

00:01:59.080 --> 00:02:03.900
of stuff on his own time, and he wanted me to get into computers. And I started learning a little bit,

00:02:03.900 --> 00:02:09.340
but I never picked up programming because the consensus in the community where I grew up was

00:02:09.340 --> 00:02:15.020
that programming was this thing that you needed academics to do. You needed that education,

00:02:15.020 --> 00:02:19.740
you needed that university background, whatever. Like, it was mathsy, it was complicated. It's not

00:02:19.740 --> 00:02:24.420
something that a young person could do. And growing up in the 90s, that was a little bit more true then

00:02:24.420 --> 00:02:29.340
than it is now, but it still wasn't true. And I went a different way, and I ended up in music.

00:02:29.340 --> 00:02:34.480
I started studying music when I was a little older, and I kind of gave up on my dreams of, like,

00:02:34.480 --> 00:02:39.780
being a computer engineer. I even dropped out of school, never finished my education, wanted to be a full-time

00:02:39.780 --> 00:02:44.960
musician. That didn't work out. Turns out, it's not very well paid, and you'd really have to kind of get lucky.

00:02:44.960 --> 00:02:50.060
Yeah, it's a tough one, right? It's fantastic if you can make it, but it's not easy.

00:02:50.060 --> 00:02:51.460
I gave it a good try. I learned a lot.

00:02:51.460 --> 00:02:51.840
Yeah.

00:02:51.900 --> 00:02:56.980
But ultimately, I went back to, like, IT. I did, like, customer support. I did, like,

00:02:56.980 --> 00:03:03.140
operations, stuff like that. And my sweetheart, my love, she got me this book. This was, like,

00:03:03.140 --> 00:03:09.080
14 years ago. As almost like a joke for my birthday, she got me a C++ book. Like, I don't know what to

00:03:09.080 --> 00:03:14.300
get you, but you like computers, right? And I sort of, I had this reaction, like, you don't know what

00:03:14.300 --> 00:03:18.300
you've done. Like, this isn't for me. I don't, I can't do anything with this. This is for people who have

00:03:18.300 --> 00:03:23.940
the academics. All these preconceptions flared up, and I just felt like it was stupid. But she insisted

00:03:23.940 --> 00:03:30.320
I give it a try, and I read this book on the plane ride, and it was, like, simultaneously an epiphany

00:03:30.320 --> 00:03:36.140
that, like, holy shit, I can actually do this. I like this. This is logical. And at the same time, I was pissed

00:03:36.140 --> 00:03:40.900
because I felt like my whole life people had been lying to me saying that I couldn't do this, and that I had,

00:03:40.900 --> 00:03:45.720
like, disregarded it. I'm starting, I was 21. I could have started 10 years before that.

00:03:45.880 --> 00:03:48.340
Yeah, I've been wasting my time because I had this misconception, right?

00:03:48.340 --> 00:03:52.800
I think a lot of people labor under that misconception that, like, that programming is something that you

00:03:52.800 --> 00:03:57.540
can't easily, like, that's something that people do after a university degree or whatever. But that's

00:03:57.540 --> 00:03:59.480
just really not the case, especially today.

00:03:59.480 --> 00:04:04.200
Yeah, especially today. There's so many resources. Like, you talk about getting a book in the 90s,

00:04:04.200 --> 00:04:09.680
and I got, I can't remember what my C++ book I got in the 90s, but it was fantastic. But it was just a

00:04:09.680 --> 00:04:13.920
book. And if you got stuck, well, you read the chapter again. You know what I mean? And that was it,

00:04:13.920 --> 00:04:19.420
right? It was like really hard. Now there's YouTube, there's online courses, video courses,

00:04:19.420 --> 00:04:25.200
there's communities like Python Discord. The support that is there is much to all this stuff that you're

00:04:25.200 --> 00:04:27.100
talking about. It's more true now than ever.

00:04:27.100 --> 00:04:32.280
Yes, exactly. In my involvement in Python Discord, I'm trying to be part of letting people understand

00:04:32.280 --> 00:04:37.260
that that's true, like being that support system to help people get into programming, even though

00:04:37.260 --> 00:04:42.220
they're young and inexperienced, that it is possible. You can come hang out with us,

00:04:42.220 --> 00:04:46.460
we can help you get into Python, learn how, you know, take your first steps into development.

00:04:46.460 --> 00:04:50.720
I think that's important. Because I, yeah, I'm a little upset that that wasn't,

00:04:50.720 --> 00:04:52.160
that I didn't take that path earlier.

00:04:52.160 --> 00:04:55.740
I didn't have quite the same experience, but I had a similar experience where I thought,

00:04:55.740 --> 00:04:59.320
oh, this is interesting. I would be cool. But it's, there's no way I can do that.

00:04:59.320 --> 00:05:00.540
Yeah. Well, when did you start?

00:05:00.540 --> 00:05:06.600
I started doing C++ programming my senior year in college for a research project,

00:05:06.600 --> 00:05:11.220
because I had kind of been good with computers, but I didn't really consider myself a programmer.

00:05:11.220 --> 00:05:16.640
So I just, you know, I pursued other things like science and whatnot and math, and I just

00:05:16.640 --> 00:05:21.840
finally got into it. And the thing that really made me realize, like, this is something I really

00:05:21.840 --> 00:05:27.780
like is I remember working on these research projects, and it was a math research project,

00:05:27.780 --> 00:05:31.880
but also required a lot of visualization and programming. And I would be really excited when

00:05:31.880 --> 00:05:36.480
I'm doing the programming part, then I have to get up some programming math, like I have to solve

00:05:36.480 --> 00:05:40.180
some of the math problems in code. I'm like, oh, this part is kind of boring. Okay, back to the

00:05:40.180 --> 00:05:44.260
program. I'm like, oh, wait a minute, the part that I'm supposed to be here for is the part I like

00:05:44.260 --> 00:05:49.700
Lee. So the programming is just super awesome. Yeah, so later as well. But yeah, it's better late than

00:05:49.700 --> 00:05:50.080
never, right?

00:05:50.080 --> 00:05:55.000
Yeah, that's sort of my story as well. Like, when I picked up, I didn't really like C++, I learned C,

00:05:55.000 --> 00:05:59.960
I didn't really like that either. I got a little bit into like game programming, I looked at C#,

00:05:59.960 --> 00:06:05.220
later Unity, and none of it really clicked with me. But when I found Python, it was like, you know,

00:06:05.220 --> 00:06:10.100
angel chorus, like, finally, I found my home, it was like the wool being lifted off my eyes,

00:06:10.100 --> 00:06:15.720
like I found my thing. And I started putting it in every facet, every corner of my life. Like,

00:06:15.900 --> 00:06:21.660
I was working in as I was an ops engineer at the time, working for an ISP. And I just started

00:06:21.660 --> 00:06:25.600
automating all of the boring stuff. I was like, yeah, Excel stuff.

00:06:25.600 --> 00:06:30.320
You get so much joy out of that, because it's those things that just grind on you every day.

00:06:30.320 --> 00:06:34.700
And then you're like, wait a minute, that can happen instantly and automatically go away.

00:06:35.000 --> 00:06:39.500
And then after doing that for a couple years, I realized that I was having way more fun writing

00:06:39.500 --> 00:06:42.900
the code than I wasn't doing anything else in my job. And I needed to just like pivot.

00:06:42.900 --> 00:06:43.260
Yeah.

00:06:43.260 --> 00:06:48.560
But it's hard when you don't have that any education, no real experience to find that first job.

00:06:48.560 --> 00:06:53.500
I applied like 50 places, I think before someone really gave me a chance. And they only gave me a

00:06:53.500 --> 00:06:57.840
chance because they were like, yeah, but we'll give you a tough technical interview. It'll be like

00:06:57.840 --> 00:07:02.060
several stages. You'll have to write a whole project and send it into us. This will take a

00:07:02.060 --> 00:07:07.600
week like to finish. But I got through it and they were impressed and they gave me a chance. And once

00:07:07.600 --> 00:07:12.740
you get that first job, at least here in Norway, where I'm situated, they basically throw jobs at

00:07:12.740 --> 00:07:16.140
you if you have a couple of years experience. I think that's pretty true in general. I think it's

00:07:16.140 --> 00:07:21.440
true in the US as well, where that first step is such a big one. But if you can get into the industry

00:07:21.440 --> 00:07:26.460
and like, oh, you know what you're doing, then all these opportunities open up. So I think anyone

00:07:26.460 --> 00:07:31.040
who's out there listening, who feels frustrated, like, oh, it's so hard to get that first job. Like

00:07:31.040 --> 00:07:35.460
that is the hardest career step you're ever going to make. Right. Because after that, it's just,

00:07:35.460 --> 00:07:40.720
it's so much smoother and easier. I think especially for people who are in other jobs, and they're

00:07:40.720 --> 00:07:45.580
looking to like change into development. It's tough. But once you have that foot in the door,

00:07:45.580 --> 00:07:50.780
it's amazing. Like I could pretty much change jobs today if I wanted to, to any number of other

00:07:50.780 --> 00:07:56.400
things. Yeah, absolutely. But what I want, because I love my job. Yeah. So the other question I'll

00:07:56.400 --> 00:07:59.740
ask at the beginning of the show, it's because it's really interesting to hear the perspective

00:07:59.740 --> 00:08:04.360
that people are coming from. Yeah. You know, are you a DevOps person? Are you a scientist? Are you a

00:08:04.360 --> 00:08:10.180
web developer? So what do you do these days? So I'm working for a company called Dignio. And we're a

00:08:10.180 --> 00:08:18.460
med tech company focused on remote care is the technical term for it. So essentially, we're the pitch is,

00:08:18.460 --> 00:08:24.880
did you know that hospitals and governments in general spend like a significant amount of their budget

00:08:24.880 --> 00:08:30.740
dealing with chronically ill patients who make up a minority of the actual patients who are being

00:08:30.740 --> 00:08:35.960
treated. So we're spending like most of our money on the fewest of the people. It's like the last one

00:08:35.960 --> 00:08:41.200
year of life is so expensive compared to the prior, you know, N minus one. Yeah. And then you have this

00:08:41.200 --> 00:08:46.300
shift going on in certain countries where like, the age groups are shifting. So there are more

00:08:46.300 --> 00:08:52.600
older people, and you need way more elder care. And it's expensive because the elderly often have

00:08:52.600 --> 00:08:57.360
chronic diseases. And again, that takes up an enormous amount of resources. So the main thing is

00:08:57.360 --> 00:09:02.220
they keep having to go to doctors, they have to go to hospitals to get like simple checkups and

00:09:02.220 --> 00:09:07.420
measurements. And so our solution is, well, they should do that from home. They shouldn't have to

00:09:07.420 --> 00:09:13.080
constantly be traveling around to places to like get their blood pressure measured or whatever. We can

00:09:13.080 --> 00:09:17.280
do that via Bluetooth and an app. Yeah. And then you can just deliver all of the metrics to the doctor

00:09:17.280 --> 00:09:21.980
and they can contact them if something changes, if it looks bad, right? Like so that they get the

00:09:22.040 --> 00:09:26.800
treatment when they need it, but they don't have to constantly be wasting their own time and the,

00:09:26.800 --> 00:09:32.460
well, the government's resources essentially on, taking the bus for four hours to get to the

00:09:32.460 --> 00:09:37.160
nearest, whatever stupid. So we're trying to solve that. Yeah. That's fantastic. And right now we're part

00:09:37.160 --> 00:09:42.640
of the COVID-19 thing. I mean, remote care plays a big role there. We want to keep people out of hospitals,

00:09:42.640 --> 00:09:48.060
obviously, and, and prevent, infection from spreading. So having them, you know,

00:09:48.060 --> 00:09:52.280
they're doing their measurements at home, they're reporting their symptoms and taking their own

00:09:52.280 --> 00:09:57.700
temperature measurements and stuff like that. And then the COVID-19 teams can just monitor them

00:09:57.700 --> 00:10:02.880
remotely. So we're working with the NHS and the UK, we're working here in Norway with, the capital

00:10:02.880 --> 00:10:08.620
and, with a bunch of hospitals. We're trying to get deeper into China. It's really exciting work.

00:10:08.620 --> 00:10:12.940
And I think that, you know, like ultimately it's, it's important work. It makes me sleep well at night.

00:10:12.940 --> 00:10:18.140
Yeah. But as to legitimately helping people, right? Yeah. Right. I think ultimately we're going to save

00:10:18.140 --> 00:10:24.460
lives. Like at some point you inevitably save a life because you're helping relieve pressure from

00:10:24.460 --> 00:10:29.260
these, like import, these critical systems. And, my husband, maybe that's especially true during a

00:10:29.260 --> 00:10:34.500
pandemic. You have to like keep the capacity open at hospitals and so on. Like, yeah. So anything you can

00:10:34.500 --> 00:10:41.540
do. I often think about what changes are going to stick after the pandemic is over or reduced.

00:10:41.540 --> 00:10:46.760
And what's just going to go back to normal. Right. I think that that kind of remote care stuff is going

00:10:46.760 --> 00:10:50.060
to stick. I think it's going to be one of the things like, why didn't we just do this before?

00:10:50.060 --> 00:10:53.660
Right. You really don't need to come in to say, are you still feeling fine? Yeah, I'm feeling fine.

00:10:53.660 --> 00:10:57.860
Here's my measurements that my wearable has been collecting. Yeah. It looks like you're fine. Right.

00:10:57.860 --> 00:11:02.660
And we've been around for 10 years. Like remote care has been around since the early 2010s,

00:11:02.660 --> 00:11:09.720
but it's like, as soon as the pandemic hit, it exploded. You've seen companies like assume and all of these

00:11:09.720 --> 00:11:15.520
people who specialize in having your doctor check up remotely. They're exploding. They're being

00:11:15.520 --> 00:11:20.900
propelled five, 10 years into the future in terms of like growth and opportunity. And yeah, that's not

00:11:20.900 --> 00:11:26.380
going to go away after the pandemic calms down. We're here to stay now. And I know firsthand that

00:11:26.380 --> 00:11:31.860
municipalities and governments are buying in not just like temporary relief for COVID-19,

00:11:31.860 --> 00:11:36.640
but more permanent solutions for, for remote care and monitoring. So this is definitely one of the

00:11:36.640 --> 00:11:40.600
changes we're going to see, I think, stick around. Yeah. And Python's powering some of that.

00:11:40.600 --> 00:11:46.620
Python's powering most of that. Our whole backend is Python, Flask. Our infrastructure as code is mostly

00:11:46.620 --> 00:11:52.960
in Python and also a lot of Terraform. I've been involved across the whole stack. We also use

00:11:52.960 --> 00:12:00.600
Angular for our front end. We have Swift and Android and Kotlin. So there's a big stack, but Python is at

00:12:00.600 --> 00:12:06.420
its heart running the backend that talks to all of the different platforms that their services use.

00:12:06.420 --> 00:12:10.620
Cool. Yeah. Very neat. Yeah. Sounds like a fun place to work. I was just going to say, before we move on to

00:12:10.620 --> 00:12:16.580
the main topic though, there is one other thing that I think you are quite notable for in the recent days.

00:12:16.580 --> 00:12:18.680
Yeah. I think I know what you're going to say.

00:12:19.040 --> 00:12:24.800
Yeah. Yeah. So you did this beautiful song called the Pep 8 song. And look at that. It's almost got

00:12:24.800 --> 00:12:29.440
30,000 views on YouTube, which is pretty amazing. I'll put the link into the live stream for people

00:12:29.440 --> 00:12:32.660
to check out. But yeah. What was the inspiration behind that? That was really well received.

00:12:32.660 --> 00:12:34.040
Yeah. So it was a team effort, right?

00:12:34.040 --> 00:12:39.240
That was a team effort. One of my admins, Daniel Brown, came to me with an idea. He said,

00:12:39.240 --> 00:12:45.100
you know, wouldn't it be funny if we did a version of Mad World, but instead of singing Mad World,

00:12:45.100 --> 00:12:50.420
you sing Pep 8. And the whole song is just about... So he just gave me the idea. And it was beautiful.

00:12:50.420 --> 00:12:53.620
I was like, yes, we need to do it immediately. I just got started. Yeah.

00:12:53.740 --> 00:12:59.360
I got some people involved in helping out to finish everything up. And my sweetheart filmed it.

00:12:59.360 --> 00:13:07.020
So it was great. We have an outreach team at Python Discord with Sebastian Seth in the lead. And he

00:13:07.020 --> 00:13:12.420
helped sort of like get it out there. And I think we really managed to somehow get it out there. I mean,

00:13:12.420 --> 00:13:16.460
this could have been a thing that nobody ever saw, but somehow it broke through.

00:13:16.460 --> 00:13:21.280
Yeah. Yeah. There's probably a lot of great stuff that got created and posted and like went nowhere,

00:13:21.280 --> 00:13:25.480
right? Yeah, for sure. No, this was fun. I can't really take much credit because it's just a cover

00:13:25.480 --> 00:13:30.200
of an existing song, but I've been making music since I was a teenager. And, you know, like I said,

00:13:30.200 --> 00:13:35.800
I tried to be a musician. So I cherish every occasion I get to actually sit down and make something fun.

00:13:35.800 --> 00:13:40.440
And like, especially when you can share it with a community and they like it. So most of the music

00:13:40.440 --> 00:13:45.120
I write, nobody will ever hear. Yeah. There's very few people. So this is just, yeah, it's been really fun.

00:13:45.120 --> 00:13:48.360
Yeah. Well, if you haven't heard the song, I'll put the link in the show notes. People should

00:13:48.360 --> 00:13:52.960
definitely check it out because it's, it's all about the, you know, don't use try except pass.

00:13:52.960 --> 00:13:57.240
Here's what you do with comments, all the stuff that you learn about in Pep 8 to write good Python

00:13:57.240 --> 00:14:03.560
code, but musical form. Isn't it bizarre how much music like connects with your memory?

00:14:03.560 --> 00:14:08.460
You know, like, like my daughters, when they were younger, they would sing songs. They would know

00:14:08.460 --> 00:14:15.320
every word. There was this biology teacher who wrapped the energy cycle of the cell, like mitochondria and

00:14:15.320 --> 00:14:19.620
all that. And like, she would study for biology by just listening to the rap about mitochondria. And

00:14:19.620 --> 00:14:24.700
you've got Hamilton, the musical, which so many people listened to and learned about like detailed

00:14:24.700 --> 00:14:29.380
American history, which they would think was so boring, but then it's in music form. So then I love it.

00:14:29.380 --> 00:14:34.700
Right. That's weird. Right. Animaniac song with all the states and the periodic table thing that was

00:14:34.700 --> 00:14:39.200
right. All of these are examples of, yeah, it's a, it's a vehicle for learning. I think it actually

00:14:39.200 --> 00:14:44.180
works. I love the Pep 8. It's really dear to my heart. It's one of these documents. I think that

00:14:44.180 --> 00:14:50.060
like, it's so perfectly explained sort of the culture of Python and it's well-written. It's easy to read.

00:14:50.060 --> 00:14:53.880
You should all read it too. Not just like, listen to the song. You should go read the Pep 8. If you

00:14:53.880 --> 00:14:59.080
haven't read it, it's very, very edible. Yeah. It's like the operating instructions for Python code.

00:14:59.080 --> 00:15:05.080
This portion of Talk Python To Me is sponsored by Linode. Simplify your infrastructure and cut

00:15:05.080 --> 00:15:09.660
your cloud bills in half with Linode's Linux virtual machines. Develop, deploy, and scale your

00:15:09.660 --> 00:15:14.380
modern applications faster and easier. Whether you're developing a personal project or managing

00:15:14.380 --> 00:15:19.240
large workloads, you deserve simple, affordable, and accessible cloud computing solutions.

00:15:19.240 --> 00:15:25.360
As listeners of Talk Python To Me, you'll get a $100 free credit. You can find all the details at

00:15:25.360 --> 00:15:31.560
 talkpython.fm/Linode. Linode has data centers around the world with the same simple and consistent

00:15:31.560 --> 00:15:37.000
pricing regardless of location. Just choose the data center that's nearest to your users. You'll also

00:15:37.000 --> 00:15:44.020
receive 24-7, 365 human support with no tiers or handoffs regardless of your plan size. You can choose

00:15:44.020 --> 00:15:50.320
shared and dedicated compute instances, or you can use your $100 in credit on S3 compatible object storage,

00:15:50.360 --> 00:15:57.620
managed Kubernetes clusters, and more. If it runs on Linux, it runs on Linode. Visit talkpython.fm

00:15:57.620 --> 00:16:02.680
slash Linode or click the link in your show notes, then click that create free account button to get

00:16:02.680 --> 00:16:09.900
started. The main thing that we're here to talk about today is Python Discord. That's right. So

00:16:09.900 --> 00:16:15.580
Discord is something kind of like Slack, but more focused on the gaming community traditionally.

00:16:15.780 --> 00:16:18.920
Why don't you tell people what Discord is real quick and then Python Discord?

00:16:18.920 --> 00:16:23.520
Yeah. So they started out as sort of a competitor for stuff like TeamSpeak and

00:16:23.520 --> 00:16:28.420
they wanted to be that gaming platform, but then they've sort of pivoted because they've attracted

00:16:28.420 --> 00:16:34.000
communities that are way outside of that core market. And now recently they've rebranded to being

00:16:34.000 --> 00:16:38.920
just like a place for people to have good conversations like that local community feel like

00:16:38.920 --> 00:16:46.400
you have a sewing club or your local swim team, get a Discord. And it really is a solid platform. They

00:16:46.400 --> 00:16:51.740
have very high quality video conversations and every feature that Slack has and then some.

00:16:51.740 --> 00:16:55.120
Yeah. What I really like is you can just go in there and you could be chatting in a room or you

00:16:55.120 --> 00:16:59.260
could just say, click a button and like, let's make this a video call. And then it is, right?

00:16:59.260 --> 00:16:59.640
Right.

00:16:59.640 --> 00:17:03.560
It's really easy to sort of jump through the different mediums of communication there.

00:17:03.560 --> 00:17:08.040
But I think the thing that they nail that Slack isn't, I mean, Slack is really intended for these

00:17:08.040 --> 00:17:14.100
like small corporate teams so that you can have your own space. Whereas Discord is more for like

00:17:14.100 --> 00:17:20.100
open communities, right? So they want more people to join in. So it's got this discoverability aspect.

00:17:20.100 --> 00:17:25.900
You can grow your community as big as you want. On Slack, technically after you have a certain

00:17:25.900 --> 00:17:31.880
amount of messages, they tell you, well, now you have to like pay to unlock the content in this channel.

00:17:31.880 --> 00:17:35.460
And that's not suitable if you have a hundred thousand people in the community and they're

00:17:35.460 --> 00:17:39.760
charging eight bucks a head, like it doesn't work. So Slack's great for your work chat,

00:17:39.760 --> 00:17:44.860
but it's not really suitable for a massive community like Python Discord. So it's a really,

00:17:44.860 --> 00:17:49.320
really great place for that. A lot of tech platforms have moved to Discord as well.

00:17:49.320 --> 00:17:53.860
You have the Reactiflux people. That's a massive server. Pallets projects,

00:17:53.860 --> 00:18:00.640
the people who made the Flask and Click, they're on Discord as well. Many of the game frameworks like

00:18:00.640 --> 00:18:06.040
pyglet and Pygame was there up until recently. I think they may have disbanded that server, but

00:18:06.040 --> 00:18:08.960
yeah, there's a lot of tech there happening. Great communities.

00:18:08.960 --> 00:18:13.360
Yeah. Another thing that you talked about that's really interesting here is there's a whole way to

00:18:13.360 --> 00:18:18.280
program it with Python that allows you to sort of make it better like bots and other things, right?

00:18:18.280 --> 00:18:25.100
That's right. It's quite accessible to Python through this framework called Discord.py. So it's made by this

00:18:25.100 --> 00:18:31.000
guy called Danny. And it's fairly easy to work with. It's fully asynchronous. So in that sense,

00:18:31.000 --> 00:18:36.240
it's a little high level. You have to understand the async await syntax. Not everyone learns that

00:18:36.240 --> 00:18:43.100
their first day of Python. But once you get there, it's very nice. It uses a lot of uses type annotations

00:18:43.100 --> 00:19:07.320
in a clever way to convert the input that you send to the bot to something useful like a user or a channel. It uses lots of decorators. So it's actually quite a beautiful solution to that problem. And you can make very, very scalable bots that can be on thousands of communities at the same time, interacting with like millions of users without it falling apart.

00:19:07.320 --> 00:19:18.300
Yeah, yeah, very cool. Joe Banks out there in the live stream says at Python Discord, we'd hit the slack limit of around 1000, sorry, 10,000 messages in less than 10 hours.

00:19:18.300 --> 00:19:18.560
Yeah.

00:19:18.560 --> 00:19:21.780
Yeah. That's not a great long term solution, is it?

00:19:21.780 --> 00:19:25.820
No, it wouldn't work for us. Joe Banks, of course, being one of the co owners of Python Discord.

00:19:25.820 --> 00:19:26.700
Yeah, fantastic.

00:19:26.700 --> 00:19:27.780
Along with Sebastian Seth.

00:19:27.780 --> 00:19:30.860
Yeah, yeah. Very cool. So how'd this get started? Tell us about the community.

00:19:30.860 --> 00:19:44.540
About four years ago, I met Joe in this community. At that time, it had 200 users. And it was a very different place. It wasn't like nobody there really took it seriously. It was just a small server of people who were into Python.

00:19:44.540 --> 00:20:09.420
But then I guess there were a couple of us who started really seeing the potential that this had to be a great place to learn and to teach. And I've always believed that teaching is a fantastic way for me to cement my skills to improve my own skills. So I've always like tried to spend a lot of time teaching and tutoring, because I thought it made me a better programmer as well. And you know, like, it's a nice, wholesome thing to do.

00:20:09.420 --> 00:20:10.900
I totally agree. I think it does.

00:20:10.900 --> 00:20:32.600
And we kind of sold that to a lot of more experienced users, like you should spend your time here, because it's going to make you a better developer. And because it's a nice thing to do. And we started getting more and more of those people who were into that culture. I think at that time, I felt like I wanted to create something that was in opposition to my experience in the 90s. I spent a lot of time on IRC. And IRC was not a nice place. It was very toxic.

00:20:32.600 --> 00:20:39.860
Yeah, generally, if you ask the question, you were told it was a stupid question, and you shouldn't have asked it. And you were just sort of expected to know everything.

00:20:40.380 --> 00:20:58.320
And I think that people, you know, young people coming into that meeting that kind of toxicity on their first day, they could be discouraged from ever trying it seriously. So I think it's important to have a community where you're welcome with open arms, where like, we encourage stupid questions, and hold your hand through them, right?

00:20:58.320 --> 00:21:05.780
Yeah, and that's one of the things you said you're really trying to curate there at Python Discord is having a welcoming place for beginners, right?

00:21:05.980 --> 00:21:19.060
Yes, we've curated that with, I should say, extreme prejudice. So like, we've been extremely harsh in getting rid of any kind of toxic element, and just like rooting out anything that didn't fit into our idea of the culture.

00:21:19.060 --> 00:21:36.000
So the culture is wholesomeness, like full blast wholesomeness. And we just want to be the nicest little community on the internet, where nobody's allowed to say anything mean or disrespectful, because that's just doesn't have any place in like, your first impressions of learning to code.

00:21:36.140 --> 00:21:57.100
I think that should be a nice and warm experience. It's harder now that we're so big. But like, back then, it was easy, I could read every single message that was posted into the community, I could personally moderate everything that happened. And I did for a long while. But then as we grew bigger, we had to sort of build a set of staff members who agreed with, with our cultural values, our core values.

00:21:57.140 --> 00:22:08.860
And so and we started really growing because we were, it was important to us to reach out to more people, I guess. And we really believed in what we were doing. So we were doing creative stuff, like we looked for partnerships with other types of communities.

00:22:09.020 --> 00:22:28.900
We even found a different Python community that were roughly the same size as us. And then I had a meeting with them and convinced them to merge with us, which isn't really a feature in discord. So what we actually did was we just mothballed the other community, removed every channel left a link to ours, tried to like funnel all of their users into our community.

00:22:28.900 --> 00:22:32.940
All right, right. If you come here and you find it empty. Yeah, where everyone's gone. Yeah.

00:22:32.940 --> 00:22:56.060
And then we took their staff members and invited them into our staff. Some of them are still there. Some of them are fantastic. Actually, the one of the owners, Sebastian came from there. And then yeah, so so we've done that we partnered with the subreddit, our Python quite early, got in touch with Andrew Phoenix over there, who runs the show, and got involved there. And I think we got a lot of traffic via Reddit. We had some pretty good SEO, search engine optimization.

00:22:56.200 --> 00:23:07.320
Reddit is really interesting, right? There's a lot of cool stuff happening with Python on Reddit, but also Reddit can be a little bit harsh, like the people there can be a little bit rough. Yeah, for various reasons. So it's a bit of a mixed bag. You got to be careful, right?

00:23:07.320 --> 00:23:26.040
You do. But I think the thing that happens, though, when we were when people found us through really through just googling us, but they would Google not specifically for us, they would Google Python discord, thinking, hey, what's you know, like, is there a discord for Python? But we decided, hey, you know, what would be good is if we just double down on that.

00:23:26.040 --> 00:23:46.880
And use that as our name, get the domain Python discord.com, put it everywhere. Like if we are Python discord, then that's the thing people Google, they're going to find us. And that really worked, I think was a sort of a creative way to get our names out there. So yeah, we started really attracting people. And then we just kept partnering up with people. We got listed on Python.org slash community.

00:23:47.040 --> 00:24:09.600
There's a couple of people out in the live stream comments on the community thing. So Robert Robynson says the community is the best thing for beginners to advanced developers. Yeah, 3OS says there's no room for toxicity. I think that really is great. Robert also not as harsh as Stack Overflow, which is interesting. But how much do you think that the culture of Python itself matched with the programmer community that you guys are running?

00:24:09.700 --> 00:24:14.580
Say like if it was Java or C++, they have slightly different backgrounds, right?

00:24:14.580 --> 00:24:15.960
Yeah. So I think it makes a difference.

00:24:15.960 --> 00:24:28.820
It does, because these are the people that we attract, right? Like the staff members, they come from, from a place of, of understanding that Python has this kind of culture. And I think that we would have attracted a different set of staff members.

00:24:28.980 --> 00:24:42.080
So by Python establishing, they've been amazing at building a really strong culture for Python, I think. And inclusivity has been like a really strong fighting point for them, I think.

00:24:42.420 --> 00:25:01.880
So that means that when we find these advanced Python users who are already renowned in their own way, they're, you know, like full-time Python developers, they're speakers at conferences, they're library maintainers. They're really nice people, generally. Like most of the people I meet in this community, they're already on board with what we're trying to do.

00:25:01.880 --> 00:25:08.660
So there's this synergy between the Python culture and our culture that's really played in our favor, I think.

00:25:08.880 --> 00:25:14.000
Yeah, I would think so as well. I mean, there's the Brett Cannon quote, like, I came for the language, stayed for the community type of thing.

00:25:14.000 --> 00:25:14.720
Yeah, exactly.

00:25:14.720 --> 00:25:22.220
Yeah. What have you done to try to keep that zen of that community as you've grown to over 100,000 participants?

00:25:22.220 --> 00:25:37.720
So the main thing that, because now that we're getting so big, we have a big staff and running a big staff of 100 people is work. We had to start treating it almost like a startup. So being a staff member at Python Discord is a job. Like, it's real work.

00:25:38.000 --> 00:25:51.620
We have meetings, we have several meetings a week, we have meetings with the admins, with the leads, we have an all hands meeting, we have project meetings for certain projects that we're pursuing, we have a roadmap that we follow very carefully and plan out with the admins.

00:25:51.620 --> 00:26:09.500
Many of the admins have a domain that they look after. So like, this guy is responsible for moderation and one person on maybe events. And that means that there's a bit of ownership. And through the entire staff, we've been like really actively perpetuating this focus on culture, right?

00:26:09.580 --> 00:26:21.040
And they all really agree with it anyway. So it's not like a hard sell. But by motivating our staff to follow that sort of ethos, it bleeds out to the rest of the community naturally in everything that we do there.

00:26:21.380 --> 00:26:26.260
Like, I can't personally follow up all the stuff that we do. But it naturally happens through, I guess, a form of leadership.

00:26:26.260 --> 00:26:35.240
Yeah, yeah, fantastic. So three through us, as I joined Python Discord for a question, I'm still here for almost a year later. Don't regret a single day. That's, that's awesome.

00:26:35.240 --> 00:26:36.760
It's really nice to hear stuff like this.

00:26:36.880 --> 00:26:47.220
Yeah, it sounds like a super cool community. People can go in there and talk about different topics, I imagine, right? Like, we're gonna talk about Flask. There's a Flask section you want to talk about getting started. There's probably something for that.

00:26:47.220 --> 00:27:02.240
Yeah. So we've organized it so that there's a topical channel for a bunch of different topics that are basically domains. So we have like an async channel, we have web development, where you can ask, sure, Flask. Even if you have a JavaScript question, you're welcome to ask it there.

00:27:02.380 --> 00:27:19.920
We've got, you know, a place for game development, frameworks, that kind of stuff. And there's also some general channels where you can talk about just about anything. And then beyond that, for people who just are looking for help, we built a system on top of Discord that's kind of unique to deliver help channels, almost like a ticketing system.

00:27:19.920 --> 00:27:30.360
You come in and you claim a channel of your own, a help channel, and then in that channel, you can ask anything you want. And then you will be assigned sort of as the owner of that channel and people will come and help you.

00:27:30.640 --> 00:27:41.800
Yeah. And you said that with this many people, you have to do like sort of a load balancing type thing to make sure that people can have some help, but that doesn't get overwhelmed and sort of partition it. You want to talk about that a little bit?

00:27:41.800 --> 00:27:46.060
It's been challenging. We used to have just like, oh, they're generic help. That was a channel.

00:27:46.060 --> 00:27:49.200
Now it's just streaming by like tailing a log. Yeah.

00:27:49.200 --> 00:27:59.460
Suddenly it was like three channels because there were so many people at the same time and you couldn't, nobody could ask anything. And then it grew to, I think, eight that it's most. And we were just like, we can't keep scaling like this.

00:27:59.540 --> 00:28:07.480
We need to figure out a better solution. So we came up with this rotating channel claiming system. It's all run on the thing I mentioned earlier, discord.py.

00:28:07.480 --> 00:28:17.540
We wrote all the code for this. Members of the community volunteered, you know, like there are tens of thousands of lines of code in our bot that's directly responsible for running the community,

00:28:17.540 --> 00:28:22.260
running all these systems on top of the vanilla setup that discord gives us.

00:28:22.700 --> 00:28:33.880
It's a really powerful thing. You know, when you run a community full of programmers that uniquely you can then put them to work doing all this stuff that other types of communities would never be able to do because they just don't have that amount.

00:28:33.880 --> 00:28:34.180
Yeah.

00:28:34.180 --> 00:28:40.760
Right. So many creative and wonderful people are willing to invest their free time to make something awesome for that.

00:28:41.040 --> 00:28:47.160
I really, I'm lucky to be surrounded by so many active contributors. I mean, we've got dozens of people help build us.

00:28:47.160 --> 00:28:54.720
Yeah. I do think that having this programming skill, it's, it's almost like being a magician, right? You can think of this idea and you're like, you know, I can make that happen.

00:28:54.880 --> 00:28:55.040
Yeah.

00:28:55.040 --> 00:29:00.220
I just, I got to think about it a little bit more and then it'll exist. And there's not many other things like that.

00:29:00.220 --> 00:29:00.920
No, you're right.

00:29:00.920 --> 00:29:12.020
So much of the creative stuff, actually, you've got to, eventually the rubber meets the road. You've got to create a thing, right? Like if you're a chemist or you're an engineer, like you can create, you can imagine things, but eventually they got to get built.

00:29:12.020 --> 00:29:22.840
But for programmers, it's just sort of more thinking until it exists. And it's, it's a really cool to see like communities putting that to you. So like, Oh, I have this idea. What if the bot could do this? Well, you know, here's the source code.

00:29:23.060 --> 00:29:42.720
Right. You could do that. Yeah. It's like a superpower. I think one person who knows how to code in a community, it can be like a wizard who, who makes stuff happen. And I have a hundred wizards. So like I can do whatever I want. Pretty much. It's amazing. It really makes the difference. I think that makes that's that little extra cherry on top that makes this community really shine.

00:29:42.720 --> 00:29:50.680
Yeah. Well, and the fact that discord has an API and doesn't try to like lock it off and make it impossible to sort of do extra stuff. Right.

00:29:50.800 --> 00:29:57.040
Right. I mean, it's not by any means trivial, but there are good packages out there that abstract all the pain away and most of the pain anyway.

00:29:57.040 --> 00:30:04.040
Yeah, absolutely. Yeah. Super cool. So one of the things that you all have been doing is you've been running different kinds of events.

00:30:04.040 --> 00:30:04.500
Yes.

00:30:04.500 --> 00:30:08.700
You want to tell us about some of the events and things you got, you've done and maybe we'll do in the future.

00:30:08.840 --> 00:30:15.460
Absolutely. So I think a lot of people come to us with a question or to find some help or some guidance, but then we want them to stay.

00:30:15.460 --> 00:30:24.200
And one of the ways that we try to do that is to always have something going on. And the events is our way of like having an activity always happening in the community.

00:30:24.200 --> 00:30:36.900
So we started with we created a second bot that was just for fun. And then we had like monthly events like a Valentine's event or Halloween event where we would invite people to solve these simple problems.

00:30:37.200 --> 00:30:42.700
So for the Halloween event, we would say, OK, I want you to write a spooky movie recommender.

00:30:42.700 --> 00:30:47.520
That's just a function. Right. And so we provide the bot and the infrastructure for the bot to run on.

00:30:47.520 --> 00:30:53.040
You just write a command for the bot. It's really just a function that returns a spooky movie. Right.

00:30:53.160 --> 00:30:58.740
That's fairly easy for people to do. And so we get people willing to take on the task.

00:30:58.740 --> 00:31:04.620
And then we filled up the spot with all of these things. So every month we would have a theme and then we would get more people involved in that.

00:31:04.620 --> 00:31:09.180
But here's the tricky part is we would force them to commit it to GitHub.

00:31:09.180 --> 00:31:12.940
It would go through reviews. We were kind of harsh reviewers.

00:31:12.940 --> 00:31:21.200
Sometimes we will give a proper review, but we do it in a very educational way, I think, where we explain very clearly why something needs to change.

00:31:21.200 --> 00:31:36.260
If it needs to change, we have continuous integration systems and continuous deployment set up on all of these things so that, you know, the code has to lint properly, has to get through, has to match the PEP 8, basically, and run tests and all this stuff.

00:31:36.260 --> 00:31:42.440
So it sounds easy when you start off. Yeah, you're just writing a simple function to return a spooky movie.

00:31:42.440 --> 00:31:49.040
But then actually we're stealth educating these people on how to work on like an open source framework.

00:31:49.040 --> 00:31:51.020
Right. Like inside of a context.

00:31:51.020 --> 00:31:54.500
Right. You're teaching them all the engineering workflow stuff.

00:31:54.500 --> 00:31:55.980
Uh-huh. The soft skills.

00:31:55.980 --> 00:31:58.220
Linting, CI, yeah, GitHub.

00:31:58.220 --> 00:31:58.700
Precisely.

00:31:58.700 --> 00:31:59.560
All that kind of stuff.

00:31:59.560 --> 00:32:04.180
And I think that that stuff is amazing to know if you want to go out there and work in the field.

00:32:04.180 --> 00:32:08.420
You have to know these things, but there aren't that many places online that will try to teach you those places.

00:32:08.560 --> 00:32:15.520
Yeah. Well, it's also all the difference between is this a real programmer or someone who just has like learned a little bit about the language, right?

00:32:15.520 --> 00:32:20.320
Like whenever I was doing interviews, you could always sort of tell, is this person really in the community?

00:32:20.320 --> 00:32:23.480
Do they kind of know the moving part?

00:32:23.480 --> 00:32:23.980
You know what I mean?

00:32:24.040 --> 00:32:27.700
Like, because I would interview people and they would sometimes just make up stuff that they know.

00:32:27.700 --> 00:32:29.200
I'm like, you don't actually know this, do you?

00:32:29.200 --> 00:32:31.120
I could tell that this is not a thing, right?

00:32:31.120 --> 00:32:34.420
And I think having those skills depends how you get into programming.

00:32:34.420 --> 00:32:36.080
But a lot of people come into Python.

00:32:36.080 --> 00:32:39.800
They don't come through the, I went to Carnegie Mellon for four years.

00:32:39.800 --> 00:32:41.720
They come through the, I got inspired.

00:32:41.720 --> 00:32:45.000
I got a book or I got some kind of thing where I started learning programming.

00:32:45.000 --> 00:32:49.000
And I've been mostly on my own, but I'm trying to get into the world of programming.

00:32:49.000 --> 00:32:52.280
And, you know, no one tells you you need to learn about continuous integration.

00:32:52.280 --> 00:32:53.220
Right. Exactly.

00:32:53.220 --> 00:32:56.620
Or unit testing frameworks or what have you.

00:32:56.620 --> 00:33:01.420
Talk Python To Me is partially supported by our training courses.

00:33:01.420 --> 00:33:04.960
Have you tried to learn Python but got stuck or lost focus?

00:33:04.960 --> 00:33:12.200
We know how it feels to try and jam fact after fact, loop construct after turn hair expression into your head.

00:33:12.500 --> 00:33:16.340
At best, it's boring at worst, it can turn you off programming altogether.

00:33:16.340 --> 00:33:20.340
That's why we built our course Python jumpstart by building 10 apps.

00:33:20.340 --> 00:33:23.580
This course guides you through carefully planned applications.

00:33:23.580 --> 00:33:27.100
It starts simple, but progresses to quite real apps.

00:33:27.100 --> 00:33:30.020
Best of all, you won't be learning dry facts.

00:33:30.020 --> 00:33:34.600
You'll be learning like the pros do by building real applications and learning in context.

00:33:34.600 --> 00:33:40.460
If you want to start building with Python, just visit talkpython.fm/course to get started.

00:33:40.460 --> 00:33:45.920
Actually, we do the same thing when we interview for my job.

00:33:45.920 --> 00:33:47.940
We often focus on the soft skills.

00:33:47.940 --> 00:33:52.720
We try to like, you know, if we can determine whether someone writes a good commit message,

00:33:52.720 --> 00:33:57.160
that tells you a lot about them, even though it's not strictly, you know, the thing that we're actually looking for.

00:33:57.160 --> 00:34:02.800
We're looking for like talented programmers, but the two things are slightly linked in a way.

00:34:03.040 --> 00:34:04.300
Often one indicates the other.

00:34:04.300 --> 00:34:08.520
But yeah, so that was our first sort of our first step into events.

00:34:08.520 --> 00:34:09.780
And then it grew from there.

00:34:09.780 --> 00:34:10.660
I had this idea.

00:34:10.660 --> 00:34:18.420
I started a code jam and I wanted it to be a unique thing because again, we're a lot of people do code jams and they're mostly like game jams.

00:34:18.420 --> 00:34:20.480
Give us a quick, what's the elevator pitch?

00:34:20.480 --> 00:34:21.200
What's a code jam?

00:34:21.320 --> 00:34:23.940
So a Python discord code jam or just a code jam in general?

00:34:23.940 --> 00:34:24.620
In general.

00:34:24.620 --> 00:34:28.360
In general, it's you have a week, you have to solve a problem.

00:34:28.360 --> 00:34:31.620
You don't necessarily know what the problem is before you start solving it.

00:34:31.620 --> 00:34:34.520
Maybe you have to solve it within a specific context.

00:34:34.520 --> 00:34:37.320
So like a framework or a language, something like that.

00:34:37.320 --> 00:34:42.000
Like use React to build a game, 2D scroller game in a week, something like that maybe.

00:34:42.000 --> 00:34:43.060
Something like that.

00:34:43.060 --> 00:34:47.920
And so we wanted to do a spin on this to activate our users to do something fun for a week.

00:34:47.920 --> 00:34:51.340
But again, I'm trying to like do something that nobody else is doing.

00:34:51.340 --> 00:35:06.880
So my spin was you have to do it with a team of strangers, not on your own, not with some people, you know, you have to get out of that safety net, out of your comfort zone and solve a problem in a setting that you might see in an open source project or in a job.

00:35:06.880 --> 00:35:07.280
Right.

00:35:07.280 --> 00:35:07.480
Yeah.

00:35:07.480 --> 00:35:11.800
Because one of the challenges can be, there might be these people who've done this before, right?

00:35:11.820 --> 00:35:13.840
Like these groups of people, we all go to college together.

00:35:13.840 --> 00:35:14.500
We were roommates.

00:35:14.500 --> 00:35:17.600
Now we just go do these events because they're fun and we still do them together.

00:35:17.600 --> 00:35:23.660
But if there's like a tight knit group of four people that say, okay, you do the database, I'll do the UI, you do it back in, go, right?

00:35:23.660 --> 00:35:26.800
That's not the same thing as, you know, a couple of people.

00:35:26.800 --> 00:35:28.200
I want to be part of it too.

00:35:28.200 --> 00:35:30.620
Like we'll find some random folks to meet up, right?

00:35:30.620 --> 00:35:32.340
So you're kind of trying to equalize that a little.

00:35:32.340 --> 00:35:32.700
Yeah.

00:35:32.700 --> 00:35:34.380
They would come in and annihilate everyone.

00:35:34.380 --> 00:35:37.260
And I want people to be uncomfortable.

00:35:37.260 --> 00:35:41.600
I want them to do something hard and to come out of it, having learned how to overcome.

00:35:41.640 --> 00:35:42.720
Those challenges, right?

00:35:42.720 --> 00:35:43.060
Yeah.

00:35:43.060 --> 00:35:47.280
So that's the pitch is, is that we team you up with some people you've never met.

00:35:47.280 --> 00:35:49.080
We give you a framework.

00:35:49.080 --> 00:35:51.020
Let's say you have to write a Django app.

00:35:51.020 --> 00:35:57.180
And then on the day you start, we tell you, oh, and by the way, it has to be thematic of climate change.

00:35:57.180 --> 00:36:01.440
Or we had one where we said that the theme was this app hates you.

00:36:01.440 --> 00:36:04.060
And so we asked people to make apps that hated the users.

00:36:04.060 --> 00:36:05.060
I think I've used some of those.

00:36:05.060 --> 00:36:06.040
Super fun.

00:36:06.360 --> 00:36:12.000
My favorite, I remember there was this one team, they made like a paint clone similar to MS Paint,

00:36:12.000 --> 00:36:16.000
but all of the different tools were terrible in their own way.

00:36:16.000 --> 00:36:20.280
So like you would use the paintbrush, but it would like drip paint on top of the canvas.

00:36:20.580 --> 00:36:27.460
And the pencil would, the tip would break and it would like, you'd have to constantly be like, oh, yeah.

00:36:27.460 --> 00:36:30.800
So each, each tool uniquely terrible, really fun.

00:36:30.800 --> 00:36:34.240
Now, recently we had one where the theme was early internet.

00:36:34.240 --> 00:36:40.880
And we had a team that created sort of a Windows 98 or Windows 95 clone in Django.

00:36:40.880 --> 00:36:42.360
And I was like, yeah, this is cool.

00:36:42.360 --> 00:36:45.040
And it looked fairly, you know, nostalgic.

00:36:45.040 --> 00:36:50.980
But then the actual thing inside of that Windows clone was that there was a working browser.

00:36:50.980 --> 00:36:58.260
And when you use the browser, they would intercept the HTML and like modify it to look like early internet.

00:36:58.260 --> 00:37:04.560
They would pixelate the images or, you know, like add filters and stuff to make it look old and kind of broken.

00:37:04.560 --> 00:37:07.180
It's really, really genuinely interesting.

00:37:07.180 --> 00:37:08.960
And you could go to any page on the web.

00:37:08.960 --> 00:37:13.020
So people do these amazing things within the limitations we set for them.

00:37:13.020 --> 00:37:16.220
It's really inspiring to watch some of the stuff.

00:37:16.220 --> 00:37:18.240
We actually, we make some videos on our YouTube.

00:37:18.240 --> 00:37:19.900
There are highlights videos.

00:37:19.900 --> 00:37:21.980
Yeah, here's, that's nostalgic.

00:37:21.980 --> 00:37:26.080
There are highlight videos on our YouTube that show off some of the projects that people come up with.

00:37:26.280 --> 00:37:31.540
We're going to release another one within a month or two for the one, the Code Jam that was last summer.

00:37:31.540 --> 00:37:32.520
So yeah, that's really cool.

00:37:32.520 --> 00:37:33.680
Yeah, we should link to those.

00:37:33.680 --> 00:37:36.080
Yeah, I think back to the early internet.

00:37:36.080 --> 00:37:41.600
Gosh, if you had modern tools in the modern tool chain, you could just blow people's minds.

00:37:41.600 --> 00:37:43.160
I mean, it was so bad.

00:37:43.160 --> 00:37:45.880
It was so incredibly bad, right?

00:37:45.880 --> 00:37:46.360
Yes.

00:37:47.080 --> 00:37:50.200
The Amazon ones are the absolute worst.

00:37:50.200 --> 00:37:54.180
You should all go and like look up what Amazon looked like in its first iteration.

00:37:54.180 --> 00:37:55.660
Hilariously bad.

00:37:55.660 --> 00:37:57.020
Yeah, it's, oh my gosh.

00:37:57.020 --> 00:37:59.960
Yeah, so these are some of the types of things you do, right?

00:37:59.960 --> 00:38:00.640
These events.

00:38:00.640 --> 00:38:01.560
Do you have any coming up?

00:38:01.560 --> 00:38:02.360
Oh, that's another one.

00:38:02.360 --> 00:38:07.260
We've been in, we've invited Pi Week, which is actually a 15 year old Python event.

00:38:07.260 --> 00:38:11.500
One of the oldest, probably the longest running game jam in the entire ecosystem.

00:38:11.720 --> 00:38:18.020
We basically offered to take it into our fold and help them advertise it, market it, and

00:38:18.020 --> 00:38:21.600
to put it together because they were stretched a little thin, maybe.

00:38:21.600 --> 00:38:28.680
And Daniel Pope, who runs it currently, Maeve, Lord Maeve, he's just become a father, I think.

00:38:28.680 --> 00:38:30.020
Busy with things.

00:38:30.020 --> 00:38:33.160
And that changes your perspective on free time.

00:38:33.160 --> 00:38:33.560
Yeah.

00:38:33.560 --> 00:38:34.980
Or changes your free time.

00:38:34.980 --> 00:38:36.300
He's a wonderful guy.

00:38:36.300 --> 00:38:40.740
I really enjoyed working with him on the previous Pi Week we ran last autumn.

00:38:40.740 --> 00:38:43.400
And now we're probably going to help him put one together.

00:38:43.400 --> 00:38:46.160
He's still running the show, but we help out in every way we can.

00:38:46.160 --> 00:38:49.060
So there's a Pi Week coming up sometime this spring.

00:38:49.060 --> 00:38:50.740
I don't know if a date has been announced yet.

00:38:50.740 --> 00:38:52.500
Then we have a code jam this summer.

00:38:52.500 --> 00:38:56.280
And in October, we run the Hacktoberfest events.

00:38:56.280 --> 00:38:59.760
December, we run Advent of Code together with the Advent of Code staff.

00:38:59.760 --> 00:39:02.180
There's basically something happening every couple months.

00:39:02.180 --> 00:39:03.840
What do people do to participate?

00:39:03.840 --> 00:39:04.960
How do they participate?

00:39:04.960 --> 00:39:12.220
If you're a member of the community, if you type exclamation mark, subscribe in the Bot Commands

00:39:12.220 --> 00:39:15.340
channel, you will be subscribed to announcements.

00:39:15.340 --> 00:39:19.200
We will basically will ping you every time something big is happening.

00:39:19.200 --> 00:39:20.720
So we will always let you know.

00:39:20.720 --> 00:39:23.120
There's also an event page on our website.

00:39:23.120 --> 00:39:26.360
You can usually see upcoming major upcoming events on the front page.

00:39:26.360 --> 00:39:29.360
There's an event sub page there that has everything listed.

00:39:29.560 --> 00:39:32.420
So it's fairly hard to miss if you're a member of the community.

00:39:32.420 --> 00:39:37.080
But yeah, the subscribe command for our bot, that will make sure that you will definitely

00:39:37.080 --> 00:39:38.040
be let know.

00:39:38.040 --> 00:39:38.480
Yeah.

00:39:38.480 --> 00:39:39.960
That's how we keep people informed.

00:39:39.960 --> 00:39:40.240
Yeah.

00:39:40.240 --> 00:39:40.820
Very cool.

00:39:40.820 --> 00:39:43.620
Sounds like a lot of fun for people to participate in these things.

00:39:43.620 --> 00:39:50.500
Another thing that you did recently that was noteworthy is you all hosted the core developer

00:39:50.500 --> 00:39:51.120
sprints.

00:39:51.120 --> 00:39:51.720
Yeah.

00:39:51.720 --> 00:39:52.640
That was interesting.

00:39:52.640 --> 00:39:57.620
We, I mean, we obviously, we love the PSF, the Python Software Foundation, and we have

00:39:57.620 --> 00:40:00.600
a core developer on the staff as well.

00:40:00.600 --> 00:40:04.300
Kyle Stanley, he's a core developer who works on AsyncIO.

00:40:04.300 --> 00:40:05.160
He's great.

00:40:05.160 --> 00:40:06.520
He's one of our moderators.

00:40:06.520 --> 00:40:11.540
And so he got in touch with me and told me that, well, because PyCon was canceled and usually

00:40:11.540 --> 00:40:16.820
they have this core dev sprint at PyCon, they sit together for a week and they just work

00:40:16.820 --> 00:40:18.860
on like CPython stuff together.

00:40:18.860 --> 00:40:24.220
I think a lot of people don't realize that when PyCon fell victim to the pandemic, like

00:40:24.220 --> 00:40:27.560
everything has, there's so much of that that happens.

00:40:27.560 --> 00:40:32.520
You know, in open source, you could work for years and never actually face-to-face have a

00:40:32.520 --> 00:40:34.680
conversation with someone you're working with, right?

00:40:34.680 --> 00:40:40.320
So a lot of those sprints, both for core developers and Python, but also for like Flask and Django

00:40:40.320 --> 00:40:44.160
and other groups would have these get togethers where people could come and contribute.

00:40:44.160 --> 00:40:46.200
And yeah, that kind of fell by the wayside, right?

00:40:46.200 --> 00:40:46.560
Yeah.

00:40:46.560 --> 00:40:50.360
I think that was a big, a lot of people took it quite poorly.

00:40:50.360 --> 00:40:52.300
I mean, that's like the highlight of their year.

00:40:52.300 --> 00:40:56.940
Many of them, if you're a core developer, the PSF will pay your ticket to come and hang out

00:40:56.940 --> 00:40:58.320
with them and do the course sprint.

00:40:58.320 --> 00:41:00.160
And it's like this big event.

00:41:00.160 --> 00:41:03.920
I would love to do that myself, sit down with some of these like the smartest people.

00:41:03.920 --> 00:41:04.500
I know.

00:41:04.500 --> 00:41:05.020
It'd be amazing.

00:41:05.020 --> 00:41:07.180
I always consider PyCon my geek holiday.

00:41:07.180 --> 00:41:12.200
It's like my chance to get away and just enjoy time with my friends who I only see at conferences,

00:41:12.200 --> 00:41:14.300
go to God, have dinner and beer with them afterwards.

00:41:14.300 --> 00:41:18.900
And yeah, I've never been because, you know, I had to cross the Atlantic to get there.

00:41:18.900 --> 00:41:20.720
So, but hopefully one day.

00:41:20.720 --> 00:41:20.940
Yeah.

00:41:20.940 --> 00:41:21.800
Someday soon.

00:41:21.800 --> 00:41:22.200
Hopefully.

00:41:22.200 --> 00:41:22.480
Right.

00:41:22.480 --> 00:41:23.440
So they canceled that.

00:41:23.440 --> 00:41:27.100
And so they were looking for an alternative way because they needed to do the core dev sprint,

00:41:27.100 --> 00:41:28.480
but obviously they had to do it remotely.

00:41:28.660 --> 00:41:31.620
They were looking into how they would host that.

00:41:31.620 --> 00:41:37.220
And I just suggested to Kyle that like, if you guys are interested, EuroPython did it on

00:41:37.220 --> 00:41:40.680
discord recently and we could host you.

00:41:40.680 --> 00:41:44.880
We could set up everything you need, all the channels, take care of like moderation.

00:41:45.400 --> 00:41:49.280
If you want to reach out to the community or something, we could put together a call or

00:41:49.280 --> 00:41:50.280
something like that.

00:41:50.280 --> 00:41:51.640
And they were interested.

00:41:51.640 --> 00:41:54.060
And eventually they voted in favor of doing that.

00:41:54.060 --> 00:41:58.120
So we had all the core developers, 40 of them at least, hanging out with us.

00:41:58.120 --> 00:41:58.900
We left them.

00:41:58.900 --> 00:42:03.940
I mean, they had their own sort of gated off area of the community where they did this.

00:42:04.040 --> 00:42:08.420
And we've done that for some of the other events, like FOSDEM mostly recently, we hosted

00:42:08.420 --> 00:42:13.840
their organizers and their talk, their speakers so that they have an area to be in without

00:42:13.840 --> 00:42:18.440
having to go through the hassle of like setting up their own community and managing and administrating

00:42:18.440 --> 00:42:18.920
all of that.

00:42:18.920 --> 00:42:20.800
So what's that look like in practice?

00:42:20.800 --> 00:42:22.120
They have their own channel.

00:42:22.120 --> 00:42:22.580
Yeah.

00:42:22.580 --> 00:42:25.240
Then they do like screen share for the presentations.

00:42:25.240 --> 00:42:25.640
Yeah.

00:42:25.640 --> 00:42:28.600
We just set it up so that all they got to do is just join.

00:42:28.600 --> 00:42:32.780
And then right at the top of the channel list is just all the stuff that's relevant to

00:42:32.780 --> 00:42:33.000
them.

00:42:33.300 --> 00:42:34.180
Nobody else can see it.

00:42:34.180 --> 00:42:37.040
Just the organizers and the members of that event.

00:42:37.040 --> 00:42:40.780
So for them, it almost looks like we've just set up a whole server just for them.

00:42:40.780 --> 00:42:44.660
And then at the bottom, if they want to, they can go and explore our public channels and talk

00:42:44.660 --> 00:42:45.280
to the community.

00:42:45.280 --> 00:42:46.300
And some of them did.

00:42:46.300 --> 00:42:49.940
And there was a lot of really good interaction with the other members of the community.

00:42:49.940 --> 00:42:55.100
But if they want to, and if they want privacy, which many of them did, they can just stay

00:42:55.100 --> 00:42:56.900
in their own like gated off area.

00:42:56.900 --> 00:43:01.040
So that's been one way that we've been able to sort of give back to the ecosystem a little

00:43:01.040 --> 00:43:01.800
bit and help out.

00:43:02.140 --> 00:43:08.120
And of course, they also chose to have a Q&A that they collected the questions from the

00:43:08.120 --> 00:43:10.420
community and they wanted to do a stream.

00:43:10.420 --> 00:43:12.920
And we put together the stream on YouTube for them.

00:43:12.920 --> 00:43:16.680
It's available both on the PSF's own YouTube and on ours.

00:43:17.020 --> 00:43:22.780
A full length, hour long, I think, core developer Q&A from questions from the community.

00:43:22.780 --> 00:43:23.720
Really, really interesting.

00:43:23.720 --> 00:43:24.640
I highly recommend it.

00:43:24.640 --> 00:43:25.160
That's fantastic.

00:43:25.160 --> 00:43:26.100
Yeah, it was really fun.

00:43:26.100 --> 00:43:27.360
We really love the PSF.

00:43:27.360 --> 00:43:28.920
We work with them on other stuff.

00:43:28.920 --> 00:43:33.000
Like they're looking for, you know, help get their announcements out there.

00:43:33.000 --> 00:43:34.860
We have quite a bit of reach by now.

00:43:35.000 --> 00:43:37.400
In part due to like our announcement channel.

00:43:37.400 --> 00:43:40.140
Sure, it reaches our 150,000 members.

00:43:40.140 --> 00:43:46.780
But there's also a feature where you can subscribe to, you can put our announcements into your community.

00:43:46.780 --> 00:43:51.420
And there's 2000 communities right now that sort of relay all of the announcements we make.

00:43:51.420 --> 00:43:55.320
So then that reaches an additional, I don't even know how many people.

00:43:55.320 --> 00:43:57.680
And then we've got Twitter and we've got this and that.

00:43:57.680 --> 00:44:03.920
Does that push notifications out to other Discord communities or some other types of communities?

00:44:03.920 --> 00:44:05.480
Is it like Discord to Discord?

00:44:05.480 --> 00:44:06.120
Oh, right.

00:44:06.200 --> 00:44:07.300
No, it's only Discord.

00:44:07.300 --> 00:44:07.660
Yeah.

00:44:07.660 --> 00:44:09.560
So there's 2000 Discord communities.

00:44:09.560 --> 00:44:14.600
Probably most of them are small, you know, 10 people who are friends or whatever kind of communities.

00:44:14.600 --> 00:44:16.740
But there are some that are rather big.

00:44:16.740 --> 00:44:17.060
Yeah.

00:44:17.060 --> 00:44:17.620
Yeah, yeah.

00:44:17.620 --> 00:44:18.020
That's very cool.

00:44:18.020 --> 00:44:18.560
So.

00:44:18.560 --> 00:44:22.180
Yeah, it seems like the community, like the core devs and the advanced channel.

00:44:22.180 --> 00:44:23.060
Yeah.

00:44:23.060 --> 00:44:23.580
Very nice.

00:44:23.580 --> 00:44:23.860
Yeah.

00:44:23.860 --> 00:44:24.340
Awesome.

00:44:24.340 --> 00:44:25.000
Quite cool.

00:44:25.000 --> 00:44:29.960
I guess one other thing that we could talk about that you guys are doing is you have some open source stuff.

00:44:29.960 --> 00:44:33.120
Like your bot, for example, is open source and so on.

00:44:33.120 --> 00:44:35.320
You want to talk a little bit about some of the code?

00:44:35.320 --> 00:44:35.700
Yeah.

00:44:35.700 --> 00:44:40.120
I mean, we have a lot of open source repositories and we try.

00:44:40.120 --> 00:44:46.060
So this is about Python Discord has to be a great place for beginners to discover programming and to get help and so on.

00:44:46.060 --> 00:44:49.300
But it also needs to be a place that's engaging for more advanced users.

00:44:49.300 --> 00:44:56.640
And one of the ways that we're doing that is to try to provide learning opportunities, even for people who have years of experience with Python.

00:44:56.640 --> 00:45:03.740
And one of the ways that you can improve your hone your skills and get better is to work on exciting projects that help the community.

00:45:03.740 --> 00:45:05.320
So we've open sourced everything.

00:45:05.320 --> 00:45:07.480
We're very transparent about how everything works.

00:45:07.480 --> 00:45:10.680
And there's a whole bunch of projects from the bots.

00:45:10.680 --> 00:45:12.880
There are three, four bots by now, I think.

00:45:12.880 --> 00:45:13.500
No, three.

00:45:13.500 --> 00:45:19.240
We've got the website, of course, and some microservices that interact with the website.

00:45:19.240 --> 00:45:21.120
Snekbox is an interesting one.

00:45:21.240 --> 00:45:25.380
That's a completely sandboxed Python evaluation tool.

00:45:25.380 --> 00:45:25.780
That's right.

00:45:25.780 --> 00:45:26.020
Yeah.

00:45:26.020 --> 00:45:34.840
So that we can have a command on the server where people can run actual raw Python code without them being able to like destroy all our servers.

00:45:35.080 --> 00:45:39.340
Because there's, of course, a risk associated with people running arbitrary code.

00:45:39.340 --> 00:45:39.660
Yeah.

00:45:39.660 --> 00:45:42.180
That's the danger of, hey, you want to test this code out?

00:45:42.180 --> 00:45:42.700
Click here.

00:45:42.800 --> 00:45:43.120
Oh, wait.

00:45:43.120 --> 00:45:47.980
The code I'm trying to test is, you know, sub process, launch, such and such.

00:45:47.980 --> 00:45:48.440
Yeah.

00:45:48.440 --> 00:45:49.100
Or whatever.

00:45:49.100 --> 00:45:49.640
Yeah.

00:45:49.640 --> 00:45:52.260
So we have like several layers of sandboxing.

00:45:52.260 --> 00:46:01.400
Like if it takes too long or if it uses specific parts of the standard library that might be used in a malicious way, then it just doesn't do it at all.

00:46:01.400 --> 00:46:05.900
But even if it does do it, it's inside of one sandbox that's inside another sandbox.

00:46:05.900 --> 00:46:06.940
And it's very, very safe.

00:46:06.940 --> 00:46:07.820
And this is open source.

00:46:07.880 --> 00:46:17.680
You can take this tool, Snekbox, and you can use it in your bot or in your website or whatever service you want if you want to be able to like safely evaluate Python code.

00:46:17.680 --> 00:46:21.040
So what are some examples like how this gets used in Discord?

00:46:21.040 --> 00:46:21.920
The Snekbox?

00:46:21.920 --> 00:46:26.160
We actually only use it for the bot so that people can evaluate code.

00:46:26.160 --> 00:46:37.800
But that function is very valuable because in help sessions, sometimes our helpers or people who are trying to explain something, they want to execute some code and show what the result is to sort of explain a concept.

00:46:37.800 --> 00:46:40.280
So someone's stuck on like, how does this work?

00:46:40.280 --> 00:46:44.060
Well, then they can just show them with a code example and it evaluates it right there.

00:46:44.060 --> 00:46:46.860
It's a very nice teaching aid, essentially.

00:46:46.860 --> 00:46:48.420
Yeah, that's quite cool.

00:46:48.420 --> 00:46:48.740
Yeah.

00:46:48.740 --> 00:46:49.060
Nice.

00:46:49.060 --> 00:46:50.600
Any other projects you want to highlight?

00:46:50.600 --> 00:46:51.620
Yeah, for sure.

00:46:51.620 --> 00:46:54.960
We try to do projects that aren't strictly just code as well.

00:46:55.240 --> 00:47:01.100
For instance, in our staff, we have some people who are involved in the DevOps side of Python Discord.

00:47:01.100 --> 00:47:05.880
We have a very modern DevOps architecture using Kubernetes cluster.

00:47:05.880 --> 00:47:08.540
Everything's its own containerized service.

00:47:08.540 --> 00:47:17.400
And some of us are like really learning how to do advanced, I think, industry standard DevOps by doing it here at Python Discord.

00:47:17.400 --> 00:47:22.120
We have media projects and branding projects of people who have graphic design skills.

00:47:22.120 --> 00:47:23.220
They come in and help us.

00:47:23.220 --> 00:47:26.080
They like say, say we have a Halloween event.

00:47:26.080 --> 00:47:30.640
Oh, you can come in and make like a spooky banner or something that we might put somewhere, right?

00:47:30.640 --> 00:47:32.120
Try to get people involved like that.

00:47:32.120 --> 00:47:34.680
Now we're making a lot of YouTube content like the Pep 8 song.

00:47:34.680 --> 00:47:36.080
That means we need editors.

00:47:36.080 --> 00:47:42.120
We need people who are good at animation, maybe people who can do sound music, all of these kinds of skill sets.

00:47:42.360 --> 00:47:45.600
We try to provide an avenue for them to involve themselves.

00:47:45.660 --> 00:47:55.720
And if you've got a unique skill set that I didn't mention or I couldn't even think of, then, you know, if you come and advertise to us, maybe we'll be able to find some creative way where we can put that to use.

00:47:55.720 --> 00:47:56.020
Yeah.

00:47:56.020 --> 00:47:58.420
Oh, that's a really interesting way to leverage the community.

00:47:58.420 --> 00:48:01.700
Not just the core programming skills, but the other stuff as well.

00:48:01.700 --> 00:48:02.040
Yeah.

00:48:02.040 --> 00:48:15.360
And I think it's really essential that we have this kind of approach because I think the thing that's difficult about running a community of volunteers is that if you run a business, well, I can like buy productivity.

00:48:15.560 --> 00:48:17.760
I pay you, you make me something, right?

00:48:17.760 --> 00:48:20.960
But when I have a community of volunteers, I can't pay you.

00:48:20.960 --> 00:48:22.220
I don't have any money to pay you with.

00:48:22.220 --> 00:48:25.380
So the only way I can get you to do something is to motivate you.

00:48:25.380 --> 00:48:32.480
And there's some intrinsic motivation in being part of something good and wholesome like this.

00:48:32.480 --> 00:48:38.320
I think the culture helps bring people in and like from an altruistic point of view, like they just want to help out.

00:48:38.320 --> 00:48:40.700
They want to be a good force in the universe.

00:48:41.100 --> 00:48:55.800
But ultimately, if you really want strong, directed initiative and motivation, I think you have to find like a synergy, a sort of a thing where your personal goals align with the goals of the community, right?

00:48:55.800 --> 00:49:00.440
So you want to do something for us that's good for you, but it's also good for us.

00:49:00.440 --> 00:49:02.660
That's the perfect way to motivate people.

00:49:02.660 --> 00:49:10.220
So by providing as many ways as possible for people to get involved like that, it means that people can come in and actually like build their skill set.

00:49:10.580 --> 00:49:13.620
Maybe they make something impressive and they can put it on their resume.

00:49:13.620 --> 00:49:14.880
They can go out and get a job.

00:49:14.880 --> 00:49:19.440
And we're very good at like trying to give people credit and help people out.

00:49:19.440 --> 00:49:23.060
I've personally been like a job reference for many of the staff members.

00:49:23.060 --> 00:49:28.840
I've written letters of recommendation, you know, stuff like that, because we really want people to come in.

00:49:28.840 --> 00:49:38.480
And if they invest themselves into our community and invest hours of work, I want them to get something out of it, like personally, because that's the best way that I can motivate them to keep working.

00:49:38.720 --> 00:49:38.760
Yeah.

00:49:38.760 --> 00:49:39.980
Does it cost money?

00:49:39.980 --> 00:49:42.320
Is it expensive to run the community?

00:49:42.320 --> 00:49:44.060
Like servers and bandwidth and all that?

00:49:44.060 --> 00:49:48.640
We've been lucky enough to be sponsored by everyone we needed to be sponsored by.

00:49:48.640 --> 00:49:50.180
So we have Linode as a sponsor.

00:49:50.180 --> 00:49:55.680
We've got Notion providing free documentation stuff for us.

00:49:55.760 --> 00:50:05.100
So with a bunch of different partners we've worked with and sponsors for prizes for the events like Adafruit, we've worked with DigitalOcean.

00:50:05.100 --> 00:50:08.760
JetBrains has been giving us licenses we can give away for a long time.

00:50:08.760 --> 00:50:11.960
Sentry is another sponsor that give us Sentry monitoring.

00:50:12.540 --> 00:50:14.900
So that covers our essentials.

00:50:14.900 --> 00:50:19.720
We don't pay for hosting because Linode is providing all the hosting for free.

00:50:19.720 --> 00:50:22.400
But we do have some expenses associated with the events.

00:50:22.400 --> 00:50:25.640
T-shirts that's sent out as prizes, this sort of thing.

00:50:25.640 --> 00:50:28.360
And some of that comes in via our Patreon.

00:50:30.400 --> 00:50:37.160
I'm really happy with this animated explainer video that we send to everyone who joins the community called Welcome to Python Discord.

00:50:37.160 --> 00:50:45.640
In that one, we went out and found some voice talent to do a voiceover for us so that we could get like that Kurzgesagt style voiceover.

00:50:45.640 --> 00:50:49.040
I specifically asked the guy, can you do a Kurzgesagt voice?

00:50:49.040 --> 00:50:50.200
And he was like, yeah, I can do that.

00:50:50.200 --> 00:50:50.860
Oh, nice.

00:50:52.020 --> 00:50:53.580
And I was so happy with the results.

00:50:53.580 --> 00:50:57.880
But that's an example of where we might have put in a little bit of money.

00:50:57.880 --> 00:50:59.220
Not that it was super expensive.

00:50:59.220 --> 00:51:00.100
He was very generous.

00:51:00.100 --> 00:51:00.360
Right.

00:51:00.360 --> 00:51:01.220
Yeah, that's cool.

00:51:01.220 --> 00:51:08.900
But it's not like super expensive to say like PyPI is really expensive to run if it weren't for the sponsors and the donations, right?

00:51:08.900 --> 00:51:11.500
Like $40,000 a month with bandwidth and stuff like that.

00:51:11.500 --> 00:51:15.900
Yeah, no, because like the majority of that bandwidth is, I guess, Discord is paying that.

00:51:15.900 --> 00:51:16.140
Right.

00:51:16.140 --> 00:51:20.640
And we're not paying, you know, like it's free to run a community on Discord no matter how big it gets.

00:51:20.640 --> 00:51:21.160
Yeah, that's cool.

00:51:21.240 --> 00:51:25.940
So essentially, no, it's fairly cheap to make ends meet here.

00:51:25.940 --> 00:51:32.980
And we try to put all the money that we get in straight back out to the community as prices or in giveaways or whatever we can.

00:51:32.980 --> 00:51:35.120
Because we're not trying to like make money.

00:51:35.120 --> 00:51:39.380
We're just trying to provide the best possible experience that we can for our users.

00:51:39.380 --> 00:51:40.300
Yeah, super cool.

00:51:40.300 --> 00:51:50.460
One thing that we talked about a little bit before we hit record that I think is interesting is you'd mentioned how some of the infrastructure and some of the ideas you get to apply and experiment with.

00:51:50.460 --> 00:51:55.160
Here are things that you can actually bring back to your day job, right?

00:51:55.160 --> 00:51:59.740
Where you wouldn't get a chance to say, oh, let's, you know, try this thing with Kubernetes or whatever it is you're doing.

00:51:59.740 --> 00:52:00.680
But you can try it here.

00:52:00.680 --> 00:52:02.360
And then if it works, like, oh, yeah, we tried this.

00:52:02.360 --> 00:52:03.080
Here's how it's working.

00:52:03.080 --> 00:52:09.120
I think there's this interesting interplay between like work, work, your main professional experience.

00:52:09.120 --> 00:52:13.480
And then these kind of more freeform places where you have more control to do whatever you want.

00:52:13.480 --> 00:52:15.460
Yeah, we try to encourage that kind of thing.

00:52:15.460 --> 00:52:19.960
Like we were now we're thinking about doing a rewriter for our API into FastAPI.

00:52:19.960 --> 00:52:22.140
It's currently a Django RESTful API.

00:52:22.140 --> 00:52:27.940
And the primary motivation for that is because one of the owners needs to learn FastAPI for work.

00:52:27.940 --> 00:52:28.400
Yeah, sure.

00:52:28.480 --> 00:52:30.580
That's a really good reason to do it.

00:52:30.580 --> 00:52:34.060
And of course, it gives us an extra benefit because it could use a rewrite.

00:52:34.060 --> 00:52:38.740
But probably we wouldn't have done it unless we had someone who was sort of personally motivated.

00:52:39.240 --> 00:52:52.200
So yeah, in a way, I think especially at the top of like the executive leadership, we try to use Python Discord as sort of a sandbox to experiment with stuff and learn skills that we can take with us to work.

00:52:52.200 --> 00:53:01.260
Yeah, it gives a lot of people experience with things that they otherwise might not get to touch because that API that they work on at work, it's been Django REST framework for five years.

00:53:01.260 --> 00:53:02.600
And there's no reason to change it.

00:53:02.600 --> 00:53:04.040
And they're not changing it because it works.

00:53:04.040 --> 00:53:04.780
Don't touch it.

00:53:04.780 --> 00:53:05.460
Yeah, exactly.

00:53:05.460 --> 00:53:08.280
I learned Kubernetes from Python Discord myself.

00:53:08.440 --> 00:53:13.160
And now I'm bringing it to work with me because we don't have that kind of sophistication there quite yet.

00:53:13.160 --> 00:53:14.320
And that's just one example.

00:53:14.320 --> 00:53:20.720
I've learned half of everything I know, I think, at Python Discord because, of course, I'm in a unique position of being able to do pretty much whatever I want there.

00:53:20.720 --> 00:53:21.740
Yeah, exactly.

00:53:21.740 --> 00:53:28.260
I think that's the secret to being on the cutting edge is you find these places where you can try things out.

00:53:28.260 --> 00:53:33.120
And then you have that experience maybe to bring back to more conservative type of environments.

00:53:33.320 --> 00:53:40.580
I think that this kind of way of using the community has been mostly available to the owners until we grew to this size.

00:53:40.580 --> 00:53:44.580
And now I'm trying to sort of expand that to the rest of the staff and anyone who wants to get involved.

00:53:44.580 --> 00:53:50.220
Like, please come and use us as a way for you to learn that next thing that you're thinking about learning.

00:53:50.220 --> 00:53:57.440
Like, maybe we can provide you an opportunity to, and you're really looking to get into making a great sounding audio.

00:53:57.440 --> 00:54:01.360
Maybe we have an opportunity for you to, like, hone your craft and practice.

00:54:01.360 --> 00:54:01.720
Yeah.

00:54:01.720 --> 00:54:02.160
Yeah.

00:54:02.160 --> 00:54:02.580
Very cool.

00:54:02.580 --> 00:54:03.060
All right.

00:54:03.060 --> 00:54:06.720
Well, I think that's about it for time that we have to talk about Python Discord.

00:54:06.720 --> 00:54:09.940
But congratulations on such a cool community, you and everyone else.

00:54:09.940 --> 00:54:10.900
I know it isn't just you.

00:54:10.900 --> 00:54:13.500
You're the figurehead for the community, right?

00:54:13.500 --> 00:54:22.460
Maybe in a way because I have a freakishly large beard and there's a small cult of personality around my lemon nickname.

00:54:22.460 --> 00:54:25.100
We have a whole set of emojis with lemons.

00:54:25.100 --> 00:54:25.640
Oh, nice.

00:54:27.440 --> 00:54:29.420
So it's sort of, but yeah, I don't know.

00:54:29.420 --> 00:54:33.020
We have a lot of really notable members of the community once you get to know them.

00:54:33.020 --> 00:54:34.820
There's so many great people involved.

00:54:34.820 --> 00:54:37.540
So it's just a wonderful place to be.

00:54:37.540 --> 00:54:37.880
Yeah.

00:54:37.880 --> 00:54:38.500
Fantastic.

00:54:38.500 --> 00:54:39.000
All right.

00:54:39.000 --> 00:54:41.020
Final two questions before I let you out of here.

00:54:41.020 --> 00:54:41.380
Yes.

00:54:41.380 --> 00:54:42.400
You're going to write some Python code.

00:54:42.400 --> 00:54:44.000
What editor are you using these days?

00:54:44.000 --> 00:54:54.060
So I use PyCharm and I use a little bit of VS Code on the side when I need to do something really simple or whenever I want to do this code collab thing.

00:54:54.060 --> 00:55:01.620
So PyCharm has code with me and there's the live sync thing on VS Code where you can actually like live collaborate on files.

00:55:01.620 --> 00:55:02.780
I've been getting into that.

00:55:02.780 --> 00:55:07.000
It's really cool to work like two people live editing some code together.

00:55:07.000 --> 00:55:10.240
And PyCharm's been really good to me from day one.

00:55:10.240 --> 00:55:13.120
I just really fell in love with it since I started using it.

00:55:13.120 --> 00:55:18.860
It has so many features that I need, especially as a full stack developer who is into a lot of web stuff.

00:55:18.860 --> 00:55:23.620
And I work on JavaScript and HTML and I interact with databases a lot.

00:55:23.620 --> 00:55:36.060
So once you're thinking about writing, PyCharm has native support for Django and Flask and can really make sense of a lot of these files in ways that the other editors would need plugins and stuff to do.

00:55:36.060 --> 00:55:37.880
You just get so much out of the box.

00:55:37.880 --> 00:55:38.160
Yeah.

00:55:38.160 --> 00:55:39.740
It's 100% agree with you.

00:55:39.740 --> 00:55:40.080
Absolutely.

00:55:40.080 --> 00:55:40.560
Yeah.

00:55:40.560 --> 00:55:41.620
Very, very cool one.

00:55:41.720 --> 00:55:41.900
All right.

00:55:41.900 --> 00:55:43.680
And then notable PyPI packages.

00:55:43.680 --> 00:55:45.540
What do you want to give a shout out to there?

00:55:45.540 --> 00:55:50.400
We've mentioned a couple of the stuff that we've made here at Python Discord.

00:55:50.400 --> 00:55:52.320
I want to also mention that.

00:55:52.320 --> 00:55:57.100
So maybe that's a little narcissistic of me to talk about my own packages when you ask me this.

00:55:57.100 --> 00:55:59.160
There's a lot of packages I really love out there.

00:55:59.240 --> 00:56:04.840
But you may not have heard of stuff like we have async Redis cache, which is this.

00:56:04.840 --> 00:56:10.300
We found out that working with Redis from an asynchronous context can be a little complicated sometimes.

00:56:10.300 --> 00:56:16.800
So we made this PyPI package that makes it extremely trivial to work with Redis from, for instance, a Discord bot.

00:56:16.900 --> 00:56:26.100
That's where we use it so that if all you need to do is just cache some data in Redis so that you can access it later and, you know, like use it as a cache the way most people do.

00:56:26.100 --> 00:56:29.900
This is a godsend for working with it in an asynchronous way.

00:56:29.900 --> 00:56:35.640
Then I also have a personal project that I've been working on a lot lately called Blackbox.

00:56:35.640 --> 00:56:39.220
And it's in reference to the black box inside of a plane.

00:56:39.220 --> 00:56:39.560
Okay.

00:56:39.640 --> 00:56:47.400
So like the idea is if there's a disaster, you get the black box and has the stuff that you need to like figure out what happened and get back on track.

00:56:47.400 --> 00:56:49.960
And so black box is a backup system.

00:56:49.960 --> 00:56:54.980
It's designed to be extremely easy to work with, like abstract away all the painful stuff.

00:56:54.980 --> 00:56:57.960
And it's also designed to be really easy to contribute to.

00:56:57.960 --> 00:57:03.080
I've been like working on trying to make the most contributor friendly thing I can do.

00:57:03.080 --> 00:57:04.460
Big fat read me.

00:57:04.460 --> 00:57:06.420
Everything's like abstract classes.

00:57:06.620 --> 00:57:13.300
So if you want to contribute, you usually only have to touch a single file to write like a single interface basically for the thing.

00:57:13.300 --> 00:57:15.980
So what it does is you make a config file.

00:57:15.980 --> 00:57:18.660
You put connection strings into that config file.

00:57:18.660 --> 00:57:20.780
So say you want to do a backup of Postgres.

00:57:20.780 --> 00:57:25.900
Well, you write a single string that's like Postgres colon slash slash the username, the password.

00:57:25.900 --> 00:57:27.880
And then you put that in there.

00:57:27.880 --> 00:57:29.420
And now it knows how to talk to Postgres.

00:57:29.420 --> 00:57:30.760
It does all of that stuff for you.

00:57:30.760 --> 00:57:36.100
So now you've told it a couple of databases, say Postgres, Redis, MongoDB, whatever you've got.

00:57:36.380 --> 00:57:38.340
Then you tell it, where do you want to store that backup?

00:57:38.340 --> 00:57:40.040
Maybe you want to store it in an S3.

00:57:40.040 --> 00:57:43.400
Maybe you want to store it on Dropbox or something free like that.

00:57:43.400 --> 00:57:47.800
Well, then you just put in another connection string that describes how to talk to that service.

00:57:47.800 --> 00:57:52.040
And then lastly, maybe you want to be let know when that backup has been done.

00:57:52.040 --> 00:57:55.800
So then you can put in a Slack or a Discord connection string.

00:57:56.200 --> 00:57:59.160
And it'll send you a message and say, oh, I'm done with my backup.

00:57:59.160 --> 00:58:05.020
So the goal is for people to just install it off of PyPI and they can put it in a cron job or run it manually.

00:58:05.020 --> 00:58:09.580
And it'll just do the backup, store it somewhere in the cloud and let you know when it's done.

00:58:09.580 --> 00:58:10.040
I love it.

00:58:10.040 --> 00:58:10.780
That's really cool.

00:58:10.780 --> 00:58:13.380
And it looks like something maybe I could even make use of.

00:58:13.380 --> 00:58:15.740
I mean, I got MongoDB and I have backups for it.

00:58:15.800 --> 00:58:18.760
But this sort of fully automatic stuff would be cool.

00:58:18.760 --> 00:58:23.100
I've already got a Slack channel where I get notifications for like deploys and whatnot.

00:58:23.100 --> 00:58:25.600
It could just throw in like, hey, we did a backup next to that, you know?

00:58:25.600 --> 00:58:27.380
Well, it's really easy to get started with.

00:58:27.380 --> 00:58:31.760
So if, you know, like some people have like expensive paid backup services,

00:58:31.760 --> 00:58:33.380
and they'll obviously be much better.

00:58:33.380 --> 00:58:39.000
Like saving a complete snapshot of the entire database server is going to be better than this.

00:58:39.000 --> 00:58:41.000
But if you're just looking for something quick and easy,

00:58:41.000 --> 00:58:44.620
maybe you just want to store it in Dropbox or something.

00:58:44.940 --> 00:58:47.680
This is a great way to have like offsite backups for free.

00:58:47.680 --> 00:58:49.340
And you can set it up in 10 minutes.

00:58:49.340 --> 00:58:49.800
Very cool.

00:58:49.800 --> 00:58:50.200
All right.

00:58:50.200 --> 00:58:51.660
Well, that's quite neat now.

00:58:51.660 --> 00:58:53.040
Thanks for letting us know about that one.

00:58:53.040 --> 00:58:53.320
Yeah.

00:58:53.320 --> 00:58:53.680
Yeah.

00:58:53.680 --> 00:58:54.240
All right.

00:58:54.240 --> 00:59:01.560
Well, the live chat is blowing up with lemons and bot commands about your beard and things like that.

00:59:01.560 --> 00:59:04.600
So thanks everyone.

00:59:04.600 --> 00:59:07.980
But mostly just appreciation from the community, I think.

00:59:07.980 --> 00:59:08.640
So very cool.

00:59:08.640 --> 00:59:09.720
So final call to action.

00:59:09.720 --> 00:59:11.860
People are interested in being part of your community.

00:59:11.860 --> 00:59:12.420
What do they do?

00:59:12.420 --> 00:59:12.720
Right.

00:59:12.800 --> 00:59:15.960
So they can go to python discord.com or .org.

00:59:15.960 --> 00:59:19.840
And from there, you get all the information you need in order to join us.

00:59:19.840 --> 00:59:23.680
If there's also just discord.gg slash Python, that's us.

00:59:23.680 --> 00:59:27.060
Or you can even find it in the Python subreddit.

00:59:27.060 --> 00:59:31.600
So once you get into the community, you just ask around and we'll help you get started with whatever

00:59:31.600 --> 00:59:32.280
it is you want.

00:59:32.280 --> 00:59:33.220
You need help.

00:59:33.220 --> 00:59:34.380
There's help channels to ask.

00:59:34.380 --> 00:59:35.720
You join an event.

00:59:35.920 --> 00:59:39.580
There's lots of cool stuff going to happen in the next couple months.

00:59:39.580 --> 00:59:40.980
Get involved in Pi Week.

00:59:40.980 --> 00:59:41.780
It's really fun.

00:59:41.780 --> 00:59:42.500
You write a game.

00:59:42.500 --> 00:59:43.900
Get involved in the Code Jam.

00:59:43.900 --> 00:59:45.120
It's a unique experience.

00:59:45.120 --> 00:59:45.520
Yeah.

00:59:45.520 --> 00:59:47.940
And yeah, just come hang out with us.

00:59:47.940 --> 00:59:49.420
It's really, it's a lovely place.

00:59:49.420 --> 00:59:49.820
That's cool.

00:59:49.820 --> 00:59:55.040
It sounds like some of these programming examples and opportunities might be like more low key,

00:59:55.040 --> 00:59:58.520
more silly and fun rather than, you know, forms over data.

00:59:58.520 --> 00:59:58.860
Yeah.

00:59:58.860 --> 00:59:59.560
Yeah, exactly.

00:59:59.560 --> 00:59:59.960
Yeah.

00:59:59.960 --> 01:00:00.220
Cool.

01:00:00.220 --> 01:00:00.660
All right.

01:00:00.660 --> 01:00:03.900
Well, thanks for coming on and sharing what you guys are up to over there and it's been

01:00:03.900 --> 01:00:04.440
great to chat with you.

01:00:04.440 --> 01:00:05.340
Oh, it's been my pleasure.

01:00:05.340 --> 01:00:05.680
Yeah.

01:00:05.680 --> 01:00:06.240
See you later.

01:00:06.240 --> 01:00:06.580
All right.

01:00:06.580 --> 01:00:07.120
Bye, Michael.

01:00:07.120 --> 01:00:10.920
This has been another episode of Talk Python To Me.

01:00:10.920 --> 01:00:15.960
Our guest on this episode was Leon Sandøy and it's been brought to you by Linode and us

01:00:15.960 --> 01:00:17.160
over at Talk Python Training.

01:00:17.160 --> 01:00:21.820
Simplify your infrastructure and cut your cloud bills in half with Linode's Linux virtual machines.

01:00:21.820 --> 01:00:25.200
Develop, deploy, and scale your modern applications faster and easier.

01:00:25.200 --> 01:00:30.140
Visit talkpython.fm/Linode and click the create free account button to get started.

01:00:30.140 --> 01:00:31.880
Want to level up your Python?

01:00:31.880 --> 01:00:35.920
We have one of the largest catalogs of Python video courses over at Talk Python.

01:00:35.920 --> 01:00:41.100
Our content ranges from true beginners to deeply advanced topics like memory and async.

01:00:41.100 --> 01:00:43.780
And best of all, there's not a subscription in sight.

01:00:43.780 --> 01:00:46.720
Check it out for yourself at training.talkpython.fm.

01:00:46.720 --> 01:00:51.580
Be sure to subscribe to the show, open your favorite podcast app, and search for Python.

01:00:51.580 --> 01:00:52.880
We should be right at the top.

01:00:52.880 --> 01:00:58.040
You can also find the iTunes feed at /itunes, the Google Play feed at /play,

01:00:58.040 --> 01:01:02.240
and the direct RSS feed at /rss on talkpython.fm.

01:01:02.240 --> 01:01:05.660
We're live streaming most of our recordings these days.

01:01:05.660 --> 01:01:09.080
If you want to be part of the show and have your comments featured on the air,

01:01:09.080 --> 01:01:13.460
be sure to subscribe to our YouTube channel at talkpython.fm/youtube.

01:01:13.460 --> 01:01:15.360
This is your host, Michael Kennedy.

01:01:15.360 --> 01:01:16.640
Thanks so much for listening.

01:01:16.640 --> 01:01:17.800
I really appreciate it.

01:01:17.800 --> 01:01:19.740
Now get out there and write some Python code.

01:01:19.740 --> 01:01:40.320
I really appreciate it.