WEBVTT

1
00:00:04.759 --> 00:00:08.720
Hey, folks, welcome back to
another episode of the Ruby Rogues podcast.

2
00:00:09.080 --> 00:00:13.919
This week, on our panel,
we have Valentino Stole Hey Now, I'm

3
00:00:14.000 --> 00:00:20.239
Charles Maxwood from Top Endevs, and
we also have a yush A yush Nuwatya.

4
00:00:20.320 --> 00:00:23.320
I always feel weird, like I'm
saying it wrong. No, you're

5
00:00:23.399 --> 00:00:29.320
right, absolutely right. So yeah, so we were getting on. We

6
00:00:29.440 --> 00:00:33.560
didn't have a guest this week.
I keep inviting people and then for whatever

7
00:00:33.600 --> 00:00:37.000
reason, they don't get on our
calendar. So if you if you have

8
00:00:37.039 --> 00:00:41.799
a topic you want to talk about, let us know. But yeah,

9
00:00:42.600 --> 00:00:46.600
Ayush is new to the show and
we were chatting, and you know,

10
00:00:46.679 --> 00:00:51.200
next week we're going to talk with
him about Bridgetown. But uh, I

11
00:00:51.240 --> 00:00:53.719
thought, you know what, let's
get to know him a little bit and

12
00:00:54.119 --> 00:00:58.079
kind of get his background on things. So Ayush, I'm kind of curious.

13
00:00:58.119 --> 00:01:00.479
I don't know exactly where to start. I like the idea of starting

14
00:01:00.560 --> 00:01:04.599
how you got into Ruby, but
you were doing other stuff before Ruby,

15
00:01:04.640 --> 00:01:07.200
So maybe we start with how you
got into programming and then kind of move

16
00:01:07.200 --> 00:01:11.599
along from there. Yeah, for
sure, I think it started the beginning.

17
00:01:12.400 --> 00:01:17.200
I came through a fairly traditional route. I think I studied computer science

18
00:01:17.239 --> 00:01:21.799
at university, although I'd like to
say that course doesn't count because it was

19
00:01:22.319 --> 00:01:30.840
quite shit. Date. Should you
go to college to become a programmer,

20
00:01:33.799 --> 00:01:37.480
Probably not, But as I grew
up in India, moved to the UK

21
00:01:37.719 --> 00:01:45.280
at London for university, and despite
not learning maybe a whole lot about actual

22
00:01:45.439 --> 00:01:49.480
practical industry, programming at university did
give me the degree that I needed to

23
00:01:49.480 --> 00:01:55.400
get a work visa. Hear,
so it oppened that regard, but I

24
00:01:55.439 --> 00:02:00.879
mean it was the course was just
so like basic. They thought they just

25
00:02:00.920 --> 00:02:05.239
start Java, and it was like
I had no idea how to run code

26
00:02:05.359 --> 00:02:10.599
outside of Eclipse, like when Eclipse
was the more popular ID over Intelligence or

27
00:02:10.599 --> 00:02:14.360
whatever. I honestly like, I
didn't know how to write a unit test,

28
00:02:15.319 --> 00:02:19.319
completely clueless about what to do if
I didn't have Eclipse, and it

29
00:02:19.439 --> 00:02:23.319
was Yeah. When I got my
first job, I was like, Okay,

30
00:02:23.520 --> 00:02:30.319
the real world's fairly different. So
I have to ask, first of

31
00:02:30.319 --> 00:02:32.719
all, because I did Java,
and now when I talk to people who

32
00:02:32.759 --> 00:02:39.840
are going to college, they're usually
using Python. So how long ago was

33
00:02:39.879 --> 00:02:45.240
this? Like? Are you an
old guy like me? Are you just

34
00:02:45.280 --> 00:02:49.319
got into an old guy program?
I think a younger guy that got into

35
00:02:49.360 --> 00:02:53.479
an old guy program. I was
at university twenty eleven twenty fourteen, so

36
00:02:53.599 --> 00:03:00.280
not that long ago, right,
So you yeah, you were in because

37
00:03:00.280 --> 00:03:05.680
I went. Now I'm really going
to date myself. I started in nineteen

38
00:03:05.759 --> 00:03:09.479
ninety nineteen ninety eight, and I
went for a couple of semesters and I

39
00:03:09.520 --> 00:03:13.240
went on a mission for my church
for two years, and then when I

40
00:03:13.280 --> 00:03:15.439
came back, I graduated in two
thousand and six. I came back and

41
00:03:16.080 --> 00:03:22.240
started back in school in two thousand
and one, so not terribly too far

42
00:03:22.319 --> 00:03:30.039
apart, but yeah, okay,
yeah, I ended up getting a job

43
00:03:30.120 --> 00:03:35.039
straight out of university, which was
nothing short of a minor miracle, because

44
00:03:35.039 --> 00:03:37.800
it's so hot to get a work
viz I hear in the UK. Oh

45
00:03:37.879 --> 00:03:43.479
really, but yeah, it's ridiculous. I just got super lucky. I

46
00:03:43.520 --> 00:03:46.080
got a job at this company called
Akqa, which is like an agency,

47
00:03:46.360 --> 00:03:53.199
and they were just starting this graduate
program. So that was the first Gohart,

48
00:03:53.439 --> 00:03:58.680
just me and another girl that were
the first ever graduates in this graduate

49
00:03:58.719 --> 00:04:02.240
program. That allowed me to kind
of do a lot of many different things

50
00:04:02.319 --> 00:04:06.199
in the first year. So I
kind of did android development, I did

51
00:04:06.280 --> 00:04:12.639
DevOps, I did like software engineering
and all that kind of stuff and ended

52
00:04:12.719 --> 00:04:18.720
up in this like hybrid iOS and
Android role because my final year project,

53
00:04:18.720 --> 00:04:24.879
when dissertation project at university was an
Android app. So I kind of ended

54
00:04:24.959 --> 00:04:29.800
up in mobile just through that,
and I was iPhone user Apple fan at

55
00:04:29.839 --> 00:04:33.720
the time, and so obviously I
didn't really want to do Android development.

56
00:04:33.839 --> 00:04:38.040
Is just that I had to do
at university. So I kind of branched

57
00:04:38.040 --> 00:04:43.240
into iOS and ended up with this
unique skill set where I could do both,

58
00:04:43.360 --> 00:04:47.920
So the company put me to work
at both, and yeah, I

59
00:04:47.959 --> 00:04:54.800
worked there for a while. Then
just obviously I gravitated towards iOS because a

60
00:04:54.800 --> 00:05:00.000
bigger Apple fan than an Android fan. I still despise Android. It's just

61
00:05:00.120 --> 00:05:03.360
so bad for my blood pressure every
time I have to go and write any

62
00:05:03.399 --> 00:05:12.720
Android good. So then I ended
up getting another job at a company called

63
00:05:12.720 --> 00:05:18.439
transfer Wise now known as Wise,
and I was exclusively in an iOS developer

64
00:05:18.480 --> 00:05:25.639
there. Managed to shake off my
Android roots, thankfully. Yeah, I

65
00:05:28.959 --> 00:05:32.959
was. I was doing objective cy
for the first couple of years at Akqua

66
00:05:33.000 --> 00:05:38.600
because I was working on some legacy
apps and Swift was still pretty new,

67
00:05:38.639 --> 00:05:44.399
and the interrupt between objectivecy and Swift
was still liberty fee, so we as

68
00:05:44.399 --> 00:05:46.800
a company didn't want to take a
risk on it with with damn good reason.

69
00:05:46.800 --> 00:05:50.959
I completely agreed with that decision.
But when I moved over to transfer

70
00:05:51.000 --> 00:05:56.279
Wise, they had just done like
a significant overhaul of the app a few

71
00:05:56.319 --> 00:06:00.240
months before I joined, and it
was all Swift. So I got right

72
00:06:00.279 --> 00:06:03.199
Swift for a couple of years in
like a production setting there, which was

73
00:06:03.279 --> 00:06:10.079
quite nice ish. Yeah, I
remember when they made that switch. I

74
00:06:10.199 --> 00:06:14.319
was co hosting the I Freak Show
at the time, and so I was

75
00:06:14.360 --> 00:06:16.720
talking about it. I wasn't actually
writing anything in it, but it was

76
00:06:16.720 --> 00:06:20.439
definitely an interesting time period to be
working in that and seeing some of the

77
00:06:20.480 --> 00:06:27.160
transitions that go on with some of
that stuff. Yeah, it was.

78
00:06:27.279 --> 00:06:31.600
I think it was a much needed
overhaul. I am probably one of the

79
00:06:31.720 --> 00:06:36.319
rare breed that actually liked objective cy
I quite it was a bit of a

80
00:06:36.399 --> 00:06:42.639
both sure, but it felt it
had a lot of a similarly toss to

81
00:06:42.759 --> 00:06:47.720
Ruby in terms of like meta programming
and things like that. And I think

82
00:06:48.800 --> 00:06:53.319
one of the reasons that I was
kind of I moved away from mobile development

83
00:06:53.720 --> 00:06:58.839
one of many reasons, but one
of them was that Swift was becoming like

84
00:06:58.959 --> 00:07:08.560
what I perceived to be the javaification
of Swift, where I felt I just

85
00:07:08.639 --> 00:07:15.079
felt that the team were kind of
chasing like quote unquote academic perfection from the

86
00:07:15.199 --> 00:07:20.879
language rather than building features that were
actually useful and all, Like the dynamic,

87
00:07:21.040 --> 00:07:26.279
advanced stuff that you got with objective
Cy, They're kind of making an

88
00:07:26.279 --> 00:07:31.079
effort to remove that from Swift,
and I just wasn't a fan of that

89
00:07:31.160 --> 00:07:40.920
direction at all. Interesting, So
at what point did you find and move

90
00:07:40.959 --> 00:07:46.439
over to Ruby, I'm curious.
So it was just before the pandemic.

91
00:07:46.480 --> 00:07:50.879
So I when I joined Transferises twenty
seventeen, I actually knew that I would

92
00:07:50.959 --> 00:07:56.839
leave in exactly two years, because
you need five years on a work visa

93
00:07:56.920 --> 00:08:01.519
in the UK to get residency,
and while you're on a work visa,

94
00:08:01.839 --> 00:08:07.120
you your visa is tied to your
employer, so you can't quit without getting

95
00:08:07.199 --> 00:08:13.319
kicked out of the country basically.
So I was just waiting for that like

96
00:08:13.439 --> 00:08:16.399
residency period to quind of qualify for
residency, apply for it, and then

97
00:08:16.600 --> 00:08:22.480
and then quit. Really, so
it's summer twenty nineteen that I quit Transferise,

98
00:08:22.519 --> 00:08:24.480
and I was like, I'm going
to take a few months off here

99
00:08:24.519 --> 00:08:28.839
because I'm burnt out as hell and
any time off. So take a few

100
00:08:28.839 --> 00:08:31.759
months off, and I'm like,
you know, I just really don't fancy

101
00:08:33.120 --> 00:08:37.919
mobile development anymore. As getting quite
fair up a fit. I also kind

102
00:08:37.960 --> 00:08:43.440
of get quite a lot of my
motivation from product development. I don't get

103
00:08:43.480 --> 00:08:46.399
it from like technical problems. I
like, I like building products. I

104
00:08:46.399 --> 00:08:50.879
don't really care for that. I
don't care that much for like interesting technical

105
00:08:50.919 --> 00:08:56.200
problems. And it's quite hard to
build products when all you can do is

106
00:08:56.200 --> 00:09:01.360
build a mobile app, Like if
you have no service side skills at all,

107
00:09:03.000 --> 00:09:05.360
there's not a lot you can do
it just an app, right,

108
00:09:05.879 --> 00:09:11.120
So I was finding that quite limiting
in what I wanted to build or have

109
00:09:11.240 --> 00:09:13.799
the skill set to build. So
I was like, yeah, I think

110
00:09:13.840 --> 00:09:18.039
I'm gonna I think I'm gonna move
to web because in the web world,

111
00:09:18.480 --> 00:09:22.360
if I can build it, I
can deploy it and release it and sell

112
00:09:22.399 --> 00:09:26.600
it. In the mobile world,
I need Apple to let me sell it,

113
00:09:26.000 --> 00:09:28.679
no matter how cheaper it might be. Like Apple might just say,

114
00:09:28.679 --> 00:09:33.120
like I might invest months into something
and then Apple could just turn around and

115
00:09:33.159 --> 00:09:37.639
say, yeah, we're not going
to prove that app. So I just

116
00:09:37.679 --> 00:09:43.159
didn't like that kind of aspect of
it either. So I'd kind of been

117
00:09:43.159 --> 00:09:48.840
exposed to Ruby a fair amount just
while working on OOS, because a lot

118
00:09:48.840 --> 00:09:54.120
of the infrastructure around iOS was in
Ruby. Like until Swift got its native

119
00:09:54.320 --> 00:09:58.639
package manager, the most popular dependency
in package manager in the iOS world was

120
00:09:58.679 --> 00:10:03.159
called ocpods, which is written in
Ruby. Yeah, it's written in Ruby,

121
00:10:03.200 --> 00:10:09.879
which is yeah. Yeah, And
there's a we had those guys on

122
00:10:09.080 --> 00:10:13.000
I freaks and it was kind of
funny because yeah, I was nerding out

123
00:10:13.000 --> 00:10:20.639
about Ruby with them and yeah exactly. So like those like other bits,

124
00:10:20.679 --> 00:10:26.240
like there's a c I tool called
fast Lane which just makes it quite easy

125
00:10:26.279 --> 00:10:31.759
to build like a CI pipeline for
io s and stuff that didn't he No,

126
00:10:31.879 --> 00:10:37.039
it's Felix Cross. Oh, Felix
Okay, Yeah, at least it

127
00:10:37.080 --> 00:10:41.039
was initially him fair Leish. I
was initially him. It might be because

128
00:10:41.080 --> 00:10:43.799
I think it was bought by Twitter
and then Google and then it changed hands

129
00:10:43.840 --> 00:10:46.960
a few times. I don't know
where it ended mixed up with something else.

130
00:10:48.480 --> 00:10:52.919
Yeah, so that that wasn't Ruby
as well. So I'd kind of

131
00:10:52.919 --> 00:10:56.759
done a bit of Ruby just because
I had to deal with that stuff in

132
00:10:56.799 --> 00:11:01.799
the iOS world, and I quite
I quite like the language. I liked

133
00:11:01.840 --> 00:11:07.080
like the raels ethos and stuff.
So I just bought the reel s tutorial

134
00:11:07.120 --> 00:11:11.720
by Michael Hartle and that that's basically
a rite of passages in it. You're

135
00:11:11.720 --> 00:11:16.879
allowed to be a reels developer if
you haven't worked through that book. So

136
00:11:16.080 --> 00:11:24.519
I've never gone through the book.
How dare you? I'm kidding. I

137
00:11:24.600 --> 00:11:28.799
remember when he wrote the book.
I've been on that long fair enough,

138
00:11:31.480 --> 00:11:35.000
So yeah, I just I worked
through that book. I built a product.

139
00:11:35.000 --> 00:11:39.240
I built a very simple blogging blogging
app called Chapter twenty four, which

140
00:11:39.279 --> 00:11:43.279
I recently decommissioned. Actually need to
write about that, I think, because

141
00:11:43.320 --> 00:11:46.840
a lot of people talk about the
successes, but they don't really talk about

142
00:11:46.840 --> 00:11:50.240
things that didn't quite work. So
I want to write a blog about why

143
00:11:50.279 --> 00:11:56.519
I built it and then why I
decommissioned it. But yeah, I kind

144
00:11:56.519 --> 00:12:00.440
of just on the back of that, I kind of got into freelancing because

145
00:12:01.759 --> 00:12:03.840
somehow I ended up on the Bridgetown
core team around that time as well.

146
00:12:03.879 --> 00:12:09.200
So this is all through twenty twenty
that I was retraining as a Ruby developer,

147
00:12:09.200 --> 00:12:11.399
building Chapter twenty four and then a
back half of twenty twenty, I

148
00:12:11.480 --> 00:12:15.320
ended up on the Bridgetown Core team, which I think is probably best to

149
00:12:15.320 --> 00:12:20.559
get into next week. And then
just through sheer dumb luck, ended up

150
00:12:20.600 --> 00:12:24.039
with freelancer. I knew I wanted
to do. I knew I wanted to

151
00:12:24.080 --> 00:12:28.519
freelance, but just through the sheer
dumb luck of Twitter, ended up getting

152
00:12:28.519 --> 00:12:35.039
a contract. And as you know
with the like in the Ruby world or

153
00:12:35.080 --> 00:12:39.039
any tech world like, the hardest
thing with freelancing is getting the start.

154
00:12:39.759 --> 00:12:43.039
So once I had that first contract, which I worked with those guys for

155
00:12:43.120 --> 00:12:46.320
quite a while, I think it
is over a year that I worked with

156
00:12:46.360 --> 00:12:48.440
them, and then it then it
just snowball from there. Really, I

157
00:12:48.440 --> 00:12:52.120
wrote the book, took a few
months off, wrote the book, and

158
00:12:52.159 --> 00:12:58.519
then it's been For that I think
changed the trajectory of my career fairly significantly

159
00:12:58.559 --> 00:13:05.200
when Yeah, I released The Rails
on hot Wire codex. Because now I

160
00:13:05.320 --> 00:13:09.279
just tend to find work. It's
become so much easier because I can just

161
00:13:09.320 --> 00:13:16.039
point to this, the ridiculous brick
of a book that I've written, and

162
00:13:16.080 --> 00:13:18.279
then people are like, oh,
would you like to work with us?

163
00:13:18.279 --> 00:13:22.200
And that's a very privileged position to
be and I'm incredibly grateful to be in

164
00:13:22.200 --> 00:13:26.240
that position. But yeah, that
kind of brings us to where we are

165
00:13:26.320 --> 00:13:35.960
now. Nice. So are you
finding work. I'm just curious and I'm

166
00:13:35.960 --> 00:13:39.159
just going to ask whatever questions I
want. A lot of times I'm kind

167
00:13:39.159 --> 00:13:43.480
of steering the conversation a little bit, you know, because I think that

168
00:13:43.519 --> 00:13:46.600
people are going to want to know
a specific thing, or you know,

169
00:13:46.559 --> 00:13:50.600
learn a specific thing, or I
think it'll be helpful even if somebody doesn't

170
00:13:50.600 --> 00:13:54.120
think to ask it. I'm just
going to ask what I want because I'm

171
00:13:54.159 --> 00:13:58.559
curious how much work comes in off
of the rails and hot wire codex,

172
00:13:58.600 --> 00:14:03.000
because it's sounds like you kind of
at least implied that that brings you some

173
00:14:03.039 --> 00:14:09.120
of the freelance work. Yeah,
a fair amount. So like my previous

174
00:14:09.159 --> 00:14:15.159
client I worked with for about fifteen
months, and I had posted on a

175
00:14:15.240 --> 00:14:18.519
number of forums at the time because
as some work I had lined up fell

176
00:14:18.639 --> 00:14:22.440
through and I was quite desperate for
work at the time, and I posted

177
00:14:22.480 --> 00:14:26.200
a number of forums saying I've written
this book, and I've built this,

178
00:14:26.279 --> 00:14:33.159
that and the other thing. And
I signed that contract without ever having a

179
00:14:33.200 --> 00:14:35.000
call with the client. They just
saw my work and they're like, oh,

180
00:14:35.039 --> 00:14:39.360
yeah, can you start Monday.
Here's the contract. And I was

181
00:14:39.399 --> 00:14:45.159
with them for like fifteen months or
so. And then earlier this year,

182
00:14:45.200 --> 00:14:48.679
in about March, I published an
update to my book for Strata and Rael

183
00:14:48.799 --> 00:14:54.919
seven point one, and I sent
out a mailing blast to my mailing list

184
00:14:54.960 --> 00:14:56.799
for the book and I said at
the end, by the way, I'm

185
00:14:56.840 --> 00:15:01.440
looking for some freelance work. My
contract just ended. If you have anything,

186
00:15:01.480 --> 00:15:05.399
to get in touch. And I
got an email back from someone who

187
00:15:05.519 --> 00:15:09.720
was working with this startup saying,
Oh, we're looking for rails developers.

188
00:15:09.720 --> 00:15:11.919
This is a company I'm working with. It you interested. I was like,

189
00:15:13.039 --> 00:15:16.200
yeah, and I've been. I've
been working with this startup since since

190
00:15:16.279 --> 00:15:20.200
March, and that was just through
a lead from someone who bought my book.

191
00:15:20.720 --> 00:15:24.919
And since then, I've had two
or three emails from other people who've

192
00:15:24.120 --> 00:15:28.360
discovered me through my book asking if
I was available, and I've had to

193
00:15:28.360 --> 00:15:33.360
say no because I'm fully booked on
this contract. So it's it's always nice

194
00:15:33.399 --> 00:15:35.840
to kind of have leads that I
kind of have to say no to at

195
00:15:35.840 --> 00:15:39.840
this point, but hopefully I can
work with in the future at some point.

196
00:15:41.120 --> 00:15:46.600
Yeah, I've I've had similar experiences, not with the I did write

197
00:15:46.600 --> 00:15:50.039
a book, but it was it
was how to find a job. I've

198
00:15:50.399 --> 00:15:56.960
had that with screencast series and with
the podcast where yeah, I just you

199
00:15:58.000 --> 00:16:02.120
know, I just mentioned on the
show or have people come to me out

200
00:16:02.120 --> 00:16:06.440
of the blue, and yeah,
it's it's been really interesting to see how

201
00:16:06.480 --> 00:16:10.759
that all works out. So yeah, I like, I like the idea

202
00:16:10.799 --> 00:16:15.360
of writing a book and demonstrating your
technical expertise and having people recognize that and

203
00:16:15.399 --> 00:16:19.200
then you know, come along and
say, oh, I'm I'm interested in

204
00:16:19.200 --> 00:16:23.720
what you can do, and yeah, exactly, I think it's the best

205
00:16:23.720 --> 00:16:26.519
way to kind of showcase your skills, to just build something. Then it's

206
00:16:26.559 --> 00:16:30.519
all in the public domain and it
kind of also acts as an asset.

207
00:16:30.639 --> 00:16:33.879
So like, I mean, I
don't I don't make a whole lot of

208
00:16:33.879 --> 00:16:37.759
money of the book sales, but
it's a nice like cream at the end

209
00:16:37.799 --> 00:16:41.320
of the month that kind of adds
on top of my freelance income. And

210
00:16:42.480 --> 00:16:47.480
yeah, it's just a great way
to generate leads and stuff. So like,

211
00:16:47.519 --> 00:16:52.840
I always kind of planned that with
my freelancing career, I would split

212
00:16:52.919 --> 00:16:56.840
my time between client work and my
own projects. And that's why I have

213
00:16:57.039 --> 00:17:00.600
the reels and not why I could. That's why I have Scattergun dot Email,

214
00:17:00.600 --> 00:17:06.000
which is another SaaS product that I
that I run. It's temporarily on

215
00:17:06.079 --> 00:17:08.160
pause. I really need to invest
some time to bring it back. But

216
00:17:10.039 --> 00:17:11.759
yeah, that's why I have those
things because those are the things that kind

217
00:17:11.759 --> 00:17:17.119
of I have complete control over.
I don't need to make compromises to anyone,

218
00:17:17.559 --> 00:17:22.160
and it's very fulfilling to have that
kind of stuff as well. I'm

219
00:17:22.240 --> 00:17:25.440
curious. I never knew you wrote
a book. First of all. Awesome,

220
00:17:26.440 --> 00:17:30.119
right, I love it. I
have so many questions. Yeah,

221
00:17:30.200 --> 00:17:36.640
go for it. Yeah, the
book israelsonhot Wire Codex dot Com. Yeah,

222
00:17:36.640 --> 00:17:41.880
it's really cool. So, like, what what got you to build

223
00:17:41.960 --> 00:17:48.200
this specifically? Just like your mobile
experience tran transitioning to rails, Like yeah,

224
00:17:48.359 --> 00:17:53.279
kind of. So when I was
working on my first contract as a

225
00:17:53.279 --> 00:18:00.440
freelancer, I had a pretty steep
learning of at the start because it was

226
00:18:00.480 --> 00:18:06.160
the first production rails app that I
was kind of working on, uh for

227
00:18:06.200 --> 00:18:08.720
like for someone else. The only
before that I'd only kind of worked on

228
00:18:08.759 --> 00:18:15.319
my own projects. So I realized
that that like I'd done the rail tutorial

229
00:18:15.319 --> 00:18:22.279
by Michael Hartle and I found that
it was a great Uh, it was

230
00:18:22.319 --> 00:18:26.720
great for the basics, but like
that book, you only create two models

231
00:18:26.759 --> 00:18:30.119
by the end of the book.
So it's like, because it focuses so

232
00:18:30.200 --> 00:18:34.880
much on the basics, it's not
representative of a production rails app. And

233
00:18:34.920 --> 00:18:42.759
I found that next step was quite
hard for me to take. So while

234
00:18:42.759 --> 00:18:45.480
I was on that first contract,
and the idea just kind of popped into

235
00:18:45.480 --> 00:18:49.759
my head that there's loads of books
that teach you how to make rails apps,

236
00:18:49.759 --> 00:18:52.839
loads of books that teach you how
to make native apps. I've kind

237
00:18:52.839 --> 00:18:57.440
of got this unique blend of experience
of all three where I've specialized in all

238
00:18:57.519 --> 00:19:03.400
three at various points. Turbonative was
kind of a fairly new thing because this

239
00:19:03.480 --> 00:19:08.160
was mid mid twenty This was mid
twenty twenty one, so Turbo Native was

240
00:19:08.200 --> 00:19:11.880
only about six months old. I
was. I was also aware of turbolinks

241
00:19:12.039 --> 00:19:15.359
Native, which had been around for
a while. It was on my radar

242
00:19:15.480 --> 00:19:19.960
even when I was a mobile developer, and I had petitioned for its use

243
00:19:21.519 --> 00:19:25.319
a number of times to my teams
when I was a mobile developer and basically

244
00:19:25.359 --> 00:19:29.720
been told to in no uncertain terms
to shut up because it was hybrid,

245
00:19:29.720 --> 00:19:33.359
and hybrid was a dirty word.
So I thought, hang on, hang

246
00:19:33.400 --> 00:19:37.799
on, because I have to chime
in on this because there is a dirty

247
00:19:37.799 --> 00:19:41.640
little secret, and that is is
a lot of the apps that you use

248
00:19:41.720 --> 00:19:47.640
out there that are native apps,
they pull in WebUI all over the place

249
00:19:48.559 --> 00:19:52.039
they do. And yeah, the
other thing is that most of these fully

250
00:19:52.119 --> 00:19:56.960
native apps are also completely useless offline. Like people kind of say offline access

251
00:19:57.039 --> 00:20:00.759
is a big thing that kind of
banned around for fullyen but I'm like,

252
00:20:00.400 --> 00:20:04.880
yeah, you know, most apps
have worked on useless offline, like they

253
00:20:04.880 --> 00:20:10.400
won't do anything well or they build
in So the thing that I'm thinking is

254
00:20:10.440 --> 00:20:14.119
like the video apps, so like
you're what Hulu or Netflix or whatever,

255
00:20:14.920 --> 00:20:19.400
the only the only on offline functionality
they really have is download this before you

256
00:20:19.440 --> 00:20:22.119
get on the airplane and that way
you can watch it on your phone.

257
00:20:22.240 --> 00:20:26.400
Right, So it's very limited in
scope on what it'll do. Yeah,

258
00:20:27.079 --> 00:20:33.039
once you're offline, Yeah exactly.
But yeah, I thought, I thought,

259
00:20:33.440 --> 00:20:37.160
uh, yeah, here's a mad
idea. I've only been working with

260
00:20:37.279 --> 00:20:40.920
rails for less than a here,
but let's write a book on it.

261
00:20:42.400 --> 00:20:45.079
How hard could it be? Right? Yeah? How hard can it be?

262
00:20:45.799 --> 00:20:52.640
It? Depends on and his is
like nine hundred pages. So yeah,

263
00:20:52.359 --> 00:20:56.440
I mean it was I love it. I love that premise, Like

264
00:20:56.160 --> 00:21:02.759
building the neighborhood marketplace like Craigslist or
something thing that can't be easy to do,

265
00:21:02.960 --> 00:21:07.920
right, No, it's not easy, but I kind of like I

266
00:21:07.119 --> 00:21:12.039
learned best by doing so. I
definitely wanted to teach how to build a

267
00:21:12.200 --> 00:21:17.680
product, and I needed a product
that had scope for many things. And

268
00:21:17.720 --> 00:21:22.880
I just thought a product marketplace I
can just like any any kind of feature,

269
00:21:22.920 --> 00:21:26.720
I can kind of bolt onto it
in some way or another. So

270
00:21:27.880 --> 00:21:32.880
it was just a very good kind
of premise to cover all the features and

271
00:21:32.960 --> 00:21:38.480
rails because covering all of the constituent
frameworks like action, mailbox, active stories,

272
00:21:38.519 --> 00:21:41.000
all that, that was a non
negotiable for me. I had to

273
00:21:41.039 --> 00:21:47.799
do all of them. So this
was just a nice vehicle for that.

274
00:21:48.119 --> 00:21:52.720
And I mean too, you know, rails is like pushing the you know,

275
00:21:53.400 --> 00:21:59.440
build your next business right with rails? Yeah yeah right, And like

276
00:22:00.200 --> 00:22:03.559
selling something is like what everybody wants
to do, right, yeah, exactly,

277
00:22:04.839 --> 00:22:07.599
So I think this is great,
Like I love I'm curious, like,

278
00:22:07.799 --> 00:22:12.920
uh, you know, what what
kind of design decisions do you make

279
00:22:12.960 --> 00:22:18.599
in the book for like the various
things like do you choose to build your

280
00:22:18.640 --> 00:22:25.039
own authentication authorization? Uh? You
know, yeah, so I was it

281
00:22:25.119 --> 00:22:27.400
is your own authentication authorization. I've
kind of put that front and sent in

282
00:22:27.400 --> 00:22:33.720
the marketing materials as well. And
again, I just wanted to teach how

283
00:22:33.759 --> 00:22:37.839
to build as much as possible.
And I was only pulling in gems for

284
00:22:37.880 --> 00:22:47.240
very specific, very difficult problems because
I find a lot of tutorials they kind

285
00:22:47.240 --> 00:22:52.160
of just skirt around the difficult problems. We're pulling in a gem and like

286
00:22:52.160 --> 00:22:55.680
like authentic, just just just use
device and then it becomes a tutorials.

287
00:22:56.200 --> 00:22:59.559
That's what the heart of book does, is it pulls in device and then

288
00:22:59.599 --> 00:23:02.319
just moves on. Now it doesn't
it teaches you. It teaches you your

289
00:23:02.359 --> 00:23:06.559
authentic, your own authentication. Yeah
I need to be wrong about that.

290
00:23:07.200 --> 00:23:10.599
But a lot of tutorials they they
just say, oh, just pull in

291
00:23:10.640 --> 00:23:15.440
this gem, pull in that gem
for like device, pundit whatever, and

292
00:23:15.519 --> 00:23:19.559
they don't teach like the concepts.
And in freelancing, I've just found that

293
00:23:19.599 --> 00:23:25.440
those because those concepts are not that
widely thought, they're not applied very well,

294
00:23:25.799 --> 00:23:30.359
and people don't think about do I
actually need a gem for this,

295
00:23:30.440 --> 00:23:33.119
and they just pull in a gem
just because it's the thing that they always

296
00:23:33.119 --> 00:23:38.240
do, even if it's a very
simple authorization premise that the product has,

297
00:23:38.400 --> 00:23:42.640
like oh it's authorization, we need
pundit for that. So I was like,

298
00:23:42.720 --> 00:23:47.000
no, let's just build everything from
scrat So like the only things I've

299
00:23:47.039 --> 00:23:49.759
used gems for, like things like
paginations, I've got Paigey in there.

300
00:23:51.279 --> 00:23:56.480
I've got Sidekick obviously for background jobs. So yeah, just like very specific

301
00:23:56.519 --> 00:23:59.880
things. Actually, let me pull
up the gem file right now. It's

302
00:23:59.880 --> 00:24:03.680
like, can tell you which are
the only third party gems that I've pulled

303
00:24:03.720 --> 00:24:11.200
in here? Uh so credits doesn't
count as third partys. Credits is now

304
00:24:11.279 --> 00:24:17.319
in rails, So I've got premailer
rails, which is to inline your styles

305
00:24:17.960 --> 00:24:22.920
before action mailer blasts something out,
so that kind of holds up styling on

306
00:24:22.960 --> 00:24:26.119
all the different mail clans. Got
something called io country codes, which just

307
00:24:26.160 --> 00:24:30.720
makes it drop down easier for like
a country drop down easier because it just

308
00:24:30.920 --> 00:24:37.839
kind of maps like a user friendly
country name to the io code. Uh

309
00:24:37.039 --> 00:24:44.319
page for pagination s a w S
s DK for S three, geocoder for

310
00:24:44.480 --> 00:24:49.319
geocoding local time to just to show
like your which is a JavaScript thing to

311
00:24:49.359 --> 00:24:56.640
show local time based on where the
user is browser to detect which browser it

312
00:24:56.799 --> 00:25:03.920
is from, uh, the user
agent and email reply pausa from which is

313
00:25:03.000 --> 00:25:07.200
the GitHub gem to kind of you
know, when you click reply on and

314
00:25:07.279 --> 00:25:10.880
email clients will kind of just put
a lot of gunk in at the bottom.

315
00:25:11.319 --> 00:25:14.200
This kind of just makes it a
bit easier to deal with which in

316
00:25:14.279 --> 00:25:18.559
action mailbox I needed. And apart
from the sidekick and sidekit grown, yeah,

317
00:25:18.680 --> 00:25:22.640
that's it. Everything else is from
scratch. So I have to ask

318
00:25:22.680 --> 00:25:29.039
because I mean, I'm working for
a client right now that uses I mean

319
00:25:29.079 --> 00:25:36.759
you mentioned uh device pundit. I
think they're using rollify right, and some

320
00:25:36.880 --> 00:25:41.440
of these ideas like rollify right as
far as just the fundamental adding and you

321
00:25:41.519 --> 00:25:45.759
know, tracking if somebody has a
role and if that role attaches to some

322
00:25:45.880 --> 00:25:49.359
other entity in your system, right, that seems relatively simple, punt.

323
00:25:49.400 --> 00:25:52.799
It seems like it does a whole
bunch of stuff, And sometimes I feel

324
00:25:52.880 --> 00:25:56.440
like it gets in my way,
and sometimes I feel like it, you

325
00:25:56.519 --> 00:26:00.559
know, it just kind of cleanly
solves a problem. So how do you

326
00:26:00.680 --> 00:26:04.880
decide if something is in or out? And how do you decide if something

327
00:26:04.960 --> 00:26:11.400
is going to be worth the trouble
of figuring out because some of these libraries

328
00:26:11.400 --> 00:26:15.599
have a learning curve and yeah,
yeah, anyway, I'm rambling. But

329
00:26:15.519 --> 00:26:21.119
no, it's tricky. It's a
hard question, and I don't have a

330
00:26:21.279 --> 00:26:26.440
clear answer because the best thing I
can say is just experience. So when

331
00:26:26.480 --> 00:26:29.519
I was in my first job at
a university, I had a really good

332
00:26:29.599 --> 00:26:32.839
mentor, so the ACELA and iOS
developer back then, and I had a

333
00:26:32.920 --> 00:26:38.960
really good mentor and he kind of
ingrained this deep dislike and disdain for dependencies

334
00:26:40.160 --> 00:26:42.920
in my brain. So and that
has stuck with me, and it's something

335
00:26:44.079 --> 00:26:45.400
I'm actually I quite like. So
I don't want to change it because I

336
00:26:45.640 --> 00:26:51.799
like that fact about myself. So
I will not pull in a gem until

337
00:26:51.839 --> 00:26:55.480
I'm like really pushed against the wall
and like I'm like, okay, now

338
00:26:55.559 --> 00:27:00.519
I really can't do this myself.
I really shouldn't do this myself. Then

339
00:27:00.559 --> 00:27:03.039
I will pull in a dependency for
it. Other than that, like I

340
00:27:03.119 --> 00:27:07.759
mean, I'll just write it myself, Like I don't know, just think

341
00:27:07.839 --> 00:27:11.559
some time. I mean, isn't
it more effort and more trouble? It

342
00:27:12.160 --> 00:27:18.119
is, but it's also a lot
more customizable and reusable. So like,

343
00:27:19.079 --> 00:27:23.240
so once I've done something like I
do my own authentication, So once I

344
00:27:23.400 --> 00:27:30.359
have my authentication system, that code
is reusable, so I don't extract it

345
00:27:30.400 --> 00:27:33.680
into the library. But in every
project, I just copy paste out the

346
00:27:33.920 --> 00:27:40.680
relevant stuff and then customize it and
customize it as the project needs. And

347
00:27:41.960 --> 00:27:45.559
yeah, I mean it may sound
like like sacrilege, but it's it is

348
00:27:45.640 --> 00:27:49.920
a different mindset when you're kind of
wrapping up some code as a black box

349
00:27:51.000 --> 00:27:52.759
library, because then it's kind of
like its own entity and you need like

350
00:27:53.799 --> 00:27:59.960
you need kind of ports to kind
of interact with it. But if it's

351
00:28:00.200 --> 00:28:03.240
just code that lives as part of
your application, you don't need to package

352
00:28:03.279 --> 00:28:07.319
it up in any way. You
don't need to think about like, oh,

353
00:28:07.400 --> 00:28:10.880
what if the user wants to customize
this that or the other thing is

354
00:28:10.920 --> 00:28:15.240
you just change the code right because
it's within your application. So I'm a

355
00:28:15.359 --> 00:28:19.240
big fan. Yeah, I'm a
big fan of just writing reusable code in

356
00:28:19.319 --> 00:28:22.839
that way, and I do it
in like it helps my client work is

357
00:28:22.880 --> 00:28:26.559
all. Very often I'll pull things
out of my own projects and put them

358
00:28:26.720 --> 00:28:30.240
into client project just because I've solved
this problem, why do I need to

359
00:28:30.279 --> 00:28:34.440
solve it again? So like now
I have like an authorization system that I

360
00:28:34.559 --> 00:28:40.599
built for the for the book,
and I'll just build a similar system for

361
00:28:40.759 --> 00:28:44.720
any other project. So like for
me personally, I only need to build

362
00:28:44.759 --> 00:28:48.119
it once and then I just need
to tweak it to fit any other project.

363
00:28:48.799 --> 00:28:52.079
And for me, that's a lot
less risky than pulling in a dependency

364
00:28:52.119 --> 00:28:55.839
that I don't control. Yeah,
I'm I'm going to chime in on this

365
00:28:55.960 --> 00:29:00.079
a little bit. So the the
last one that I pulled in that I

366
00:29:00.400 --> 00:29:07.839
kind of had this with was actually
written by Dave Kimura's action Off jem and

367
00:29:07.960 --> 00:29:11.160
right, I needed to tweak the
layout, and I, you know,

368
00:29:11.519 --> 00:29:15.839
I want to add a user profile, which I just did by adding another

369
00:29:15.920 --> 00:29:22.079
model to my system. But as
I got into that just a little bit

370
00:29:22.160 --> 00:29:27.680
more here and there, what I
found was that because I was thinking,

371
00:29:27.759 --> 00:29:30.920
hey, I'm a little bit gun
shy about Hey, this is a security

372
00:29:32.599 --> 00:29:36.519
system on my app, right,
and since I'm not a security expert,

373
00:29:36.559 --> 00:29:40.079
I don't know if I necessarily want
to be the one writing this and responsible

374
00:29:40.119 --> 00:29:41.759
for it. But at the same
time, you go look at action off

375
00:29:41.799 --> 00:29:48.079
and it's relatively simple, right,
and so it's definitely something that I could

376
00:29:48.119 --> 00:29:52.000
build myself if I wanted to.
It's just that he has a whole bunch

377
00:29:52.000 --> 00:29:56.079
of other people looking at it and
solving some of the problems that I might

378
00:29:56.279 --> 00:30:00.839
cause myself, and he spent a
lot more time looking into the issues that

379
00:30:00.880 --> 00:30:03.640
are there. And so that's one
reason why I'm sitting there going, maybe

380
00:30:03.680 --> 00:30:07.559
I should, you know, use
somebody else's system. The other thing though,

381
00:30:07.680 --> 00:30:08.960
is that, yeah, then it's
okay, I've got to tweak the

382
00:30:10.000 --> 00:30:11.599
layouts. So I've got to tweak
this, I've got to tweak that.

383
00:30:11.680 --> 00:30:15.759
And so there's the learning curve of
learning how to use the gem that for

384
00:30:15.920 --> 00:30:19.279
my time might take up just as
much time as writing it myself. And

385
00:30:19.359 --> 00:30:22.160
I guess I don't actually know that, and I don't know how you know

386
00:30:22.279 --> 00:30:26.640
that, But those are the trade
offs that I'm looking at, Right,

387
00:30:26.839 --> 00:30:30.160
is am I going to cause a
problem if I write it myself? Or

388
00:30:30.200 --> 00:30:33.400
am I going to leave something open
that I shouldn't? And then the other

389
00:30:33.599 --> 00:30:36.640
thing is is, yeah, you
know, for my time, right,

390
00:30:37.119 --> 00:30:41.160
if I drop pundit in or you
know, rollify or something else, you

391
00:30:41.240 --> 00:30:45.279
know, how do I do that. And then the last thing is is

392
00:30:45.359 --> 00:30:48.759
sometimes I pull in these gems because
I have a client that's using it and

393
00:30:48.839 --> 00:30:51.559
I need to understand it and so
I can go play with it over here

394
00:30:51.559 --> 00:30:56.000
in my own little sandbox. Yeah, exactly, those those trade offs are

395
00:30:56.200 --> 00:31:03.119
They're all really good questions to ask, and it's there's no like straightforward answer

396
00:31:03.200 --> 00:31:07.119
to any of that. It just
comes down to like judgment. So actually,

397
00:31:07.240 --> 00:31:11.000
let me read out a quote that
I've put in the in the coda

398
00:31:11.200 --> 00:31:19.279
of my book. It's a quote
from Nate Hopkins. So yeah, yeah,

399
00:31:19.319 --> 00:31:23.440
he tweeted this a while ago.
Now. He says every additional gem

400
00:31:23.559 --> 00:31:29.559
dependency adds friction to upgrading rails.
Be sure to apply a healthy dose of

401
00:31:29.599 --> 00:31:33.920
scrutiny to all gems before including them
in your projects. You also increase the

402
00:31:33.000 --> 00:31:40.119
surface area of several risks unexpected changes
to native behavior, conflicts between gems,

403
00:31:40.440 --> 00:31:45.599
degraded performance, weekend security, and
these risks. These risks compound as you

404
00:31:45.720 --> 00:31:49.440
drift further from the latest framework release. So I thought that was just a

405
00:31:49.519 --> 00:31:53.720
good way of looking at it.
It just depends on, yes, like

406
00:31:53.799 --> 00:31:57.880
the use case or what you're trading
off against. And I just find that

407
00:31:59.079 --> 00:32:05.680
very often you can accomplish quite a
lot with just good object oriented programming,

408
00:32:05.839 --> 00:32:12.319
like authorization is one of those things
where with these gems like pundit and I

409
00:32:12.400 --> 00:32:15.559
think can can, can and action
policy and that the good gems, but

410
00:32:16.359 --> 00:32:20.839
I just find that they go too
far into like meta programming, when all

411
00:32:20.880 --> 00:32:25.920
you need is good object oriented programming. And I think the absolute game changer

412
00:32:27.400 --> 00:32:31.200
has been something quite simple, which
is actors support current attributes. Just the

413
00:32:31.319 --> 00:32:37.160
fact that you can get current dot
user now from anywhere in the inner app.

414
00:32:37.720 --> 00:32:42.599
Earlier it was you probably have a
current underscore user method that's only available

415
00:32:42.599 --> 00:32:45.880
in your controllers. If you're trying
to do like authorization stuff in your model,

416
00:32:45.519 --> 00:32:49.319
just getting hold of the current user
might might be a little tricky,

417
00:32:49.359 --> 00:32:55.119
which is why you had like metaprogramming
techniques, which gems like pundit of kind

418
00:32:55.160 --> 00:33:01.039
of popularized. But now that you
can get you use a quite easily from

419
00:33:01.079 --> 00:33:05.319
anywhere. It's a fairly simple thing. But I think it's also made a

420
00:33:05.519 --> 00:33:13.480
huge difference to how how much you
can simplify things like authorization. Yep.

421
00:33:13.960 --> 00:33:24.440
So I guess the other question is
do you then favor gems like so you

422
00:33:24.480 --> 00:33:29.799
know, back to authorization or authentication
for a minute, right, do you

423
00:33:29.880 --> 00:33:37.799
favor things like maybe authentication zero,
where instead of it using an engine like

424
00:33:38.279 --> 00:33:45.240
device or action off, does you
just do a rails generate and it drops

425
00:33:45.359 --> 00:33:50.519
the code, right, It generates
all the code into your thing, into

426
00:33:50.599 --> 00:33:53.240
your app, right, And then
I mean, if you pull the gem

427
00:33:53.279 --> 00:33:58.599
out, it's still gonna work because
it really all it did was just effectively

428
00:33:58.640 --> 00:34:01.960
write that code for you. Yeah, exactly. So the client I'm working

429
00:34:02.000 --> 00:34:06.839
with at the moment, we've used
authentication zero. It was done before I

430
00:34:06.960 --> 00:34:09.159
started, so I didn't have any
influence on that, and it's the first

431
00:34:09.159 --> 00:34:15.159
time I've used authentication zero actually,
and I recommend it wholeheartedly to anyone.

432
00:34:16.000 --> 00:34:20.800
It's an approach that I affletely love. Because the codes all in your app,

433
00:34:20.800 --> 00:34:23.239
you can modify it as you choose
to. Like, we've actually had

434
00:34:23.280 --> 00:34:28.960
to modify the authentication system a little
bit because one of the requirements were we

435
00:34:29.239 --> 00:34:34.440
needed Google login, but we also
like if someone had signed up using email

436
00:34:34.519 --> 00:34:39.679
and password and then they tried to
sign and with Google, we wanted them

437
00:34:39.760 --> 00:34:44.079
to kind of get into the same
account, Like we didn't want Google signing

438
00:34:44.119 --> 00:34:47.480
to create a new account, and
that was also some custom logic that we

439
00:34:47.559 --> 00:34:52.119
had to do, but because all
the code lived in our app, it

440
00:34:52.239 --> 00:34:54.760
was fairly easy to do. We
didn't need to jump through any hoops.

441
00:34:54.760 --> 00:35:00.960
All I did was modify a controller
and done like that. Like the amount

442
00:35:00.000 --> 00:35:05.199
of times I try to wrangle device
to do something I wanted slightly custom and

443
00:35:05.920 --> 00:35:08.159
felt like hitting my head against the
wall. I mean, this is much

444
00:35:08.239 --> 00:35:13.760
preferable to me. Yeah, that's
that. That in my experience, is

445
00:35:14.000 --> 00:35:16.320
where I run into things. Yeah, it's like, oh, I'm deviating

446
00:35:16.440 --> 00:35:22.679
from how device thinks about the world, and so you know, I feel

447
00:35:22.760 --> 00:35:25.519
like I've got my arms stuck in
the gears of this machine and I can't

448
00:35:25.559 --> 00:35:31.119
quite pull it out in order to
Yeah, what about stuff like so you

449
00:35:31.199 --> 00:35:35.079
said the Google logins, you do
you just reach for omniof for that or

450
00:35:35.320 --> 00:35:38.920
yeah, right now omnioth Yeah,
Like that's again, it's a it's it's

451
00:35:38.960 --> 00:35:44.880
a difficult, small surface area problem. So that's the kind of thing where

452
00:35:44.920 --> 00:35:49.480
I would reach for a gem,
because yeah, like gems are kind of

453
00:35:49.920 --> 00:35:53.239
cover quite a large surface area,
and then your app kind of becomes heavily

454
00:35:53.320 --> 00:35:57.440
dependent on the Let's see, like
if you build an app with device.

455
00:35:58.000 --> 00:36:00.960
You're never ever ripping device out of
there. It's there for life. It's

456
00:36:00.039 --> 00:36:04.559
like for the lifetime of the app. Right. I will only pull in

457
00:36:04.679 --> 00:36:07.639
gems like that when I'm like absolutely
one hundred percent show and I'm really really

458
00:36:07.719 --> 00:36:12.000
thought it through and I'm like,
this is the only way it's a worthy

459
00:36:12.119 --> 00:36:15.480
risk, And then I'll pull in
a gem that my app like literally will

460
00:36:15.519 --> 00:36:19.599
fall apart without. Other than that, I like small service area gems.

461
00:36:21.119 --> 00:36:28.440
Cool, Valentino, I hijacked your
higher level question. I'm sorry, No,

462
00:36:28.599 --> 00:36:31.320
it's all good. I mean,
it's an important, important discussion to

463
00:36:31.400 --> 00:36:37.039
make any time you're introducing the dependency
because it is just like a snowball effect,

464
00:36:37.719 --> 00:36:40.679
you know, if you ever want
to remove it, it's a pain.

465
00:36:42.360 --> 00:36:46.960
Yeah. Change, Well, the
last couple of contracts I've worked,

466
00:36:47.000 --> 00:36:52.159
we've worked on upgrading rails and that
is always painful, and it's always the

467
00:36:52.280 --> 00:36:57.119
dependency gems that you get, which
was the other point that I usually made.

468
00:36:58.599 --> 00:37:00.760
Yeah, it's it's it's tricky.
It's one of those things I think

469
00:37:00.800 --> 00:37:06.159
you get better at with experience.
Like just my kind of take on it.

470
00:37:06.440 --> 00:37:13.320
It's I'm not against dependencies. I'm
definitely not one for like not invented

471
00:37:13.360 --> 00:37:17.880
here syndrome or anything like that.
But I'm also fairly skeptical of dependencies,

472
00:37:19.320 --> 00:37:22.039
and I just think like two or
three times before I pull anything. And

473
00:37:22.119 --> 00:37:25.639
so it's not like I'm against I
just give it a lot of thought before

474
00:37:25.679 --> 00:37:31.280
I pull in a gem. Right, did you have any follow on to

475
00:37:31.400 --> 00:37:43.519
this, Valentino? I did.
I mean I'm often torn on like the

476
00:37:43.639 --> 00:37:47.199
dependency like hell that people reference,
Like there are a lot of like great

477
00:37:47.320 --> 00:37:52.480
well built gems that like you can
just throw in and trust that are going

478
00:37:52.559 --> 00:37:57.719
to work long term, and so
it's like it's hard to know what those

479
00:37:57.760 --> 00:38:02.480
are if you're not familiar with them. Yeah, and so I think it's

480
00:38:02.480 --> 00:38:06.000
a good rule of thumb to just
like not introduce it if you don't have

481
00:38:06.159 --> 00:38:08.440
to. But at the same time, it's like whatever you build, you're

482
00:38:08.440 --> 00:38:13.880
going to have to maintain. So
like whether you're not maintaining it or somebody

483
00:38:13.920 --> 00:38:17.480
else isn't maintaining it, like,
does it matter. Yeah, it's true.

484
00:38:17.519 --> 00:38:21.920
And I think also if you're pulling
in like a gem that's not like

485
00:38:22.199 --> 00:38:24.760
super popular or something like that,
I think it's also important to just have

486
00:38:27.159 --> 00:38:30.800
a high level understanding of what the
gem does. So, like if I'm

487
00:38:30.840 --> 00:38:36.039
pulling in a GEM where I'm not
completely clear about how it solves the problem

488
00:38:36.719 --> 00:38:40.440
that I want to solve, and
if it's not like super popular or anything

489
00:38:40.519 --> 00:38:45.079
like that, I'll always dive into
the source code and try to understand it,

490
00:38:45.920 --> 00:38:49.639
and if I can understand and are
happy with it, I'll pull it

491
00:38:49.719 --> 00:38:54.199
in. Or otherwise I might just
take inspiration from their approach and write it

492
00:38:54.280 --> 00:39:00.239
myself. Like quite recently, for
the client I'm working with, we we

493
00:39:00.360 --> 00:39:04.079
needed to have like some kind of
d bounds logic inside kick. So like

494
00:39:04.119 --> 00:39:07.559
if you try to queue up the
same job with the same arguments like two

495
00:39:07.639 --> 00:39:12.199
or three times in quick succession,
it should only it should only queue up

496
00:39:12.280 --> 00:39:16.320
once. So like if you try
to queue up a job like ten times

497
00:39:16.400 --> 00:39:22.039
in the in two minutes, it
only it only executes once. So I

498
00:39:22.119 --> 00:39:24.360
went looking for a plug in for
this, and I found one, but

499
00:39:24.760 --> 00:39:30.039
I was I don't I firstly dove
into the source code because it wasn't a

500
00:39:30.119 --> 00:39:32.480
very popular jam, it was not
something i'd heard before. It was it

501
00:39:32.480 --> 00:39:37.840
didn't have a very high star account
or anything like that, and I was

502
00:39:37.920 --> 00:39:39.639
doing a bunch of stuff that I
didn't quite understand it was running some a

503
00:39:39.760 --> 00:39:44.519
LUA script on Reddish and things like
that, and I'm like, yeah,

504
00:39:44.519 --> 00:39:47.519
I'm not sure, not sure about
this one. So I spent one day

505
00:39:47.679 --> 00:39:53.360
and just kind of took a little
bit of inspiration from their approach and built

506
00:39:53.400 --> 00:39:59.280
out a super simple solution myself in
like I don't three or four hours or

507
00:39:59.320 --> 00:40:02.400
something. And now we own that
solution, so we need to tweak it.

508
00:40:02.719 --> 00:40:07.000
We can. It lives in the
lip folder of our own app.

509
00:40:07.719 --> 00:40:12.360
Other developers can just open that up, read it, understand it, and

510
00:40:13.079 --> 00:40:15.840
that's it, rather than hiding away
in a gem that nobody understands. Yeah,

511
00:40:15.880 --> 00:40:19.519
there's a lot to be said there, right, Like, you know,

512
00:40:19.599 --> 00:40:22.440
you can still package it locally,
like it is a separate project.

513
00:40:22.119 --> 00:40:28.960
Yeah, like use packwork or you
know, something like that, just to

514
00:40:29.079 --> 00:40:34.360
keep things separate in casey, you
know, I feel like the most common

515
00:40:35.440 --> 00:40:37.079
use cases are well, like you
know, we want other people to be

516
00:40:37.119 --> 00:40:39.960
able to contribute to it, right, and that's what the value of the

517
00:40:40.039 --> 00:40:45.280
gem brings. But you know,
it's not guaranteed to do that. But

518
00:40:45.159 --> 00:40:49.079
I feel like if you just keep
it abstract enough, like you know,

519
00:40:49.239 --> 00:40:52.480
it solves most the cases in the
long term. Yeah, but that's the

520
00:40:52.559 --> 00:40:57.519
trade off too, right, is
if it's too abstract, then it loses

521
00:40:58.320 --> 00:41:01.159
utility, but if it's specific,
it also loses utility. So you've kind

522
00:41:01.199 --> 00:41:07.000
of got to find that sweet spot
too. I think a good roos like

523
00:41:07.159 --> 00:41:12.679
that's how are you going? I
was gonna transition to something different? Guess

524
00:41:12.719 --> 00:41:15.360
I'll just I'll just wrap up this
kind of I think a good rule of

525
00:41:15.440 --> 00:41:19.760
time is like, could I build
this myself in four to six hours?

526
00:41:20.320 --> 00:41:22.159
If you could, it's probably building
it yourself. If it's gonna if it's

527
00:41:22.159 --> 00:41:25.960
gonna take longer than then the gem
probably makes a lot more sense. Yep,

528
00:41:27.440 --> 00:41:30.119
that's a good rule of thumb.
Uh. Yeah, I was gonna

529
00:41:30.440 --> 00:41:35.239
transition like because you know, you
tackle hot wire you know specifically here,

530
00:41:35.639 --> 00:41:40.280
uh, and you dive deep into
turbo natives and and that whole aspect of

531
00:41:40.639 --> 00:41:45.599
you know, mobile application development if
you want to call it that for real,

532
00:41:46.440 --> 00:41:50.840
you know, how is your experience
like setting that up? Like what

533
00:41:50.920 --> 00:41:53.519
do you think of the turbo native
framework as somebody who previously worked in the

534
00:41:53.800 --> 00:42:00.119
you know, mobile on both sides
realms? You know, how does the

535
00:42:00.199 --> 00:42:07.920
developer experience like equate in in rails
and interbo native hurt someone's feelings answering this,

536
00:42:07.880 --> 00:42:10.360
No, I don't think so.
Actually I quite enjoyed it, to

537
00:42:10.440 --> 00:42:15.679
be honest. I think it's it's
a great approach just because it's kind of

538
00:42:15.840 --> 00:42:20.880
like, uh, a little bit
in this world, a little bit in

539
00:42:20.960 --> 00:42:24.360
that world. So like your navigation
and stuff is fully native, so you're

540
00:42:24.400 --> 00:42:30.360
not you're not fighting against the platform
you're on. So you're still writing Swift,

541
00:42:30.360 --> 00:42:36.079
you're still Writingcotland. There's there's no
there's no escaping that. It's just

542
00:42:36.719 --> 00:42:42.880
instead of writing the content of the
screen using native views, you render some

543
00:42:43.039 --> 00:42:47.400
HTM on CSS instead, and you
kind of and both iOS and Android have

544
00:42:49.239 --> 00:42:53.960
have native APIs to communicate to and
from JavaScript, so that that's what Strata

545
00:42:54.079 --> 00:42:57.960
does. It just kind of uses
those native APIs, gives you an abstraction

546
00:42:58.079 --> 00:43:01.440
layer to send messages back forth from
your web app to the native code,

547
00:43:01.920 --> 00:43:07.800
so you can like render fully native
components around your web views. So it

548
00:43:08.000 --> 00:43:14.760
kind of just upsto the fidelity a
little bit. And let's say you have

549
00:43:14.920 --> 00:43:17.719
like one screen while your app,
where apps users spend most of the time,

550
00:43:19.000 --> 00:43:22.400
you can always kind of build that
one screen fully natively and then leave

551
00:43:22.440 --> 00:43:28.239
the rest to be web views.
So as an approach, I really like

552
00:43:28.360 --> 00:43:32.519
it. The developer experience is obviously
it's not without its challenges because you're kind

553
00:43:32.559 --> 00:43:37.719
of working in JavaScript as well,
so debugging JavaScript and mobile can be a

554
00:43:37.760 --> 00:43:42.360
bit painful at times. So there
is that, But then you're always going

555
00:43:42.400 --> 00:43:45.360
to have some friction with this kind
of approach. But on the whole,

556
00:43:45.440 --> 00:43:51.960
I think the amount of time and
money you save is huge. And I

557
00:43:52.039 --> 00:43:55.679
gave a talk at some conferences last
year called native apps are dead? Long

558
00:43:55.760 --> 00:44:01.440
Live native apps? I think the
friendly are we? Uh? I think

559
00:44:01.480 --> 00:44:07.079
friendly RB have put a YouTube video
out of this talk, and that was

560
00:44:07.119 --> 00:44:10.719
the whole premise of the talk is
that here's a really great way to build

561
00:44:10.760 --> 00:44:15.559
hybrid apps without kind of fighting against
the platform, still having access to all

562
00:44:15.639 --> 00:44:23.000
the native features and just like uh, leaning on the web to reduce your

563
00:44:23.079 --> 00:44:27.559
work. Really so I'm I'm curious, like what does a what does a

564
00:44:27.599 --> 00:44:31.880
communication layer look like for the JavaScript
to native like aspect of it? Like

565
00:44:32.000 --> 00:44:35.519
let's say you wanted to, like, you know, render a native like

566
00:44:35.679 --> 00:44:40.320
camera component or something like that,
right, Like how does that like translate

567
00:44:40.559 --> 00:44:46.320
to like the website. So that's
where where strata comes in so you'll have

568
00:44:46.440 --> 00:44:51.559
to write some native code to accomplish
that. So like for the way Strata

569
00:44:51.639 --> 00:44:58.559
works is it's a it's a subset
of stimulus, so it's actually subclasses a

570
00:44:58.719 --> 00:45:02.480
stimulus controller to another class called bridge
component. So that's kind of like the

571
00:45:02.559 --> 00:45:09.480
main centerpiece of Strata. So you
would subclass bridge component on the web and

572
00:45:10.119 --> 00:45:15.199
you'd kind of write some logic for
whatever camera thing that you want to do,

573
00:45:15.400 --> 00:45:17.880
and then when that component connects to
the dorm, it will send a

574
00:45:17.960 --> 00:45:22.679
message with whatever you've defined in that
in that component to your native code.

575
00:45:23.199 --> 00:45:27.719
And then you have to have like
a counterpart components. If you have a

576
00:45:27.800 --> 00:45:30.400
camera component on the web, you
have to have a camera component in native

577
00:45:30.719 --> 00:45:35.159
in the native apps as well,
which is like a fully native Swift or

578
00:45:35.159 --> 00:45:38.199
a Cottland class. So that class
will receive the message that your web app

579
00:45:38.360 --> 00:45:42.760
has sent and then that can do
whatever native thing it needs to do to

580
00:45:42.920 --> 00:45:46.280
make whatever you want happen. And
then to go back to go backwards again,

581
00:45:46.480 --> 00:45:50.760
like you would send a message to
the web app to like kind of

582
00:45:51.199 --> 00:45:55.360
click an element or or hid an
element or something like that in the WebView.

583
00:45:55.840 --> 00:45:59.559
So that that way you can have
like a you can have like a

584
00:45:59.599 --> 00:46:02.039
fully in native button that's just a
proxy for like a web element, so

585
00:46:02.119 --> 00:46:06.519
you can have like in your navigation
bar, you can have like a login

586
00:46:06.599 --> 00:46:09.719
button that's fully native, but all
it's doing actually under the hood is clicking

587
00:46:09.920 --> 00:46:16.159
a hidden log in link on your
web view. I see, I mean

588
00:46:16.199 --> 00:46:23.559
it sounds. It sounds very similar
to React Native in the bridging way.

589
00:46:24.480 --> 00:46:28.400
I don't know a whole lot about
React Native, but I think it's just

590
00:46:28.480 --> 00:46:31.760
a different philosophy. Where React Native
you're writing JavaScript, but the views that

591
00:46:31.800 --> 00:46:38.239
are rendered are all fully native views. With Devonative, you're rendering web content

592
00:46:39.119 --> 00:46:43.079
for the most fun I say,
yeah, it's a different bridge. It

593
00:46:43.559 --> 00:46:49.400
does use the JavaScript core bridge on
iOS. Yeah, but the way it

594
00:46:49.480 --> 00:46:53.079
communicates with your app because it's a
web app is different from how it communicates

595
00:46:53.159 --> 00:46:59.639
with a turbative apps or not a
terminator React native app because the React native

596
00:46:59.679 --> 00:47:05.119
app of the logic is running on
your phone using JavaScript and then interacting with

597
00:47:05.280 --> 00:47:08.360
the native views, and so it
is a little different. I can see

598
00:47:08.400 --> 00:47:15.599
how that would make for a better
experience to run native from a developer standpoint.

599
00:47:15.679 --> 00:47:19.519
I don't know from a user standpoint, but dependent on the app.

600
00:47:20.199 --> 00:47:22.960
Yeah, I think, I like, with any technology, can you can

601
00:47:23.039 --> 00:47:27.119
build good apps so that you can
build bad apps with this? I mean,

602
00:47:27.320 --> 00:47:30.079
I've been using Hey for email pretty
much ever since it came out,

603
00:47:30.199 --> 00:47:34.920
and I'm perfectly happy with their app, and their app is probably one of

604
00:47:34.920 --> 00:47:38.880
the flag bearers for termor native.
But yeah, it's not. It's not

605
00:47:39.000 --> 00:47:44.119
without its problems, and it can
be a lot to deal with sometimes.

606
00:47:44.159 --> 00:47:46.159
So like, actually, when I
released the update to my book, I

607
00:47:46.239 --> 00:47:50.639
announced as part of that update that
the second edition, which will which I'll

608
00:47:50.679 --> 00:47:53.360
probably start working on next year,
so it's still a little ways away.

609
00:47:54.440 --> 00:47:57.800
I'm going to remove all the native
stuff from it. It's going to be

610
00:47:58.079 --> 00:48:06.559
PWA's all the way, just because
they run Yeah, yeah hopefully, but

611
00:48:07.280 --> 00:48:14.360
no, the I like that very
much, So okay, just making sure

612
00:48:14.719 --> 00:48:20.719
yeah monopolease right, Well, just
just to throw it in. Within the

613
00:48:20.800 --> 00:48:24.159
next week or so, we have
an episode coming out from Bruce Lawson and

614
00:48:24.280 --> 00:48:31.519
he talks about the open Web initiatives
and how a lot of the yeah PWA

615
00:48:31.599 --> 00:48:37.239
stuff doesn't work on Apple and why
and yeah, he he goes after pretty

616
00:48:37.280 --> 00:48:43.880
hard. Anyway. Yeah, Apple's
not been covering themselves in in glory recently,

617
00:48:44.119 --> 00:48:45.639
so yeah, yeah, we'd love
to see what happens there. But

618
00:48:46.320 --> 00:48:51.039
yeah, my reasoning for it is
for removing the native stuff is that I've

619
00:48:51.119 --> 00:48:54.400
got both my feet and the web
world. I haven't worked on a production

620
00:48:54.639 --> 00:48:59.679
Android code based since twenty seventeen,
and a production Alos code based in twenty

621
00:48:59.760 --> 00:49:05.079
nine teen, and it's just getting
too difficult for one person to maintain all

622
00:49:05.159 --> 00:49:09.199
this stuff, especially in an educational
resource where I kind of need to know

623
00:49:09.320 --> 00:49:15.199
my shit a little bit. It's
it's too stressful and too exhausting. And

624
00:49:15.920 --> 00:49:22.119
PWA is when they work Big Asterisk
there are pretty damn good, So I'm

625
00:49:22.159 --> 00:49:25.000
just going to focus on those instead. Right now, RAILS eight is supposed

626
00:49:25.000 --> 00:49:30.360
to be focused on making it work. It is. Yeah, They're supposed

627
00:49:30.400 --> 00:49:34.599
to be a new sub framework called
action Notifier as well in RAILS eight,

628
00:49:34.679 --> 00:49:38.960
which is going to be like web
based push notifications. So yeah, with

629
00:49:39.079 --> 00:49:44.599
all that stuff, I just feel
that I don't need to have a native

630
00:49:44.760 --> 00:49:49.280
section anymore. And like anyone who
buys the book at any point will always

631
00:49:49.360 --> 00:49:52.119
have access to this first edition with
the native stuff, so it will always

632
00:49:52.159 --> 00:49:55.840
live on if anyone wants. Like, the basics are never going to change,

633
00:49:55.920 --> 00:49:59.920
right, The basics of demnative and
strata are never going to change.

634
00:50:00.039 --> 00:50:05.760
That's all I cover in the book. So hopefully it will still have value

635
00:50:05.800 --> 00:50:09.559
to people. But yeah, like
it can be a bit much for one

636
00:50:09.639 --> 00:50:14.599
person to try and do all three. So are you targeting Rails eight then

637
00:50:14.639 --> 00:50:16.920
in the next edition? Yeah,
I will, Yeah, it's it's it's

638
00:50:16.960 --> 00:50:20.599
gonna be. It's gonna be a
paid upgrade. For that reason, I

639
00:50:20.679 --> 00:50:24.880
probably won't start working on it until
after Rails eight is out. I haven't

640
00:50:24.920 --> 00:50:30.000
really got any plans for it or
anything at the moment, so all I

641
00:50:30.119 --> 00:50:35.239
know is it'll target Rails eight,
it'll target whatever new stuff comes out in

642
00:50:35.360 --> 00:50:38.000
the framework. It'll be p w
as, and it'll be a paid upgrade.

643
00:50:39.920 --> 00:50:45.239
Cool. I just wanted to call
it, I love your little written

644
00:50:45.320 --> 00:50:52.360
by a human tag. You're not. You're not the first person to compliment.

645
00:50:53.519 --> 00:51:00.280
I actually loved nice cheeky thing it
was. Yeah, I enjoyed putting

646
00:51:00.320 --> 00:51:10.199
that in there. That's funny.
You have to specify these days. You

647
00:51:10.360 --> 00:51:14.000
got to. I mean, how
else are you gonna know? Yeah?

648
00:51:19.360 --> 00:51:22.880
All right, well, anything else
that we want to go after on this

649
00:51:22.159 --> 00:51:28.639
or look at Chuck, you you've
hat you've had some time with my book?

650
00:51:28.760 --> 00:51:34.639
Do you have any I'm just blatantly
asking for compliments, you have anything,

651
00:51:37.480 --> 00:51:42.960
So, to be perfectly honest,
I started reading it. I mean,

652
00:51:44.400 --> 00:51:46.960
I have to say that this is
like the busiest season of my life

653
00:51:47.039 --> 00:51:54.079
ever with Mike. So my kids
are finishing up school this week. I'm

654
00:51:54.239 --> 00:51:59.119
the vice chair of the Utah County
Republican Party and we're trying to push candidates

655
00:51:59.159 --> 00:52:01.480
over the line. So I've been
doing all of that and then I picked

656
00:52:01.559 --> 00:52:06.119
up a contract and the contract is
for forty hours a week, like just

657
00:52:06.320 --> 00:52:08.800
to build forty hours a week,
and so that's a ton of time.

658
00:52:08.920 --> 00:52:13.159
So I haven't had a ton of
time to get into it. I have

659
00:52:14.280 --> 00:52:20.119
gotten through the first bit, I
have to say, like the deployment section,

660
00:52:20.199 --> 00:52:22.559
because you talked about deployment here and
I just kind of skimmed it because

661
00:52:24.519 --> 00:52:32.960
I deploy using camal To SoC But
you know, the setup was fairly good,

662
00:52:34.039 --> 00:52:37.239
and to be honest, some of
this, some of this was stuff

663
00:52:37.280 --> 00:52:39.199
that you know was like, oh, I think I kind of knew that,

664
00:52:39.800 --> 00:52:43.840
right, and you kind of explicitly
draw it out and point at it,

665
00:52:43.960 --> 00:52:49.199
and so that was helpful as well. And so Yeah, so now

666
00:52:49.280 --> 00:52:51.960
I'm just getting into Okay, I
want to build the app that I want

667
00:52:52.000 --> 00:52:58.000
to build. You know, I
just barely started creating the iOS app part

668
00:52:58.079 --> 00:53:04.920
of it because I do what I
want is and just to kind of give

669
00:53:04.960 --> 00:53:08.000
people an idea, what I'm doing
is I'm walking through the book and I'm

670
00:53:08.039 --> 00:53:14.199
building the next version of top end
devs. And so because effectively what I

671
00:53:14.239 --> 00:53:16.199
want to build is I keep telling
people I want to build the Netflix of

672
00:53:16.360 --> 00:53:22.360
programmers. Right. And it's a
little different from kind of what Egghead or

673
00:53:23.840 --> 00:53:27.639
plural Site or some of the others
do, where you know, it's like,

674
00:53:27.719 --> 00:53:30.840
hey, go pick up this course. What I want to do is

675
00:53:30.880 --> 00:53:37.480
I want to have a number of
series kind of like drifting Ruby or rails

676
00:53:37.559 --> 00:53:39.519
casts or something like that, but
for different technologies, right, And so

677
00:53:40.000 --> 00:53:45.280
I would love to have an ongoing
series on like hot Wire, have an

678
00:53:45.280 --> 00:53:49.360
ongoing series on just JavaScript fundamentals,
right, and so every week you get

679
00:53:49.360 --> 00:53:52.679
a new video so that you can
go pick up you know, basic DevOps

680
00:53:54.960 --> 00:53:58.840
some of the other frameworks that we
cover on the network, so React or

681
00:53:58.920 --> 00:54:01.800
Angular, right, and so you
kind of kind of get the idea where

682
00:54:01.800 --> 00:54:06.800
I'm going. But then the other
thing I'd like to do is create sort

683
00:54:06.840 --> 00:54:12.559
of longer form content that's more I
guess creative than technical. And so then

684
00:54:12.639 --> 00:54:21.320
it's you know, we have documentaries
or maybe an audio what do they call

685
00:54:21.440 --> 00:54:25.800
them, like an audio drama right
where you have anyway. I'd love to

686
00:54:25.840 --> 00:54:31.760
have a podcast where people are actually
acting right, and so you know,

687
00:54:32.440 --> 00:54:37.119
you get some comedy out of how
a team runs right, and you have

688
00:54:37.360 --> 00:54:43.239
just that guy right, that's anyway. So those kinds of things I kind

689
00:54:43.280 --> 00:54:45.760
of envision, and so you know, I want to build a platform that

690
00:54:45.840 --> 00:54:52.960
looks more like Netflix and less like
like plural site, if that makes sense.

691
00:54:53.039 --> 00:54:57.639
And we still have the courses,
right, so you could still go

692
00:54:57.719 --> 00:55:00.440
through a course and watch Okay,
here's the fifteen minute video on how to

693
00:55:00.480 --> 00:55:04.639
set up, and here's the fifteen
minute video on how to install, and

694
00:55:04.679 --> 00:55:07.480
here's a fifteen minute video on how
to use, like the basics that you

695
00:55:07.599 --> 00:55:12.199
probably would recognize out of anything else
that's similar. And then here here's you

696
00:55:12.280 --> 00:55:15.039
know, we're going to show you
how to get it all set up and

697
00:55:15.320 --> 00:55:21.519
use it. But I really want
to give people the full breadth of what

698
00:55:21.639 --> 00:55:23.880
they can get right. And so
if you are getting a bunch of programmers

699
00:55:23.880 --> 00:55:29.000
together you can sit down and you
know, watch the thing, right,

700
00:55:29.159 --> 00:55:34.599
whether it's you know, a comedic
take on a dev team or a documentary

701
00:55:34.719 --> 00:55:37.599
on how a thing came about,
or you know, a technical walkthrough on

702
00:55:37.719 --> 00:55:44.760
how to use beat or something like
that. So anyway, and this kind

703
00:55:44.800 --> 00:55:46.960
of hits all of those places,
right because you know, you kind of

704
00:55:47.000 --> 00:55:51.719
have the slide out menus and the
you know, the kinds of interactions that

705
00:55:51.800 --> 00:55:53.320
you want from things, and I
think you can get all of that out

706
00:55:53.360 --> 00:55:58.119
of stimulus and how wire and I've
been doing stimulus for a few years now.

707
00:55:59.400 --> 00:56:01.920
But anyway, so I'm just walking
through this. But yeah, so

708
00:56:02.480 --> 00:56:07.280
the turbative stuff really appeals to me
because yeah, I don't see a reason

709
00:56:07.320 --> 00:56:10.920
why you can't. You know,
Okay, you want to watch the videos,

710
00:56:10.960 --> 00:56:13.760
so you pull up the app,
you open the app, but the

711
00:56:13.800 --> 00:56:19.559
app just you know, mostly loads
in you know, the videos and stuff,

712
00:56:19.599 --> 00:56:22.280
and then yeah, yeah, maybe
I have to do some work on

713
00:56:22.440 --> 00:56:24.519
it for some of the native stuff, so that yeah, if you want

714
00:56:24.559 --> 00:56:29.960
to download it and watch it offline, yeah, the website doesn't really do

715
00:56:30.119 --> 00:56:34.679
that. But honestly, I think
if you're gonna do something like that,

716
00:56:35.039 --> 00:56:37.960
even through Turbonative. I think the
best way is probably just using service workers.

717
00:56:38.599 --> 00:56:42.360
So you're going to be in the
web world anyway, and your website

718
00:56:42.400 --> 00:56:46.760
will end up supporting it anyway.
Right, Because another analogy I kind of

719
00:56:46.800 --> 00:56:51.360
make, and the talk I gave
last year, is that turbonative app is

720
00:56:51.880 --> 00:56:57.440
in a way is like showing your
website through a custom web browser. So,

721
00:56:57.559 --> 00:57:00.159
yeah, the app shell, all
it is, in effect is is

722
00:57:00.199 --> 00:57:06.119
a custom web browser. Right,
the tabs and whatever is just you're like

723
00:57:06.199 --> 00:57:09.960
a little bit of custom chrome around
what is effectively still your website, right,

724
00:57:10.960 --> 00:57:15.480
Yeah, And that's that's kind of
the point is I can build it

725
00:57:15.559 --> 00:57:19.880
once, I can put this wrapper
around it, and then yeah, for

726
00:57:19.960 --> 00:57:23.440
anything that I have to tweak because
it's mobile or because your phone has a

727
00:57:23.519 --> 00:57:30.199
different concern than the web does,
right, then I can figure those pieces

728
00:57:30.239 --> 00:57:32.000
out. The other piece that I
want to figure out, and I don't

729
00:57:32.000 --> 00:57:35.519
think it goes into it in your
book, but I haven't seen any other

730
00:57:35.559 --> 00:57:38.199
examples of it either, is I'd
love to get turbo native to make my

731
00:57:38.320 --> 00:57:44.679
app run on an Apple TV,
right yep, and things like that,

732
00:57:44.880 --> 00:57:46.960
and so you know, just figure
those pieces out. But the promise of

733
00:57:47.000 --> 00:57:52.199
the book so far is hey,
I can have all those things and so

734
00:57:52.360 --> 00:57:54.920
yeah, so some of the stuff
I wind up muddling my way through because

735
00:57:54.920 --> 00:57:58.639
I haven't gotten to that part of
the book yet, and some of the

736
00:57:58.719 --> 00:58:05.719
stuff, yeah, I'm just looking
forward to it. But the thing is

737
00:58:05.880 --> 00:58:07.639
is that, like I went and
looked through some of the stimulus chapters,

738
00:58:08.599 --> 00:58:12.840
you know, I didn't like deeply
read or try and implement because I'm working

739
00:58:12.880 --> 00:58:15.440
through the book as I read it, right, I'm not just reading it

740
00:58:15.880 --> 00:58:22.079
for the you wiz knowing this stuff. And it's been really really easy to

741
00:58:22.239 --> 00:58:27.920
follow along with anything that I've done
out of the book, so that I

742
00:58:28.000 --> 00:58:30.360
will definitely put forward. And it
seems like you're offering up a lot of

743
00:58:30.360 --> 00:58:32.480
the stuff that I want to pick
up that I just don't know yet.

744
00:58:34.480 --> 00:58:37.559
So when I go and look at
the strata section or the stimulus section or

745
00:58:37.840 --> 00:58:39.960
right, it's like it's like I've
been doing stimulus for a long time,

746
00:58:40.000 --> 00:58:45.119
but I didn't know I could do
that. Okay, you know, I'm

747
00:58:45.199 --> 00:58:50.440
curious, like if somebody's starting from
like start to finish with the book,

748
00:58:50.639 --> 00:58:53.960
like how long until they have something
like usable of an app that they can

749
00:58:54.039 --> 00:59:00.880
get a good feel for whether or
not they like the framework or the direction

750
00:59:00.039 --> 00:59:07.239
is going kind of thing. So
I mean, I start start with a

751
00:59:07.480 --> 00:59:10.159
bit an authentication system, so I
think like chapter one is just setting up

752
00:59:10.239 --> 00:59:15.599
the reapers. Chapter two is text
only intro to Hotwire. Chapter three you

753
00:59:15.639 --> 00:59:20.760
start actually building something you build like
users and sign ups. In chapter four

754
00:59:20.920 --> 00:59:22.679
is authentication, and then it kind
of builds from there. So I think

755
00:59:22.719 --> 00:59:25.559
those chapter three and four do give
you a good feel of the framework.

756
00:59:25.679 --> 00:59:31.199
But this book is not aim that
people who don't know rails. So it's

757
00:59:31.679 --> 00:59:37.360
like I've kind of positioned it as
a spiritual sequel to the Rail Tutorial by

758
00:59:37.400 --> 00:59:44.119
Michael Hartle usual disclaimers of no affiliation
and all that stuff. But so if

759
00:59:44.159 --> 00:59:47.639
you if you're starting my book,
my understanding is you or you're already sold

760
00:59:47.679 --> 00:59:53.119
on rails, you already have a
basic understanding of it. So my aim

761
00:59:53.239 --> 00:59:57.519
was never to kind of give people
a quick feel of the framework, because

762
00:59:57.639 --> 01:00:00.400
if they come to my book,
they already like else was kind of like

763
01:00:02.440 --> 01:00:07.480
my thinking behind it, and hot
Wire is now kind of like a part

764
01:00:07.559 --> 01:00:09.199
of Rails as well. So while
it's kind of front and center because it's

765
01:00:09.199 --> 01:00:14.239
a new thing that people want to
learn about. You could get a feel

766
01:00:14.280 --> 01:00:17.039
for it pretty quickly, because,
like I said, chapter two is a

767
01:00:17.159 --> 01:00:22.039
text only intro to what it is, to all the bits of it.

768
01:00:22.360 --> 01:00:24.119
Yeah, I wanted to commit a
chunk of time to it, like start

769
01:00:24.199 --> 01:00:29.039
to finish, Like about how long
am I looking to like make it through

770
01:00:29.079 --> 01:00:31.800
the book and build an app kind
of thing? Just you know, people

771
01:00:31.840 --> 01:00:38.760
out there too are curious. Honestly, I honestly couldn't tell you because it's

772
01:00:38.840 --> 01:00:46.039
an absolute beast of a book.
And yeah, it depends on like what

773
01:00:46.239 --> 01:00:51.719
your existing level of skill and knowledge
is, because some things will take Like

774
01:00:52.440 --> 01:00:55.320
if you already know certain things,
you can go through those a lot faster,

775
01:00:55.639 --> 01:00:59.360
and like you could just like copy
paste go it out of the book

776
01:00:59.480 --> 01:01:02.719
and just kind of skim through it
if you already know it. But if

777
01:01:02.840 --> 01:01:08.320
you're newer to the framework than those
things will take longer. Given the fact

778
01:01:08.360 --> 01:01:15.079
that I actually don't know, I
haven't spoken to anyone who has done the

779
01:01:15.119 --> 01:01:17.599
book cover to cover, I couldn't
tell you how much time it could take

780
01:01:17.639 --> 01:01:22.440
because I couldn't even estimate it,
to be honest, I mean, it

781
01:01:22.639 --> 01:01:31.519
just depends on the person. Yeah, that's exactly right. Because the book

782
01:01:31.599 --> 01:01:37.360
is such a beast, It's so
big and detailed. I don't think anyone

783
01:01:37.400 --> 01:01:39.320
could just go into it and just
do it cover to cover. I think

784
01:01:39.400 --> 01:01:45.440
a lot of people are dipping in
and out of it, which is actually

785
01:01:45.480 --> 01:01:47.000
I think maybe a weakness of the
book is that cover so much. But

786
01:01:47.079 --> 01:01:52.519
I did want to build. I
did want to write like a comprehensive manual.

787
01:01:52.239 --> 01:01:55.000
So like another idea I'm kind of
playing around with it in my head

788
01:01:55.159 --> 01:02:02.199
is breaking the book down into you
like a series of blog posts and then

789
01:02:02.280 --> 01:02:07.599
paywalling those. So like you have
things like goraels and drifting Ruby for screen

790
01:02:07.719 --> 01:02:14.440
casts, but you don't have anything
in the Ruby world for like text based

791
01:02:15.599 --> 01:02:20.519
education, which is like bite size
text based rather than like Goreels is like

792
01:02:20.599 --> 01:02:23.840
bite size but video. Right,
So I think maybe I could think about

793
01:02:24.159 --> 01:02:29.440
that bite size but text based and
then just have a subscription on that and

794
01:02:30.119 --> 01:02:36.159
seed that by breaking the book down
into individual blog posts so you can use

795
01:02:36.320 --> 01:02:40.159
the new once product by DHH what's
it called work book? Yeah, I

796
01:02:40.280 --> 01:02:44.920
did see that. I did see
that. It was another idea that it's

797
01:02:45.039 --> 01:02:46.800
in the back of my mind.
I will I'll definitely be downloading it when

798
01:02:46.840 --> 01:02:52.239
they release it and I'll see see
what's what. You'll have to download it

799
01:02:52.280 --> 01:03:12.360
and post on the neighborhood marketplace.
Yep. Anyway, I'll give you more

800
01:03:12.360 --> 01:03:15.199
feedback as I get through it,
but I guess I'm pretty constrained. Once

801
01:03:15.239 --> 01:03:22.000
my kids are out of school,
it should be better. Well, it's

802
01:03:22.039 --> 01:03:24.440
good to hear the feedback you've got, and I hope you keep finding value

803
01:03:24.480 --> 01:03:29.360
in it. Yeah. Well,
I mean one of the other things that

804
01:03:29.480 --> 01:03:31.800
I'm just going to point out that
I'm excited about is, you know,

805
01:03:31.920 --> 01:03:36.400
building your own authentication and stuff,
because, to be perfectly honest, I've

806
01:03:36.480 --> 01:03:40.239
never done that before. Oh okay, Yeah, I kind of got the

807
01:03:40.320 --> 01:03:44.599
impression people are afraid of it,
which is another reason why I wanted to

808
01:03:44.800 --> 01:03:47.320
write about it, is because it
can be daunting. But I don't think

809
01:03:47.320 --> 01:03:52.280
it's something people should be afraid of
necessarily. I think people are just afraid

810
01:03:52.320 --> 01:03:59.800
of doing something that compromises there.
Yeah, yeah, it can be a

811
01:03:59.840 --> 01:04:04.400
bit nuanced, but I think,
uh, with the feature that Rails gives

812
01:04:04.400 --> 01:04:09.599
you out of the box of things
like has secure password and stuff, you're

813
01:04:09.679 --> 01:04:13.199
not gonna shoot yourself in the foot
too badly. You might make an odd

814
01:04:13.320 --> 01:04:19.320
mistake or something like a common mistake
that people make is when you store like

815
01:04:19.480 --> 01:04:32.280
a cookie by Valentino. So when
you start a cookie that kind of authentic

816
01:04:32.480 --> 01:04:35.559
is the user. The only thing
you put in that cookie is the user

817
01:04:35.639 --> 01:04:42.559
I D. And when it's just
that, that cookie kind of forms a

818
01:04:43.360 --> 01:04:47.559
permanent key player app. So if
someone gets hold of that cookie, there

819
01:04:47.639 --> 01:04:54.039
is nothing you can do to stop
them. And the reel tutorial thought authentication

820
01:04:54.159 --> 01:04:57.719
that way, and it is a
very common way of teaching authentication in the

821
01:04:58.239 --> 01:05:00.760
in raels was you just saw the
you just stick the user iety in a

822
01:05:00.920 --> 01:05:05.039
in a in an encrypted cookie.
So like while a hacker could never see

823
01:05:05.159 --> 01:05:11.079
or modify what the user iety was, they could in perpetuity log in as

824
01:05:11.119 --> 01:05:14.599
that user because there's nothing like the
useriety doesn't change, right, there's nothing

825
01:05:14.679 --> 01:05:18.360
you can do to invalidate Thatalu,
Yeah you can just yeah, so that's

826
01:05:18.400 --> 01:05:21.519
why. Yeah, So that's why
you need a second value. So you

827
01:05:21.599 --> 01:05:26.400
need the useriety and you need like
an authentication token, and then you authenticate

828
01:05:26.440 --> 01:05:29.239
the user based on both those things. And if someone gets hold of that

829
01:05:29.400 --> 01:05:31.760
cookie, all you need to do
is invalidate that session token, and that

830
01:05:31.840 --> 01:05:35.760
cookie is useless. So it's things
like that where you'd end up shooting yourself

831
01:05:35.760 --> 01:05:41.320
in the foot, But those things
can be fixed. You won't make some

832
01:05:41.920 --> 01:05:45.199
like an absolutely horrendous mistake if you
use the tools that Rails gives you,

833
01:05:45.239 --> 01:05:47.079
because things like has to get pass
what it's pretty battle tested, it's been

834
01:05:47.119 --> 01:05:51.199
out there for a while, so
you won't make mistakes at the like a

835
01:05:51.920 --> 01:05:58.079
cryptographic level necessarily. It'll probably just
make more like product mistakes, which it's

836
01:05:58.360 --> 01:06:04.400
much easier to educate against. Right, makes sense. Cool? Well,

837
01:06:04.559 --> 01:06:08.599
it's it's been fun to kind of
get to know your background a little bit.

838
01:06:09.400 --> 01:06:12.199
Cheah. Well, I hope people
didn't get too bored of me rambling

839
01:06:12.280 --> 01:06:15.159
on, but it's fun to chat. I find it fascinating. So the

840
01:06:15.239 --> 01:06:20.159
rest of you all, I hope
you did too. Let's let's go ahead

841
01:06:20.159 --> 01:06:26.239
and do some picks though and wrap
this up. Do you have some picks?

842
01:06:26.679 --> 01:06:30.360
Uh? Yeah, I've got a
couple. I haven't been doing a

843
01:06:30.400 --> 01:06:35.519
whole lot recently yet, but I
did. I watched Inola Holmes two and

844
01:06:35.639 --> 01:06:40.480
then realized I didn't remember anything about
the first movie, so I went back

845
01:06:40.519 --> 01:06:44.800
and watched the first movie as well. But yeah, I can wholeheartedly recommend

846
01:06:44.920 --> 01:06:47.079
both those movies. It's about for
any and it doesn't know. It's about

847
01:06:47.719 --> 01:06:53.679
Shellock Holmes as little sister Inola Holmes, and it's very much she's the protagonist.

848
01:06:53.719 --> 01:06:56.840
And the movies are very well made. So like, if you're a

849
01:06:56.960 --> 01:06:59.960
fan of Shellock Holmes like I am, you'll probably enjoy it. And it's

850
01:07:00.159 --> 01:07:02.519
very much like they kind of made
the movie in a way that she is

851
01:07:02.760 --> 01:07:09.000
the central character. Doesn't feel like
like a bolt on into the show lot,

852
01:07:09.079 --> 01:07:13.599
coms world or anything. It's very
entertaining, very well done. So

853
01:07:14.199 --> 01:07:18.920
yeah, those two movies. Other
than that, I'm on the current rewatch

854
01:07:19.039 --> 01:07:24.000
binge of Breaking Bad. I mean, I think, is there anyone who

855
01:07:24.039 --> 01:07:27.719
hasn't seen Breaking Bad by this point? So, I mean, have we

856
01:07:27.840 --> 01:07:34.159
not? I know I haven't,
I will say. I mean it looks,

857
01:07:34.280 --> 01:07:39.159
it looks fascinating. It's a brilliant
show. It's like, I love

858
01:07:39.239 --> 01:07:42.239
Breaking Bad, but I'm a bigger
fan of the prequel, Better Call Saul,

859
01:07:43.039 --> 01:07:46.719
which is my favorite TV show of
all time. Okay, so yeah,

860
01:07:46.840 --> 01:07:50.920
I rewatched Better CALLSL a couple of
months ago, and I realized I

861
01:07:51.000 --> 01:07:57.480
hadn't seen Breaking Bad since Better Calls
all concluded, which was in two,

862
01:07:58.320 --> 01:08:00.159
so I figured, why not binge
it again? So that's what I'm doing.

863
01:08:00.239 --> 01:08:03.880
So those are my epics in Nola
Holmes, Want and Do and Breaking

864
01:08:03.960 --> 01:08:09.320
Bad. Yeah, I know I
watched the first and Nola Holmes, I

865
01:08:09.440 --> 01:08:14.920
think I saw the second one.
Yeah, so the TV rewatch Binge that

866
01:08:15.199 --> 01:08:18.760
I'm on. I know, I
know people are like, what about board

867
01:08:18.800 --> 01:08:24.640
games? I'll get to that.
The one that I've been watching is The

868
01:08:24.720 --> 01:08:30.760
Walking Dead. So I watched the
first four or five seasons way back when

869
01:08:30.800 --> 01:08:34.439
they were coming out, and then
I think I got caught caught up and

870
01:08:34.560 --> 01:08:39.359
I quit watching it. And so
now that there are like eleven seasons,

871
01:08:40.600 --> 01:08:45.000
I'm kind of curious to see what
I missed in the later video, the

872
01:08:45.119 --> 01:08:48.119
later episode. So yeah, I've
been watching that. I've been watching on

873
01:08:48.239 --> 01:08:56.880
Netflix and uh yeah, maybe I'll
pick up Breaking Bad next. Some of

874
01:08:56.960 --> 01:08:59.520
these shows, though, they get
a little too gritty for my wife.

875
01:09:00.279 --> 01:09:03.640
Ah, okay, Breaking Bad might
be something I watched by myself. Yeah,

876
01:09:03.840 --> 01:09:08.560
it can. It can be a
bit visial. Sometimes they don't really

877
01:09:09.039 --> 01:09:14.439
it's it's it's not it's not like
Game of Thrones. That's not where like

878
01:09:15.000 --> 01:09:17.640
Gore is like a unique selling point
of the show. But the right when

879
01:09:17.680 --> 01:09:21.039
they want to make an impact,
they don't shy away from it, right.

880
01:09:21.720 --> 01:09:26.720
Well, and that's that's the thing
with Walking Dead is because I try

881
01:09:26.760 --> 01:09:29.199
to get my wife to watch it, and she just expressed no interest in

882
01:09:29.279 --> 01:09:32.039
it. But I think the overall
premise, the story, the characters,

883
01:09:32.920 --> 01:09:36.399
I think she'd really get into it. But I when I started rewatching it,

884
01:09:38.399 --> 01:09:43.119
I'm only like four episodes in at
this point, But yeah, I

885
01:09:43.159 --> 01:09:47.199
didn't realize how much gore there is
in it with just you know, I

886
01:09:47.279 --> 01:09:50.039
mean, they have to shoot the
zombies in the head and so you see

887
01:09:50.319 --> 01:09:54.399
just you know, they're blowing their
brains out and stuff, and it,

888
01:09:54.479 --> 01:09:59.560
yeah, it gets a little bit
graphic. I think that's kind of the

889
01:10:00.199 --> 01:10:04.479
impact that they wanted to make though
on screen. Right. So anyway,

890
01:10:05.840 --> 01:10:10.880
but yeah, as far as board
games go, so I'm going to kind

891
01:10:10.920 --> 01:10:15.319
of pick a couple of things.
So lately I've been playing games on board

892
01:10:15.359 --> 01:10:18.520
Game Arena, and that's an online
system for playing board games, and they

893
01:10:18.560 --> 01:10:27.119
actually have a developer toolkit for building
games, so you can build card games

894
01:10:27.199 --> 01:10:30.439
or board games or whatever, right, and you can put the assets in

895
01:10:30.680 --> 01:10:33.880
right, So you have a scan
of the board and you know, a

896
01:10:33.960 --> 01:10:39.920
scan of all the cards and everything, and anyway, it's pretty awesome.

897
01:10:40.720 --> 01:10:43.720
The games that I've been playing on
there lately are Challengers, and I've picked

898
01:10:43.760 --> 01:10:46.000
that before, and the other one
that I've been playing is Lost Ruins of

899
01:10:46.079 --> 01:10:54.560
Arnac. Challengers is very approachable,
fun game is kind of a deck building

900
01:10:54.640 --> 01:10:59.560
game and kind of a I don't
know exactly how to describe it. It's

901
01:10:59.600 --> 01:11:02.399
kind of like war, but it's
not. Anyway, I really like it.

902
01:11:03.399 --> 01:11:08.880
And then so effectively, every round
you draw more cards out of the

903
01:11:08.920 --> 01:11:12.199
pile and you choose which ones to
keep in your deck, and then they

904
01:11:12.239 --> 01:11:16.119
all have different values and different powers, and so you know, depending on

905
01:11:16.239 --> 01:11:18.840
how how the play comes out,
because you just pull the card off the

906
01:11:18.880 --> 01:11:23.159
top of your deck, you don't
know what it is, right you can.

907
01:11:24.640 --> 01:11:28.479
You basically are just trying to beat
the other person's last card. And

908
01:11:29.359 --> 01:11:31.279
anyway, it's pretty fun. You
can play it up to like eight players,

909
01:11:32.079 --> 01:11:36.199
and so then what happens is you
rotate who you're playing with every turn.

910
01:11:39.960 --> 01:11:45.760
Lost Ruins Varnak is much more involved. Uh so you you have work

911
01:11:45.800 --> 01:11:49.199
replacement, you have a tech tree, you have Exploration. It's got a

912
01:11:49.239 --> 01:11:55.479
whole bunch of different elements, but
it's it's probably one of my uh more

913
01:11:55.560 --> 01:11:59.319
beloved games that I play these days. So I'm gonna I'm gonna pick both

914
01:11:59.359 --> 01:12:00.920
of those. I'm not going to
go look them up on Board game Geek.

915
01:12:00.960 --> 01:12:04.479
I don't remember what their weights are, but Challengers is very approachable for

916
01:12:04.560 --> 01:12:10.239
anybody, and Lost Ruins of Oarnac
is more for the hardcore board game players.

917
01:12:12.520 --> 01:12:15.880
And then on the technical side,
so I've had a few things that

918
01:12:15.880 --> 01:12:19.039
I've been picking up lately, either
because I'm trying to, you know,

919
01:12:19.199 --> 01:12:23.680
learn a technology that I haven't used
or haven't used in a while. For

920
01:12:23.800 --> 01:12:26.279
my contract. Right it's like,
hey, they're using it, and so

921
01:12:26.439 --> 01:12:29.960
I've I've got to figure out how
to you know, model through it and

922
01:12:30.079 --> 01:12:32.640
not make, you know, fundamental
mistakes on how I use it. And

923
01:12:32.840 --> 01:12:36.439
I get feedbacks on the prs that
I put in, so it's not it's

924
01:12:36.520 --> 01:12:42.560
not bad, it's just anyway.
But one thing that I picked up that

925
01:12:42.640 --> 01:12:46.039
I really really like is VAT.
So there's a VAT Ruby and Veat rails

926
01:12:46.119 --> 01:12:50.359
gems and we've we've had Massimo on
the show. Before I think to talk

927
01:12:50.399 --> 01:12:56.199
about it, but it gives me
hot module reloading, which I wasn't really

928
01:12:56.239 --> 01:13:02.119
getting for prop shaft or important maps. And the other thing is is sometimes

929
01:13:02.239 --> 01:13:05.920
I felt like I had to fuss
with stuff to get it to play nice

930
01:13:05.960 --> 01:13:12.479
with the important maps and vat Ruby, it just works. So I've been

931
01:13:12.479 --> 01:13:16.600
pretty happy with that. And yeah, now that I'm pulling in stimulus components

932
01:13:17.079 --> 01:13:25.119
and starting to get into using turbo
and turbo screens, yeah, that's been

933
01:13:25.359 --> 01:13:30.439
so super nice. The other end
of it that I've also been liking.

934
01:13:30.640 --> 01:13:34.880
I never got into writing kind of
the what is it feature or system level

935
01:13:34.960 --> 01:13:42.720
tests for rails right. I always
wrote my unit tests and then occasionally i'd

936
01:13:42.800 --> 01:13:48.239
write tests for other things if it
got complicated. But lately I've gotten into

937
01:13:48.279 --> 01:13:53.800
copy Barra, and it's because my
client uses them on their stuff right to

938
01:13:53.840 --> 01:13:59.800
test their stuff that use copy Barra, and man, that's been super nice

939
01:14:00.000 --> 01:14:03.159
once I kind of got the hang
of writing those specs. It's nice because

940
01:14:03.199 --> 01:14:06.359
it'll walk through the app and do
the things, and you can enable the

941
01:14:06.840 --> 01:14:15.000
JavaScript and it uses the Chrome driver
and right, so it'll it'll test my

942
01:14:15.119 --> 01:14:19.399
hot wire and everything because I'm not
super keen on testing my front end JavaScript.

943
01:14:20.399 --> 01:14:24.039
Sorry, I just I'm not.
And for the most part, my

944
01:14:24.199 --> 01:14:29.000
stimulus controllers are very very simple,
right, It's, hey, make this

945
01:14:29.119 --> 01:14:32.000
show up and use the animations that
I put on it. I mean,

946
01:14:32.039 --> 01:14:38.800
that's almost entirely what I've done so
far. So the only tricky thing that

947
01:14:38.840 --> 01:14:42.000
I've had to do is I've been
I've had to figure out how to get

948
01:14:42.520 --> 01:14:47.840
one controller to trigger the method on
another controller. Right, So I have

949
01:14:47.960 --> 01:14:53.920
a button that makes something show up, and it's not really in the thing

950
01:14:54.000 --> 01:14:58.399
that makes it show up. So
anyway, I've I've had to figure that

951
01:14:58.520 --> 01:15:04.520
out. But are you using what
you're using? The outlets API outlets API.

952
01:15:05.439 --> 01:15:10.960
Yeah, that's a mechanism for one
stimulus controller to communicate with another stimulus

953
01:15:11.039 --> 01:15:17.319
controller. The the thing that I've
been I'm looking at. I'm looking it

954
01:15:17.399 --> 01:15:23.720
up now because no, I didn't
even know this was the thing I was

955
01:15:23.800 --> 01:15:28.720
looking at. So on the reference
under the controllers it says you can use

956
01:15:28.760 --> 01:15:34.680
an event to trigger the other method. But I'll have to look at this,

957
01:15:34.760 --> 01:15:40.159
because yeah you can. And it's
again, it just depends on your

958
01:15:40.439 --> 01:15:45.920
use cases. Sometimes triggering an event
is the right thing to do. But

959
01:15:45.039 --> 01:15:47.600
again, if you just look at
the reference and on the left you'll see

960
01:15:47.600 --> 01:15:53.159
a section for outlets. Yeah,
it might be that outlets, So what

961
01:15:53.239 --> 01:15:56.399
you're looking for in this particular case, Yeah, I'll have to look at

962
01:15:56.439 --> 01:16:01.159
that because yeah, yeah, anyway, I'll dive through it. But yeah,

963
01:16:01.199 --> 01:16:04.279
it'd be nice because all I'm looking
for is, like I have a

964
01:16:04.359 --> 01:16:08.439
menu. I have two menus,
one that slides in from the left and

965
01:16:08.479 --> 01:16:13.960
the other that slides in from the
right. And yeah, effectively, I'm

966
01:16:14.000 --> 01:16:19.199
just looking for the one on the
right. I have a button that's you

967
01:16:19.279 --> 01:16:21.840
know, in the middle of my
page, and so I don't want to

968
01:16:21.840 --> 01:16:27.279
wrap the whole page in a stimulus
component if I don't have to, or

969
01:16:27.279 --> 01:16:30.159
a stimulus controller, and so yeah, I'm looking for Okay, if I

970
01:16:30.279 --> 01:16:33.439
click this link, it's going to
open this other thing over here and make

971
01:16:33.479 --> 01:16:38.319
it slide in. So I don't
know if outlets is the right thing for

972
01:16:38.399 --> 01:16:43.359
that or yeah, it might be
actually, yeah, just like without looking

973
01:16:43.399 --> 01:16:45.520
at the code, it's hard to
say, but I have a feeling it

974
01:16:45.880 --> 01:16:48.239
would probably be the simplest way to
do it. Okay, sounds good.

975
01:16:48.319 --> 01:16:54.520
Yeah, because I've been I have
to say the documentation on stimulus is not

976
01:16:54.640 --> 01:16:59.640
always as comprehensive as I would like
it. No, it isn't. Yeah,

977
01:17:00.319 --> 01:17:02.199
and so what I run into is
it's like, hey, you could

978
01:17:02.239 --> 01:17:04.560
do this, and you could do
this in this way, and it's like,

979
01:17:04.680 --> 01:17:11.439
okay, but my situation is just
different enough, or you're not telling

980
01:17:11.520 --> 01:17:15.079
me which parts of this matter and
so right, so I'm trying to figure

981
01:17:15.119 --> 01:17:19.039
out, yeah, how to get
the gears to mesh, and so I

982
01:17:19.159 --> 01:17:27.159
have to fuss with it to get
it to go. So anyway, yeah,

983
01:17:27.399 --> 01:17:31.600
it can be a bit tricky just
to yeah, yeah stuff, we'll

984
01:17:31.640 --> 01:17:34.840
look at that. That's good.
Yep, that's a good tip. But

985
01:17:35.399 --> 01:17:40.000
anyway, so I am going to
shout out beat Ruby that made my life

986
01:17:40.039 --> 01:17:45.520
simpler. And yeah, I'm really
looking forward to uh pulling some of these

987
01:17:45.560 --> 01:17:50.199
gems out of this project myself.
Anyway, we're pretty much out of time,

988
01:17:50.279 --> 01:17:54.239
so I'm gonna wrap us up and
we'll talk about Bridgetown next week.

989
01:17:54.840 --> 01:17:58.159
Yeah sounds good. Another week of
me rambling on what could go wrong?

990
01:18:00.000 --> 01:18:08.279
Yeah all right, Well, well
next time, folks, max out h

