WEBVTT

00:00:00.001 --> 00:00:04.240
So you've created a Python-based open source project, and it's starting to take off.

00:00:04.240 --> 00:00:08.400
You're getting contributors, lots of buzz in the podcast space, and more.

00:00:08.400 --> 00:00:12.340
But you have that day job working on Java still.

00:00:12.340 --> 00:00:17.220
How do you make that transition from popular hobby project to a full-time job?

00:00:17.220 --> 00:00:21.460
After all, you're giving away your open source project for free, right?

00:00:21.460 --> 00:00:27.180
Well, on this episode, I put together an amazing panel of guests who all have done exactly this.

00:00:27.180 --> 00:00:31.400
Turned their project into full-time work and even companies in some cases.

00:00:31.400 --> 00:00:40.340
We have Samuel Colvin, Gina Häußge, Sebastian Ramirez, Charlie Marsh, Will McGugan, and Eric Hulsher on to share their stories.

00:00:40.340 --> 00:00:46.080
This is Talk Python To Me, episode 448, recorded December 7th, 2023.

00:00:46.080 --> 00:01:03.920
Welcome to Talk Python To Me, a weekly podcast on Python.

00:01:03.920 --> 00:01:05.660
This is your host, Michael Kennedy.

00:01:05.660 --> 00:01:13.160
Follow me on Mastodon, where I'm @mkennedy, and follow the podcast using @talkpython, both on fosstodon.org.

00:01:13.360 --> 00:01:18.240
Keep up with the show and listen to over seven years of past episodes at talkpython.fm.

00:01:18.240 --> 00:01:22.040
We've started streaming most of our episodes live on YouTube.

00:01:22.040 --> 00:01:29.580
Subscribe to our YouTube channel over at talkpython.fm/youtube to get notified about upcoming shows and be part of that episode.

00:01:30.140 --> 00:01:33.180
This episode is sponsored by BaseDash.

00:01:33.180 --> 00:01:37.220
BaseDash uses AI to build a dashboard for your database.

00:01:37.220 --> 00:01:45.140
Get a custom admin view in your Postgres, Microsoft SQL Server, MySQL, MariaDB, or Redshift database.

00:01:45.140 --> 00:01:49.180
Get started for free at talkpython.fm/BaseDash.

00:01:49.180 --> 00:01:51.300
And it's brought to you by Sentry.

00:01:51.300 --> 00:01:53.540
Don't let those errors go unnoticed.

00:01:53.540 --> 00:01:54.560
Use Sentry.

00:01:54.560 --> 00:01:57.400
Get started at talkpython.fm/sentry.

00:01:57.400 --> 00:01:58.500
Hello, everyone.

00:01:58.500 --> 00:02:02.280
Charlie, Will, Eric, Sebastian, Gina, and Samuel.

00:02:02.280 --> 00:02:04.540
What a big group of people we have here today.

00:02:04.540 --> 00:02:05.840
An awesome, awesome group.

00:02:05.840 --> 00:02:06.660
Thanks for being here, everyone.

00:02:06.660 --> 00:02:09.740
It's going to be super fun to have you on the show.

00:02:09.740 --> 00:02:14.180
You know, I know there's so many people out there that are dreaming of an open source project

00:02:14.180 --> 00:02:21.680
or even working on open source and contributing to it, but it's something they squeeze in the last hour of their day.

00:02:21.780 --> 00:02:32.140
And at some point, all of you have made this amazing transition to where there's enough support, there's enough interest in what you all built that becomes your full-time thing, right?

00:02:32.140 --> 00:02:34.900
Which is, I know for many out there, living the dream.

00:02:34.900 --> 00:02:36.740
So you all are living the dream.

00:02:36.740 --> 00:02:38.660
I'm hopefully you feel that way.

00:02:39.240 --> 00:02:45.940
But it's going to be really great to kind of just explore your projects, how do you make that transition, and, you know, what you're up to.

00:02:45.940 --> 00:02:52.700
So we have Samuel Colvin on from Pydantic, and he has the tightest schedule.

00:02:52.700 --> 00:02:56.520
He's squeezing us in on a far-flung trip, a work trip.

00:02:56.640 --> 00:02:58.160
So let's go to you first, Samuel.

00:02:58.160 --> 00:03:03.120
Just, you know, tell people a bit about who you are and what your project is to get started.

00:03:03.120 --> 00:03:03.940
Yeah, I'm Samuel.

00:03:03.940 --> 00:03:08.660
I maintain Pydantic, which is a data validation library for Python that uses PyTynx.

00:03:08.660 --> 00:03:15.780
So those weird things you've seen after colon and Python that mostly do nothing unless you run mypy or Pyright.

00:03:15.780 --> 00:03:17.620
Pydantic basically enforces them.

00:03:17.620 --> 00:03:24.500
Almost exactly a year ago, I was sort of working on Pydantic full-time back then, but really spending my own money to do so.

00:03:24.500 --> 00:03:26.800
And a big American VC got in touch.

00:03:26.800 --> 00:03:31.980
And fast forward, I raised some money and started a company at the beginning of this year.

00:03:31.980 --> 00:03:34.200
I hired now 10 people.

00:03:34.200 --> 00:03:37.280
And I'm actually, as you mentioned, I'm in Istanbul at the moment with the whole team.

00:03:37.280 --> 00:03:44.980
It turns out if you have a team with Americans, Iranians, and Russians, that Istanbul is one of the few places that you can actually meet efficiently.

00:03:44.980 --> 00:03:50.840
So, yeah, we're having a really fun week in Istanbul, mostly working together, and then going after dinner, which is where we are at the moment.

00:03:50.840 --> 00:03:52.960
I hope that's a good summary.

00:03:52.960 --> 00:03:53.580
Absolutely.

00:03:53.860 --> 00:03:59.920
And what a cool experience that you get to hang out with all these people talking about your project in Istanbul.

00:03:59.920 --> 00:04:01.920
I just had, by the way, I just had...

00:04:01.920 --> 00:04:16.480
I mean, just think that the other thing I would add is that one of the best bits of it has been being able to hire friends of mine from open source, people who had, I think, all but two of the people here have contributed to Pydantic before we started the company, which is how I hired the first, I think, six people.

00:04:17.020 --> 00:04:23.080
And then a few more.

00:04:23.080 --> 00:04:25.140
being able to pay the property.

00:04:25.140 --> 00:04:26.140
Yeah, awesome.

00:04:26.140 --> 00:04:28.800
I see a lot of people shaking their head out there as well.

00:04:29.140 --> 00:04:35.160
Just coincidentally, I recently had Sydney Runkle on Who Works With You, and she's such an inspiration.

00:04:35.160 --> 00:04:41.860
That show is not out yet, but has already been done yet through the weird time shifting of podcasting.

00:04:41.860 --> 00:04:43.780
So it'll be out before this, but it's not out yet.

00:04:43.780 --> 00:04:46.640
So anyway, very, very cool team you got there.

00:04:46.780 --> 00:04:49.660
I guess we'll go around the order of the video.

00:04:49.660 --> 00:04:51.960
Pretty bunch pictures here.

00:04:51.960 --> 00:04:53.460
So Charlie, you're up next.

00:04:53.460 --> 00:04:55.040
Quick, quick bit about you.

00:04:55.040 --> 00:04:56.520
Hey, so I'm Charlie.

00:04:56.520 --> 00:05:04.240
I am the author of Ruff, which is a Python linter code formatter and code transformation tool written in Rust.

00:05:04.240 --> 00:05:09.820
I started working on Ruff about a year ago, maybe like October last year.

00:05:09.820 --> 00:05:11.300
Similar time frame to Samuel, yeah.

00:05:11.300 --> 00:05:17.620
Yeah, and I worked on it full time for a while, similar to Samuel, although probably not for quite as long.

00:05:17.620 --> 00:05:19.760
I was working on it full time without any funding.

00:05:19.760 --> 00:05:27.540
And then similarly, I started a company around Ruff and really around the vision of trying to build high performance Python tools.

00:05:27.540 --> 00:05:36.260
So take some of the things that make Ruff nice to use and popular and well-liked and try to apply those principles to other parts of the Python tool chain.

00:05:36.260 --> 00:05:40.160
Yeah, we're a team of six and we're fully remote.

00:05:40.160 --> 00:05:43.740
So no two of us live in the same place.

00:05:43.740 --> 00:05:48.040
I guess a couple of us live in the same country, but most of us live in different countries.

00:05:48.040 --> 00:05:57.520
And we span basically U.S. central time to, I don't know, we have one person in India and one person in Minneapolis.

00:05:57.520 --> 00:06:00.420
And that kind of stretches like the full time zones of the team.

00:06:00.420 --> 00:06:01.180
That's a good stretch.

00:06:01.180 --> 00:06:02.120
That's a good stretch there.

00:06:02.120 --> 00:06:03.080
Well, absolutely.

00:06:03.080 --> 00:06:04.380
Congratulations on Ruff.

00:06:04.380 --> 00:06:06.440
It is really, really taken off.

00:06:06.440 --> 00:06:15.900
And I know the guy right below you and this squares, Sebastian, I saw him saying nice things about it with FastAPI and so on.

00:06:15.900 --> 00:06:16.840
Yeah, yeah, I know.

00:06:16.840 --> 00:06:17.540
Thanks a lot.

00:06:17.720 --> 00:06:25.400
It's just funny because I think I was saying before I started recording, I think when I came on Talk Python last time, I think that might have been my first time ever on a podcast.

00:06:25.400 --> 00:06:26.920
And it was to talk about Ruff.

00:06:26.920 --> 00:06:28.920
And so I was like, oh, wow, people care about what I'm doing.

00:06:28.920 --> 00:06:30.420
That's super cool.

00:06:30.420 --> 00:06:36.340
And Pydantic and FastAPI were some of the earliest adopters that people had heard of.

00:06:36.340 --> 00:06:46.920
So they were like very early on in the life cycle and helped a lot with, you know, getting people to see Ruff and sort of care about Ruff and know that smart people are using it.

00:06:47.400 --> 00:06:47.640
That's awesome.

00:06:47.720 --> 00:06:54.220
Well, when you visit Talk Python or the course's website or others, it's all Ruff-ified.

00:06:54.220 --> 00:06:58.240
I don't know what the adjective of Ruff is, but it's been Ruff.

00:06:58.240 --> 00:06:59.320
It's whatever you want to say.

00:06:59.320 --> 00:07:00.240
It's amazing.

00:07:00.240 --> 00:07:02.980
It's been Ruff-ed up and it works great.

00:07:02.980 --> 00:07:03.900
It's really amazing.

00:07:03.900 --> 00:07:05.640
That makes the code sound really bad.

00:07:05.640 --> 00:07:06.140
But yeah.

00:07:06.140 --> 00:07:06.940
True.

00:07:06.940 --> 00:07:07.320
Yeah.

00:07:07.320 --> 00:07:08.260
That's maybe not the best.

00:07:08.260 --> 00:07:09.180
It's like saying it's sick.

00:07:09.180 --> 00:07:10.640
Like, oh, that was a sick trick they did.

00:07:10.640 --> 00:07:11.580
It means good.

00:07:11.580 --> 00:07:12.120
Yeah, that code is rough.

00:07:12.120 --> 00:07:13.820
Yeah, that code is rough, man.

00:07:13.820 --> 00:07:14.400
All right.

00:07:14.400 --> 00:07:15.960
Will, is your code rough?

00:07:15.960 --> 00:07:16.640
Who are you?

00:07:16.640 --> 00:07:18.080
It's got some rough edges, certainly.

00:07:18.080 --> 00:07:19.240
Welcome.

00:07:19.460 --> 00:07:19.620
Yeah.

00:07:19.620 --> 00:07:20.320
I'm Will.

00:07:20.320 --> 00:07:23.060
I'm probably best known for a library called Rich.

00:07:23.060 --> 00:07:27.040
And Rich is a library for writing formatted content in Terminal.

00:07:27.040 --> 00:07:32.240
You can write tables and progress bars and syntax highlighted code, all sorts of things.

00:07:32.920 --> 00:07:36.060
And then that became quite popular in the Python world.

00:07:36.060 --> 00:07:37.960
I think there was a need for it.

00:07:37.960 --> 00:07:49.440
And two years ago, I founded Textualize, which is a company which builds on Rich to produce a library called Textual, which allows you to build user interfaces inside Terminal.

00:07:49.440 --> 00:07:54.620
And these are kind of more like web interfaces and less like Cursus applications.

00:07:54.620 --> 00:07:56.680
Yeah, I was just thinking almost like Flexbox.

00:07:56.680 --> 00:07:59.720
You can dock stuff to the side and that's part of a UI.

00:07:59.720 --> 00:08:01.740
But it's pretty amazing what you've built.

00:08:01.740 --> 00:08:06.080
I think it's pushed the Terminal far beyond what many people thought the Terminal should be doing.

00:08:06.080 --> 00:08:06.840
It's been very cool.

00:08:06.840 --> 00:08:08.520
It's been a process of discovery.

00:08:08.520 --> 00:08:09.600
It's kind of strange.

00:08:09.600 --> 00:08:17.700
You've got technology that's been around for decades and are still discovering things they can do, which people haven't tried before.

00:08:17.700 --> 00:08:19.040
So, yeah, it's been a lot of fun.

00:08:19.040 --> 00:08:22.020
And it's been great to work with a small team of developers.

00:08:22.020 --> 00:08:26.640
We've got a small core here in Edinburgh, Scotland, and we've got one developer in Portugal.

00:08:26.640 --> 00:08:28.580
So, yeah, it's been great.

00:08:28.580 --> 00:08:32.020
And I love the reception and I love what people are building with it.

00:08:32.020 --> 00:08:32.240
Yeah.

00:08:32.240 --> 00:08:36.420
It's so many people are interested in using Rich.

00:08:36.420 --> 00:08:38.540
And there's a ton of plugins, right?

00:08:38.540 --> 00:08:45.520
There's like Rich Click and there's pytest Rich and all these things like, well, whatever we're doing, it should also have what you've built, you know?

00:08:45.520 --> 00:08:45.760
Yeah.

00:08:45.760 --> 00:08:46.320
I love to see that.

00:08:46.320 --> 00:08:48.380
I love to see the ecosystem building.

00:08:48.380 --> 00:08:51.500
Our adjective is richified, which is not as good as possible.

00:08:51.500 --> 00:08:51.520
Richified.

00:08:51.520 --> 00:08:51.780
Okay.

00:08:51.780 --> 00:08:52.400
Yeah.

00:08:52.400 --> 00:08:53.460
Yo, that's rich.

00:08:53.460 --> 00:08:54.600
My code is rich.

00:08:54.600 --> 00:08:55.220
Okay.

00:08:55.220 --> 00:08:55.680
Richified.

00:08:55.680 --> 00:08:56.120
Got it.

00:08:56.120 --> 00:08:57.120
I love it.

00:08:57.120 --> 00:08:59.340
We all have adjectives that we've got to put on things.

00:08:59.340 --> 00:09:00.020
Yeah.

00:09:00.020 --> 00:09:03.280
I'm a big fan of you and your team's work, by the way.

00:09:03.280 --> 00:09:06.020
I mean, I'm sure you hear it all the time that you build awesome stuff.

00:09:06.020 --> 00:09:06.580
Cheers.

00:09:06.580 --> 00:09:07.180
I appreciate it.

00:09:07.180 --> 00:09:07.800
Yeah, indeed.

00:09:07.800 --> 00:09:08.500
We all are.

00:09:08.500 --> 00:09:09.380
Eric, welcome.

00:09:09.420 --> 00:09:14.280
You and I are coming in somewhat local here out of Portland, not Istanbul.

00:09:14.280 --> 00:09:15.900
I'm actually out in Bend at the moment.

00:09:15.900 --> 00:09:16.880
So yeah.

00:09:16.880 --> 00:09:17.920
I absolutely love Bend.

00:09:17.920 --> 00:09:19.060
Lots of mountains and whatnot.

00:09:19.060 --> 00:09:23.960
But yeah, so my background in Eric Holscher, folks probably know me from kind of the Read the Docs ecosystem.

00:09:23.960 --> 00:09:27.260
I feel like I've been doing this for a while compared to everyone else here.

00:09:27.260 --> 00:09:30.500
The project actually started in 2010, which is kind of amazing.

00:09:30.500 --> 00:09:34.200
And then we actually started the company around it in 2014.

00:09:34.200 --> 00:09:36.180
So coming up next year, that'll be 10 years.

00:09:36.380 --> 00:09:38.620
And so, yeah, and we're all bootstrapped.

00:09:38.620 --> 00:09:40.060
So we haven't done any venture capital.

00:09:40.060 --> 00:09:45.040
It's all been kind of just built up the open source and then kind of turned it into a company on top of that.

00:09:45.040 --> 00:09:51.560
We kind of have a business model of doing paid for private hosting, you know, companies as well as advertising on open source.

00:09:51.560 --> 00:10:00.820
And we spun out a kind of a separate business called Ethical Ads that we built kind of to basically make, you know, better advertising on the internet, not doing any of the creepy tracking stuff.

00:10:00.820 --> 00:10:05.740
Read the Docs is so critical to the open source space, not just Python, but especially Python.

00:10:05.740 --> 00:10:06.000
Yeah.

00:10:06.000 --> 00:10:06.140
Yeah.

00:10:06.140 --> 00:10:06.460
Yeah.

00:10:06.460 --> 00:10:08.400
I mean, so awesome work on that.

00:10:08.400 --> 00:10:11.040
And then just, you know, good job on the ad stuff as well.

00:10:11.040 --> 00:10:14.820
It's the tendency of the whole ad space is to be super creepy.

00:10:15.020 --> 00:10:21.460
And just like, how much can we resell and how much can we buy to mix in to like create these shadow profiles?

00:10:21.460 --> 00:10:23.300
And it's not a good social trend.

00:10:23.300 --> 00:10:24.760
It's not good for people.

00:10:24.760 --> 00:10:26.220
And it's not really necessary, right?

00:10:26.220 --> 00:10:31.380
Like if I want to, you know, I've sponsored ads on Read the Docs or had run ads on Read the Docs before.

00:10:31.380 --> 00:10:32.740
And we had a Flask course.

00:10:32.740 --> 00:10:40.220
And let's just, you know, run that ad on Flask instead of like, let's see if we can track somebody through Instagram over to Facebook.

00:10:40.220 --> 00:10:41.140
Who knew, right?

00:10:41.140 --> 00:10:42.240
Yeah, exactly.

00:10:42.520 --> 00:10:43.900
We call it, yeah, newspaper advertising.

00:10:43.900 --> 00:10:46.040
And it's sort of been really cool with the advances of ML.

00:10:46.040 --> 00:10:48.600
Like the content targeting has gotten pretty good, right?

00:10:48.600 --> 00:10:53.020
So it's definitely a lot easier technically these days to kind of do that content matching.

00:10:53.020 --> 00:10:59.700
But yeah, I think in terms of the kind of open source, maybe the way that I'm a little different than other folks here is we're actually running something more akin to a service.

00:10:59.900 --> 00:11:04.820
So Read the Docs, all the code is open source, but a lot of the usage is open source projects using our hosted service.

00:11:04.820 --> 00:11:06.640
We do obviously ship a lot of code.

00:11:06.640 --> 00:11:11.800
Probably our Sphinx theme is probably the most kind of well-known actual software that people are running.

00:11:11.800 --> 00:11:14.720
A little bit similar to the folks here, the kind of sidebar on the left.

00:11:14.720 --> 00:11:18.380
And yeah, so I think that's kind of the background is, yeah, we have a little bit of everything.

00:11:18.380 --> 00:11:21.660
But yeah, it's a little more akin to something like a SaaS app, I would say.

00:11:21.660 --> 00:11:22.760
But the code is all open source.

00:11:22.760 --> 00:11:24.960
We do get a contribution in that way as well.

00:11:24.960 --> 00:11:25.720
Yeah, awesome.

00:11:25.720 --> 00:11:30.540
And, you know, it sounds a little similar to what Textualize is working towards as well, hosting.

00:11:30.540 --> 00:11:35.180
I mean, it's more hosting people's apps than hosting people's docs, but not terribly different.

00:11:35.180 --> 00:11:38.720
Paying for services is a classic open source monetization strategy, right?

00:11:38.720 --> 00:11:41.180
Like you have some way to kind of build the monetization on top.

00:11:41.180 --> 00:11:44.060
Yeah, it's like what you build is great, but it's kind of hard for me to run.

00:11:44.060 --> 00:11:44.860
Could you just do that?

00:11:44.860 --> 00:11:46.000
Like, yeah, sure, we can do that.

00:11:46.000 --> 00:11:47.920
Sebastian, always good to see you.

00:11:47.920 --> 00:11:48.500
Welcome back.

00:11:48.500 --> 00:11:50.060
Thank you very much for having me.

00:11:50.060 --> 00:11:50.800
Hello, everyone.

00:11:50.800 --> 00:11:52.740
I'm Sebastian Ramirez or Tiangelo.

00:11:53.080 --> 00:11:58.340
I created this little tool for building web APIs that is called FastAPI.

00:11:58.340 --> 00:12:00.760
And it has been growing quite a bit.

00:12:00.760 --> 00:12:02.380
People have liked it, fortunately.

00:12:02.380 --> 00:12:04.740
And like, yeah, that's it.

00:12:04.740 --> 00:12:08.740
I'm probably the only one that hasn't built a company here, I guess.

00:12:08.740 --> 00:12:11.460
Okay, baby.

00:12:11.460 --> 00:12:11.940
Okay.

00:12:11.940 --> 00:12:13.480
There are two of us.

00:12:13.480 --> 00:12:14.460
Nice.

00:12:14.460 --> 00:12:15.420
I want to hear that.

00:12:15.700 --> 00:12:22.620
Okay, so this year I have been able to work full-time on open source because Sequoia Capital, the VC firm, started this open source fellowship.

00:12:22.620 --> 00:12:27.940
And I am the first fellow, so I am kind of the test trial of the program.

00:12:27.940 --> 00:12:30.820
So I get, you know, just to work full-time on open source.

00:12:30.820 --> 00:12:36.360
And that's how I've been able to just, yeah, release that stuff in FastAPI and the ecosystem, like the other libraries.

00:12:36.360 --> 00:12:39.720
FastAPI, SQL model, type, and a couple of other things.

00:12:39.720 --> 00:12:41.720
But yeah, that's pretty much it.

00:12:41.860 --> 00:12:42.460
Yeah, awesome.

00:12:42.460 --> 00:12:48.760
Well, FastAPI is definitely the poster child for modern Python on the web.

00:12:48.760 --> 00:12:55.680
You know, and Samuel's work, obviously, is central to that as well, right, with Pydantic being such a core element there.

00:12:55.680 --> 00:12:56.760
So very awesome.

00:12:56.760 --> 00:13:01.520
Yeah, and like, I mean, FastAPI is built on top of like great open source tools and their needs.

00:13:01.520 --> 00:13:04.800
So Pydantic does all the data validation, serialization, documentation.

00:13:04.800 --> 00:13:08.240
And on the other side, Starlette does all the web parts.

00:13:08.660 --> 00:13:12.360
Yeah, it's like, and like, you know, like it's a very close, how do you call it?

00:13:12.360 --> 00:13:15.460
Like a close friendship between all the projects.

00:13:15.460 --> 00:13:17.680
Pydantic, Starlet, Uvicorn, FastAPI.

00:13:17.680 --> 00:13:22.720
Like, you know, like we actually know each, by this point, we actually know each other in person.

00:13:22.720 --> 00:13:27.460
Like the current maintainer of Starlette and Uvicorn works for the Pydantic company.

00:13:27.460 --> 00:13:31.020
And he's like the top FastAPI expert right now.

00:13:31.200 --> 00:13:39.060
But, you know, like it's very nice because helps the dynamism of like the speed of building stuff.

00:13:39.060 --> 00:13:39.980
It's great.

00:13:39.980 --> 00:13:46.900
Yeah, I imagine a lot of people don't realize the interconnections between these different projects that are at play here.

00:13:46.900 --> 00:13:48.060
Yeah, it's definitely super fun.

00:13:48.060 --> 00:13:48.460
Absolutely.

00:13:48.680 --> 00:13:53.560
And then it's worth saying we in Pydantic use FastAPI as well as contributing to the libraries that build it.

00:13:53.560 --> 00:13:56.020
We also use FastAPI for the services that we're building.

00:13:56.020 --> 00:14:00.920
So we're like consumers both directly and indirectly of the things that we maintain in open source.

00:14:00.920 --> 00:14:01.400
Awesome.

00:14:01.400 --> 00:14:03.040
Chat point off and splash is awesome.

00:14:03.040 --> 00:14:04.700
It's turtles all the way down, basically.

00:14:04.700 --> 00:14:05.260
Exactly.

00:14:06.680 --> 00:14:09.960
This portion of Talk Python To Me is brought to you by BaseDash.

00:14:09.960 --> 00:14:15.480
BaseDash is the custom admin panel for your database that you don't have to build.

00:14:15.480 --> 00:14:19.520
We've all dealt with endless ad hoc requests for data access.

00:14:19.520 --> 00:14:24.680
Your support team wants user records, your non-technical co-founder needs to see charts,

00:14:24.680 --> 00:14:28.480
or your engineering team needs an easy way to share your SQL queries.

00:14:28.480 --> 00:14:33.280
These all sound like relatively simple tasks, but between building an internal tool,

00:14:33.780 --> 00:14:38.400
setting up an analytics product, and then switching back and forth between that and your SQL client,

00:14:38.400 --> 00:14:40.400
you've lost so much time.

00:14:40.400 --> 00:14:42.720
BaseDash gives you that time back.

00:14:42.720 --> 00:14:47.800
With BaseDash, you can instantly generate a visual UI for your database.

00:14:47.800 --> 00:14:50.120
All you have to do is connect your data source.

00:14:50.120 --> 00:14:54.940
It uses AI under the hood to generate the perfect admin panel for your data.

00:14:54.940 --> 00:14:55.860
Voila!

00:14:55.860 --> 00:14:59.480
Now anyone in your company has access to the data they need.

00:14:59.480 --> 00:15:03.160
They're rolling out a ton of new features like the ability to create charts

00:15:03.160 --> 00:15:04.740
using only natural language.

00:15:04.740 --> 00:15:07.700
You're going to get hours back in your day,

00:15:07.700 --> 00:15:11.300
and I promise you won't want to build an internal tool ever again.

00:15:11.300 --> 00:15:15.680
Check them out by visiting talkpython.fm/BaseDash.

00:15:15.680 --> 00:15:18.900
That's talkpython.fm/BaseDash.

00:15:18.900 --> 00:15:21.080
The link is in your podcast player show notes.

00:15:21.080 --> 00:15:24.780
BaseDash is free for small teams, so give it a try.

00:15:24.780 --> 00:15:25.880
You've got nothing to lose.

00:15:25.880 --> 00:15:28.420
Thank you to BaseDash for supporting the podcast.

00:15:29.640 --> 00:15:31.720
Gina, also awesome to have you back.

00:15:31.720 --> 00:15:32.660
Welcome in.

00:15:32.660 --> 00:15:34.000
Very happy to be back.

00:15:34.000 --> 00:15:36.920
That's really, really great to be here now, I think, for the second time.

00:15:36.920 --> 00:15:39.060
And the third if we call Python Bytes.

00:15:39.060 --> 00:15:43.040
So, yeah, my name is Gina Heuske, and I'm probably, yeah,

00:15:43.040 --> 00:15:46.600
I don't know if I'm that well-known throughout the Python community,

00:15:46.600 --> 00:15:50.480
but I'm quite well-known in the 3D printing community for having created Octoprint,

00:15:50.480 --> 00:15:53.420
which is the snappy web interface for U3D printer,

00:15:53.640 --> 00:15:56.100
and the server part of that is all written in Python.

00:15:56.100 --> 00:16:00.760
And I started a project back in 2012 when I got my first 3D printer

00:16:00.760 --> 00:16:05.280
as your regular pet project on the side after hours vacation, blah, blah, blah.

00:16:05.280 --> 00:16:10.460
In 2014, I got hired by a 3D printing company to work on it full-time,

00:16:10.460 --> 00:16:13.600
and in 2016, that company ran out of money,

00:16:13.600 --> 00:16:17.900
and I suddenly found myself with a full-fledged, full-grown open-source project

00:16:17.900 --> 00:16:20.280
and no funding whatsoever.

00:16:20.280 --> 00:16:23.720
So I tried this whole crowdfunding stuff with Patreon,

00:16:23.720 --> 00:16:26.980
and that is pretty much how I've been working ever since.

00:16:26.980 --> 00:16:30.060
So I'm self-employed under German law.

00:16:30.060 --> 00:16:31.120
I'm a freelancer.

00:16:31.120 --> 00:16:36.240
And, yeah, all my income comes from people who just sent me money

00:16:36.240 --> 00:16:38.060
for working on Octoprint.

00:16:38.060 --> 00:16:39.960
Did you say since 2016?

00:16:39.960 --> 00:16:41.580
Since 2016, yeah.

00:16:41.580 --> 00:16:42.540
Wow, okay, cool.

00:16:42.540 --> 00:16:44.080
So full-time since 2014,

00:16:44.080 --> 00:16:47.100
and self-employed and crowdfunded since 2016.

00:16:47.280 --> 00:16:49.220
So it's been a while.

00:16:49.220 --> 00:16:49.800
That's awesome.

00:16:49.800 --> 00:16:53.160
I also went full-time on all my stuff here in 2016,

00:16:53.160 --> 00:16:55.120
although it's technically not open-source.

00:16:55.120 --> 00:16:57.100
It talks a whole lot about open-source stuff.

00:16:57.100 --> 00:16:58.020
So awesome.

00:16:58.020 --> 00:16:59.080
It's been a while.

00:16:59.080 --> 00:16:59.540
Congratulations.

00:16:59.540 --> 00:17:00.440
Thank you.

00:17:00.440 --> 00:17:02.120
I'm still surprised it works, to be honest.

00:17:02.120 --> 00:17:04.800
I'm waiting every day that it stops working.

00:17:04.800 --> 00:17:07.540
And, yeah, actually, this year it came a bit close,

00:17:07.540 --> 00:17:10.440
and then I put out a blog post basically along the lines of,

00:17:10.440 --> 00:17:12.420
you know, the income is going this,

00:17:12.420 --> 00:17:13.880
but the usage numbers are going that,

00:17:13.880 --> 00:17:16.140
so something is amiss here and we need to talk.

00:17:16.140 --> 00:17:20.240
And then the community rallied and stuff fixed itself again.

00:17:20.240 --> 00:17:21.440
So that is pretty amazing.

00:17:21.440 --> 00:17:22.260
That's really awesome.

00:17:22.260 --> 00:17:22.880
Congratulations.

00:17:22.880 --> 00:17:24.480
It's easy for people to just go,

00:17:24.480 --> 00:17:26.760
oh, it's free, and there's some people supporting it,

00:17:26.760 --> 00:17:30.240
and just kind of assume that things are taken care of.

00:17:30.240 --> 00:17:31.680
But, yeah, really good.

00:17:31.680 --> 00:17:32.280
Really good.

00:17:32.280 --> 00:17:37.020
Yeah, you have a ton of supporters on GitHub sponsors as well, right?

00:17:37.100 --> 00:17:38.840
Actually, I've diversified over the years.

00:17:38.840 --> 00:17:40.940
In the beginning, it was only Patreon and PayPal,

00:17:40.940 --> 00:17:44.400
and then I started adding new payment platforms and options

00:17:44.400 --> 00:17:47.520
because people prefer to be able to use the stuff that they know,

00:17:47.520 --> 00:17:49.220
and some people don't like Patreon,

00:17:49.220 --> 00:17:52.460
some people don't like and don't know GitHub sponsors and stuff,

00:17:52.460 --> 00:17:54.740
and so you just give them the options to choose

00:17:54.740 --> 00:17:56.180
whatever they feel comfortable with,

00:17:56.180 --> 00:17:59.700
and this increases the likelihood that they actually will go through

00:17:59.700 --> 00:18:01.580
with throwing something in your head, so to speak.

00:18:01.720 --> 00:18:03.340
At least that's my feeling.

00:18:03.340 --> 00:18:03.920
I don't know.

00:18:03.920 --> 00:18:07.640
I think that GitHub sponsors has been really positive for open source.

00:18:07.640 --> 00:18:10.700
I think it's made it pretty easy to just check a box.

00:18:10.700 --> 00:18:12.380
They already have your credit card, potentially,

00:18:12.380 --> 00:18:13.900
and you just want to give a little support

00:18:13.900 --> 00:18:16.640
instead of a one-time PayPal donation here

00:18:16.640 --> 00:18:19.180
that you forget about after once and all that.

00:18:19.180 --> 00:18:21.780
Before we move on here, there's a funny comment,

00:18:21.780 --> 00:18:22.720
nice comment out.

00:18:22.720 --> 00:18:26.460
Kanishk says, this group, look at all of you.

00:18:26.460 --> 00:18:29.360
You guys are the Avengers of Python open source, right,

00:18:29.360 --> 00:18:30.860
which is kind of like the superheroes.

00:18:30.860 --> 00:18:31.380
I love it.

00:18:31.720 --> 00:18:33.520
It's somewhat actually true, it seems.

00:18:33.520 --> 00:18:34.060
Okay.

00:18:34.060 --> 00:18:37.820
So the next thing I want to ask is a little bit of an origin story.

00:18:37.820 --> 00:18:41.340
Just what projects did you try and they didn't really get traction,

00:18:41.340 --> 00:18:44.880
and then how do you think that your project got traction here?

00:18:44.880 --> 00:18:47.160
And I know, Samuel, you might vanish any minute,

00:18:47.160 --> 00:18:47.680
so you're next.

00:18:47.680 --> 00:18:48.560
You're up first on this one.

00:18:48.560 --> 00:18:49.280
That's a really interesting.

00:18:49.280 --> 00:18:51.320
I've built a number of things in open source.

00:18:51.320 --> 00:18:53.800
I started something last week.

00:18:53.800 --> 00:18:56.260
I open source on Friday that has got more stars

00:18:56.260 --> 00:18:58.960
over the last three days or, I guess, week now.

00:18:59.200 --> 00:19:01.700
as the first project I started, ARQ'd,

00:19:01.700 --> 00:19:04.040
has over, I think, coming up on six years.

00:19:04.040 --> 00:19:06.140
So, I mean, that's front end,

00:19:06.140 --> 00:19:08.300
and front end gets a lot more traction

00:19:08.300 --> 00:19:11.040
than like queuing an RPC does.

00:19:11.040 --> 00:19:13.220
But, yeah, I don't know how,

00:19:13.740 --> 00:19:16.280
obviously there were some things I played with back then

00:19:16.280 --> 00:19:16.960
that never took off.

00:19:16.960 --> 00:19:18.500
But, yeah, it was this, like,

00:19:18.500 --> 00:19:20.440
I think having the right time, right place for Titans.

00:19:20.440 --> 00:19:22.420
They'd obviously been around in Titans for a long time,

00:19:22.420 --> 00:19:24.720
but back in 2017 when I started Pydantic,

00:19:24.720 --> 00:19:26.680
their usage was growing really fast.

00:19:26.680 --> 00:19:28.260
And I think there were lots of people like me

00:19:28.260 --> 00:19:29.380
who found it kind of frustrating

00:19:29.380 --> 00:19:30.640
that they were there and didn't do anything.

00:19:30.820 --> 00:19:32.800
So, yeah, I think being the right time,

00:19:32.800 --> 00:19:34.240
right place was super valuable for me.

00:19:34.240 --> 00:19:37.700
And, obviously, like, great projects like FastAPI,

00:19:37.700 --> 00:19:40.860
adopting Pydantic, has made a big difference.

00:19:40.860 --> 00:19:41.560
But I don't know.

00:19:41.560 --> 00:19:43.540
What's weird, if you look at the download chart,

00:19:43.540 --> 00:19:44.920
it's like there was a protection point

00:19:44.920 --> 00:19:46.740
at the beginning of 2021.

00:19:46.740 --> 00:19:49.880
So then we had, like, 5 million downloads a month.

00:19:49.880 --> 00:19:51.240
And since then, there's been kind of

00:19:51.240 --> 00:19:52.840
almost exactly linear growth

00:19:52.840 --> 00:19:55.340
to now 125 million downloads a month.

00:19:55.460 --> 00:19:57.160
So something weird happened in 2021,

00:19:57.160 --> 00:19:59.360
not after the project started, I don't know.

00:19:59.360 --> 00:20:01.220
But, yeah, I think it was right place, right time.

00:20:01.220 --> 00:20:04.140
And that frustration was the starting point.

00:20:04.140 --> 00:20:06.460
On that note, I'm going to have to rush guys a bit.

00:20:06.460 --> 00:20:07.320
It's great to see everyone.

00:20:07.320 --> 00:20:09.440
And I'm sure I'll meet you all in a conference soon.

00:20:09.440 --> 00:20:10.020
Bye-bye.

00:20:10.020 --> 00:20:10.840
Thanks for dropping in.

00:20:10.840 --> 00:20:11.320
Good to see you.

00:20:11.320 --> 00:20:11.740
Bye-bye.

00:20:11.740 --> 00:20:12.220
All right.

00:20:12.220 --> 00:20:14.100
Charlie, keep going around the circle here

00:20:14.100 --> 00:20:15.780
just so I don't...

00:20:15.780 --> 00:20:18.020
Yeah, you know, it's interesting because I,

00:20:18.020 --> 00:20:19.660
like, this is...

00:20:19.660 --> 00:20:23.180
Ruff is really my first time being a maintainer,

00:20:23.180 --> 00:20:25.180
like, publishing open...

00:20:25.180 --> 00:20:27.640
Like, I've been a consumer of open source, right,

00:20:27.640 --> 00:20:28.960
for my whole career,

00:20:28.960 --> 00:20:31.020
but I was never really, I guess,

00:20:31.020 --> 00:20:33.980
a creator or a publisher or a maintainer of open source.

00:20:33.980 --> 00:20:37.160
You know, around the time that I started working on Ruff,

00:20:37.160 --> 00:20:39.000
I was working on, like, a couple different projects.

00:20:39.000 --> 00:20:39.880
And they all...

00:20:39.880 --> 00:20:41.460
I was kind of trying to figure out what I wanted to do next.

00:20:41.460 --> 00:20:42.560
I'd left my job recently.

00:20:42.560 --> 00:20:45.080
And Ruff was kind of motivated by

00:20:45.080 --> 00:20:46.900
a lot of the experiences I had at my job,

00:20:46.900 --> 00:20:48.920
where I was, like, maintaining a large Python code base.

00:20:48.920 --> 00:20:50.060
Did you leave your job

00:20:50.060 --> 00:20:51.820
with the intent of going to work on Ruff?

00:20:51.820 --> 00:20:53.040
Or were you just like, I'm going to leave,

00:20:53.040 --> 00:20:54.540
and then I'm going to figure something out.

00:20:54.900 --> 00:20:57.320
And you're kind of like, well, what is the process there?

00:20:57.320 --> 00:20:59.380
I left my job with the intent of starting a company,

00:20:59.380 --> 00:21:01.660
but I did not think it would be Ruff.

00:21:01.660 --> 00:21:04.260
And Ruff was, like, this distracting side project

00:21:04.260 --> 00:21:06.120
that I was working on while I was, like...

00:21:06.120 --> 00:21:07.060
I was working with a friend,

00:21:07.060 --> 00:21:09.260
and we were, like, trying to figure out, like,

00:21:09.260 --> 00:21:10.960
the Venn diagram of interests,

00:21:10.960 --> 00:21:12.280
of, like, what should we...

00:21:12.280 --> 00:21:14.260
What are we willing to work on full-time together?

00:21:14.260 --> 00:21:16.000
What makes sense, given, like, our interests?

00:21:16.000 --> 00:21:17.880
And then, you know, in all my free time,

00:21:17.880 --> 00:21:20.040
I was like, I just want to work on developer tools.

00:21:20.040 --> 00:21:21.300
And, like, I worked on...

00:21:21.300 --> 00:21:24.060
I built Ruff, or I started building Ruff.

00:21:24.060 --> 00:21:25.680
I worked on, like...

00:21:25.680 --> 00:21:26.840
Yeah, I worked on a lot of different...

00:21:26.840 --> 00:21:28.140
Not a lot, but, like, I did...

00:21:28.140 --> 00:21:29.240
We were working on a couple of different projects.

00:21:29.240 --> 00:21:31.900
I did, like, a sort of CI/CD thing

00:21:31.900 --> 00:21:33.800
where you, like, write Docker files

00:21:33.800 --> 00:21:36.500
and, like, CI files in TypeScript,

00:21:36.500 --> 00:21:37.700
and they, like, transpile down.

00:21:37.700 --> 00:21:40.140
And I was like, oh, I think that has a lot of cool ideas.

00:21:40.140 --> 00:21:41.420
I worked on, like...

00:21:41.420 --> 00:21:44.660
It was pretty early in a lot of the LLM stuff.

00:21:44.660 --> 00:21:47.460
I worked on, like, a code-based-wide refactoring tool

00:21:47.460 --> 00:21:50.000
where you, like, give it examples of, like, before and after,

00:21:50.000 --> 00:21:51.380
and then it tries to find examples.

00:21:51.380 --> 00:21:53.540
It was, like, a co-pilot for your entire code base.

00:21:53.540 --> 00:21:53.980
Kind of...

00:21:53.980 --> 00:21:55.580
It didn't work that well, like, at scale,

00:21:55.580 --> 00:21:56.580
but it was, like, a cool idea.

00:21:56.580 --> 00:21:58.620
So I was, like, working on the stuff that was all open source.

00:21:58.620 --> 00:22:00.460
Maybe it could have been a timing thing.

00:22:00.460 --> 00:22:03.380
Like, maybe today that would be all the business.

00:22:03.380 --> 00:22:05.100
Yeah, I mean, it's also, like, an...

00:22:05.100 --> 00:22:07.100
Yeah, it's also an effort thing, I guess.

00:22:07.100 --> 00:22:09.100
Like, I put a lot more into Ruff.

00:22:09.100 --> 00:22:12.100
And it was interesting because I kept viewing Ruff as, like...

00:22:12.100 --> 00:22:14.580
You know, it was probably open source at that point,

00:22:14.580 --> 00:22:16.420
but I don't think I had launched, like, launched it.

00:22:16.420 --> 00:22:18.260
And I kept viewing it as, like...

00:22:18.260 --> 00:22:19.760
Like I said, like, a little bit of a distraction.

00:22:19.760 --> 00:22:21.300
And my friend was, like...

00:22:21.300 --> 00:22:23.360
You know, I think you should really, like, push to, like,

00:22:23.360 --> 00:22:26.120
release this because, like, if you think it's, like, interesting,

00:22:26.120 --> 00:22:28.440
then, like, other people will probably think it's interesting.

00:22:28.440 --> 00:22:30.040
And he was the person that really, like,

00:22:30.040 --> 00:22:32.260
motivated me to actually, like, see it through

00:22:32.260 --> 00:22:33.400
to doing the release.

00:22:33.400 --> 00:22:35.760
And then I did the release and, like, a lot of people

00:22:35.760 --> 00:22:37.960
were actually interested in it.

00:22:37.960 --> 00:22:40.200
So that kind of gave me, like, the energy to, like,

00:22:40.200 --> 00:22:41.380
really start working on it full-time

00:22:41.380 --> 00:22:43.080
and just kind of see where it went.

00:22:43.080 --> 00:22:45.160
And it was really, like, projects like Pynantic

00:22:45.160 --> 00:22:48.500
and, like, Sebastian started, like, commenting on issues and stuff.

00:22:48.500 --> 00:22:51.200
And I was like, wow, like, real serious projects

00:22:51.200 --> 00:22:52.720
are looking at this, like, crazy tool.

00:22:52.720 --> 00:22:54.160
And let me just see.

00:22:54.160 --> 00:22:55.380
I'm just going to do whatever it takes

00:22:55.380 --> 00:22:56.900
to make it, like, a feasible choice

00:22:56.900 --> 00:22:59.220
and just started, like, cranking through, like,

00:22:59.220 --> 00:23:00.980
all the issues and all the things that we were missing.

00:23:00.980 --> 00:23:03.440
It escalated pretty quickly, I think.

00:23:03.440 --> 00:23:04.320
Did it surprise you?

00:23:04.320 --> 00:23:04.880
Oh, yes.

00:23:04.880 --> 00:23:05.440
Yes.

00:23:05.860 --> 00:23:06.180
Absolutely.

00:23:06.180 --> 00:23:11.040
I was convinced that I had faced, like, this problem around tooling

00:23:11.040 --> 00:23:13.420
as, like, our code base got large in my last company

00:23:13.420 --> 00:23:16.160
and that there was an opportunity to, like, build, like,

00:23:16.160 --> 00:23:17.900
better, more performant tooling.

00:23:17.900 --> 00:23:20.740
I genuinely wasn't sure, like, how widely that message

00:23:20.740 --> 00:23:21.820
would resonate with people.

00:23:21.820 --> 00:23:24.420
And so, I don't know, it's like a little bit of luck, right?

00:23:24.420 --> 00:23:25.980
Like, sometimes you work on great projects

00:23:25.980 --> 00:23:27.400
and then, like, they go nowhere

00:23:27.400 --> 00:23:29.660
and, like, just no one happens to see it.

00:23:29.660 --> 00:23:31.040
And then sometimes you work on a good thing

00:23:31.040 --> 00:23:32.020
and, like, it does go somewhere.

00:23:32.200 --> 00:23:34.100
And so, there are certain things that are within your control,

00:23:34.100 --> 00:23:35.000
certain things that aren't.

00:23:35.000 --> 00:23:39.080
I feel like I did a good job of, like, communicating the project

00:23:39.080 --> 00:23:40.920
and, like, why it was interesting and why it was exciting.

00:23:40.920 --> 00:23:42.620
But I also feel like I got a little bit lucky

00:23:42.620 --> 00:23:44.720
that it just, like, gravitated towards the right people

00:23:44.720 --> 00:23:46.420
and got attention in the right ways.

00:23:46.420 --> 00:23:46.800
Sure.

00:23:46.800 --> 00:23:49.340
Also, maybe that Black had existed,

00:23:49.340 --> 00:23:50.440
which is a little ironic

00:23:50.440 --> 00:23:52.300
because Black kind of solves a real similar problem.

00:23:52.300 --> 00:23:53.400
But, like, people were,

00:23:53.400 --> 00:23:57.380
okay, we embrace the idea of the thing that Ruff does really well.

00:23:57.380 --> 00:23:59.960
You know, you just convince them to use Ruff in that sense.

00:23:59.960 --> 00:24:00.280
Yeah.

00:24:00.280 --> 00:24:01.480
I mean, we have a little bit,

00:24:01.620 --> 00:24:02.680
I mean, it gets back to this.

00:24:02.680 --> 00:24:03.960
Like, we have a little bit of, like,

00:24:03.960 --> 00:24:06.480
a second mover advantage, right?

00:24:06.480 --> 00:24:07.240
Yes, exactly.

00:24:07.240 --> 00:24:09.780
There's a lot of existing tools that people use already

00:24:09.780 --> 00:24:11.300
and, like, a lot of those practices,

00:24:11.300 --> 00:24:12.840
like, the idea of using a format

00:24:12.840 --> 00:24:14.620
or the idea of running code mods,

00:24:14.620 --> 00:24:16.040
like, the idea of using a linter

00:24:16.040 --> 00:24:17.700
and, like, the knowledge of, like,

00:24:17.700 --> 00:24:19.440
what kinds of rules are valuable

00:24:19.440 --> 00:24:21.820
and, like, what kinds of analysis we can do.

00:24:21.820 --> 00:24:23.480
Like, all this stuff existed.

00:24:23.480 --> 00:24:25.860
And that was part of the story, really,

00:24:25.860 --> 00:24:27.200
was I was, like, these tools are great

00:24:27.200 --> 00:24:28.720
and I get a lot of value out of them,

00:24:28.780 --> 00:24:31.200
but I want them to be, like, easier and faster.

00:24:31.200 --> 00:24:34.360
And so, yeah, there's definitely a strong timing thing.

00:24:34.360 --> 00:24:36.440
I think, like, I think Rust, too,

00:24:36.440 --> 00:24:38.540
this is maybe, like, a little bit more specific to what we're doing.

00:24:38.540 --> 00:24:40.040
But, like, you know, I think, like,

00:24:40.040 --> 00:24:42.680
the intersection between Python and Rust has,

00:24:42.680 --> 00:24:45.900
or the, I guess, the interoperability between them

00:24:45.900 --> 00:24:48.420
and sort of the ecosystem around it has just grown a lot.

00:24:48.420 --> 00:24:50.420
I mean, still, I would say, like, pretty early,

00:24:50.420 --> 00:24:53.160
but it's, like, matured and grown a lot over the past few years.

00:24:53.160 --> 00:24:56.000
And so even just the fact that, like, at my last company,

00:24:56.000 --> 00:24:57.340
we started to introduce Rust

00:24:57.340 --> 00:25:00.280
and we started to, like, move some of our core systems into Rust

00:25:00.280 --> 00:25:02.440
and expose them over PyO3.

00:25:02.440 --> 00:25:04.080
Like, the fact that that existed

00:25:04.080 --> 00:25:05.900
and the fact that I was, like, exposed to that,

00:25:05.900 --> 00:25:07.560
like, that's all just, like, pure chance.

00:25:07.600 --> 00:25:09.180
Otherwise, I never would have thought to do this.

00:25:09.180 --> 00:25:10.540
Very cool. Well, congrats.

00:25:10.540 --> 00:25:11.620
Well-deserved.

00:25:11.620 --> 00:25:15.060
We're all doing the, all using Ruff, as we said, is excellent.

00:25:15.060 --> 00:25:16.780
Will, Rich is awesome.

00:25:16.780 --> 00:25:18.540
How, why do you think it took off?

00:25:18.540 --> 00:25:19.780
Did you try stuff before?

00:25:19.780 --> 00:25:20.880
What's the story?

00:25:20.880 --> 00:25:23.420
I tried a lot of stuff before, before GitHub.

00:25:23.420 --> 00:25:25.680
You know, coding has always been my hobby.

00:25:25.680 --> 00:25:26.960
You know, I'd do it for work

00:25:26.960 --> 00:25:29.360
and I'd come home and work on a hobby project.

00:25:29.360 --> 00:25:31.240
And it just seemed natural to want to share it.

00:25:31.240 --> 00:25:33.960
Pre-GitHub, I would just put stuff on my blog

00:25:33.960 --> 00:25:35.960
and get some feedback from it there.

00:25:35.960 --> 00:25:36.860
I quite enjoyed that.

00:25:37.140 --> 00:25:39.300
And yeah, I have a number of open source projects.

00:25:39.300 --> 00:25:42.980
Pre-Rich had a BB code parsing library.

00:25:42.980 --> 00:25:44.660
I had a chess library.

00:25:44.660 --> 00:25:46.880
I had a web toolkit.

00:25:46.880 --> 00:25:48.500
So yeah, when Rich came along,

00:25:48.500 --> 00:25:49.900
it was another hobby project,

00:25:49.900 --> 00:25:51.440
something to keep me entertained.

00:25:51.440 --> 00:25:53.220
Why is this terminal so boring?

00:25:53.220 --> 00:25:54.660
Come on, see what we can do about that.

00:25:54.660 --> 00:25:55.940
You know, I'd always use the terminal

00:25:55.940 --> 00:25:56.860
and I'd always struggled

00:25:56.860 --> 00:25:58.940
when you've got a page of white text

00:25:58.940 --> 00:26:00.180
on black background

00:26:00.180 --> 00:26:03.080
and you're trying to pick out an IP address from somewhere.

00:26:03.880 --> 00:26:05.060
And, you know, I'd always wished,

00:26:05.060 --> 00:26:08.000
oh, I wish it would just format it and colorize it for me.

00:26:08.000 --> 00:26:09.620
I know this is possible, but it doesn't happen.

00:26:10.160 --> 00:26:12.400
So then, yeah, I just, I started it

00:26:12.400 --> 00:26:14.180
and it came together quite well.

00:26:14.180 --> 00:26:16.160
When I released it, it was like, boom,

00:26:16.160 --> 00:26:19.140
the stars just started accumulating.

00:26:19.140 --> 00:26:20.540
Got lots of feedback.

00:26:20.540 --> 00:26:21.700
It was very exciting.

00:26:21.700 --> 00:26:23.800
And I kept building on it.

00:26:23.800 --> 00:26:25.980
It was kind of like issue-driven development.

00:26:26.120 --> 00:26:27.740
So people would just ask for something.

00:26:27.740 --> 00:26:28.800
Oh, that's a good idea.

00:26:28.800 --> 00:26:31.240
And go ahead and implement it.

00:26:31.240 --> 00:26:33.040
And it grew from there

00:26:33.040 --> 00:26:34.300
and it became really large.

00:26:34.300 --> 00:26:36.740
I did actually, prior to Rich,

00:26:36.740 --> 00:26:38.220
I had a library called PyFileSystem.

00:26:38.220 --> 00:26:41.380
And this is kind of like a wrapper to file systems.

00:26:41.380 --> 00:26:43.040
So you can have the same interface

00:26:43.040 --> 00:26:45.240
for your FTP server as a hard drive

00:26:45.240 --> 00:26:46.920
for a zip file, S3 bucket.

00:26:47.580 --> 00:26:50.380
And that got some use in the community.

00:26:50.380 --> 00:26:51.480
It wasn't enormous.

00:26:51.480 --> 00:26:54.980
But that taught me a lot about building open source,

00:26:54.980 --> 00:26:58.640
you know, managing feedback issues, et cetera.

00:26:58.640 --> 00:27:00.100
So that was a great experience

00:27:00.100 --> 00:27:02.120
when I started working on Rich.

00:27:02.120 --> 00:27:04.440
And I was very surprised, actually,

00:27:04.440 --> 00:27:05.760
how successful it became.

00:27:05.760 --> 00:27:07.380
I remember the first time I realized

00:27:07.380 --> 00:27:10.100
that this was bigger than just a hobby project

00:27:10.100 --> 00:27:13.160
is when someone told me off for violating Semver,

00:27:13.160 --> 00:27:16.480
I released a clear, a clear breaking change

00:27:16.480 --> 00:27:18.360
because I thought, nobody's using that yet.

00:27:18.360 --> 00:27:19.340
But they were.

00:27:19.340 --> 00:27:23.000
So the next day I got told off quite appropriately.

00:27:23.000 --> 00:27:24.280
And then I thought, okay,

00:27:24.280 --> 00:27:25.700
I'll have to take this more seriously.

00:27:25.700 --> 00:27:28.160
If people are using this in their day job,

00:27:28.160 --> 00:27:29.740
they can't just have someone

00:27:29.740 --> 00:27:32.080
who's just like throwing new bits of code

00:27:32.080 --> 00:27:33.100
and changing functionality.

00:27:33.100 --> 00:27:37.720
They had to treat it like it was an actual my day job.

00:27:37.720 --> 00:27:39.440
Yeah, well, everyone on the call here

00:27:39.440 --> 00:27:42.460
probably has a little bit of nervousness about like,

00:27:42.460 --> 00:27:43.820
if I break this,

00:27:43.820 --> 00:27:46.060
there are a lot of people that depend on this thing.

00:27:46.320 --> 00:27:47.340
And it's so different.

00:27:47.340 --> 00:27:48.720
It just changes so much.

00:27:48.720 --> 00:27:50.380
When you were talking about

00:27:50.380 --> 00:27:51.900
the issue-driven development thing too,

00:27:51.900 --> 00:27:54.940
I just remember that phase of Ruff

00:27:54.940 --> 00:27:55.620
where it was like,

00:27:55.620 --> 00:27:57.500
anyone who cared all about the project,

00:27:57.500 --> 00:27:59.620
all I wanted to do was make them happy.

00:27:59.620 --> 00:28:01.300
And I was like, oh, wow,

00:28:01.300 --> 00:28:02.840
that seems like a cool idea.

00:28:02.840 --> 00:28:03.980
Let's definitely do it.

00:28:03.980 --> 00:28:04.760
And I was just like,

00:28:04.760 --> 00:28:06.020
it was the point in time

00:28:06.020 --> 00:28:07.480
where I could fix the bug,

00:28:07.480 --> 00:28:09.000
cut a release the same day,

00:28:09.000 --> 00:28:10.700
and then their thing is fixed.

00:28:10.700 --> 00:28:11.920
And then it's like, okay, great.

00:28:11.920 --> 00:28:12.940
Now we have a relationship.

00:28:12.940 --> 00:28:14.300
Thanks for using my thing.

00:28:14.540 --> 00:28:16.060
I just think like,

00:28:16.060 --> 00:28:17.680
but that's changed so much.

00:28:17.680 --> 00:28:18.020
Right?

00:28:18.020 --> 00:28:18.780
Because then I went through

00:28:18.780 --> 00:28:20.120
the same experiences of like,

00:28:20.120 --> 00:28:22.220
I ship a release with a breaking change

00:28:22.220 --> 00:28:23.020
that I didn't really document.

00:28:23.020 --> 00:28:24.120
A lot of people get upset.

00:28:24.120 --> 00:28:25.000
And then you realize,

00:28:25.000 --> 00:28:26.540
okay, I actually have some

00:28:26.540 --> 00:28:28.140
more responsibility now.

00:28:28.260 --> 00:28:28.860
Yeah, these days,

00:28:28.860 --> 00:28:30.940
it's more like trying to find the balance

00:28:30.940 --> 00:28:33.000
between saying no to stuff

00:28:33.000 --> 00:28:35.520
that you then have to end up maintaining

00:28:35.520 --> 00:28:38.260
and not like disappointing people too much

00:28:38.260 --> 00:28:40.680
because you say no or things like that.

00:28:40.680 --> 00:28:44.300
And then trying to keep this whole interaction

00:28:44.300 --> 00:28:45.260
with people nice,

00:28:45.260 --> 00:28:47.840
even though you don't want to do stuff

00:28:47.840 --> 00:28:49.320
that they want you to do

00:28:49.320 --> 00:28:50.940
because you know it's better for the project.

00:28:53.420 --> 00:28:55.120
This portion of Talk Python To Me

00:28:55.120 --> 00:28:56.340
is brought to you by Sentry.

00:28:56.340 --> 00:28:58.660
You know Sentry for the air monitoring service,

00:28:58.660 --> 00:29:00.360
the one that we use right here at Talk Python.

00:29:00.360 --> 00:29:01.580
But this time,

00:29:01.580 --> 00:29:04.120
I want to tell you about a new and free workshop.

00:29:04.120 --> 00:29:05.700
Heaming the Kraken,

00:29:05.700 --> 00:29:08.500
managing a Python monorepo with Sentry.

00:29:08.500 --> 00:29:10.780
Join Salma Alam Nayour,

00:29:10.780 --> 00:29:12.960
senior developer advocate at Sentry,

00:29:12.960 --> 00:29:14.160
and David Winterbottom,

00:29:14.160 --> 00:29:16.160
head of engineering at Kraken Technologies,

00:29:16.160 --> 00:29:17.860
for an inside look

00:29:17.860 --> 00:29:19.840
into how he and his team develop,

00:29:20.140 --> 00:29:22.860
deploy and maintain a rapidly evolving

00:29:22.860 --> 00:29:23.780
Python monorepo

00:29:23.780 --> 00:29:26.080
with over 4 million lines of code

00:29:26.080 --> 00:29:28.440
that powers the Kraken utility platform.

00:29:28.440 --> 00:29:30.060
In this workshop,

00:29:30.060 --> 00:29:32.600
David will share how his department of 500 developers,

00:29:32.600 --> 00:29:35.720
who deploy around 200 times a day,

00:29:35.720 --> 00:29:37.480
use Sentry to reduce noise,

00:29:37.480 --> 00:29:38.500
prioritize issues,

00:29:38.500 --> 00:29:39.700
and maintain code quality

00:29:39.700 --> 00:29:42.280
without relying on a dedicated Q&A team.

00:29:42.280 --> 00:29:44.160
You'll learn how to find and fix

00:29:44.160 --> 00:29:45.400
root causes of crashes,

00:29:45.400 --> 00:29:48.640
ways to prioritize the most urgent crashes and errors,

00:29:49.060 --> 00:29:50.680
and tips to streamline your workflow.

00:29:50.680 --> 00:29:52.460
Join them for free on Tuesday,

00:29:52.460 --> 00:29:54.400
February 27th, 2024,

00:29:54.400 --> 00:29:56.560
at 2 a.m. Pacific time.

00:29:56.560 --> 00:29:58.780
Just visit talkpython.fm

00:29:58.780 --> 00:30:01.020
slash sentry-monorepo.

00:30:01.020 --> 00:30:03.200
That link is in your podcast player show notes.

00:30:03.200 --> 00:30:06.340
2 a.m. might be a little early here in the U.S.,

00:30:06.340 --> 00:30:07.560
but go ahead and sign up anyway

00:30:07.560 --> 00:30:08.560
if you're a U.S. listener,

00:30:08.560 --> 00:30:10.360
because I'm sure they'll email you

00:30:10.360 --> 00:30:12.760
about a follow-up recording as well.

00:30:12.760 --> 00:30:15.680
Thank you to Sentry for supporting this episode.

00:30:18.220 --> 00:30:20.500
PRs are like cake or puppies.

00:30:20.500 --> 00:30:22.160
If it's a simple bug fix,

00:30:22.160 --> 00:30:22.880
that's like cake.

00:30:22.880 --> 00:30:23.720
You'd like, thank you.

00:30:23.720 --> 00:30:25.340
I enjoyed that cake.

00:30:25.340 --> 00:30:26.140
Then move on.

00:30:26.140 --> 00:30:27.700
But some PRs are like a puppy.

00:30:27.700 --> 00:30:29.040
It's like terrific.

00:30:29.040 --> 00:30:29.900
You like puppies,

00:30:29.900 --> 00:30:31.160
but you've got to feed them

00:30:31.160 --> 00:30:32.520
and clean up after them.

00:30:32.520 --> 00:30:33.860
Why am I standing in the rain

00:30:33.860 --> 00:30:35.940
with this puppy on like a Friday night?

00:30:35.940 --> 00:30:36.680
How do I get here?

00:30:36.680 --> 00:30:38.080
Collecting the book is poop.

00:30:38.080 --> 00:30:39.000
Yes, exactly.

00:30:39.000 --> 00:30:40.440
Sometimes you say thank you,

00:30:40.440 --> 00:30:41.460
but I just can't,

00:30:41.460 --> 00:30:43.300
I just can't look after another puppy right now.

00:30:43.300 --> 00:30:45.160
That's a difficult thing to come to terms

00:30:45.160 --> 00:30:46.800
when the project gets a bit more mature.

00:30:46.800 --> 00:30:47.580
Because previously,

00:30:47.580 --> 00:30:48.720
you're accepting all the puppies,

00:30:48.720 --> 00:30:50.320
but then you have to start saying no,

00:30:50.320 --> 00:30:51.360
no to puppies.

00:30:51.360 --> 00:30:53.620
And Rich definitely got there

00:30:53.620 --> 00:30:54.520
because it accumulated.

00:30:54.520 --> 00:30:55.400
Do you hate puppies?

00:30:55.400 --> 00:30:55.780
Come on,

00:30:55.780 --> 00:30:56.840
that's a pretty hard stance.

00:30:56.840 --> 00:30:58.300
I'm kind of a cat person,

00:30:58.300 --> 00:30:59.000
to be honest with you.

00:30:59.000 --> 00:31:00.460
But yeah,

00:31:00.460 --> 00:31:00.800
I mean,

00:31:00.800 --> 00:31:01.800
you have to say no.

00:31:01.800 --> 00:31:02.060
Unacceptable.

00:31:02.060 --> 00:31:03.080
Eventually, yeah.

00:31:03.360 --> 00:31:05.100
I think this is where plugins

00:31:05.100 --> 00:31:06.300
always kind of like

00:31:06.300 --> 00:31:07.840
take the center stage, right?

00:31:07.840 --> 00:31:08.140
You're like,

00:31:08.140 --> 00:31:08.280
just,

00:31:08.280 --> 00:31:08.420
oh,

00:31:08.420 --> 00:31:09.440
that sounds like a great idea

00:31:09.440 --> 00:31:10.220
for you to maintain

00:31:10.220 --> 00:31:11.420
external to my library.

00:31:11.420 --> 00:31:13.560
That was exactly my approach

00:31:13.560 --> 00:31:14.640
to the whole situation.

00:31:14.640 --> 00:31:14.920
Yep.

00:31:14.920 --> 00:31:16.340
Here's a plugin API.

00:31:16.340 --> 00:31:16.940
Have fun.

00:31:16.940 --> 00:31:18.580
But also the probability

00:31:18.580 --> 00:31:20.300
of some little change

00:31:20.300 --> 00:31:22.080
breaking someone's code

00:31:22.080 --> 00:31:23.580
and like being considered

00:31:23.580 --> 00:31:24.680
a breaking change

00:31:24.680 --> 00:31:25.480
grows

00:31:25.480 --> 00:31:27.000
as the project grows

00:31:27.000 --> 00:31:27.800
in usage.

00:31:27.800 --> 00:31:28.240
And like,

00:31:28.240 --> 00:31:28.600
you know,

00:31:28.600 --> 00:31:29.720
like at some point

00:31:29.720 --> 00:31:30.600
it's like almost

00:31:30.600 --> 00:31:31.640
any change

00:31:31.640 --> 00:31:32.100
will end up

00:31:32.100 --> 00:31:32.940
breaking someone

00:31:32.940 --> 00:31:35.140
in very unexpected ways

00:31:35.140 --> 00:31:35.940
because they are doing

00:31:35.940 --> 00:31:36.860
something really,

00:31:36.860 --> 00:31:37.500
really weird.

00:31:37.500 --> 00:31:37.980
But you know,

00:31:37.980 --> 00:31:39.220
like someone is doing it.

00:31:39.220 --> 00:31:40.960
So like it becomes

00:31:40.960 --> 00:31:42.280
more and more difficult

00:31:42.280 --> 00:31:42.960
to know like,

00:31:42.960 --> 00:31:44.540
is this a breaking change

00:31:44.540 --> 00:31:45.040
or not?

00:31:45.040 --> 00:31:46.880
Like no one should be using

00:31:46.880 --> 00:31:48.260
this variable here

00:31:48.260 --> 00:31:48.900
or this parameter,

00:31:48.900 --> 00:31:49.360
but like,

00:31:49.360 --> 00:31:49.720
you know,

00:31:49.720 --> 00:31:50.760
there's someone out there

00:31:50.760 --> 00:31:51.160
doing that.

00:31:51.160 --> 00:31:52.840
So I feel defining

00:31:52.840 --> 00:31:53.780
what is actually

00:31:53.780 --> 00:31:54.520
a breaking change

00:31:54.520 --> 00:31:55.060
and what is,

00:31:55.060 --> 00:31:56.920
what is this trick

00:31:56.920 --> 00:31:57.360
somewhere

00:31:57.360 --> 00:31:59.160
gets more difficult

00:31:59.160 --> 00:32:00.240
as things grow.

00:32:00.540 --> 00:32:00.680
Yeah,

00:32:00.680 --> 00:32:01.060
I don't know.

00:32:01.060 --> 00:32:01.840
One of the things

00:32:01.840 --> 00:32:02.600
I like that the Django

00:32:02.600 --> 00:32:03.280
project did

00:32:03.280 --> 00:32:04.120
was kind of basically

00:32:04.120 --> 00:32:04.920
only things that are

00:32:04.920 --> 00:32:06.540
documented are supported.

00:32:06.540 --> 00:32:07.020
Basically,

00:32:07.020 --> 00:32:07.600
that was kind of

00:32:07.600 --> 00:32:08.280
the line they drew

00:32:08.280 --> 00:32:08.620
and I thought

00:32:08.620 --> 00:32:09.380
that was a pretty good,

00:32:09.380 --> 00:32:10.140
pretty good way

00:32:10.140 --> 00:32:10.860
to draw it.

00:32:10.860 --> 00:32:11.080
But yeah,

00:32:11.080 --> 00:32:11.480
you're always,

00:32:11.480 --> 00:32:11.840
you know,

00:32:11.840 --> 00:32:12.660
that never actually works.

00:32:12.660 --> 00:32:13.080
That doesn't make

00:32:13.080 --> 00:32:13.580
people happy.

00:32:13.580 --> 00:32:14.500
It just gives you

00:32:14.500 --> 00:32:15.700
plausible deniability.

00:32:15.700 --> 00:32:17.740
Don't yell at me.

00:32:17.740 --> 00:32:18.740
It's not my fault.

00:32:18.740 --> 00:32:20.200
I think adding a formal

00:32:20.200 --> 00:32:21.380
like versioning policy

00:32:21.380 --> 00:32:22.260
is one of the best

00:32:22.260 --> 00:32:23.280
things that we did

00:32:23.280 --> 00:32:24.580
because for a long time

00:32:24.580 --> 00:32:25.700
rough was just

00:32:25.700 --> 00:32:26.980
we only used patch releases.

00:32:26.980 --> 00:32:28.040
So we got to like

00:32:28.040 --> 00:32:28.320
zero,

00:32:28.320 --> 00:32:28.680
zero,

00:32:28.680 --> 00:32:29.720
like 285

00:32:29.720 --> 00:32:30.340
or something.

00:32:30.340 --> 00:32:31.760
And we had basically

00:32:31.760 --> 00:32:32.840
no guarantees

00:32:32.840 --> 00:32:33.740
about what would

00:32:33.740 --> 00:32:34.480
or wouldn't change

00:32:34.480 --> 00:32:35.420
like across releases.

00:32:35.420 --> 00:32:36.940
And as the project

00:32:36.940 --> 00:32:38.480
got more and more popular,

00:32:38.480 --> 00:32:39.100
like that started

00:32:39.100 --> 00:32:40.360
to cause more and more problems.

00:32:40.360 --> 00:32:41.520
And so Zany,

00:32:41.520 --> 00:32:42.320
someone on our team,

00:32:42.320 --> 00:32:43.020
like when they joined,

00:32:43.020 --> 00:32:43.860
one of the first few things

00:32:43.860 --> 00:32:44.400
they did was like

00:32:44.400 --> 00:32:44.940
create an actual

00:32:44.940 --> 00:32:46.620
formal versioning policy

00:32:46.620 --> 00:32:47.540
and we added like

00:32:47.540 --> 00:32:48.560
preview behavior.

00:32:48.560 --> 00:32:49.780
So like you can opt

00:32:49.780 --> 00:32:50.760
similar to what block

00:32:50.760 --> 00:32:51.840
has kind of opt in

00:32:51.840 --> 00:32:52.820
to like breaking

00:32:52.820 --> 00:32:54.400
or more experimental changes.

00:32:54.400 --> 00:32:55.300
and so now we have

00:32:55.300 --> 00:32:56.180
like clear expectations

00:32:56.180 --> 00:32:56.900
around what it means

00:32:56.900 --> 00:32:58.180
to like bump a minor release,

00:32:58.180 --> 00:32:58.960
et cetera, et cetera.

00:32:58.960 --> 00:33:00.160
And like that has made

00:33:00.160 --> 00:33:01.440
our lives a lot easier,

00:33:01.440 --> 00:33:02.680
like actually having

00:33:02.680 --> 00:33:03.460
clear expectations

00:33:03.460 --> 00:33:03.940
around that

00:33:03.940 --> 00:33:04.660
that are communicated

00:33:04.660 --> 00:33:05.200
and respected.

00:33:05.200 --> 00:33:06.240
But it's the kind of thing

00:33:06.240 --> 00:33:07.060
that you just don't think

00:33:07.060 --> 00:33:07.480
about at all

00:33:07.480 --> 00:33:08.780
until at least I didn't.

00:33:08.780 --> 00:33:10.300
Until I checked on figure.

00:33:10.300 --> 00:33:11.180
Yeah.

00:33:11.180 --> 00:33:12.220
Some people's code

00:33:12.220 --> 00:33:14.100
runs things like

00:33:14.100 --> 00:33:15.340
FastAPI

00:33:15.340 --> 00:33:16.240
or Octoprint

00:33:16.240 --> 00:33:16.900
or whatever.

00:33:16.900 --> 00:33:18.300
Your stuff

00:33:18.300 --> 00:33:19.700
rewrites people's code.

00:33:20.640 --> 00:33:21.260
Yeah, but at least

00:33:21.260 --> 00:33:22.120
it doesn't run at runtime.

00:33:22.120 --> 00:33:22.760
I don't know.

00:33:22.760 --> 00:33:23.700
I actually think it's easier.

00:33:23.700 --> 00:33:25.300
Yeah.

00:33:25.300 --> 00:33:26.300
Indeed.

00:33:26.300 --> 00:33:26.620
All right.

00:33:26.620 --> 00:33:27.740
I find you talk about

00:33:27.740 --> 00:33:28.420
the plugins thing

00:33:28.420 --> 00:33:29.560
because like I've actually

00:33:29.560 --> 00:33:30.260
very intentionally

00:33:30.260 --> 00:33:31.500
taken the opposite approach,

00:33:31.500 --> 00:33:32.220
which is we have like

00:33:32.220 --> 00:33:33.560
almost no public API

00:33:33.560 --> 00:33:35.440
because like the only

00:33:35.440 --> 00:33:36.600
public API is the CLI

00:33:36.600 --> 00:33:38.320
and like we don't expose

00:33:38.320 --> 00:33:39.860
our API in any other way.

00:33:39.860 --> 00:33:41.060
And that's because like

00:33:41.060 --> 00:33:42.040
we know we're going to change

00:33:42.040 --> 00:33:43.500
like everything internally,

00:33:43.500 --> 00:33:44.560
like pretty dramatically.

00:33:44.560 --> 00:33:45.520
And so we wanted to have

00:33:45.520 --> 00:33:46.740
like full control over that

00:33:46.740 --> 00:33:47.600
without having to worry

00:33:47.600 --> 00:33:48.880
about breaking people's stuff yet.

00:33:48.880 --> 00:33:50.040
But it's like it's starting

00:33:50.040 --> 00:33:50.920
to become more of a problem

00:33:50.920 --> 00:33:51.860
because more and more people

00:33:51.860 --> 00:33:53.000
want to use it as a library

00:33:53.000 --> 00:33:53.920
in like different ways.

00:33:53.920 --> 00:33:55.360
But it's sort of

00:33:55.360 --> 00:33:56.240
a counterintuitive way

00:33:56.240 --> 00:33:57.420
to like make our lives

00:33:57.420 --> 00:33:58.560
easier as maintainers

00:33:58.560 --> 00:33:59.580
was like not expose

00:33:59.580 --> 00:34:00.580
any public API

00:34:00.580 --> 00:34:01.720
apart from the CLI.

00:34:01.720 --> 00:34:02.620
Yeah, very interesting.

00:34:02.620 --> 00:34:03.300
That's a funny,

00:34:03.300 --> 00:34:05.160
funny sort of anecdote.

00:34:05.160 --> 00:34:07.280
I'm rewriting a lot

00:34:07.280 --> 00:34:07.960
of the documentation

00:34:07.960 --> 00:34:08.940
for SQL model

00:34:08.940 --> 00:34:10.800
because I want to have examples.

00:34:10.800 --> 00:34:12.220
Right now I have examples

00:34:12.220 --> 00:34:12.760
that are compatible

00:34:12.760 --> 00:34:14.300
with Python 3.7 and above,

00:34:14.300 --> 00:34:15.720
but actually 3.6 and above.

00:34:15.720 --> 00:34:16.800
But I want to have

00:34:16.800 --> 00:34:17.960
also the syntax

00:34:17.960 --> 00:34:19.740
for 3.9 and 3.10.

00:34:19.920 --> 00:34:20.400
3.10,

00:34:20.400 --> 00:34:21.040
you can have like

00:34:21.040 --> 00:34:22.200
the unions using

00:34:22.200 --> 00:34:23.240
the vertical bar

00:34:23.240 --> 00:34:23.680
and these things.

00:34:23.680 --> 00:34:24.540
And I want to have examples

00:34:24.540 --> 00:34:25.280
for each one of those.

00:34:25.280 --> 00:34:26.620
So the approach I did

00:34:26.620 --> 00:34:27.780
was to write a script

00:34:27.780 --> 00:34:28.780
that will automatically

00:34:28.780 --> 00:34:30.540
update each one of the files

00:34:30.540 --> 00:34:31.620
by calling rough

00:34:31.620 --> 00:34:32.840
as a soup process.

00:34:32.840 --> 00:34:33.980
So that's the API.

00:34:33.980 --> 00:34:35.180
And then like,

00:34:35.180 --> 00:34:35.360
you know,

00:34:35.360 --> 00:34:35.780
like I mean,

00:34:35.780 --> 00:34:36.420
the process is like

00:34:36.420 --> 00:34:37.160
doing all that stuff.

00:34:37.160 --> 00:34:37.680
But like, yeah,

00:34:37.680 --> 00:34:40.000
it's like another fanboy

00:34:40.000 --> 00:34:41.640
of trying to

00:34:41.640 --> 00:34:44.000
use it as an API

00:34:44.000 --> 00:34:45.460
before it's available.

00:34:45.580 --> 00:34:45.680
Yeah,

00:34:45.680 --> 00:34:46.820
with lack of an API,

00:34:46.820 --> 00:34:47.280
right?

00:34:47.280 --> 00:34:48.640
An API will be created.

00:34:48.640 --> 00:34:49.640
Exactly.

00:34:49.640 --> 00:34:50.580
I've heard this before

00:34:50.580 --> 00:34:51.840
as like Hiram's law,

00:34:51.840 --> 00:34:52.800
which is like

00:34:52.800 --> 00:34:53.660
with a sufficiently

00:34:53.660 --> 00:34:54.640
large number of users,

00:34:54.640 --> 00:34:56.760
like any implementation detail

00:34:56.760 --> 00:34:58.020
become someone

00:34:58.020 --> 00:34:58.940
will eventually rely

00:34:58.940 --> 00:35:00.080
on an implementation detail.

00:35:00.080 --> 00:35:01.600
Like any arbitrary implementation

00:35:01.600 --> 00:35:01.960
to someone

00:35:01.960 --> 00:35:02.680
is probably relying

00:35:02.680 --> 00:35:03.300
on that behavior,

00:35:03.300 --> 00:35:04.040
which is basically

00:35:04.040 --> 00:35:05.060
the behavior of the program

00:35:05.060 --> 00:35:05.840
is the API.

00:35:05.840 --> 00:35:06.960
And unfortunately,

00:35:07.300 --> 00:35:08.200
they'll find the underscore

00:35:08.200 --> 00:35:08.820
functions.

00:35:08.820 --> 00:35:10.480
You've tried to dissuade them

00:35:10.480 --> 00:35:10.980
from using

00:35:10.980 --> 00:35:11.960
and all the things,

00:35:11.960 --> 00:35:12.260
you know,

00:35:12.260 --> 00:35:12.800
Eric,

00:35:12.800 --> 00:35:14.840
what's the origin story

00:35:14.840 --> 00:35:15.640
for Read the Docs

00:35:15.640 --> 00:35:16.680
and what did you try

00:35:16.680 --> 00:35:17.200
and how do you think

00:35:17.200 --> 00:35:17.820
it caught on?

00:35:17.820 --> 00:35:18.140
Yeah,

00:35:18.140 --> 00:35:19.140
so I mean,

00:35:19.140 --> 00:35:19.980
this was kind of

00:35:19.980 --> 00:35:21.000
way back in the day,

00:35:21.000 --> 00:35:21.260
but yeah,

00:35:21.260 --> 00:35:21.940
I kind of got started

00:35:21.940 --> 00:35:23.440
writing Django plugins,

00:35:23.440 --> 00:35:24.000
you know,

00:35:24.000 --> 00:35:25.360
apropos to the conversation.

00:35:25.360 --> 00:35:26.200
You know,

00:35:26.200 --> 00:35:27.400
I was working at

00:35:27.400 --> 00:35:28.760
the Lawrence Journal world

00:35:28.760 --> 00:35:30.120
where Django came from

00:35:30.120 --> 00:35:30.580
and it was kind of

00:35:30.580 --> 00:35:31.300
early in my career

00:35:31.300 --> 00:35:31.980
and I was just kind of

00:35:31.980 --> 00:35:32.440
getting excited

00:35:32.440 --> 00:35:32.940
about open source

00:35:32.940 --> 00:35:33.500
and blogging

00:35:33.500 --> 00:35:34.580
and just basically

00:35:34.580 --> 00:35:35.660
built a few of these

00:35:35.660 --> 00:35:37.080
kind of testing related

00:35:37.080 --> 00:35:38.040
open source projects

00:35:38.040 --> 00:35:39.240
and then that was kind of

00:35:39.240 --> 00:35:39.960
where I got started

00:35:39.960 --> 00:35:40.960
with open source

00:35:40.960 --> 00:35:42.020
and then basically

00:35:42.020 --> 00:35:42.640
it was the classic

00:35:42.640 --> 00:35:44.060
scratch-on-itch thing,

00:35:44.060 --> 00:35:44.280
right?

00:35:44.280 --> 00:35:44.800
Like it's like

00:35:44.800 --> 00:35:45.520
I have a bunch of

00:35:45.520 --> 00:35:46.540
open source projects

00:35:46.540 --> 00:35:47.920
I want to write documentation.

00:35:47.920 --> 00:35:49.440
How do I solve that problem?

00:35:49.440 --> 00:35:50.300
And back in the day

00:35:50.300 --> 00:35:51.280
that was a much harder

00:35:51.280 --> 00:35:52.160
problem to solve,

00:35:52.160 --> 00:35:52.400
right?

00:35:52.400 --> 00:35:53.400
It was basically just like

00:35:53.400 --> 00:35:54.320
build a zip file

00:35:54.320 --> 00:35:55.120
and upload it to

00:35:55.120 --> 00:35:56.880
packages.python.org

00:35:56.880 --> 00:35:58.340
if folks remember that one

00:35:58.340 --> 00:36:00.120
or was it packages

00:36:00.120 --> 00:36:00.860
or whatever the docs,

00:36:00.860 --> 00:36:02.040
there was a docs hosting

00:36:02.040 --> 00:36:03.340
on PyPI basically.

00:36:03.340 --> 00:36:03.980
And yeah,

00:36:03.980 --> 00:36:04.840
basically just wanted to

00:36:04.840 --> 00:36:05.500
kind of build

00:36:05.500 --> 00:36:06.540
a better version of that

00:36:06.540 --> 00:36:07.060
that in the

00:36:07.060 --> 00:36:07.740
integrated with GitHub.

00:36:07.740 --> 00:36:08.680
I feel like webhooks

00:36:08.680 --> 00:36:09.900
were like the cool new thing

00:36:09.900 --> 00:36:11.260
back in 2010.

00:36:11.260 --> 00:36:13.340
And so that was really

00:36:13.340 --> 00:36:14.140
kind of the insight,

00:36:14.140 --> 00:36:14.360
right?

00:36:14.360 --> 00:36:15.100
It's like let's build

00:36:15.100 --> 00:36:15.940
this kind of like

00:36:15.940 --> 00:36:16.920
CI/CD workflow

00:36:16.920 --> 00:36:18.080
on top of webhooks

00:36:18.080 --> 00:36:19.300
and actually did build

00:36:19.300 --> 00:36:20.400
kind of a version of that

00:36:20.400 --> 00:36:21.280
the previous year

00:36:21.280 --> 00:36:22.460
around kind of like

00:36:22.460 --> 00:36:23.300
code quality stuff.

00:36:23.300 --> 00:36:24.240
So it actually ran

00:36:24.240 --> 00:36:25.020
kind of like a linter

00:36:25.020 --> 00:36:26.320
and built a website

00:36:26.320 --> 00:36:26.940
on commit

00:36:26.940 --> 00:36:27.960
and had a similar

00:36:27.960 --> 00:36:28.880
kind of workflow,

00:36:28.880 --> 00:36:29.180
right?

00:36:29.180 --> 00:36:29.880
Where it like gave you

00:36:29.880 --> 00:36:30.960
a grade and did

00:36:30.960 --> 00:36:31.740
all this kind of stuff,

00:36:31.740 --> 00:36:33.140
which is like 2009.

00:36:33.140 --> 00:36:33.760
And yeah,

00:36:33.760 --> 00:36:34.740
that didn't really

00:36:34.740 --> 00:36:35.420
catch on at all.

00:36:35.460 --> 00:36:35.900
But then I think

00:36:35.900 --> 00:36:36.640
Read the Docs

00:36:36.640 --> 00:36:37.520
just we built it

00:36:37.520 --> 00:36:38.700
and then I was using it

00:36:38.700 --> 00:36:39.540
for my own projects

00:36:39.540 --> 00:36:40.840
and I actually had the need

00:36:40.840 --> 00:36:41.760
to kind of maintain it

00:36:41.760 --> 00:36:42.700
and keep it updated.

00:36:42.700 --> 00:36:43.500
And then I think people

00:36:43.500 --> 00:36:45.060
just kind of grew naturally,

00:36:45.060 --> 00:36:45.280
you know,

00:36:45.280 --> 00:36:46.180
gave some conference talks,

00:36:46.180 --> 00:36:46.900
that kind of stuff.

00:36:46.900 --> 00:36:47.680
But I think it just

00:36:47.680 --> 00:36:48.560
solved a problem

00:36:48.560 --> 00:36:49.200
that people had

00:36:49.200 --> 00:36:49.980
and that's always going

00:36:49.980 --> 00:36:51.400
to be the best way

00:36:51.400 --> 00:36:52.280
to grow a thing.

00:36:52.660 --> 00:36:53.480
Yeah, absolutely.

00:36:53.480 --> 00:36:54.040
Awesome.

00:36:54.040 --> 00:36:55.320
What's Read the Docs

00:36:55.320 --> 00:36:55.700
written in?

00:36:55.700 --> 00:36:56.180
Is it Django?

00:36:56.180 --> 00:36:57.360
Yeah, it's all Django

00:36:57.360 --> 00:36:57.800
and Python.

00:36:57.800 --> 00:36:59.160
Funny coincidence.

00:36:59.160 --> 00:37:01.220
I went to college

00:37:01.220 --> 00:37:01.960
in Lawrence

00:37:01.960 --> 00:37:02.960
at the University of Kansas.

00:37:02.960 --> 00:37:03.820
Oh, nice.

00:37:03.820 --> 00:37:04.960
I was right there,

00:37:04.960 --> 00:37:06.240
right at the heart

00:37:06.240 --> 00:37:07.080
of Django,

00:37:07.080 --> 00:37:07.820
but I moved off

00:37:07.820 --> 00:37:08.420
to grad school

00:37:08.420 --> 00:37:09.460
like a couple years

00:37:09.460 --> 00:37:10.800
before all that happened.

00:37:10.800 --> 00:37:11.860
So I missed,

00:37:11.860 --> 00:37:13.020
missed the excitement.

00:37:13.020 --> 00:37:14.240
I grew up in Virginia

00:37:14.240 --> 00:37:14.760
and everyone was like,

00:37:14.760 --> 00:37:15.500
you're going to Kansas?

00:37:15.500 --> 00:37:16.700
You graduated school?

00:37:16.700 --> 00:37:17.900
Like, how are you

00:37:17.900 --> 00:37:18.560
going there?

00:37:18.680 --> 00:37:19.060
Like, what?

00:37:19.060 --> 00:37:19.780
Everybody thought

00:37:19.780 --> 00:37:20.680
it was the weirdest decision,

00:37:20.680 --> 00:37:21.080
but yeah,

00:37:21.080 --> 00:37:22.020
like I really do think,

00:37:22.020 --> 00:37:22.260
you know,

00:37:22.260 --> 00:37:23.400
ending up in that Python

00:37:23.400 --> 00:37:24.300
and Django ecosystem

00:37:24.300 --> 00:37:25.640
has been pretty transformative

00:37:25.640 --> 00:37:26.720
to my life.

00:37:26.720 --> 00:37:27.380
So, you know,

00:37:27.380 --> 00:37:27.800
worked out.

00:37:27.800 --> 00:37:28.840
Lawrence is a pretty cool

00:37:28.840 --> 00:37:29.620
little town, actually,

00:37:29.620 --> 00:37:30.600
of all the places.

00:37:30.600 --> 00:37:30.880
Yeah.

00:37:30.880 --> 00:37:32.020
Sebastian,

00:37:32.020 --> 00:37:33.720
how did you come about

00:37:33.720 --> 00:37:34.560
this crazy idea

00:37:34.560 --> 00:37:35.520
to put types

00:37:35.520 --> 00:37:36.480
into our web apps?

00:37:36.480 --> 00:37:37.020
You know,

00:37:37.020 --> 00:37:37.380
Python,

00:37:37.380 --> 00:37:38.120
that's dynamic.

00:37:38.120 --> 00:37:38.880
It doesn't have types.

00:37:38.880 --> 00:37:39.460
What are you doing?

00:37:39.460 --> 00:37:40.740
Yeah, I don't know.

00:37:40.740 --> 00:37:41.580
It's so crazy.

00:37:41.580 --> 00:37:42.780
It's so fun to see

00:37:42.780 --> 00:37:43.640
it said Michael Larson

00:37:43.640 --> 00:37:44.280
in the chat,

00:37:44.280 --> 00:37:44.580
like,

00:37:44.580 --> 00:37:45.880
they maintain

00:37:45.880 --> 00:37:47.020
our URL E3

00:37:47.020 --> 00:37:47.720
and the Python

00:37:47.720 --> 00:37:49.300
security developer

00:37:49.300 --> 00:37:50.040
in Resilience

00:37:50.040 --> 00:37:50.600
just, like,

00:37:50.600 --> 00:37:52.240
chatting along with us.

00:37:52.240 --> 00:37:52.460
Like,

00:37:52.460 --> 00:37:53.260
he probably has had

00:37:53.260 --> 00:37:53.940
to deal with

00:37:53.940 --> 00:37:55.500
so much stuff

00:37:55.500 --> 00:37:56.240
as us.

00:37:56.240 --> 00:37:57.220
Yeah,

00:37:57.220 --> 00:37:57.960
I'm sure.

00:37:57.960 --> 00:37:59.240
So, like,

00:37:59.240 --> 00:38:00.380
some of the first things

00:38:00.380 --> 00:38:01.260
that I did in open source

00:38:01.260 --> 00:38:01.800
were actually

00:38:01.800 --> 00:38:02.840
Docker images

00:38:02.840 --> 00:38:04.220
for deploying Flask

00:38:04.220 --> 00:38:05.320
because I was working

00:38:05.320 --> 00:38:05.800
with Flask

00:38:05.800 --> 00:38:07.320
and deploying Flask

00:38:07.320 --> 00:38:08.360
was difficult

00:38:08.360 --> 00:38:09.640
and I needed to be able

00:38:09.640 --> 00:38:10.260
to combine

00:38:10.260 --> 00:38:11.860
Nginx with UWSGI

00:38:11.860 --> 00:38:12.220
and, like,

00:38:12.220 --> 00:38:12.860
a bunch of things

00:38:12.860 --> 00:38:13.180
and, like,

00:38:13.180 --> 00:38:13.920
they all had

00:38:13.920 --> 00:38:14.620
their own

00:38:14.620 --> 00:38:16.160
custom configuration files

00:38:16.160 --> 00:38:16.740
and it was, you know,

00:38:16.780 --> 00:38:17.560
like, so difficult.

00:38:17.560 --> 00:38:19.180
I didn't like doing that

00:38:19.180 --> 00:38:20.800
and then I just had

00:38:20.800 --> 00:38:21.980
to study how to do

00:38:21.980 --> 00:38:22.420
that stuff

00:38:22.420 --> 00:38:23.100
and then after

00:38:23.100 --> 00:38:24.120
going through all that

00:38:24.120 --> 00:38:25.120
I wanted to save

00:38:25.120 --> 00:38:26.500
everyone else's time

00:38:26.500 --> 00:38:27.200
doing that.

00:38:27.200 --> 00:38:27.820
So, we're like,

00:38:27.820 --> 00:38:28.200
well,

00:38:28.200 --> 00:38:29.720
let's just put a Docker image

00:38:29.720 --> 00:38:30.200
with this

00:38:30.200 --> 00:38:31.680
and a lot of documentation

00:38:31.680 --> 00:38:32.860
of how this Docker image

00:38:32.860 --> 00:38:33.200
works

00:38:33.200 --> 00:38:34.700
and how you can use it

00:38:34.700 --> 00:38:35.980
with some sensible defaults.

00:38:35.980 --> 00:38:36.300
So, you know,

00:38:36.300 --> 00:38:36.820
it was just like

00:38:36.820 --> 00:38:38.020
a weird contraption

00:38:38.020 --> 00:38:38.900
that was it

00:38:38.900 --> 00:38:40.080
but it actually grew

00:38:40.080 --> 00:38:40.720
and, like,

00:38:40.720 --> 00:38:41.240
got, like,

00:38:41.240 --> 00:38:42.220
a few stars,

00:38:42.220 --> 00:38:42.540
like,

00:38:42.540 --> 00:38:43.260
a bunch of stars.

00:38:43.360 --> 00:38:43.600
For me,

00:38:43.600 --> 00:38:44.120
it was a lot,

00:38:44.120 --> 00:38:44.440
you know,

00:38:44.440 --> 00:38:44.640
like,

00:38:44.640 --> 00:38:45.420
100 stars.

00:38:45.420 --> 00:38:46.360
Oh, my gosh,

00:38:46.360 --> 00:38:47.360
I have an open source

00:38:47.360 --> 00:38:47.700
developer.

00:38:47.700 --> 00:38:48.860
And then, like,

00:38:48.860 --> 00:38:49.340
at some point

00:38:49.340 --> 00:38:49.700
it had, like,

00:38:49.700 --> 00:38:50.440
a thousand stars

00:38:50.440 --> 00:38:51.120
or something like that.

00:38:51.120 --> 00:38:52.440
I was so happy about that.

00:38:52.440 --> 00:38:53.160
And at some point

00:38:53.160 --> 00:38:53.900
it was kind of

00:38:53.900 --> 00:38:55.060
the de facto standard

00:38:55.060 --> 00:38:55.900
for doing

00:38:55.900 --> 00:38:56.460
Flask,

00:38:56.460 --> 00:38:57.000
Docker,

00:38:57.000 --> 00:38:58.000
Flask-indocker.

00:38:58.200 --> 00:38:59.480
that was the first thing

00:38:59.480 --> 00:38:59.880
that I did.

00:38:59.880 --> 00:39:00.840
I ended up

00:39:00.840 --> 00:39:01.900
with FastAPI.

00:39:01.900 --> 00:39:03.000
I was avoiding

00:39:03.000 --> 00:39:03.820
building FastAPI

00:39:03.820 --> 00:39:04.520
for a long while

00:39:04.520 --> 00:39:05.240
and I was trying

00:39:05.240 --> 00:39:06.640
all the other frameworks

00:39:06.640 --> 00:39:07.440
and all the other tools.

00:39:07.440 --> 00:39:08.620
I was convinced

00:39:08.620 --> 00:39:09.340
that there was something

00:39:09.340 --> 00:39:10.080
that would do

00:39:10.080 --> 00:39:11.240
the things that I wanted.

00:39:11.240 --> 00:39:12.620
I just had to find it.

00:39:12.620 --> 00:39:13.600
And as I was trying

00:39:13.600 --> 00:39:14.400
different frameworks,

00:39:14.400 --> 00:39:15.660
also in different languages,

00:39:15.660 --> 00:39:17.300
I was extending

00:39:17.300 --> 00:39:18.340
the list of things

00:39:18.340 --> 00:39:19.280
that I wanted to have

00:39:19.280 --> 00:39:20.140
and also the list

00:39:20.140 --> 00:39:21.000
of things that I wanted

00:39:21.000 --> 00:39:22.020
not to have.

00:39:22.020 --> 00:39:22.540
For example,

00:39:22.540 --> 00:39:23.280
I didn't want to...

00:39:23.280 --> 00:39:23.760
That takes you

00:39:23.760 --> 00:39:25.000
farther and farther away

00:39:25.000 --> 00:39:26.060
from any framework

00:39:26.060 --> 00:39:26.920
so you're out.

00:39:27.240 --> 00:39:28.120
having one that would

00:39:28.120 --> 00:39:28.880
tickle the boxes.

00:39:28.880 --> 00:39:29.640
So it was like,

00:39:29.640 --> 00:39:29.880
ah.

00:39:29.880 --> 00:39:31.000
But then I realized

00:39:31.000 --> 00:39:32.420
I really like this thing

00:39:32.420 --> 00:39:33.340
of having types

00:39:33.340 --> 00:39:34.760
because you get out

00:39:34.760 --> 00:39:35.280
of completion

00:39:35.280 --> 00:39:36.120
and inline errors

00:39:36.120 --> 00:39:37.180
and this is so cool.

00:39:37.180 --> 00:39:37.600
It's so cool

00:39:37.600 --> 00:39:38.500
to be able to have this.

00:39:38.500 --> 00:39:40.100
I want to have this in Python

00:39:40.100 --> 00:39:40.760
and then Python

00:39:40.760 --> 00:39:41.820
added type annotations

00:39:41.820 --> 00:39:42.400
and it was like,

00:39:42.400 --> 00:39:43.280
this is great.

00:39:43.280 --> 00:39:44.400
How do I use them?

00:39:44.400 --> 00:39:44.960
There's no way

00:39:44.960 --> 00:39:45.420
to use them

00:39:45.420 --> 00:39:46.480
with the current frameworks.

00:39:46.480 --> 00:39:47.780
So at some point

00:39:47.780 --> 00:39:48.820
I actually found

00:39:48.820 --> 00:39:50.260
the right framework.

00:39:50.260 --> 00:39:51.540
It was called API Star

00:39:51.540 --> 00:39:52.500
by the same author

00:39:52.500 --> 00:39:53.520
of Django REST framework.

00:39:53.520 --> 00:39:54.580
It was just missing

00:39:54.580 --> 00:39:55.840
some authentication stuff.

00:39:55.840 --> 00:39:56.480
I said like,

00:39:56.480 --> 00:39:56.680
okay,

00:39:56.680 --> 00:39:57.260
I'm going to contribute

00:39:57.260 --> 00:39:58.260
to the other stuff.

00:39:58.260 --> 00:39:59.200
When I was about

00:39:59.200 --> 00:40:00.140
to jump into the code,

00:40:00.140 --> 00:40:00.800
he said,

00:40:00.800 --> 00:40:02.060
I have to deprecate this.

00:40:02.060 --> 00:40:03.180
I will go focus

00:40:03.180 --> 00:40:04.480
full on Starlet.

00:40:04.480 --> 00:40:05.560
And then he went

00:40:05.560 --> 00:40:06.220
to build Starlet.

00:40:06.220 --> 00:40:07.440
This is Tom Christie,

00:40:07.440 --> 00:40:08.720
which is super prolific

00:40:08.720 --> 00:40:09.460
and an amazing

00:40:09.460 --> 00:40:10.540
open source person

00:40:10.540 --> 00:40:11.060
in general.

00:40:11.060 --> 00:40:12.680
And then at that point

00:40:12.680 --> 00:40:13.620
is when I said like,

00:40:13.620 --> 00:40:14.060
ah,

00:40:14.060 --> 00:40:15.360
just have to try it.

00:40:15.360 --> 00:40:15.900
Let's just do it.

00:40:16.080 --> 00:40:16.840
So I'm just going to try

00:40:16.840 --> 00:40:17.460
to build something

00:40:17.460 --> 00:40:18.320
that will be

00:40:18.320 --> 00:40:20.160
kind of a spiritual successor

00:40:20.160 --> 00:40:21.860
to API Star

00:40:21.860 --> 00:40:23.300
built on top of Starlet.

00:40:23.300 --> 00:40:23.940
So I was,

00:40:23.940 --> 00:40:24.140
you know,

00:40:24.140 --> 00:40:24.760
like I was actually

00:40:24.760 --> 00:40:26.260
narrating all the learnings

00:40:26.260 --> 00:40:27.380
from Flask,

00:40:27.380 --> 00:40:28.120
Django,

00:40:28.120 --> 00:40:29.260
Django REST framework

00:40:29.260 --> 00:40:30.580
and all the ecosystem

00:40:30.580 --> 00:40:31.460
and just like bringing

00:40:31.460 --> 00:40:32.600
all those ideas together.

00:40:32.600 --> 00:40:33.560
At least that was my intention.

00:40:33.560 --> 00:40:34.460
And then I wanted

00:40:34.460 --> 00:40:35.500
to have a bit

00:40:35.500 --> 00:40:36.580
of better type annotations.

00:40:36.580 --> 00:40:38.080
So I saw that

00:40:38.080 --> 00:40:38.960
Pydantic was using

00:40:38.960 --> 00:40:39.920
standard type annotation.

00:40:39.920 --> 00:40:40.600
So people wouldn't

00:40:40.600 --> 00:40:41.660
have to learn this

00:40:41.660 --> 00:40:41.880
like,

00:40:41.880 --> 00:40:42.160
you know,

00:40:42.160 --> 00:40:43.100
from FastAPI

00:40:43.100 --> 00:40:44.360
for special string

00:40:44.360 --> 00:40:45.060
or something like that.

00:40:45.060 --> 00:40:45.820
Just instead of that,

00:40:45.820 --> 00:40:46.940
just use pure string.

00:40:46.940 --> 00:40:47.880
So I wanted to have

00:40:47.880 --> 00:40:49.480
something based on standards

00:40:49.480 --> 00:40:50.680
like OpenAPI,

00:40:50.680 --> 00:40:51.300
JSON schema

00:40:51.300 --> 00:40:51.920
and all that stuff

00:40:51.920 --> 00:40:53.460
and based on standard Python

00:40:53.460 --> 00:40:54.080
and to have like

00:40:54.080 --> 00:40:56.140
the simplest syntax possible

00:40:56.140 --> 00:40:56.800
and to,

00:40:56.800 --> 00:40:57.180
you know,

00:40:57.180 --> 00:40:58.180
like give the best

00:40:58.180 --> 00:40:59.560
developer experience possible

00:40:59.560 --> 00:41:00.200
while,

00:41:00.200 --> 00:41:00.580
you know,

00:41:00.580 --> 00:41:01.680
like not adding

00:41:01.680 --> 00:41:03.760
like any additional steps

00:41:03.760 --> 00:41:04.400
for developers

00:41:04.400 --> 00:41:05.100
to build something

00:41:05.100 --> 00:41:05.940
that by default

00:41:05.940 --> 00:41:07.340
will have all the best practices

00:41:07.340 --> 00:41:08.060
built in.

00:41:08.060 --> 00:41:09.380
That was the intention.

00:41:09.380 --> 00:41:10.240
And I was just like

00:41:10.240 --> 00:41:10.920
trying to solve it

00:41:10.920 --> 00:41:11.780
for the things

00:41:11.780 --> 00:41:12.700
that I was working on.

00:41:12.700 --> 00:41:14.100
I was supposed to be doing

00:41:14.100 --> 00:41:15.360
AI and machine learning

00:41:15.360 --> 00:41:15.820
and stuff,

00:41:15.820 --> 00:41:17.060
but like I had to stop

00:41:17.060 --> 00:41:18.640
for a bit to solve APIs.

00:41:18.640 --> 00:41:20.380
I got stuck in APIs.

00:41:20.380 --> 00:41:21.900
That's how I ended up

00:41:21.900 --> 00:41:22.700
with FastAPI.

00:41:22.700 --> 00:41:23.180
Oh,

00:41:23.180 --> 00:41:24.140
I think you made

00:41:24.140 --> 00:41:24.980
a pretty decent choice.

00:41:24.980 --> 00:41:26.080
It seems like FastAPI

00:41:26.080 --> 00:41:26.700
is doing all right.

00:41:26.700 --> 00:41:27.020
Yeah.

00:41:27.020 --> 00:41:27.940
Yeah,

00:41:27.940 --> 00:41:28.580
I just saw you.

00:41:28.580 --> 00:41:29.380
It's much better

00:41:29.380 --> 00:41:31.160
than what I ever had expected.

00:41:31.160 --> 00:41:31.580
Yeah,

00:41:31.580 --> 00:41:31.860
I know.

00:41:31.860 --> 00:41:32.360
Congratulations.

00:41:32.360 --> 00:41:32.960
Well,

00:41:32.960 --> 00:41:33.700
it's also deserved,

00:41:33.700 --> 00:41:35.620
but I also just saw

00:41:35.620 --> 00:41:36.580
an X,

00:41:36.580 --> 00:41:37.020
I don't know,

00:41:37.020 --> 00:41:38.820
a post on X Twitter,

00:41:38.820 --> 00:41:39.540
whatever you,

00:41:39.540 --> 00:41:39.960
however you,

00:41:39.960 --> 00:41:41.240
addressed these things,

00:41:41.240 --> 00:41:42.180
where you said

00:41:42.180 --> 00:41:43.860
you showed a graph

00:41:43.860 --> 00:41:45.120
where the number

00:41:45.120 --> 00:41:46.140
of GitHub stars

00:41:46.140 --> 00:41:47.060
for FastAPI

00:41:47.060 --> 00:41:48.240
just passed Flask.

00:41:48.240 --> 00:41:48.480
And,

00:41:48.480 --> 00:41:48.940
you know,

00:41:48.940 --> 00:41:49.960
I have a lot of respect

00:41:49.960 --> 00:41:50.880
for Flask

00:41:50.880 --> 00:41:51.820
and the Palette team

00:41:51.820 --> 00:41:52.480
and David Lord

00:41:52.480 --> 00:41:53.500
and all those folks,

00:41:53.500 --> 00:41:53.920
but,

00:41:53.920 --> 00:41:54.140
you know,

00:41:54.140 --> 00:41:54.420
awesome,

00:41:54.420 --> 00:41:55.880
awesome that your stuff

00:41:55.880 --> 00:41:56.660
has taken off so much.

00:41:56.660 --> 00:41:57.180
That's really cool.

00:41:57.180 --> 00:41:57.820
It's super cool.

00:41:57.820 --> 00:41:58.340
It's amazing.

00:41:58.340 --> 00:41:58.560
And,

00:41:58.560 --> 00:41:58.760
you know,

00:41:58.760 --> 00:41:59.600
like Flask was

00:41:59.600 --> 00:42:01.160
one of the big inspirations

00:42:01.160 --> 00:42:01.900
for FastAPI,

00:42:01.900 --> 00:42:02.640
and I've been able

00:42:02.640 --> 00:42:04.240
to be at this point.

00:42:04.240 --> 00:42:05.020
It's crazy.

00:42:05.020 --> 00:42:05.280
Like,

00:42:05.280 --> 00:42:05.760
yeah,

00:42:05.760 --> 00:42:07.820
I still can't get over it.

00:42:07.820 --> 00:42:08.240
Yeah,

00:42:08.240 --> 00:42:08.740
super cool.

00:42:08.800 --> 00:42:09.500
super cool to be able

00:42:09.500 --> 00:42:10.280
to build all this

00:42:10.280 --> 00:42:11.380
and to keep building

00:42:11.380 --> 00:42:11.840
more stuff.

00:42:11.840 --> 00:42:12.200
So,

00:42:12.200 --> 00:42:12.360
yeah,

00:42:12.360 --> 00:42:12.880
super nice.

00:42:13.020 --> 00:42:14.880
one final comment

00:42:14.880 --> 00:42:16.080
before we move on

00:42:16.080 --> 00:42:16.620
to Octoprint.

00:42:16.620 --> 00:42:17.560
But,

00:42:17.560 --> 00:42:18.620
one of the things

00:42:18.620 --> 00:42:19.560
I kind of see

00:42:19.560 --> 00:42:20.640
you doing in the world

00:42:20.640 --> 00:42:21.120
is you're like

00:42:21.120 --> 00:42:22.100
the combiner.

00:42:22.100 --> 00:42:22.560
You're like,

00:42:22.560 --> 00:42:22.780
oh,

00:42:22.780 --> 00:42:23.600
we've got this cool stuff

00:42:23.600 --> 00:42:24.240
with Pydantic

00:42:24.240 --> 00:42:26.320
and Starlet,

00:42:26.320 --> 00:42:27.400
and how can we combine it

00:42:27.400 --> 00:42:27.860
in this way

00:42:27.860 --> 00:42:28.460
to make this,

00:42:28.460 --> 00:42:28.760
you know,

00:42:28.760 --> 00:42:29.560
and Swagger.

00:42:29.560 --> 00:42:29.820
And,

00:42:29.820 --> 00:42:29.980
like,

00:42:29.980 --> 00:42:31.240
similarly with SQL model,

00:42:31.240 --> 00:42:31.580
you're like,

00:42:31.580 --> 00:42:31.900
well,

00:42:31.900 --> 00:42:32.960
Pydantic is cool,

00:42:32.960 --> 00:42:34.540
but SQLAlchemy

00:42:34.540 --> 00:42:35.040
is kind of cool,

00:42:35.040 --> 00:42:35.760
but it could be more

00:42:35.760 --> 00:42:36.100
or better,

00:42:36.100 --> 00:42:36.480
you know,

00:42:36.480 --> 00:42:36.660
like,

00:42:36.660 --> 00:42:37.080
it could be better,

00:42:37.080 --> 00:42:37.360
right?

00:42:37.360 --> 00:42:37.640
So,

00:42:37.640 --> 00:42:38.040
anyway,

00:42:38.040 --> 00:42:38.540
good job.

00:42:38.540 --> 00:42:38.620
Yeah,

00:42:38.620 --> 00:42:38.980
and also,

00:42:38.980 --> 00:42:39.180
like,

00:42:39.180 --> 00:42:39.780
Typer,

00:42:39.780 --> 00:42:40.860
that is the library

00:42:40.860 --> 00:42:41.280
for building

00:42:41.280 --> 00:42:42.220
command line applications.

00:42:42.220 --> 00:42:43.160
It just click

00:42:43.160 --> 00:42:44.380
with the type annotations,

00:42:44.380 --> 00:42:45.180
the same ideas

00:42:45.180 --> 00:42:45.880
from Pydantic,

00:42:45.880 --> 00:42:46.540
and now with,

00:42:46.540 --> 00:42:47.020
you know,

00:42:47.020 --> 00:42:47.200
like,

00:42:47.200 --> 00:42:47.920
integrated building

00:42:47.920 --> 00:42:48.840
support for reach.

00:42:48.840 --> 00:42:49.400
So,

00:42:49.400 --> 00:42:50.100
like,

00:42:50.100 --> 00:42:50.540
also,

00:42:50.540 --> 00:42:52.140
picking Will's work,

00:42:52.140 --> 00:42:53.200
trying just to put

00:42:53.200 --> 00:42:54.320
a bunch of things together.

00:42:54.320 --> 00:42:54.920
I'm just,

00:42:54.920 --> 00:42:55.260
you know,

00:42:55.260 --> 00:42:55.460
like,

00:42:55.460 --> 00:42:56.420
I'm just making cocktails

00:42:56.420 --> 00:42:57.040
everywhere.

00:42:57.040 --> 00:42:58.100
Yes,

00:42:58.100 --> 00:42:58.580
exactly.

00:42:58.580 --> 00:42:59.980
It's more than that,

00:42:59.980 --> 00:43:01.120
but there is a lot of value

00:43:01.120 --> 00:43:02.180
in combining things

00:43:02.180 --> 00:43:02.960
in a smart way

00:43:02.960 --> 00:43:03.980
and accessible way.

00:43:03.980 --> 00:43:04.200
Yeah,

00:43:04.200 --> 00:43:04.500
awesome.

00:43:04.500 --> 00:43:05.660
All right,

00:43:05.660 --> 00:43:06.040
Gina,

00:43:06.040 --> 00:43:06.960
you told us a little bit

00:43:06.960 --> 00:43:07.860
about the origin story,

00:43:07.940 --> 00:43:08.120
but like,

00:43:08.120 --> 00:43:08.900
what did you try before?

00:43:08.900 --> 00:43:09.940
And then I have

00:43:09.940 --> 00:43:11.060
a follow-up question

00:43:11.060 --> 00:43:11.840
that I think is unique

00:43:11.840 --> 00:43:12.600
to your project.

00:43:12.600 --> 00:43:13.900
I wouldn't necessarily say

00:43:13.900 --> 00:43:15.640
that I tried anything before

00:43:15.640 --> 00:43:16.600
because the whole thing

00:43:16.600 --> 00:43:18.260
was completely unintentional.

00:43:18.260 --> 00:43:19.680
I basically bought myself

00:43:19.680 --> 00:43:20.400
a 3D printer

00:43:20.400 --> 00:43:21.300
in late 2012.

00:43:21.300 --> 00:43:22.620
I wanted to be able

00:43:22.620 --> 00:43:24.060
to put it in my spare bathroom

00:43:24.060 --> 00:43:25.440
and monitor it from afar

00:43:25.440 --> 00:43:26.760
because back then

00:43:26.760 --> 00:43:28.080
this thing was tying up

00:43:28.080 --> 00:43:28.640
my PC.

00:43:28.640 --> 00:43:29.620
You had to constantly

00:43:29.620 --> 00:43:30.820
keep it connected

00:43:30.820 --> 00:43:31.760
so it could operate

00:43:31.760 --> 00:43:32.620
and that for hours

00:43:32.620 --> 00:43:33.080
and hours

00:43:33.080 --> 00:43:34.020
and it made noises

00:43:34.020 --> 00:43:35.160
and it produced fumes

00:43:35.160 --> 00:43:36.480
and I just wanted it

00:43:36.480 --> 00:43:37.340
out of my office

00:43:37.340 --> 00:43:38.360
and to be able

00:43:38.360 --> 00:43:39.120
to play games

00:43:39.120 --> 00:43:40.080
on my PC again

00:43:40.080 --> 00:43:41.080
instead of having it

00:43:41.080 --> 00:43:43.020
basically communicate

00:43:43.020 --> 00:43:44.320
constantly with a 3D printer.

00:43:44.320 --> 00:43:45.860
And so I bought myself

00:43:45.860 --> 00:43:46.500
a Raspberry Pi

00:43:46.500 --> 00:43:47.680
and I was looking online

00:43:47.680 --> 00:43:48.260
for something

00:43:48.260 --> 00:43:49.180
to be able to just

00:43:49.180 --> 00:43:50.040
put on this Pi

00:43:50.040 --> 00:43:51.100
and attach to the printer

00:43:51.100 --> 00:43:52.680
and throw a Wi-Fi dongle in

00:43:52.680 --> 00:43:53.340
because back then

00:43:53.340 --> 00:43:54.300
the Pi didn't have Wi-Fi

00:43:54.300 --> 00:43:54.760
built in

00:43:54.760 --> 00:43:55.880
and throw that

00:43:55.880 --> 00:43:56.760
in the spare bathroom

00:43:56.760 --> 00:43:57.780
but there wasn't anything.

00:43:57.780 --> 00:43:58.800
So over the course

00:43:58.800 --> 00:44:00.240
of my Christmas break

00:44:00.240 --> 00:44:00.860
in 2012

00:44:00.860 --> 00:44:01.740
I sat down

00:44:01.740 --> 00:44:02.700
and changed that

00:44:02.700 --> 00:44:03.720
and this is basically

00:44:03.720 --> 00:44:04.620
the origin story

00:44:04.620 --> 00:44:05.260
of Octoprint.

00:44:05.260 --> 00:44:06.280
I just wanted to

00:44:06.280 --> 00:44:07.160
scratch my own itch.

00:44:07.160 --> 00:44:08.340
I wanted to put my printer

00:44:08.340 --> 00:44:09.340
in my spare bathroom.

00:44:09.340 --> 00:44:10.140
This is all.

00:44:10.140 --> 00:44:11.380
And apparently

00:44:11.380 --> 00:44:12.220
a lot of people

00:44:12.220 --> 00:44:13.260
had the same problem

00:44:13.260 --> 00:44:14.260
because I just

00:44:14.260 --> 00:44:14.600
you know

00:44:14.600 --> 00:44:15.580
like how we

00:44:15.580 --> 00:44:16.960
like to do these things.

00:44:16.960 --> 00:44:17.640
We build something

00:44:17.640 --> 00:44:18.300
that we think

00:44:18.300 --> 00:44:19.060
might be interesting.

00:44:19.060 --> 00:44:19.760
We throw it up

00:44:19.760 --> 00:44:20.080
on GitHub

00:44:20.080 --> 00:44:21.860
and go just like here

00:44:21.860 --> 00:44:22.400
go nuts

00:44:22.400 --> 00:44:22.880
enjoy

00:44:22.880 --> 00:44:23.840
have fun with that

00:44:23.840 --> 00:44:24.960
and I suddenly

00:44:24.960 --> 00:44:25.860
started getting emails

00:44:25.860 --> 00:44:26.880
from all around the world

00:44:26.880 --> 00:44:27.360
like hey

00:44:27.360 --> 00:44:27.900
I have this

00:44:27.900 --> 00:44:28.520
in this printer

00:44:28.520 --> 00:44:29.080
can you also

00:44:29.080 --> 00:44:30.120
make it work with that

00:44:30.120 --> 00:44:31.740
and so this escalated

00:44:31.740 --> 00:44:33.340
and I went like

00:44:33.340 --> 00:44:34.680
oh someone is using it

00:44:34.680 --> 00:44:35.620
of course I'm going

00:44:35.620 --> 00:44:36.760
to add this support

00:44:36.760 --> 00:44:37.300
and of course

00:44:37.300 --> 00:44:37.900
I'm going to add

00:44:37.900 --> 00:44:38.440
this feature

00:44:38.440 --> 00:44:39.600
and it just grew

00:44:39.600 --> 00:44:40.160
and grew and grew

00:44:40.160 --> 00:44:40.480
and grew

00:44:40.480 --> 00:44:41.340
and apparently

00:44:41.340 --> 00:44:42.360
I just hit a nerve

00:44:42.360 --> 00:44:44.060
so this was utterly unplanned

00:44:44.060 --> 00:44:44.760
this was never

00:44:44.760 --> 00:44:45.940
my intention at all

00:44:45.940 --> 00:44:47.640
and I just wanted

00:44:47.640 --> 00:44:49.220
to solve my own problem

00:44:49.220 --> 00:44:50.960
and have continued

00:44:50.960 --> 00:44:52.420
to solve my own problems

00:44:52.420 --> 00:44:53.240
and the problems

00:44:53.240 --> 00:44:53.860
of other people

00:44:53.860 --> 00:44:54.380
ever since.

00:44:54.380 --> 00:44:55.740
Before Octoprint

00:44:55.740 --> 00:44:56.740
I actually was also

00:44:56.740 --> 00:44:57.360
quite active

00:44:57.360 --> 00:44:58.080
in a little project

00:44:58.080 --> 00:44:58.740
called DocuViki

00:44:58.740 --> 00:45:00.400
where I was developing

00:45:00.400 --> 00:45:01.540
some plugins for that

00:45:01.540 --> 00:45:03.460
and I even did

00:45:03.460 --> 00:45:03.960
open source

00:45:03.960 --> 00:45:04.520
before I knew

00:45:04.520 --> 00:45:05.780
what open source was

00:45:05.780 --> 00:45:07.320
with some PHP scripts

00:45:07.320 --> 00:45:08.720
when I was 18 or so

00:45:08.720 --> 00:45:09.900
that I threw up

00:45:09.900 --> 00:45:10.600
on my website

00:45:10.600 --> 00:45:11.920
but yeah Octoprint

00:45:11.920 --> 00:45:13.300
was like

00:45:13.300 --> 00:45:14.400
it took over my life

00:45:14.400 --> 00:45:15.840
it just was an accident

00:45:15.840 --> 00:45:17.160
a happy little accident

00:45:17.160 --> 00:45:17.500
maybe.

00:45:17.500 --> 00:45:18.520
How did you decide

00:45:18.520 --> 00:45:20.360
okay this is a job

00:45:20.360 --> 00:45:21.020
for me

00:45:21.020 --> 00:45:21.840
rather than

00:45:21.840 --> 00:45:23.120
just a thing

00:45:23.120 --> 00:45:23.680
you worked on?

00:45:23.680 --> 00:45:24.320
The thing is

00:45:24.320 --> 00:45:26.120
by mid-2030

00:45:26.120 --> 00:45:26.620
2013

00:45:26.620 --> 00:45:28.000
I went to

00:45:28.000 --> 00:45:28.940
80% on my

00:45:28.940 --> 00:45:29.660
regular day job

00:45:29.660 --> 00:45:30.480
I used to be a

00:45:30.480 --> 00:45:31.340
software architect

00:45:31.340 --> 00:45:32.220
slash consultant

00:45:32.220 --> 00:45:33.560
with big corporation

00:45:33.560 --> 00:45:34.340
Java World

00:45:34.340 --> 00:45:35.560
all the enterprise stuff

00:45:35.560 --> 00:45:37.080
and to be able

00:45:37.080 --> 00:45:37.500
to dedicate

00:45:37.500 --> 00:45:38.640
one day per week

00:45:38.640 --> 00:45:39.560
fully to Octoprint

00:45:39.560 --> 00:45:40.280
plus of course

00:45:40.280 --> 00:45:40.840
the weekends

00:45:40.840 --> 00:45:41.700
and the after hours

00:45:41.700 --> 00:45:42.340
and the vacations

00:45:42.340 --> 00:45:42.960
and all of that

00:45:42.960 --> 00:45:44.900
and that still

00:45:44.900 --> 00:45:46.060
didn't suffice

00:45:46.060 --> 00:45:47.460
anymore by 2014

00:45:47.460 --> 00:45:48.320
and I noticed

00:45:48.320 --> 00:45:48.880
that it was

00:45:48.880 --> 00:45:49.800
impacting my health

00:45:49.800 --> 00:45:50.520
it was impacting

00:45:50.520 --> 00:45:51.260
my relationships

00:45:51.260 --> 00:45:52.520
and that was

00:45:52.520 --> 00:45:53.040
actually

00:45:53.040 --> 00:45:54.560
quite perfect timing

00:45:54.560 --> 00:45:55.040
really when

00:45:55.040 --> 00:45:55.840
this company

00:45:55.840 --> 00:45:56.660
that hired me

00:45:56.660 --> 00:45:57.060
initially

00:45:57.060 --> 00:45:58.060
approached me

00:45:58.060 --> 00:45:58.500
and said

00:45:58.500 --> 00:45:59.240
hey do you want

00:45:59.240 --> 00:46:00.060
to maybe fly out

00:46:00.060 --> 00:46:00.460
to us

00:46:00.460 --> 00:46:01.100
and we'll chat

00:46:01.100 --> 00:46:02.020
and if you like

00:46:02.020 --> 00:46:02.560
all of that

00:46:02.560 --> 00:46:03.500
what we have to propose

00:46:03.500 --> 00:46:04.100
then we can

00:46:04.100 --> 00:46:05.000
just do that

00:46:05.000 --> 00:46:05.780
and this is

00:46:05.780 --> 00:46:06.620
how it then

00:46:06.620 --> 00:46:07.680
continued to go

00:46:07.680 --> 00:46:08.660
from 2014

00:46:08.660 --> 00:46:10.040
until 2016

00:46:10.040 --> 00:46:11.240
and yeah

00:46:11.240 --> 00:46:12.080
it was never

00:46:12.080 --> 00:46:12.660
my intention

00:46:12.660 --> 00:46:13.060
to become

00:46:13.060 --> 00:46:13.760
self-employed

00:46:13.760 --> 00:46:14.220
I'm a quite

00:46:14.220 --> 00:46:15.520
risk-averse person

00:46:15.520 --> 00:46:15.940
actually

00:46:15.940 --> 00:46:17.340
so when this

00:46:17.340 --> 00:46:17.920
point came

00:46:17.920 --> 00:46:18.720
where I was like

00:46:18.720 --> 00:46:19.580
okay either

00:46:19.580 --> 00:46:21.040
I find a way

00:46:21.040 --> 00:46:22.020
to keep funding

00:46:22.020 --> 00:46:23.180
this or I have

00:46:23.180 --> 00:46:23.960
to really drop it

00:46:23.960 --> 00:46:24.740
because it was

00:46:24.740 --> 00:46:25.440
way too big

00:46:25.440 --> 00:46:26.260
by then to be

00:46:26.260 --> 00:46:26.880
kept as a pet

00:46:26.880 --> 00:46:27.680
project without

00:46:27.680 --> 00:46:28.640
being utterly

00:46:28.640 --> 00:46:29.800
utterly unhealthy

00:46:29.800 --> 00:46:30.940
yeah I decided

00:46:30.940 --> 00:46:31.580
to jump into

00:46:31.580 --> 00:46:32.320
the cold water

00:46:32.320 --> 00:46:32.840
and have been

00:46:32.840 --> 00:46:33.860
trying to keep up

00:46:33.860 --> 00:46:35.360
at the surface

00:46:35.360 --> 00:46:35.960
ever since

00:46:35.960 --> 00:46:36.400
basically

00:46:36.400 --> 00:46:37.120
so yeah

00:46:37.120 --> 00:46:38.080
all of that

00:46:38.080 --> 00:46:38.760
really completely

00:46:38.760 --> 00:46:39.220
unplanned

00:46:39.220 --> 00:46:40.020
cool what an

00:46:40.020 --> 00:46:40.400
adventure

00:46:40.400 --> 00:46:41.400
indeed yeah

00:46:41.400 --> 00:46:41.920
and the good

00:46:41.920 --> 00:46:42.640
thing is even

00:46:42.640 --> 00:46:43.440
if people don't

00:46:43.440 --> 00:46:43.980
understand what

00:46:43.980 --> 00:46:44.580
open source is

00:46:44.580 --> 00:46:45.200
or what code is

00:46:45.200 --> 00:46:46.000
I always have

00:46:46.000 --> 00:46:46.820
quite a topic

00:46:46.820 --> 00:46:47.300
at parties

00:46:47.300 --> 00:46:48.560
so that is fun

00:46:48.560 --> 00:46:49.320
because yeah

00:46:49.320 --> 00:46:50.240
like people give

00:46:50.240 --> 00:46:50.800
you money

00:46:50.800 --> 00:46:51.620
for something

00:46:51.620 --> 00:46:52.120
they can get

00:46:52.120 --> 00:46:52.740
for free

00:46:52.740 --> 00:46:53.180
what

00:46:53.180 --> 00:46:54.120
exactly

00:46:54.120 --> 00:46:54.560
yeah

00:46:54.560 --> 00:46:55.100
if you're not

00:46:55.100 --> 00:46:55.600
familiar with

00:46:55.600 --> 00:46:56.120
open source

00:46:56.120 --> 00:46:56.760
then it definitely

00:46:56.760 --> 00:46:57.280
is a weird

00:46:57.280 --> 00:46:58.920
it was tricky

00:46:58.920 --> 00:46:59.620
to find a text

00:46:59.620 --> 00:46:59.980
consultant

00:46:59.980 --> 00:47:00.620
who understands

00:47:00.620 --> 00:47:01.080
the concept

00:47:01.080 --> 00:47:01.380
so

00:47:01.380 --> 00:47:01.880
yeah I can

00:47:01.880 --> 00:47:02.240
imagine

00:47:02.240 --> 00:47:03.420
that's interesting

00:47:03.420 --> 00:47:05.720
I'm sure

00:47:05.720 --> 00:47:06.100
all right

00:47:06.100 --> 00:47:06.560
I was very

00:47:06.560 --> 00:47:07.400
recently I was like

00:47:07.400 --> 00:47:08.140
what do you do

00:47:08.140 --> 00:47:08.800
what is your

00:47:08.800 --> 00:47:09.060
day

00:47:09.060 --> 00:47:09.980
oh I'm a

00:47:09.980 --> 00:47:10.580
software developer

00:47:10.580 --> 00:47:11.320
so you work

00:47:11.320 --> 00:47:11.820
for a company

00:47:11.820 --> 00:47:12.860
not really

00:47:12.860 --> 00:47:13.820
what is it

00:47:13.820 --> 00:47:14.440
that you build

00:47:14.440 --> 00:47:15.400
well I build

00:47:15.400 --> 00:47:16.160
a platform that

00:47:16.160 --> 00:47:16.680
is free

00:47:16.680 --> 00:47:17.700
for others to

00:47:17.700 --> 00:47:18.160
use

00:47:18.160 --> 00:47:19.040
and who's paying

00:47:19.040 --> 00:47:19.260
you

00:47:19.260 --> 00:47:20.120
a company

00:47:20.120 --> 00:47:21.040
that pays

00:47:21.040 --> 00:47:21.560
money to

00:47:21.560 --> 00:47:21.980
companies

00:47:21.980 --> 00:47:22.340
to build

00:47:22.340 --> 00:47:22.920
companies

00:47:22.920 --> 00:47:23.360
so you're

00:47:23.360 --> 00:47:23.740
building a

00:47:23.740 --> 00:47:23.880
company

00:47:23.880 --> 00:47:24.400
no

00:47:24.400 --> 00:47:25.020
it's actually

00:47:25.020 --> 00:47:25.300
you know

00:47:25.300 --> 00:47:25.680
like it was

00:47:25.680 --> 00:47:26.020
a long

00:47:26.020 --> 00:47:26.620
conversation

00:47:26.620 --> 00:47:27.540
they got bored

00:47:27.540 --> 00:47:27.900
and later

00:47:27.900 --> 00:47:30.300
this doesn't

00:47:30.300 --> 00:47:30.940
make any sense

00:47:30.940 --> 00:47:31.220
yeah

00:47:31.220 --> 00:47:31.660
I've just

00:47:31.660 --> 00:47:32.300
taken to say

00:47:32.300 --> 00:47:32.860
I'm a software

00:47:32.860 --> 00:47:33.300
developer

00:47:33.300 --> 00:47:33.800
and I work

00:47:33.800 --> 00:47:34.800
with 3D

00:47:34.800 --> 00:47:35.140
printers

00:47:35.140 --> 00:47:35.840
and then people

00:47:35.840 --> 00:47:36.500
usually stop

00:47:36.500 --> 00:47:37.260
asking questions

00:47:37.260 --> 00:47:37.880
because 3D

00:47:37.880 --> 00:47:38.400
printers are

00:47:38.400 --> 00:47:39.080
this mysterious

00:47:39.080 --> 00:47:40.000
thing that no one

00:47:40.000 --> 00:47:40.440
understands

00:47:40.440 --> 00:47:40.780
anyhow

00:47:40.780 --> 00:47:41.900
usually at least

00:47:41.900 --> 00:47:43.100
and then yeah

00:47:43.100 --> 00:47:43.840
unless they say

00:47:43.840 --> 00:47:44.800
oh 3D printers

00:47:44.800 --> 00:47:45.380
and then I say

00:47:45.380 --> 00:47:46.080
yeah do you know

00:47:46.080 --> 00:47:46.660
3D printers

00:47:46.660 --> 00:47:47.180
and they go

00:47:47.180 --> 00:47:47.740
yeah yeah

00:47:47.740 --> 00:47:48.380
I have one

00:47:48.380 --> 00:47:49.080
and then I can say

00:47:49.080 --> 00:47:49.680
oh do you know

00:47:49.680 --> 00:47:50.240
Octoprint

00:47:50.240 --> 00:47:50.660
yes

00:47:50.660 --> 00:47:51.520
oh yeah I made

00:47:51.520 --> 00:47:52.140
that and then

00:47:52.140 --> 00:47:52.820
oh yeah

00:47:52.820 --> 00:47:53.820
it's tricky to explain

00:47:53.820 --> 00:47:54.140
to people

00:47:54.140 --> 00:47:54.660
I'm sometimes

00:47:54.660 --> 00:47:55.180
not even sure

00:47:55.180 --> 00:47:55.680
my parents

00:47:55.680 --> 00:47:56.220
understand

00:47:56.220 --> 00:47:57.060
what I do

00:47:57.060 --> 00:47:57.260
so

00:47:57.260 --> 00:47:57.700
I'm sure

00:47:57.700 --> 00:47:58.300
that my parents

00:47:58.300 --> 00:47:58.960
don't understand

00:47:58.960 --> 00:47:59.500
what I do

00:47:59.500 --> 00:48:02.520
that's okay

00:48:02.520 --> 00:48:03.200
I'm sure

00:48:03.200 --> 00:48:03.600
they're still

00:48:03.600 --> 00:48:04.040
proud of you

00:48:04.040 --> 00:48:04.260
anyway

00:48:04.260 --> 00:48:04.660
it's fine

00:48:04.660 --> 00:48:04.860
yeah

00:48:04.860 --> 00:48:05.500
my definitely

00:48:05.500 --> 00:48:06.140
are proud of you

00:48:06.140 --> 00:48:06.840
I would like to

00:48:06.840 --> 00:48:07.540
just maybe

00:48:07.540 --> 00:48:08.280
getting a little

00:48:08.280 --> 00:48:08.940
short on time

00:48:08.940 --> 00:48:09.380
you're coming up

00:48:09.380 --> 00:48:10.000
to the end

00:48:10.000 --> 00:48:11.060
of our Avengers

00:48:11.060 --> 00:48:11.520
meeting

00:48:11.520 --> 00:48:12.600
let's close it out

00:48:12.600 --> 00:48:13.080
with this

00:48:13.080 --> 00:48:13.800
go around

00:48:13.800 --> 00:48:14.280
one more time

00:48:14.280 --> 00:48:14.720
let y'all

00:48:14.720 --> 00:48:15.580
or maybe just

00:48:15.580 --> 00:48:16.020
as a group

00:48:16.020 --> 00:48:16.520
kind of chime

00:48:16.520 --> 00:48:17.120
in on this

00:48:17.120 --> 00:48:17.980
speaking to the

00:48:17.980 --> 00:48:18.400
people out there

00:48:18.400 --> 00:48:18.660
listening

00:48:18.660 --> 00:48:19.440
who want to

00:48:19.440 --> 00:48:19.800
start an open

00:48:19.800 --> 00:48:20.300
source project

00:48:20.300 --> 00:48:20.680
or want to

00:48:20.680 --> 00:48:21.200
contribute to

00:48:21.200 --> 00:48:21.600
open source

00:48:21.600 --> 00:48:21.960
or somehow

00:48:21.960 --> 00:48:22.920
kind of get

00:48:22.920 --> 00:48:23.800
involved in

00:48:23.800 --> 00:48:24.500
similar ways

00:48:24.500 --> 00:48:25.280
what would you

00:48:25.280 --> 00:48:25.980
do different

00:48:25.980 --> 00:48:26.920
if you started

00:48:26.920 --> 00:48:27.360
now

00:48:27.360 --> 00:48:28.120
many of you

00:48:28.120 --> 00:48:28.440
have been working

00:48:28.440 --> 00:48:28.660
on this

00:48:28.660 --> 00:48:29.060
for a long

00:48:29.060 --> 00:48:29.420
time

00:48:29.420 --> 00:48:29.700
you've had

00:48:29.700 --> 00:48:29.880
a lot

00:48:29.880 --> 00:48:30.440
of experience

00:48:30.440 --> 00:48:30.780
like if

00:48:30.780 --> 00:48:31.360
somebody said

00:48:31.360 --> 00:48:31.880
well

00:48:31.880 --> 00:48:32.560
the world

00:48:32.560 --> 00:48:32.720
is

00:48:32.720 --> 00:48:33.460
somehow

00:48:33.460 --> 00:48:34.120
the memory

00:48:34.120 --> 00:48:34.460
has been

00:48:34.460 --> 00:48:34.980
erased

00:48:34.980 --> 00:48:35.360
from

00:48:35.360 --> 00:48:36.320
the fact

00:48:36.320 --> 00:48:36.580
that

00:48:36.580 --> 00:48:37.180
rough

00:48:37.180 --> 00:48:38.060
or rich

00:48:38.060 --> 00:48:38.800
or octafrid

00:48:38.800 --> 00:48:39.160
or whatever

00:48:39.160 --> 00:48:39.720
existed

00:48:39.720 --> 00:48:40.820
to start over

00:48:40.820 --> 00:48:41.600
what would you

00:48:41.600 --> 00:48:41.800
do

00:48:41.800 --> 00:48:42.380
different

00:48:42.380 --> 00:48:43.460
or the same

00:48:43.460 --> 00:48:43.980
I would use

00:48:43.980 --> 00:48:44.680
FastAPI

00:48:44.680 --> 00:48:46.960
yay

00:48:46.960 --> 00:48:47.460
good use

00:48:47.460 --> 00:48:47.920
of a time

00:48:47.920 --> 00:48:48.220
machine

00:48:48.220 --> 00:48:48.440
there

00:48:48.440 --> 00:48:48.760
everybody

00:48:48.760 --> 00:48:49.420
I've had

00:48:49.420 --> 00:48:49.780
multiple

00:48:49.780 --> 00:48:50.320
conversations

00:48:50.320 --> 00:48:50.860
over the years

00:48:50.860 --> 00:48:51.160
where people

00:48:51.160 --> 00:48:51.380
are like

00:48:51.380 --> 00:48:51.720
why don't

00:48:51.720 --> 00:48:52.020
you use

00:48:52.020 --> 00:48:52.500
this library

00:48:52.500 --> 00:48:52.760
I'm like

00:48:52.760 --> 00:48:52.940
oh it

00:48:52.940 --> 00:48:53.120
didn't

00:48:53.120 --> 00:48:53.620
exist

00:48:53.620 --> 00:48:54.440
exactly

00:48:54.440 --> 00:48:54.820
yeah

00:48:54.820 --> 00:48:55.600
this is the

00:48:55.600 --> 00:48:55.920
problem

00:48:55.920 --> 00:48:56.500
exactly

00:48:56.500 --> 00:48:57.180
when you

00:48:57.180 --> 00:48:57.660
actually have

00:48:57.660 --> 00:48:58.120
a plug-in

00:48:58.120 --> 00:48:58.440
system

00:48:58.440 --> 00:48:59.240
then swapping

00:48:59.240 --> 00:48:59.680
out

00:48:59.680 --> 00:49:00.520
stuff like

00:49:00.520 --> 00:49:01.000
that can

00:49:01.000 --> 00:49:01.500
become

00:49:01.500 --> 00:49:02.620
very tricky

00:49:02.620 --> 00:49:03.100
absolutely

00:49:03.100 --> 00:49:03.660
when I get

00:49:03.660 --> 00:49:04.360
asked what

00:49:04.360 --> 00:49:04.840
to work

00:49:04.840 --> 00:49:05.220
on what

00:49:05.220 --> 00:49:05.680
to study

00:49:05.680 --> 00:49:06.100
what to

00:49:06.100 --> 00:49:06.520
focus

00:49:06.520 --> 00:49:06.960
how to

00:49:06.960 --> 00:49:07.460
get into

00:49:07.460 --> 00:49:08.020
open source

00:49:08.020 --> 00:49:08.380
or like

00:49:08.380 --> 00:49:09.120
almost any

00:49:09.120 --> 00:49:09.440
of those

00:49:09.440 --> 00:49:09.780
questions

00:49:09.780 --> 00:49:10.360
I always

00:49:10.360 --> 00:49:10.820
say that

00:49:10.820 --> 00:49:12.000
the main

00:49:12.000 --> 00:49:12.640
advice I

00:49:12.640 --> 00:49:13.240
give is just

00:49:13.240 --> 00:49:13.800
to focus

00:49:13.800 --> 00:49:14.600
on a problem

00:49:14.600 --> 00:49:15.140
that is

00:49:15.140 --> 00:49:15.860
important to

00:49:15.860 --> 00:49:16.040
you

00:49:16.040 --> 00:49:16.740
more than

00:49:16.740 --> 00:49:16.980
you know

00:49:16.980 --> 00:49:17.200
like

00:49:17.200 --> 00:49:18.000
innovation

00:49:18.000 --> 00:49:18.580
market

00:49:18.580 --> 00:49:19.180
disruption

00:49:19.180 --> 00:49:19.820
or war

00:49:19.820 --> 00:49:20.220
whatever

00:49:20.220 --> 00:49:20.700
just like

00:49:20.700 --> 00:49:21.180
focus on

00:49:21.180 --> 00:49:21.680
a problem

00:49:21.680 --> 00:49:22.020
that is

00:49:22.020 --> 00:49:22.260
actually

00:49:22.260 --> 00:49:22.700
important

00:49:22.700 --> 00:49:23.060
to you

00:49:23.060 --> 00:49:23.780
hopefully

00:49:23.780 --> 00:49:24.180
that is

00:49:24.180 --> 00:49:24.500
important

00:49:24.500 --> 00:49:25.020
to others

00:49:25.020 --> 00:49:25.460
as well

00:49:25.460 --> 00:49:26.060
and if

00:49:26.060 --> 00:49:26.420
it's not

00:49:26.420 --> 00:49:26.740
a problem

00:49:26.740 --> 00:49:27.280
that affects

00:49:27.280 --> 00:49:27.580
you

00:49:27.580 --> 00:49:28.020
directly

00:49:28.020 --> 00:49:28.440
hopefully

00:49:28.440 --> 00:49:28.860
it affects

00:49:28.860 --> 00:49:29.140
someone

00:49:29.140 --> 00:49:29.380
that is

00:49:29.380 --> 00:49:29.820
very close

00:49:29.820 --> 00:49:30.080
to you

00:49:30.080 --> 00:49:30.300
so you

00:49:30.300 --> 00:49:30.600
can get

00:49:30.600 --> 00:49:31.140
like a

00:49:31.140 --> 00:49:31.380
very

00:49:31.380 --> 00:49:31.800
tight

00:49:31.800 --> 00:49:32.500
feedback

00:49:32.500 --> 00:49:32.940
loop

00:49:32.940 --> 00:49:33.500
of what

00:49:33.500 --> 00:49:33.720
you are

00:49:33.720 --> 00:49:33.980
building

00:49:33.980 --> 00:49:34.480
and then

00:49:34.480 --> 00:49:34.800
try to

00:49:34.800 --> 00:49:35.120
solve it

00:49:35.120 --> 00:49:35.500
and then

00:49:35.500 --> 00:49:36.160
use that

00:49:36.160 --> 00:49:36.700
as the

00:49:36.700 --> 00:49:37.200
guide

00:49:37.200 --> 00:49:37.500
of

00:49:37.500 --> 00:49:38.180
what to

00:49:38.180 --> 00:49:38.360
do

00:49:38.360 --> 00:49:38.940
what to

00:49:38.940 --> 00:49:39.180
learn

00:49:39.180 --> 00:49:39.560
what to

00:49:39.560 --> 00:49:39.820
focus

00:49:39.820 --> 00:49:40.060
on

00:49:40.060 --> 00:49:40.720
what to

00:49:40.720 --> 00:49:40.880
do

00:49:40.880 --> 00:49:41.480
in many

00:49:41.480 --> 00:49:41.740
cases

00:49:41.740 --> 00:49:42.120
it's just

00:49:42.120 --> 00:49:42.720
learning a

00:49:42.720 --> 00:49:43.060
framework

00:49:43.060 --> 00:49:43.560
that

00:49:43.560 --> 00:49:44.400
is already

00:49:44.400 --> 00:49:44.720
there

00:49:44.720 --> 00:49:45.160
you know

00:49:45.160 --> 00:49:45.340
like

00:49:45.340 --> 00:49:46.080
why would

00:49:46.080 --> 00:49:46.400
I go

00:49:46.400 --> 00:49:46.940
and build

00:49:46.940 --> 00:49:48.180
a system

00:49:48.180 --> 00:49:48.760
to control

00:49:48.760 --> 00:49:49.440
3D printers

00:49:49.440 --> 00:49:49.820
instead of

00:49:49.820 --> 00:49:50.120
just like

00:49:50.120 --> 00:49:50.600
learning how

00:49:50.600 --> 00:49:50.980
to use

00:49:50.980 --> 00:49:51.480
auto print

00:49:51.480 --> 00:49:52.300
in many

00:49:52.300 --> 00:49:52.520
cases

00:49:52.520 --> 00:49:53.020
solving the

00:49:53.020 --> 00:49:53.240
problem

00:49:53.240 --> 00:49:53.520
is just

00:49:53.520 --> 00:49:53.680
like

00:49:53.680 --> 00:49:53.980
using

00:49:53.980 --> 00:49:54.400
the tool

00:49:54.400 --> 00:49:54.720
that is

00:49:54.720 --> 00:49:55.080
already

00:49:55.080 --> 00:49:55.380
there

00:49:55.380 --> 00:49:55.800
but then

00:49:55.800 --> 00:49:56.300
in some

00:49:56.300 --> 00:49:56.660
cases

00:49:56.660 --> 00:49:57.160
you end up

00:49:57.160 --> 00:49:57.620
figuring out

00:49:57.620 --> 00:49:58.240
that there's

00:49:58.240 --> 00:49:58.600
no tool

00:49:58.600 --> 00:49:59.100
and you just

00:49:59.100 --> 00:49:59.560
have to

00:49:59.560 --> 00:49:59.940
build it

00:49:59.940 --> 00:50:00.340
there's

00:50:00.340 --> 00:50:00.660
actually

00:50:00.660 --> 00:50:01.380
no

00:50:01.380 --> 00:50:02.520
lint there

00:50:02.520 --> 00:50:03.120
and formatter

00:50:03.120 --> 00:50:04.080
that can be

00:50:04.080 --> 00:50:04.900
super fast

00:50:04.900 --> 00:50:05.320
so you can

00:50:05.320 --> 00:50:05.700
run it

00:50:05.700 --> 00:50:06.080
every time

00:50:06.080 --> 00:50:06.400
you just

00:50:06.400 --> 00:50:06.840
hit save

00:50:06.840 --> 00:50:07.400
so then

00:50:07.400 --> 00:50:07.700
you just

00:50:07.700 --> 00:50:08.020
have to

00:50:08.020 --> 00:50:08.360
build it

00:50:08.360 --> 00:50:08.700
in Rust

00:50:08.700 --> 00:50:09.260
and create

00:50:09.260 --> 00:50:09.560
rough

00:50:09.560 --> 00:50:10.320
or like

00:50:10.320 --> 00:50:10.660
you know

00:50:10.660 --> 00:50:10.960
like

00:50:10.960 --> 00:50:11.640
there's always

00:50:11.640 --> 00:50:12.400
like this

00:50:12.400 --> 00:50:13.040
thing that

00:50:13.040 --> 00:50:13.900
you are trying

00:50:13.900 --> 00:50:14.400
to solve

00:50:14.400 --> 00:50:15.040
that is just

00:50:15.040 --> 00:50:15.680
not solved

00:50:15.680 --> 00:50:16.320
there yet

00:50:16.320 --> 00:50:17.240
and that

00:50:17.240 --> 00:50:17.580
is what

00:50:17.580 --> 00:50:18.000
gives you

00:50:18.000 --> 00:50:18.620
the best

00:50:18.620 --> 00:50:19.060
value

00:50:19.060 --> 00:50:19.420
and the

00:50:19.420 --> 00:50:19.700
best

00:50:19.700 --> 00:50:20.380
outcome

00:50:20.380 --> 00:50:21.000
in many

00:50:21.000 --> 00:50:21.400
cases

00:50:21.400 --> 00:50:22.040
it can be

00:50:22.040 --> 00:50:22.480
just like

00:50:22.480 --> 00:50:22.680
you know

00:50:22.680 --> 00:50:23.040
contributing

00:50:23.040 --> 00:50:23.760
to another

00:50:23.760 --> 00:50:24.200
open source

00:50:24.200 --> 00:50:24.580
project

00:50:24.580 --> 00:50:25.120
or

00:50:25.120 --> 00:50:25.860
building

00:50:25.860 --> 00:50:26.220
something

00:50:26.220 --> 00:50:26.540
new

00:50:26.540 --> 00:50:27.200
but the

00:50:27.200 --> 00:50:27.660
thing is

00:50:27.660 --> 00:50:27.820
like

00:50:27.820 --> 00:50:28.220
for me

00:50:28.220 --> 00:50:28.540
it's just

00:50:28.540 --> 00:50:28.660
like

00:50:28.660 --> 00:50:29.160
focusing

00:50:29.160 --> 00:50:29.600
on a

00:50:29.600 --> 00:50:29.840
problem

00:50:29.840 --> 00:50:30.100
that is

00:50:30.100 --> 00:50:30.440
important

00:50:30.440 --> 00:50:30.960
that is

00:50:30.960 --> 00:50:31.240
what

00:50:31.240 --> 00:50:32.920
has

00:50:32.920 --> 00:50:33.440
worked

00:50:33.440 --> 00:50:33.840
for me

00:50:33.840 --> 00:50:34.320
at least

00:50:34.320 --> 00:50:34.760
good advice

00:50:34.760 --> 00:50:35.040
I would

00:50:35.040 --> 00:50:35.340
add to

00:50:35.340 --> 00:50:35.580
that

00:50:35.580 --> 00:50:35.800
that

00:50:35.800 --> 00:50:35.940
you

00:50:35.940 --> 00:50:36.160
really

00:50:36.160 --> 00:50:36.500
shouldn't

00:50:36.500 --> 00:50:37.020
try to

00:50:37.020 --> 00:50:37.800
you need

00:50:37.800 --> 00:50:38.040
to be

00:50:38.040 --> 00:50:38.280
really

00:50:38.280 --> 00:50:38.620
passionate

00:50:38.620 --> 00:50:38.920
about

00:50:38.920 --> 00:50:39.100
the

00:50:39.100 --> 00:50:39.240
thing

00:50:39.240 --> 00:50:39.420
as

00:50:39.420 --> 00:50:39.620
well

00:50:39.620 --> 00:50:39.960
right

00:50:39.960 --> 00:50:40.200
it

00:50:40.200 --> 00:50:40.400
needs

00:50:40.400 --> 00:50:40.640
to be

00:50:40.640 --> 00:50:40.900
something

00:50:40.900 --> 00:50:41.120
that

00:50:41.120 --> 00:50:41.300
is

00:50:41.300 --> 00:50:41.660
really

00:50:41.660 --> 00:50:42.280
something

00:50:42.280 --> 00:50:42.560
you're

00:50:42.560 --> 00:50:42.880
into

00:50:42.880 --> 00:50:43.360
something

00:50:43.360 --> 00:50:43.660
that

00:50:43.660 --> 00:50:44.060
will

00:50:44.060 --> 00:50:44.560
that

00:50:44.560 --> 00:50:44.720
you

00:50:44.720 --> 00:50:45.020
will

00:50:45.020 --> 00:50:45.520
want

00:50:45.520 --> 00:50:45.740
to

00:50:45.740 --> 00:50:46.320
spend

00:50:46.320 --> 00:50:46.740
a lot

00:50:46.740 --> 00:50:46.900
of

00:50:46.900 --> 00:50:47.200
time

00:50:47.200 --> 00:50:47.420
on

00:50:47.420 --> 00:50:47.600
that

00:50:47.600 --> 00:50:47.720
is

00:50:47.720 --> 00:50:47.980
actually

00:50:47.980 --> 00:50:48.180
not

00:50:48.180 --> 00:50:48.320
your

00:50:48.320 --> 00:50:48.580
working

00:50:48.580 --> 00:50:48.980
hours

00:50:48.980 --> 00:50:49.340
and such

00:50:49.340 --> 00:50:49.720
because

00:50:49.720 --> 00:50:50.200
otherwise

00:50:50.200 --> 00:50:51.540
the whole

00:50:51.540 --> 00:50:52.160
jog

00:50:52.160 --> 00:50:52.600
until

00:50:52.600 --> 00:50:52.840
this

00:50:52.840 --> 00:50:53.280
becomes

00:50:53.280 --> 00:50:53.900
anything

00:50:53.900 --> 00:50:54.420
viable

00:50:54.420 --> 00:50:54.860
anything

00:50:54.860 --> 00:50:55.180
big

00:50:55.180 --> 00:50:55.480
enough

00:50:55.480 --> 00:50:55.720
to

00:50:55.720 --> 00:50:56.140
support

00:50:56.140 --> 00:50:56.320
you

00:50:56.320 --> 00:50:56.440
in

00:50:56.440 --> 00:50:56.740
any

00:50:56.740 --> 00:50:57.040
kind

00:50:57.040 --> 00:50:57.180
of

00:50:57.180 --> 00:50:57.400
way

00:50:57.400 --> 00:50:57.680
even

00:50:57.680 --> 00:50:57.860
if

00:50:57.860 --> 00:50:58.060
it's

00:50:58.060 --> 00:50:58.380
just

00:50:58.380 --> 00:50:58.780
being

00:50:58.780 --> 00:50:59.040
able

00:50:59.040 --> 00:50:59.240
to

00:50:59.240 --> 00:51:00.080
drink

00:51:00.080 --> 00:51:00.260
a

00:51:00.260 --> 00:51:00.900
coffee

00:51:00.900 --> 00:51:01.180
per

00:51:01.180 --> 00:51:01.420
week

00:51:01.420 --> 00:51:01.560
or

00:51:01.560 --> 00:51:01.840
something

00:51:01.840 --> 00:51:02.520
that

00:51:02.520 --> 00:51:02.700
will

00:51:02.700 --> 00:51:02.880
be

00:51:02.880 --> 00:51:03.160
a

00:51:03.160 --> 00:51:03.480
quiet

00:51:03.480 --> 00:51:03.800
long

00:51:03.800 --> 00:51:04.220
slog

00:51:04.220 --> 00:51:04.700
and

00:51:04.700 --> 00:51:05.200
a lot

00:51:05.200 --> 00:51:05.340
of

00:51:05.340 --> 00:51:05.680
work

00:51:05.680 --> 00:51:05.940
and

00:51:05.940 --> 00:51:06.160
a lot

00:51:06.160 --> 00:51:06.280
of

00:51:06.280 --> 00:51:06.460
blood

00:51:06.460 --> 00:51:06.620
and

00:51:06.620 --> 00:51:06.780
sweat

00:51:06.780 --> 00:51:06.920
and

00:51:06.920 --> 00:51:07.120
tears

00:51:07.120 --> 00:51:07.320
and

00:51:07.320 --> 00:51:07.580
so

00:51:07.580 --> 00:51:07.880
you

00:51:07.880 --> 00:51:08.160
really

00:51:08.160 --> 00:51:08.400
need

00:51:08.400 --> 00:51:08.520
to

00:51:08.520 --> 00:51:08.720
be

00:51:08.720 --> 00:51:09.140
into

00:51:09.140 --> 00:51:09.560
this

00:51:09.560 --> 00:51:09.800
so

00:51:09.800 --> 00:51:10.000
that

00:51:10.000 --> 00:51:10.100
you

00:51:10.100 --> 00:51:10.380
want

00:51:10.380 --> 00:51:10.520
to

00:51:10.520 --> 00:51:10.660
do

00:51:10.660 --> 00:51:10.940
that

00:51:10.940 --> 00:51:11.360
if

00:51:11.360 --> 00:51:11.440
you

00:51:11.440 --> 00:51:11.560
are

00:51:11.560 --> 00:51:11.800
just

00:51:11.800 --> 00:51:12.020
in

00:51:12.020 --> 00:51:12.220
that

00:51:12.220 --> 00:51:12.480
for

00:51:12.480 --> 00:51:12.660
the

00:51:12.660 --> 00:51:12.840
end

00:51:12.840 --> 00:51:13.180
goal

00:51:13.180 --> 00:51:13.540
of

00:51:13.540 --> 00:51:13.720
I

00:51:13.720 --> 00:51:13.860
don't

00:51:13.860 --> 00:51:14.140
know

00:51:14.140 --> 00:51:14.780
becoming

00:51:14.780 --> 00:51:15.100
rich

00:51:15.100 --> 00:51:15.320
through

00:51:15.320 --> 00:51:15.520
open

00:51:15.520 --> 00:51:15.800
source

00:51:15.800 --> 00:51:16.000
which

00:51:16.000 --> 00:51:16.240
by the

00:51:16.240 --> 00:51:16.360
way

00:51:16.360 --> 00:51:16.540
will

00:51:16.540 --> 00:51:16.840
probably

00:51:16.840 --> 00:51:17.040
not

00:51:17.040 --> 00:51:17.260
work

00:51:17.260 --> 00:51:17.480
only

00:51:17.480 --> 00:51:17.780
will

00:51:17.780 --> 00:51:18.020
I

00:51:18.020 --> 00:51:18.160
go

00:51:18.160 --> 00:51:18.440
rich

00:51:18.440 --> 00:51:20.160
then

00:51:20.160 --> 00:51:21.860
this

00:51:21.860 --> 00:51:22.060
will

00:51:22.060 --> 00:51:22.260
not

00:51:22.260 --> 00:51:22.500
work

00:51:22.500 --> 00:51:22.780
out

00:51:22.780 --> 00:51:23.180
you

00:51:23.180 --> 00:51:23.360
need

00:51:23.360 --> 00:51:23.500
to

00:51:23.500 --> 00:51:23.800
focus

00:51:23.800 --> 00:51:24.000
on

00:51:24.000 --> 00:51:24.120
the

00:51:24.120 --> 00:51:24.480
path

00:51:24.480 --> 00:51:24.860
to

00:51:24.860 --> 00:51:25.020
the

00:51:25.020 --> 00:51:25.360
goal

00:51:25.360 --> 00:51:26.660
a lot

00:51:26.660 --> 00:51:26.760
of

00:51:26.760 --> 00:51:26.980
people

00:51:26.980 --> 00:51:27.320
try

00:51:27.320 --> 00:51:27.760
to

00:51:27.760 --> 00:51:28.500
reach

00:51:28.500 --> 00:51:28.760
for

00:51:28.760 --> 00:51:28.940
the

00:51:28.940 --> 00:51:29.140
end

00:51:29.140 --> 00:51:29.480
goal

00:51:29.480 --> 00:51:29.800
before

00:51:29.800 --> 00:51:30.080
they

00:51:30.080 --> 00:51:30.840
are

00:51:30.840 --> 00:51:31.120
willing

00:51:31.120 --> 00:51:31.460
to

00:51:31.460 --> 00:51:32.080
walk

00:51:32.080 --> 00:51:32.240
the

00:51:32.240 --> 00:51:32.540
path

00:51:32.540 --> 00:51:32.740
I

00:51:32.740 --> 00:51:33.980
happen

00:51:33.980 --> 00:51:34.160
to

00:51:34.160 --> 00:51:34.380
be

00:51:34.380 --> 00:51:35.080
in

00:51:35.080 --> 00:51:35.180
the

00:51:35.180 --> 00:51:35.420
GitHub

00:51:35.420 --> 00:51:35.700
star

00:51:35.700 --> 00:51:36.060
program

00:51:36.060 --> 00:51:36.240
and

00:51:36.240 --> 00:51:36.380
I've

00:51:36.380 --> 00:51:36.500
had

00:51:36.500 --> 00:51:36.740
a lot

00:51:36.740 --> 00:51:36.880
of

00:51:36.880 --> 00:51:37.120
people

00:51:37.120 --> 00:51:37.480
ask

00:51:37.480 --> 00:51:37.640
me

00:51:37.640 --> 00:51:37.800
how

00:51:37.800 --> 00:51:37.940
do

00:51:37.940 --> 00:51:38.020
you

00:51:38.020 --> 00:51:38.260
become

00:51:38.260 --> 00:51:38.400
a

00:51:38.400 --> 00:51:38.740
GitHub

00:51:38.740 --> 00:51:39.180
star

00:51:39.180 --> 00:51:39.360
and

00:51:39.360 --> 00:51:39.500
that

00:51:39.500 --> 00:51:39.640
is

00:51:39.640 --> 00:51:39.980
the

00:51:39.980 --> 00:51:40.120
wrong

00:51:40.120 --> 00:51:40.500
question

00:51:40.500 --> 00:51:40.680
to

00:51:40.680 --> 00:51:41.040
ask

00:51:41.040 --> 00:51:42.920
how do

00:51:42.920 --> 00:51:42.980
you

00:51:42.980 --> 00:51:43.300
become

00:51:43.300 --> 00:51:43.480
an

00:51:43.480 --> 00:51:43.660
open

00:51:43.660 --> 00:51:43.880
source

00:51:43.880 --> 00:51:44.320
maintainer

00:51:44.320 --> 00:51:44.480
of a

00:51:44.480 --> 00:51:44.720
popular

00:51:44.720 --> 00:51:45.140
project

00:51:45.140 --> 00:51:46.100
you

00:51:46.100 --> 00:51:46.600
just

00:51:46.600 --> 00:51:46.840
have

00:51:46.840 --> 00:51:47.160
to

00:51:47.160 --> 00:51:47.740
do

00:51:47.740 --> 00:51:48.320
whatever

00:51:48.320 --> 00:51:48.780
you

00:51:48.780 --> 00:51:49.100
are

00:51:49.100 --> 00:51:49.560
interested

00:51:49.560 --> 00:51:49.780
in

00:51:49.780 --> 00:51:49.860
you

00:51:49.860 --> 00:51:50.000
have

00:51:50.000 --> 00:51:50.120
to

00:51:50.120 --> 00:51:50.320
do

00:51:50.320 --> 00:51:50.720
work

00:51:50.720 --> 00:51:50.880
and

00:51:50.880 --> 00:51:50.960
you

00:51:50.960 --> 00:51:51.120
have

00:51:51.120 --> 00:51:51.260
to

00:51:51.260 --> 00:51:51.500
be

00:51:51.500 --> 00:51:51.900
passionate

00:51:51.900 --> 00:51:52.220
about

00:51:52.220 --> 00:51:52.380
your

00:51:52.380 --> 00:51:52.640
work

00:51:52.640 --> 00:51:52.840
and

00:51:52.840 --> 00:51:53.120
then

00:51:53.120 --> 00:51:53.480
maybe

00:51:53.480 --> 00:51:53.700
if

00:51:53.700 --> 00:51:53.820
you

00:51:53.820 --> 00:51:54.000
hit

00:51:54.000 --> 00:51:54.160
the

00:51:54.160 --> 00:51:54.380
right

00:51:54.380 --> 00:51:54.980
nerve

00:51:54.980 --> 00:51:55.400
then

00:51:55.400 --> 00:51:56.000
that

00:51:56.000 --> 00:51:56.160
will

00:51:56.160 --> 00:51:56.440
happen

00:51:56.440 --> 00:51:56.600
and

00:51:56.600 --> 00:51:56.780
maybe

00:51:56.780 --> 00:51:56.940
it

00:51:56.940 --> 00:51:57.360
won't

00:51:57.360 --> 00:51:57.560
I

00:51:57.560 --> 00:51:57.700
think

00:51:57.700 --> 00:51:57.820
it's

00:51:57.820 --> 00:51:58.080
very

00:51:58.080 --> 00:51:58.560
interesting

00:51:58.560 --> 00:51:58.940
that

00:51:58.940 --> 00:51:59.460
none

00:51:59.460 --> 00:51:59.620
of

00:51:59.620 --> 00:51:59.960
us

00:51:59.960 --> 00:52:00.400
had

00:52:00.400 --> 00:52:00.680
a

00:52:00.680 --> 00:52:00.980
career

00:52:00.980 --> 00:52:01.480
path

00:52:01.480 --> 00:52:01.860
to

00:52:01.860 --> 00:52:02.020
where

00:52:02.020 --> 00:52:02.140
we

00:52:02.140 --> 00:52:02.280
are

00:52:02.280 --> 00:52:02.460
now

00:52:02.460 --> 00:52:02.620
we

00:52:02.620 --> 00:52:02.900
didn't

00:52:02.900 --> 00:52:03.180
set

00:52:03.180 --> 00:52:03.580
out

00:52:03.580 --> 00:52:03.980
to

00:52:03.980 --> 00:52:04.120
be

00:52:04.120 --> 00:52:04.320
where

00:52:04.320 --> 00:52:04.420
we

00:52:04.420 --> 00:52:04.420
are

00:52:04.420 --> 00:52:04.600
now

00:52:04.600 --> 00:52:04.760
it

00:52:04.760 --> 00:52:04.900
just

00:52:04.900 --> 00:52:05.180
feels

00:52:05.180 --> 00:52:05.520
like

00:52:05.520 --> 00:52:06.040
we

00:52:06.040 --> 00:52:06.940
followed

00:52:06.940 --> 00:52:07.220
our

00:52:07.220 --> 00:52:07.840
intuition

00:52:07.840 --> 00:52:08.680
and

00:52:08.680 --> 00:52:09.240
it

00:52:09.240 --> 00:52:09.480
worked

00:52:09.480 --> 00:52:09.720
out

00:52:09.720 --> 00:52:10.100
which

00:52:10.100 --> 00:52:10.240
means

00:52:10.240 --> 00:52:10.320
it's

00:52:10.320 --> 00:52:10.480
very

00:52:10.480 --> 00:52:10.780
difficult

00:52:10.780 --> 00:52:10.940
when

00:52:10.940 --> 00:52:11.120
someone

00:52:11.120 --> 00:52:11.360
asks

00:52:11.360 --> 00:52:11.580
me

00:52:11.580 --> 00:52:11.760
how

00:52:11.760 --> 00:52:11.940
do

00:52:11.940 --> 00:52:11.980
you

00:52:11.980 --> 00:52:12.140
become

00:52:12.140 --> 00:52:12.240
an

00:52:12.240 --> 00:52:12.400
open

00:52:12.400 --> 00:52:12.760
source

00:52:12.760 --> 00:52:13.320
developer

00:52:13.320 --> 00:52:13.520
how

00:52:13.520 --> 00:52:13.600
do

00:52:13.600 --> 00:52:13.680
you

00:52:13.680 --> 00:52:14.120
start

00:52:14.120 --> 00:52:14.260
a

00:52:14.260 --> 00:52:14.620
company

00:52:14.620 --> 00:52:15.300
I'm

00:52:15.300 --> 00:52:15.440
not

00:52:15.440 --> 00:52:15.680
quite

00:52:15.680 --> 00:52:15.960
sure

00:52:15.960 --> 00:52:16.300
I can

00:52:16.300 --> 00:52:16.440
tell

00:52:16.440 --> 00:52:16.540
you

00:52:16.540 --> 00:52:16.760
my

00:52:16.760 --> 00:52:17.180
path

00:52:17.180 --> 00:52:17.420
to

00:52:17.420 --> 00:52:18.260
there

00:52:18.260 --> 00:52:18.720
but

00:52:18.720 --> 00:52:18.840
it's

00:52:18.840 --> 00:52:19.240
very hard

00:52:19.240 --> 00:52:19.480
for me

00:52:19.480 --> 00:52:19.620
to

00:52:19.620 --> 00:52:20.100
articulate

00:52:20.100 --> 00:52:20.520
to

00:52:20.520 --> 00:52:20.720
someone

00:52:20.720 --> 00:52:21.140
else

00:52:21.140 --> 00:52:21.620
how

00:52:21.620 --> 00:52:21.740
to

00:52:21.740 --> 00:52:21.860
get

00:52:21.860 --> 00:52:21.980
there

00:52:21.980 --> 00:52:22.040
I

00:52:22.040 --> 00:52:22.200
think

00:52:22.200 --> 00:52:22.400
there's

00:52:22.400 --> 00:52:22.600
a lot

00:52:22.600 --> 00:52:22.900
of luck

00:52:22.900 --> 00:52:23.220
involved

00:52:23.220 --> 00:52:23.840
as well

00:52:23.840 --> 00:52:24.080
right

00:52:24.080 --> 00:52:24.320
it's

00:52:24.320 --> 00:52:24.460
like

00:52:24.460 --> 00:52:24.540
you

00:52:24.540 --> 00:52:24.660
have

00:52:24.660 --> 00:52:24.800
to

00:52:24.800 --> 00:52:25.060
do

00:52:25.060 --> 00:52:25.200
all

00:52:25.200 --> 00:52:25.320
this

00:52:25.320 --> 00:52:25.520
stuff

00:52:25.520 --> 00:52:25.640
and

00:52:25.640 --> 00:52:25.960
roll

00:52:25.960 --> 00:52:26.180
this

00:52:26.180 --> 00:52:26.500
dice

00:52:26.500 --> 00:52:26.700
if

00:52:26.700 --> 00:52:26.800
it

00:52:26.800 --> 00:52:26.940
gets

00:52:26.940 --> 00:52:27.080
a

00:52:27.080 --> 00:52:27.320
six

00:52:27.320 --> 00:52:27.680
you

00:52:27.680 --> 00:52:27.840
can

00:52:27.840 --> 00:52:27.980
be

00:52:27.980 --> 00:52:28.400
successful

00:52:28.400 --> 00:52:29.960
there's

00:52:29.960 --> 00:52:30.140
an

00:52:30.140 --> 00:52:30.460
element

00:52:30.460 --> 00:52:30.640
of

00:52:30.640 --> 00:52:30.840
luck

00:52:30.840 --> 00:52:31.000
but

00:52:31.000 --> 00:52:31.120
it's

00:52:31.120 --> 00:52:31.260
kind

00:52:31.260 --> 00:52:31.320
of

00:52:31.320 --> 00:52:31.760
luck

00:52:31.760 --> 00:52:31.920
you

00:52:31.920 --> 00:52:32.140
make

00:52:32.140 --> 00:52:32.700
for

00:52:32.700 --> 00:52:33.260
yourself

00:52:33.260 --> 00:52:33.700
and

00:52:33.700 --> 00:52:33.840
it

00:52:33.840 --> 00:52:34.180
might

00:52:34.180 --> 00:52:34.380
take

00:52:34.380 --> 00:52:34.500
you

00:52:34.500 --> 00:52:34.660
to

00:52:34.660 --> 00:52:35.060
somewhere

00:52:35.060 --> 00:52:35.380
else

00:52:35.380 --> 00:52:35.620
or

00:52:35.620 --> 00:52:35.720
it

00:52:35.720 --> 00:52:35.840
might

00:52:35.840 --> 00:52:36.040
not

00:52:36.040 --> 00:52:36.220
but

00:52:36.220 --> 00:52:36.440
as long

00:52:36.440 --> 00:52:36.540
as

00:52:36.540 --> 00:52:36.700
you're

00:52:36.700 --> 00:52:37.200
passionate

00:52:37.200 --> 00:52:37.480
about

00:52:37.480 --> 00:52:37.600
it

00:52:37.600 --> 00:52:37.700
and

00:52:37.700 --> 00:52:37.780
you

00:52:37.780 --> 00:52:38.060
enjoy

00:52:38.060 --> 00:52:38.400
it

00:52:38.400 --> 00:52:38.760
then

00:52:38.760 --> 00:52:39.260
great

00:52:39.260 --> 00:52:39.480
things

00:52:39.480 --> 00:52:39.600
will

00:52:39.600 --> 00:52:39.820
happen

00:52:39.820 --> 00:52:39.980
I

00:52:39.980 --> 00:52:40.080
think

00:52:40.080 --> 00:52:40.520
also

00:52:40.520 --> 00:52:41.120
Will

00:52:41.120 --> 00:52:41.360
and

00:52:41.360 --> 00:52:41.640
Charlie

00:52:41.640 --> 00:52:41.840
you

00:52:41.840 --> 00:52:42.100
both

00:52:42.100 --> 00:52:42.520
took

00:52:42.520 --> 00:52:42.760
some

00:52:42.760 --> 00:52:43.340
specific

00:52:43.340 --> 00:52:43.880
time

00:52:43.880 --> 00:52:44.400
on

00:52:44.400 --> 00:52:44.540
your

00:52:44.540 --> 00:52:44.780
own

00:52:44.780 --> 00:52:45.080
money

00:52:45.080 --> 00:52:45.360
to

00:52:45.360 --> 00:52:45.860
really

00:52:45.860 --> 00:52:46.500
level

00:52:46.500 --> 00:52:46.760
up

00:52:46.760 --> 00:52:46.880
what

00:52:46.880 --> 00:52:47.020
you're

00:52:47.020 --> 00:52:47.300
working

00:52:47.300 --> 00:52:47.480
on

00:52:47.480 --> 00:52:47.660
which

00:52:47.660 --> 00:52:47.840
is

00:52:47.840 --> 00:52:48.260
pretty

00:52:48.260 --> 00:52:48.580
brave

00:52:48.580 --> 00:52:49.300
not

00:52:49.300 --> 00:52:49.560
a lot

00:52:49.560 --> 00:52:49.660
of

00:52:49.660 --> 00:52:49.860
people

00:52:49.860 --> 00:52:50.080
would

00:52:50.080 --> 00:52:50.340
say

00:52:50.340 --> 00:52:50.860
I'm

00:52:50.860 --> 00:52:51.020
just

00:52:51.020 --> 00:52:51.180
going

00:52:51.180 --> 00:52:51.500
to

00:52:51.500 --> 00:52:51.860
spend

00:52:51.860 --> 00:52:52.160
my

00:52:52.160 --> 00:52:52.680
savings

00:52:52.680 --> 00:52:53.020
to

00:52:53.020 --> 00:52:53.220
work

00:52:53.220 --> 00:52:53.340
on

00:52:53.340 --> 00:52:53.460
this

00:52:53.460 --> 00:52:53.780
project

00:52:53.780 --> 00:52:54.000
and

00:52:54.000 --> 00:52:54.100
see

00:52:54.100 --> 00:52:54.220
if

00:52:54.220 --> 00:52:54.320
I

00:52:54.320 --> 00:52:54.440
can

00:52:54.440 --> 00:52:54.620
make

00:52:54.620 --> 00:52:54.720
it

00:52:54.720 --> 00:52:54.900
go

00:52:54.900 --> 00:52:55.180
so

00:52:55.180 --> 00:52:55.940
you've

00:52:55.940 --> 00:52:56.220
earned

00:52:56.220 --> 00:52:56.480
some

00:52:56.480 --> 00:52:56.640
of

00:52:56.640 --> 00:52:56.900
that

00:52:56.900 --> 00:52:57.340
through

00:52:57.340 --> 00:52:57.740
taking

00:52:57.740 --> 00:52:57.920
that

00:52:57.920 --> 00:52:58.180
chance

00:52:58.180 --> 00:52:58.280
and

00:52:58.280 --> 00:52:58.460
putting

00:52:58.460 --> 00:52:58.680
that

00:52:58.680 --> 00:52:58.880
time

00:52:58.880 --> 00:52:59.000
and

00:52:59.000 --> 00:52:59.200
effort

00:52:59.200 --> 00:52:59.360
I

00:52:59.360 --> 00:52:59.520
think

00:52:59.520 --> 00:52:59.820
for me

00:52:59.820 --> 00:52:59.960
that

00:52:59.960 --> 00:53:00.140
didn't

00:53:00.140 --> 00:53:00.340
last

00:53:00.340 --> 00:53:00.700
long

00:53:00.700 --> 00:53:01.040
because

00:53:01.040 --> 00:53:01.340
I'm

00:53:01.340 --> 00:53:01.820
after

00:53:01.820 --> 00:53:02.080
15

00:53:02.080 --> 00:53:02.320
months

00:53:02.320 --> 00:53:02.440
I

00:53:02.440 --> 00:53:02.540
was

00:53:02.540 --> 00:53:02.720
living

00:53:02.720 --> 00:53:02.980
on

00:53:02.980 --> 00:53:03.460
GitHub

00:53:03.460 --> 00:53:03.920
sponsorship

00:53:03.920 --> 00:53:04.780
VCs

00:53:04.780 --> 00:53:05.100
came

00:53:05.100 --> 00:53:05.360
along

00:53:05.360 --> 00:53:05.780
and then

00:53:05.780 --> 00:53:05.900
there

00:53:05.900 --> 00:53:06.020
was

00:53:06.020 --> 00:53:06.600
cash

00:53:06.600 --> 00:53:07.360
everything

00:53:07.360 --> 00:53:07.760
changed

00:53:07.760 --> 00:53:08.720
and

00:53:08.720 --> 00:53:08.800
you

00:53:08.800 --> 00:53:08.900
had

00:53:08.900 --> 00:53:08.980
to

00:53:08.980 --> 00:53:09.140
learn

00:53:09.140 --> 00:53:09.260
a

00:53:09.260 --> 00:53:09.420
whole

00:53:09.420 --> 00:53:09.720
new

00:53:09.720 --> 00:53:09.900
set

00:53:09.900 --> 00:53:10.020
of

00:53:10.020 --> 00:53:10.300
skills

00:53:10.300 --> 00:53:10.520
I'm

00:53:10.520 --> 00:53:10.760
sure

00:53:10.760 --> 00:53:11.160
I

00:53:11.160 --> 00:53:14.000
do

00:53:14.000 --> 00:53:14.160
feel

00:53:14.160 --> 00:53:14.780
lucky

00:53:14.780 --> 00:53:15.280
that

00:53:15.280 --> 00:53:15.780
like

00:53:15.780 --> 00:53:15.900
I

00:53:15.900 --> 00:53:16.040
said

00:53:16.040 --> 00:53:16.180
this

00:53:16.180 --> 00:53:16.260
is

00:53:16.260 --> 00:53:16.360
my

00:53:16.360 --> 00:53:16.560
first

00:53:16.560 --> 00:53:16.740
time

00:53:16.740 --> 00:53:16.900
being

00:53:16.900 --> 00:53:17.020
a

00:53:17.020 --> 00:53:17.460
maintainer

00:53:17.460 --> 00:53:17.660
and

00:53:17.660 --> 00:53:17.880
it

00:53:17.880 --> 00:53:18.000
was

00:53:18.000 --> 00:53:18.280
very

00:53:18.280 --> 00:53:18.560
clear

00:53:18.560 --> 00:53:18.700
to

00:53:18.700 --> 00:53:18.860
me

00:53:18.860 --> 00:53:19.220
quickly

00:53:19.220 --> 00:53:19.560
that

00:53:19.560 --> 00:53:20.340
for

00:53:20.340 --> 00:53:20.720
Ruff

00:53:20.720 --> 00:53:21.000
to

00:53:21.000 --> 00:53:21.480
have

00:53:21.480 --> 00:53:21.780
the

00:53:21.780 --> 00:53:22.080
pace

00:53:22.080 --> 00:53:22.200
of

00:53:22.200 --> 00:53:22.580
development

00:53:22.580 --> 00:53:22.800
and

00:53:22.800 --> 00:53:23.040
the

00:53:23.040 --> 00:53:23.320
scope

00:53:23.320 --> 00:53:23.500
that

00:53:23.500 --> 00:53:23.600
it

00:53:23.600 --> 00:53:24.240
had

00:53:24.240 --> 00:53:24.560
to

00:53:24.560 --> 00:53:24.660
be

00:53:24.660 --> 00:53:24.780
a

00:53:24.780 --> 00:53:24.920
full

00:53:24.920 --> 00:53:25.140
time

00:53:25.140 --> 00:53:25.460
thing

00:53:25.460 --> 00:53:25.840
and

00:53:25.840 --> 00:53:26.140
that

00:53:26.140 --> 00:53:26.500
was

00:53:26.500 --> 00:53:26.720
pretty

00:53:26.720 --> 00:53:27.080
obvious

00:53:27.080 --> 00:53:27.360
to me

00:53:27.360 --> 00:53:27.720
quickly

00:53:27.720 --> 00:53:28.020
and

00:53:28.020 --> 00:53:28.160
I

00:53:28.160 --> 00:53:29.140
have

00:53:29.140 --> 00:53:29.260
a

00:53:29.260 --> 00:53:29.400
lot

00:53:29.400 --> 00:53:29.520
of

00:53:29.520 --> 00:53:29.860
respect

00:53:29.860 --> 00:53:30.060
for

00:53:30.060 --> 00:53:30.280
people

00:53:30.280 --> 00:53:30.420
who

00:53:30.420 --> 00:53:30.440
have

00:53:30.440 --> 00:53:30.580
been

00:53:30.580 --> 00:53:31.180
maintainers

00:53:31.180 --> 00:53:31.360
for

00:53:31.360 --> 00:53:31.840
longer

00:53:31.840 --> 00:53:32.340
periods

00:53:32.340 --> 00:53:32.480
of

00:53:32.480 --> 00:53:32.760
time

00:53:32.760 --> 00:53:33.060
and

00:53:33.060 --> 00:53:33.180
in

00:53:33.180 --> 00:53:33.280
a

00:53:33.280 --> 00:53:33.400
way

00:53:33.400 --> 00:53:33.560
where

00:53:33.560 --> 00:53:33.680
it's

00:53:33.680 --> 00:53:33.840
not

00:53:33.840 --> 00:53:34.000
their

00:53:34.000 --> 00:53:34.200
full

00:53:34.200 --> 00:53:34.400
time

00:53:34.400 --> 00:53:34.800
job

00:53:34.800 --> 00:53:35.020
or

00:53:35.020 --> 00:53:35.200
they

00:53:35.200 --> 00:53:35.380
have

00:53:35.380 --> 00:53:35.500
to

00:53:35.500 --> 00:53:35.620
do

00:53:35.620 --> 00:53:35.680
it

00:53:35.680 --> 00:53:35.780
on

00:53:35.780 --> 00:53:35.860
the

00:53:35.860 --> 00:53:36.160
side

00:53:36.160 --> 00:53:36.700
I

00:53:36.700 --> 00:53:37.600
have

00:53:37.600 --> 00:53:38.080
been

00:53:38.080 --> 00:53:38.200
in

00:53:38.200 --> 00:53:38.360
that

00:53:38.360 --> 00:53:38.720
position

00:53:38.720 --> 00:53:39.220
but

00:53:39.220 --> 00:53:39.360
it's

00:53:39.360 --> 00:53:39.640
already

00:53:39.640 --> 00:53:39.980
clear

00:53:39.980 --> 00:53:40.120
to

00:53:40.120 --> 00:53:40.260
me

00:53:40.260 --> 00:53:40.380
that

00:53:40.380 --> 00:53:40.560
that

00:53:40.560 --> 00:53:40.940
takes

00:53:40.940 --> 00:53:41.300
a

00:53:41.300 --> 00:53:41.560
lot

00:53:41.560 --> 00:53:41.700
of

00:53:41.700 --> 00:53:42.140
dedication

00:53:42.140 --> 00:53:42.340
and

00:53:42.340 --> 00:53:42.600
commitment

00:53:42.600 --> 00:53:43.080
so

00:53:43.080 --> 00:53:43.460
I

00:53:43.460 --> 00:53:44.360
feel

00:53:44.360 --> 00:53:44.560
very

00:53:44.560 --> 00:53:44.800
lucky

00:53:44.800 --> 00:53:44.960
that

00:53:44.960 --> 00:53:45.040
I

00:53:45.040 --> 00:53:45.140
get

00:53:45.140 --> 00:53:45.260
to

00:53:45.260 --> 00:53:45.420
work

00:53:45.420 --> 00:53:45.540
on

00:53:45.540 --> 00:53:45.740
open

00:53:45.740 --> 00:53:46.000
source

00:53:46.000 --> 00:53:46.180
full

00:53:46.180 --> 00:53:46.420
time

00:53:46.420 --> 00:53:46.540
I

00:53:46.540 --> 00:53:46.680
know

00:53:46.680 --> 00:53:46.820
it's

00:53:46.820 --> 00:53:46.980
not

00:53:46.980 --> 00:53:47.140
all

00:53:47.140 --> 00:53:47.480
entirely

00:53:47.480 --> 00:53:47.820
luck

00:53:47.820 --> 00:53:48.040
right

00:53:48.040 --> 00:53:48.280
like

00:53:48.280 --> 00:53:48.500
you

00:53:48.500 --> 00:53:49.680
increase

00:53:49.680 --> 00:53:49.820
your

00:53:49.820 --> 00:53:50.000
luck

00:53:50.000 --> 00:53:50.300
surface

00:53:50.300 --> 00:53:50.600
area

00:53:50.600 --> 00:53:50.760
and

00:53:50.760 --> 00:53:51.400
opportunities

00:53:51.400 --> 00:53:51.700
come

00:53:51.700 --> 00:53:51.860
your

00:53:51.860 --> 00:53:52.080
way

00:53:52.080 --> 00:53:52.320
but

00:53:52.320 --> 00:53:53.140
I

00:53:53.140 --> 00:53:53.320
do

00:53:53.320 --> 00:53:53.720
think

00:53:53.720 --> 00:53:54.260
it's

00:53:54.260 --> 00:53:54.420
a

00:53:54.420 --> 00:53:54.840
fortunate

00:53:54.840 --> 00:53:55.220
position

00:53:55.220 --> 00:53:55.500
that

00:53:55.500 --> 00:53:55.860
these

00:53:55.860 --> 00:53:56.060
kinds

00:53:56.060 --> 00:53:56.140
of

00:53:56.140 --> 00:53:56.520
opportunities

00:53:56.520 --> 00:53:56.700
do

00:53:56.700 --> 00:53:57.020
exist

00:53:57.020 --> 00:53:57.400
because

00:53:57.400 --> 00:53:57.820
maintaining

00:53:57.820 --> 00:53:58.380
popular

00:53:58.380 --> 00:53:58.640
stuff

00:53:58.640 --> 00:53:58.880
is

00:53:58.880 --> 00:53:59.340
a lot

00:53:59.340 --> 00:54:00.460
there are

00:54:00.460 --> 00:54:00.840
privileges

00:54:00.840 --> 00:54:01.060
that

00:54:01.060 --> 00:54:01.180
come

00:54:01.180 --> 00:54:01.320
with

00:54:01.320 --> 00:54:01.440
it

00:54:01.440 --> 00:54:02.020
100%

00:54:02.020 --> 00:54:02.240
but

00:54:02.240 --> 00:54:02.860
it's

00:54:02.860 --> 00:54:04.060
a lot

00:54:04.060 --> 00:54:04.180
of

00:54:04.180 --> 00:54:04.380
work

00:54:04.380 --> 00:54:04.780
and a lot

00:54:04.780 --> 00:54:04.860
of

00:54:04.860 --> 00:54:05.220
stress

00:54:05.220 --> 00:54:06.260
and a lot

00:54:06.260 --> 00:54:06.340
of

00:54:06.340 --> 00:54:06.900
responsibility

00:54:06.900 --> 00:54:07.520
and you

00:54:07.520 --> 00:54:07.660
don't

00:54:07.660 --> 00:54:07.900
necessarily

00:54:07.900 --> 00:54:08.140
have to

00:54:08.140 --> 00:54:08.360
start

00:54:08.360 --> 00:54:08.560
your

00:54:08.560 --> 00:54:08.820
own

00:54:08.820 --> 00:54:09.120
right

00:54:09.120 --> 00:54:09.440
away

00:54:09.440 --> 00:54:09.720
I

00:54:09.720 --> 00:54:10.020
didn't

00:54:10.020 --> 00:54:10.200
have

00:54:10.200 --> 00:54:10.500
gray

00:54:10.500 --> 00:54:10.760
hair

00:54:10.760 --> 00:54:11.040
before

00:54:11.040 --> 00:54:11.280
this

00:54:11.280 --> 00:54:11.700
you

00:54:11.700 --> 00:54:11.840
don't

00:54:11.840 --> 00:54:12.240
have to

00:54:12.240 --> 00:54:12.440
start

00:54:12.440 --> 00:54:12.580
your

00:54:12.580 --> 00:54:12.680
own

00:54:12.680 --> 00:54:12.820
either

00:54:12.820 --> 00:54:12.980
you

00:54:12.980 --> 00:54:13.140
could

00:54:13.140 --> 00:54:13.480
contribute

00:54:13.480 --> 00:54:13.800
to a

00:54:13.800 --> 00:54:13.960
really

00:54:13.960 --> 00:54:14.320
popular

00:54:14.320 --> 00:54:14.680
one

00:54:14.680 --> 00:54:14.900
and

00:54:14.900 --> 00:54:15.400
get

00:54:15.400 --> 00:54:15.720
into

00:54:15.720 --> 00:54:15.900
the

00:54:15.900 --> 00:54:16.240
scene

00:54:16.240 --> 00:54:16.420
and

00:54:16.420 --> 00:54:16.520
you

00:54:16.520 --> 00:54:16.640
know

00:54:16.640 --> 00:54:16.780
like

00:54:16.780 --> 00:54:17.000
Eric

00:54:17.000 --> 00:54:17.180
that

00:54:17.180 --> 00:54:17.380
sounds

00:54:17.380 --> 00:54:17.540
a little

00:54:17.540 --> 00:54:17.680
bit

00:54:17.680 --> 00:54:17.840
like

00:54:17.840 --> 00:54:17.980
your

00:54:17.980 --> 00:54:18.280
story

00:54:18.280 --> 00:54:18.520
like

00:54:18.520 --> 00:54:18.640
you

00:54:18.640 --> 00:54:18.820
were

00:54:18.820 --> 00:54:19.240
in

00:54:19.240 --> 00:54:19.380
the

00:54:19.380 --> 00:54:19.700
Django

00:54:19.700 --> 00:54:20.080
scene

00:54:20.080 --> 00:54:20.220
and

00:54:20.220 --> 00:54:20.360
then

00:54:20.360 --> 00:54:20.640
spun

00:54:20.640 --> 00:54:20.860
off

00:54:20.860 --> 00:54:21.100
from

00:54:21.100 --> 00:54:21.400
that

00:54:21.400 --> 00:54:22.000
what

00:54:22.000 --> 00:54:22.160
you

00:54:22.160 --> 00:54:22.420
are

00:54:22.420 --> 00:54:22.620
doing

00:54:22.620 --> 00:54:22.840
right

00:54:22.840 --> 00:54:23.060
yeah

00:54:23.060 --> 00:54:23.420
definitely

00:54:23.420 --> 00:54:23.780
and

00:54:23.780 --> 00:54:24.200
you know

00:54:24.200 --> 00:54:24.400
part

00:54:24.400 --> 00:54:24.580
of an

00:54:24.580 --> 00:54:24.700
open

00:54:24.700 --> 00:54:24.900
source

00:54:24.900 --> 00:54:25.260
community

00:54:25.260 --> 00:54:25.660
and

00:54:25.660 --> 00:54:26.120
definitely

00:54:26.120 --> 00:54:27.000
going to

00:54:27.000 --> 00:54:27.280
PyCon

00:54:27.280 --> 00:54:28.040
and just

00:54:28.040 --> 00:54:28.480
being

00:54:28.480 --> 00:54:28.800
surrounded

00:54:28.800 --> 00:54:28.960
by

00:54:28.960 --> 00:54:29.100
those

00:54:29.100 --> 00:54:29.320
people

00:54:29.320 --> 00:54:29.480
because

00:54:29.480 --> 00:54:29.560
that

00:54:29.560 --> 00:54:29.680
was

00:54:29.680 --> 00:54:29.900
always

00:54:29.900 --> 00:54:30.100
the

00:54:30.100 --> 00:54:30.700
it's

00:54:30.700 --> 00:54:30.880
very

00:54:30.880 --> 00:54:31.240
lonely

00:54:31.240 --> 00:54:31.640
work

00:54:31.640 --> 00:54:31.880
just

00:54:31.880 --> 00:54:32.100
to

00:54:32.100 --> 00:54:32.500
have

00:54:32.500 --> 00:54:33.060
an

00:54:33.060 --> 00:54:33.460
inbox

00:54:33.460 --> 00:54:33.600
of

00:54:33.600 --> 00:54:33.820
github

00:54:33.820 --> 00:54:34.120
issues

00:54:34.120 --> 00:54:34.340
and

00:54:34.340 --> 00:54:34.660
no

00:54:34.660 --> 00:54:35.100
inbox

00:54:35.100 --> 00:54:35.340
thank

00:54:35.340 --> 00:54:35.500
you

00:54:35.500 --> 00:54:36.180
you

00:54:36.180 --> 00:54:36.960
know

00:54:36.960 --> 00:54:37.240
and

00:54:37.240 --> 00:54:37.460
like

00:54:37.460 --> 00:54:37.720
going

00:54:37.720 --> 00:54:37.860
to

00:54:37.860 --> 00:54:38.260
conferences

00:54:38.260 --> 00:54:38.600
and that

00:54:38.600 --> 00:54:38.740
kind

00:54:38.740 --> 00:54:38.820
of

00:54:38.820 --> 00:54:39.040
stuff

00:54:39.040 --> 00:54:39.220
was

00:54:39.220 --> 00:54:39.480
really

00:54:39.480 --> 00:54:39.680
where

00:54:39.680 --> 00:54:39.840
you

00:54:39.840 --> 00:54:40.340
feel

00:54:40.340 --> 00:54:40.480
the

00:54:40.480 --> 00:54:41.020
appreciation

00:54:41.020 --> 00:54:41.300
and

00:54:41.300 --> 00:54:41.400
you

00:54:41.400 --> 00:54:41.700
really

00:54:41.700 --> 00:54:41.920
kind

00:54:41.920 --> 00:54:42.360
of

00:54:42.360 --> 00:54:42.700
actually

00:54:42.700 --> 00:54:43.020
feel

00:54:43.020 --> 00:54:43.260
the

00:54:43.260 --> 00:54:43.920
value

00:54:43.920 --> 00:54:44.100
that

00:54:44.100 --> 00:54:44.340
you're

00:54:44.340 --> 00:54:44.740
providing

00:54:44.740 --> 00:54:45.160
as well

00:54:45.160 --> 00:54:45.320
as

00:54:45.320 --> 00:54:45.540
just

00:54:45.540 --> 00:54:45.760
the

00:54:45.760 --> 00:54:46.420
stress

00:54:46.420 --> 00:54:46.620
of

00:54:46.620 --> 00:54:46.800
the

00:54:46.800 --> 00:54:47.520
things

00:54:47.520 --> 00:54:47.660
you're

00:54:47.660 --> 00:54:47.940
breaking

00:54:47.940 --> 00:54:48.340
so

00:54:48.340 --> 00:54:49.040
absolutely

00:54:49.040 --> 00:54:51.460
the

00:54:51.460 --> 00:54:51.820
conferences

00:54:51.820 --> 00:54:52.240
are great

00:54:52.240 --> 00:54:52.720
to really

00:54:52.720 --> 00:54:53.340
feel the

00:54:53.340 --> 00:54:53.920
appreciation

00:54:53.920 --> 00:54:54.480
rather than

00:54:54.480 --> 00:54:54.720
just

00:54:54.720 --> 00:54:54.980
the

00:54:54.980 --> 00:54:55.940
request

00:54:55.940 --> 00:54:56.320
they'll

00:54:56.320 --> 00:54:56.480
say

00:54:56.480 --> 00:54:56.820
thank you

00:54:56.820 --> 00:54:57.060
and then

00:54:57.060 --> 00:54:57.200
they'll

00:54:57.200 --> 00:54:57.420
give you

00:54:57.420 --> 00:54:57.640
a bug

00:54:57.640 --> 00:54:58.000
report

00:54:58.000 --> 00:54:58.360
but at

00:54:58.360 --> 00:54:58.460
least

00:54:58.460 --> 00:54:58.620
the

00:54:58.620 --> 00:54:58.800
thank

00:54:58.800 --> 00:54:58.960
you

00:54:58.960 --> 00:55:01.440
I'm

00:55:01.440 --> 00:55:01.740
talking

00:55:01.740 --> 00:55:01.980
to

00:55:01.980 --> 00:55:02.120
you

00:55:02.120 --> 00:55:02.640
there

00:55:02.640 --> 00:55:02.800
is

00:55:02.800 --> 00:55:02.940
this

00:55:02.940 --> 00:55:03.080
can

00:55:03.080 --> 00:55:03.180
I

00:55:03.180 --> 00:55:03.360
just

00:55:03.360 --> 00:55:03.560
show

00:55:03.560 --> 00:55:03.680
you

00:55:03.680 --> 00:55:03.880
this

00:55:03.880 --> 00:55:07.460
an

00:55:07.460 --> 00:55:07.720
interesting

00:55:07.720 --> 00:55:08.220
observation

00:55:08.220 --> 00:55:08.700
for me

00:55:08.700 --> 00:55:10.220
a year

00:55:10.220 --> 00:55:10.460
ago

00:55:10.460 --> 00:55:10.620
I

00:55:10.620 --> 00:55:10.780
didn't

00:55:10.780 --> 00:55:11.200
know

00:55:11.200 --> 00:55:11.620
anyone

00:55:11.620 --> 00:55:11.820
in

00:55:11.820 --> 00:55:12.100
Python

00:55:12.100 --> 00:55:12.340
open

00:55:12.340 --> 00:55:12.740
source

00:55:12.740 --> 00:55:13.980
at all

00:55:13.980 --> 00:55:14.980
I was

00:55:14.980 --> 00:55:15.360
a user

00:55:15.360 --> 00:55:15.920
of Python

00:55:15.920 --> 00:55:16.300
in my

00:55:16.300 --> 00:55:16.720
day job

00:55:16.720 --> 00:55:16.940
every

00:55:16.940 --> 00:55:17.220
day

00:55:17.220 --> 00:55:17.760
but I

00:55:17.760 --> 00:55:18.400
was not

00:55:18.400 --> 00:55:19.060
interacting

00:55:19.060 --> 00:55:19.380
with Python

00:55:19.380 --> 00:55:19.860
in a

00:55:19.860 --> 00:55:20.140
year

00:55:20.140 --> 00:55:20.920
now

00:55:20.920 --> 00:55:21.180
like

00:55:21.180 --> 00:55:21.580
Sebastian

00:55:21.580 --> 00:55:22.080
we've

00:55:22.080 --> 00:55:22.420
interacted

00:55:22.420 --> 00:55:22.800
a bunch

00:55:22.800 --> 00:55:23.180
there's

00:55:23.180 --> 00:55:23.560
a lot

00:55:23.560 --> 00:55:23.660
of

00:55:23.660 --> 00:55:23.880
people

00:55:23.880 --> 00:55:24.080
that

00:55:24.080 --> 00:55:24.260
I've

00:55:24.260 --> 00:55:24.400
come

00:55:24.400 --> 00:55:24.580
to

00:55:24.580 --> 00:55:24.900
know

00:55:24.900 --> 00:55:25.220
and

00:55:25.220 --> 00:55:25.420
think

00:55:25.420 --> 00:55:25.540
of

00:55:25.540 --> 00:55:25.680
as

00:55:25.680 --> 00:55:26.100
friends

00:55:26.100 --> 00:55:26.360
so

00:55:26.360 --> 00:55:26.500
I

00:55:26.500 --> 00:55:26.700
think

00:55:26.700 --> 00:55:28.140
especially

00:55:28.140 --> 00:55:28.300
if

00:55:28.300 --> 00:55:28.400
you're

00:55:28.400 --> 00:55:28.780
interested

00:55:28.780 --> 00:55:29.000
in

00:55:29.000 --> 00:55:29.220
getting

00:55:29.220 --> 00:55:29.580
involved

00:55:29.580 --> 00:55:29.780
and

00:55:29.780 --> 00:55:30.200
putting

00:55:30.200 --> 00:55:30.560
in

00:55:30.560 --> 00:55:30.840
work

00:55:30.840 --> 00:55:30.980
I

00:55:30.980 --> 00:55:31.160
really

00:55:31.160 --> 00:55:31.360
don't

00:55:31.360 --> 00:55:31.600
think

00:55:31.600 --> 00:55:31.840
there

00:55:31.840 --> 00:55:32.520
are

00:55:32.520 --> 00:55:33.060
significant

00:55:33.060 --> 00:55:33.520
barriers

00:55:33.520 --> 00:55:34.140
and

00:55:34.140 --> 00:55:35.160
you get

00:55:35.160 --> 00:55:35.380
out of

00:55:35.380 --> 00:55:35.480
it

00:55:35.480 --> 00:55:35.620
what

00:55:35.620 --> 00:55:35.740
you

00:55:35.740 --> 00:55:35.900
put

00:55:35.900 --> 00:55:36.100
in

00:55:36.100 --> 00:55:36.440
so

00:55:36.440 --> 00:55:36.940
I

00:55:36.940 --> 00:55:37.180
think

00:55:37.180 --> 00:55:37.680
I've

00:55:37.680 --> 00:55:37.760
been

00:55:37.760 --> 00:55:37.920
very

00:55:37.920 --> 00:55:38.220
impressed

00:55:38.220 --> 00:55:38.400
with

00:55:38.400 --> 00:55:38.540
just

00:55:38.540 --> 00:55:38.700
how

00:55:38.700 --> 00:55:39.000
welcoming

00:55:39.000 --> 00:55:39.200
and

00:55:39.200 --> 00:55:39.380
friendly

00:55:39.380 --> 00:55:39.600
the

00:55:39.600 --> 00:55:39.980
community

00:55:39.980 --> 00:55:40.340
has been

00:55:40.340 --> 00:55:40.660
especially

00:55:40.660 --> 00:55:40.860
other

00:55:40.860 --> 00:55:41.420
maintainers

00:55:41.420 --> 00:55:41.660
yeah

00:55:41.660 --> 00:55:42.120
absolutely

00:55:42.120 --> 00:55:42.920
talk to a lot

00:55:42.920 --> 00:55:43.160
of people

00:55:43.160 --> 00:55:43.680
who show up

00:55:43.680 --> 00:55:44.080
at PyCon

00:55:44.080 --> 00:55:44.440
and they're

00:55:44.440 --> 00:55:44.820
like I was

00:55:44.820 --> 00:55:45.300
really nervous

00:55:45.300 --> 00:55:45.660
to come

00:55:45.660 --> 00:55:45.960
here

00:55:45.960 --> 00:55:46.520
or I feel

00:55:46.520 --> 00:55:46.800
like it

00:55:46.800 --> 00:55:47.060
didn't

00:55:47.060 --> 00:55:47.520
fit in

00:55:47.520 --> 00:55:47.940
and they're

00:55:47.940 --> 00:55:48.280
you know

00:55:48.280 --> 00:55:48.740
just had

00:55:48.740 --> 00:55:49.220
such a

00:55:49.220 --> 00:55:49.680
great

00:55:49.680 --> 00:55:50.160
experience

00:55:50.160 --> 00:55:50.660
and I

00:55:50.660 --> 00:55:50.920
said well

00:55:50.920 --> 00:55:51.260
did you

00:55:51.260 --> 00:55:51.440
feel

00:55:51.440 --> 00:55:51.920
like

00:55:51.920 --> 00:55:52.900
that was

00:55:52.900 --> 00:55:53.000
my

00:55:53.000 --> 00:55:53.220
first

00:55:53.220 --> 00:55:53.560
PyCon

00:55:53.560 --> 00:55:53.780
this

00:55:53.780 --> 00:55:53.900
year

00:55:53.900 --> 00:55:54.040
I'd

00:55:54.040 --> 00:55:54.180
never

00:55:54.180 --> 00:55:54.360
been

00:55:54.360 --> 00:55:54.560
to a

00:55:54.560 --> 00:55:54.680
fight

00:55:54.680 --> 00:55:55.580
on

00:55:55.580 --> 00:55:55.980
conference

00:55:55.980 --> 00:55:56.300
and so

00:55:56.300 --> 00:55:56.500
I was

00:55:56.500 --> 00:55:56.660
like

00:55:56.660 --> 00:55:56.900
we did

00:55:56.900 --> 00:55:57.180
up at

00:55:57.180 --> 00:55:57.420
such

00:55:57.420 --> 00:55:57.540
an

00:55:57.540 --> 00:55:57.860
amazing

00:55:57.860 --> 00:55:58.620
party

00:55:58.620 --> 00:56:01.080
that's

00:56:01.080 --> 00:56:01.280
true

00:56:01.280 --> 00:56:03.880
that was

00:56:03.880 --> 00:56:04.320
interesting

00:56:04.320 --> 00:56:04.780
all right

00:56:04.780 --> 00:56:05.020
guys

00:56:05.020 --> 00:56:05.640
well I

00:56:05.640 --> 00:56:06.100
think we

00:56:06.100 --> 00:56:06.500
are

00:56:06.500 --> 00:56:07.140
pretty

00:56:07.140 --> 00:56:07.440
much

00:56:07.440 --> 00:56:07.700
out

00:56:07.700 --> 00:56:07.820
of

00:56:07.820 --> 00:56:08.160
time

00:56:08.160 --> 00:56:08.560
anyone

00:56:08.560 --> 00:56:08.860
want to

00:56:08.860 --> 00:56:09.000
have

00:56:09.000 --> 00:56:09.260
some

00:56:09.260 --> 00:56:09.640
final

00:56:09.640 --> 00:56:09.920
thoughts

00:56:09.920 --> 00:56:10.080
for

00:56:10.080 --> 00:56:10.360
listeners

00:56:10.360 --> 00:56:10.660
before

00:56:10.660 --> 00:56:10.840
we

00:56:10.840 --> 00:56:11.060
wrap

00:56:11.060 --> 00:56:11.160
it

00:56:11.160 --> 00:56:11.320
up

00:56:11.320 --> 00:56:11.600
go

00:56:11.600 --> 00:56:11.760
and

00:56:11.760 --> 00:56:11.900
build

00:56:11.900 --> 00:56:12.060
some

00:56:12.060 --> 00:56:12.300
cool

00:56:12.300 --> 00:56:12.540
stuff

00:56:12.540 --> 00:56:12.880
who's

00:56:12.880 --> 00:56:13.080
brave

00:56:13.080 --> 00:56:13.620
enough

00:56:13.620 --> 00:56:15.080
how

00:56:15.080 --> 00:56:15.260
can

00:56:15.260 --> 00:56:15.580
maintain

00:56:15.580 --> 00:56:15.700
it

00:56:15.700 --> 00:56:15.920
today

00:56:15.920 --> 00:56:16.080
I

00:56:16.080 --> 00:56:16.300
think

00:56:16.300 --> 00:56:16.620
give

00:56:16.620 --> 00:56:16.960
cake

00:56:16.960 --> 00:56:17.300
not

00:56:17.300 --> 00:56:17.700
puppies

00:56:17.700 --> 00:56:18.280
let's

00:56:18.280 --> 00:56:18.460
leave

00:56:18.460 --> 00:56:18.540
it

00:56:18.540 --> 00:56:18.660
with

00:56:18.660 --> 00:56:18.860
that

00:56:18.860 --> 00:56:19.100
huh

00:56:19.100 --> 00:56:19.620
all right

00:56:19.620 --> 00:56:19.800
give

00:56:19.800 --> 00:56:20.040
cake

00:56:20.040 --> 00:56:20.240
not

00:56:20.240 --> 00:56:20.560
puppies

00:56:20.560 --> 00:56:21.000
and be

00:56:21.000 --> 00:56:21.360
really

00:56:21.360 --> 00:56:21.780
careful

00:56:21.780 --> 00:56:22.320
before you

00:56:22.320 --> 00:56:22.720
start a

00:56:22.720 --> 00:56:23.000
popular

00:56:23.000 --> 00:56:23.500
source

00:56:23.500 --> 00:56:23.880
project

00:56:23.880 --> 00:56:24.120
it

00:56:24.120 --> 00:56:24.480
might

00:56:24.480 --> 00:56:24.760
take

00:56:24.760 --> 00:56:24.940
over

00:56:24.940 --> 00:56:25.100
your

00:56:25.100 --> 00:56:25.360
life

00:56:25.360 --> 00:56:26.180
if

00:56:26.180 --> 00:56:26.280
you

00:56:26.280 --> 00:56:26.540
want

00:56:26.540 --> 00:56:26.780
this

00:56:26.780 --> 00:56:27.180
great

00:56:27.180 --> 00:56:27.440
but

00:56:27.440 --> 00:56:27.600
if

00:56:27.600 --> 00:56:27.920
not

00:56:27.920 --> 00:56:28.200
then

00:56:28.200 --> 00:56:28.980
yeah

00:56:28.980 --> 00:56:29.320
careful

00:56:29.320 --> 00:56:29.480
what

00:56:29.480 --> 00:56:29.560
you

00:56:29.560 --> 00:56:29.740
wish

00:56:29.740 --> 00:56:29.900
for

00:56:29.900 --> 00:56:30.020
you

00:56:30.020 --> 00:56:30.200
might

00:56:30.200 --> 00:56:30.380
get

00:56:30.380 --> 00:56:30.500
it

00:56:30.500 --> 00:56:30.880
exactly

00:56:30.880 --> 00:56:31.320
Gina

00:56:31.320 --> 00:56:32.160
Sebastian

00:56:32.160 --> 00:56:32.920
Eric

00:56:32.920 --> 00:56:33.520
Will

00:56:33.520 --> 00:56:34.120
Charlie

00:56:34.120 --> 00:56:34.660
thank you

00:56:34.660 --> 00:56:35.140
all for

00:56:35.140 --> 00:56:35.300
being

00:56:35.300 --> 00:56:35.520
on the

00:56:35.520 --> 00:56:35.760
show

00:56:35.760 --> 00:56:36.040
this

00:56:36.040 --> 00:56:36.140
has

00:56:36.140 --> 00:56:36.260
been

00:56:36.260 --> 00:56:36.360
a

00:56:36.360 --> 00:56:36.480
a ton

00:56:36.480 --> 00:56:36.560
of

00:56:36.560 --> 00:56:36.760
fun

00:56:36.760 --> 00:56:37.000
thank

00:56:37.000 --> 00:56:37.120
you

00:56:37.120 --> 00:56:37.260
very

00:56:37.260 --> 00:56:37.440
much

00:56:37.440 --> 00:56:37.560
for

00:56:37.560 --> 00:56:37.860
having

00:56:37.860 --> 00:56:38.140
us

00:56:38.140 --> 00:56:38.400
a

00:56:38.400 --> 00:56:38.680
pleasure

00:56:38.680 --> 00:56:39.000
and

00:56:39.000 --> 00:56:39.300
honor

00:56:39.300 --> 00:56:39.720
to

00:56:39.720 --> 00:56:39.920
be

00:56:39.920 --> 00:56:40.160
with

00:56:40.160 --> 00:56:40.520
these

00:56:40.520 --> 00:56:40.920
amazing

00:56:40.920 --> 00:56:41.300
people

00:56:41.300 --> 00:56:41.800
thank

00:56:41.800 --> 00:56:41.960
you

00:56:41.960 --> 00:56:42.120
for

00:56:42.120 --> 00:56:42.240
the

00:56:42.240 --> 00:56:42.500
invitation

00:56:42.500 --> 00:56:42.660
I

00:56:42.660 --> 00:56:42.840
agree

00:56:42.840 --> 00:56:43.340
honestly

00:56:43.340 --> 00:56:43.620
I

00:56:43.620 --> 00:56:43.820
had a

00:56:43.820 --> 00:56:44.040
blast

00:56:44.040 --> 00:56:44.240
just

00:56:44.240 --> 00:56:44.560
hearing

00:56:44.560 --> 00:56:45.000
everyone's

00:56:45.000 --> 00:56:45.300
stories

00:56:45.300 --> 00:56:45.500
because

00:56:45.500 --> 00:56:45.640
I

00:56:45.640 --> 00:56:45.860
hadn't

00:56:45.860 --> 00:56:46.040
heard

00:56:46.040 --> 00:56:46.260
any

00:56:46.260 --> 00:56:46.380
of

00:56:46.380 --> 00:56:46.520
this

00:56:46.520 --> 00:56:46.820
before

00:56:46.820 --> 00:56:47.160
so

00:56:47.160 --> 00:56:47.720
thanks

00:56:47.720 --> 00:56:48.040
thanks

00:56:48.040 --> 00:56:48.160
to

00:56:48.160 --> 00:56:48.360
everyone

00:56:48.360 --> 00:56:48.600
else

00:56:48.600 --> 00:56:48.760
and

00:56:48.760 --> 00:56:48.940
thanks

00:56:48.940 --> 00:56:49.200
Michael

00:56:49.200 --> 00:56:49.420
yeah

00:56:49.420 --> 00:56:49.580
you

00:56:49.580 --> 00:56:49.760
bet

00:56:49.760 --> 00:56:50.160
bye

00:56:50.160 --> 00:56:50.200
bye

00:56:50.200 --> 00:56:50.480
bye

00:56:50.480 --> 00:56:50.660
bye

00:56:50.660 --> 00:56:50.860
bye

00:56:50.860 --> 00:56:51.880
this

00:56:51.880 --> 00:56:52.060
has

00:56:52.060 --> 00:56:52.180
been

00:56:52.180 --> 00:56:52.420
another

00:56:52.420 --> 00:56:52.800
episode

00:56:52.800 --> 00:56:53.100
of

00:56:53.100 --> 00:56:53.420
talk

00:56:53.420 --> 00:56:53.780
python

00:56:53.780 --> 00:56:53.980
to

00:56:53.980 --> 00:56:54.160
me

00:56:54.160 --> 00:56:55.200
thank you

00:56:55.200 --> 00:56:55.320
to

00:56:55.320 --> 00:56:55.480
our

00:56:55.480 --> 00:56:55.980
sponsors

00:56:55.980 --> 00:56:56.640
be sure

00:56:56.640 --> 00:56:56.780
to

00:56:56.780 --> 00:56:56.940
check

00:56:56.940 --> 00:56:57.040
out

00:56:57.040 --> 00:56:57.140
what

00:56:57.140 --> 00:56:57.260
they're

00:56:57.260 --> 00:56:57.580
offering

00:56:57.580 --> 00:56:57.800
it

00:56:57.800 --> 00:56:58.080
really

00:56:58.080 --> 00:56:58.360
helps

00:56:58.360 --> 00:56:58.640
support

00:56:58.640 --> 00:56:58.800
the

00:56:58.800 --> 00:56:58.980
show

00:56:58.980 --> 00:57:00.160
this

00:57:00.160 --> 00:57:00.700
episode

00:57:00.700 --> 00:57:01.000
is

00:57:01.000 --> 00:57:01.340
sponsored

00:57:01.340 --> 00:57:01.740
by

00:57:01.740 --> 00:57:02.200
base

00:57:02.200 --> 00:57:02.560
dash

00:57:02.560 --> 00:57:03.180
base

00:57:03.180 --> 00:57:03.480
dash

00:57:03.480 --> 00:57:03.820
uses

00:57:03.820 --> 00:57:04.180
AI

00:57:04.180 --> 00:57:04.480
to

00:57:04.480 --> 00:57:04.720
build

00:57:04.720 --> 00:57:04.920
a

00:57:04.920 --> 00:57:05.460
dashboard

00:57:05.460 --> 00:57:05.840
for

00:57:05.840 --> 00:57:06.080
your

00:57:06.080 --> 00:57:06.600
database

00:57:06.600 --> 00:57:07.460
get

00:57:07.460 --> 00:57:07.680
a

00:57:07.680 --> 00:57:08.060
custom

00:57:08.060 --> 00:57:08.460
admin

00:57:08.460 --> 00:57:08.840
view

00:57:08.840 --> 00:57:09.140
in

00:57:09.140 --> 00:57:09.340
your

00:57:09.340 --> 00:57:09.920
postgres

00:57:09.920 --> 00:57:10.420
Microsoft

00:57:10.420 --> 00:57:10.740
SQL

00:57:10.740 --> 00:57:11.080
server

00:57:11.080 --> 00:57:11.460
my

00:57:11.460 --> 00:57:11.840
SQL

00:57:11.840 --> 00:57:12.560
Maria

00:57:12.560 --> 00:57:12.800
DB

00:57:12.800 --> 00:57:13.200
or

00:57:13.200 --> 00:57:13.900
Redshift

00:57:13.900 --> 00:57:14.520
database

00:57:14.520 --> 00:57:15.080
get

00:57:15.080 --> 00:57:15.340
started

00:57:15.340 --> 00:57:15.760
for free

00:57:15.760 --> 00:57:15.980
at

00:57:15.980 --> 00:57:17.100
talkpython.fm

00:57:17.100 --> 00:57:17.660
slash

00:57:17.660 --> 00:57:18.220
base

00:57:18.220 --> 00:57:18.540
dash

00:57:18.540 --> 00:57:19.600
take

00:57:19.600 --> 00:57:19.800
some

00:57:19.800 --> 00:57:20.140
stress

00:57:20.140 --> 00:57:20.420
out of

00:57:20.420 --> 00:57:20.540
your

00:57:20.540 --> 00:57:20.840
life

00:57:20.840 --> 00:57:21.340
get

00:57:21.340 --> 00:57:21.780
notified

00:57:21.780 --> 00:57:22.360
immediately

00:57:22.360 --> 00:57:22.720
about

00:57:22.720 --> 00:57:23.120
errors

00:57:23.120 --> 00:57:23.560
and

00:57:23.560 --> 00:57:24.040
performance

00:57:24.040 --> 00:57:24.440
issues

00:57:24.440 --> 00:57:24.880
in your

00:57:24.880 --> 00:57:25.180
web

00:57:25.180 --> 00:57:25.560
or mobile

00:57:25.560 --> 00:57:26.060
applications

00:57:26.060 --> 00:57:26.320
with

00:57:26.320 --> 00:57:26.640
Sentry

00:57:26.640 --> 00:57:27.380
just

00:57:27.380 --> 00:57:27.740
visit

00:57:27.740 --> 00:57:29.100
talkpython.fm

00:57:29.100 --> 00:57:29.560
slash

00:57:29.560 --> 00:57:30.080
Sentry

00:57:30.080 --> 00:57:30.840
and get

00:57:30.840 --> 00:57:31.140
started

00:57:31.140 --> 00:57:31.620
for free

00:57:31.620 --> 00:57:32.300
and be

00:57:32.300 --> 00:57:32.560
sure to

00:57:32.560 --> 00:57:32.880
use the

00:57:32.880 --> 00:57:33.120
promo

00:57:33.120 --> 00:57:33.480
code

00:57:33.480 --> 00:57:34.420
talkpython

00:57:34.420 --> 00:57:34.980
all one

00:57:34.980 --> 00:57:35.240
word

00:57:35.240 --> 00:57:36.320
want to

00:57:36.320 --> 00:57:36.660
level up

00:57:36.660 --> 00:57:36.780
your

00:57:36.780 --> 00:57:37.080
python

00:57:37.080 --> 00:57:37.700
we have

00:57:37.700 --> 00:57:37.980
one of

00:57:37.980 --> 00:57:38.460
the largest

00:57:38.460 --> 00:57:39.200
catalogs

00:57:39.200 --> 00:57:39.660
of python

00:57:39.660 --> 00:57:40.240
video courses

00:57:40.240 --> 00:57:40.660
over at

00:57:40.660 --> 00:57:41.180
talkpython

00:57:41.180 --> 00:57:42.020
our content

00:57:42.020 --> 00:57:42.820
ranges from

00:57:42.820 --> 00:57:43.440
true beginners

00:57:43.440 --> 00:57:44.140
to deeply

00:57:44.140 --> 00:57:44.900
advanced topics

00:57:44.900 --> 00:57:45.520
like memory

00:57:45.520 --> 00:57:46.260
and async

00:57:46.260 --> 00:57:47.080
and best of

00:57:47.080 --> 00:57:47.680
all there's

00:57:47.680 --> 00:57:47.960
not a

00:57:47.960 --> 00:57:48.420
subscription

00:57:48.420 --> 00:57:48.940
in sight

00:57:48.940 --> 00:57:49.540
check it

00:57:49.540 --> 00:57:49.760
out for

00:57:49.760 --> 00:57:50.040
yourself

00:57:50.040 --> 00:57:50.280
at

00:57:50.280 --> 00:57:51.840
training.talkpython.fm

00:57:51.840 --> 00:57:52.960
be sure to

00:57:52.960 --> 00:57:53.580
subscribe to

00:57:53.580 --> 00:57:53.940
the show

00:57:53.940 --> 00:57:54.520
open your

00:57:54.520 --> 00:57:55.340
favorite podcast

00:57:55.340 --> 00:57:56.000
app and

00:57:56.000 --> 00:57:56.420
search for

00:57:56.420 --> 00:57:56.800
python

00:57:56.800 --> 00:57:57.380
we should

00:57:57.380 --> 00:57:57.640
be right

00:57:57.640 --> 00:57:57.820
at the

00:57:57.820 --> 00:57:58.040
top

00:57:58.040 --> 00:57:58.740
you can

00:57:58.740 --> 00:57:59.300
also find

00:57:59.300 --> 00:57:59.480
the

00:57:59.480 --> 00:58:00.100
iTunes feed

00:58:00.100 --> 00:58:00.260
at

00:58:00.260 --> 00:58:00.560
slash

00:58:00.560 --> 00:58:01.000
iTunes

00:58:01.000 --> 00:58:01.520
the

00:58:01.520 --> 00:58:01.740
Google

00:58:01.740 --> 00:58:02.020
play

00:58:02.020 --> 00:58:02.260
feed

00:58:02.260 --> 00:58:02.440
at

00:58:02.440 --> 00:58:02.740
slash

00:58:02.740 --> 00:58:03.200
play

00:58:03.200 --> 00:58:03.820
and the

00:58:03.820 --> 00:58:04.120
direct

00:58:04.120 --> 00:58:04.820
RSS feed

00:58:04.820 --> 00:58:05.020
at

00:58:05.020 --> 00:58:05.420
slash

00:58:05.420 --> 00:58:05.860
RSS

00:58:05.860 --> 00:58:06.400
on

00:58:06.400 --> 00:58:07.400
talkpython.fm

00:58:07.400 --> 00:58:08.540
we're live

00:58:08.540 --> 00:58:09.440
streaming most of our

00:58:09.440 --> 00:58:10.360
recordings these days

00:58:10.360 --> 00:58:13.760
if you want to be part of the show and have your comments featured on the air

00:58:13.760 --> 00:58:17.740
be sure to subscribe to our YouTube channel at talkpython.fm slash

00:58:17.740 --> 00:58:18.240
YouTube

00:58:18.240 --> 00:58:20.240
this is your host Michael Kennedy

00:58:20.240 --> 00:58:24.280
thanks so much for listening I really appreciate it now get out there and write some Python

00:58:24.280 --> 00:58:24.620
code

00:58:24.620 --> 00:58:30.300
Music

00:58:30.300 --> 00:58:31.620
Music

00:58:31.620 --> 00:58:33.740
Music

00:58:33.740 --> 00:58:38.760
Music

00:58:38.760 --> 00:58:43.820
Music

00:58:43.820 --> 00:58:45.440
Music