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
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
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