WEBVTT

NOTE
This file was generated by Descript 

00:00:02.781 --> 00:00:04.351
CJ: What is up, Colin?

00:00:04.351 --> 00:00:04.891
How's it going?

00:00:05.295 --> 00:00:05.885
Colin: Pretty good.

00:00:05.895 --> 00:00:07.195
How's how's the week?

00:00:07.767 --> 00:00:08.307
CJ: It's great.

00:00:08.317 --> 00:00:10.337
This is the final week of school.

00:00:10.537 --> 00:00:12.207
The kids are done.

00:00:12.227 --> 00:00:15.457
Officially done with elementary
school, which is just mind blowing.

00:00:15.957 --> 00:00:16.777
So, yeah.

00:00:16.807 --> 00:00:20.017
It's all intermediate
school and beyond from here.

00:00:20.027 --> 00:00:20.637
Colin: Very cool.

00:00:20.687 --> 00:00:24.157
CJ: Lots of end of year activities.

00:00:24.157 --> 00:00:28.157
They've had like field days and
field trips and plays and all kinds

00:00:28.157 --> 00:00:29.407
of stuff wrapping up the year.

00:00:29.927 --> 00:00:30.577
And,

00:00:30.627 --> 00:00:31.277
Colin: it's summertime.

00:00:31.552 --> 00:00:33.452
CJ: I think they're,
yeah, it's summertime.

00:00:33.482 --> 00:00:34.592
It is full, yeah.

00:00:34.592 --> 00:00:35.752
Full force summertime.

00:00:36.052 --> 00:00:39.292
Last night we did a little fire
pit in the backyard and they were

00:00:39.292 --> 00:00:43.122
jumping on the trampoline and
just, yeah, it feels awesome.

00:00:43.282 --> 00:00:43.672
So,

00:00:43.827 --> 00:00:44.167
Colin: cool.

00:00:44.682 --> 00:00:45.202
How about you?

00:00:45.222 --> 00:00:46.662
Getting out, doing anything?

00:00:47.612 --> 00:00:48.722
Fitness wise?

00:00:48.977 --> 00:00:51.047
CJ: we're yeah.

00:00:51.147 --> 00:00:52.077
Lots of.

00:00:52.742 --> 00:00:53.582
Lots of fun stuff.

00:00:53.582 --> 00:00:59.062
So we went for the first time ever to
visit New York city a couple weekends ago.

00:00:59.682 --> 00:01:04.962
And Nicole and I booked classes
where you can take classes at

00:01:04.972 --> 00:01:08.392
the Peloton studios in NYC PSNY.

00:01:08.592 --> 00:01:12.962
So we went to went to the studio
and did two live rides with Camila

00:01:12.962 --> 00:01:15.892
Ramon and one was a reggaeton ride.

00:01:15.902 --> 00:01:18.962
And one was like a low
impact ride in the studio.

00:01:18.962 --> 00:01:20.002
It was so awesome.

00:01:20.012 --> 00:01:21.212
Like it is.

00:01:21.832 --> 00:01:23.582
A full on experience to go there.

00:01:23.582 --> 00:01:25.372
It's like an Apple store type thing.

00:01:25.372 --> 00:01:29.682
And you go in and they have all these
different bike studios that when you're

00:01:29.702 --> 00:01:33.552
inside them feel like super, super
legit, almost like movie studios.

00:01:34.042 --> 00:01:36.602
And there's, I don't know,
it was, it was cool to see.

00:01:37.152 --> 00:01:40.222
The instructors, we bumped into a
handful of like Peloton instructors

00:01:40.312 --> 00:01:45.502
and the, when you see them on camera,
you think they're just normal.

00:01:45.902 --> 00:01:48.352
Like they've got like the
same energy that you have, you

00:01:48.352 --> 00:01:50.062
know, you're like what's yeah.

00:01:50.062 --> 00:01:53.732
What's mind blowing is that in
person you can tell that their energy

00:01:53.742 --> 00:01:59.012
is like level 9, 000 and they're
like just so pumped and so on.

00:01:59.102 --> 00:01:59.632
It's.

00:01:59.842 --> 00:02:01.592
It was really, really impressive to watch.

00:02:01.602 --> 00:02:07.532
She was like speaking in English, speaking
in Spanish, like singing lyrics, giving

00:02:07.532 --> 00:02:13.082
instructions, dancing, like every single
like millisecond of the entire production.

00:02:13.342 --> 00:02:16.597
She was just like on point
and it was, it was, Amazing.

00:02:16.597 --> 00:02:17.557
It was so cool to see.

00:02:18.037 --> 00:02:20.237
And yeah, it was, it was tons of fun.

00:02:20.237 --> 00:02:26.037
It also like inspired me to put more
energy into like my own YouTube videos.

00:02:26.117 --> 00:02:31.187
Like they're not, they're not exercise
videos obviously, but like definitely

00:02:31.307 --> 00:02:34.747
It was inspiring to just be like
way over the top and super energetic

00:02:34.747 --> 00:02:38.677
and super, you know, enthusiastic
about whatever's going on because

00:02:38.677 --> 00:02:40.337
I think it just makes for better

00:02:40.662 --> 00:02:41.052
Colin: Yeah.

00:02:41.102 --> 00:02:45.772
Are those rides that are, are those
being cast to people who are at home?

00:02:47.107 --> 00:02:47.417
CJ: yes.

00:02:47.427 --> 00:02:50.217
So their lives, if you're at
home, you could take it or

00:02:50.527 --> 00:02:51.557
you can take it later to you.

00:02:51.567 --> 00:02:53.067
Like they they record
them and take them on

00:02:53.372 --> 00:02:54.552
Colin: that's kind of like
what we've talked about.

00:02:54.552 --> 00:02:59.472
Like when you record anything, you kind
of have to dial it up so that it comes

00:02:59.472 --> 00:03:04.102
across at a hundred when you're watching
it, because when you record it, if you

00:03:04.102 --> 00:03:05.942
record it at 90, it's going to be like 70.

00:03:06.102 --> 00:03:08.852
And so you got it to go at 130.

00:03:08.977 --> 00:03:11.437
And that's something I
try to practice here.

00:03:11.917 --> 00:03:15.557
The other thing that reminds me is
like the Aeros tour and Taylor Swift.

00:03:15.907 --> 00:03:20.867
I think both Taylor Swift and then
Beyonce for her things, like they will

00:03:20.907 --> 00:03:27.727
sing their songs on a treadmill and
just like training, cross training,

00:03:27.727 --> 00:03:32.317
like doing, you know, taking it to 9,
000 and so that they can, you know, be

00:03:32.327 --> 00:03:37.407
physically fit to pull off these amazing
shows and have, you know, such like.

00:03:37.662 --> 00:03:42.932
physicality and presence in, in all
the things that they do, which takes

00:03:42.932 --> 00:03:46.112
a lot and it's hard to see when
you see it like just on a screen.

00:03:46.112 --> 00:03:48.702
Yeah.

00:03:48.747 --> 00:03:52.737
CJ: don't really appreciate it nearly
as much until you're in person.

00:03:52.757 --> 00:03:57.097
And yeah, you got glitter flying
all over the room and it's like,

00:03:57.442 --> 00:04:02.642
Colin: Peloton is an interesting one to me
because like I, so as like, as far as like

00:04:02.652 --> 00:04:06.552
stocks and stuff, I mostly do indexes,
but Peloton is one that I had been

00:04:06.552 --> 00:04:12.752
buying just because it was so low for so
long, but obviously it had a huge surge.

00:04:12.852 --> 00:04:13.932
During COVID right.

00:04:13.932 --> 00:04:18.962
And then a lot of the cycling companies,
the tech companies around fitness and

00:04:18.962 --> 00:04:23.332
running and all these things have kind
of taken a huge hit since, since things

00:04:23.332 --> 00:04:27.572
opened back up, but like this experience
you're talking about is like hard

00:04:27.652 --> 00:04:29.642
to pull off for somebody else to do.

00:04:30.022 --> 00:04:35.442
And I see this in the hotels now where you
can just like, they have Pelotons where

00:04:35.442 --> 00:04:39.612
you can sign in with your own account and
like you can train, you know, you're not.

00:04:39.847 --> 00:04:43.227
Using some foreign equipment, it's
the brand and people want to use it.

00:04:43.497 --> 00:04:46.257
Cause I think Peloton users that
I've talked to, like, they love it.

00:04:46.337 --> 00:04:48.367
I've actually never used one.

00:04:48.777 --> 00:04:51.387
We've talked about you and your
treadmill, the Peloton tread.

00:04:51.767 --> 00:04:56.247
But it's interesting that it's still
like so low and still taking those hits.

00:04:56.817 --> 00:05:00.077
I'll be curious to see,
like, if they go more.

00:05:00.217 --> 00:05:05.907
this like experience route or like we're
moving into these new apartments and the

00:05:05.907 --> 00:05:10.297
gym just has like a row of Pelotons that
you sign in with your account, which might

00:05:10.297 --> 00:05:15.267
be the thing that gets me to sign up for
just the like the pass so that I have an

00:05:15.267 --> 00:05:17.147
account to log into when I'm in the gym.

00:05:17.602 --> 00:05:22.132
But we'll see, like, there's a lot
there that makes that interesting to

00:05:22.132 --> 00:05:25.432
me in terms of like, now I have an
account I can take with me when I'm

00:05:25.432 --> 00:05:29.792
traveling and still like get the gym in,
in a really easy way, instead of like

00:05:30.062 --> 00:05:33.642
being in a city that I might not know
where to run or where to go do stuff.

00:05:35.657 --> 00:05:36.107
CJ: Yeah.

00:05:36.117 --> 00:05:42.637
There is, I think having a Peloton
at the hotel is a pretty big draw.

00:05:42.667 --> 00:05:44.847
In fact, they have hotel finder.

00:05:45.037 --> 00:05:45.867
one Peloton.

00:05:45.867 --> 00:05:47.827
com, which we can drop in the show notes.

00:05:48.317 --> 00:05:52.067
And it's like this tool that helps
you find hotels that have Pelotons.

00:05:52.487 --> 00:05:52.927
And.

00:05:53.257 --> 00:05:56.057
That was like my first
experience with it was,

00:05:58.177 --> 00:06:03.697
going to San Francisco for three
weeks to onboard to Stripe and the

00:06:03.697 --> 00:06:05.287
place that we stayed had a Peloton.

00:06:05.287 --> 00:06:06.287
I was like, what the heck is this thing?

00:06:06.297 --> 00:06:07.037
Let's give it a shot.

00:06:07.347 --> 00:06:08.397
You know, tried it out.

00:06:08.427 --> 00:06:11.387
And then you know, several
months later I was like, I think.

00:06:11.652 --> 00:06:12.992
that would be really good for us.

00:06:13.092 --> 00:06:18.832
And so we got one right before
the pandemic and ended up, I mean,

00:06:18.872 --> 00:06:21.972
I've done over 1100 rides now.

00:06:22.432 --> 00:06:26.912
So for us, it's just been like a
really great tool for exercise.

00:06:27.402 --> 00:06:27.572
Colin: Yeah.

00:06:27.572 --> 00:06:31.002
There's the gamification
element and tracking and stats

00:06:31.012 --> 00:06:32.582
for people who want stats.

00:06:32.582 --> 00:06:33.177
Yeah.

00:06:34.332 --> 00:06:36.972
CJ: And yeah, there's lots of
different programs, lots of different,

00:06:37.432 --> 00:06:40.232
there's, I feel like they, they
have something for everyone, right?

00:06:40.232 --> 00:06:43.272
There's stuff for the, the metrics nerds,
there's stuff for the people who just

00:06:43.272 --> 00:06:46.752
want to be entertained or have fun, the
stuff for beginners, stuff for people

00:06:46.752 --> 00:06:48.472
who want to be super hardcore about it.

00:06:48.942 --> 00:06:51.752
And Yeah, we've, we've just had
tons of fun and it was awesome

00:06:51.752 --> 00:06:56.112
to go to like the Mecca, which is
like, you know, the, the the studio.

00:06:56.112 --> 00:06:57.582
So that was, that was awesome.

00:06:57.647 --> 00:06:58.367
Colin: Very cool.

00:07:00.792 --> 00:07:04.952
CJ: I know last time that we were on,
we talked about RTO, the Reno Tahoe

00:07:04.972 --> 00:07:06.322
open that you were going to run.

00:07:06.732 --> 00:07:08.882
And I saw some pictures on Instagram.

00:07:08.882 --> 00:07:11.202
It seems like that was tons of fun.

00:07:11.237 --> 00:07:12.077
Colin: it was a good time.

00:07:12.087 --> 00:07:13.947
It was my 10th RTO.

00:07:13.947 --> 00:07:19.477
So I finally like added up all the
legs that I've run and I have like

00:07:20.107 --> 00:07:22.367
four more slots that I have to finish.

00:07:22.367 --> 00:07:25.897
So it'll take, if I do it the normal
way, it'll take another four years to

00:07:26.507 --> 00:07:29.037
have completed all of the, the legs.

00:07:29.507 --> 00:07:34.027
I think there's like less than 50
people who have done all of them so far.

00:07:34.487 --> 00:07:35.667
So we'll see.

00:07:35.717 --> 00:07:39.062
I think there's, I could do another,
like I've done a few ultras where

00:07:39.062 --> 00:07:41.132
I've done multiple likes in a year.

00:07:41.132 --> 00:07:44.902
So like if I do two ultras, I
could be done in two years, but I

00:07:44.902 --> 00:07:46.432
think we'll take it nice and slow.

00:07:46.432 --> 00:07:51.482
The, the doing it for 24 hours,
it took us 25 hours this year.

00:07:51.922 --> 00:07:54.422
You only really get
like one hour of sleep.

00:07:54.492 --> 00:07:59.172
And speaking of metrics, like you can
try to get sleep whenever you can.

00:07:59.172 --> 00:08:00.592
It's just like people you're hyped up.

00:08:00.592 --> 00:08:01.352
You just ran.

00:08:01.787 --> 00:08:04.577
You are trying to eat when
you think you should eat.

00:08:04.627 --> 00:08:06.377
And then you're like,
when should I have coffee?

00:08:06.377 --> 00:08:10.677
When should I, it's just like your
body is like, what are you doing to me?

00:08:11.127 --> 00:08:15.617
And you know, I've been using the
whoop band for almost five years now.

00:08:15.617 --> 00:08:19.677
And every, every year you can see
when I do RTO, cause it's just like

00:08:19.687 --> 00:08:23.477
the worst, like they have a joke
about the 1 percent club and that's

00:08:23.497 --> 00:08:25.117
when you have a 1 percent recovery.

00:08:25.522 --> 00:08:30.252
And so I got the 1 percent badge again
this year for just the worst sleep.

00:08:30.292 --> 00:08:31.602
And you're also running.

00:08:31.602 --> 00:08:35.502
So I had like a my run, the
hardest run I had was eight miles.

00:08:35.512 --> 00:08:41.862
Six of it was uphill at one o'clock in the
heat and then two miles down after that.

00:08:41.862 --> 00:08:42.852
So got it done.

00:08:42.852 --> 00:08:44.112
Felt pretty trained.

00:08:44.172 --> 00:08:47.632
And yeah, I kind of, this will go into
what we talk about later, but, you

00:08:47.632 --> 00:08:51.482
know, we've, we always like to talk
about work life balance, but I'm still

00:08:51.482 --> 00:08:56.012
trying to find more ways to get away
from the screen and, and get out there

00:08:56.017 --> 00:08:59.762
and, you know, obviously I can just run
or use Peloton or things like that, but

00:08:59.762 --> 00:09:03.842
these, these kinds of like tent pole
races are like things that keep me.

00:09:04.132 --> 00:09:07.132
To it, because if I'm not
trained, I'm going to suffer more.

00:09:07.132 --> 00:09:12.722
So having a few events planned
out has really helped me do that.

00:09:13.292 --> 00:09:16.422
So always looking for like
the, what the next couple are.

00:09:16.422 --> 00:09:21.252
And of course the memes and the jokes
on, on Instagram and stuff are like, once

00:09:21.252 --> 00:09:23.362
you hit 30, once you hit 40, it's like.

00:09:24.047 --> 00:09:26.177
It's time to run a marathon, right?

00:09:26.247 --> 00:09:28.277
You're, this little thing in the
back of your brain, you're like,

00:09:28.327 --> 00:09:29.647
I should start trail running.

00:09:30.047 --> 00:09:32.997
These little things that happen
and I, I think those are probably

00:09:32.997 --> 00:09:34.717
good midlife crisises to have.

00:09:34.727 --> 00:09:38.247
So so yeah, if anyone's listening and
wants to get into running or trail

00:09:38.247 --> 00:09:42.237
running or pelotoning, you know, shoot
us, shoot us any questions you have,

00:09:42.237 --> 00:09:46.467
but really just, Get out there and
start like, you know, trail running

00:09:46.467 --> 00:09:50.307
is like hiking with maybe a little
bit of jogging on the downhill.

00:09:50.317 --> 00:09:54.507
So it doesn't have to be like what
you see, you know, all the pros doing

00:09:54.507 --> 00:09:55.817
like, make it, make it your own.

00:09:57.642 --> 00:10:01.042
CJ: So, one thing that I was
wondering about with RTO is, I

00:10:01.052 --> 00:10:05.082
thought that they, you had like the
team follow you in the van, right?

00:10:05.702 --> 00:10:08.502
But there's sections where
you're not running on the road?

00:10:10.057 --> 00:10:10.617
Colin: Yeah.

00:10:10.717 --> 00:10:13.147
CJ: so then you like run away and
then you meet up with them at a

00:10:13.562 --> 00:10:18.022
Colin: So my leg, the eight mile one,
you can't have someone follow you.

00:10:18.052 --> 00:10:21.412
Cause it's like a dirt road up a
mountain, it's like a mountain fire road.

00:10:21.562 --> 00:10:23.072
So there's a few like that.

00:10:23.072 --> 00:10:26.322
There's a downhill from
Virginia city down Geiger grade.

00:10:26.632 --> 00:10:29.492
It used to go down Geiger grade,
which is a road, but it's like

00:10:29.492 --> 00:10:32.182
it's super sketchy, scary road.

00:10:32.552 --> 00:10:34.802
So now you actually go down
a fire road, which is like.

00:10:35.087 --> 00:10:39.787
Super like just rocks and scree and
like a lot of bloody knees at the end

00:10:39.787 --> 00:10:41.357
of it for a lot of people who fall.

00:10:41.677 --> 00:10:44.847
But that one, the van can't
follow you obviously down that.

00:10:45.187 --> 00:10:48.217
And then the van can't follow you
on mine for the one that I did.

00:10:48.227 --> 00:10:53.007
You have to carry water because
it's usually during the middle

00:10:53.007 --> 00:10:54.187
of the day for most people.

00:10:54.467 --> 00:10:58.597
And it's, it was thankfully not as
hot as it is today, but it was hot.

00:10:58.657 --> 00:11:00.877
It was like 85, which.

00:11:01.617 --> 00:11:04.947
It's not as hot as it could be in
other parts of the world, obviously,

00:11:04.947 --> 00:11:10.117
but like right now it's 95 and I
would not want to be doing that in 95.

00:11:10.157 --> 00:11:14.827
So yeah, so for the most part you have
two vans and the sleep that you can

00:11:14.827 --> 00:11:18.487
usually get is when the other van is
running, you try to get your sleep

00:11:18.487 --> 00:11:22.147
in, but you still got to also go to
where the van's going to meet you.

00:11:22.147 --> 00:11:24.437
So you have to spend some
of that time driving.

00:11:25.052 --> 00:11:30.152
to the next spot and then, you know,
either crash on the side of the van,

00:11:30.162 --> 00:11:35.842
like just not crash the van, but take,
take some sleep, like in a sleeping bag

00:11:35.842 --> 00:11:41.212
next to the van at the, the trading, at
the, the switch point, or like what we

00:11:41.212 --> 00:11:44.382
do is we rent a motel six and our van.

00:11:44.702 --> 00:11:49.342
uses it and then the next van, van
two comes and joins and takes that

00:11:49.342 --> 00:11:52.152
room while we go run and then then
they meet us at the next spot.

00:11:52.152 --> 00:11:56.272
So it's nice to just have a little
spot to do a little reset and move on.

00:11:57.587 --> 00:11:58.057
CJ: Nice.

00:11:59.237 --> 00:11:59.617
Gosh.

00:11:59.767 --> 00:12:03.797
So the, every year that you've done it,
have you done different segments or is

00:12:03.797 --> 00:12:07.227
there like a segment that you run every
time or you're trying to collect them

00:12:07.262 --> 00:12:07.602
Colin: Yeah.

00:12:07.602 --> 00:12:11.632
So there's 12 total and I've done
it 10 times, but I've, I've done

00:12:11.632 --> 00:12:13.677
it I've done the ultra three times.

00:12:13.677 --> 00:12:17.367
So like I've technically run
one, two, three, like 16 legs.

00:12:17.387 --> 00:12:20.657
So I just, I've done a lot of
the same legs multiple times.

00:12:20.657 --> 00:12:25.377
So I subconsciously have favorites,
I guess, cause I didn't realize that.

00:12:25.637 --> 00:12:27.717
So I went through and looked at
all the ones that I'm missing.

00:12:27.717 --> 00:12:30.637
And now the next couple of years, I'm
going to try to knock those ones off.

00:12:30.647 --> 00:12:33.887
So I have two legs in van one
and two legs in van two to do.

00:12:34.297 --> 00:12:35.887
And we'll see how that goes.

00:12:37.077 --> 00:12:37.577
CJ: Nice.

00:12:38.147 --> 00:12:41.327
And when you say ultra, is
that a separate race from RTO

00:12:41.327 --> 00:12:42.167
or does that just mean you're

00:12:42.352 --> 00:12:46.062
Colin: Yeah, the ultra is so
normally it's done with 12 people.

00:12:46.292 --> 00:12:52.242
There's 36 legs, so the ultra
is usually 8, 6, 4 people.

00:12:52.292 --> 00:12:54.502
There was a year where one
person did the entire thing.

00:12:55.062 --> 00:12:58.947
So that one was pretty gnarly,
they did it, they started earlier.

00:12:59.177 --> 00:13:02.177
And it took them like two
days, I think, to do it.

00:13:02.207 --> 00:13:06.557
So, yeah, so I've always
done it with six people.

00:13:06.567 --> 00:13:10.647
So you end up doing double the legs,
which is a little bit more brutal

00:13:10.667 --> 00:13:12.177
cause you don't have the other van.

00:13:12.177 --> 00:13:13.967
So you don't have any sleep really.

00:13:13.967 --> 00:13:18.177
Like you can try, but it depends
on how you cut up, which,

00:13:18.207 --> 00:13:20.127
which legs each person does.

00:13:20.157 --> 00:13:24.707
And a lot of spreadsheets, a lot of
like timing, a lot of like stopwatches

00:13:24.707 --> 00:13:26.877
and stuff, but it's good fun.

00:13:26.877 --> 00:13:28.567
And, and it also like, you know.

00:13:28.812 --> 00:13:33.782
Gets me again, just to like, I am not
going to be at the computer that week.

00:13:35.452 --> 00:13:40.082
It's like, and then you got recovery and
all of that afterwards, but good times.

00:13:40.222 --> 00:13:40.552
CJ: yeah,

00:13:42.692 --> 00:13:43.392
yeah, that's great.

00:13:43.422 --> 00:13:47.432
Great way to get out, especially
in the Reno Tahoe area.

00:13:48.102 --> 00:13:48.902
Get out and see some.

00:13:49.482 --> 00:13:50.242
Colin: It was beautiful.

00:13:50.382 --> 00:13:52.322
So that's the fitness update.

00:13:52.782 --> 00:13:53.862
What are you what are you building?

00:13:53.952 --> 00:13:54.652
What are you working on?

00:13:55.672 --> 00:13:56.172
CJ: Oh man.

00:13:56.172 --> 00:13:58.312
We're building a lot at craftwork.

00:13:58.352 --> 00:14:02.422
We, I think we've talked about calendars
a bunch of different times, and we're

00:14:02.422 --> 00:14:08.472
finally to a place where we can interact
with a calendar for building shifts

00:14:08.502 --> 00:14:14.292
and timesheets and tracking approvals
and understanding who's where, and

00:14:14.332 --> 00:14:16.292
just this week we started adding.

00:14:16.612 --> 00:14:20.292
The concept of different markets,
meaning like different cities that we're

00:14:20.292 --> 00:14:22.572
going to be able to like expand to.

00:14:22.632 --> 00:14:28.512
So if you're looking at a calendar
for Charlotte, you'll see like, here's

00:14:28.522 --> 00:14:32.042
all the projects that are happening in
Charlotte, North Carolina, and all of the

00:14:32.482 --> 00:14:38.012
crews and painters and drivers who are
in Charlotte and who's booked, who's not

00:14:38.012 --> 00:14:41.212
booked, what's happening at the project.

00:14:41.212 --> 00:14:41.892
Are we painting?

00:14:41.892 --> 00:14:42.932
Are we pressure washing?

00:14:42.932 --> 00:14:45.132
Like, is this an interior,
exterior, et cetera?

00:14:45.572 --> 00:14:48.942
So that's been pretty fun
getting that over the line.

00:14:48.972 --> 00:14:53.862
And this is another example of a tool
where we'll sort of collapse down a third

00:14:53.862 --> 00:14:58.312
party tool that the team has been using
so they can just use our our software.

00:14:58.312 --> 00:15:02.152
So it's been Almost actually
it was just, just this week.

00:15:02.162 --> 00:15:06.012
It's been one year since we broke
ground on the rails app and we kind of

00:15:06.012 --> 00:15:09.712
did like a little Spotify wrapped type
situation about you know, like where

00:15:09.712 --> 00:15:13.792
are we at with the code and how many
PRS we do and how many lines of code

00:15:13.792 --> 00:15:14.992
have we written and things like that.

00:15:15.392 --> 00:15:17.202
And it was pretty crazy to see.

00:15:17.442 --> 00:15:22.002
Like we basically replaced
a whole chat system.

00:15:22.172 --> 00:15:25.992
We replaced an entire, like
Google calendaring system.

00:15:26.002 --> 00:15:28.772
We replaced a whole bunch of features
that were being used in notion.

00:15:29.312 --> 00:15:31.022
We replaced two way email.

00:15:31.032 --> 00:15:34.892
We replaced like yeah, like lots
and lots of these different little.

00:15:35.427 --> 00:15:39.927
Things that and this one is like one
of the, one of the last ones is a

00:15:39.997 --> 00:15:44.057
tool that we use called deputy for
managing shifts and timesheets and

00:15:44.407 --> 00:15:45.817
clock in and clock out and stuff.

00:15:45.817 --> 00:15:50.417
So slowly but surely we're building all
that functionality into the product.

00:15:50.417 --> 00:15:50.687
And

00:15:50.727 --> 00:15:55.407
Colin: a few, a few episodes we talked
about API platform risk and this sounds

00:15:55.407 --> 00:16:00.447
like a lot of those things you're just
checking off and reducing the risk.

00:16:00.447 --> 00:16:05.377
And I know we've, we've talked about
build versus buy a lot, but you know,

00:16:05.817 --> 00:16:11.127
part of that equation is so much
of the like integration points and

00:16:11.127 --> 00:16:12.867
the headaches that you also adopt.

00:16:12.897 --> 00:16:19.957
And like you guys are, you know, able
to own that capacity, which is good.

00:16:20.057 --> 00:16:24.007
And of course, as I hear you list off
all those things, I hear like the whole

00:16:24.007 --> 00:16:26.117
internet, but Rails, Rails doesn't scale.

00:16:26.117 --> 00:16:27.667
CJ Rails doesn't work.

00:16:28.577 --> 00:16:29.627
How has Rails been?

00:16:30.902 --> 00:16:31.532
CJ: it's great.

00:16:31.532 --> 00:16:32.052
I love it.

00:16:32.082 --> 00:16:33.032
I love working with it.

00:16:33.052 --> 00:16:37.482
We've definitely hit a
few like scaling things.

00:16:37.492 --> 00:16:42.372
Like most of the time at the, well,
yeah, most of the time, if something

00:16:42.372 --> 00:16:46.322
is slow, it's because we have some
naive query that's happening somewhere

00:16:46.322 --> 00:16:50.702
and it's not being cached or we like
just don't You can see that pagination

00:16:50.712 --> 00:16:53.452
or, you know, there's just like
little, little things here and there.

00:16:53.452 --> 00:16:58.762
Like we show a badge in one of the
navigation menus that tells you

00:16:58.762 --> 00:17:00.542
how many unread messages you have.

00:17:01.062 --> 00:17:06.062
And we just like re query every
time you load the page for.

00:17:06.367 --> 00:17:10.847
Like show me all the messages you
have read and then give me the

00:17:10.847 --> 00:17:14.497
Delta between that and like how
many other messages there are.

00:17:14.597 --> 00:17:18.977
And so yeah, like low hanging
fruit stuff where we need to add

00:17:18.977 --> 00:17:20.737
like a little Redis caching layer.

00:17:20.767 --> 00:17:22.787
But other than that, it's been super fun.

00:17:22.787 --> 00:17:27.717
We've been using hotwire and turbo a
ton and it has worked surprisingly well.

00:17:27.717 --> 00:17:28.177
So.

00:17:28.312 --> 00:17:30.522
We just added a, there was
a request for a feature.

00:17:30.522 --> 00:17:32.832
So we have a command palette
thing using ninja keys.

00:17:32.832 --> 00:17:36.422
I don't know if you've seen that,
but yeah, senior like similar to in

00:17:36.422 --> 00:17:40.002
linear where you can do like command
K or you can use the slash key to

00:17:40.502 --> 00:17:41.952
pop open a little command palette.

00:17:41.972 --> 00:17:46.092
We have a command palette for jumping
around and there was a request to like

00:17:46.572 --> 00:17:50.662
add a feature where in the command palette
you could see recently viewed projects.

00:17:51.867 --> 00:17:56.127
And I was like, at the same time
I was thinking it would be nice to

00:17:56.127 --> 00:17:59.787
have the experience that you have in
Google docs, where you have like, you

00:17:59.787 --> 00:18:02.617
know, everyone's face who's viewing
the doc right now in the top, right.

00:18:03.087 --> 00:18:08.237
And it was pretty fast to get up and
running with action cable and just showing

00:18:08.237 --> 00:18:11.937
who's there real time and then collecting
up all those project views into some

00:18:11.947 --> 00:18:15.577
models and then spitting that out as
like you know, recently viewed projects.

00:18:15.587 --> 00:18:18.907
So we have kind of like a
LRU cache type situation for.

00:18:19.212 --> 00:18:20.102
The command palette.

00:18:20.102 --> 00:18:21.952
So you can quickly bring
up recently viewed.

00:18:22.432 --> 00:18:26.652
Pages and you can also see who's on
the page that you're viewing and yeah,

00:18:26.652 --> 00:18:27.852
I've been really pleased with that.

00:18:27.882 --> 00:18:32.542
I think we have followed convention,
it's really benefited us.

00:18:33.172 --> 00:18:37.532
So yeah, I wrote a blog post that we
can leave a link to with just like some

00:18:37.532 --> 00:18:42.432
reflections on the last year and also
just like things like rules of thumb that

00:18:42.432 --> 00:18:46.232
we've sort of picked up for rails over the
years that folks might be interested in.

00:18:46.342 --> 00:18:50.332
I think in particular, I've gotten
very opinionated about enums and

00:18:50.332 --> 00:18:53.532
like not to use them certain ways.

00:18:53.542 --> 00:18:56.202
So if you're curious, like
I don't reject that up,

00:18:56.812 --> 00:18:57.852
Colin: That's, that's a good one.

00:18:57.852 --> 00:19:00.462
I'll have to read it because
we have the similar things.

00:19:00.462 --> 00:19:03.752
We've, I've come, there's like the
rails, there's a lot of different

00:19:03.762 --> 00:19:05.002
opinions about that in rails.

00:19:05.032 --> 00:19:11.172
And then I've now learned a lot about this
in terms of we use a lot of like integer.

00:19:11.442 --> 00:19:12.072
Enums.

00:19:12.122 --> 00:19:16.632
And the nice thing is you don't
end up having to rename them later.

00:19:16.712 --> 00:19:18.922
Like when you're like, we're
going to reuse this or change it.

00:19:19.232 --> 00:19:24.142
You don't end up with like
install v2 final final.

00:19:25.582 --> 00:19:25.932
Right.

00:19:25.932 --> 00:19:29.432
So you'd be like, well, now zero
is this instead, or one is this,

00:19:29.452 --> 00:19:34.602
but yeah, it can be enums or
there's a lot of foot guns there.

00:19:35.397 --> 00:19:35.847
CJ: Totally.

00:19:36.027 --> 00:19:36.477
Yes.

00:19:37.007 --> 00:19:40.517
Yeah, I think there was, there was,
there was a video that I made on

00:19:40.517 --> 00:19:44.407
YouTube and someone in the comments
was like, why don't you just like,

00:19:44.417 --> 00:19:48.917
it's a best practice to always have
like store integer values for enums.

00:19:48.947 --> 00:19:52.767
And so I just like trusted this
random person who left a comment and

00:19:52.767 --> 00:19:54.847
I was like, Oh, that's good feedback.

00:19:54.847 --> 00:19:58.097
I'm going to use that now that someone on
the internet said it was a best practice.

00:19:58.107 --> 00:20:02.122
And I like, didn't really like look
into it, but I was just like, Yeah.

00:20:02.122 --> 00:20:02.872
I internalized it.

00:20:02.902 --> 00:20:05.342
I was like, okay, well maybe
this person must've been right.

00:20:05.342 --> 00:20:08.922
And like, surely for performance,
it's better to store them as

00:20:08.932 --> 00:20:11.222
integer values instead of the
string values in the database.

00:20:11.242 --> 00:20:16.212
But the reality is like, as soon as
we had downstream services hooked up

00:20:16.212 --> 00:20:21.312
directly to Postgres for our like business
intelligence tools, now like everyone

00:20:21.312 --> 00:20:25.152
needs access to your Ruby model, like
your actual like Ruby code to know like

00:20:25.227 --> 00:20:25.437
Colin: Yeah.

00:20:25.437 --> 00:20:26.607
What is one, what is

00:20:26.622 --> 00:20:26.922
CJ: is.

00:20:27.342 --> 00:20:28.392
Yeah, exactly.

00:20:28.997 --> 00:20:32.337
And so now we have these like giant
select case statements in all these

00:20:32.337 --> 00:20:37.307
third parties and anytime an enum
value changes, now you have to go

00:20:37.307 --> 00:20:38.747
update it in the third party too.

00:20:38.787 --> 00:20:39.117
So

00:20:39.767 --> 00:20:42.257
Colin: like you have to have a
response model or something in an

00:20:42.257 --> 00:20:47.287
API to make sure that you translate
the enums to a nice string value.

00:20:47.287 --> 00:20:50.747
Or you, I guess you could return
the integer, but now you're telling

00:20:50.747 --> 00:20:55.597
developers into like either create
a library that then translates those

00:20:55.597 --> 00:20:57.432
into whatever those values are.

00:20:59.057 --> 00:20:59.417
Yeah.

00:21:00.347 --> 00:21:04.637
CJ: there was, there was other, like the
other story that I might tell is that like

00:21:05.277 --> 00:21:10.827
we started out with what I thought was
going to be a small set of enum values.

00:21:11.387 --> 00:21:16.077
And over time it was, it was
to represent types of services

00:21:16.087 --> 00:21:17.067
that we provide basically.

00:21:17.067 --> 00:21:18.377
And it was like, Oh, we're
going to paint the walls.

00:21:18.377 --> 00:21:20.447
You can paint the ceiling, paint trim.

00:21:20.887 --> 00:21:23.837
And over time the team wanted
to like adjust and shift with

00:21:23.837 --> 00:21:26.627
those meant and add more.

00:21:27.047 --> 00:21:30.127
And so as we started adding more
union values, we got to like,

00:21:30.177 --> 00:21:31.967
Over 25 or 26 or something.

00:21:31.967 --> 00:21:35.727
And then we started to like encode
things into the string value.

00:21:35.727 --> 00:21:39.827
That was like, Oh, paint
underscore square foot, underscore

00:21:40.397 --> 00:21:41.837
brick, underscore sighting.

00:21:41.867 --> 00:21:44.547
And that meant that it was a paint
thing that we're going to do.

00:21:44.557 --> 00:21:45.847
And it was square foot based.

00:21:45.857 --> 00:21:46.807
And it was this other thing.

00:21:46.807 --> 00:21:53.567
It's like, Oh, actually like the
enum key in this case is encoding

00:21:53.577 --> 00:21:56.887
like a bunch of data that should
be probably in its own model.

00:21:59.012 --> 00:22:00.692
And would be much easier to work with.

00:22:00.692 --> 00:22:03.232
So yeah, lots, lots and
lots of learnings there.

00:22:04.297 --> 00:22:04.897
Colin: Very cool.

00:22:07.682 --> 00:22:08.092
CJ: Yeah.

00:22:08.112 --> 00:22:08.462
What else

00:22:08.527 --> 00:22:11.487
Colin: got some sidekick stuff going on.

00:22:12.512 --> 00:22:13.062
CJ: Yeah.

00:22:13.062 --> 00:22:17.822
So in the past, I don't know if
you remember, there's like a Heroku

00:22:17.862 --> 00:22:19.782
add on called Heroku scheduler.

00:22:20.392 --> 00:22:21.842
Yeah, I used to use
this thing all the time.

00:22:21.842 --> 00:22:27.572
This was like my go to way to like set
up any like periodic background job.

00:22:28.252 --> 00:22:33.612
Meaning, yeah, it's, A lot of times
we'll build background jobs that just do

00:22:33.612 --> 00:22:39.102
some processing in the background based
on a trigger, meaning a request came in

00:22:39.102 --> 00:22:42.312
through a controller and then you kick
off a background job, or a webhook came

00:22:42.312 --> 00:22:43.412
in and you kick off a background job.

00:22:43.952 --> 00:22:47.652
But there are things that you want to do
like every day at four o'clock, or you

00:22:47.652 --> 00:22:51.722
want to do it, you know every Friday at
six or something, or maybe you want to

00:22:51.722 --> 00:22:55.262
do something every minute so you can go
through and check your database to see

00:22:55.262 --> 00:22:56.257
if you need to do any, you want to do.

00:22:56.437 --> 00:22:58.817
Sort of data sanitization or whatever.

00:22:59.157 --> 00:23:03.227
So all of these periodic task type things,
I used to solve them by writing rake

00:23:03.267 --> 00:23:05.597
tasks that would kick off background jobs.

00:23:05.597 --> 00:23:12.797
And then Heroku scheduler was this plugin
by Heroku that lets you set a cron style.

00:23:13.217 --> 00:23:18.517
Thing that would kick off your rake task
on a schedule and there was like a little

00:23:18.517 --> 00:23:22.957
ui that you could use but now that we're
on render we didn't have access to that

00:23:22.957 --> 00:23:26.757
plugin And so I started looking into
these a couple of different alternatives.

00:23:26.757 --> 00:23:32.197
So whenever the whenever gem was one
that was part of jumpstart already,

00:23:32.487 --> 00:23:37.777
but I liked sidekick cron for a couple
reasons one it because we're already

00:23:37.777 --> 00:23:43.097
using sidekick You And sidekick web, it
adds like another tab to sidekick web

00:23:43.527 --> 00:23:47.767
where you can click on the cron tab and
you can see here's all the jobs and when

00:23:47.767 --> 00:23:49.407
they're scheduled, when they ran last.

00:23:49.407 --> 00:23:52.582
And you can even like, Enable and
disable them from the UI and you

00:23:52.582 --> 00:23:54.112
can kick them off from the UI.

00:23:54.112 --> 00:23:57.752
So I really liked the
way that that fit in.

00:23:57.752 --> 00:24:02.792
And so set that up on my personal side,
just to like experiment a little bit

00:24:02.792 --> 00:24:07.322
with fetching these podcast episodes
so that it updates on on the website.

00:24:07.322 --> 00:24:12.032
And then also I set it up in buckets,
our little finance app that we've

00:24:12.032 --> 00:24:16.612
got going on to just start fetching
some data that's not coming in via

00:24:16.612 --> 00:24:18.182
webhook for a couple different things.

00:24:18.192 --> 00:24:23.862
So property price values from some
property APIs and yeah, I think it's,

00:24:23.872 --> 00:24:25.682
it's, it's been serving us really well.

00:24:25.682 --> 00:24:30.542
So we started using it internally to send
push notifications to our mobile app.

00:24:31.427 --> 00:24:35.397
At the end of every day to like remind
people, Hey it doesn't look like we've

00:24:35.477 --> 00:24:39.847
seen a progress report from project X and
it looks like you clocked in there today.

00:24:39.847 --> 00:24:42.137
Like, can you send a, send an update?

00:24:42.137 --> 00:24:42.437
So,

00:24:42.682 --> 00:24:43.362
Colin: Nice.

00:24:43.752 --> 00:24:49.242
Yeah, we made, we made heavy use of that
at the subscription underwear company.

00:24:49.872 --> 00:24:50.172
Right.

00:24:50.172 --> 00:24:55.262
We had a lot of Heroku scheduler going
on for subscriptions or like it's

00:24:55.262 --> 00:24:56.892
time to run everyone's subscription.

00:24:56.902 --> 00:25:03.787
Cause the way Shopify worked, we had Tell
Shopify when to run the subscriptions.

00:25:04.197 --> 00:25:05.167
It was kind of maddening.

00:25:05.637 --> 00:25:09.017
Even though I think it was using Stripe
under the hood, which is another story

00:25:09.017 --> 00:25:13.987
for another day, but and then at orbit,
we use sidekick cron with sidekick, like.

00:25:14.467 --> 00:25:19.107
We were constantly looking at that screen
and just seeing like, literally like

00:25:19.107 --> 00:25:22.027
the one that was always backed up was
like integrating with discord because

00:25:22.027 --> 00:25:26.127
the right limits, it was always like,
okay, how many sync jobs are running?

00:25:26.177 --> 00:25:28.667
But it was super nice to be able to
say, run this every hour, run this

00:25:28.667 --> 00:25:31.637
every day at four, run this whenever.

00:25:31.667 --> 00:25:33.517
And we would usually schedule them.

00:25:33.967 --> 00:25:36.827
I guess that's probably where they,
they came up with the name for the gym.

00:25:37.407 --> 00:25:40.467
But we would often schedule around.

00:25:40.827 --> 00:25:42.197
Like we, we had built a.

00:25:42.447 --> 00:25:46.967
An HTTP client that also was
aware of the queuing and the cron

00:25:46.977 --> 00:25:50.547
so that it would stay within the
rate limits and like respect it.

00:25:50.547 --> 00:25:54.407
And then like delay job if we
were going to hit the limits or,

00:25:54.427 --> 00:25:55.837
you know, whatever was going on.

00:25:55.867 --> 00:26:00.137
So I find myself missing some of
those tools in JavaScript land.

00:26:00.137 --> 00:26:02.757
I know you could just write your
own scripts in JavaScript, but

00:26:02.757 --> 00:26:08.177
like the idea of like, these are
rake tasks that then create jobs.

00:26:08.482 --> 00:26:11.652
That then have workers
that run in those jobs.

00:26:11.652 --> 00:26:15.562
And it's like in JavaScript, you have
to kind of just go do all of that.

00:26:16.052 --> 00:26:19.802
I just found a bowl MQ that
I'm looking at for some stuff.

00:26:20.292 --> 00:26:24.782
There's a few blog posts that I found
where like top five message queues and.

00:26:25.212 --> 00:26:26.792
Background processors to use.

00:26:27.262 --> 00:26:32.442
Cause I'm working on kind of
like a best practice for billing

00:26:32.582 --> 00:26:34.892
in a bot or an app on discord.

00:26:34.912 --> 00:26:38.662
So like kind of what are all the events
you need to listen to and don't do

00:26:38.662 --> 00:26:43.912
it in band and store it in a job and
then process it and stuff like that.

00:26:43.922 --> 00:26:47.582
So I was like, okay, I normally reach for.

00:26:48.537 --> 00:26:49.137
Sidekick.

00:26:49.167 --> 00:26:50.847
And I was like, okay,
we're in JavaScript land.

00:26:51.067 --> 00:26:55.137
I'm sure there's probably a way to
do sidekick with JavaScript, but

00:26:55.617 --> 00:26:58.037
it's probably not designed for that.

00:26:59.777 --> 00:27:01.187
CJ: Yeah, I have no idea.

00:27:01.477 --> 00:27:04.627
I have not seen that.

00:27:04.817 --> 00:27:08.867
I haven't seen Sidekick used with
JavaScript, but when we were when

00:27:08.867 --> 00:27:09.957
we were first building with Next.

00:27:09.957 --> 00:27:14.027
js, we used this tool called Ingest
with, it's like n with two n's.

00:27:14.527 --> 00:27:19.497
And at the time, I, I thought it was
pretty, it was a pretty new company.

00:27:20.027 --> 00:27:24.807
And this is like their, their entire
company is built around like being

00:27:24.807 --> 00:27:28.447
a service that provides background
job handling there were a couple of

00:27:28.457 --> 00:27:29.887
things I really liked from ingest.

00:27:29.887 --> 00:27:34.807
One was the logging and like just
keeping track of when your jobs ran.

00:27:35.377 --> 00:27:36.947
And then they also had some like.

00:27:37.407 --> 00:27:41.837
Interesting concepts around, I think
it was around like trees of jobs that

00:27:41.837 --> 00:27:46.107
could have interdependencies and things
like that, which can get kind of messy.

00:27:46.317 --> 00:27:50.707
But yeah, it worked great for
us for a while and we used it

00:27:50.707 --> 00:27:53.937
to send emails and handle a few
things before we set up rails.

00:27:53.937 --> 00:27:58.007
So but I, yeah, I remember looking
at bull And a couple others that

00:27:58.007 --> 00:27:59.827
were just like, how do you host this?

00:27:59.837 --> 00:28:00.657
Where do you run it?

00:28:00.657 --> 00:28:01.797
Like, what is the worker?

00:28:01.797 --> 00:28:06.917
Like if I, if I deploy my next JS app
on Vercel, like is my bowl MQ thing

00:28:06.927 --> 00:28:09.027
happening on Vercel or somewhere else?

00:28:09.027 --> 00:28:13.457
And then it was like, do you just set
up a serverless function that runs your

00:28:13.467 --> 00:28:15.147
background job as a separate thing?

00:28:15.147 --> 00:28:19.567
And then like in your main job, you're
like to schedule your background job.

00:28:19.567 --> 00:28:21.077
You just hit the serverless function.

00:28:21.707 --> 00:28:22.927
And then, yeah, I don't know.

00:28:22.937 --> 00:28:28.117
There was, I remember it being one
of the many frustrating things in

00:28:28.117 --> 00:28:32.297
JavaScript land being that like every
single piece of the puzzle is like,

00:28:32.947 --> 00:28:38.327
where do I get the third party SAS
product that solves this problem?

00:28:38.757 --> 00:28:39.137
So,

00:28:39.192 --> 00:28:41.012
Colin: Well, and it's tricky
when you start looking at the

00:28:41.012 --> 00:28:42.572
renders and flies and stuff.

00:28:42.592 --> 00:28:48.002
It's like, if you're running in this
like quick to deploy thing, like it's

00:28:48.112 --> 00:28:52.682
like, it's like why Heroku had an add on
store and why they had Heroku scheduler.

00:28:52.712 --> 00:28:56.212
And I'm sure Chrome, like they have
probably some features, but when

00:28:56.212 --> 00:29:01.932
you just hit a key, like a worker,
you loo there's so many things

00:29:01.942 --> 00:29:04.102
like, do we have observability?

00:29:04.132 --> 00:29:05.272
What happens if it fails?

00:29:05.272 --> 00:29:08.042
What happens if it needs
to call some other ones?

00:29:08.042 --> 00:29:10.202
And there's like a fan out and
there's all these different things

00:29:10.212 --> 00:29:11.142
that you have to think about.

00:29:11.482 --> 00:29:14.792
So like, yeah, looking at Ingest's
website, it looks like they've maybe

00:29:14.992 --> 00:29:20.352
started leaning towards AI jobs as
a service, but still, still a worker

00:29:20.562 --> 00:29:22.332
system, but very heavily on that.

00:29:23.022 --> 00:29:26.192
LLM chain and like, usually
you're doing lots of requests.

00:29:26.192 --> 00:29:27.922
It's like chatbots and things like that.

00:29:27.932 --> 00:29:33.892
But, you know, it looks like flow control,
logging, observability, recovery tools.

00:29:34.512 --> 00:29:38.592
You're doing all that yourself if you
don't use a tool or like, I think some

00:29:38.592 --> 00:29:42.182
of it, what's nice about Sidekiq is
there's so many plugins to Sidekiq.

00:29:42.652 --> 00:29:45.592
There's like retries and there's
back like exponential back off and

00:29:45.592 --> 00:29:47.112
you can define all of that stuff.

00:29:47.112 --> 00:29:52.222
We used to use a company that is no longer
around called iron worker or iron or iron.

00:29:52.222 --> 00:29:52.712
io.

00:29:53.152 --> 00:29:57.292
That was very similar to, this is like
over a decade ago, but very much like,

00:29:57.322 --> 00:30:01.142
I do not want to think about where these
jobs are, where they work and you can

00:30:01.142 --> 00:30:05.452
deploy go and Ruby and all these different
ones to them and let them do that, but

00:30:06.052 --> 00:30:07.952
that's like a whole, it's a whole world.

00:30:07.952 --> 00:30:09.752
Mm hmm.

00:30:09.847 --> 00:30:10.337
CJ: Yeah.

00:30:11.177 --> 00:30:11.367
Yeah.

00:30:11.367 --> 00:30:16.547
I think in Django we use DJ celery or like
a J or some, some sort of celery thing.

00:30:16.547 --> 00:30:24.087
And I remember George had to go like
super deep on debugging some lock issues

00:30:24.097 --> 00:30:27.397
where like we were, we were writing to.

00:30:27.847 --> 00:30:30.117
Some cue and celery had to
pull stuff off the queue.

00:30:30.137 --> 00:30:32.087
It's like not simple to get right.

00:30:32.777 --> 00:30:39.527
And so, yeah, I do appreciate that
sidekick is backed by a actual business.

00:30:40.127 --> 00:30:42.887
And it seems to have lots of great
support with different plugins and

00:30:42.887 --> 00:30:46.207
features and oftentimes the stuff
too, that comes with the paid.

00:30:47.262 --> 00:30:50.952
Plans for sidekick other than support,
obviously, but a lot of the features

00:30:50.952 --> 00:30:55.912
that you can get from Paid are also
available as community packages or

00:30:55.932 --> 00:31:00.952
a lot of it is just ruby So you can
kind of treat it as a ruby object

00:31:00.962 --> 00:31:03.202
and go into it and write your own.

00:31:03.272 --> 00:31:08.582
I think we built A debounce like
our own like debouncing thing.

00:31:08.582 --> 00:31:13.307
So if you kick off several different
jobs that all have the same arguments

00:31:13.367 --> 00:31:17.917
to perform and they're all item potent,
then it'll debounce them until you

00:31:17.917 --> 00:31:21.577
stop creating jobs for like a minute
and then it'll run the last one.

00:31:21.917 --> 00:31:24.497
So yeah.

00:31:24.547 --> 00:31:25.247
Great little tool.

00:31:25.622 --> 00:31:26.262
Colin: Very cool.

00:31:27.592 --> 00:31:30.912
Yeah, on my side, I've mostly,
like, been working on those

00:31:30.942 --> 00:31:32.282
bots, like I was talking about.

00:31:32.992 --> 00:31:36.392
Mostly just carving out some best
practices, figuring out what our docs are

00:31:36.392 --> 00:31:41.402
missing, figuring out what things, like,
kind of cursive knowledge that we have.

00:31:42.052 --> 00:31:43.242
Like, what are we missing?

00:31:43.252 --> 00:31:44.152
What are we doing?

00:31:44.742 --> 00:31:49.982
Discord is interesting that we don't have
our own SDKs, so we, like, I'm writing

00:31:49.982 --> 00:31:56.177
everything using just, you know, Pure API
calls right now, but we'll probably also

00:31:56.267 --> 00:32:00.757
do it in a few different libraries just
to, so that people have some examples,

00:32:00.757 --> 00:32:05.107
the libraries have pretty good support and
guides and stuff like that, but there's

00:32:05.107 --> 00:32:08.317
some things where like the libraries
don't always implement all the things

00:32:08.317 --> 00:32:12.747
that we offer, so just trying to show
off, like, what is our interpretation?

00:32:12.747 --> 00:32:17.167
Maybe what we recommend is not even
necessarily how it's written in the docs.

00:32:17.167 --> 00:32:17.857
And so when you do.

00:32:18.637 --> 00:32:19.937
Get that back in line.

00:32:19.987 --> 00:32:22.347
When things just change
and need some updating.

00:32:23.807 --> 00:32:29.137
CJ: So when you're working on a sample
bot in JavaScript, are you're using

00:32:29.137 --> 00:32:32.307
like a third party, like community
JavaScript library, or are you

00:32:32.307 --> 00:32:33.807
writing like just fetch calls or how's

00:32:33.827 --> 00:32:34.217
Colin: Yeah.

00:32:34.217 --> 00:32:38.867
Like I'm usually using like Axios or
something just to have a nicer little

00:32:38.867 --> 00:32:43.577
rests and point or fetch if I want to just
have something without any dependencies.

00:32:44.067 --> 00:32:48.987
Mostly just because then the reference
implementation is without any specific

00:32:49.357 --> 00:32:56.397
library so that library devs can see it,
developers can see it, and then that way

00:32:56.397 --> 00:32:59.987
if you're building something and you're
doing it in another language that's not

00:32:59.997 --> 00:33:03.787
JavaScript, you can just see what the
control flow is on the JavaScript side.

00:33:04.457 --> 00:33:07.567
Are we going to end up with like
examples in a bunch of other languages?

00:33:07.982 --> 00:33:12.202
Maybe, I think like most of our bots
are probably JavaScript and Python.

00:33:12.662 --> 00:33:14.282
So those are like the two big languages.

00:33:14.612 --> 00:33:17.492
Discord, RB is really
cool as like a Ruby one.

00:33:17.492 --> 00:33:19.412
We use that at at orbit.

00:33:19.852 --> 00:33:26.402
And yeah, there's, I mean, there's
10, there's dozens of of SDKs.

00:33:26.407 --> 00:33:32.282
So like there's someone who has one in
R and in Crystal and in Ruby and Elixir.

00:33:32.282 --> 00:33:34.032
And so it's,

00:33:34.082 --> 00:33:37.602
CJ: do you get telemetry on like
which ones are most popular or

00:33:37.602 --> 00:33:38.792
is it kind of like anecdotal?

00:33:38.792 --> 00:33:39.302
Like,

00:33:39.347 --> 00:33:41.687
Colin: Yeah, they're supposed
to send like a user agent.

00:33:41.687 --> 00:33:44.877
So we have a good sense of like
what the top libraries are.

00:33:44.887 --> 00:33:51.227
And a lot of the really large bots
have their own clients and, or forks of

00:33:51.287 --> 00:33:56.297
popular clients just because when you
get to large bots, Really large bots.

00:33:56.307 --> 00:34:00.557
They have to deal with the gateway and
sharding and like limits on the gateway of

00:34:00.557 --> 00:34:04.727
how many like if you are running multiple
instances of your bot connecting to

00:34:05.207 --> 00:34:10.667
pools of guilds and servers, like there's
a lot of overhead where a lot of our

00:34:10.667 --> 00:34:15.887
examples are for bots that we just assume
you're not going to get to that issue.

00:34:16.267 --> 00:34:20.457
And like our newer bots mostly use
HTTP and there you're getting like

00:34:20.487 --> 00:34:24.457
webhooks instead of having to do
an open web socket to the gateway.

00:34:24.467 --> 00:34:27.187
So there's a little bit
of a movement that way.

00:34:27.247 --> 00:34:30.347
We don't support webhooks for
everything that the gateway has.

00:34:30.347 --> 00:34:34.287
It's only for very specific, like
the slash commands in discord

00:34:34.287 --> 00:34:35.787
are powered by webhooks usually.

00:34:36.277 --> 00:34:38.257
Or you can do them via the gateway too.

00:34:38.297 --> 00:34:40.497
So some of this is like, okay.

00:34:41.007 --> 00:34:43.947
Now that we have this, like,
should we be offering more events?

00:34:43.957 --> 00:34:46.597
Should we be moving to an HTTP future?

00:34:46.597 --> 00:34:48.807
And, and cause the nice thing
about that is you don't have to

00:34:48.807 --> 00:34:53.117
do sharding and you could have one
instance of your bot running that.

00:34:54.257 --> 00:34:57.027
Takes those and puts them
into a job queue, for example,

00:34:59.407 --> 00:35:04.407
CJ: and it, are these examples all hosted
on GitHub somewhere that we could check

00:35:04.437 --> 00:35:06.447
Colin: They will be, yeah,
there'll be in the docs.

00:35:06.507 --> 00:35:11.617
So I'm working on like a refresh of a
lot of our docs content, just trying

00:35:11.617 --> 00:35:13.437
to get rid of some of the older stuff.

00:35:13.437 --> 00:35:15.787
We've got a lot of things that
are like, this is deprecated.

00:35:15.817 --> 00:35:19.487
So it's like, okay, we might just
say it's been deprecated for a while.

00:35:19.497 --> 00:35:21.117
We're going to shove it into get hub.

00:35:21.187 --> 00:35:24.227
Here's the get commit if you
want to go read it again, but.

00:35:24.427 --> 00:35:26.007
We're going to get it out of the docs.

00:35:26.627 --> 00:35:28.987
So yeah, there'll be in the docs, discord.

00:35:29.227 --> 00:35:29.647
dev.

00:35:31.397 --> 00:35:31.847
CJ: Very cool.

00:35:32.527 --> 00:35:37.907
And are there, when you're talking
about like building apps around best

00:35:37.907 --> 00:35:43.857
practices, like how are you, like,
how do you go about figuring out what

00:35:44.377 --> 00:35:45.967
patterns people should implement?

00:35:45.997 --> 00:35:51.327
Are you looking at like, ways that the
bigger bots have done it or talking

00:35:51.327 --> 00:35:54.297
to like the engineers internally or,
yeah, like kind of what's your approach

00:35:54.297 --> 00:35:57.677
to figuring out the, the right or
the way that you want to recommend?

00:35:57.807 --> 00:36:00.017
Colin: this is kind of like a
side quest for me that I haven't

00:36:00.017 --> 00:36:01.757
really told anyone that I'm doing.

00:36:01.777 --> 00:36:07.287
So what I'm doing is my interpretation
of what I would do if I was an

00:36:07.287 --> 00:36:11.307
external developer, because that's
the failure point is like, what are

00:36:11.307 --> 00:36:14.997
we telling people to do, and then
I'm going to take it to the team

00:36:15.397 --> 00:36:17.197
and say, okay, I implemented this.

00:36:17.377 --> 00:36:18.397
Please poke holes in it.

00:36:18.397 --> 00:36:20.057
Like we'll do like a demo day type thing.

00:36:21.267 --> 00:36:22.537
What would you do differently?

00:36:22.537 --> 00:36:25.517
What are the concerns that I'm
not, what are we, what are we blind

00:36:25.517 --> 00:36:26.967
to that we aren't telling people?

00:36:26.967 --> 00:36:31.317
What am I, what did I also do
that wasn't in the docs because I

00:36:31.317 --> 00:36:33.017
know that I have to do this thing.

00:36:33.017 --> 00:36:35.097
So that's a note for
me to update the docs.

00:36:36.767 --> 00:36:40.027
I think for a lot of developers,
like they want to see code and they

00:36:40.027 --> 00:36:44.047
don't want to just read because
they're not going to read usually.

00:36:44.087 --> 00:36:48.527
We hope that they read, but the code
can be very self documenting that way.

00:36:48.557 --> 00:36:52.767
And then we can also take PRs
if the community thinks that

00:36:52.767 --> 00:36:53.677
something could be better.

00:36:53.947 --> 00:36:57.202
What I'm trying to figure out
is like, The discussion we just

00:36:57.202 --> 00:37:00.532
had about workers and stuff is
that's when you get into opinions.

00:37:00.852 --> 00:37:03.842
It's when you get into tech stacks, right?

00:37:03.842 --> 00:37:08.842
Like when I start thinking about
like, here's where we should implement

00:37:08.842 --> 00:37:12.812
a caching strategy, we could just
say, choose a strategy of your.

00:37:13.362 --> 00:37:16.922
Your own and just not show an example,
or we could do what I'm trying to

00:37:16.922 --> 00:37:18.152
figure out is like the same app.

00:37:18.152 --> 00:37:19.752
Do I do it multiple times?

00:37:20.032 --> 00:37:23.482
One super naive in band requests.

00:37:24.282 --> 00:37:25.972
You can run it and it's going to run fine.

00:37:25.982 --> 00:37:27.002
No dependencies.

00:37:27.022 --> 00:37:29.322
The next one's like, okay,
this is using bull MQ.

00:37:29.322 --> 00:37:32.072
And here's how you would save these two.

00:37:32.437 --> 00:37:36.687
Job queue, process them,
and why you would do that.

00:37:37.077 --> 00:37:41.267
But then, of course, you get the why
aren't you using my favorite queue system.

00:37:41.817 --> 00:37:44.607
And then the other one would be like,
okay, here's another one using Redis

00:37:44.667 --> 00:37:49.147
as like a cache, and here's how we
recommend, you know, doing your cache

00:37:49.147 --> 00:37:50.527
and validation and stuff like that.

00:37:51.067 --> 00:37:52.837
Those are not things that we document.

00:37:52.917 --> 00:37:56.427
Like, it's not our job necessarily to
document how to do caching as a job.

00:37:57.227 --> 00:38:03.077
Concept, but I think if we expect you
to have a good time that you should

00:38:03.087 --> 00:38:06.587
be caching or we should be offloading
those things, then I think we should

00:38:06.587 --> 00:38:10.007
tell people that because otherwise
you're going to hit rate limits, then

00:38:10.007 --> 00:38:12.687
everyone's going to go ask, like,
why am I hitting these rate limits?

00:38:12.687 --> 00:38:15.417
And so there is a little bit
of that, that I think we can do

00:38:15.417 --> 00:38:17.017
to make people more successful.

00:38:17.017 --> 00:38:20.407
And then we run into the, okay,
now I want this in my language.

00:38:20.697 --> 00:38:21.777
Now I want this in.

00:38:22.132 --> 00:38:27.072
You know, some flavor of a library
because a lot like most people are not

00:38:27.072 --> 00:38:30.322
going to do raw HTTP requests either.

00:38:30.582 --> 00:38:32.052
So like, what is the Discord.

00:38:32.062 --> 00:38:33.472
js example of this?

00:38:33.762 --> 00:38:36.352
But my hope is that if we
offer these that then Discord.

00:38:36.362 --> 00:38:39.592
js can translate that
into their own version.

00:38:40.127 --> 00:38:44.097
Or they can tell us like, Hey, we don't
think that that's the best way to do this.

00:38:44.567 --> 00:38:48.027
Some of the SDKs, they're really, they're
like more like thick clients than thin

00:38:48.027 --> 00:38:53.867
clients that they do a lot of the caching
for you or like the discord RB one it has.

00:38:54.147 --> 00:38:57.317
A really cool way of keeping
you within the rate limits.

00:38:57.727 --> 00:39:01.577
And so like, it's aware of how
much you've used what's available.

00:39:01.857 --> 00:39:06.747
It will intentionally delay your requests
and things to make you fit within that.

00:39:06.757 --> 00:39:08.697
So it's still possible to hit it.

00:39:08.737 --> 00:39:11.257
Like if you do something, you
can slam into it really hard.

00:39:11.267 --> 00:39:14.987
But there's some of that stuff that's
like not going to be captured in like

00:39:15.347 --> 00:39:18.697
a generated open API SDK, for example.

00:39:19.952 --> 00:39:20.382
CJ: Mm hmm.

00:39:20.492 --> 00:39:20.872
Mm hmm.

00:39:21.742 --> 00:39:22.112
Yeah.

00:39:22.152 --> 00:39:28.142
One thing that came to mind while you
were explaining that was the, there

00:39:28.142 --> 00:39:33.402
was like a period at, at the end of my
time at Stripe where I wanted to give

00:39:33.422 --> 00:39:38.802
people my opinionated implementation
of how I would do something with Rails.

00:39:39.112 --> 00:39:40.862
For a Stripe connect integration.

00:39:41.342 --> 00:39:44.262
And I wanted to show like, here's
how you should handle your web hooks.

00:39:44.282 --> 00:39:46.902
And here's how you should like
farm stuff off to the background.

00:39:46.902 --> 00:39:48.422
And here's how you should do X, Y, and Z.

00:39:48.782 --> 00:39:52.002
And it really, we had a hard time
like finding anywhere that it might

00:39:52.002 --> 00:39:53.912
fit in the docs, in the proper docs.

00:39:53.932 --> 00:39:57.602
Cause in the docs, it's like, you just
want to tell people the high level stuff

00:39:57.602 --> 00:40:01.322
that they care about from that's like
tech stack, agnostic, whatever from

00:40:01.322 --> 00:40:06.442
Stripe And it was yeah, so it was like
this, we got into this situation where

00:40:06.542 --> 00:40:09.822
it made more sense to write them as
blog posts that were just posted on dev.

00:40:09.822 --> 00:40:13.432
to or my own, like my own website
or whatever, because it's like,

00:40:13.842 --> 00:40:17.512
it's actually just my opinions,
but about how I would do it.

00:40:17.857 --> 00:40:21.857
And with those like additional
things like sprinkled in.

00:40:21.867 --> 00:40:25.837
So where in the docs you might say
like, yeah, we recommend using a caching

00:40:25.837 --> 00:40:27.577
strategy here in like the blog posts.

00:40:27.577 --> 00:40:30.257
It's like, okay, here's how
I did it with caching in this

00:40:30.257 --> 00:40:31.487
specific stack or whatever.

00:40:31.507 --> 00:40:34.887
But yeah, I think I,
I did a bad job about.

00:40:35.177 --> 00:40:40.127
Like doing a lot of collaborations with
other dev rel teams, but there were

00:40:40.127 --> 00:40:44.277
other people on, on our team that were
good at saying like, Oh, Hey, we might

00:40:44.277 --> 00:40:45.887
want to do a caching strategy here.

00:40:45.897 --> 00:40:50.437
Let's do like a partner video
with some other, like some company

00:40:50.437 --> 00:40:51.727
that's like a caching company.

00:40:51.727 --> 00:40:55.037
And so then it's like, okay,
here's how you could use ingest

00:40:55.147 --> 00:40:57.427
in the context of a discord bot.

00:40:57.757 --> 00:40:58.747
That's like sending the thing.

00:40:58.747 --> 00:41:01.247
And then you kind of like work together
to make a live stream or you work

00:41:01.247 --> 00:41:02.657
together to make a blog post or whatever.

00:41:03.077 --> 00:41:03.347
Yeah.

00:41:03.347 --> 00:41:03.707
I don't know.

00:41:03.857 --> 00:41:04.307
Kind of,

00:41:04.322 --> 00:41:05.212
Colin: Yeah, that's a good

00:41:05.257 --> 00:41:05.857
CJ: it's tough to get

00:41:05.942 --> 00:41:08.902
Colin: a good call out because I haven't
gotten that far yet But this will

00:41:08.902 --> 00:41:14.742
probably be like like a dev 2 article
or it could be you know Let's go do it

00:41:14.742 --> 00:41:19.562
live on Twitch or a discord dev YouTube
channel, which we do not have right

00:41:19.562 --> 00:41:24.422
now, but we might one day Those kinds
of things so we'll think about that.

00:41:24.572 --> 00:41:30.822
But yeah, the the tricky thing about
partnering Is we found this even

00:41:30.822 --> 00:41:34.602
with open source implementations
of like a certain job queue is

00:41:34.602 --> 00:41:36.122
then like our docs are public.

00:41:36.392 --> 00:41:41.112
So if we implement one, we're going to
get PRS for everyone's favorite, whether

00:41:41.112 --> 00:41:46.322
it's their proponent of that one or
their DevRel for that one, or they want

00:41:46.362 --> 00:41:48.692
GitHub contributions to the discord repo.

00:41:49.952 --> 00:41:52.052
So, you know, we get all of them.

00:41:52.052 --> 00:41:54.152
We, cause we did that for activities.

00:41:54.152 --> 00:41:56.252
We, we picked a third party.

00:41:56.392 --> 00:41:57.532
Multiplayer backend.

00:41:57.802 --> 00:42:01.182
And the cool thing is that company
has that since built their own discord

00:42:01.182 --> 00:42:05.342
example, that's way better than ours
because like it's from them, they

00:42:05.342 --> 00:42:07.122
understand their tool better than we do.

00:42:07.532 --> 00:42:10.342
So we were probably going
to swap that out for theirs.

00:42:10.782 --> 00:42:12.572
Cause a lot of people were
like, why did you pick that one?

00:42:12.572 --> 00:42:15.482
And you know, why aren't
using mine or this paid one?

00:42:15.482 --> 00:42:19.382
It's like, well, it was open source and
our team clearly had used it before.

00:42:19.382 --> 00:42:22.562
So it was more of like, we want
to give you an example instead

00:42:22.562 --> 00:42:24.232
of make you do it yourself.

00:42:24.247 --> 00:42:27.997
But, you know, some of those opinions,
I think what I would like is that

00:42:27.997 --> 00:42:31.457
the docs should at least make you
think about like that, like that you

00:42:31.457 --> 00:42:33.077
should think of a caching strategy.

00:42:33.567 --> 00:42:37.827
And then maybe that's a, Maybe it doesn't
make sense to do a call out to like

00:42:38.117 --> 00:42:42.427
implementation there, but if it feels
more human, like you can have the super

00:42:42.427 --> 00:42:44.797
technical docs with a fun little bubble.

00:42:44.797 --> 00:42:47.507
That's like, we recommend a caching
strategy, go check out how CJ

00:42:47.507 --> 00:42:49.147
did this and rails or whatever.

00:42:49.617 --> 00:42:49.618
CJ: Mm

00:42:49.652 --> 00:42:52.352
Colin: you can kind of cross
promote, which would be fun because

00:42:52.352 --> 00:42:55.172
I think like at the end of the
day, like especially with discord.

00:42:55.787 --> 00:42:56.967
Like we should have some fun with it.

00:42:57.007 --> 00:43:00.717
It doesn't need to be this like cut
and dry, like you know, manufacturing

00:43:00.727 --> 00:43:03.077
guidelines for implementing XYZ.

00:43:03.087 --> 00:43:04.907
It's like it's discord.

00:43:06.682 --> 00:43:07.072
CJ: Yeah.

00:43:08.702 --> 00:43:12.842
Speaking of fun, I, the little
touches that have been popping up in

00:43:12.932 --> 00:43:14.822
D script lately have been pretty cool.

00:43:14.882 --> 00:43:15.302
Like,

00:43:15.527 --> 00:43:19.317
Colin: The name of the AI
assistant was a strong choice.

00:43:21.412 --> 00:43:24.282
I don't know any context about
why it's called Underlord.

00:43:24.282 --> 00:43:24.982
Is that what it is?

00:43:25.872 --> 00:43:26.272
CJ: Yeah.

00:43:26.312 --> 00:43:28.962
Under the under Lord, you go
to the under Lord to have it

00:43:28.992 --> 00:43:30.522
automatically do stuff for you.

00:43:30.652 --> 00:43:33.862
Colin: Well, in a world where, like,
almost every AI assistant seems to

00:43:33.872 --> 00:43:38.602
be named, like, a woman's name, which
is, like, problematic all to itself.

00:43:39.232 --> 00:43:39.652
Right?

00:43:39.692 --> 00:43:42.762
And, like, or they're trying to
make them human feeling, and now

00:43:42.762 --> 00:43:44.672
you've got, like, the Underlord, and

00:43:45.352 --> 00:43:45.632
CJ: Yeah,

00:43:47.722 --> 00:43:50.242
Colin: I wish I was in that,
that marketing meeting.

00:43:50.272 --> 00:43:53.302
'cause naming things is
always hard, but also so fun

00:43:54.532 --> 00:43:54.872
CJ: I know.

00:43:54.872 --> 00:43:57.672
I'm sure someone was just like, what
if we called it like the overlord?

00:43:57.672 --> 00:43:59.132
And they're like, no,
no, no, no, not overlord.

00:43:59.132 --> 00:43:59.912
That sounds scary.

00:43:59.942 --> 00:44:02.462
And they're like, under Lord, like sold.

00:44:02.692 --> 00:44:03.182
We'll call it

00:44:03.442 --> 00:44:05.452
Colin: But then, you know, that
whiteboard also had like, what

00:44:05.452 --> 00:44:08.692
if we called it Dan or DS Script?

00:44:08.697 --> 00:44:09.082
Dan

00:44:10.092 --> 00:44:10.502
CJ: Yeah.

00:44:11.092 --> 00:44:11.362
Yeah.

00:44:11.392 --> 00:44:12.632
Or like the Descript dog.

00:44:12.632 --> 00:44:16.682
Oh, like, you know, like a lot of
people want to have a, a mascot.

00:44:17.027 --> 00:44:17.797
Situation,

00:44:17.872 --> 00:44:18.412
Colin: for sure.

00:44:18.502 --> 00:44:21.742
Well, we'll be using under
Lord to edit this episode.

00:44:21.742 --> 00:44:22.192
So

00:44:23.557 --> 00:44:23.847
CJ: yeah.

00:44:24.037 --> 00:44:26.047
Brought to you by the Underlord.

00:44:26.417 --> 00:44:27.457
Oh gosh.

00:44:27.797 --> 00:44:28.187
All right.

00:44:28.207 --> 00:44:28.877
Why don't we wrap it

00:44:29.012 --> 00:44:29.432
Colin: right.

00:44:29.732 --> 00:44:30.422
Good chatting.

00:44:30.632 --> 00:44:33.152
Where can we find all the
notes and all the things?

00:44:33.987 --> 00:44:34.257
CJ: Yeah.

00:44:34.257 --> 00:44:35.597
Head over to build and learn.

00:44:35.597 --> 00:44:40.257
dev for links to all the resources
to the stuff we talked about today

00:44:40.307 --> 00:44:42.067
and yeah, we'll catch you next

00:44:42.202 --> 00:44:43.432
Colin: All right, bye friends.

00:44:44.487 --> 00:44:45.107
CJ: Bye friends.