1
00:00:06,839 --> 00:00:10,320
Speaker 1: Hey everybody, and welcome to another episode of Adventures in Angler.

2
00:00:10,599 --> 00:00:13,320
I'm your host today, Charles Maxwood, and we are talking

3
00:00:13,359 --> 00:00:16,640
to Arman. I love getting people from other countries because

4
00:00:16,640 --> 00:00:18,920
I'm looking at the name and going, let me, let

5
00:00:18,920 --> 00:00:20,440
me try it. It's Vardanian.

6
00:00:20,920 --> 00:00:26,320
Speaker 2: Yeah, you've got it mostly right. I mean your words

7
00:00:26,359 --> 00:00:28,879
usually are pronounced that they are written.

8
00:00:29,960 --> 00:00:32,600
Speaker 1: Yeah. Cool. So do you want to just tell us

9
00:00:32,600 --> 00:00:34,479
a little about yourself what you do over there in

10
00:00:34,560 --> 00:00:36,920
Armenia and yeah, how long have you been doing Angular

11
00:00:36,960 --> 00:00:37,840
and all that good stuff?

12
00:00:38,079 --> 00:00:43,200
Speaker 2: Yeah? Sure. So I'm a senior front and developer at

13
00:00:43,240 --> 00:00:47,600
an Armenian company called Wolo. I'm in sitting in our

14
00:00:47,640 --> 00:00:51,439
office right now. I'm a conference room. I'm a front

15
00:00:51,520 --> 00:00:56,200
and tim lead, and I'm working on Angular for I

16
00:00:56,200 --> 00:01:01,280
think it's the fourth year that I'm working on Angular already.

17
00:01:01,359 --> 00:01:06,640
So we started one of our projects back when Angular

18
00:01:06,879 --> 00:01:10,040
two was in beta. Uh huh, I guess I've been

19
00:01:10,040 --> 00:01:11,079
there from the start.

20
00:01:11,719 --> 00:01:15,159
Speaker 1: Oh wow, Yeah, I remember those days that all the

21
00:01:15,239 --> 00:01:18,480
anxiety around, you know, all the stuff that was changing.

22
00:01:18,920 --> 00:01:22,120
Speaker 2: It was it was sort of you were in constant

23
00:01:22,239 --> 00:01:25,159
danger that something that you are doing today is going

24
00:01:25,200 --> 00:01:28,640
to change tomorrow, and you have to prefecture some of

25
00:01:28,719 --> 00:01:29,719
your code again.

26
00:01:30,200 --> 00:01:32,519
Speaker 1: Yeah, but we're in a good place now. I'm kind

27
00:01:32,519 --> 00:01:35,640
of curious as we get started. I mean, we don't

28
00:01:35,760 --> 00:01:39,599
often hear a whole lot from Armenia, I guess in

29
00:01:39,640 --> 00:01:44,560
the Angular community. So what does the development and regular

30
00:01:44,560 --> 00:01:45,879
community look like out there?

31
00:01:46,519 --> 00:01:52,599
Speaker 2: So Armenia has this problem with our developers that don't

32
00:01:52,680 --> 00:01:55,560
really participate a lot in the community, I mean in

33
00:01:55,680 --> 00:01:59,120
in a global sense, But we actually have lots of

34
00:01:59,560 --> 00:02:04,519
very good software and in Angular too. So the most

35
00:02:04,840 --> 00:02:07,599
biggest part of the market is React, but there are

36
00:02:07,640 --> 00:02:13,719
also also big companies here that use Angular and concentrate

37
00:02:13,800 --> 00:02:17,280
on Angular. And as a matter of fact, I'm also

38
00:02:17,400 --> 00:02:22,360
teaching Angular in a private coding school. It's kind of

39
00:02:22,439 --> 00:02:26,120
like a Blong boot camp. Of course, there are not

40
00:02:26,240 --> 00:02:29,199
as many people enrolled in that program as there are

41
00:02:29,319 --> 00:02:34,000
people in the React program, but we still have enough

42
00:02:34,039 --> 00:02:37,319
demand for Angler developers to keep it going.

43
00:02:37,960 --> 00:02:39,000
Speaker 1: Yeah, that makes sense.

44
00:02:39,120 --> 00:02:42,479
Speaker 2: More usually the larger companies that use Angular.

45
00:02:42,919 --> 00:02:46,000
Speaker 1: Oh really, that's interesting because I've seen a bunch of

46
00:02:46,080 --> 00:02:49,400
larger companies using React. I've seen I've seen kind of

47
00:02:50,039 --> 00:02:52,360
all across the board, I guess for all kinds. But

48
00:02:53,120 --> 00:02:55,240
I talk to people across the board.

49
00:02:55,840 --> 00:03:00,000
Speaker 2: So there are also companies that you've kind of both

50
00:03:00,439 --> 00:03:06,280
on a halfferent projects. For example, one company probably know about,

51
00:03:06,479 --> 00:03:10,360
you know, Pixard right the right, but that's an Armenian company,

52
00:03:10,960 --> 00:03:16,879
and I know that they use both Angular and oh yeah,

53
00:03:16,879 --> 00:03:18,599
as a matter of fact, they have reached out to

54
00:03:18,719 --> 00:03:22,439
me to you know, try to hire me into their

55
00:03:22,520 --> 00:03:25,960
Angular program. I didn't want to, but that's how I

56
00:03:26,039 --> 00:03:28,759
learned that they actually are doing Angular. I always thought

57
00:03:28,800 --> 00:03:31,240
that in and there were web projects they're using going

58
00:03:31,280 --> 00:03:33,199
to react, I know that they were using correct. It

59
00:03:33,439 --> 00:03:36,919
turned out they also had projects in Angular different products,

60
00:03:36,960 --> 00:03:38,360
so probably.

61
00:03:38,080 --> 00:03:40,560
Speaker 1: Yeah, that makes sense. I'm kind of curious as we

62
00:03:40,639 --> 00:03:44,120
get into this, how did you get into Angular's.

63
00:03:43,400 --> 00:03:47,719
Speaker 2: That's sort of an interesting story is that at the

64
00:03:47,840 --> 00:03:51,719
very beginning, I was a PHP developer. So the very

65
00:03:51,719 --> 00:03:55,840
first job I got, which we started this day exactly

66
00:03:55,879 --> 00:03:59,560
five years ago, that was my very first working day,

67
00:04:00,240 --> 00:04:03,439
so and I was hired as a PHP developer. But

68
00:04:04,000 --> 00:04:06,520
the very first day they told me that they really

69
00:04:06,560 --> 00:04:10,599
needed a Python developer. So they asked if I could

70
00:04:10,759 --> 00:04:14,800
try to, you know, learn some basics quickly and try

71
00:04:14,840 --> 00:04:18,639
to do some features. And I was sure, Okay, I've

72
00:04:18,639 --> 00:04:23,079
already hired, so I don't have really option. So I

73
00:04:23,120 --> 00:04:26,720
spent like four days doing some Python and started doing backhand.

74
00:04:27,279 --> 00:04:31,199
But they're working on a project that there were pieces

75
00:04:31,240 --> 00:04:35,439
written in Angular jas in twenty sixteen. Within the beginnings

76
00:04:35,600 --> 00:04:39,399
ty sixteen, we didn't really have Angular one up and running.

77
00:04:39,519 --> 00:04:43,839
So I started doing doing Angular Jazz and it sort

78
00:04:43,839 --> 00:04:45,720
of became a parent that it's more interesting for me.

79
00:04:45,839 --> 00:04:48,920
So when they got a project that they were going

80
00:04:48,959 --> 00:04:52,000
to write from scratch, they decided to create a single

81
00:04:52,000 --> 00:04:54,319
page application on Angler Jazz and all of that, and

82
00:04:54,800 --> 00:04:57,879
I started doing it. So I got I pitched backhand

83
00:04:58,040 --> 00:05:00,759
and started doing only front and then I Angular Jazz.

84
00:05:01,160 --> 00:05:04,639
Then I switched to my current office and they were

85
00:05:04,639 --> 00:05:07,480
also starting in new projects from scratch and they were

86
00:05:07,519 --> 00:05:11,600
already doing it Angular in Angular two, which was in

87
00:05:11,920 --> 00:05:15,360
I guess I was in beta yet. Yeah, so that's

88
00:05:15,399 --> 00:05:19,439
how I got into Angular and awesome, he's been wrong

89
00:05:19,480 --> 00:05:21,439
round but I still enjoyed.

90
00:05:22,160 --> 00:05:25,959
Speaker 1: Yeah. Yeah, it's it's it's fun stuff. I mean, I

91
00:05:26,240 --> 00:05:28,680
kind of dabble in all of them, and it's it's

92
00:05:28,920 --> 00:05:31,480
interesting to see the different approaches but also see the

93
00:05:31,519 --> 00:05:34,160
things that they have in common. So yeah, good deal.

94
00:05:34,720 --> 00:05:38,279
So you've been writing I think I found like two

95
00:05:38,360 --> 00:05:40,920
or three articles where you wrote about r xjs or

96
00:05:41,560 --> 00:05:44,399
you know, some kind of reactive code. I'm a little

97
00:05:44,439 --> 00:05:47,480
curious as we get into this, what what was it

98
00:05:47,519 --> 00:05:49,959
that drove you to start writing about rxjas in particular?

99
00:05:50,000 --> 00:05:52,639
I mean, rxs is kind of core to the way

100
00:05:52,639 --> 00:05:55,959
the angular works. But for the most part, I find

101
00:05:56,000 --> 00:05:59,600
that I can kind of not pay a whole lot

102
00:05:59,600 --> 00:06:02,120
of attention to do what RCGS is doing and just

103
00:06:02,199 --> 00:06:04,439
kind of do things the angular way and it mostly works.

104
00:06:04,839 --> 00:06:06,279
And then I just kind of know in my head

105
00:06:06,319 --> 00:06:09,160
that it's RCGS is doing every thing well.

106
00:06:09,199 --> 00:06:12,720
Speaker 2: For me, it was sort of work experiencing that I

107
00:06:12,759 --> 00:06:17,079
was working on a project that had lots of interconnected logic.

108
00:06:17,519 --> 00:06:22,319
So in a sense, imagine like this is UI that

109
00:06:22,920 --> 00:06:26,360
I have like a drop down, I have another drop down,

110
00:06:26,399 --> 00:06:28,639
and the values in this drop down depend on what

111
00:06:28,680 --> 00:06:31,560
I selected the other drop down, and everything that I

112
00:06:31,639 --> 00:06:34,800
selecting those two dropdowns depend on some permissions that come

113
00:06:34,839 --> 00:06:36,759
from back and like can I do this, can I

114
00:06:36,800 --> 00:06:41,279
do that? And everything is very mixed. So at first

115
00:06:41,319 --> 00:06:44,519
I was trying to keep track of all that stuff

116
00:06:44,560 --> 00:06:46,839
in an imperative way, like like I said, the angular

117
00:06:46,879 --> 00:06:52,399
ways around methods. So when on select this thing, round

118
00:06:52,399 --> 00:06:55,160
this function which will go update the internal state and

119
00:06:55,199 --> 00:06:57,920
so on. But it quickly got out of hands because

120
00:06:58,360 --> 00:07:03,360
I ended up trying to synchronize five or six different

121
00:07:03,879 --> 00:07:07,720
states with each other so that updates the other has

122
00:07:07,720 --> 00:07:11,279
to update. And it was all inside one component. I

123
00:07:11,279 --> 00:07:14,360
couldn't even there were scientor connected. I couldn't even divide

124
00:07:14,399 --> 00:07:17,399
it several components to try to write sort of make

125
00:07:17,480 --> 00:07:21,879
them communicate with each other. So for the next piece,

126
00:07:22,040 --> 00:07:23,839
I decided, I will try to do it in an

127
00:07:23,920 --> 00:07:27,240
RHS way. I will try to create sort of observables

128
00:07:27,279 --> 00:07:30,399
for all the stuff and use operators and functions like

129
00:07:30,439 --> 00:07:34,199
combinlatest or relatest from and so on too, and I

130
00:07:34,240 --> 00:07:37,680
will use the acin pipe to just just derive the

131
00:07:37,839 --> 00:07:41,600
state sort of from observables that I already have and

132
00:07:41,680 --> 00:07:45,040
put them directly into the template using the acin functions,

133
00:07:45,240 --> 00:07:49,839
no subscribes, And it worked way more elegantly that anything

134
00:07:49,920 --> 00:07:52,519
that I was trying to do before that. And I

135
00:07:52,600 --> 00:07:55,160
always enjoyed RGS, but I was in the camp of

136
00:07:55,240 --> 00:07:58,360
the people that would say, oh, no, you're using too

137
00:07:58,439 --> 00:08:01,600
much rgs, this is over engine and so on. I

138
00:08:01,600 --> 00:08:04,959
always felt like, oh, why did this guy put I

139
00:08:05,000 --> 00:08:07,800
don't know this logic inside and observable. Don't really need

140
00:08:07,839 --> 00:08:10,720
an observable, you just use just use an impertive function.

141
00:08:11,759 --> 00:08:15,759
But after doing it, I kind of got the notion

142
00:08:15,920 --> 00:08:20,759
behind it that I can view my derived data in

143
00:08:20,800 --> 00:08:25,319
the end as a combination of different streams and operators

144
00:08:25,360 --> 00:08:28,279
applied to them to mop and find my finals. Said

145
00:08:28,279 --> 00:08:30,920
that I wouldn't going to display to the end user,

146
00:08:31,360 --> 00:08:34,000
and that was a very elegant thing. So I started

147
00:08:34,080 --> 00:08:38,600
sort of investigating inside my project before starting to read

148
00:08:39,000 --> 00:08:41,480
what other people write about are just because of course,

149
00:08:41,480 --> 00:08:44,799
you can find lots of articles and create literature online

150
00:08:45,159 --> 00:08:48,320
on how our jets may benefit their application. And so

151
00:08:48,720 --> 00:08:52,360
I started investigating my own application pite fund at Oh again,

152
00:08:52,440 --> 00:08:55,240
Oh I find this function. I don't need this function.

153
00:08:55,279 --> 00:08:57,639
I can reach it. I can put it inside single

154
00:08:57,679 --> 00:09:02,360
property that's unobservable and use it operator and so on

155
00:09:02,399 --> 00:09:06,200
and so on. I started sort of writing down pieces

156
00:09:06,200 --> 00:09:11,440
of rules that I will try to follow, and lots

157
00:09:11,480 --> 00:09:14,440
of those rules will actually stupid rules. I was sort

158
00:09:14,440 --> 00:09:16,919
of finding out. I was sort of finding out what

159
00:09:17,000 --> 00:09:18,799
I have to do with trial and their trial and

160
00:09:18,840 --> 00:09:21,799
there and then one day I was like, okay, let's

161
00:09:21,960 --> 00:09:24,559
just try to read about more about RGS. Just opened

162
00:09:24,600 --> 00:09:30,559
documentation that started trying different operators, and my project transformed.

163
00:09:30,679 --> 00:09:32,600
I sort of got way better code than I thought. Yeah,

164
00:09:32,600 --> 00:09:35,080
this is this is this is good. I'm going to

165
00:09:35,080 --> 00:09:38,360
write an article about it. Because every time that I

166
00:09:38,399 --> 00:09:41,720
sort of go from experience with a new library, a

167
00:09:41,759 --> 00:09:46,600
new design pattern, or some a new approach, the best

168
00:09:46,639 --> 00:09:50,200
way for me to finally digest what I learned is

169
00:09:50,240 --> 00:09:54,039
to try to communicate my new knowledge to others. So

170
00:09:54,120 --> 00:09:57,080
when I sort of when I teach, I also learned.

171
00:09:57,679 --> 00:10:02,159
That's two way thing for me. I always read an

172
00:10:02,240 --> 00:10:05,200
article about anything new that I've done, and then it

173
00:10:05,320 --> 00:10:08,200
got rolling. So I got three articles on RGS and Angular.

174
00:10:08,320 --> 00:10:11,679
I got an article on Unexpected Things in RGAS. I

175
00:10:11,679 --> 00:10:14,840
wrote an article on best practices in our yas. I

176
00:10:14,840 --> 00:10:17,440
guess I have six or seven articles on rys.

177
00:10:17,399 --> 00:10:19,159
Speaker 1: Nice and I think I saw some of them on

178
00:10:19,240 --> 00:10:21,639
Angular in Depth. Is that where they're all posted or

179
00:10:22,200 --> 00:10:23,600
just some of I.

180
00:10:23,519 --> 00:10:26,600
Speaker 2: Guess one or two of them have been posted on medium.

181
00:10:26,840 --> 00:10:30,600
Then in Depth moved from moved from medium, they stopped

182
00:10:30,840 --> 00:10:33,799
posting on their blog. There the only posted on the

183
00:10:33,799 --> 00:10:37,759
website and in the in that community. So first I

184
00:10:37,879 --> 00:10:41,519
was hoping that stuff to Medium, but then I also stopped.

185
00:10:41,519 --> 00:10:46,639
I don't actually visit Medium. I opened Medium like a

186
00:10:46,679 --> 00:10:49,600
week ago and was terrified to find out actually one

187
00:10:49,639 --> 00:10:52,600
thousand followers. I didn't know. I didn't know I did

188
00:10:52,639 --> 00:10:57,000
many followers on Medium. You're popular follow and I didn't

189
00:10:57,000 --> 00:10:59,080
know about it because like for four or five months,

190
00:10:59,080 --> 00:11:04,039
I didn't even open stopped reading their photo alter got

191
00:11:04,279 --> 00:11:05,399
involved with the in depth.

192
00:11:05,799 --> 00:11:08,639
Speaker 1: Yeah, I didn't know I was talking to celebrity. Wow,

193
00:11:09,919 --> 00:11:17,039
So there you go. Got to start somewhere, right, Yeah.

194
00:11:17,080 --> 00:11:20,200
So yeah, I just I find this really fascinating and

195
00:11:20,240 --> 00:11:24,120
it's it's interesting too because I was I was working

196
00:11:24,159 --> 00:11:27,440
on an app myself where we were building like a

197
00:11:27,519 --> 00:11:32,840
sign up wizard, and yeah, we kind of put I mean,

198
00:11:32,879 --> 00:11:35,519
we were doing and react, but we were putting a

199
00:11:35,559 --> 00:11:38,799
whole bunch of stuff in you know, basically a higher

200
00:11:38,919 --> 00:11:41,720
order funk or a higher order component, right that had

201
00:11:41,720 --> 00:11:43,840
a whole bunch of components up underneath it so we

202
00:11:43,879 --> 00:11:48,159
could maintain all the state underneath it. And yeah, like

203
00:11:48,360 --> 00:11:51,000
maintaining all of the different events that were going on

204
00:11:51,080 --> 00:11:55,559
in it and reacting to those. It was, yeah, just

205
00:11:55,600 --> 00:11:57,600
doing it kind of the react way, or I was

206
00:11:57,600 --> 00:11:59,080
trying to think of how to do it neither, and

207
00:11:59,320 --> 00:12:01,159
we probably would have approached it much the same way,

208
00:12:01,159 --> 00:12:04,639
and you know, done things the angular way. I realized that, yeah,

209
00:12:04,679 --> 00:12:06,639
there were a lot of events that we would have

210
00:12:06,679 --> 00:12:10,480
been emitting that yeah, something like our xgs. I didn't

211
00:12:10,480 --> 00:12:12,600
even think about it, And I'm just going I feel

212
00:12:12,679 --> 00:12:15,279
kind of silly now because yeah, it would have been

213
00:12:15,440 --> 00:12:18,440
so much easier to just approach it with our XGS

214
00:12:18,440 --> 00:12:21,120
and just say, okay, if any of these things happen

215
00:12:21,480 --> 00:12:24,320
right then amid an event, and if any of these

216
00:12:24,320 --> 00:12:27,120
things happened amid an event, and then yeah, if we

217
00:12:27,159 --> 00:12:29,679
come back around any of this stuff, then you know

218
00:12:30,039 --> 00:12:31,759
or subscribe to those events and we just know what

219
00:12:31,799 --> 00:12:32,080
to do.

220
00:12:32,320 --> 00:12:35,799
Speaker 2: So yeah, the same sort of revelation I went through

221
00:12:35,840 --> 00:12:39,480
when I would find to reflector alls of stuff. Nowadays,

222
00:12:39,519 --> 00:12:43,039
when I start anything new and the team I'm working

223
00:12:43,120 --> 00:12:47,600
in as sort of receive new projects all along from

224
00:12:47,639 --> 00:12:51,000
the client, so U we'll just received something that'll probably

225
00:12:51,159 --> 00:12:54,080
have to wat from scratch using stuff that you already have.

226
00:12:55,360 --> 00:12:57,600
So the next thing we got I was like, yeah,

227
00:12:57,600 --> 00:13:00,759
but we're going to vangel X. We're going to we're

228
00:13:00,840 --> 00:13:04,480
going to use ARGs a lot. My next stop is

229
00:13:04,559 --> 00:13:08,559
trying to reflector and move away from using internal states

230
00:13:08,600 --> 00:13:11,840
at all. Like I'm going to use the ANJX component

231
00:13:11,919 --> 00:13:16,960
store for all the internal interactions and use ang x

232
00:13:17,000 --> 00:13:21,200
for everything community between the components. It's more sort of

233
00:13:21,240 --> 00:13:23,600
an experiment. I'm not sure that that's a good idea.

234
00:13:23,679 --> 00:13:26,679
I will, I will try to do it, and I

235
00:13:26,720 --> 00:13:29,919
guess it might be a good idea because but I can.

236
00:13:30,080 --> 00:13:33,360
I can now ditch normal change detection. I can use

237
00:13:33,399 --> 00:13:36,799
on pushing all the components. Because I'm only having observables

238
00:13:36,799 --> 00:13:40,200
an acing pipe, I don't have to use normal change detection.

239
00:13:40,279 --> 00:13:43,919
I can default to on push. That's a nice thing

240
00:13:44,080 --> 00:13:48,159
to have. And also I will sort of that will

241
00:13:48,159 --> 00:13:50,080
solve the problem that if you're like, oh am I

242
00:13:50,120 --> 00:13:53,440
going to create an observable byhand for everything, No, you

243
00:13:53,480 --> 00:13:57,080
can just you know, use the store class and start

244
00:13:57,120 --> 00:13:59,799
from it right store ter selectors put them in the

245
00:13:59,799 --> 00:14:03,120
components so it can be it can exist in parallel

246
00:14:03,120 --> 00:14:05,759
with your component, and you will see all the transformations

247
00:14:05,799 --> 00:14:08,159
of the store with the updata functions and so on,

248
00:14:08,360 --> 00:14:10,399
just putting their use this in PIPEM and so on

249
00:14:10,440 --> 00:14:13,159
and so on, and I think that might be nice.

250
00:14:13,200 --> 00:14:16,679
So I'm sort of going to write a proof of

251
00:14:16,720 --> 00:14:18,879
concept or something like it. Can we can we ditch

252
00:14:19,879 --> 00:14:23,840
local internal class based states and just use or jest.

253
00:14:24,320 --> 00:14:27,639
Speaker 1: Yeah, yeah, I'm kind of curious to see how that

254
00:14:27,639 --> 00:14:30,320
would work out. To be perfectly honest, I haven't done

255
00:14:30,320 --> 00:14:34,200
a whole lot with r xs or EDGRX, so yeah,

256
00:14:34,320 --> 00:14:36,000
it'll be interesting to see how it all comes together.

257
00:14:36,519 --> 00:14:40,039
So what what is kind of the biggest thing or

258
00:14:40,039 --> 00:14:43,919
the biggest problem you found r X chess songs within

259
00:14:44,000 --> 00:14:45,080
your your app.

260
00:14:45,399 --> 00:14:50,240
Speaker 2: Oh well, well all starts again. The biggest sort of

261
00:14:50,679 --> 00:14:56,080
benefit that you get from it is removing imparative logic

262
00:14:56,279 --> 00:15:04,519
number one benefit and not having to synchronize two different states.

263
00:15:04,840 --> 00:15:08,480
So my biggest problem always was that I have sort

264
00:15:08,519 --> 00:15:11,279
of these two pieces of data that are interconnected. But

265
00:15:11,720 --> 00:15:14,240
it's not that like one is derived from the other

266
00:15:14,360 --> 00:15:17,080
or something, but more like the change in this one

267
00:15:17,120 --> 00:15:18,919
can trigger a change in this one in a way

268
00:15:19,240 --> 00:15:21,960
if there is some condition or something something, and that

269
00:15:22,120 --> 00:15:26,759
is really like obviously apparent in large applications like enterprise

270
00:15:26,840 --> 00:15:31,480
aps when you have different configurations, personal user settings that

271
00:15:31,600 --> 00:15:36,120
can affect the UI and customized things and so on

272
00:15:36,200 --> 00:15:38,799
and so on and so on. And when you switch

273
00:15:38,879 --> 00:15:44,399
to RCJZ, you sort of, even unwillingly, you have this

274
00:15:44,720 --> 00:15:47,399
single source of truth, so you don't have to check

275
00:15:47,480 --> 00:15:51,320
three or four places to see how your state is transformed.

276
00:15:51,639 --> 00:15:55,519
If there is sort of you have this small dependency

277
00:15:55,600 --> 00:15:58,759
like you have an engine model binding, or you have

278
00:15:59,120 --> 00:16:01,799
a component and you passing an input and you use

279
00:16:01,840 --> 00:16:04,799
the acing pipes, or apparently this is an observable. If

280
00:16:04,840 --> 00:16:07,919
you go to that observable, you immediately know what can

281
00:16:07,960 --> 00:16:10,720
happen to it. You see, this is the observable. Oh,

282
00:16:10,799 --> 00:16:14,399
this is the stream. This begins here, these operators are

283
00:16:14,480 --> 00:16:17,440
used on it, so and that's the end. So you

284
00:16:17,440 --> 00:16:19,799
don't have to look anywhere because it's an observable. No

285
00:16:19,840 --> 00:16:22,000
one can modify it from somewhere else. This is what

286
00:16:22,039 --> 00:16:24,320
you have. This is always what you have. If there's

287
00:16:24,360 --> 00:16:26,679
a problem, it's in these five lines of code or

288
00:16:27,279 --> 00:16:30,320
anything you have written. So if you really use that,

289
00:16:30,399 --> 00:16:34,000
well it's easy to read, it's easy to find stuff

290
00:16:34,440 --> 00:16:37,919
in your code. You don't get sort of oh, h okay,

291
00:16:38,000 --> 00:16:40,879
I have this array. Let's let's just control app see

292
00:16:41,120 --> 00:16:45,720
whoever has updated, or let's right click and file references

293
00:16:45,759 --> 00:16:47,559
and stuff like. You know you don't have. This is

294
00:16:47,559 --> 00:16:50,759
apparently everything you have. And that's a it's a big

295
00:16:50,799 --> 00:16:56,519
thing because then you will always have bugs. And obviously

296
00:16:56,879 --> 00:16:59,799
most of your work then would be try to find

297
00:17:00,679 --> 00:17:03,200
where the bug is coming from, because usually when we

298
00:17:03,360 --> 00:17:06,680
find in like eighty percent of cases, if we find

299
00:17:06,720 --> 00:17:09,960
where the bug is sort of located, we usually easily

300
00:17:10,000 --> 00:17:12,799
fix that, right, So finding is sometimes as a problem

301
00:17:13,279 --> 00:17:15,920
understanding exactlyly piece of code effect. So if we have

302
00:17:16,000 --> 00:17:19,440
only one piece of code that is affecting anything, so

303
00:17:19,480 --> 00:17:22,440
it's very easy. Okay, I have five operators, one of

304
00:17:22,480 --> 00:17:25,680
them is doing something wrong. Let's find out what is

305
00:17:25,759 --> 00:17:28,680
in the five lines of code. That for me is

306
00:17:28,680 --> 00:17:31,799
the biggest benefit because in imperative logic you always have

307
00:17:31,880 --> 00:17:35,079
to sort of dive into ti times say oh, why

308
00:17:35,279 --> 00:17:37,720
do we have a loop here? Oh this is all Okay,

309
00:17:38,599 --> 00:17:41,960
this is array, push something into ray, get something from array,

310
00:17:42,000 --> 00:17:45,759
and sort of go going gone, And that can become overwhelming,

311
00:17:45,839 --> 00:17:47,599
especially if the logic is large.

312
00:17:48,160 --> 00:17:51,160
Speaker 1: Yeah that makes sense, I mean, yeah, you subscribe to

313
00:17:51,160 --> 00:17:54,839
a stream and then yeah, everything that happens downstream from that, Yeah,

314
00:17:54,960 --> 00:17:59,079
nobody's modifying the array. It emits another stream or another

315
00:17:59,200 --> 00:18:03,400
array effectively, and so it's easy to follow. I guess

316
00:18:03,400 --> 00:18:05,640
the other question that I have, just kind of talking

317
00:18:05,680 --> 00:18:09,319
through your story here and talking through the you know,

318
00:18:09,359 --> 00:18:11,599
the situation where you, you know, you move kind of

319
00:18:11,720 --> 00:18:17,039
outside of the internal state management with angular and into observables,

320
00:18:17,279 --> 00:18:19,960
was at what point do you feel like that makes sense?

321
00:18:19,960 --> 00:18:21,759
I mean, should you just do that from the get

322
00:18:21,759 --> 00:18:24,880
go or do you wait till your app gets to

323
00:18:24,880 --> 00:18:30,039
a certain complexity before you start using RxJS as as

324
00:18:30,119 --> 00:18:31,799
this kind of Yeah.

325
00:18:31,640 --> 00:18:34,920
Speaker 2: That's actually a very good question because for a lots

326
00:18:34,920 --> 00:18:40,680
of people usually that exact question is the sort of

327
00:18:40,880 --> 00:18:45,599
obstacle that usually either don't have enough time to think

328
00:18:45,640 --> 00:18:50,119
about it, or just don't want to recolector too much,

329
00:18:51,000 --> 00:18:56,319
or don't want to sort of overengineer like people have said, Oh,

330
00:18:56,599 --> 00:18:59,240
maybe I'm blowing these out of proportions and I don't

331
00:18:59,279 --> 00:19:01,640
need these whole lot of stuff, may be even doing

332
00:19:01,799 --> 00:19:03,039
just a regular way.

333
00:19:04,039 --> 00:19:07,000
Speaker 1: Yeah, my answer to that is usually try it and

334
00:19:07,039 --> 00:19:09,119
then you know, right, yes, sort.

335
00:19:08,960 --> 00:19:11,079
Speaker 2: Of yeah, But of course, obviously in the real world,

336
00:19:11,160 --> 00:19:13,519
lots of people that won't have enough time to do that.

337
00:19:13,640 --> 00:19:16,079
Like this project, you have this deadline, you have to

338
00:19:16,119 --> 00:19:18,400
do something, and you're not sure. Maybe if I try

339
00:19:18,440 --> 00:19:20,240
to do this, this is something you maybe we won't

340
00:19:20,279 --> 00:19:22,559
have time. And of course some people say, oh, my

341
00:19:22,599 --> 00:19:25,839
application is small, I don't need something like that. I

342
00:19:25,920 --> 00:19:29,079
was saying that in the context of angio X, but

343
00:19:29,400 --> 00:19:32,519
I said something on Twitter like six months ago or

344
00:19:32,680 --> 00:19:36,440
something that lots of people sort of agreed with. It

345
00:19:36,960 --> 00:19:40,720
went like this, if you have an application that is

346
00:19:40,799 --> 00:19:44,519
large enough that you write it in Angular, then you

347
00:19:44,559 --> 00:19:46,480
have an application that is large enough that you can

348
00:19:46,559 --> 00:19:50,319
use angio x. The same for me applies to ourggs.

349
00:19:50,400 --> 00:19:54,599
It may sound a bit radical, like maybe not some

350
00:19:54,640 --> 00:19:57,640
people say this small thing, or if if it's so small,

351
00:19:57,640 --> 00:20:00,480
if you say it's sort of a two pages, why

352
00:20:00,480 --> 00:20:03,720
do you need this behmit of a framework that Angular

353
00:20:03,880 --> 00:20:06,000
is like, it's big, it has lots of things, there's

354
00:20:06,039 --> 00:20:09,319
lots of feature you can write it in something easier

355
00:20:09,839 --> 00:20:11,799
if you. Of course, obviously, if the angler is the

356
00:20:11,839 --> 00:20:14,480
only thing that you know, that's of course normal. That's

357
00:20:14,480 --> 00:20:17,920
also a situation that happens in real life. But in

358
00:20:18,000 --> 00:20:22,039
most cases, usually people would know some technology they're writting

359
00:20:22,160 --> 00:20:24,920
some really small but if you're acting something really big

360
00:20:25,880 --> 00:20:28,480
that you already opted to use Angular because it has

361
00:20:28,640 --> 00:20:32,960
lots of feature because people usually like Angular for all

362
00:20:33,079 --> 00:20:36,200
the out of the box stuff that it provides. Angular

363
00:20:36,279 --> 00:20:40,559
developers that use sometimes use React. Most of the confusion

364
00:20:40,599 --> 00:20:43,200
that I can, oh, how I did stop this? We

365
00:20:43,319 --> 00:20:45,759
usually in Angular we have these this, and I have

366
00:20:45,839 --> 00:20:48,359
to now go on find for the party libraries to

367
00:20:48,400 --> 00:20:51,240
do something, maybe write something from scratch to do that.

368
00:20:51,400 --> 00:20:56,319
In React, that's what they usually find not good in

369
00:20:56,480 --> 00:20:59,359
other frameworks, especially React, because React there is more like

370
00:20:59,440 --> 00:21:01,960
sort of shell, and that's a good thing in its

371
00:21:01,960 --> 00:21:05,400
own way. I personally enjoy Reacts. But the thing that

372
00:21:05,440 --> 00:21:08,640
I like Angular moid is that it's more opinionated and

373
00:21:08,720 --> 00:21:11,039
it has more features, so you can use this and

374
00:21:11,079 --> 00:21:13,160
this and this. You don't have to think about HP

375
00:21:13,319 --> 00:21:16,720
requests that you covered. You don't have to think about forms,

376
00:21:16,759 --> 00:21:19,880
and for me, Angular forms is the best thing Angular has.

377
00:21:19,680 --> 00:21:23,039
It's flawed, but for me, it's really the best like

378
00:21:23,759 --> 00:21:27,960
form related library out there. It's it's very good everything

379
00:21:28,000 --> 00:21:31,799
you need, so of course you opt in for Angular

380
00:21:31,880 --> 00:21:34,240
for all those features. So obviously if you need lots

381
00:21:34,279 --> 00:21:37,640
of features, and you have a larger enough applications, so

382
00:21:38,000 --> 00:21:42,240
why not use ANGI X for interconnected pieces at least

383
00:21:42,720 --> 00:21:46,079
you don't even need to use any write everything in ANGLICS.

384
00:21:46,680 --> 00:21:49,960
There is some debate to it, but obviously the stuff

385
00:21:50,000 --> 00:21:53,200
that is interconnected, the stuff that they shared stay between components,

386
00:21:53,400 --> 00:21:55,640
and grex is just solve all of that for that

387
00:21:55,880 --> 00:21:58,559
for you, right, so it makes sense to do that.

388
00:21:58,720 --> 00:22:02,240
The same goes for for RGS. Ang ICs is basically

389
00:22:02,720 --> 00:22:08,119
like RGS but stronger. If you can use RGS solve

390
00:22:08,599 --> 00:22:11,799
some problems, it would be good, and the sooner you started,

391
00:22:12,359 --> 00:22:14,920
the less problematic it would be to use that code,

392
00:22:14,920 --> 00:22:18,839
because refectoring is always harder than writing code from scratch. Obviously,

393
00:22:19,799 --> 00:22:24,000
you usually face more bugs if you refractory, because sometimes

394
00:22:24,079 --> 00:22:27,759
you might look at code that you yourself even have written,

395
00:22:27,839 --> 00:22:31,799
but you would misunderstand something there, and refractoring into RGS

396
00:22:31,799 --> 00:22:35,000
it will lose some use case or something. So of course,

397
00:22:35,039 --> 00:22:38,480
starting earlier, my advice would be, if you're beginning an

398
00:22:38,480 --> 00:22:41,920
angular application, at least consider using more RHES or maybe

399
00:22:42,000 --> 00:22:45,599
using a X. If you're going into it, at least consider.

400
00:22:45,279 --> 00:22:48,960
Speaker 1: It right now. That makes sense. It's it's kind of

401
00:22:49,039 --> 00:22:51,279
interesting though that you started out with if your app

402
00:22:51,319 --> 00:22:53,200
is big enough for Angular, then it's big enough to

403
00:22:53,799 --> 00:22:57,200
use RXS, Because I mean, I that is true, you know,

404
00:22:57,279 --> 00:22:58,920
and I thought, okay, well, the would you use for

405
00:22:58,960 --> 00:23:01,559
the smaller apps? And you know, if you things come

406
00:23:01,599 --> 00:23:06,319
to mind, like you know, use HTML and CSS obviously,

407
00:23:06,440 --> 00:23:08,359
but then you know, you pull in like a jQuery

408
00:23:08,440 --> 00:23:10,319
or a stimulus or something like that that just kind

409
00:23:10,319 --> 00:23:12,599
of puts stuff over the top of it, that just

410
00:23:12,680 --> 00:23:15,640
kind of gets you the functionality that you need. That's

411
00:23:15,759 --> 00:23:18,119
that's really really simple. Yeah, you're pulling in Angular when

412
00:23:18,160 --> 00:23:21,039
you need something that's a little more that has more

413
00:23:21,079 --> 00:23:24,839
depth to the experience you're creating. Yeah, that makes a

414
00:23:24,839 --> 00:23:28,160
ton of sense. So what I guess the other thing

415
00:23:28,200 --> 00:23:30,599
that I'm wondering about is, you know, now that you've

416
00:23:30,759 --> 00:23:33,720
kind of gone into the deep end with r XJS,

417
00:23:34,400 --> 00:23:36,839
what do you find are the things that people misunderstand

418
00:23:36,880 --> 00:23:40,160
about it? Like where where do people get stuck on

419
00:23:40,480 --> 00:23:43,440
RXS being a solution or get stuck on what it

420
00:23:43,480 --> 00:23:44,200
can and can't do?

421
00:23:44,680 --> 00:23:49,720
Speaker 2: Well. I had experience with lots of developers that tried rgs,

422
00:23:49,759 --> 00:23:52,880
both in our team and outside, so I noticed that

423
00:23:52,920 --> 00:23:57,519
there are many free problems with rs the people sort

424
00:23:57,519 --> 00:24:02,079
of not right the best code that they could do,

425
00:24:03,000 --> 00:24:07,720
and all of them are connected to how they use RGS.

426
00:24:07,839 --> 00:24:12,279
So they either not use it enough, misuse it, or

427
00:24:13,480 --> 00:24:20,119
plainly abusing it. Okay, So I tried to cover all

428
00:24:20,119 --> 00:24:22,559
the three cases. So obviously first case not using it enough,

429
00:24:22,559 --> 00:24:25,200
because there's a problem you can miss all the r egs.

430
00:24:25,400 --> 00:24:30,880
People won't try to apply reactive logic to it. For that,

431
00:24:31,000 --> 00:24:33,720
I've written my very first article and it's called the

432
00:24:33,960 --> 00:24:37,559
RGS in Angular. It was the first one the three parts,

433
00:24:37,680 --> 00:24:41,640
and in part one I wrote about how you can

434
00:24:42,000 --> 00:24:47,720
change your imperative logic to more reactive or functional programming

435
00:24:47,759 --> 00:24:52,279
style to a more declarative approach. Okay. So it involved

436
00:24:52,440 --> 00:24:55,359
trying to understand the source of data, trying to understand

437
00:24:55,359 --> 00:24:58,440
what effects the data and how it gets transformed, and

438
00:24:58,480 --> 00:25:02,519
then getting the final result the result and displaying it

439
00:25:02,599 --> 00:25:07,559
to in the template in the UI. So those were

440
00:25:07,599 --> 00:25:09,720
the steps that you can sort of try to apply

441
00:25:09,799 --> 00:25:12,480
to any problem. Like if you've got I'm going to

442
00:25:12,519 --> 00:25:14,599
develop this feature, I can try to use the steps

443
00:25:14,640 --> 00:25:17,359
to understand how can I convert it? Right? Using r JET,

444
00:25:17,400 --> 00:25:19,720
you can sort of always try to do that. So

445
00:25:20,200 --> 00:25:22,440
even if you don't convert something something it's large enough,

446
00:25:22,480 --> 00:25:24,279
you have three factor you don't have time, you still

447
00:25:24,359 --> 00:25:26,880
can like sort of process in your head. If it

448
00:25:26,960 --> 00:25:29,400
won't think really much. You can try to think about

449
00:25:29,599 --> 00:25:34,640
ten minutes. If you sort of understand instantly how the

450
00:25:34,680 --> 00:25:36,839
flow of the data is, now okay, you can go

451
00:25:36,920 --> 00:25:39,599
forward and just try to right or jets. People often

452
00:25:39,640 --> 00:25:42,599
don't do that. I know people that know urges ats well,

453
00:25:42,599 --> 00:25:45,640
they know lots of operators, how they work, some new ones,

454
00:25:46,160 --> 00:25:48,200
but they just won't use them. It's like, yeah, okay,

455
00:25:48,200 --> 00:25:50,279
I wrote five lines of what it works. Yeah, I

456
00:25:50,319 --> 00:25:52,559
don't think the rjets for this, but really it would

457
00:25:52,599 --> 00:25:55,839
look more elegant and more scalable if they did there jets,

458
00:25:55,880 --> 00:25:58,279
even even for the five lines of So that's the

459
00:25:58,279 --> 00:26:01,039
first problem, not using it enough, not sort of getting

460
00:26:01,160 --> 00:26:04,759
into it and trying it to apply to all at

461
00:26:04,799 --> 00:26:06,960
least mentally apply to all the problems that they try

462
00:26:07,000 --> 00:26:09,799
to solve. So there's that point one, and then it

463
00:26:09,799 --> 00:26:12,920
comes point to sort of misusing our ages. So how

464
00:26:12,960 --> 00:26:15,920
people do misuse urages is usually what they do in

465
00:26:15,920 --> 00:26:18,119
the first step. So a lot of some people will

466
00:26:18,359 --> 00:26:21,160
come and think, Okay, I'm not using urage jes now

467
00:26:21,440 --> 00:26:24,039
I want to use it more. That's a really good start,

468
00:26:24,079 --> 00:26:25,960
but obviously they are going to make mistakes on the

469
00:26:26,000 --> 00:26:29,519
way as all of us is done. So what would

470
00:26:29,559 --> 00:26:34,240
they do is they will sort of start using observables

471
00:26:34,640 --> 00:26:39,319
and not really appreciating all the all the upsides that

472
00:26:39,359 --> 00:26:42,759
they provide, like subscribing a lot. You don't really need

473
00:26:42,799 --> 00:26:45,640
to subscribe an observable like explicitly you can use the

474
00:26:45,640 --> 00:26:48,319
ass pipe. So that's the first three people just teach it.

475
00:26:48,359 --> 00:26:52,119
They will write subscribe and a call back with lots

476
00:26:52,160 --> 00:26:56,240
of imperative logic. Then they will use they will use

477
00:26:56,279 --> 00:27:00,240
features of the language instead of using operators. Like one

478
00:27:00,279 --> 00:27:03,720
of my articles about best practices i I was sort

479
00:27:03,759 --> 00:27:07,960
of talking about how it can change how your subscribe logic.

480
00:27:08,319 --> 00:27:11,480
It looks like the sort of if you for example,

481
00:27:11,599 --> 00:27:14,920
an if state, so you're read subscribe, you get some data,

482
00:27:15,000 --> 00:27:19,079
then you read if data is true something something, then

483
00:27:19,160 --> 00:27:21,960
do something something in our gest you can use the

484
00:27:21,960 --> 00:27:25,119
filter operators for that. You can just read filter and

485
00:27:25,880 --> 00:27:28,880
suppres function would be cold at all, okay, right, will

486
00:27:29,400 --> 00:27:34,640
and if will look way more sort of concise, like

487
00:27:34,759 --> 00:27:37,160
we'll look if you see the filter. Okay, there are

488
00:27:37,160 --> 00:27:39,759
some conditions that are not allowed. Okay, you see that

489
00:27:39,839 --> 00:27:42,759
immediately in subscribe may have a large function inside, and

490
00:27:42,839 --> 00:27:46,519
if you have to go through and read these subscribe functions,

491
00:27:46,519 --> 00:27:49,119
you really don't need that red filter. And the condition

492
00:27:49,279 --> 00:27:52,559
is obviously after that you don't perform anything. And that

493
00:27:52,720 --> 00:27:56,279
is also sort of better a bat minor bit. But

494
00:27:56,599 --> 00:27:59,079
you know, if you're more or less perfection is it

495
00:27:59,119 --> 00:28:01,319
would be great. So you don't need to execute five

496
00:28:01,400 --> 00:28:04,799
operators and then don't do nothing in the subscribe because

497
00:28:04,799 --> 00:28:07,000
the condition is not met. You can put filter wherever

498
00:28:07,119 --> 00:28:09,359
the TATA is ready that you can check and not

499
00:28:09,400 --> 00:28:12,039
allow all the other operators to work. But there's also

500
00:28:12,039 --> 00:28:15,400
a nice thing to do, or people would not know

501
00:28:15,839 --> 00:28:18,799
enough operators. Obviously, you can know all of the operators

502
00:28:18,839 --> 00:28:21,440
too much and you don't really need most of them.

503
00:28:21,759 --> 00:28:23,839
But I guess one good thing you can do is

504
00:28:24,000 --> 00:28:26,160
one day when you have two all three spare hours,

505
00:28:26,200 --> 00:28:30,480
you can open our HGS documentation website and just scroll

506
00:28:30,519 --> 00:28:34,599
for operators and find stuff that is interesting. There are

507
00:28:34,640 --> 00:28:37,279
also there are operators that come in sort of families,

508
00:28:37,759 --> 00:28:42,640
like throt frotal times, Window the bounced time, the bounce

509
00:28:42,880 --> 00:28:45,440
and so on it so you can sort of know

510
00:28:45,599 --> 00:28:48,160
about them. You don't need to write examples all of them.

511
00:28:48,319 --> 00:28:50,200
Just know that there is an operator that does the

512
00:28:50,279 --> 00:28:54,039
bounce something, so in the future we'll remember that. Okay,

513
00:28:54,079 --> 00:28:57,720
I've heard about some operator that might have used of

514
00:28:58,039 --> 00:29:00,319
use in this case and go use it. Lots of

515
00:29:00,359 --> 00:29:02,960
times people don't do that, So that's an example of

516
00:29:03,400 --> 00:29:06,279
sort of misusing garages like you are using garage jazz,

517
00:29:07,000 --> 00:29:10,359
and it actually provides a very nice solution to your

518
00:29:10,400 --> 00:29:13,559
problem with one operator to a combination of two custom

519
00:29:14,359 --> 00:29:18,000
sorry building operators, but you don't know about them, or

520
00:29:18,119 --> 00:29:21,839
you don't sort of think too deeply enough about that

521
00:29:22,039 --> 00:29:24,039
particular observable, so you don't use it and you end

522
00:29:24,160 --> 00:29:28,000
up with worse code. So that's the sort of next

523
00:29:28,720 --> 00:29:34,519
bad problem with our jazz in that case. So people

524
00:29:34,720 --> 00:29:37,119
use it but don't sort of get deep enough to

525
00:29:37,599 --> 00:29:43,359
really harness all the benefits that it provides. Okay, Yeah,

526
00:29:43,400 --> 00:29:45,480
and then we of course arrive at the third point,

527
00:29:45,480 --> 00:29:50,880
that is just using I have seen pretty horrible code

528
00:29:50,960 --> 00:29:53,920
that to this day I don't understand why people opted

529
00:29:54,039 --> 00:29:57,279
to do that, because what would they do is sort

530
00:29:57,279 --> 00:30:02,400
of everything was unobservable, but in a sort of scattered way.

531
00:30:02,880 --> 00:30:06,119
So the one of properties fortune that will have an event.

532
00:30:07,000 --> 00:30:10,079
I don't exactly exactly remember how that logic went. There's

533
00:30:10,160 --> 00:30:14,200
this chat window. It looked like Facebook Messenger, sort of

534
00:30:14,359 --> 00:30:17,000
right in the pence. You have conversations on the left

535
00:30:17,079 --> 00:30:19,720
and you have the nique chat window in the middle.

536
00:30:19,799 --> 00:30:23,200
So the thing is you click on the conversation, there

537
00:30:23,240 --> 00:30:26,400
is an HTP request, It loads the last twenty or

538
00:30:26,440 --> 00:30:29,640
something messages and it displays. So of course you can

539
00:30:29,920 --> 00:30:32,799
do it, say we didn't. We haven't been using any

540
00:30:32,960 --> 00:30:36,400
state management back then with USA Gelics or something, so

541
00:30:36,480 --> 00:30:39,960
you could do it in a more or less practical

542
00:30:39,960 --> 00:30:43,839
way without our Yes, okay, you could just click handler

543
00:30:43,920 --> 00:30:47,000
that will call a service low data passive with inputs

544
00:30:47,000 --> 00:30:50,359
to another component and it render or something. But what

545
00:30:50,440 --> 00:30:52,559
they really did was like, oh, we want to be

546
00:30:52,680 --> 00:30:56,240
reactive in a way. So instead of sort of manificus

547
00:30:56,599 --> 00:31:01,000
understanding how their data works, creating obdurables in almost as combining,

548
00:31:01,000 --> 00:31:02,720
then they would just be like, okay, the here is

549
00:31:02,759 --> 00:31:06,920
a subject that notifies me about the click on the butt. Essentially,

550
00:31:06,960 --> 00:31:09,880
what that subject was doing was just it would emit

551
00:31:09,880 --> 00:31:12,759
from the button, and it was really useless and it

552
00:31:12,880 --> 00:31:17,400
made code very unreadable because now you cannot even navigate

553
00:31:17,519 --> 00:31:21,400
using the ID tooling to find out, oh, well, okay,

554
00:31:21,480 --> 00:31:26,759
this dysfunction. Next this subject who has subscribed to it.

555
00:31:27,039 --> 00:31:30,440
And then in some service somewhere far away, there is

556
00:31:30,480 --> 00:31:34,680
someone subscribed to it and it gets it, bloads some data,

557
00:31:34,799 --> 00:31:37,119
and then passity to another subject. So you have to

558
00:31:37,240 --> 00:31:43,039
sort of go through all these have events to find out, well, okay,

559
00:31:43,079 --> 00:31:45,559
here is a service. Okay, find the data is lowly.

560
00:31:45,599 --> 00:31:49,599
Oh oh my god, here's another observable, another subject. Now

561
00:31:49,759 --> 00:31:52,960
this subject is passed to another service that is injected

562
00:31:53,000 --> 00:31:55,400
in the other component that needs it right, and then

563
00:31:55,440 --> 00:31:58,880
the other components subscribes to this. It's sort of a big,

564
00:31:58,960 --> 00:32:03,640
large and unncestry chain. Subjects that are calling each other

565
00:32:03,960 --> 00:32:09,000
syndic events. Really didn't need that that was like normal.

566
00:32:09,599 --> 00:32:12,559
It really was an abuse. I cannot find that sort

567
00:32:12,559 --> 00:32:14,759
of that I can describe it with. Of course, it

568
00:32:14,799 --> 00:32:19,160
came from notion that people would overleak enthusiastic about or

569
00:32:19,160 --> 00:32:21,480
it's just oh okay, we're going to sort of that's

570
00:32:21,480 --> 00:32:25,920
why you need solutions like in JRX. The mood thing

571
00:32:25,920 --> 00:32:28,119
about nanjrs is like, okay, if you need some data

572
00:32:28,119 --> 00:32:30,359
to selected from the store, you don't have to work

573
00:32:30,400 --> 00:32:35,119
with fifteen observables. There is one source of truth all

574
00:32:35,200 --> 00:32:38,240
of your status incidty. You can use the reducer function

575
00:32:38,319 --> 00:32:41,039
to reason about it, so you don't have a problem.

576
00:32:41,079 --> 00:32:44,519
You can always follow the logic. If okay, beata is

577
00:32:44,519 --> 00:32:47,920
not transformed in a way that you expected, Okay, I

578
00:32:47,920 --> 00:32:50,759
will go debug the reducer function and that's it. Or

579
00:32:50,799 --> 00:32:54,359
I will use the redax dev tools extension and just

580
00:32:54,359 --> 00:32:58,039
find out, okay, after this action something changed, Okay, I

581
00:32:58,039 --> 00:33:00,160
will just check the function that's a pure function, can

582
00:33:00,160 --> 00:33:03,440
easily reason about it or not. But in this case

583
00:33:03,599 --> 00:33:09,119
you've got the like horrible mess that it's finally, it's

584
00:33:09,160 --> 00:33:12,240
abuse of the thing. So that's the main problem that

585
00:33:12,359 --> 00:33:16,680
people face when I start doing garage yeats. Usually that's

586
00:33:16,680 --> 00:33:20,880
why they either not think deeply about it, either think

587
00:33:21,000 --> 00:33:24,680
too deeply about it, and in the end they would

588
00:33:24,680 --> 00:33:27,359
probably get disappointed. They would think, oh, this didn't suit

589
00:33:27,400 --> 00:33:29,200
me well, But the problem is they didn't use it

590
00:33:29,240 --> 00:33:30,519
in a way that was intended.

591
00:33:30,920 --> 00:33:32,880
Speaker 1: Right, that makes sense. I could see myself doing the

592
00:33:32,960 --> 00:33:36,559
last one just trying to separate concerns and then yeah,

593
00:33:36,880 --> 00:33:43,880
having stuff all over the place, so yeah, to subscribe

594
00:33:43,880 --> 00:33:46,480
to this, and then yeah, just do the process, just

595
00:33:46,480 --> 00:33:46,960
do the work.

596
00:33:47,480 --> 00:33:52,480
Speaker 2: That's why actually in the or community, don't subscribe, just

597
00:33:52,519 --> 00:33:57,599
don't supribe, subscribe and and like the nice things about

598
00:33:57,920 --> 00:34:01,519
I actually worked on a document for the rig documentation

599
00:34:02,400 --> 00:34:04,279
that they wanted to have a best practice page. There

600
00:34:04,319 --> 00:34:07,319
was an open issue, submitted a draft pour because it

601
00:34:07,359 --> 00:34:11,000
is in the process of work, and different community members

602
00:34:11,000 --> 00:34:13,239
and contributors wrote in the comments what would they like

603
00:34:13,280 --> 00:34:16,039
to have in the drafts that I wrote sort of

604
00:34:16,920 --> 00:34:21,000
And one of the main things that was noticed this,

605
00:34:21,519 --> 00:34:26,760
let's inform people that use RHS about the fact that

606
00:34:27,000 --> 00:34:31,559
subscribed and composibility. And composibility is actually why we use

607
00:34:31,559 --> 00:34:34,320
that it. When you write subscribe, you cannot use any operators, right,

608
00:34:34,679 --> 00:34:37,480
it's over. You have the data to do anything with it.

609
00:34:37,480 --> 00:34:41,000
It's usually in perative logic, so when you subscribe, it's

610
00:34:41,119 --> 00:34:44,800
end the story. So obviously you need to subscribe. Observes

611
00:34:44,840 --> 00:34:47,199
that they don't subscribe to don't do anything, but you

612
00:34:47,239 --> 00:34:49,519
don't need to do it explicitly and do all that

613
00:34:49,679 --> 00:34:53,400
heavy listening inside it. In Angular, we have the acent pipe,

614
00:34:53,440 --> 00:34:57,920
and also with JRX ifuse. There is this Experimental Injuries

615
00:34:57,960 --> 00:35:01,639
component that provides directives that can use. There's the nguritic

616
00:35:01,800 --> 00:35:04,079
less directive. It's very nice thing. You can just extract

617
00:35:04,480 --> 00:35:08,719
the observable result to a variable local variable template and

618
00:35:08,880 --> 00:35:14,639
use it. It's better than writing ngief as something to use

619
00:35:14,679 --> 00:35:17,559
it without the acting right. It's a very nice thing.

620
00:35:17,599 --> 00:35:20,199
I use it in my project a lot. So you

621
00:35:20,280 --> 00:35:23,239
really don't subscribe menus the proof. After that, you just

622
00:35:23,679 --> 00:35:26,280
use the value. Okay, you need to value in the template.

623
00:35:26,599 --> 00:35:29,320
If you're writing angular, you don't need the state for

624
00:35:29,400 --> 00:35:31,119
the sake of the state. You mean something to deplay

625
00:35:31,159 --> 00:35:33,239
in the UI. If something is never displayed in the UI,

626
00:35:33,320 --> 00:35:37,639
you probably don't need that either display that exact state

627
00:35:38,039 --> 00:35:41,000
in the UI or some result of that state, something

628
00:35:41,079 --> 00:35:43,880
that happens because you have a state like this so

629
00:35:44,199 --> 00:35:47,360
rapidly and observable, take it, use the acting pipe and

630
00:35:47,519 --> 00:35:50,800
it's over. There is only one case that is I

631
00:35:51,360 --> 00:35:55,039
sort of allow people to subscribe in our projects, and

632
00:35:55,119 --> 00:35:57,800
we do code review. We always try to follow the

633
00:35:57,880 --> 00:36:00,159
rule and not subscribe manually. And the only case that

634
00:36:00,159 --> 00:36:02,599
we allow to do that is if you're using third

635
00:36:02,639 --> 00:36:05,840
part code that only has any pre imperative approach. The

636
00:36:05,880 --> 00:36:10,559
best example is form controls in Angular. They have a

637
00:36:10,760 --> 00:36:14,599
disabled function and enable functions. They are imperative functions. So

638
00:36:15,320 --> 00:36:19,320
for example, if I have an observable of user permissions

639
00:36:19,440 --> 00:36:22,440
or something, for example, if you don't have permission x,

640
00:36:23,079 --> 00:36:26,920
this input should be disabled. So if you're using form controls,

641
00:36:26,960 --> 00:36:32,519
then you will have to subscribe and see if the

642
00:36:32,559 --> 00:36:35,639
permission is not there. You have to do control that

643
00:36:35,920 --> 00:36:38,960
disable that imperative logy. You cannot just put it in

644
00:36:39,000 --> 00:36:43,800
a template. With template driven forms, you can dig that

645
00:36:44,360 --> 00:36:49,079
you can use the disabled attribute on the impetulment or something,

646
00:36:49,440 --> 00:36:52,679
but the reactive forms don't allow for that, which is

647
00:36:52,719 --> 00:36:56,320
sort of weird because reactive form are supposed to be reactive,

648
00:36:56,440 --> 00:36:59,440
not imperative, which they usually are. But that's sort of

649
00:36:59,599 --> 00:37:04,039
lots of perfect question. Marcustage said disabled, I don't know, disabled, enable,

650
00:37:04,079 --> 00:37:06,320
and so on and so on. Most of them are

651
00:37:06,679 --> 00:37:10,760
a bit imperative. So that's the only case that probably

652
00:37:11,000 --> 00:37:12,960
if you don't you don't have a choice, or you

653
00:37:13,039 --> 00:37:16,400
have a library function that does something something, you have

654
00:37:16,440 --> 00:37:19,800
to call it. You cannot just write an observable. So

655
00:37:20,119 --> 00:37:23,440
that's the only case that we'll all do that. That's

656
00:37:23,480 --> 00:37:25,719
a nice thing to start from me. If you right subscribe,

657
00:37:26,000 --> 00:37:28,719
maybe something isn't very right type to understand, how can

658
00:37:28,760 --> 00:37:32,599
you do it better? Sort of provided like a point

659
00:37:32,800 --> 00:37:36,440
of thinking, like how can I make my orges cade better?

660
00:37:36,639 --> 00:37:38,880
Let's take how many sublib do I have and how

661
00:37:39,119 --> 00:37:43,199
many can I pitch them? A good starting point if

662
00:37:43,199 --> 00:37:46,840
you have a RGS code basically won't refractory makes sense?

663
00:37:47,199 --> 00:37:49,199
Speaker 1: Cool? What about testing our xgs?

664
00:37:49,360 --> 00:37:53,639
Speaker 2: That's sort of my biggest weakness is that I don't

665
00:37:53,639 --> 00:37:58,440
do much testing because the requirements, yeah don't they don't.

666
00:37:58,840 --> 00:38:02,360
The requirements don't from our kind, don't go into the

667
00:38:03,159 --> 00:38:06,119
hunit testing or something. So most of the testing that

668
00:38:06,199 --> 00:38:10,079
I have done have been like experimental. But of course,

669
00:38:10,239 --> 00:38:13,920
if we talk in theory about testing rhes, there is

670
00:38:14,119 --> 00:38:19,360
there are marble tests. And if you don't have side

671
00:38:19,360 --> 00:38:23,119
effects in your are jazz. So if you don't use

672
00:38:23,119 --> 00:38:27,559
the tap function, the tap operator, which is also considered

673
00:38:27,559 --> 00:38:29,639
a bad practice, you don't if you only if you

674
00:38:29,719 --> 00:38:31,960
really have side effects that you really really have to

675
00:38:32,039 --> 00:38:35,440
have something like that. If you don't write the type function,

676
00:38:36,400 --> 00:38:39,239
you sort of have a bunch of pure functions. Okay,

677
00:38:40,360 --> 00:38:44,079
you can more or less easily test that even without

678
00:38:44,079 --> 00:38:48,519
the Marble testing, just using basic humit tests. You can

679
00:38:48,599 --> 00:38:51,199
do that in the very end. If you have some

680
00:38:51,239 --> 00:38:54,639
properties on a class that are observable, you can just okay,

681
00:38:55,199 --> 00:38:58,800
create an instance of that class, maybe subscribe to the observable,

682
00:38:58,920 --> 00:39:02,119
see what data and how you can sort of manipulate

683
00:39:02,159 --> 00:39:04,400
the source of the data, like is it coming from

684
00:39:04,440 --> 00:39:07,559
an event? You can always sort of trigger that event,

685
00:39:07,760 --> 00:39:10,880
can trigger that event, see how the observable goes. You

686
00:39:10,920 --> 00:39:13,480
don't need to sort of test every other operator. The

687
00:39:13,480 --> 00:39:16,559
operators are working, they are tested in the library. You

688
00:39:16,599 --> 00:39:19,039
only need to test the result. They can treat it

689
00:39:19,159 --> 00:39:21,920
sort of like it's just a property that I have

690
00:39:21,960 --> 00:39:25,159
to subscribe to. I'm checking for the data, so triggeer

691
00:39:25,159 --> 00:39:29,760
an event, see what is the data? So I guess.

692
00:39:30,039 --> 00:39:33,079
It would also sort of make testing easier if you

693
00:39:33,519 --> 00:39:36,800
and if you use NNGRX and testing is way way

694
00:39:36,840 --> 00:39:39,639
easier because you sort of have to test just two things.

695
00:39:39,639 --> 00:39:42,599
You have to test three things. Sorry. You have test selectors,

696
00:39:42,960 --> 00:39:46,119
which usually are pure functions, so they should be pure functions,

697
00:39:46,280 --> 00:39:51,000
so it's easy to test, right, just function. You have

698
00:39:51,039 --> 00:39:52,920
the state you know about the state. You're the one

699
00:39:53,159 --> 00:39:57,159
to providing a mocked version of state to the unit test, right,

700
00:39:57,239 --> 00:39:59,000
so you can just check the results and it's okay.

701
00:39:59,440 --> 00:40:01,719
If you get the resulted to expect it, it's okay.

702
00:40:01,760 --> 00:40:04,320
It's very easy to test, and they usually don't have

703
00:40:04,440 --> 00:40:08,880
very many use cases. You have to test reducers, which

704
00:40:08,960 --> 00:40:13,519
also again reducer pure function. Provide the action the payload,

705
00:40:14,079 --> 00:40:17,519
get the result it's expected. Okay, it's done. You don't

706
00:40:17,559 --> 00:40:20,800
have to There are not lots of different cases and

707
00:40:20,880 --> 00:40:24,320
other global variables that can affect the reduce the pure

708
00:40:24,320 --> 00:40:29,079
function test. The only thing that's probably less to test

709
00:40:29,320 --> 00:40:33,239
is the effects, but that's really the main point. If

710
00:40:33,519 --> 00:40:36,280
you have effects in gy X, that's the only place

711
00:40:36,320 --> 00:40:38,679
that you have effects. So if you get that covered,

712
00:40:39,239 --> 00:40:42,800
most of the services you have you pro in the action,

713
00:40:43,440 --> 00:40:47,840
see if the resulting action comes with the payload that

714
00:40:47,840 --> 00:40:50,679
you've expected. So it's sort of the same. It's sort

715
00:40:50,719 --> 00:40:52,719
of the same thing that you actually be with the reducer.

716
00:40:53,320 --> 00:40:56,719
It's just not a pure function. It does something on

717
00:40:56,800 --> 00:40:59,559
the side like calling a server or maybe go to

718
00:40:59,679 --> 00:41:02,599
local storage or something. But you don't have to Again,

719
00:41:02,599 --> 00:41:05,400
you don't have to test that because there's another service

720
00:41:05,440 --> 00:41:07,559
doing it. You have you have you have a unit

721
00:41:07,599 --> 00:41:11,239
test for bed service. Like for practical examples, say you

722
00:41:11,320 --> 00:41:16,639
have an orders service that loads orders. Okay, the data,

723
00:41:16,800 --> 00:41:19,400
and you have the order effects. They don't really need

724
00:41:19,440 --> 00:41:22,320
to test order service in the order effect test. You

725
00:41:22,320 --> 00:41:26,599
will just test if there is an action called load orders. Okay,

726
00:41:26,920 --> 00:41:31,400
here's the action with this payload, and I expect this result.

727
00:41:31,480 --> 00:41:33,920
I expect this action with this result. So you don't

728
00:41:33,920 --> 00:41:37,519
really care what happens inside it, even if it does

729
00:41:37,519 --> 00:41:39,960
some complicated logy. You don't care care about the results.

730
00:41:39,960 --> 00:41:44,320
You can sort of sort of treated like a quasi

731
00:41:44,360 --> 00:41:48,880
pure functioning. It isn't obviously, but because you have mocked

732
00:41:48,920 --> 00:41:52,320
the service, it will always return the result that you

733
00:41:52,320 --> 00:41:55,119
have expected if you if you have written the correct

734
00:41:55,119 --> 00:41:59,840
code in the effects, that's what you're testing for, right,

735
00:42:00,039 --> 00:42:03,320
And then you will test the order service separately, which

736
00:42:03,480 --> 00:42:06,599
actually would be just marking the back end with I

737
00:42:06,599 --> 00:42:09,880
don't know, mock et cetera backhand or something something or

738
00:42:09,920 --> 00:42:14,800
the HTP testing library in Angular testing, so testing the

739
00:42:14,800 --> 00:42:17,239
othersies would also be busy. So essentially you get two

740
00:42:17,599 --> 00:42:21,239
interconnected classes that are both one hundred percent test covered

741
00:42:21,639 --> 00:42:25,239
and that really made your job easier. If you have

742
00:42:25,320 --> 00:42:27,840
been doing all of that in the component, then that

743
00:42:27,840 --> 00:42:30,719
component uned hasn't really big. You will have to mock

744
00:42:30,840 --> 00:42:33,320
the service and put it Okay, oh, this component uses

745
00:42:33,360 --> 00:42:36,280
five or seven services for example, you have to make

746
00:42:36,320 --> 00:42:39,039
all of them, put them inside this component, and then

747
00:42:39,280 --> 00:42:41,800
check for it in every way, like oh, this boton

748
00:42:41,880 --> 00:42:44,840
is clicked. This function is called this service. Server function

749
00:42:44,920 --> 00:42:47,719
is called mog. Data is here. It's rendered something something

750
00:42:48,039 --> 00:42:51,880
and GRX saves you from that too. In your components,

751
00:42:52,119 --> 00:42:55,960
you usually only ir component is that's a bit smaller

752
00:42:56,000 --> 00:42:58,679
and uses only external state. You inject only the store.

753
00:42:59,280 --> 00:43:02,119
Inject the store. There's one. You don't need to mock

754
00:43:02,199 --> 00:43:05,079
the story. Don't mock the story and JR ex test.

755
00:43:05,280 --> 00:43:07,320
You moke the selectors. And it's very easy to make

756
00:43:07,360 --> 00:43:10,320
a selector because essentially just say, oh, this is the

757
00:43:10,400 --> 00:43:13,159
data this selector is going to return, and that's it,

758
00:43:13,239 --> 00:43:18,239
right the elector function like, okay, I haven't the orders

759
00:43:18,320 --> 00:43:21,119
property that I already use in the component. Okay, I

760
00:43:21,639 --> 00:43:25,039
mock the selector and I'm like, now there are three orders.

761
00:43:25,079 --> 00:43:27,519
Now I'm mog, now there are five order orders. Let's

762
00:43:27,519 --> 00:43:30,840
see what happened in the ui IL eight words. It's

763
00:43:30,920 --> 00:43:33,239
really easier to do that then to try to mow

764
00:43:33,320 --> 00:43:36,079
you don't mock the dependency rather just moke the data

765
00:43:36,159 --> 00:43:38,280
with the selector functions.

766
00:43:38,519 --> 00:43:41,599
Speaker 1: Right, yeah, that makes sense. All right, let's see. Is

767
00:43:41,599 --> 00:43:44,400
there anything else that we should cover? I guess The

768
00:43:44,440 --> 00:43:47,079
next question I have is if people want to follow you,

769
00:43:47,320 --> 00:43:50,119
because you have a thousand followers on Medium. Now, if

770
00:43:50,119 --> 00:43:52,559
people want to make it one thousand and one, I guess,

771
00:43:52,559 --> 00:43:54,480
then go on Medium and find you there. And then

772
00:43:54,519 --> 00:43:57,519
I'm also wondering about like Twitter and GitHub and anywhere

773
00:43:57,519 --> 00:44:00,119
else that you want people to follow you at you.

774
00:44:00,280 --> 00:44:02,760
Speaker 2: I usually want people to follow me on Twitter because

775
00:44:02,880 --> 00:44:06,519
I usually i'll post stuff there because if I remember correct,

776
00:44:06,599 --> 00:44:09,920
you cannot follow alter on in depth. I think we

777
00:44:10,000 --> 00:44:13,320
don't have the functionality there, so but I always post

778
00:44:13,599 --> 00:44:17,159
my articles and some other folks on Twitter. So I

779
00:44:17,159 --> 00:44:19,199
guess follow me on Twitter.

780
00:44:19,800 --> 00:44:21,119
Speaker 1: Okay, what's your Twitter handle?

781
00:44:21,440 --> 00:44:23,440
Speaker 2: It's Armando true.

782
00:44:23,800 --> 00:44:26,280
Speaker 1: All right, Well, we'll make sure that we have a

783
00:44:26,320 --> 00:44:27,679
link to that in the show notes. If you just

784
00:44:27,719 --> 00:44:29,280
put in the chat put it over there.

785
00:44:29,360 --> 00:44:31,920
Speaker 2: Yeah, yeah, okay, And then.

786
00:44:32,039 --> 00:44:33,760
Speaker 1: The last thing that we do on the show is

787
00:44:33,800 --> 00:44:36,320
Picks and Picks is just us shouting out about stuff

788
00:44:36,360 --> 00:44:39,079
that we like, stuff that is making life better and

789
00:44:39,159 --> 00:44:42,280
more enjoyable or whatever. Right, So I'll go ahead and

790
00:44:42,280 --> 00:44:45,320
go first, just to get things rolling. So I've been

791
00:44:45,440 --> 00:44:48,360
listening to and I have to say, I'm really slow

792
00:44:48,440 --> 00:44:52,119
on the fiction books just because I don't have a

793
00:44:52,119 --> 00:44:54,559
ton of time. But I've really been enjoying these books.

794
00:44:54,599 --> 00:44:57,840
I'm listening through them for the third or fourth time.

795
00:44:58,239 --> 00:45:00,280
I listened through the books whenever a new one comes out,

796
00:45:00,280 --> 00:45:02,400
and a new one came out last year. And yes,

797
00:45:02,440 --> 00:45:05,360
I'm slow, Yes the book came out last year. But

798
00:45:05,639 --> 00:45:09,880
I've been listening to The Stormlight Archives by Brandon Sanderson.

799
00:45:10,679 --> 00:45:12,840
And for those of you who aren't familiar with it,

800
00:45:12,840 --> 00:45:15,920
it's a fictional series. It's a fantasy series. It takes

801
00:45:15,960 --> 00:45:20,119
place on another world where how do I talk about

802
00:45:20,119 --> 00:45:23,360
it without spoiling it anyway, they have these powers where

803
00:45:23,840 --> 00:45:29,679
they essentially can channel light that Okay, I'll explain a

804
00:45:29,679 --> 00:45:30,960
little bit of it, but I'm not going to take

805
00:45:31,000 --> 00:45:32,519
too long because I don't want to take too long.

806
00:45:32,800 --> 00:45:36,760
But effectively, so there's this there's storms that come through

807
00:45:36,840 --> 00:45:40,360
the you know, on a regular basis, and when the

808
00:45:40,360 --> 00:45:43,800
storms come through, they infuse gems with light. They call

809
00:45:43,880 --> 00:45:46,760
it storm light, and then there are certain people that

810
00:45:46,800 --> 00:45:49,800
can take that storm light and use it to do magic.

811
00:45:50,679 --> 00:45:54,920
And anyway, the thing though with Brandon Sanderson's books is

812
00:45:55,000 --> 00:45:58,119
the magic systems are interesting, but the characters and the

813
00:45:59,000 --> 00:46:04,920
storylines are way more interesting. And to me at least,

814
00:46:05,599 --> 00:46:07,480
that's the thing that I really love about a lot

815
00:46:07,519 --> 00:46:11,199
of the movies and books that I enjoy are kind

816
00:46:11,280 --> 00:46:14,559
of those things. Right. That's why a lot of people

817
00:46:14,639 --> 00:46:17,639
really enjoyed the original Star Wars trilogy, right, is because

818
00:46:18,039 --> 00:46:21,559
the characters were rich, It followed the hero's journey. It

819
00:46:21,920 --> 00:46:25,400
you know, yes, I'm kind of a story writing nerd,

820
00:46:25,960 --> 00:46:28,800
but anyway, so it followed some of the formulas that

821
00:46:28,800 --> 00:46:31,960
we're familiar with, and you know, we really really love

822
00:46:32,000 --> 00:46:34,719
the characters. And it's interesting because I talk to people

823
00:46:34,880 --> 00:46:37,559
about some of the later Star Wars series, you know,

824
00:46:37,599 --> 00:46:39,880
whether it be the prequels, you know, episodes one, two,

825
00:46:39,880 --> 00:46:41,960
and three, and people were just like they just weren't

826
00:46:42,039 --> 00:46:43,840
as good. And I don't know why, right, because the

827
00:46:43,880 --> 00:46:46,280
special effects were better than everything else, and it's because

828
00:46:46,320 --> 00:46:49,920
the characters weren't as interesting, right, You kind of knew

829
00:46:50,440 --> 00:46:52,840
who Obi Wan Kenobi was going to end up being,

830
00:46:53,239 --> 00:46:55,719
and he got a little more interesting as he started

831
00:46:55,840 --> 00:46:59,559
pushing back in some ways against you know, some of

832
00:46:59,559 --> 00:47:03,360
the other Masters. But you know, Anakin was just this

833
00:47:03,480 --> 00:47:05,320
whiny kid through the whole thing, and he just wasn't

834
00:47:05,320 --> 00:47:08,079
that interesting to watch, right, There was no progression for

835
00:47:08,119 --> 00:47:11,239
the character. You know, the same with Padme, you know,

836
00:47:11,280 --> 00:47:14,639
she was just always you know, she struggled with their

837
00:47:14,679 --> 00:47:16,760
decision to be with Anakin, but that was pretty much it,

838
00:47:16,840 --> 00:47:19,800
right or the new series even you know, where you

839
00:47:19,960 --> 00:47:23,559
don't see the same internal struggles that you saw from

840
00:47:23,920 --> 00:47:26,760
Luke and Leah and Hahn and the struggles with who

841
00:47:26,800 --> 00:47:31,320
they were from Ray or Finn or any of those characters, right,

842
00:47:31,920 --> 00:47:35,039
And that's what we wanted to see. And in fact,

843
00:47:35,079 --> 00:47:37,840
they actually undid some of the growth that you saw

844
00:47:37,920 --> 00:47:40,559
from Luke in the original series when they brought him back,

845
00:47:40,960 --> 00:47:43,159
and a lot of people had issues with that. And

846
00:47:43,280 --> 00:47:46,280
so anyway, Brandon does a really good job with his

847
00:47:46,400 --> 00:47:48,639
characters in the way that he puts them together and

848
00:47:48,679 --> 00:47:51,239
then some of the situations that they find themselves in

849
00:47:51,639 --> 00:47:54,920
and you know, trying to make their way through this

850
00:47:55,039 --> 00:47:57,400
universe and all of his well, I shouldn't say a

851
00:47:57,400 --> 00:47:59,719
A lot of his books take place in the same universe,

852
00:47:59,760 --> 00:48:03,159
which he calls the Kosmeir, and so that's always fun too,

853
00:48:03,199 --> 00:48:06,599
because you're wondering at what point they're going to start

854
00:48:06,719 --> 00:48:09,599
meeting each other, right, because there are ways for them

855
00:48:09,639 --> 00:48:12,800
to travel between the worlds, and none of his books

856
00:48:12,800 --> 00:48:16,320
have done that yet with more than like a handful

857
00:48:16,360 --> 00:48:19,079
of characters. There are a few characters that move between worlds,

858
00:48:19,440 --> 00:48:21,639
and you do meet them as you move through the worlds.

859
00:48:21,760 --> 00:48:24,079
The storm Light Archives actually has one character that you've

860
00:48:24,079 --> 00:48:26,280
seen in several of the books, but he kind of

861
00:48:26,320 --> 00:48:29,119
has this passing role, and in this book, in the

862
00:48:29,119 --> 00:48:34,079
first Stormlight Archives book, he's actually almost a main character.

863
00:48:34,400 --> 00:48:38,159
So that was fun. But anyway, I'm nerding out and

864
00:48:38,199 --> 00:48:41,440
I need to just get off the bandwagon here for

865
00:48:41,440 --> 00:48:43,920
a minute. I really enjoyed the book, so go check

866
00:48:43,920 --> 00:48:46,000
those out. The first book is The Way of Kings.

867
00:48:46,400 --> 00:48:49,400
The second book is Words of Radiance, and that's the

868
00:48:49,400 --> 00:48:52,159
one I'm listening to right now, and so go check

869
00:48:52,199 --> 00:48:53,599
those out. I'll put a link to those in the

870
00:48:53,599 --> 00:48:55,719
show notes. I listened to him on audible, so I'll

871
00:48:55,719 --> 00:48:57,920
put a link to audible as well. And then the

872
00:48:58,159 --> 00:49:01,840
other pick that I have is the dev Influencers Accelerator.

873
00:49:01,960 --> 00:49:05,000
I'm just going to keep reminding people that is out there. Basically,

874
00:49:05,039 --> 00:49:08,679
the idea is that if you're trying to get your

875
00:49:09,000 --> 00:49:10,920
career to go to the next level, and you want

876
00:49:10,920 --> 00:49:12,679
to make an impact on the community while you do it,

877
00:49:12,920 --> 00:49:15,400
and eventually you'd like to get paid for it, then

878
00:49:15,440 --> 00:49:18,760
the dev Influencers Accelerator is for you. And basically what

879
00:49:18,760 --> 00:49:20,559
we're doing is we're walking you through the process of

880
00:49:20,599 --> 00:49:24,280
starting a hit podcast and then we're gonna take you

881
00:49:24,360 --> 00:49:27,840
from producing the podcast and having a podcast that is

882
00:49:28,360 --> 00:49:32,559
going out every week to growing it rapidly and I

883
00:49:32,559 --> 00:49:35,360
think I can get people to be in the top

884
00:49:35,360 --> 00:49:40,000
five podcasts in their niche within six months. So if

885
00:49:40,039 --> 00:49:43,280
that sounds interesting to you, then come join us. You

886
00:49:43,360 --> 00:49:45,639
can go check it out at dev influencers dot com

887
00:49:45,639 --> 00:49:49,159
slash apply. Also, I did start a dev Influencers podcast

888
00:49:49,480 --> 00:49:53,440
and that's at dev influencers dot com slash podcast. All right, Arman,

889
00:49:53,559 --> 00:49:54,320
what are your picks?

890
00:49:55,280 --> 00:49:57,559
Speaker 2: When we were talking about the books that you have

891
00:49:57,639 --> 00:50:01,239
been listening to, I kind of topic to sort of

892
00:50:01,239 --> 00:50:06,320
build on because I like both fantasy and science fiction

893
00:50:06,480 --> 00:50:10,320
a lot. I like Star Wars if you were going

894
00:50:10,320 --> 00:50:12,519
to talk about stars or wear a Star Wars T shirt.

895
00:50:14,079 --> 00:50:17,440
Speaker 1: Yeah, yeah, so Andrew.

896
00:50:17,719 --> 00:50:21,039
Speaker 2: The thing that gets me excited about the topic is

897
00:50:21,079 --> 00:50:24,159
waiting for the Dune movies to come out. Oh yeah,

898
00:50:24,440 --> 00:50:27,639
because I'm a huge I'm a huge fan of the books,

899
00:50:27,840 --> 00:50:30,119
and I actually regret now.

900
00:50:30,119 --> 00:50:30,840
Speaker 1: Ever read the book.

901
00:50:31,840 --> 00:50:36,320
Speaker 2: They are amazing for me. They're the best thing in

902
00:50:36,400 --> 00:50:38,840
science fiction and probably most of the literature that I

903
00:50:38,920 --> 00:50:43,280
ever read, and I regret not reading it earlier. Because

904
00:50:43,880 --> 00:50:48,480
Danny Vignov is my favorite movie director. I absolutely enjoy

905
00:50:48,519 --> 00:50:51,800
all the movies that he created a later later on

906
00:50:51,920 --> 00:50:55,519
twenty forty nine and Arrival and all the other stuff

907
00:50:55,519 --> 00:50:58,880
that he had. So when I and I always have

908
00:50:59,039 --> 00:51:01,760
known about Dune that it's a classic, that's a great book,

909
00:51:01,800 --> 00:51:04,159
but I was like, maybe I will read something. But

910
00:51:04,559 --> 00:51:05,679
when I realized.

911
00:51:05,360 --> 00:51:07,960
Speaker 1: I've seen the movie, the nineteen eighties movie.

912
00:51:08,159 --> 00:51:10,440
Speaker 2: Oh no, I didn't watch it. I didn't watch it.

913
00:51:10,480 --> 00:51:13,079
So I so when I watched the Milliaum movie that

914
00:51:13,159 --> 00:51:18,119
will eventually, hope fully come out, I will have only

915
00:51:18,199 --> 00:51:20,679
those impressions, so I won't sort of think about the

916
00:51:20,760 --> 00:51:23,519
Lynch movie. I have seen several clips from the Lynch movie.

917
00:51:23,559 --> 00:51:26,280
The actuals are really good, but it's sort of a

918
00:51:26,320 --> 00:51:28,679
bit cheesy, and I know how we changed the ending

919
00:51:28,960 --> 00:51:32,760
that isn't really reflecting what Frank Herbert was trying to

920
00:51:32,800 --> 00:51:35,760
convey in the books. And Willow is always saying in

921
00:51:35,800 --> 00:51:38,920
his interviews that, no, I'm going to sort of try

922
00:51:38,960 --> 00:51:45,199
to convey what the author originally intended rather than sort

923
00:51:45,239 --> 00:51:48,400
of come up with my interpretations or something something, because

924
00:51:48,519 --> 00:51:51,639
it's apparently a big fan of Frank Herbert. So when

925
00:51:51,639 --> 00:51:54,840
I learned when that Danny Vignow is making new movie,

926
00:51:54,920 --> 00:51:56,960
I was excited. I was like, Okay, I'm gonna read

927
00:51:56,960 --> 00:51:59,000
that it's the first book so that when I go

928
00:51:59,079 --> 00:52:02,400
to the movie, I would sort of know what to

929
00:52:02,480 --> 00:52:05,159
try to expect, because for me, it's I always loved

930
00:52:05,280 --> 00:52:08,320
the experience of watching a movie on a book that

931
00:52:08,360 --> 00:52:12,079
I like. I enjoyed watching the Hardpwter movies because I

932
00:52:12,159 --> 00:52:14,199
like the books, and when I went went to the movies,

933
00:52:14,239 --> 00:52:18,239
I enjoyed how they sort of brought all that stuff

934
00:52:18,239 --> 00:52:21,320
to the screen. But when I was reading the Dumb books,

935
00:52:21,440 --> 00:52:25,360
I was sort of blown away, but not from the start,

936
00:52:25,559 --> 00:52:29,719
because from the start, and that's a mistakes make you

937
00:52:29,760 --> 00:52:33,519
think that it's sort of this hero journey. It's sort

938
00:52:33,519 --> 00:52:36,159
of like Star Wars, like there's this guy who has

939
00:52:36,159 --> 00:52:39,280
this problem was to go through these adventures and then

940
00:52:39,599 --> 00:52:43,800
come out on top. But in reality it's a sort

941
00:52:43,840 --> 00:52:47,400
of dystopia. Did you find out about only if you

942
00:52:47,480 --> 00:52:49,920
keep on reading the other books, If you just read Doom,

943
00:52:51,159 --> 00:52:54,320
it's again a great piece of literature. It's sort of

944
00:52:54,760 --> 00:52:58,400
it's very big. It's it's a classic. It has great characters,

945
00:52:58,440 --> 00:53:01,960
it has great philosophy in it. But this sort of

946
00:53:02,039 --> 00:53:05,039
end up with like, yeah, this is big, but sort

947
00:53:05,039 --> 00:53:08,400
of in the end is just a hero journey. But

948
00:53:08,519 --> 00:53:10,440
then if you keep on reading, if you read at

949
00:53:10,519 --> 00:53:14,199
least Dune Messiah, which to everyone that wants to read

950
00:53:14,320 --> 00:53:16,880
Dum books, I always suggest that they read at least

951
00:53:16,920 --> 00:53:20,400
Dune and Dune Messiah, the second book, because originally Herbert

952
00:53:20,800 --> 00:53:23,760
intended to release one book that is both Doing and

953
00:53:23,840 --> 00:53:27,119
Dune Messiah, but it got too long, so the publication

954
00:53:27,239 --> 00:53:29,960
asked him to try to sort of put it in half.

955
00:53:30,599 --> 00:53:34,480
So the other part of life, I'm trying not to

956
00:53:34,519 --> 00:53:38,960
spoil anything of my protagonist is in the other book.

957
00:53:39,000 --> 00:53:40,480
And when you read the other book, you sort of

958
00:53:40,519 --> 00:53:45,280
one said, Okay, this really is something different. This really

959
00:53:45,360 --> 00:53:48,760
is rather than being a hero journey a sort of trope,

960
00:53:49,280 --> 00:53:53,960
it's it actually criticizes the trope and tries to make

961
00:53:54,079 --> 00:53:57,039
reader to understand that, yeah, you know that stuff. It

962
00:53:57,119 --> 00:54:01,000
only works in works of fiction. In real life, hero

963
00:54:01,159 --> 00:54:05,079
trope is not the good, great and exciting thing that

964
00:54:05,119 --> 00:54:08,480
you think about, because the hero can easily manipulate you

965
00:54:08,880 --> 00:54:12,039
to do horrible things. And it goes on and has

966
00:54:12,079 --> 00:54:14,920
this motive, and it's sort of a tragedy that goes

967
00:54:14,960 --> 00:54:17,400
through the family, that goes through all of that, and

968
00:54:17,719 --> 00:54:20,440
it sort of comes back in Children of Dune, which

969
00:54:20,480 --> 00:54:23,199
is my favorite. The first book is one hundrederson my

970
00:54:23,280 --> 00:54:26,079
favorite thing the ones that I've read. I've read up

971
00:54:26,159 --> 00:54:29,920
to God Improved Dune, the fourth book, and after that

972
00:54:30,039 --> 00:54:32,239
you sort of take a break and the other events

973
00:54:32,239 --> 00:54:36,079
happened too far in the future with new characters but

974
00:54:36,199 --> 00:54:38,960
still being interconnected with the sort of the journey that

975
00:54:39,000 --> 00:54:41,840
happens before that. So I didn't really enjoy very much

976
00:54:41,960 --> 00:54:45,880
the characters in Heretics of Dune because the plot was

977
00:54:46,119 --> 00:54:50,199
very interesting, it got really exciting things, but I sort

978
00:54:50,239 --> 00:54:53,719
of didn't manage to like the characters or emphasize with them.

979
00:54:53,880 --> 00:54:57,199
So I stopped somewhere in the middle. I'm still going

980
00:54:57,239 --> 00:55:00,760
to finish it, hopefully before the movies amount. I want

981
00:55:00,840 --> 00:55:05,880
to have written all the six books before the movie

982
00:55:05,880 --> 00:55:08,920
comes out, but I guess I still have time for that.

983
00:55:09,920 --> 00:55:14,079
So that is something that I really enjoy the dum books,

984
00:55:14,119 --> 00:55:17,840
and I would advise anyone to read them because they

985
00:55:17,920 --> 00:55:21,000
really they contain sort of advice about anything in the world.

986
00:55:21,519 --> 00:55:24,559
That that book is about politics, that book is about religion,

987
00:55:24,599 --> 00:55:28,400
and that book is about philosophy and knowledge and even ecology.

988
00:55:28,880 --> 00:55:32,880
So it sort of covers everything that we have problematic

989
00:55:32,920 --> 00:55:36,159
in our world, that everything that raises any conflict in

990
00:55:36,199 --> 00:55:40,920
our world. So it's a nice, nice, large, big piece

991
00:55:41,000 --> 00:55:45,079
of different thoughts and opinions inside those characters that interact

992
00:55:45,119 --> 00:55:48,400
with each other. And I guess it's really great read.

993
00:55:48,800 --> 00:55:52,559
Speaker 1: Interesting. Well, I haven't seen the nineteen eighties movies for

994
00:55:52,599 --> 00:55:54,360
a long time, so yeah, I'll have to go read

995
00:55:54,360 --> 00:55:58,079
the books. Now you've sold me. I've got a ton

996
00:55:58,119 --> 00:56:01,960
of credits on Amazon or as well. So yeah, I'm

997
00:56:02,039 --> 00:56:05,119
kind of curious because I'm wondering if they're like super

998
00:56:05,159 --> 00:56:05,800
long books.

999
00:56:06,800 --> 00:56:10,280
Speaker 2: They kind of are, but they are a bit confusing

1000
00:56:10,679 --> 00:56:15,400
in the beginning because Frank Herbert really doesn't like exposition.

1001
00:56:16,320 --> 00:56:20,039
He will throw on like this terminology or the benega

1002
00:56:20,280 --> 00:56:23,440
his sisterhood, and you would what the hell that is?

1003
00:56:23,719 --> 00:56:26,679
And okay, yes, sort of I get it. Ah, yeah,

1004
00:56:26,719 --> 00:56:28,679
maybe something. And then they were like, oh this is

1005
00:56:28,719 --> 00:56:30,920
gon jaba or oh this is something this, this is

1006
00:56:30,960 --> 00:56:34,679
the Sensimi religion, and lots of terminology. But when you

1007
00:56:34,880 --> 00:56:37,679
sort of get the grasp of it, it becomes really exciting.

1008
00:56:38,119 --> 00:56:41,079
So you have to pay very deep attention to the

1009
00:56:41,119 --> 00:56:45,440
dialogues because everything like expositionary happens in the dialogues.

1010
00:56:45,760 --> 00:56:49,000
Speaker 1: Yeah, yep, it's one credit on audible, so I just

1011
00:56:49,480 --> 00:56:50,719
you cost me a whole credit.

1012
00:56:52,360 --> 00:56:54,079
Speaker 2: So I hope you really enjoyed the book.

1013
00:56:54,559 --> 00:56:57,320
Speaker 1: Yeah, me too. All right, good deal. Well, thanks for coming.

1014
00:56:57,360 --> 00:56:57,920
This was fun.

1015
00:56:58,599 --> 00:57:01,599
Speaker 2: Thanks for inviting me. I enjoyed a lot to talk about.

1016
00:57:01,800 --> 00:57:02,320
Top day.

1017
00:57:02,519 --> 00:57:06,079
Speaker 1: All right, we'll go ahead and wrap up here and

1018
00:57:06,280 --> 00:57:07,760
until next time, folks, max out.

