WEBVTT

1
00:00:06.200 --> 00:00:09.480
Well, Hello, hello everybody,
and welcome back to another exciting episode of

2
00:00:09.679 --> 00:00:14.679
JavaScript Jabber today on Well Today,
on our show, we have We've got

3
00:00:14.720 --> 00:00:18.519
your hostess with the most us that's
me and Joe Neil for now Yo yo

4
00:00:18.559 --> 00:00:21.239
yo, coming at you live and
all that stuff. And then we've got

5
00:00:21.280 --> 00:00:30.480
Steve Yo what up from Portland?
And then we have our guest today,

6
00:00:30.679 --> 00:00:40.119
Kelvin. Hey, how you doing? Ye? All right, so let's

7
00:00:40.479 --> 00:00:46.079
jump right into it. Who are
you? What makes you famous? Or

8
00:00:46.320 --> 00:00:48.560
if not, what makes you famous? What do you want to be famous

9
00:00:48.600 --> 00:00:57.560
for? Okay? Thanks? AJ? So I'm Covin. I am the

10
00:00:57.719 --> 00:01:03.439
lead Mintino Sims Jiz, and I'm
currently working on the borrowing jervascript stack.

11
00:01:03.400 --> 00:01:08.239
Hopefully it's the name is not a
turner for most people. I him to

12
00:01:08.400 --> 00:01:14.519
make it a go to stack for
building full stack web applications in JavaScript.

13
00:01:15.239 --> 00:01:19.519
So how long have you been maintainer
of sales? Did you start it?

14
00:01:19.599 --> 00:01:25.400
No? Not at all. So
sales was created by Mike McNeill. I

15
00:01:25.439 --> 00:01:30.079
became the maintenance of sales June last
year. Cool? Why did it change

16
00:01:30.120 --> 00:01:37.159
hands? Okay? So Mike is
still the BDFL you know, and but

17
00:01:37.319 --> 00:01:42.760
currently we have his hands full with
being the CEO of Fleet Device Management to

18
00:01:42.840 --> 00:01:52.799
fleet Security and endpoints company based on
squad. So there's your help. You

19
00:01:52.879 --> 00:02:00.079
get visibilities into your computers and all
the stuff. So the sales frame of

20
00:02:00.200 --> 00:02:05.959
the more hands on midness, which
is where I'm come in to like lead

21
00:02:07.159 --> 00:02:12.759
the framework. Yeah okay, And
for those that are not familiar, BDFL

22
00:02:13.000 --> 00:02:16.360
is Benevolent Dictator for life, So
any the person who gets to call the

23
00:02:16.400 --> 00:02:23.280
shots, all right, and then
what is boring JAS because that kind of

24
00:02:23.360 --> 00:02:30.400
sounds like a generic term like vanilla
JS. Yeah yeah, so the full

25
00:02:30.560 --> 00:02:36.800
okay, go ahead, Yeah for
sure. So the fool it's it's kind

26
00:02:36.800 --> 00:02:39.919
of like a mouthful. So it's
called the ball in JavaScript stack and it's

27
00:02:40.120 --> 00:02:47.360
my own. Like, I just
think that in the gymascript space we sort

28
00:02:47.360 --> 00:02:53.159
of have a lot of excitements when
it comes to building full start as apps.

29
00:02:53.479 --> 00:03:00.400
There's so much going on boats in
terms of actually putting everything together is

30
00:03:00.439 --> 00:03:05.319
sort of like not complete. So
the boring stack was started I think back

31
00:03:05.360 --> 00:03:08.560
in twenty twenty where I was like, you know, the old promise or

32
00:03:08.560 --> 00:03:13.159
the premise of no jars was that
we can build wh JavaScript across the stack,

33
00:03:13.400 --> 00:03:15.000
right, but what we have today. Most times when we want to

34
00:03:15.000 --> 00:03:19.639
build single page applications, you have
like a single page app which is like

35
00:03:19.639 --> 00:03:23.039
a like his own ripor and everything. Then if you if you're going to

36
00:03:23.080 --> 00:03:27.319
do anything sub scated, you're gonna
leave like an API. So that's two

37
00:03:27.439 --> 00:03:30.719
separate Javaski apps that are in separate
ritos. And of course there's a lot

38
00:03:30.759 --> 00:03:35.520
of things. You have double routing
where you have to route on your API

39
00:03:35.840 --> 00:03:40.319
routes then your client side routing,
and that's just scratching the surface, right,

40
00:03:40.800 --> 00:03:44.719
So I wanted something where I could
piece all this together still have a

41
00:03:44.759 --> 00:03:50.360
single page application, but we did
more server centric flow, right, so

42
00:03:50.439 --> 00:03:54.879
that means no more loading spinners,
no more double routing and other things I

43
00:03:55.000 --> 00:04:00.680
saw for us. So that was
it, Like that was the old and

44
00:04:00.719 --> 00:04:04.919
I get to use it in the
old platform. And then I figured out,

45
00:04:05.039 --> 00:04:09.680
you know what. At first I
called it like the vit stack,

46
00:04:09.759 --> 00:04:15.439
which is view innationial tail with that
sales, but it supports react and filt

47
00:04:15.479 --> 00:04:17.639
so that's this reads and see he's
just does me any sense? To me?

48
00:04:17.879 --> 00:04:20.680
I was like, you know what, let's call it what it is,

49
00:04:20.720 --> 00:04:27.120
which is like it's not exciting,
it's just boring, and it gets

50
00:04:27.120 --> 00:04:31.680
to move a really quickly, so
hence the name. I got to say,

51
00:04:31.720 --> 00:04:38.600
you're preaching at the choir because I'm
looking at the repo. And I

52
00:04:38.639 --> 00:04:44.480
have been preaching about inertia, Tailwind
and View for years, both here and

53
00:04:44.600 --> 00:04:46.399
when I was doing the Views on
View podcast, because I have talked to

54
00:04:47.399 --> 00:04:54.639
Jonathan Renick, the creator of Inertia, twice on this podcast, and I

55
00:04:54.639 --> 00:05:00.480
have been using inertia in Tailwind and
View for an app that I've been writing

56
00:05:00.480 --> 00:05:05.000
for last year and for other stuff. The difference between what you're using what

57
00:05:05.079 --> 00:05:11.600
I normally use is I use LERAVL
on the back end. Yeah, but

58
00:05:11.600 --> 00:05:15.639
but yeah, this this stack is
the bomb, and I understand what you're

59
00:05:15.639 --> 00:05:20.360
talking about double routing. It makes
it really nice because Murcia handles all that

60
00:05:20.399 --> 00:05:25.720
and you only have to define your
route once on the back end and everything

61
00:05:25.759 --> 00:05:30.639
gets to pass through those. So
yeah, it's it's I don't I mean,

62
00:05:30.680 --> 00:05:34.519
I'll take don't. I don't know
if I would necessarily coin this as

63
00:05:34.519 --> 00:05:42.920
its own separate stack simply because the
point of inertia is the plug and player

64
00:05:43.000 --> 00:05:46.879
back in with your front end.
And I know initially when I had first

65
00:05:46.879 --> 00:05:51.959
talked to Jonathan. Node was not
an officially poor supported back end supported by

66
00:05:51.959 --> 00:05:59.839
Inertia, but the community had come
up with plug ins to use no,

67
00:06:00.439 --> 00:06:04.680
so I know, like I think
Ruby and Lara Bell were the first back

68
00:06:04.759 --> 00:06:09.120
end that were supported by a nurse
out of the box, along with sales

69
00:06:09.319 --> 00:06:15.160
excuse me with spelt you and React. So walk us through the stack.

70
00:06:15.240 --> 00:06:21.639
What are the pieces and what how
long have they been around and what's the

71
00:06:21.680 --> 00:06:30.560
goal of each? Yeah, for
sure. So one thing I like about

72
00:06:30.560 --> 00:06:36.040
the stack really is that I kind
of see it as basin a lot of

73
00:06:36.079 --> 00:06:43.959
cool technologies at the stable and most
bowing versions, for example, we all

74
00:06:44.199 --> 00:06:48.199
like React for j exs, right, but most of the time when you

75
00:06:48.240 --> 00:06:51.360
get to like you full stack,
okay, I don't really use it that

76
00:06:51.439 --> 00:06:59.439
you speak, But the void is
at the components level, React to stable

77
00:06:59.759 --> 00:07:01.439
right, and it's it's really good
for what it does. Stepway one of

78
00:07:01.600 --> 00:07:05.839
layer stuff like routing and all the
metal frames, it just gets out of

79
00:07:05.879 --> 00:07:11.319
hand. So my thought process was, you know what legs take the components,

80
00:07:11.319 --> 00:07:15.879
which is made possible by inertia,
right, and just let you build

81
00:07:15.920 --> 00:07:20.639
your pages with reacts components which are
just as view which is a single fire

82
00:07:20.680 --> 00:07:27.040
component. Then it speilts own stuff
and let us be the pages and a

83
00:07:27.160 --> 00:07:31.000
more selver centric web framework like sales
which is really old. Serss like what

84
00:07:31.720 --> 00:07:36.000
twelve years or more now, which
is really old, and just take the

85
00:07:36.040 --> 00:07:42.360
stable versions of all the step and
of course stalings which makes starting super good

86
00:07:43.279 --> 00:07:49.600
and just give you an holistic mono
reple like a monolith where you just build

87
00:07:50.079 --> 00:07:56.800
full start JavaScript applications. So there's
Sales which is going to control everything as

88
00:07:56.959 --> 00:08:05.240
the web framework. There's Inertia which
this is your view spelled or read components

89
00:08:05.279 --> 00:08:09.319
together with sales. So why I
think is it makes sense to make it

90
00:08:09.319 --> 00:08:15.920
its own stack because this is just
like the earliest version of it. The

91
00:08:16.040 --> 00:08:22.920
vision is to get it in social
way that for you to build the pages

92
00:08:22.079 --> 00:08:26.920
the way your users are going to
consumments. For example, I don't think

93
00:08:26.120 --> 00:08:33.240
your marketing page should be a single
page application because you literally don't have any

94
00:08:33.279 --> 00:08:37.240
drama script that should run there.
So with this stack, you should be

95
00:08:37.279 --> 00:08:43.840
able to use your jeccess and still
just ship or send back HTML at the

96
00:08:43.919 --> 00:08:46.759
end of the day or like what
you do when you have a single page

97
00:08:46.759 --> 00:08:52.000
application with SSR, Like there's no
need for SSL in your marketing page.

98
00:08:52.080 --> 00:08:58.000
Really, so my thought process is
led to dev use the DSL, which

99
00:08:58.039 --> 00:09:05.559
is the which is the views templates, to use components felled or reacts,

100
00:09:05.000 --> 00:09:11.080
and just give them the option to
build either apps or websites. But's all

101
00:09:11.120 --> 00:09:18.200
in the same code base. You
say, don't say no to chasing JavaScript

102
00:09:18.200 --> 00:09:26.159
trends, Yes, and then you've
got view react and Felter supported tailwind,

103
00:09:26.399 --> 00:09:31.879
et cetera. So what do you
mean by say no to chasing JavaScript trends

104
00:09:33.399 --> 00:09:39.759
when I mean those seem kind of
trendy all those things. Yeah, not

105
00:09:39.919 --> 00:09:45.559
really, So like I said,
we know everything happening in the JS for

106
00:09:45.759 --> 00:09:50.440
for example, now when we have
things with RSC, you know the app

107
00:09:50.480 --> 00:09:54.559
rout and the next years or the
pages router whether they're just all these complexities

108
00:09:54.559 --> 00:09:58.840
that you have to learn in order
to just chip your rectangles to use us

109
00:09:58.840 --> 00:10:03.039
to do stuff with. What I'm
saying is that you don't really need to

110
00:10:03.039 --> 00:10:07.159
go all that trend All your need
is the component, which is the basic

111
00:10:07.080 --> 00:10:13.080
cell of all this from and framework. Leave the whole state management jas because

112
00:10:13.240 --> 00:10:16.000
the borings that you don't need the
state management at all. But you don't

113
00:10:16.039 --> 00:10:20.360
need to know sustained or whatever you
use for state management. Neither those trendy,

114
00:10:20.799 --> 00:10:26.960
because there's some more stable and borrowing
to do things that actually gets you

115
00:10:26.039 --> 00:10:31.960
moving really really quickly. So those
are the trends. The frameworks, they're

116
00:10:31.000 --> 00:10:35.799
really boring. At the components level, there's not so much you could do

117
00:10:35.879 --> 00:10:39.600
with the excess than just write it. But when you start adding all the

118
00:10:39.720 --> 00:10:43.120
trends on top of it, that's
where you just get out of hands.

119
00:10:43.120 --> 00:10:48.279
And we've seen applications that are just
terrible for that use cases. Yeah,

120
00:10:48.840 --> 00:10:52.559
all right, I got that.
So you mentioned state management. There's no

121
00:10:52.600 --> 00:10:56.279
need for state management. I'm curious
to see why that is or why you

122
00:10:56.279 --> 00:11:01.559
say, because I have found niche
where yes, it is still important,

123
00:11:01.559 --> 00:11:05.600
but I'm curious to see why you
say it's not even needed with the stack.

124
00:11:05.679 --> 00:11:11.919
Yeah, definitely, So most times
why you needed like a state manager,

125
00:11:13.200 --> 00:11:18.919
especially when you're building a single payer
applications the normal way, you often

126
00:11:18.120 --> 00:11:24.559
want to sink states across your app
right, because the front that is away

127
00:11:24.559 --> 00:11:28.039
from the back end. But with
the star the owner sort of truth is

128
00:11:28.080 --> 00:11:33.799
the state from the back end.
But we can be cashed of course to

129
00:11:33.960 --> 00:11:37.759
make it really fast, so there
will be no needs. So like the

130
00:11:37.759 --> 00:11:41.039
way I've been building ups and I've
even't seen this even I think Remix also

131
00:11:41.080 --> 00:11:45.639
have this as well. Where there's
no state management, you don't need any

132
00:11:45.679 --> 00:11:48.879
state management. So I'm not talking
about use states. Yeah, I'm talking

133
00:11:48.879 --> 00:11:54.799
about state management libraries wife like the
sour stand. Like in View with Opinia,

134
00:11:54.000 --> 00:11:58.720
you don't really need to synchronize states
in the front end because again it's

135
00:12:00.159 --> 00:12:03.320
centric. So all this did come
from you back data and it just gets

136
00:12:03.960 --> 00:12:11.480
sent to your front that that's prop
shid zta, all facilitied by Yeah,

137
00:12:11.480 --> 00:12:16.679
Okay, So the basically the premise
that you're saying is is that I mean,

138
00:12:16.480 --> 00:12:20.080
is that because I don't know if
it's because of a speed issue,

139
00:12:20.159 --> 00:12:22.080
because of the sort of source of
truth, you don't need the state management.

140
00:12:22.120 --> 00:12:26.480
And I ran into a case using
inertia with you with Lara Belle,

141
00:12:26.480 --> 00:12:31.840
where I had I was dealing with
the calendar app and because of the hierarchy

142
00:12:31.080 --> 00:12:39.639
of of components without state management,
I would have been having to either go

143
00:12:39.759 --> 00:12:45.320
back and forth to my server or
pass props from A to B to C

144
00:12:45.519 --> 00:12:52.879
to D. Granted with View three, you can use inject yes inside the

145
00:12:52.919 --> 00:12:58.960
components whether it called provide inject I
think you can do that. But for

146
00:12:58.200 --> 00:13:03.440
Jonathan, state management isn't prohibited.
You can't use it if you want to,

147
00:13:03.120 --> 00:13:07.000
and I think there probably are going
to be some cases where state management

148
00:13:07.080 --> 00:13:09.159
needed, But to your point,
yeah, you don't need it to the

149
00:13:09.279 --> 00:13:13.919
extent, yeah you will where you're
just using arrest API from the front in

150
00:13:15.000 --> 00:13:16.879
the back end. Now, I
think we should probably do for those that

151
00:13:18.039 --> 00:13:20.559
might not be as similiar with inertia
as you and I are, is to

152
00:13:20.639 --> 00:13:26.000
explain how exactly inertia is working and
what it's how it's working behind the scenes

153
00:13:26.559 --> 00:13:31.039
that invalidates the need for state management. Yeah, definitely, thank you,

154
00:13:31.200 --> 00:13:39.519
Steve. So the old promise of
inertia is that it's acts like erupting library

155
00:13:41.000 --> 00:13:48.679
rights sols of like view route or
the or anyone using reacting language. Right,

156
00:13:48.960 --> 00:13:52.399
but it's kind of interesting to do
it, Walks. So two things

157
00:13:52.440 --> 00:14:00.799
you have to know. It has
a protocol which is like a page So

158
00:14:01.200 --> 00:14:05.799
there's a page object that initial expects
to get sent from the back end,

159
00:14:07.480 --> 00:14:11.559
and that page object has the name
of the components and prop which would be

160
00:14:11.639 --> 00:14:16.519
like the proper you want to pass
to your components. So For example,

161
00:14:16.639 --> 00:14:20.960
if on the page we have like
an initial link, if you click on

162
00:14:20.000 --> 00:14:26.879
that link, Initia is going to
intercept that click so that that you don't

163
00:14:26.919 --> 00:14:31.879
make a full page request, but
it's going to send an AGEAX requests to

164
00:14:31.960 --> 00:14:35.320
get that page object. So once
you get the page object, it uses

165
00:14:35.399 --> 00:14:41.960
the name of the component to find
the component in like maybe if a pages

166
00:14:41.039 --> 00:14:48.559
slash in the extra says, and
then swap the current page with that page

167
00:14:48.279 --> 00:14:54.120
as well as passing the problems that
the page needs just like that. Okay,

168
00:14:54.440 --> 00:14:58.440
So doing so you find that you
don't need like a loading spinal because

169
00:14:58.440 --> 00:15:00.679
as soon as you click the link, it goes to the back end.

170
00:15:00.799 --> 00:15:05.559
I guess the pitches and also the
prop so it's it comes with the data

171
00:15:05.639 --> 00:15:09.159
it needs, so you don't have
to make an extra request to get the

172
00:15:09.279 --> 00:15:13.399
data. So that's at the high
level, that's like, well it works,

173
00:15:13.519 --> 00:15:16.200
and of course the headers you have
to send we're is all going to

174
00:15:16.279 --> 00:15:20.759
be taken care of by the sem
aside adapter that you're using. So I

175
00:15:20.879 --> 00:15:26.279
wrote the one for sales, so
there's there's also official one for laville and

176
00:15:26.720 --> 00:15:31.679
of course rails. That's basically what
it's doing. Exist the best way I've

177
00:15:31.679 --> 00:15:37.840
heard it put is that it's hijacking
the request from the browser and instead of

178
00:15:37.919 --> 00:15:41.080
doing a full page reload, it's
just passing the data back and forth so

179
00:15:41.159 --> 00:15:46.440
that your browser isn't doing a full
load. And so when you're writing your

180
00:15:46.519 --> 00:15:52.279
back end, no rails, what
have you, you say okay, in

181
00:15:52.679 --> 00:15:58.120
whatever your function is that that's saying
okay, return this value. You're telling

182
00:15:58.159 --> 00:16:00.559
it, okay, this is the
component that I want you to pass it

183
00:16:00.639 --> 00:16:04.799
to, and here are the props
that go to this particular component. And

184
00:16:04.919 --> 00:16:08.120
so then in your in your front
end component, you just expect your props

185
00:16:08.159 --> 00:16:11.600
as you normally would, you know, from anything else, and that way,

186
00:16:11.679 --> 00:16:17.000
it's that makes it very much a
lot quicker because you're bypassing the page

187
00:16:17.080 --> 00:16:19.200
reloader it uses. And if you
look in the inertia docks at are Ersegas

188
00:16:19.279 --> 00:16:23.240
dot com and talks about the headers
that it uses to determine what's going on.

189
00:16:23.960 --> 00:16:27.759
And then even within you know,
if you're within a component you want

190
00:16:27.759 --> 00:16:32.080
to click a button and you want
to, you know, just go to

191
00:16:32.120 --> 00:16:34.000
your back end and get some data
without reloading the page. That has some

192
00:16:34.080 --> 00:16:37.840
helper functions like visit where you can
say, okay, go to this url,

193
00:16:38.639 --> 00:16:41.840
it calls your method, you do
what she needs to do, and

194
00:16:41.879 --> 00:16:45.320
then it returns it. So it
makes it very quick because of bypassing the

195
00:16:45.360 --> 00:16:52.480
whole page reloading. That's really all
it does. And then not sure if

196
00:16:52.519 --> 00:16:55.399
we cover this in detail, but
your routes, you're only defining your routes

197
00:16:55.440 --> 00:16:59.240
in your back end and it's just
using those if you go to the docks,

198
00:16:59.240 --> 00:17:00.360
it just says, yeah, to
find your routes in your back end,

199
00:17:00.399 --> 00:17:03.039
you call them from the front end, where normally with like a USPA,

200
00:17:04.240 --> 00:17:07.359
you would have your your view router
configuration where you've got to find your

201
00:17:07.440 --> 00:17:11.400
routes and then it calls the standpoints
on and so forth. So it makes

202
00:17:11.440 --> 00:17:15.799
it much neaterer and cleaner, and
that you're only finding your routes in one

203
00:17:15.880 --> 00:17:18.440
place instead of instead of two different
places and both your front and your back

204
00:17:18.519 --> 00:17:22.160
end. Right, So, what
are some other things that you wanted to

205
00:17:22.440 --> 00:17:29.799
that you want people to know about
the boring stack, either implementation details or

206
00:17:30.039 --> 00:17:37.799
philosophy. Yeah, definitely. So
the first thing is that you don't need

207
00:17:37.079 --> 00:17:45.960
to because in the JavaScript cycles of
new trends, and you feel if you're

208
00:17:45.319 --> 00:17:53.920
already no view and reacts or is
built? Are you like the component?

209
00:17:55.000 --> 00:17:57.839
Because I find out most times what
we like in these promotes is the DSL

210
00:17:59.039 --> 00:18:03.160
that they like that they to us
write our U eyes in right. So

211
00:18:03.359 --> 00:18:06.359
if you if you want to shout
out the noise that you have to piece

212
00:18:06.440 --> 00:18:10.880
yourself. Because why I liked Sales
back in the day was I started to

213
00:18:11.279 --> 00:18:15.200
know just with Express and it was
a paint to always have to go find

214
00:18:15.440 --> 00:18:19.480
for everything that I need in order
to build an API. In Express,

215
00:18:19.559 --> 00:18:23.000
I have to piece everything together.
So I found Sales and they just have

216
00:18:23.519 --> 00:18:27.440
everything you need. So there were
a lot of conventions that work, which

217
00:18:27.480 --> 00:18:33.039
is MVC. So that's same thing
that Sales let me do, which is

218
00:18:33.119 --> 00:18:36.079
the move with quick. That's what
the start is trying to do, which

219
00:18:36.160 --> 00:18:41.119
is if anyone, even if you're
a new by, your already know components

220
00:18:41.279 --> 00:18:45.039
in whatever you have frameworks you like, all you have to do is to

221
00:18:47.160 --> 00:18:52.039
user start right your components like sixty
percent of the time because your back end

222
00:18:52.200 --> 00:18:56.960
just act like the data layer.
I just just sending down a page with

223
00:18:56.039 --> 00:19:02.519
the prop. Then you do everything
that you normally do components and it's just

224
00:19:02.640 --> 00:19:07.680
a brudge to work with I've had
folks seeing that we're using next Years have

225
00:19:07.920 --> 00:19:11.680
a demo of the stack, and
they really really loved it because of how

226
00:19:11.880 --> 00:19:14.480
simple it is, and it takes
a lot of stuff, like cause is

227
00:19:14.519 --> 00:19:17.400
no longer an issue because you're backing
at your front there at the same page,

228
00:19:17.440 --> 00:19:19.079
so you don't have to worry about
all that, all right, so

229
00:19:19.240 --> 00:19:23.759
the old reckless hell of course it's
not long your thing to worry about.

230
00:19:25.359 --> 00:19:27.319
And it just sort of like makes
sense, right, like when you use

231
00:19:27.400 --> 00:19:33.200
something that is there's holistic, Like
I said, no loading spinners, Like

232
00:19:33.880 --> 00:19:37.960
I've had to deal with that,
where why is the page loading? And

233
00:19:37.039 --> 00:19:41.480
I still have to go fetch data
for it again? Right, like to

234
00:19:41.599 --> 00:19:44.440
give you this empty share which is
your spa promise, you know, just

235
00:19:44.559 --> 00:19:47.920
look the page and get the data. But there's no benefit of the page

236
00:19:47.960 --> 00:19:52.039
to the user if you've seen a
loading spinner. So the page load first

237
00:19:52.079 --> 00:19:56.319
of all with the normal browser load
that's some seconds. Then do you not

238
00:19:56.440 --> 00:19:59.839
have to load your own? It's
just too much. So I feel like

239
00:20:00.000 --> 00:20:03.680
you want to keep the simple,
keep things really really fast. You should

240
00:20:03.759 --> 00:20:07.480
use the boranch start because it just
does all that. And again you're not

241
00:20:07.599 --> 00:20:14.160
construmed from what's sending Jason over the
wire. You can also do that because

242
00:20:14.400 --> 00:20:18.880
it doesn't construme you not to do
that, So you could still have pages

243
00:20:18.559 --> 00:20:23.279
send the inertial way and also Bill
fetch your data with Jason if you want.

244
00:20:26.799 --> 00:20:30.519
Okay, so two questions, I'll
try this one. I mean,

245
00:20:30.559 --> 00:20:36.359
I hear both sides of this argument
about should your application use its API?

246
00:20:37.559 --> 00:20:40.759
Are you going to export an API
to customers? And then, if so,

247
00:20:41.240 --> 00:20:44.279
should your application use your API?
And I've kind of always been on

248
00:20:44.319 --> 00:20:48.240
the side of yes, your application
should use your API. And my reasoning

249
00:20:48.359 --> 00:20:56.720
for that has been that when people
design, like most people don't have experts

250
00:20:56.960 --> 00:21:03.440
on the team, right, and
when people are designing their front end and

251
00:21:03.519 --> 00:21:07.240
their back end together, then everything
starts to look like the front end,

252
00:21:07.319 --> 00:21:11.599
right. So when there's a form
on the front end, then the data

253
00:21:11.720 --> 00:21:15.160
model starts to look like that form, and the database table starts to look

254
00:21:15.279 --> 00:21:19.240
like that form. And then when
it comes time that you need to modify

255
00:21:19.400 --> 00:21:26.039
things or add an API or expose
a customer integration, you're just screwed.

256
00:21:26.240 --> 00:21:37.000
And I'm curious with this stack,
are you advocating it to people that are

257
00:21:37.119 --> 00:21:40.960
going to be exporting things that are
going to integrate with others. Are there

258
00:21:41.079 --> 00:21:47.480
some guardrails in place to help people
fall into the pit of success in terms

259
00:21:47.519 --> 00:21:53.400
of data modeling or is it really
just for kind of like the javscript versions

260
00:21:53.400 --> 00:22:00.200
of rails where it's you're going to
create a cookie cutter site and you're not

261
00:22:00.319 --> 00:22:03.920
You're not really going to be,
you know, exporting an API or something.

262
00:22:03.000 --> 00:22:08.440
You're just building a like a like
it's more customizable than WordPress, but

263
00:22:08.559 --> 00:22:11.400
you want to do it in JavaScript
rather than Ruby on rails, Like,

264
00:22:11.759 --> 00:22:15.480
I guess there was a lot of
stuff there, but yeah, you pick

265
00:22:15.519 --> 00:22:19.799
at any of that. Yeah,
definitely. So for our sales mix for

266
00:22:19.880 --> 00:22:26.119
a really good framework for building APIs, Like I do know Postman and Pastack

267
00:22:26.240 --> 00:22:32.400
they use it Postman for micro services
and Pastack for like, yeah, public

268
00:22:32.400 --> 00:22:34.960
facing a PI. You can't build
an a p I a right, And

269
00:22:36.319 --> 00:22:40.559
this thing is what I've seen and
I think a couple of us. So

270
00:22:41.279 --> 00:22:45.640
I used to be a very good
advocate for recpis. I still am.

271
00:22:45.240 --> 00:22:52.839
But the through is for most apps
you won't need to expose a sp I.

272
00:22:52.519 --> 00:22:56.039
Sometimes I get people say, like, you know what, let's vie

273
00:22:56.200 --> 00:22:59.559
the RECIPEI now and use it so
that when we have to expose it,

274
00:23:00.680 --> 00:23:07.680
it's just the what the truth is
your API that you use for your app

275
00:23:08.079 --> 00:23:11.279
a lot of the time, if
you want to suppose it, it won't

276
00:23:11.319 --> 00:23:15.920
be the same. So I've seen
this work, but like when seems that

277
00:23:17.079 --> 00:23:18.279
to be, like, you know
what, let's build an API so that

278
00:23:18.400 --> 00:23:21.799
we can consume it, and of
course I suppose it. It's not going

279
00:23:21.839 --> 00:23:23.519
to be the same thing, so
the use case is never the same.

280
00:23:23.599 --> 00:23:29.279
That's when we have terms like back
and for front end, and you start

281
00:23:29.359 --> 00:23:33.400
have like you start having to modify
different parts of the Jason your center back.

282
00:23:33.039 --> 00:23:37.480
So to your point, this tack
is mostly for full start applications.

283
00:23:38.359 --> 00:23:42.039
Most apps are okay being food that
applications, especially if your client is on

284
00:23:42.160 --> 00:23:45.839
the web. You don't have to
build an API, which is the entire

285
00:23:45.880 --> 00:23:49.759
idea of of initial which is like, you don't need an API, but

286
00:23:49.920 --> 00:23:56.079
if you must, you can expose
your API routes. But I wouldn't say

287
00:23:56.160 --> 00:24:00.160
that the same API routs for you
for your own private use the same you're

288
00:24:00.200 --> 00:24:07.759
going to suppose. It's most likely
doesn't always work out really well, I

289
00:24:07.920 --> 00:24:15.559
know, right, So on the
I think the old recipe. I thought,

290
00:24:15.640 --> 00:24:18.279
right, if you could use your
your private one I used to,

291
00:24:18.359 --> 00:24:26.960
I suppose the same one. Have
you had to do that? So I

292
00:24:27.319 --> 00:24:30.799
I just think that if the data
is modeled well, I mean, well

293
00:24:30.839 --> 00:24:37.880
then this this comes to the SPA
versus the service I render issue. But

294
00:24:38.039 --> 00:24:44.279
I think if the data is modeled
well, then you you should be able

295
00:24:44.359 --> 00:24:48.079
to use it externally and internally.
And yes, you may need to tweak

296
00:24:48.119 --> 00:24:55.640
it for the internal use, but
but then you have to you have to

297
00:24:55.759 --> 00:24:59.119
model it well. And if it's
modeled well, I mean, but this

298
00:24:59.359 --> 00:25:03.720
this is the whole thing of like
the PHP style where you're exporting the data

299
00:25:03.119 --> 00:25:10.880
specifically for a form view or a
gallery view or whatever, versus you're exporting

300
00:25:11.039 --> 00:25:15.759
information, Like are you exporting a
view as Jason or you exporting information?

301
00:25:15.839 --> 00:25:23.319
If you're exporting a view as Jason, then it's not really an API.

302
00:25:23.480 --> 00:25:27.720
It's it's a it's a particular view
of the data. It's not about the

303
00:25:29.079 --> 00:25:32.559
properties or the values of the data
or the relationships of the data. It's

304
00:25:32.599 --> 00:25:37.759
about I wanted to show this gallery
with this this pieces of information. You're

305
00:25:37.759 --> 00:25:40.960
selecting that, right, And that's
and that's kind of like the promise of

306
00:25:41.039 --> 00:25:44.920
graph QL is that you don't have
to make the decision. You get to

307
00:25:45.039 --> 00:25:48.000
do both and then you know,
we saw how that turned out. But

308
00:25:48.200 --> 00:25:52.240
you know, on the other side, if the data is not modeled to

309
00:25:52.359 --> 00:25:56.599
the UI, then if you're trying
to do whether you're doing client side rendering

310
00:25:56.799 --> 00:26:00.480
or service side rendering, then you
have to have another layer that's going to

311
00:26:00.599 --> 00:26:03.480
consume the API, which I guess
you know, either it's the back end

312
00:26:03.519 --> 00:26:08.079
for the front end, or it's
the or it's it's more sophisticated front end

313
00:26:08.160 --> 00:26:12.319
where you need to fetch a bunch
of objects, you need to iterate through

314
00:26:12.359 --> 00:26:15.680
them, you need to attach the
extra data for them. And so I

315
00:26:15.759 --> 00:26:22.480
guess I guess maybe I think of
a of an API as being a little

316
00:26:22.519 --> 00:26:26.079
bit closer to the model with some
of the business logic that needs to be

317
00:26:26.160 --> 00:26:33.599
done on top of it solved,
and a view is more like what what's

318
00:26:33.680 --> 00:26:36.920
going to be templated. I don't
know, I don't know where I'm going

319
00:26:36.960 --> 00:26:40.480
with that. I'm just thinking out
loud. No, yeah, like I

320
00:26:40.640 --> 00:26:45.440
get the thought. But I think
when we go into real world we sort

321
00:26:45.440 --> 00:26:48.359
of like, see, so you
just painted an ideal API hing, but

322
00:26:48.720 --> 00:26:52.240
if that was the case of every
app, we wouldn't need graphs. All

323
00:26:52.480 --> 00:26:56.759
the different solutions we have tried to
come up with just for like, our

324
00:26:56.960 --> 00:27:00.000
UIs to get just the data it
needs, so do all over an affetching

325
00:27:00.079 --> 00:27:04.200
thing. It gets to tell us
that that ideal the PI is not really

326
00:27:04.599 --> 00:27:10.319
what the end consumer would need.
So if I just send you know what,

327
00:27:10.599 --> 00:27:15.000
this is my generative game, which
is tied to the data and it's

328
00:27:15.119 --> 00:27:18.000
modern, really well, my UI
will have to now do some extra work

329
00:27:18.119 --> 00:27:21.240
right to get just the data it
needs, you know, like, okay,

330
00:27:21.279 --> 00:27:23.680
let's put the graph on top of
this one. Two cannot pick face.

331
00:27:25.480 --> 00:27:30.680
So with the boring stack, now
the you I only get the data

332
00:27:30.759 --> 00:27:33.440
it needs. And this is suitable
for just web apps. So instead of

333
00:27:33.480 --> 00:27:37.000
you thinking of okay, graph c
so I can need to pick so the

334
00:27:37.079 --> 00:27:40.720
page will only come with the data
that that page need. So there's no

335
00:27:40.880 --> 00:27:42.880
overfetching, there's no un affection.
You only get in the data you need.

336
00:27:44.319 --> 00:27:48.400
So we did have a couple of
questions here, I'll go ahead and

337
00:27:48.480 --> 00:27:53.160
field which I think you just answered
this one to confirm the boring stack compiles

338
00:27:53.279 --> 00:27:57.200
the page with the props you passed
into it, right, Yes, So

339
00:27:57.960 --> 00:28:04.079
it makes an asp PA look like
a static site. If you if you

340
00:28:04.200 --> 00:28:10.200
look at the source code of an
inertia page, what you'll see is there's

341
00:28:10.240 --> 00:28:14.799
a big, huge data attribute of
the top page that has all the data

342
00:28:14.799 --> 00:28:18.160
that's been passed into it as props. And that's how it's scoring that and

343
00:28:18.279 --> 00:28:22.559
accessing that. Yeah, I'm not
sure I understand what it means. What

344
00:28:22.799 --> 00:28:27.519
makes it look static because it's still
because what I guess, because the data

345
00:28:27.599 --> 00:28:30.240
is passed in before the page is
actually compiled. I mean, it can

346
00:28:30.279 --> 00:28:33.680
be verysly. I do a lot
of really cool dynamic stuff with the page

347
00:28:33.720 --> 00:28:38.160
as well. Once it's loaded,
you know where I just send you know,

348
00:28:38.200 --> 00:28:42.119
a little bit of data back to
my API and it passes it back

349
00:28:42.160 --> 00:28:45.359
and I only update that certain section
of the page without the whole you know,

350
00:28:45.640 --> 00:28:49.119
browser reload, which is part of
inertia, and there's some stuff you

351
00:28:49.160 --> 00:28:52.680
got to do. There's some really
cool props you can pass that says okay,

352
00:28:55.640 --> 00:28:59.119
only get me to change data or
only get me such and such data.

353
00:29:00.400 --> 00:29:04.440
So it's doing the absolute minimum in
terms of traffic between the front and

354
00:29:04.480 --> 00:29:10.759
the back end. Yeah, definitely. And to add to that, point.

355
00:29:10.880 --> 00:29:18.200
Sometimes in the old traditional way,
you often get to like if I

356
00:29:18.960 --> 00:29:22.799
submit the form, or like I
want to reload the page back after like

357
00:29:22.880 --> 00:29:26.400
an update, you just get everything
back, right, Like maybe I have

358
00:29:26.559 --> 00:29:30.880
like a course to space, and
I just edit just one course. When

359
00:29:32.000 --> 00:29:36.880
I submit the form with my agents
and everything, the data would just send

360
00:29:36.920 --> 00:29:41.079
back the JAP blog, right.
But with this one, with this tag,

361
00:29:41.079 --> 00:29:45.039
which is really cool and it's powered
by inertia, you could just need

362
00:29:45.079 --> 00:29:48.559
to pick what you want back,
be like, okay, this course in

363
00:29:48.640 --> 00:29:53.000
this process, list was the only
thing changed, return it back for me,

364
00:29:55.079 --> 00:29:56.960
right. So it's I don't want
to call it giving you the power

365
00:29:57.119 --> 00:30:02.359
graphical, but it's sort of like
you have control of what gets returned back

366
00:30:02.480 --> 00:30:07.400
from the server. With all the
APIs that inertia is going to provide for

367
00:30:07.480 --> 00:30:12.480
you. You could preserve scroll and
you could do a ton of stuff that's

368
00:30:12.559 --> 00:30:17.599
really really cool that we can't really
actually get into because it's just it's simple.

369
00:30:18.440 --> 00:30:21.519
It's a routing layer, but it
has so much power. Well,

370
00:30:22.640 --> 00:30:27.039
what are some other what what are
some other questions that we we should be

371
00:30:27.200 --> 00:30:34.160
asking you? Oh yeah, yeah, So so Steve's point so earlier on

372
00:30:34.319 --> 00:30:38.440
in measure that it's not sure why
this should be zone stack, but I'm

373
00:30:38.440 --> 00:30:41.640
making a zone stack because at the
end of the day, my vision is

374
00:30:41.680 --> 00:30:48.599
that inertia it's not just so making
not all pages are mediequal. Right.

375
00:30:48.920 --> 00:30:55.160
So in an SPA land, because
you're using React SPA, everything should be

376
00:30:55.279 --> 00:30:59.599
a React SPA because it is in
nextges, everything is SSR if you want

377
00:30:59.640 --> 00:31:02.359
that, or all the I SR
and everything you have to do. But

378
00:31:02.720 --> 00:31:06.160
in my world, or in the
boring staff world, we know that not

379
00:31:06.440 --> 00:31:10.960
every page should be a single page
application, none, that every page should

380
00:31:11.000 --> 00:31:15.759
have SSR. Right, So we
are using inertial to power these single page

381
00:31:15.799 --> 00:31:22.039
apps. Right. And there's something
I'm currently working on which I've actually mentioned

382
00:31:22.279 --> 00:31:26.599
a little bit before, which is
even now in sales world we use EAGs

383
00:31:26.640 --> 00:31:30.480
for templates, but I feel like
having to learn to DSL to author pages

384
00:31:30.640 --> 00:31:33.960
people don't like. I think me
and myself, I don't like egs at

385
00:31:33.960 --> 00:31:37.640
all. I don't like the same
tax at all. So my thought process

386
00:31:37.759 --> 00:31:42.160
is, what if you can use
the same jexs you write for your clients

387
00:31:42.200 --> 00:31:48.559
side up and also your back end
views INSS as well, so that for

388
00:31:48.680 --> 00:31:51.880
pages like the home page, they
are back page, the priceing page.

389
00:31:51.880 --> 00:31:53.759
Of pages that don't need jamas at
all, you can still write the same

390
00:31:53.880 --> 00:32:01.200
gess but when it gets acts for
like user, you just send them HTML,

391
00:32:01.799 --> 00:32:08.039
which is SEU friendly, does not
have anything to do with the user

392
00:32:08.160 --> 00:32:14.920
in terms of JAMA scripts load.
Right. So this is the key piece

393
00:32:15.079 --> 00:32:17.480
of the broying stack which is still
being walked on today because I feel like

394
00:32:19.279 --> 00:32:23.599
you can have this hybrid app but
the same code base, the same dear

395
00:32:23.640 --> 00:32:27.319
story you're writing. All you have
to do is to know that, okay

396
00:32:27.440 --> 00:32:30.119
for this, this is so my
slash dashboard, it's my single page app.

397
00:32:30.880 --> 00:32:38.799
My marketing page should be HTML because
that's what value you get from the

398
00:32:40.680 --> 00:32:45.759
from the marketing page is more content, right, content and SEO. So

399
00:32:45.920 --> 00:32:52.759
I saw this this talk from someone
at Netflix where they had to remove react

400
00:32:52.799 --> 00:32:59.799
from the marketing page and then saw
an increase in conversion because they all hydration

401
00:33:00.519 --> 00:33:05.680
was taken too long and people were
actually clicking away. So just imagine you

402
00:33:05.720 --> 00:33:15.559
are still using reacts, but you're
sitting down htmoor by default. Yeah yeah,

403
00:33:15.559 --> 00:33:21.039
I mean I that as somebody who
is a big fan of scraping and

404
00:33:21.680 --> 00:33:25.599
being able to get to data when
no API is provided. I really do

405
00:33:25.759 --> 00:33:31.480
hate react sites because there is no
data on the page. Yeah, and

406
00:33:32.160 --> 00:33:36.799
it is. Yeah, it's it's
really frustrating because there's so many sites out

407
00:33:36.839 --> 00:33:39.119
there that have useful information. It's
like, I just want to automate something

408
00:33:39.200 --> 00:33:42.960
off of this, and they,
you know, they haven't bothered to create

409
00:33:43.000 --> 00:33:47.039
an API for it, and and
so yeah, from from that perspective,

410
00:33:47.640 --> 00:33:52.799
whether it's because the search engine is
going to be able to understand it better,

411
00:33:53.000 --> 00:33:57.400
or the GPT is going to be
able to understand it better, or

412
00:33:57.640 --> 00:34:01.319
just because I know a lot of
people don't like the idea of somebody scraping

413
00:34:01.400 --> 00:34:05.400
the content off of their site.
But I don't know. I hope if

414
00:34:05.440 --> 00:34:10.280
you've got valuable content and you're not, you're not in a business where you're

415
00:34:10.360 --> 00:34:17.360
creating a product out of the content, particularly like just make it in a

416
00:34:17.480 --> 00:34:21.599
format that's easy for people to consume. Otherwise, I guess why are you

417
00:34:21.800 --> 00:34:23.599
Why are you creating the content in
the first place. Some people should be

418
00:34:23.599 --> 00:34:27.440
able to use it in some some
way. So, yeah, I really

419
00:34:27.599 --> 00:34:34.280
like the idea of for static pages
render them. So so does this does

420
00:34:34.360 --> 00:34:37.719
this have some sort of mechanism where
you can say, Okay, these pages

421
00:34:37.800 --> 00:34:44.199
are mostly static, so treat treat
them as such, and then these pages

422
00:34:44.320 --> 00:34:49.679
are mostly dynamic. So you know, these pages are more component heavy and

423
00:34:49.800 --> 00:34:53.159
these pages are more content heavy.
Is there a differentiation between the two or

424
00:34:53.239 --> 00:35:01.320
is it just you're always getting the
static benefit by way of you know,

425
00:35:01.440 --> 00:35:07.599
it's it's it's rendering things as the
as the props are past them. Yeah,

426
00:35:07.960 --> 00:35:13.239
So what's going to happen is that
they're going to be two places to

427
00:35:13.360 --> 00:35:17.639
define your your components. Right.
So now in the stack, so we

428
00:35:17.800 --> 00:35:27.800
have assets like jas and pages,
so that page directory is where you find

429
00:35:28.119 --> 00:35:35.039
your XPA pages. Right. Then
if you want to define your STML pages,

430
00:35:35.039 --> 00:35:37.360
which is going to be in your
components, you could do it in

431
00:35:37.559 --> 00:35:45.440
views. So we all know the
old emphys at model, views and controller.

432
00:35:45.599 --> 00:35:51.239
So once you define something in jers
inside the views folder, it's going

433
00:35:51.360 --> 00:36:00.679
to be compowd at request time and
send back as at right, so the

434
00:36:00.960 --> 00:36:06.519
only convention you have to know is
and the views older you will are only

435
00:36:07.480 --> 00:36:14.119
defining components that are going to be
used as templates for your server side rendering.

436
00:36:14.960 --> 00:36:17.639
And once it gets to the user, there is no hydration because you

437
00:36:17.719 --> 00:36:22.840
don't need this, right, It's
just these pages has stating their hym but

438
00:36:22.360 --> 00:36:27.079
just for your DX you can still
use the same components you're using for your

439
00:36:27.119 --> 00:36:30.519
single applications. So that's just the
convention. Like I said, this part

440
00:36:30.599 --> 00:36:37.320
is still being worked on. And
I saw who know from class flare.

441
00:36:37.480 --> 00:36:40.440
I think yes, I think we
know from classware, so it's a new

442
00:36:40.519 --> 00:36:49.800
framework. They also do this where
you can write your your templates in gxcess.

443
00:36:50.679 --> 00:36:55.079
Yeah, so's actually a very good
and vible idea. I think Netflix

444
00:36:55.199 --> 00:37:00.519
does it too, and a little
bit of paper as well. So we

445
00:37:00.719 --> 00:37:05.199
can't do this like for like since
forever now right, but with this like

446
00:37:05.360 --> 00:37:10.239
next years and remixed, it's sort
of like I've been archived for you to

447
00:37:10.440 --> 00:37:15.800
just go use next for something else. But I think those components can be

448
00:37:15.840 --> 00:37:20.519
really good templates if you just have
the engineering to just make it really nice

449
00:37:20.519 --> 00:37:23.000
to use. Now, for what
it's worth, is probably worth mentioning along

450
00:37:23.039 --> 00:37:27.639
these lines that I know this came
in later after the initial at least,

451
00:37:27.760 --> 00:37:35.679
But Inertia has a service side rendering
capability. Yes, that's mentioned in their

452
00:37:35.760 --> 00:37:43.760
docs, so there's a whole page
on how they implemented, but it does

453
00:37:43.880 --> 00:37:46.920
take that capability have that capability,
so that not every page has to be

454
00:37:47.360 --> 00:37:54.800
a job script rendered template. Yeah. So the the only difference with that

455
00:37:54.960 --> 00:38:01.280
one with the SSL one it needs
to hydrate, right, So yeah,

456
00:38:01.440 --> 00:38:07.119
and full there sellicide views that I'm
talking about. It shouldn't hydrate because you

457
00:38:07.320 --> 00:38:13.079
don't need the Joba script right And
even in larre Bell I know you can

458
00:38:13.159 --> 00:38:16.199
do you can just return and you
know that you do the view. You

459
00:38:16.280 --> 00:38:22.199
know in an interview, you can
have your hard coded ah htmo. There's

460
00:38:22.199 --> 00:38:27.599
been ways you can do that.
So but the point is even with this,

461
00:38:27.760 --> 00:38:31.599
there's not every page doesn't have to
be a dynamic job screen template.

462
00:38:32.519 --> 00:38:37.440
Yeah for sure. All right,
well it sounds like we're kind of wrapping

463
00:38:37.559 --> 00:38:45.159
up here. I think we've covered
a fair amount of the topic. If

464
00:38:45.239 --> 00:38:49.519
people want to learn more or if
they want to reach out to you,

465
00:38:49.639 --> 00:38:54.119
where should they head. Yeah,
so you could go to the dogs for

466
00:38:54.239 --> 00:38:58.840
the bowling stock, which is dogs
the sky, the com slash bowl stock,

467
00:38:59.519 --> 00:39:01.840
or just of com slash boring to
take you to the repo. It

468
00:39:01.960 --> 00:39:06.280
can of schedule links of the dogs. So if you want to reash out

469
00:39:06.320 --> 00:39:12.719
to me, you could join this
discord slash chats, or you could just

470
00:39:12.800 --> 00:39:21.960
sweet at me at Dominos And yeah, your questions and do you know about

471
00:39:22.280 --> 00:39:24.800
picks? Were you informed of that
we do a thing called picks at the

472
00:39:24.880 --> 00:39:28.840
end of the show. No,
I did not. What's that you have

473
00:39:28.920 --> 00:39:31.199
to feel? Met Steve, and
I'll go first. It's just you pick

474
00:39:31.280 --> 00:39:35.800
something you're interested in or something that
you thought was cool. Could be tech,

475
00:39:35.960 --> 00:39:38.639
could be a movie, could be
uh you know, some sort of

476
00:39:40.119 --> 00:39:45.320
article and a newspaper or whatever.
You just pick pick something that that you

477
00:39:45.440 --> 00:39:47.800
think is cool. And then before
I do that, Steve, did I

478
00:39:47.880 --> 00:39:52.039
do everything right? Do we leave
anything off before we close out the show

479
00:39:52.119 --> 00:39:57.320
here? Uh? No, I
think we got to cover. If we

480
00:39:57.360 --> 00:39:59.840
do remember something, it will be
after we're done. Then we'll have to

481
00:40:00.920 --> 00:40:04.519
added in somehow. I'm sure.
I thank fornight. You're pretty good.

482
00:40:05.960 --> 00:40:10.079
Okay, well, I will go
ahead and lead us off with a few

483
00:40:10.159 --> 00:40:16.480
picks. So, as I mentioned
last time, I have gotten into the

484
00:40:16.760 --> 00:40:28.679
aquarium hobby and it's very fascinating because
it's there's a lot of technical stuff to

485
00:40:28.840 --> 00:40:31.760
learn and do. Some stuff that's
pretty rote, like if you learn how

486
00:40:31.840 --> 00:40:38.039
to do I like things that are
functional from the perspective of if you do

487
00:40:38.480 --> 00:40:42.719
X, you get result why,
and you get result why every time.

488
00:40:42.840 --> 00:40:46.360
That is something that you know has
drawn me to computers and programming, and

489
00:40:46.480 --> 00:40:52.960
I like to optimize things in my
life. I will take the same routes

490
00:40:53.119 --> 00:40:58.119
on a road, like my brain
is like a reduced instruction set processor.

491
00:40:58.199 --> 00:41:00.440
I will take the same routes on
the road, even if I know a

492
00:41:00.519 --> 00:41:06.800
more efficient route is available, because
I just rather get better at these particular

493
00:41:07.400 --> 00:41:10.360
set of routes rather than every possible
route. And I've got a buddy who

494
00:41:10.639 --> 00:41:14.119
when he drives with me, he's
like, oh, well, you know

495
00:41:14.360 --> 00:41:15.559
if you went this way, you'd
get there faster. I'm like, yeah,

496
00:41:15.599 --> 00:41:21.000
but I'm just gonna take State Street
or Main Street because because that,

497
00:41:21.280 --> 00:41:23.519
you know, that's I just I
travel the same roads, I do the

498
00:41:23.599 --> 00:41:30.800
same things. I even oftentimes eat
the same foods very very much. That

499
00:41:31.639 --> 00:41:39.000
I just well, it's it's beyond
habit. It's I am customizing for fewer

500
00:41:39.159 --> 00:41:45.719
mental inputs. But this, the
aquarium hobby kind of goes against that because

501
00:41:46.239 --> 00:41:52.440
there there is no way to really
jump start your aquarium. You you can

502
00:41:52.639 --> 00:42:00.039
have anyway you there's there's just a
lot of levers and knobs that you you

503
00:42:00.159 --> 00:42:02.400
have to learn, and they're going
to be different for everybody because your tap

504
00:42:02.480 --> 00:42:07.039
water is different where you live,
The fish that you get might be used

505
00:42:07.079 --> 00:42:10.679
to different parameters. The plants that
you want are different than the plants that

506
00:42:10.760 --> 00:42:15.440
somebody else wants. The type of
things you're trying to combine in your tank

507
00:42:15.800 --> 00:42:21.400
to create the environment you want are
different. And the ecosystem just isn't natural.

508
00:42:21.760 --> 00:42:24.760
You know that these fish don't naturally
to go together, These plants don't

509
00:42:24.840 --> 00:42:29.719
naturally go together. These fish and
these plants don't naturally go together, and

510
00:42:29.880 --> 00:42:35.320
so trying to create a self sustaining
ecosystem is kind of impossible, or at

511
00:42:35.400 --> 00:42:38.039
least there's trade offs. There's there
are no solutions, only trade offs.

512
00:42:38.119 --> 00:42:45.559
That quote certainly applies in this case. Anyway. I didn't mean to go

513
00:42:45.679 --> 00:42:50.840
that much into all of that,
but I guess it's just super fascinating to

514
00:42:51.000 --> 00:42:54.559
me because I'm trying to learn how
to create the ecosystem that I want inside

515
00:42:54.599 --> 00:43:00.800
of this little glass box. And
it's hard to get the parameter right because

516
00:43:00.800 --> 00:43:07.079
they're living things, and you can't
just even if something is generally true,

517
00:43:07.199 --> 00:43:12.000
the evolution that you're getting like that, if you breed some fish, if

518
00:43:12.000 --> 00:43:17.280
you breed some guppies or you breed
some tetras or whatever. The next generation

519
00:43:17.920 --> 00:43:23.800
that you're getting from what you bought
is more specific and tuned to its environment.

520
00:43:24.000 --> 00:43:29.559
So the next generation is going to
be different. As you get more

521
00:43:29.679 --> 00:43:32.519
fish, the bio load of the
tank is going to be different. Well,

522
00:43:32.559 --> 00:43:36.119
assuming that you're feeding them more.
You know, at some point you

523
00:43:36.199 --> 00:43:39.360
can reach equilibrium by just letting things
die. But then the problem with that

524
00:43:39.559 --> 00:43:43.400
is then the water starts to turn
kind of a yellowy color like it is

525
00:43:43.480 --> 00:43:46.760
in real life and ponds and whatnot, because the decaying matter tends the water.

526
00:43:47.079 --> 00:43:51.119
But if you wanted to just let
stuff die and grow and die,

527
00:43:51.239 --> 00:43:55.840
then things will reach in equilibrium in
terms of you know, the water can

528
00:43:55.920 --> 00:44:00.239
only support this many fish, it
can only support this many plants, only

529
00:44:00.320 --> 00:44:01.760
this many nutrients. You can create
a clothed system like that. But it's

530
00:44:01.800 --> 00:44:08.199
just it's super fascinating and so yeah, I'll just I just pick that as

531
00:44:08.199 --> 00:44:15.400
a general concept, and it's I'm
having a lot of fun learning about it.

532
00:44:15.599 --> 00:44:17.519
I'm trying to get my wife into
it a little bit. She kind

533
00:44:17.559 --> 00:44:22.039
of will dip her toe into it
with me. She's not as excited about

534
00:44:22.039 --> 00:44:24.920
it as I am. But she
helped me. She helped me put together

535
00:44:24.960 --> 00:44:30.760
an aquarium last night. And it's
it's so I tore one down. I

536
00:44:30.840 --> 00:44:34.000
bought a ten dollars aquarium on sale
and I tore it down and I built

537
00:44:34.039 --> 00:44:37.800
it back up and I used a
higher grade silicone. And it's so crazy

538
00:44:37.800 --> 00:44:42.760
because there's like there's like four millimeters
of silicone holding this thing together. And

539
00:44:42.840 --> 00:44:46.280
that's it, Like that's that's all
you actually need is the silicone in between

540
00:44:46.320 --> 00:44:52.000
the glass if you clean away everything
else, Like it's the four it's it's

541
00:44:52.119 --> 00:44:57.360
like a a quarter of a millimeter
thick and about four millimeters wide, and

542
00:44:57.440 --> 00:45:01.199
it's so scary, but in reality, like that is actually what holds the

543
00:45:01.239 --> 00:45:06.280
thing together. All the rest of
it is just because they use a lower

544
00:45:06.360 --> 00:45:09.840
grade aquarium that's like ten cents less, and probably more importantly, they use

545
00:45:09.880 --> 00:45:14.599
a they don't they don't use people
that are highly skilled to put them together.

546
00:45:14.719 --> 00:45:17.519
So at the shops they just slop
on the silicone. So you see,

547
00:45:17.679 --> 00:45:20.719
you know, when you go into
the pet store, you see this

548
00:45:20.920 --> 00:45:24.360
tank and it's got like a full
freaking inch of silicone on it. But

549
00:45:24.480 --> 00:45:29.880
that's literally just slop that's left over
because they didn't bother to clean it up

550
00:45:30.000 --> 00:45:34.239
when they put it together. The
part that actually holds it together is the

551
00:45:34.320 --> 00:45:37.039
quarter millimeter. By the four millimeters, it's insane, so it's so scary

552
00:45:37.079 --> 00:45:42.280
to look at the thing, but
it holds water. So anyway, so

553
00:45:43.239 --> 00:45:45.800
that pick brings a couple of things
to mind. Yeah, that's great because

554
00:45:45.800 --> 00:45:50.800
it's your turn. I guess you
could say that your aquarium is sort of

555
00:45:50.840 --> 00:45:57.119
an unopinion native framework, right,
okay, all right. It doesn't give

556
00:45:57.159 --> 00:45:59.840
you all the rules. It lets
you do things however you want to do

557
00:45:59.880 --> 00:46:02.559
it. Well, there's a lot
of rules. They're just not easy to

558
00:46:02.679 --> 00:46:08.960
understand. There's basic trade offs like
the nitrogen cycle, how much food you

559
00:46:09.039 --> 00:46:12.519
put in, how much water you
take out. If you put up your

560
00:46:12.559 --> 00:46:15.559
plants, then you're taking out some
of the nutrients, which means you have

561
00:46:15.599 --> 00:46:20.159
to add nutrients. But but yeah, it's just there's a ton of variables,

562
00:46:20.599 --> 00:46:25.119
and if you want to get the
low maintenance, self sustaining aquarium,

563
00:46:25.159 --> 00:46:29.360
it's going to take like a year
to do it because you have to get

564
00:46:30.000 --> 00:46:34.599
everything has to reach equilibrium and then
you have to stop doing so it's just

565
00:46:34.719 --> 00:46:38.440
constant change. Yeah, well,
like I said, from a code standpoint,

566
00:46:38.440 --> 00:46:45.000
it's like an unopinionated framework versus an
opinionated framework. Yeah yeah, and

567
00:46:45.039 --> 00:46:49.440
then yeah, but like but like
a code more framework where every time you

568
00:46:49.599 --> 00:46:53.840
run the code, the code changes, because I mean it's biology, like

569
00:46:54.079 --> 00:47:00.199
every day some different process is happening
and then that affects other process. The

570
00:47:00.320 --> 00:47:02.920
other thing was I don't know if
you ever heard a song I was back

571
00:47:02.920 --> 00:47:07.039
in the eighties, the guy named
Kippa Data. He was real big on

572
00:47:07.159 --> 00:47:10.840
puns. He had all kinds of
songs, and they had one called Wet

573
00:47:10.920 --> 00:47:16.559
Dreams. It's all the whole thing
about fish puns. And he goes into

574
00:47:16.679 --> 00:47:22.360
a bar and anyway, he's talking
to some some gal and he says,

575
00:47:22.440 --> 00:47:24.639
so, what's your son. She
goes aquarium. He said, great,

576
00:47:24.719 --> 00:47:31.519
let's get tanked. Anyway, that
reminds me of so uh picked for the

577
00:47:31.639 --> 00:47:36.280
day. I just as last week. I might have mentioned this before.

578
00:47:36.360 --> 00:47:39.639
Apologies if this is a duplicate a
few months ago. But I've been studying

579
00:47:39.719 --> 00:47:45.280
to get my It's called the FAA
Federal Aviation Administration Part one of seven drone

580
00:47:45.320 --> 00:47:49.800
certification and it's what you need,
it's what you have to have if you

581
00:47:49.920 --> 00:47:53.519
are flying your drone in any capacity
other than as a hobby for fun.

582
00:47:54.239 --> 00:47:58.960
So if you're doing you know,
you're getting pictures something anything for money,

583
00:47:59.199 --> 00:48:01.239
you know, a commercial, if
there's a commercial aspect to it. Those

584
00:48:01.280 --> 00:48:07.880
limitations on the types of drones,
and the reason I got it is to

585
00:48:07.079 --> 00:48:12.960
be able to fly drones for our
fire district. The fire department I'm with,

586
00:48:13.239 --> 00:48:15.920
We getting a drone program going and
it's very useful over you know,

587
00:48:16.000 --> 00:48:22.440
some larger instincts and stuff. Anyway, it was recommended that I take study

588
00:48:22.559 --> 00:48:28.199
for the course by taking there's an
online course from a place called Pilot Institute.

589
00:48:28.239 --> 00:48:32.880
Pilot institute dot com. Really good
online course for this. This guy

590
00:48:34.039 --> 00:48:37.559
who does that, he's a French
guy who lives in Prescott, Arizona now,

591
00:48:37.639 --> 00:48:43.079
but he has online classes for pilots
as well as the drone courses.

592
00:48:43.800 --> 00:48:46.000
And you know, with the FA
there's books you can get and there's FA

593
00:48:46.239 --> 00:48:51.039
has study guides for all the things
you need to study. I never even

594
00:48:51.079 --> 00:48:52.639
had to crack those. I just
went through this course and took all his

595
00:48:52.800 --> 00:48:55.280
course and was able to pass.
I got an eighty seven percent. A

596
00:48:55.320 --> 00:48:59.199
lot of people get above ninety percent
on the FA Test, which is sixty

597
00:48:59.320 --> 00:49:02.840
questions but really really great course,
really thorough course. The guy's name is

598
00:49:02.880 --> 00:49:09.320
Greg Revard. But pilot Distitute dot
com if that's something you want to do.

599
00:49:12.039 --> 00:49:15.320
And now for the dad jokes of
the week, which is, uh,

600
00:49:16.320 --> 00:49:19.920
you might not know this, Kevin, but this is the high point

601
00:49:20.000 --> 00:49:28.000
of every podcast. So recently I
told my wife that a husband is like

602
00:49:28.079 --> 00:49:30.280
a fine wine. We just get
better with age. The next day she

603
00:49:30.400 --> 00:49:39.840
locked me in the cellar. Right, So I did a little bit of

604
00:49:42.000 --> 00:49:45.639
putting money on the horses, and
I got I was misled, and fortunately

605
00:49:45.960 --> 00:49:51.400
I put a bet on a horse
I supposedly had excellent breeding. So in

606
00:49:51.480 --> 00:49:53.079
the race, after the horse left
the starting gate, he stopped and closed

607
00:49:53.119 --> 00:50:04.159
it behind him. Get that edge, No excellent breeding, you know manners,

608
00:50:04.239 --> 00:50:07.280
he stopped and closed the starting gate
behind him instead of racing. Oh

609
00:50:07.719 --> 00:50:10.360
okay, all right, right.
So one of the things with being highly

610
00:50:10.480 --> 00:50:15.360
pedantic and very you know, like
the way I was just describing my brain,

611
00:50:16.159 --> 00:50:21.639
is that puns get more and more
difficult for me every year. Oh

612
00:50:21.679 --> 00:50:25.320
okay, because I killed a joke, but for you all too, literally,

613
00:50:25.800 --> 00:50:34.400
yeah, so it gets anyway,
what do you call a group of

614
00:50:34.559 --> 00:50:45.039
chubby newborns, heavy infantry about that
one. That's good. Yes, thank

615
00:50:45.079 --> 00:50:50.360
you. Those are my picks for
the week. All right now, Calvin,

616
00:50:50.559 --> 00:50:53.000
now you get to go hog wild. Yeah, so for the picks

617
00:50:53.039 --> 00:50:57.119
of the week. I don't have
no dad jokes though, But for me,

618
00:50:58.880 --> 00:51:05.920
I've been really stick in film music. So I played the piano.

619
00:51:05.960 --> 00:51:09.559
I've been playing it for a while
now, but late last year I i,

620
00:51:12.239 --> 00:51:16.280
I don't know whether I discovered Handsomer, and what it did in Interstellar

621
00:51:17.400 --> 00:51:22.440
kept me up. Like most nights, I just had it on repeat because

622
00:51:22.519 --> 00:51:25.320
it was just so good. So
I was like, I think this is

623
00:51:25.360 --> 00:51:29.719
something I need to do for the
next step of like playing music. It's

624
00:51:29.800 --> 00:51:36.719
like taking the emotions in pictures and
infusing it in like a musical production.

625
00:51:37.639 --> 00:51:40.760
And it's something I've been like working
on, you know, trying to like

626
00:51:40.960 --> 00:51:46.280
see how to really understand it because
I am not classically trained. I played

627
00:51:46.320 --> 00:51:51.599
that year, but I feel like
this is really really good to like interpret

628
00:51:52.400 --> 00:51:57.800
words and acts in music. So
yeah, So Handsomer is someone I've been

629
00:51:57.840 --> 00:52:00.960
studying bowl on that one, and
it's local and Interstellar Deprives of the Caribbean

630
00:52:01.000 --> 00:52:07.119
and even the Lion King Yeah,
my son is like you. He is.

631
00:52:08.800 --> 00:52:10.840
You know, I take the piano
listens too. I just started here

632
00:52:10.880 --> 00:52:14.639
a few months ago, and I'm
one of those people that, you know,

633
00:52:14.719 --> 00:52:16.199
I've got to learn how to do
this, and it's really slow and

634
00:52:16.320 --> 00:52:20.440
learning how to play without watching the
keys and all that kind of stuff.

635
00:52:20.960 --> 00:52:24.280
My son is a musical freak,
and that he can just sit down.

636
00:52:24.519 --> 00:52:28.480
I have yet to he he can't. He plays my ear and he can

637
00:52:28.519 --> 00:52:31.880
sit down and watch a demonstration of
how to play a song. Uh,

638
00:52:32.280 --> 00:52:36.079
And pretty soon he's playing the stuff
like he's been playing for years, with

639
00:52:36.280 --> 00:52:39.679
just a couple of hours worth of
work in it keeps here. I am

640
00:52:39.760 --> 00:52:44.039
working and working in ten minutes later, he's playing his beautiful song with all

641
00:52:44.079 --> 00:52:45.000
these chords and he doesn't even know
what the chords are. He just knows

642
00:52:45.079 --> 00:52:50.719
they sound good. Yeah, you
know, so he's crazy gifted that way.

643
00:52:50.800 --> 00:52:52.480
It's really amazing. I was gifted. So I'm jealous of people like

644
00:52:52.559 --> 00:52:59.880
that. That's amazing, really awesome. All right, Well, with that,

645
00:53:00.079 --> 00:53:06.000
thanks for coming on the show and
teaching us about the Boring Stack,

646
00:53:07.440 --> 00:53:13.599
and we look forward to catching up
with you again sometime in the future.

647
00:53:14.440 --> 00:53:16.360
Yeah, definitely. I look forward
to being here. Thank you, thank

648
00:53:16.400 --> 00:53:22.360
you Steve, thank you a J. This was amazing our pleasure. Sure

649
00:53:22.079 --> 00:53:23.199
have a good one. I

