1
00:00:06,839 --> 00:00:10,919
Hey everybody, and welcome to another
episode of Adventures in Angler. I'm your

2
00:00:10,919 --> 00:00:15,039
host today, Charles Maxwood, and
we are talking to Arman. I love

3
00:00:15,199 --> 00:00:18,519
getting people from other countries because I'm
looking at the name and going, let

4
00:00:18,519 --> 00:00:22,559
me, let me try it.
It's Vardanian. Yeah, you've got it

5
00:00:22,679 --> 00:00:28,879
mostly right. I mean your words
usually are pronounced that they are written.

6
00:00:29,960 --> 00:00:35,359
Yeah. Cool. So do you
want to just tell us a little about

7
00:00:35,359 --> 00:00:38,479
yourself what you do over there in
Armenia and yeah, how long have you

8
00:00:38,520 --> 00:00:41,799
been doing Angular and all that good
stuff? Yeah? Sure. So I'm

9
00:00:41,840 --> 00:00:49,359
a senior front and developer at an
Armenian company called Wolo. I'm in sitting

10
00:00:49,439 --> 00:00:53,799
in our office right now. I'm
a conference room. I'm a front and

11
00:00:54,240 --> 00:01:00,679
team lead, and I'm working on
Angular for I think it's the for fear

12
00:01:00,880 --> 00:01:07,760
that I'm working on Angular already.
So we started one of our projects back

13
00:01:07,840 --> 00:01:11,519
when Angular two was in beta.
Uh huh, I guess I've been there

14
00:01:11,560 --> 00:01:17,280
from the start. Oh wow,
Yeah, I remember those days that all

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

16
00:01:21,400 --> 00:01:26,079
was it was sort of you were
in constant danger that something that you are

17
00:01:26,120 --> 00:01:30,159
doing today is going to change tomorrow
and you have to prefecture some of your

18
00:01:30,239 --> 00:01:34,799
code again. Yeah, but we're
in a good place now. I'm kind

19
00:01:34,799 --> 00:01:38,359
of curious as we get started.
I mean, we don't often hear a

20
00:01:38,359 --> 00:01:44,239
whole lot from Armenia, I guess
in the Angular community. So what what

21
00:01:44,319 --> 00:01:49,959
does the development and regular community look
like out there? So Armenia has this

22
00:01:51,200 --> 00:01:57,519
problem with our developers that don't really
participate a lot in the community, I

23
00:01:57,599 --> 00:02:01,200
mean in in a global sense,
but we actually have lots of very good

24
00:02:01,319 --> 00:02:07,439
software and in Angular too, So
the most biggest part of the market to

25
00:02:07,599 --> 00:02:15,120
React. But there are also big
companies here that use Angular and concentrate on

26
00:02:15,240 --> 00:02:21,919
Angular. And as a matter of
fact, I'm also teaching Angular in a

27
00:02:21,960 --> 00:02:27,120
private coding school. It's kind of
like a Blong boot camp. Of course,

28
00:02:27,919 --> 00:02:30,919
there are not as many people enrolled
in that program as there are people

29
00:02:30,960 --> 00:02:38,520
in the React program, but we
still have enough demand for Angler developers to

30
00:02:38,879 --> 00:02:43,840
keep it going. Yeah, that
makes sense. More usually the larger companies

31
00:02:43,879 --> 00:02:47,280
that use Angular. Oh really,
that's interesting because I've seen a bunch of

32
00:02:47,319 --> 00:02:53,199
larger companies using React. I've seen
I've seen kind of all across the board,

33
00:02:53,240 --> 00:02:57,479
I guess for all kinds. But
I talk to people across the board.

34
00:02:58,080 --> 00:03:04,319
So they're also company. Is that
you've kind of both on Halff projects.

35
00:03:04,360 --> 00:03:09,159
For example, one company probably know
about, you know, Pixard right

36
00:03:09,360 --> 00:03:15,759
the right, but that's an Armenian
company, and I know that they use

37
00:03:15,039 --> 00:03:20,360
both Angular and oh yeah, as
a matter of fact, they have reached

38
00:03:20,439 --> 00:03:25,000
out to me to you know,
try to hire me into their Angular program.

39
00:03:25,479 --> 00:03:29,479
I didn't want to, but that's
how I learned that they actually are

40
00:03:29,520 --> 00:03:32,280
doing Angular. I always thought that
in and there were web projects they're using

41
00:03:32,400 --> 00:03:36,080
going to React. I know that
they were using correct. It turned out

42
00:03:36,120 --> 00:03:39,680
they also had projects in Angular different
products, so probably, yeah, that

43
00:03:39,759 --> 00:03:44,080
makes sense. I'm kind of curious
as we get into this, how did

44
00:03:44,080 --> 00:03:49,120
you get into Angular? That's that's
sort of an interesting story, is that

45
00:03:49,719 --> 00:03:53,240
at the very beginning, I was
a PHP developer. So the very first

46
00:03:53,360 --> 00:03:59,719
job I got, which we started
this day exactly five years ago, that

47
00:04:00,080 --> 00:04:04,520
my very first working day, so
and I was hired as a PHP developer.

48
00:04:04,599 --> 00:04:09,759
But the very first day they told
me that they really needed a Python

49
00:04:09,800 --> 00:04:14,960
developer. So they asked if I
could try to, you know, learn

50
00:04:15,360 --> 00:04:19,120
some basics quickly and try to do
some features. And I was sure Okay,

51
00:04:19,720 --> 00:04:25,639
I've already hired, so I don't
have really option. So I spent

52
00:04:25,759 --> 00:04:30,680
like four days doing some Python and
started doing backhand. But you're working on

53
00:04:30,720 --> 00:04:35,680
a project. There were pieces written
in Angular jas in twenty sixteen. Within

54
00:04:36,160 --> 00:04:41,600
the beginnings twenty sixteen, we didn't
really have Angular one up and running,

55
00:04:41,759 --> 00:04:46,879
so I started doing doing Angular Jazz
and it sort of became a parent that

56
00:04:46,879 --> 00:04:49,800
it's more interesting for me. So
when they got a project that they were

57
00:04:49,839 --> 00:04:55,040
going to write from scratch, they
decided to create a single page application on

58
00:04:55,079 --> 00:04:58,560
Angler Jazz and all of that,
and I started doing it. So I

59
00:04:58,600 --> 00:05:01,959
got I pitched backhand and started doing
go only front and the Angular Jazz.

60
00:05:02,439 --> 00:05:08,199
Then I switched to my current office
and they were also starting in new projects

61
00:05:08,199 --> 00:05:13,319
from scratch, and they were already
doing it Angular in Angular two, which

62
00:05:13,439 --> 00:05:17,399
was in I guess beta yet.
Yeah, so that's how I got into

63
00:05:17,439 --> 00:05:24,879
Angular and awesome, he's been wrong
round but I still enjoyed. Yeah.

64
00:05:24,959 --> 00:05:29,120
Yeah, it's it's it's fun stuff. I mean, I kind of dabble

65
00:05:29,199 --> 00:05:31,879
in all of them, and it's
it's interesting to see the different approaches but

66
00:05:31,920 --> 00:05:35,399
also see the things that they have
in common. So yeah, good deal.

67
00:05:35,959 --> 00:05:41,399
So you've been writing I think I
found like two or three articles where

68
00:05:41,439 --> 00:05:45,519
you wrote about r xjs or you
know, some kind of reactive code.

69
00:05:46,120 --> 00:05:48,839
I'm a little curious as we get
into this, what what was it that

70
00:05:48,920 --> 00:05:54,040
drove you to start writing about rxjas
in particular? I mean, rxs is

71
00:05:54,079 --> 00:05:57,680
kind of core to the way the
angular works. But for the most part,

72
00:05:57,720 --> 00:06:01,360
I find that I can kind of
not paying a whole lot of attention

73
00:06:01,439 --> 00:06:04,800
to what RCGS is doing and just
kind of do things the angular way and

74
00:06:04,839 --> 00:06:08,680
it mostly works. And then I
just kind of know in my head that

75
00:06:08,720 --> 00:06:12,279
it's RGS is doing heavy the thing. Well, for me, it was

76
00:06:12,560 --> 00:06:17,279
sort of work experiencing that I was
working on a project that had lots of

77
00:06:17,319 --> 00:06:25,279
interconnected logic. So in a sense, imagine like this is UI that I

78
00:06:25,319 --> 00:06:29,560
have like a drop down, I
have another drop down, and the values

79
00:06:29,560 --> 00:06:31,639
in this drop down depend on what
I selected the other drop down, and

80
00:06:32,079 --> 00:06:36,639
everything that I selecting those two dropdowns
depend on some permissions that come from vacand

81
00:06:36,720 --> 00:06:41,000
like can I do this? Can
I do that? And everything is very

82
00:06:41,040 --> 00:06:46,759
mixed. So at first I was
trying to keep track of all that stuff

83
00:06:46,800 --> 00:06:49,600
in an imperative way. Like,
like you said, the angular ways methods.

84
00:06:49,680 --> 00:06:56,199
So when on select this thing,
round this function which will go update

85
00:06:56,240 --> 00:07:00,240
the internal state and so on.
But it quickly got out of hands because

86
00:07:00,600 --> 00:07:08,399
I ended up trying to synchronize five
or six different states with each other so

87
00:07:08,480 --> 00:07:13,240
that dates the other has to update. And it was all inside one component.

88
00:07:13,439 --> 00:07:16,360
I couldn't even there were scientor connected. I couldn't even divide it sveral

89
00:07:16,399 --> 00:07:21,240
components to try to write sort of
make them communicate with each other. So

90
00:07:23,160 --> 00:07:25,920
for the next piece, I decided, I will try to do it in

91
00:07:25,920 --> 00:07:29,839
an RGGS way. I will try
to create sort of observables for all the

92
00:07:29,879 --> 00:07:33,759
stuff and use operators and functions like
com my latest or relatest from and so

93
00:07:33,800 --> 00:07:39,920
on too, and I will use
the acing pipe to just just derive the

94
00:07:40,079 --> 00:07:45,199
state sort of from observables that I
already have and put them directly into the

95
00:07:45,240 --> 00:07:49,639
template using the ASIN functions, no
subscribes. And it worked way more elegantly

96
00:07:49,720 --> 00:07:55,519
that anything that I was trying to
do before that. And I always enjoyed

97
00:07:55,600 --> 00:07:59,000
RS, but I was in the
camp of the people that would say,

98
00:07:59,480 --> 00:08:01,600
oh, no, you're using too
much orges, this is over engineering,

99
00:08:01,680 --> 00:08:05,240
and so on. I always felt
like, oh, why did this guy

100
00:08:05,519 --> 00:08:09,720
put I don't know this logic inside
and observable. Don't really need an observable,

101
00:08:09,759 --> 00:08:15,199
you just use just use an impertive
function. But after doing it,

102
00:08:15,240 --> 00:08:22,800
I kind of got the notion behind
it that I can view my derived data

103
00:08:22,920 --> 00:08:28,439
in the end as a combination of
different streams and operators applied to them to

104
00:08:28,560 --> 00:08:31,519
mop and find my finals. Said
that I wouldn't going to display to the

105
00:08:31,639 --> 00:08:35,559
end user, and that was a
very elegant thing. So I started sort

106
00:08:35,559 --> 00:08:41,799
of investigating inside my project before starting
to read what other people write about are

107
00:08:43,000 --> 00:08:46,559
just because of course you can find
lots of articles and create literature online on

108
00:08:48,159 --> 00:08:52,240
how our jets may benefit their application. And so I started investigating my own

109
00:08:52,279 --> 00:08:56,879
application right fund. Oh again,
Oh I find this function. I don't

110
00:08:56,879 --> 00:08:58,840
need this function. I can reach
it. I can pull it inside single

111
00:09:00,039 --> 00:09:03,960
operating as an observable and use it
with operators and so on and so on.

112
00:09:05,320 --> 00:09:11,639
I started sort of writing down pieces
of rules that I will try to

113
00:09:11,679 --> 00:09:16,679
follow, and lots of those rules
will actually stupid rules. I was sort

114
00:09:16,679 --> 00:09:18,679
of finding out. I was sort
of finding out what I have to do

115
00:09:18,759 --> 00:09:22,080
with trial and their trial and there, and then one day I was like,

116
00:09:22,519 --> 00:09:26,799
okay, let's just try to read
about more about RGS, just open

117
00:09:26,840 --> 00:09:33,320
documentation. That started trying different operators
and my project transformed. I sort of

118
00:09:33,320 --> 00:09:35,759
got way better code than I thought. Yeah, this is this is this

119
00:09:35,799 --> 00:09:39,159
is good. I'm going to write
an article about it. Because every time

120
00:09:39,240 --> 00:09:45,279
that I sort of go from experience
with a new library, a new design

121
00:09:45,320 --> 00:09:50,919
pattern, or some a new approach, the best way for me to finally

122
00:09:50,000 --> 00:09:54,679
digest what I learned is to try
to communicate my new knowledge to others.

123
00:09:56,159 --> 00:10:00,440
So when I sort of when I
teach, I also learned. That's a

124
00:10:01,600 --> 00:10:05,960
two way thing for me. I
always read an article about anything new that

125
00:10:05,000 --> 00:10:09,440
I've done, and then it got
rolling. So I got three articles on

126
00:10:09,600 --> 00:10:13,919
RGS and Angular. I got an
article on unexpected things in RGAS. I

127
00:10:13,960 --> 00:10:16,759
wrote an article on best practices in
our yas. I guess I have six

128
00:10:16,840 --> 00:10:20,440
or seven articles on urges nice and
I think I saw some of them on

129
00:10:20,480 --> 00:10:24,759
Angular in depth. Is that where
they're all posted or just some of I

130
00:10:24,799 --> 00:10:30,679
guess one or two of them have
posted on Medium. Then in that moved

131
00:10:31,039 --> 00:10:35,039
from moved from Medium, they stopped
posting on their blog. There the only

132
00:10:35,080 --> 00:10:39,200
posted on the website and in the
in that community. So first I was

133
00:10:39,440 --> 00:10:43,559
hoping that stuff to Medium, but
then I also stopped. I don't actually

134
00:10:43,639 --> 00:10:50,039
visit Medium. I opened Medium like
a week ago and was terrified to find

135
00:10:50,039 --> 00:10:54,720
out actually one thousand followers. I
didn't know. I didn't know I had

136
00:10:54,759 --> 00:10:58,320
that many flowers on Medium. You're
popular, folly, and I didn't know

137
00:10:58,320 --> 00:11:01,600
about it because like for four or
five months I didn't given open Medium.

138
00:11:01,600 --> 00:11:07,600
I also stopped reading their photo alter
got involved with the in depth. Yeah,

139
00:11:07,759 --> 00:11:15,480
I didn't know I was talking to
celebrity wow soon, but there you

140
00:11:15,559 --> 00:11:20,440
go. Got to start somewhere,
right, Yeah. So yeah, I

141
00:11:20,799 --> 00:11:24,320
just I find this really fascinating,
and it's it's interesting too because I was

142
00:11:24,720 --> 00:11:30,240
I was working on an app myself
where we were building like a sign up

143
00:11:30,279 --> 00:11:35,559
wizard, and yeah, we kind
of put I mean, we were doing

144
00:11:35,679 --> 00:11:39,080
React, but we were putting a
whole bunch of stuff in, you know,

145
00:11:39,200 --> 00:11:43,960
basically a higher order funk or a
higher order component, right that had

146
00:11:43,960 --> 00:11:46,960
a whole bunch of components up underneath
it, so we could maintain all the

147
00:11:46,000 --> 00:11:52,600
state underneath it. And yeah,
like maintaining all of the different events that

148
00:11:52,639 --> 00:11:56,600
were going on in it and reacting
to those. It was, yeah,

149
00:11:56,720 --> 00:12:00,279
just doing it kind of the react
way, or I was trying to think

150
00:12:00,320 --> 00:12:01,919
of how to do it in egither
and we probably would have approached it much

151
00:12:01,960 --> 00:12:05,000
the same way, and you know, done things the angular way. I

152
00:12:05,080 --> 00:12:07,919
realized that, yeah, there were
a lot of events that we would have

153
00:12:07,960 --> 00:12:13,320
been emitting that yeah, something like
our xgs. I didn't even think about

154
00:12:13,320 --> 00:12:16,960
it, And I'm just going I
feel kind of silly now because yeah,

155
00:12:16,000 --> 00:12:20,799
it would have been so much easier
to just approach it with our XGS and

156
00:12:20,840 --> 00:12:24,240
just say, okay, if any
of these things happen right then amid an

157
00:12:24,279 --> 00:12:28,440
event, and if any of these
things happened amid an event, and then

158
00:12:28,960 --> 00:12:31,799
yeah, if we come back around
to any of this stuff, then you

159
00:12:31,840 --> 00:12:33,679
know or subscribe to those events and
we just know what to do. So

160
00:12:35,159 --> 00:12:39,559
yeah, the same sort of revelation
I went through when I would find to

161
00:12:39,600 --> 00:12:43,759
reflector alls of stuff. Nowadays,
when I start anything new, the team

162
00:12:43,759 --> 00:12:50,320
i'm working in as sort of receive
new projects all along from the client.

163
00:12:50,679 --> 00:12:54,600
So we'll just reining something that'll probably
have to read from scratch, using stuff

164
00:12:54,600 --> 00:12:58,440
that you already have. So the
next thing we got I was like,

165
00:12:58,600 --> 00:13:01,679
yeah, but we're going to use
ang ICs, We're going to use observables,

166
00:13:01,799 --> 00:13:07,240
We're going to use rgs a lot. My next stop is trying to

167
00:13:07,320 --> 00:13:11,440
reflector and move away from using internal
states at all. Like I'm going to

168
00:13:11,519 --> 00:13:18,200
use the anji x component store for
all the internal interactions and use ang ICs

169
00:13:18,240 --> 00:13:24,320
for everything community between the components.
It's more sort of an experiment. I'm

170
00:13:24,320 --> 00:13:26,919
not sure that that's a good idea. I will, I will try to

171
00:13:26,000 --> 00:13:31,919
do it, and I guess it
might be a good idea because but I

172
00:13:31,960 --> 00:13:35,159
can. I can now ditch normal
change detection. I can use on pushing

173
00:13:35,200 --> 00:13:39,399
all the components. Because I'm only
having observables an asy pipe, I don't

174
00:13:39,440 --> 00:13:45,440
have to use normal change detection.
I can default to on push. That's

175
00:13:45,559 --> 00:13:50,679
a nice thing to have. And
also I will sort of that will solve

176
00:13:50,679 --> 00:13:52,279
the problem that if you're like,
oh am, I going to create an

177
00:13:52,279 --> 00:13:56,360
observable byhand for everything, No,
you can just you know, use the

178
00:13:56,399 --> 00:14:01,559
store class and start from it right
store writer selectors put them in the component

179
00:14:01,639 --> 00:14:05,240
so it can be it can exist
in parallel with your component, and you

180
00:14:05,279 --> 00:14:09,399
will see all the transformations of the
store with the updata functions and so on,

181
00:14:09,600 --> 00:14:11,960
just putting their use this in fipement, so on and so on,

182
00:14:13,480 --> 00:14:18,159
and I think that might be nice. So I'm sort of going to write

183
00:14:18,200 --> 00:14:22,480
a proof of concept or something like
that. Can we can we ditch local

184
00:14:22,639 --> 00:14:28,399
internal class based states and just use
or JIST. Yeah, yeah, I'm

185
00:14:28,559 --> 00:14:31,080
kind of curious to see how that
would work out. To be perfectly honest,

186
00:14:31,120 --> 00:14:35,440
I haven't done a whole lot with
r xs or EDDRX, so yeah,

187
00:14:35,559 --> 00:14:39,679
it'll be interesting to see how it
all comes together. So what what

188
00:14:39,840 --> 00:14:43,960
is kind of the biggest thing or
the biggest problem you found r X chess

189
00:14:45,080 --> 00:14:50,360
songs within your your app? Oh
well, well all start as again.

190
00:14:50,559 --> 00:14:58,360
The biggest sort of benefit that you
get from it is removing the imparative logic

191
00:14:58,519 --> 00:15:07,039
number one benefit and not having to
synchronize two different states. So my biggest

192
00:15:07,039 --> 00:15:11,559
problem always was that I have sort
of these two pieces of data that are

193
00:15:11,559 --> 00:15:16,120
interconnected. But it's not that like
one is derived from the other or something,

194
00:15:16,399 --> 00:15:20,440
but more like the change in this
one can trigger a change in this

195
00:15:20,559 --> 00:15:24,200
one in a way if there is
some condition or something something, and that

196
00:15:24,360 --> 00:15:28,919
is really like obviously apparent in large
applications like enterprise apps, when you have

197
00:15:30,240 --> 00:15:37,159
different configurations, personal user settings that
can affect the UI and customized things and

198
00:15:37,200 --> 00:15:41,679
so on and so on and so
on. And when you switch to RG

199
00:15:43,080 --> 00:15:48,159
you sort of, even unwillingly,
you have this single source of truth,

200
00:15:48,720 --> 00:15:52,759
so you don't have to check three
or four places to see how your state

201
00:15:52,840 --> 00:15:56,960
is transformed. If there is sort
of you have this small dependency, like

202
00:15:58,279 --> 00:16:02,600
you have an engine model binding,
or you have a component and you pass

203
00:16:02,639 --> 00:16:04,559
in an input and you use the
acing pipes, or apparently this is an

204
00:16:04,559 --> 00:16:10,519
observable. If you go to that
observable, you immediately know what can happen

205
00:16:10,559 --> 00:16:12,360
to it. You see, this
is the observable. Oh, this is

206
00:16:12,360 --> 00:16:17,279
the stream. This begins here,
these operators are used on it, so

207
00:16:17,440 --> 00:16:21,240
and that's the end. So you
don't have to look anywhere because it's an

208
00:16:21,240 --> 00:16:23,399
observable. No one can modify it
from somewhere else. This is what you

209
00:16:23,440 --> 00:16:26,440
have. This is always what you
have. If there's a problem, it's

210
00:16:26,480 --> 00:16:30,639
in these five lines of code or
anything you have written. So if you

211
00:16:30,879 --> 00:16:36,240
really use that, well it's easy
to read, it's easy to find stuff

212
00:16:36,679 --> 00:16:40,320
in your code. You don't get
sort of oh, h okay, I

213
00:16:40,320 --> 00:16:45,000
have this array. Let's let's just
control app see whoever has updated, or

214
00:16:45,080 --> 00:16:48,120
let's right click and file references and
stuff like. You know you don't have.

215
00:16:48,559 --> 00:16:52,759
This is apparently everything you have.
And that's it's a big thing because

216
00:16:53,480 --> 00:17:00,600
then you will always have bugs and
obviously most of your work. Then would

217
00:17:00,639 --> 00:17:04,440
we try to find where the bug
is coming from? Because usually when we

218
00:17:04,640 --> 00:17:10,079
find in like eighty percent of cases, if we find where the bug is

219
00:17:10,119 --> 00:17:12,839
sort of located, we usually easily
fix that, right, So finding is

220
00:17:12,920 --> 00:17:18,200
sometimes as a problem understanding exactlyly piece
of code effect. So if we have

221
00:17:18,240 --> 00:17:22,799
only one piece of code that is
affecting anything, so it's very easy.

222
00:17:22,839 --> 00:17:25,920
Okay, I have five operators,
one of them is doing something wrong.

223
00:17:26,200 --> 00:17:30,759
Let's find out what is in the
five lines of code. That for me

224
00:17:30,839 --> 00:17:34,079
is the biggest benefit because in imperative
logic you always have to sort of dive

225
00:17:34,160 --> 00:17:38,039
into tran times say oh, why
do we have a loop here? Oh

226
00:17:38,160 --> 00:17:42,160
this is all Okay, this is
a ray, push something into ray,

227
00:17:42,200 --> 00:17:48,000
get something from array, and sort
of going, and that can become overwhelming,

228
00:17:48,079 --> 00:17:51,519
especially if the logic is large.
Yeah that makes sense, I mean,

229
00:17:51,960 --> 00:17:55,480
yeah, you subscribe to a stream
and then yeah, everything that happens

230
00:17:55,519 --> 00:18:00,839
downstream from that. Yeah, nobody's
modifying the array. It emits another stream

231
00:18:00,960 --> 00:18:04,720
or another array effectively, and so
it's easy to follow. I guess the

232
00:18:04,759 --> 00:18:07,920
other question that I have, just
kind of talking through your story here and

233
00:18:07,960 --> 00:18:12,119
talking through the you know, the
situation where you, you know, you

234
00:18:12,200 --> 00:18:18,279
move kind of outside of the internal
state management with angular and into observables,

235
00:18:18,519 --> 00:18:22,440
was at what point do you feel
like that makes sense? I mean,

236
00:18:22,440 --> 00:18:26,319
should you just do that from the
get go or do you wait till your

237
00:18:26,519 --> 00:18:32,839
app gets to a certain complexity before
you start using RxJS as as this kind

238
00:18:32,920 --> 00:18:37,720
of Yeah, that's actually a very
good question because for a lot of people

239
00:18:37,279 --> 00:18:47,160
usually that exact question is the sort
of obstacle that usually either don't have enough

240
00:18:47,200 --> 00:18:52,359
time to think about it, or
just don't want to reflector too much,

241
00:18:52,240 --> 00:18:57,599
or don't want to sort of overengineer
like. Lots of people said, oh,

242
00:18:57,640 --> 00:19:02,359
maybe I'm blowing these out of proportions, Maybe I don't need this whole

243
00:19:02,400 --> 00:19:06,880
lot of stuff, Maybe I'm doing
just a regular way. Yeah. My

244
00:19:07,000 --> 00:19:11,279
answer to that is usually try it
and then you know, righty sort of

245
00:19:11,359 --> 00:19:14,039
yeah. But of course, obviously
in the real world, lots of people

246
00:19:14,079 --> 00:19:17,119
that won't have enough time to do
that. Like this project, you have

247
00:19:17,200 --> 00:19:19,000
this deadline, you have to do
something, and you're not sure. Maybe

248
00:19:19,039 --> 00:19:22,880
if I try to do this this
is something you maybe we won't have time.

249
00:19:22,480 --> 00:19:25,759
And of course some people say,
oh, my application is small,

250
00:19:25,839 --> 00:19:29,720
I don't need something like that.
I was saying that in the context of

251
00:19:30,039 --> 00:19:34,279
angio X, but I said something
on Twitter like six months ago or something

252
00:19:34,319 --> 00:19:40,119
that lots of people sort of agreed
with. It went like this, if

253
00:19:40,119 --> 00:19:45,279
you have an application that is large
enough that you write it in Angular,

254
00:19:45,440 --> 00:19:48,519
then you have an application that is
large enough that you can use angio rex.

255
00:19:49,279 --> 00:19:53,480
The same for me applies to ourgs. It may sound a bit radical,

256
00:19:53,640 --> 00:19:59,200
like maybe not some people say this
small thing, or if if it's

257
00:19:59,319 --> 00:20:02,920
so small, if say it's sort
of a two pages, why do you

258
00:20:03,119 --> 00:20:06,920
need this behmit of a framework that
Angular is like, it's big, it

259
00:20:07,000 --> 00:20:11,240
has lots of things, there's lots
of feature You can write something easier if

260
00:20:11,279 --> 00:20:14,720
you. Of course, obviously,
if the angler is the only thing that

261
00:20:14,799 --> 00:20:18,559
you know, that's of course normal. That's also a situation that happens in

262
00:20:18,599 --> 00:20:23,039
real life. But in most cases, usually people would know some technology they're

263
00:20:23,039 --> 00:20:27,839
writting, some really small but if
you're writing something really big that you already

264
00:20:27,880 --> 00:20:33,240
opted to use Angular because it has
lots of feature because people usually like Angular

265
00:20:33,559 --> 00:20:38,359
for all the out of the box
stuff that it provides. Angular developers that

266
00:20:38,880 --> 00:20:42,359
use sometimes use React. Most of
the confusion that is that, oh,

267
00:20:42,400 --> 00:20:45,960
how I did stop this? We
usually in Angular we have these this,

268
00:20:47,160 --> 00:20:51,039
and I have to now go on
find for the party libraries to do something,

269
00:20:51,079 --> 00:20:55,279
maybe write something from scratch to do
that. In React. That's what

270
00:20:55,359 --> 00:21:00,079
they usually find not good in other
frameworks, especially React, because React is

271
00:21:00,079 --> 00:21:03,519
more like sort of shallow, and
that's a good thing in its own way.

272
00:21:04,079 --> 00:21:07,680
I personally enjoy Reacts. But the
thing that I like Angular moid is

273
00:21:07,720 --> 00:21:12,000
that it's more opinionated and it has
more features. So you can use this

274
00:21:12,160 --> 00:21:15,440
and this and this. You don't
have to think about HP requests or got

275
00:21:15,480 --> 00:21:18,319
you covered. You don't have to
think about forms. And for me,

276
00:21:18,359 --> 00:21:22,960
Angular forms is the best thing Angular
has. It's it's flawed, but for

277
00:21:23,079 --> 00:21:29,119
me, it's really the best like
form related library out there. It's it's

278
00:21:29,200 --> 00:21:33,240
very good everything you need, So
of course you opt in for Angular for

279
00:21:33,319 --> 00:21:37,160
all those features. So obviously,
if you need lots of features and you

280
00:21:37,160 --> 00:21:44,200
have a larger enough applications, so
why not use angis for interconnected pieces at

281
00:21:44,279 --> 00:21:48,599
least you don't even need to use
any write everything in anglics. There is

282
00:21:48,640 --> 00:21:52,680
some debate to it, but obviously
the stuff that is interconnected, the stuff

283
00:21:52,680 --> 00:21:56,319
that they shared, stayed between components, and GREX was just solve all of

284
00:21:56,359 --> 00:22:00,799
that for that for you, right, so it makes sense to do that.

285
00:22:00,960 --> 00:22:06,640
The same goes for RGS. AnGR
ICs is basically like RGS but stronger.

286
00:22:07,559 --> 00:22:11,400
If you can use RGS solve some
problems, it would be good,

287
00:22:11,880 --> 00:22:15,880
and the sooner you started, the
less problematic it would be to use that

288
00:22:15,960 --> 00:22:21,079
code, because refectoring is always harder
than writing code from scratch. Obviously,

289
00:22:22,039 --> 00:22:26,039
you usually face more bugs if you
refractory, because sometimes you might look at

290
00:22:26,079 --> 00:22:32,680
code that you yourself even have written, but you would misunderstand something there and

291
00:22:32,759 --> 00:22:37,240
refactoring into RGS it would lose some
use case or something. So of course,

292
00:22:37,279 --> 00:22:41,440
starting earlier, my advice would be, if you're beginning an angular application,

293
00:22:41,480 --> 00:22:45,640
at least consider using more RHGS or
maybe using agi X. If you're

294
00:22:45,680 --> 00:22:49,079
going into it, at least consider
it right now. That makes sense.

295
00:22:52,480 --> 00:22:55,720
It's it's kind of interesting though that
you started out with if your app is

296
00:22:55,759 --> 00:22:57,880
big enough for Angular, then it's
big enough to use r x Yes,

297
00:22:57,920 --> 00:23:02,000
because I mean I that is true, you know, and I thought,

298
00:23:02,039 --> 00:23:03,279
okay, well, the would you
use for the smaller apps? And you

299
00:23:03,279 --> 00:23:07,960
know, if you things come to
mind, like you know, use HTML

300
00:23:08,039 --> 00:23:11,680
and CSS obviously, but then you
know, you pull in like a jQuery

301
00:23:11,759 --> 00:23:15,039
or a stimulus or something like that
that just kind of puts stuff over the

302
00:23:15,079 --> 00:23:18,319
top of it, that just kind
of gets you the functionality that you need.

303
00:23:18,799 --> 00:23:22,559
That's that's really really simple. Yeah, you're pulling in Angular when you

304
00:23:22,559 --> 00:23:26,559
need something that's a little more,
that has more depth to the experience you're

305
00:23:26,599 --> 00:23:32,000
creating. Yeah, that makes a
ton of sense. So what I guess

306
00:23:32,039 --> 00:23:33,960
the other thing that I'm wondering about
is, you know, now that you've

307
00:23:34,119 --> 00:23:38,640
kind of gone into the deep end
with r XJS, what do you find

308
00:23:38,720 --> 00:23:42,000
are the things that people misunderstand about
it? Like where where do people get

309
00:23:42,039 --> 00:23:48,079
stuck on on rxs being a solution
or get stuck on what it can and

310
00:23:48,160 --> 00:23:53,079
can't do? Well. I had
experience with lots of developers that tried rgs,

311
00:23:53,119 --> 00:23:56,839
both in our team and outside,
so I noticed that there are many

312
00:23:57,000 --> 00:24:04,759
free problems with all just the people
sort of not write the best code that

313
00:24:04,799 --> 00:24:11,079
they could do, and all of
them are connected to how they use RGS,

314
00:24:11,160 --> 00:24:18,200
so they either not use it enough, misuse it, or plainly abusing

315
00:24:18,240 --> 00:24:25,240
it. Okay, So I tried
to cover all the three cases. So

316
00:24:25,279 --> 00:24:27,559
obviously first is not using it enough
because there's a problem you can miss all

317
00:24:27,640 --> 00:24:34,119
with our egs, people won't try
to apply reactive logic to it. For

318
00:24:34,160 --> 00:24:38,160
that, I've written my very first
article and it's called the RGS in Angular.

319
00:24:38,359 --> 00:24:44,119
It was the first one the three
parts, and in part one I

320
00:24:44,160 --> 00:24:52,079
wrote about how you can change your
imperative logic to more reactive or functional programming

321
00:24:52,079 --> 00:24:56,680
style to a more declarative approach.
Okay. So it involved trying to understand

322
00:24:56,680 --> 00:25:00,200
the source of data, trying to
understand what the fact date and how it

323
00:25:00,359 --> 00:25:07,920
gets transformed, and then getting the
final result result and displaying it to in

324
00:25:07,960 --> 00:25:12,359
the template in the UI. So
those were the steps that you can sort

325
00:25:12,400 --> 00:25:15,839
of try to apply to any problem. Like if you've got I'm going to

326
00:25:15,839 --> 00:25:18,759
develop this feature, I can try
to use the steps to understand how can

327
00:25:18,799 --> 00:25:22,960
I convert it right? Using rjets, you can sort of always try to

328
00:25:22,000 --> 00:25:26,880
do that. So even if you
don't convert something something is large enough you

329
00:25:26,880 --> 00:25:29,960
have three factor you don't have time, you still can like sort of process

330
00:25:30,000 --> 00:25:33,480
in your head. I won't think
really much. You can try to think

331
00:25:33,519 --> 00:25:38,400
about for ten minutes. If you
sort of understand instantly how the flow of

332
00:25:38,400 --> 00:25:41,000
the data is, now, okay, you can go forward and just try

333
00:25:41,039 --> 00:25:45,720
to right or jets. People often
don't do that. I know people that

334
00:25:45,960 --> 00:25:48,680
know urges as well. I know
lots of operators how they were some new

335
00:25:48,720 --> 00:25:52,519
ones, but they just won't use
them. It's like, yeah, okay,

336
00:25:52,519 --> 00:25:53,960
I wrote five lines of what it
works. Yeah, I don't think

337
00:25:53,960 --> 00:25:59,000
the rjets for this, but really
it would look more elegant and more scalable

338
00:25:59,079 --> 00:26:02,880
if they did dre even even for
the five lines. So that's the first

339
00:26:02,880 --> 00:26:07,799
problem, not using it enough,
not sort of getting into it and trying

340
00:26:07,920 --> 00:26:11,279
to apply to all at least mentally
apply to all the problems that they try

341
00:26:11,319 --> 00:26:14,680
to solve. So there's that point
one, and then it comes point to

342
00:26:15,000 --> 00:26:18,759
sort of misusing our ages. So
how people do misuse urges is usually what

343
00:26:18,839 --> 00:26:22,960
they do in the first text.
So a lot of some people will come

344
00:26:22,000 --> 00:26:26,160
and think, okay, I'm not
using our ages now, I want to

345
00:26:26,240 --> 00:26:29,319
use it more. That's a really
good start. But obviously they are going

346
00:26:29,359 --> 00:26:33,599
to make mistakes on the way as
all of us is done. So what

347
00:26:33,640 --> 00:26:40,640
would they do is they will sort
of start using observables and not really appreciating

348
00:26:40,720 --> 00:26:45,319
all the all the upsides that they
provide, like subscribing a lot. You

349
00:26:45,319 --> 00:26:49,000
don't really need to subscribe to an
observable, like explicitly you can use the

350
00:26:49,000 --> 00:26:52,000
a supply. So that's the first
thing people just teach it. They will

351
00:26:52,480 --> 00:26:59,000
write subscribe and a coll back with
lots of imperative logic. Then they will

352
00:26:59,079 --> 00:27:03,400
use that will use features of the
language instead of using operators. Like in

353
00:27:03,400 --> 00:27:07,839
one of my articles about best practices
I I was sort of talking about how

354
00:27:07,920 --> 00:27:15,119
can change how your subscribe logic.
It looks like the sort of if you,

355
00:27:15,240 --> 00:27:18,759
for example, an if state,
so you're read subscribe, you get

356
00:27:18,759 --> 00:27:22,599
some data, then you read if
data is true something something, then do

357
00:27:22,799 --> 00:27:27,279
something something in our gest you can
use the filter operators for that. If

358
00:27:27,319 --> 00:27:32,519
you just read filter and suppress function
would be cold at all, okay,

359
00:27:32,759 --> 00:27:38,279
right, will and it will look
way more sort of concise, like we'll

360
00:27:38,319 --> 00:27:41,400
look if you see the filter.
Okay, there are some conditions that are

361
00:27:41,440 --> 00:27:45,759
not allowed. Okay, you see
that immediately in subscribe you may have a

362
00:27:45,839 --> 00:27:48,400
large function inside and if so,
you said you have to go through and

363
00:27:48,480 --> 00:27:52,079
read these subscribe functions. You really
don't need that red filter. And the

364
00:27:52,079 --> 00:27:56,960
condition is obviously after that you don't
perform anything, and that is also sort

365
00:27:57,000 --> 00:28:03,160
of better bat erdd. But you
know, if you're more or less perfection

366
00:28:03,279 --> 00:28:07,039
is it would be great. So
you don't need to execute five operators and

367
00:28:07,079 --> 00:28:10,319
then don't do nothing in the subscribe
because the condition is not met. You

368
00:28:10,359 --> 00:28:14,160
can put filter wherever potato is ready
that you can check and not allow all

369
00:28:14,200 --> 00:28:17,200
the other operators to work. But
there's also a nice thing to do,

370
00:28:17,839 --> 00:28:22,359
or people would not know enough operators. Obviously, you can know all of

371
00:28:22,400 --> 00:28:26,599
the operators too much and you don't
really need most of them. But I

372
00:28:26,599 --> 00:28:29,799
guess one good thing you can do
is one day when you have two three

373
00:28:29,880 --> 00:28:34,680
spare hours, you can open our
HGS documentation website and just scroll for operators

374
00:28:34,839 --> 00:28:40,480
and find stuff that is interesting.
There are also there are operators that come

375
00:28:40,480 --> 00:28:45,160
in sort of families, like frotal, frotal times, window, the bounced

376
00:28:45,200 --> 00:28:49,240
time, the bounce and so on, so you can sort of know about

377
00:28:49,279 --> 00:28:52,039
them. You don't need to write
examples all of them. Just know that

378
00:28:52,240 --> 00:28:56,279
there is an operator that does the
bounce something, so in the future we'll

379
00:28:56,359 --> 00:29:00,720
remember that. Okay, I've heard
about some operators that might have used be

380
00:29:00,960 --> 00:29:04,359
of use in this case and go
use it. Lots of times people don't

381
00:29:04,359 --> 00:29:08,640
do that, So that's an example
of sort of misusing garages like you are

382
00:29:08,720 --> 00:29:15,119
using garage jazz, and it actually
provides a very nice solution to your problem

383
00:29:15,200 --> 00:29:19,839
with one operator to a combination of
two custom opera sorry building operators, but

384
00:29:19,960 --> 00:29:25,440
you don't know about them, or
you don't sort of think to enough deeply

385
00:29:25,519 --> 00:29:27,640
enough about that particular observable if you
don't use it, and you end up

386
00:29:27,720 --> 00:29:37,400
with worse code. So that's the
sort of next bad problem with our jazz

387
00:29:37,519 --> 00:29:41,319
in that case. So people use
it but don't sort of get deep enough

388
00:29:41,359 --> 00:29:47,839
to really harness all the benefits that
it provides. Okay, Yeah, and

389
00:29:47,880 --> 00:29:52,279
then we of course arrived at the
third point, that is just using Yeah,

390
00:29:52,720 --> 00:29:56,559
I have seen pretty horrible code that
to this day I don't understand why

391
00:29:56,599 --> 00:30:03,079
people opted to do that, because
would they do is sort of everything was

392
00:30:03,160 --> 00:30:07,759
unobservable, but in a sort of
scattered way, so they would have properties

393
00:30:07,839 --> 00:30:12,359
fortune that would have an event.
I don't exactly exactly remember how that logic

394
00:30:12,480 --> 00:30:18,039
went. There's this chat window.
It looked like Facebook Messenger sort of in

395
00:30:18,039 --> 00:30:22,640
the You have conversations on the left
and you have the mik chat window in

396
00:30:22,680 --> 00:30:26,640
the middle. So the thing is
you click on the conversation, there is

397
00:30:26,680 --> 00:30:32,759
an HTP request, It loads the
last twenty or something messages and it displays.

398
00:30:33,160 --> 00:30:36,359
So of course you can do it, say we didn't. We haven't

399
00:30:36,400 --> 00:30:40,759
been using any state management back then
with USA and GLICS or something, so

400
00:30:40,839 --> 00:30:45,640
you could do it in a more
or less practical way without our Yes,

401
00:30:45,839 --> 00:30:49,680
okay, you could just click handler
that would call a service low data passive

402
00:30:49,720 --> 00:30:55,200
with inputs to another component and its
grander or something. But what they really

403
00:30:55,200 --> 00:30:57,160
did was like, oh, we
want to be reactive in a way,

404
00:30:57,799 --> 00:31:03,960
so instead of sort of and if
understanding how their data works creating obsurables in

405
00:31:03,359 --> 00:31:07,039
ALMOSTLMS combining, then they would just
be like, okay, the here is

406
00:31:07,079 --> 00:31:11,359
the subject that notifies me about the
click on the butt. Essentially, what

407
00:31:11,519 --> 00:31:15,759
that subject was doing was just it
would emit from the button, and it

408
00:31:15,799 --> 00:31:21,759
was really useless and it made code
very unreadable because now you cannot even navigate

409
00:31:21,880 --> 00:31:26,000
using the ID tooling to find out, well, okay, this dysfunction.

410
00:31:26,799 --> 00:31:33,759
Next this subject who has subscribed to
it. And then in some service somewhere

411
00:31:33,839 --> 00:31:37,440
far away there is someone subscribed to
it and it gets it, loads some

412
00:31:37,640 --> 00:31:41,799
data, and then pass it to
another subject. So you have to sort

413
00:31:41,799 --> 00:31:47,400
of go through all these have events
to find out, well, okay,

414
00:31:47,400 --> 00:31:49,720
here is a service, Okay,
find the data is lowly. Oh oh

415
00:31:49,799 --> 00:31:55,359
my god, there's another observable,
another subject. Now this subject is passed

416
00:31:55,359 --> 00:31:59,359
to another service that is injected in
the other component that needs it right,

417
00:31:59,440 --> 00:32:02,200
and then the other that component subscribes
to this. It's sort of a big,

418
00:32:02,279 --> 00:32:08,519
large and aunecessary chain of subjects that
are calling each other sendic events.

419
00:32:09,119 --> 00:32:14,640
You really didn't need that. That
was like normal. It really was an

420
00:32:14,680 --> 00:32:17,240
abuse. I cannot find that sort
of that I can describe it with.

421
00:32:17,599 --> 00:32:22,640
Of course, it came from not
that people would overleak enthusiastic about or it's

422
00:32:22,680 --> 00:32:27,000
just oh okay, we're going to
sort of that's why you need solutions like

423
00:32:27,039 --> 00:32:30,880
in JRX. The good thing about
NANJRS is like, okay, if you

424
00:32:30,880 --> 00:32:34,799
need some data to selected from the
store, you don't have to work with

425
00:32:35,119 --> 00:32:39,920
fifteen observables. There is one source
of truth, all of your status inside

426
00:32:40,000 --> 00:32:44,519
it. You can use the reducer
function to reason about it, so you

427
00:32:44,599 --> 00:32:47,279
don't have a problem. You can
always follow the logic. If okay,

428
00:32:47,359 --> 00:32:52,440
THEATA is not transformed in a way
that you expected, Okay, I will

429
00:32:52,440 --> 00:32:57,039
go deback the reducer function and that's
it. Or I will use the redax

430
00:32:57,119 --> 00:33:00,759
dev tools extension and just find out, okay, after this action something changed,

431
00:33:01,039 --> 00:33:04,240
Okay, I will just check the
function. That's a pure function,

432
00:33:04,359 --> 00:33:07,440
can easily reason about it or not. But in this case you've got the

433
00:33:08,200 --> 00:33:15,119
like horrible mess that it's painally,
it's abuse of the thing. So that's

434
00:33:15,680 --> 00:33:21,000
the main problem that people face when
I start doing garage yeats. Usually that's

435
00:33:21,000 --> 00:33:25,319
why they either not think deeply about
it, either think too deeply about it,

436
00:33:25,359 --> 00:33:30,720
and in the end they would probably
get disappointed. They would think,

437
00:33:30,720 --> 00:33:32,400
oh, this didn't suit me well, But the problem is they didn't use

438
00:33:32,440 --> 00:33:36,160
it in a way that was intended. Right, that makes sense. I

439
00:33:36,200 --> 00:33:39,160
could see myself doing the last one, just trying to separate concerns and then

440
00:33:39,640 --> 00:33:47,440
yeah, having stuff all over the
place, so yeah, subscribe to this,

441
00:33:47,559 --> 00:33:51,279
and then yeah, just do the
process, just do the work.

442
00:33:51,799 --> 00:33:57,480
That's why actually in the urges the
community, don't subscribe, just don't subpribe,

443
00:33:58,480 --> 00:34:04,480
subscribe and like the nice things about
I actually worked on a document for

444
00:34:04,640 --> 00:34:07,719
the rig documentation that they wanted to
have a best PRACTICI page. There was

445
00:34:07,760 --> 00:34:12,599
an open issue, submitted a draft
pour because it is in the process of

446
00:34:12,719 --> 00:34:16,400
work, and different community members and
contributors wrote in the comments what would they

447
00:34:16,480 --> 00:34:22,000
like to have in the drafts that
I wrote sort of and one of the

448
00:34:22,039 --> 00:34:30,519
main things that was noticed this,
let's inform people that use rgs about the

449
00:34:30,559 --> 00:34:35,960
fact that subscribed and composibility. And
composibility is actually why we use that.

450
00:34:36,199 --> 00:34:38,440
When you reade subscribe, you cannot
use any operators, right, it's over.

451
00:34:38,800 --> 00:34:42,800
You have the data to do anything
with it. It's usually in perative

452
00:34:42,840 --> 00:34:46,639
logic, so when you subscribe,
it's end the story. So obviously you

453
00:34:46,719 --> 00:34:51,440
need to subscribe. Observes that they
don't subscribe to don't do anything, but

454
00:34:51,480 --> 00:34:54,719
you don't need to do it explicitly
and do all that heavy listening inside it.

455
00:34:54,760 --> 00:34:59,760
In Angular, we have the acent
PIPE and also with JRX. If

456
00:34:59,800 --> 00:35:04,840
you there is this experimental injuries component
that provides directives that you can use.

457
00:35:05,119 --> 00:35:07,400
There's the ngurics less directive. It's
very nice thing. You can just extract

458
00:35:07,800 --> 00:35:14,199
the observable results to a variable local
variable, new template and use it.

459
00:35:14,199 --> 00:35:20,480
It's better than writing engief as something
to use it without the A think right,

460
00:35:21,000 --> 00:35:22,320
it's a very nice thing. I
use it in my project a lot.

461
00:35:23,000 --> 00:35:27,559
So you really don't subscribe menus the
proof. After that, you just

462
00:35:28,000 --> 00:35:31,000
use the value you need to value
in the template. If you're writing Angular,

463
00:35:31,360 --> 00:35:34,800
you don't need the state for the
sake of the state. You need

464
00:35:34,800 --> 00:35:37,599
something to deplay in the UI.
If something is never displayed in the UI,

465
00:35:37,679 --> 00:35:43,320
you probably don't need that either display
that exact state in the UI or

466
00:35:43,480 --> 00:35:46,679
some result of that state, something
that happens because you have a state like

467
00:35:46,760 --> 00:35:52,079
this so rapidly and observable, take
it, use the actin pipe and it's

468
00:35:52,079 --> 00:35:57,440
over. There is only one case
that is I sort of allow people to

469
00:35:57,679 --> 00:36:00,719
subscribe in our projects. When we
do code review, we always try to

470
00:36:00,719 --> 00:36:04,920
follow the rule and not subscribe manually. And the only case that we allow

471
00:36:05,000 --> 00:36:07,760
to do that is if you're using
third party code that only has an pre

472
00:36:07,800 --> 00:36:14,880
imperative approach. The best example is
form controls in Angular. They have a

473
00:36:15,079 --> 00:36:20,280
disabled function and enable functions. They
are imperative functions. So for example,

474
00:36:20,360 --> 00:36:24,360
if I have an observable of user
permissions or something, for example, if

475
00:36:24,360 --> 00:36:30,079
you don't have permission x, this
input should be disabled. So if you're

476
00:36:30,159 --> 00:36:37,360
using form controls, then you will
have to subscribe and see if the permission

477
00:36:37,440 --> 00:36:42,480
is not there. You have to
do control that disable that imperative loogy.

478
00:36:42,480 --> 00:36:46,400
You cannot just put it in a
template. With template driven forms, you

479
00:36:46,440 --> 00:36:52,440
can't dig that. You can use
the disabled attribute on the impetlment or something,

480
00:36:52,760 --> 00:36:57,800
but the reactive forms don't allow for
that, which is sort of weird

481
00:36:57,920 --> 00:37:02,679
because reacting forms reactive not imperative,
which they usually are. But that's sort

482
00:37:02,679 --> 00:37:07,519
of have lots of imperative questions.
Marquesstage said, disabled, I don't know,

483
00:37:07,599 --> 00:37:09,199
disabled, enable, and so on
and so on. Lot most of

484
00:37:09,239 --> 00:37:15,360
them are a bit imperative. So
that's the only case that probably sort.

485
00:37:15,360 --> 00:37:17,880
If you don't you don't have a
choice, or you have a library function

486
00:37:19,000 --> 00:37:22,440
that does something something, you have
to call it. You cannot just write

487
00:37:22,480 --> 00:37:27,760
an observable, so that's the only
case that we'll all do that. That's

488
00:37:27,800 --> 00:37:30,599
a nice thing to start from me. If you're right, subscribe, maybe

489
00:37:30,639 --> 00:37:35,079
something isn't fair right, try to
understand how can do it better? Sort

490
00:37:35,079 --> 00:37:39,239
of provided like a point of thinking, like how can I make myge Orgies

491
00:37:39,280 --> 00:37:43,840
cade better? Let's take how many
subscribes do I have and how many can

492
00:37:43,920 --> 00:37:49,239
I pitch them? A good starting
point. If you have a RGS code

493
00:37:49,239 --> 00:37:52,280
basically want to refractory it makes sense. Cool. What about testing r XGS.

494
00:37:52,679 --> 00:37:59,880
That's sort of my biggest weakness is
that I don't do much testing because

495
00:38:00,440 --> 00:38:05,880
the requirements, yeah don't they don't. Requirements don't from our clients, don't

496
00:38:05,960 --> 00:38:09,599
go into the unit testing or something. So most of the testing that I

497
00:38:09,679 --> 00:38:15,400
have done have been like experimental.
But of course, if we talk in

498
00:38:15,480 --> 00:38:22,960
theory about testing rhes, there is
there are marble tests. And if you

499
00:38:22,000 --> 00:38:27,559
don't have side effects in your are
jazz. So if you don't use the

500
00:38:27,599 --> 00:38:31,639
tap function the tape operator, which
is also considered a bad practice, you

501
00:38:31,719 --> 00:38:36,159
don't if you only if you really
have side effects that you really really have

502
00:38:36,239 --> 00:38:39,800
to have something like that. If
you don't write the type function, you

503
00:38:39,880 --> 00:38:45,599
sort of have a bunch of pure
functions. Okay, you can more or

504
00:38:45,719 --> 00:38:51,800
less easily test that even without the
marble testing, just using basic unit tests.

505
00:38:52,519 --> 00:38:55,280
You can do that in the very
end. If you have some properties

506
00:38:55,320 --> 00:38:59,960
on a class that are observable,
you can just okay, create a new

507
00:39:00,039 --> 00:39:04,760
and of that class, maybe subscribe
to the observable. See what data comes,

508
00:39:04,840 --> 00:39:07,719
and how you can sort of manipulate
the source of the data, like

509
00:39:07,000 --> 00:39:10,920
is it coming from an event?
You can always sort of trigger that event.

510
00:39:12,119 --> 00:39:15,639
They trigger that event, see how
the observable goes. You don't need

511
00:39:15,719 --> 00:39:19,320
to sort of test every other operator. The operators are working, they are

512
00:39:19,440 --> 00:39:22,719
tested in the library. You only
need to test the result. You can

513
00:39:22,000 --> 00:39:27,039
treat it sort of like it's just
a property that I have to subscribe to.

514
00:39:27,400 --> 00:39:30,400
I'm checking for the data, so
trigger an event. See what is

515
00:39:30,440 --> 00:39:36,639
the data? So I guess.
It would also sort of make testing easier

516
00:39:36,719 --> 00:39:42,000
if you and if you use NGRX, and testing is way way easier because

517
00:39:42,199 --> 00:39:45,400
you sort of have to test just
two things. You have to test three

518
00:39:45,440 --> 00:39:47,800
things. Sorry, you have to
selectors, which usually are pure functions,

519
00:39:47,840 --> 00:39:52,280
so they should be pure functions,
so it's easy to test, right,

520
00:39:52,639 --> 00:39:55,719
It's just functions. You have the
state. You know about the state.

521
00:39:55,800 --> 00:40:00,639
You're the one providing a mocked version
of state to the unit test, so

522
00:40:00,719 --> 00:40:05,079
you can just check the results and
it's okay. If you get the results

523
00:40:05,119 --> 00:40:07,280
to expect it, it's okay,
very easy to test, and they usually

524
00:40:07,320 --> 00:40:13,559
don't have very many use cases.
You have to test reducers, which also

525
00:40:13,559 --> 00:40:20,000
again reducer pure function. Provide the
action better payload, get the results it's

526
00:40:20,039 --> 00:40:23,039
expected. Okay, it's done.
You don't have to There are not lots

527
00:40:23,039 --> 00:40:29,000
of different cases and other global variables
that can affect the reduce the pure function

528
00:40:30,119 --> 00:40:34,800
test. The only thing that is
probably less you to test is the effects,

529
00:40:35,079 --> 00:40:38,079
but that's really the main point.
If you have effects in gy X,

530
00:40:38,760 --> 00:40:42,519
that's the only place that you have
effects. So if you get that

531
00:40:42,559 --> 00:40:46,159
covered, most of the services you
have, you throw in the action.

532
00:40:46,760 --> 00:40:52,880
See if the resulting action comes with
the payload that you've expected. So it's

533
00:40:52,920 --> 00:40:55,400
sort of the same. It's sort
of the same thing that you actually with

534
00:40:55,440 --> 00:41:00,280
the reducer. It's just not a
pure function. It does something on the

535
00:41:00,280 --> 00:41:05,639
side like calling a server or maybe
go to local storage or something. But

536
00:41:05,679 --> 00:41:08,320
you don't have to Again, you
don't have to test that because there's another

537
00:41:08,400 --> 00:41:12,440
service doing it. You have you
have you have a unit test for bed

538
00:41:12,480 --> 00:41:17,920
service. Like for practical examples,
say you have an orders service that loads

539
00:41:19,119 --> 00:41:22,039
orders. Okay, the data,
and you have the order effects. They

540
00:41:22,079 --> 00:41:25,880
don't really need to test order service
in the order effect test. You will

541
00:41:25,960 --> 00:41:30,599
just test if there is an action
called load orders. Okay, here's the

542
00:41:30,639 --> 00:41:36,559
action with this payload, and I
expect this result. I expect this action

543
00:41:36,679 --> 00:41:40,320
with this result. So you don't
really care what happens inside it, even

544
00:41:40,360 --> 00:41:44,280
if it does some complicated logic.
You don't care care about the results.

545
00:41:44,280 --> 00:41:51,159
You can sort of sort of treated
like quasi pure function. It isn't obviously,

546
00:41:51,840 --> 00:41:55,440
but because you have mocked the service, it will always return the result

547
00:41:55,440 --> 00:42:00,599
that you've expected if you if you
have written the correct code in the effect

548
00:42:00,679 --> 00:42:06,639
that that's what you're testing for.
And then you will test the order service

549
00:42:06,840 --> 00:42:10,360
separately, which actually would be just
marking the back end with I don't know,

550
00:42:12,280 --> 00:42:15,880
mock et cetera backhand or something something, but the HTP testing library in

551
00:42:15,199 --> 00:42:21,320
Angular testing, so testing galxies would
also be busy. So essentially you get

552
00:42:21,360 --> 00:42:27,800
two interconnected classes that are both one
hundred percent test covered and that really made

553
00:42:27,960 --> 00:42:30,360
your job easier. If you have
been doing all of that in the component,

554
00:42:30,840 --> 00:42:34,599
then that component you need test would
be really big. You will have

555
00:42:34,639 --> 00:42:37,639
to mock the service and put it. Okay, oh, this component uses

556
00:42:37,679 --> 00:42:40,119
five or seven services for example,
you have to make all of them,

557
00:42:40,360 --> 00:42:45,159
put them inside this component, and
then check for it in every way,

558
00:42:45,239 --> 00:42:47,400
like oh, this boton is clicked. This function is called this service.

559
00:42:47,599 --> 00:42:52,440
Several function is called mock. Data
is here. It's rendered something something and

560
00:42:52,559 --> 00:42:57,719
GRX saves you from that too.
In in your components, you usually only

561
00:42:58,320 --> 00:43:01,559
if component is that's a bit small
and uses only external state, inject only

562
00:43:01,599 --> 00:43:06,440
the store. Inject the store.
There's one. You don't need to mock

563
00:43:06,519 --> 00:43:09,079
the story. Don't mock the story. Jr X test. You move the

564
00:43:09,119 --> 00:43:14,000
selectors, and it's very easy to
make a selector because essentially just say,

565
00:43:14,039 --> 00:43:16,119
oh, this is the data that
this selector is going to return, and

566
00:43:16,159 --> 00:43:22,559
that's it, right the elector function
Like, okay, I haven't the orders

567
00:43:22,639 --> 00:43:27,280
property that I already use in the
component. Okay, I mock the selector

568
00:43:27,519 --> 00:43:30,239
and I'm like, now there are
three orders. Now I'm mog now there

569
00:43:30,239 --> 00:43:32,880
are five order orders. Let's see
what happened in the U I L eight

570
00:43:32,960 --> 00:43:37,679
words. It's really easier to do
that then to try to mow. You

571
00:43:37,719 --> 00:43:43,119
don't mock the dependency rather just moke
the data with the selector functions. Right,

572
00:43:43,320 --> 00:43:45,199
Yeah, that makes sense. All
right, let's see. Is there

573
00:43:45,360 --> 00:43:50,039
anything else that we should cover?
I guess The next question I have is

574
00:43:50,239 --> 00:43:52,679
if people want to follow you,
because you have a thousand followers on Medium.

575
00:43:52,719 --> 00:43:55,679
Now, if people want to make
it one thousand and one, I

576
00:43:55,679 --> 00:43:59,239
guess, then go on Medium and
find you there. And then I'm also

577
00:43:59,280 --> 00:44:02,000
wondering about like Twitter and GitHub and
anywhere else that you want people to follow

578
00:44:02,000 --> 00:44:07,079
you at. Yeah. I usually
want people to follow me on Twitter because

579
00:44:07,199 --> 00:44:10,960
I usually that'll post stuff there because
if I remember correct, you cannot follow

580
00:44:12,239 --> 00:44:15,000
alter on in depth. I think
we don't have the functionality there, so

581
00:44:15,440 --> 00:44:21,480
but I always post my articles and
some other folks on Twitter. So I

582
00:44:21,480 --> 00:44:27,119
guess follow me on Twitter. Okay, what's your Twitter handle? It's Armando

583
00:44:27,280 --> 00:44:30,840
true. All right, Well,
we'll make sure that we have a link

584
00:44:30,920 --> 00:44:32,159
to that in the show notes.
If you just put in the chat put

585
00:44:32,199 --> 00:44:37,639
it over there. Yeah, yeah, okay, And then the last thing

586
00:44:37,679 --> 00:44:40,840
that we do on the show is
picks and picks is just us shouting out

587
00:44:40,840 --> 00:44:45,000
about stuff that we like, stuff
that is making life better and more enjoyable

588
00:44:45,079 --> 00:44:49,000
or whatever. Right, So I'll
go ahead and go first, just to

589
00:44:50,000 --> 00:44:52,639
get things rolling. So I've been
listening to and I have to say,

590
00:44:52,639 --> 00:44:58,440
I'm really slow on the fiction books
just because I don't have a ton of

591
00:44:58,440 --> 00:45:00,719
time. But I've really been enjoying
these books. I'm listening through them for

592
00:45:00,800 --> 00:45:05,880
the third or fourth time. I
listened through the books whenever a new one

593
00:45:05,880 --> 00:45:07,400
comes out, and a new one
came out last year. And yes,

594
00:45:07,440 --> 00:45:12,239
I'm slow, Yes the book came
out last year. But I've been listening

595
00:45:12,320 --> 00:45:17,159
to The Stormlight Archives by Brandon Sanderson. And for those of you who aren't

596
00:45:17,159 --> 00:45:21,639
familiar with it, it's a fictional
series. It's a fantasy series. It

597
00:45:21,679 --> 00:45:27,039
takes place on another world where how
do I talk about it without spoiling it

598
00:45:27,079 --> 00:45:35,039
anyway, they have these powers where
they essentially can channel light that Okay,

599
00:45:35,079 --> 00:45:37,079
I'll explain a little bit of it, but I'm not going to take too

600
00:45:37,119 --> 00:45:39,559
long because I don't want to take
too long. But effectively, so there's

601
00:45:39,599 --> 00:45:45,000
this there's storms that come through the
you know, on a regular basis,

602
00:45:45,599 --> 00:45:49,800
and when the storms come through,
they infuse gems with light. They call

603
00:45:49,880 --> 00:45:52,800
it storm light, and then there
are certain people that can take that storm

604
00:45:52,880 --> 00:45:58,760
light and use it to do magic. And anyway, the thing though with

605
00:45:58,840 --> 00:46:04,119
Brandon Sanderson's book is the magic systems
are interesting, but the characters and the

606
00:46:05,000 --> 00:46:10,880
storylines and stuff are way more interesting. And to me at least, that's

607
00:46:10,920 --> 00:46:15,480
the thing that I really love about
a lot of the movies and books that

608
00:46:15,559 --> 00:46:20,239
I enjoy are kind of those things. Right. That's why a lot of

609
00:46:20,239 --> 00:46:23,719
people really enjoyed the original Star Wars
trilogy, right, is because the characters

610
00:46:23,719 --> 00:46:28,920
were rich, It followed the hero's
journey. It you know, yes,

611
00:46:29,000 --> 00:46:34,039
I'm kind of a story writing nerd, but anyway, so it followed some

612
00:46:34,079 --> 00:46:37,800
of the formulas that we're familiar with, and you know, we really really

613
00:46:37,840 --> 00:46:40,920
love the characters. And it's interesting
because I talk to people about some of

614
00:46:40,960 --> 00:46:44,840
the later Star Wars series, you
know, whether it be the prequels,

615
00:46:44,880 --> 00:46:46,239
you know, episodes one, two, and three, and people were just

616
00:46:46,280 --> 00:46:49,519
like they just weren't as good.
And I don't know why, right,

617
00:46:49,559 --> 00:46:52,800
because the special effects were better than
everything else, and it's because the characters

618
00:46:52,800 --> 00:46:57,880
weren't as interesting, right, You
kind of knew who Obi Wan Kenobi was

619
00:46:57,880 --> 00:47:00,039
going to end up being, and
he got a little more interesting as he

620
00:47:00,280 --> 00:47:06,239
started pushing back in some ways against
you know, some of the other Jedi

621
00:47:06,320 --> 00:47:09,519
Masters. But you know, Anakin
was just this whiny kid through the whole

622
00:47:09,559 --> 00:47:13,199
thing, and he just wasn't that
interesting to watch, right, There was

623
00:47:13,239 --> 00:47:16,119
no progression for the character. You
know, the same with Padme. You

624
00:47:16,159 --> 00:47:21,119
know, she was just always you
know, she struggled with her decision to

625
00:47:21,119 --> 00:47:22,960
be with Anakin, but that was
pretty much it, right or the new

626
00:47:23,039 --> 00:47:28,840
series even you know, where you
don't see the same internal struggles that you

627
00:47:28,880 --> 00:47:34,239
saw from Luke and Leah and Hahn
and the struggles with who they were from

628
00:47:34,760 --> 00:47:38,239
Ray or Finn or any of those
characters, right, And that's what we

629
00:47:38,320 --> 00:47:43,320
wanted to see. And in fact, they actually undid some of the growth

630
00:47:43,360 --> 00:47:45,599
that you saw from Luke in the
original series when they brought him back,

631
00:47:45,960 --> 00:47:51,119
and a lot of people had issues
with that. And so anyway, Brandon

632
00:47:51,159 --> 00:47:52,800
does a really good job with his
characters in the way that he puts them

633
00:47:52,840 --> 00:47:58,239
together and then some of the situations
that they find themselves in and you know,

634
00:47:58,360 --> 00:48:01,320
trying to make their way through this
universe and all of his well,

635
00:48:01,440 --> 00:48:05,360
I shouldn't say all. A lot
of his books take place in the same

636
00:48:05,480 --> 00:48:08,519
universe, which he calls the Kosmeir, and so that's always fun too because

637
00:48:08,519 --> 00:48:13,760
you're wondering at what point they're going
to start meeting each other, right,

638
00:48:13,920 --> 00:48:17,360
because there are ways for them to
travel between the worlds, and none of

639
00:48:17,360 --> 00:48:22,960
his books have done that yet with
more than like a handful of characters.

640
00:48:22,159 --> 00:48:25,599
There are a few characters that move
between worlds, and you do meet them

641
00:48:25,599 --> 00:48:29,800
as you move through the worlds.
The storm Light Archives actually has one character

642
00:48:29,840 --> 00:48:31,599
that you've seen in several of the
books, but he kind of has this

643
00:48:31,719 --> 00:48:37,360
passing role and in this book,
in the first Stormlight Archives book, he's

644
00:48:37,480 --> 00:48:43,000
actually almost a main character. So
that was fun. But anyway, I'm

645
00:48:43,039 --> 00:48:46,199
nerding out and I need to just, you know, get off the bandwagon

646
00:48:46,239 --> 00:48:50,119
here for a minute. I really
enjoyed the book, so go check those

647
00:48:50,159 --> 00:48:52,400
out. The first book is The
Way of Kings. The second book is

648
00:48:52,599 --> 00:48:57,119
Words of Radiance, and that's the
one I'm listening to right now, and

649
00:48:57,199 --> 00:48:59,719
so go check those out. I'll
put a link to those in the show

650
00:48:59,800 --> 00:49:01,199
notes. I listened to them on
Audible, so I'll put a link to

651
00:49:01,199 --> 00:49:06,599
Audible as well. And then the
other pick that I have is the dev

652
00:49:06,639 --> 00:49:08,960
Influencers Accelerator. I'm just going to
keep reminding people that is out there.

653
00:49:09,400 --> 00:49:15,639
Basically, the idea is that if
you're trying to get your career to go

654
00:49:15,679 --> 00:49:17,079
to the next level, and you
want to make an impact on the community

655
00:49:17,119 --> 00:49:20,599
while you do it, and eventually
you'd like to get paid for it,

656
00:49:20,960 --> 00:49:24,239
then the dev Influencers Accelerator is for
you. And basically what we're doing is

657
00:49:24,239 --> 00:49:29,679
we're walking you through the process of
starting a hit podcast and then we're gonna

658
00:49:29,920 --> 00:49:35,039
take you from producing the podcast and
having a podcast that is going out every

659
00:49:35,079 --> 00:49:40,000
week to growing it rapidly and I
think I can get people to be in

660
00:49:40,039 --> 00:49:45,519
the top five podcasts in their niche
within six months. So if that sounds

661
00:49:45,519 --> 00:49:50,360
interesting to you, then come join
us. You can go check it out

662
00:49:50,360 --> 00:49:53,039
at dev influencers dot com slash apply. Also, I did start a dev

663
00:49:53,079 --> 00:49:59,119
Influencers podcast and that's at dev influencers
dot com slash podcast. All right,

664
00:49:59,199 --> 00:50:02,440
Arman, what are your when When
we were talking about the books that you

665
00:50:02,519 --> 00:50:07,239
have been listening to, I kind
of got a nice topic to sort of

666
00:50:07,239 --> 00:50:13,800
build on because I like both fantasy
and science fiction a lot. I like

667
00:50:13,880 --> 00:50:16,840
Star Wars. If you were going
to talk about stars or web a Star

668
00:50:16,880 --> 00:50:23,760
Wars T shirt. Yeah, yeah, so Andrew. The thing that gets

669
00:50:23,960 --> 00:50:29,239
me excited about the topic is waiting
for the Dune movies to come out.

670
00:50:29,599 --> 00:50:32,639
Oh yeah, because I'm a huge
I'm a huge fan of the books,

671
00:50:32,840 --> 00:50:39,480
and I actually regret now you ever
read the book. They are amazing.

672
00:50:39,639 --> 00:50:44,159
For me, They're the best thing
in science fiction and probably most of the

673
00:50:44,199 --> 00:50:49,280
literature that I ever read, and
I regret not reading it earlier. Because

674
00:50:49,920 --> 00:50:54,519
Danny Vignov is my favorite movie director. I absolutely enjoy all the movies that

675
00:50:54,599 --> 00:51:00,159
he created a later later on twenty
forty nine and Arrival and all the other

676
00:51:00,199 --> 00:51:05,960
stuff that he had. So when
I and I always have known about Dune,

677
00:51:06,039 --> 00:51:07,480
that it's a classic, that's a
great book, but I was like,

678
00:51:08,000 --> 00:51:12,199
maybe I will read something. But
when I realized I've seen the movie,

679
00:51:12,280 --> 00:51:15,800
the nineteen eighties movie, oh no, I didn't watch it. I

680
00:51:15,800 --> 00:51:19,320
didn't watch it. So I so
when I watched the millium movie that will

681
00:51:19,360 --> 00:51:24,920
eventually hopefully come out, I will
have only those depressions, so I won't

682
00:51:24,960 --> 00:51:28,800
sort of think about the lynch movie. I haven't seen several clips from the

683
00:51:28,840 --> 00:51:31,400
Lynch movie. The actuals are really
good, but it's sort of a bit

684
00:51:31,519 --> 00:51:36,880
cheesy, and I know how we
changed the ending that isn't really reflecting what

685
00:51:37,400 --> 00:51:40,639
Frank Herbert was trying to convey in
the books. And Willow is always saying

686
00:51:40,679 --> 00:51:45,760
in his interviews that, no,
I'm going to sort of try to convey

687
00:51:45,760 --> 00:51:52,440
what the author originally intended rather than
sort of come up with my interpretations or

688
00:51:52,480 --> 00:51:57,639
something something, because it's apparently a
big fan of Frank Herbert. So when

689
00:51:57,639 --> 00:52:00,559
I learned when that Danny vignov is
dem movie, I was excited. I

690
00:52:00,639 --> 00:52:04,440
was like, Okay, I'm gonna
read that this the first book so that

691
00:52:04,599 --> 00:52:07,679
when I go to the movie,
I would sort of know what to try

692
00:52:07,719 --> 00:52:13,320
to explain, because for me,
it's I always loved the experience of watching

693
00:52:13,320 --> 00:52:16,360
a movie on a book that I
like. I enjoyed watching the Hardworter movies

694
00:52:16,440 --> 00:52:20,199
because I like the books, and
when I went went to the movies,

695
00:52:20,239 --> 00:52:24,440
I enjoyed how they sort of brought
all that stuff to the screen. But

696
00:52:24,599 --> 00:52:29,960
when I was reading the dum books, I was sort of blown away,

697
00:52:30,039 --> 00:52:35,199
but not from the start, because
from the start and that's a mistakes make

698
00:52:35,639 --> 00:52:39,119
you think that it's sort of this
hero journey. It's sort of like Star

699
00:52:39,159 --> 00:52:44,119
Wars, like there's this guy who
has this problem was to go through these

700
00:52:44,199 --> 00:52:49,920
adventures and then come out on top. But in reality it's a sort of

701
00:52:50,119 --> 00:52:53,320
dystopia. Did you find out about
only if you keep on reading the other

702
00:52:53,360 --> 00:52:59,000
books. If you just read Doom, it's again a great piece of literature.

703
00:52:59,559 --> 00:53:02,480
It's sort of it's very big.
It's it's a classic. It has

704
00:53:02,519 --> 00:53:07,119
great characters, it has great philosophy
in it. But this sort of end

705
00:53:07,239 --> 00:53:10,440
up with like, yeah, this
is big, but sort of in the

706
00:53:10,599 --> 00:53:15,719
end is just a hero journey.
But then if you keep on reading,

707
00:53:15,760 --> 00:53:20,199
if you read at least Dune Messiah, which to everyone that wants to read

708
00:53:20,320 --> 00:53:23,239
dum books, I always suggest that
they read at least Dune and Dune Messiah

709
00:53:23,320 --> 00:53:29,679
the second. But originally Herbert intended
to release one book that is both Doing

710
00:53:29,719 --> 00:53:32,719
and Dune Messiah, but it got
too long, so the publication asked him

711
00:53:32,719 --> 00:53:37,280
to try to sort of put it
in half. So the other part of

712
00:53:37,960 --> 00:53:44,639
life, I'm trying not to spoil
anything of my protagonist is in the other

713
00:53:44,679 --> 00:53:45,960
book. And when you read the
other book you sort of once said,

714
00:53:46,039 --> 00:53:52,480
Okay, this really is something different. This really is rather than being a

715
00:53:52,519 --> 00:53:59,159
hero journey a sort of trope,
it's it actually criticizes the trope and tries

716
00:53:59,199 --> 00:54:02,039
to make reader to understand that,
yeah, you know that stuff. It

717
00:54:02,119 --> 00:54:07,159
only works in works of fiction.
In real life, hero trope is not

718
00:54:08,239 --> 00:54:12,320
the good, great and exciting thing
that you think about, because the hero

719
00:54:13,159 --> 00:54:17,039
can easily manipulate you to do horrible
things. And it goes on and has

720
00:54:17,079 --> 00:54:21,840
this motive, and it's sort of
a tragedy that goes through that family,

721
00:54:21,920 --> 00:54:24,880
that goes through all of that,
and it sort of comes back in Children

722
00:54:24,880 --> 00:54:29,199
of Dune, which is my favorite. The first book is one hundrederson my

723
00:54:29,280 --> 00:54:32,559
favorite in the ones that I've read. I've read up to God Improved Dune,

724
00:54:32,639 --> 00:54:37,400
the fourth book, and after that
you sort of take a break and

725
00:54:37,440 --> 00:54:42,760
the other events happened too far in
the future with new characters but still being

726
00:54:42,880 --> 00:54:45,760
interconnected with the sort of the journey
that happens before that. So I didn't

727
00:54:45,800 --> 00:54:52,280
really enjoy very much the characters in
Heretics of Dune because the plot was very

728
00:54:52,280 --> 00:54:57,239
interesting, it got really exciting things, but I sort of didn't manage to

729
00:54:57,480 --> 00:55:01,519
like the characters or emphasize with them. I stopped somewhere in the middle.

730
00:55:01,519 --> 00:55:06,480
I'm still going to finish it,
hopefully before the movies come out. I

731
00:55:06,519 --> 00:55:13,000
want to have written all the six
books before the movie comes out, but

732
00:55:13,280 --> 00:55:16,440
I guess I still have time for
that. So that is something that I

733
00:55:16,480 --> 00:55:22,320
really enjoy the dum books, and
I would advise anyone to read them because

734
00:55:22,360 --> 00:55:27,760
they really they contain sort of advice
about anything in the world. That that

735
00:55:27,840 --> 00:55:30,280
book is about politics, that book
is about religion, and that book is

736
00:55:30,320 --> 00:55:37,119
about philosophy and knowledge and even ecology. So it sort of covers everything that

737
00:55:37,880 --> 00:55:42,320
we have problematic in our world,
that everything that raises any conflict in our

738
00:55:42,360 --> 00:55:46,639
world. So it's a nice,
nice, large, big piece of different

739
00:55:46,719 --> 00:55:52,920
thoughts and opinions inside those characters that
interact with each other. And I guess

740
00:55:52,920 --> 00:55:58,039
it's really great read. Interesting.
Well, I haven't seen the nineteen eighties

741
00:55:58,079 --> 00:56:00,760
movies for a long time, so
yeah, I'll have to read the books

742
00:56:00,800 --> 00:56:06,280
now you've sold me. I've got
a ton of credits on Amazon are audible

743
00:56:06,280 --> 00:56:09,679
as well, So yeah, I'm
kind of curious because I'm wondering if they're

744
00:56:09,719 --> 00:56:15,719
like super long books. They kind
of are. But they are a bit

745
00:56:15,760 --> 00:56:22,559
confusing in the beginning because Frank Herbert
really doesn't like exposition. He will throw

746
00:56:22,599 --> 00:56:28,760
on like this terminology or the benega
his sisterhood, and you would what the

747
00:56:28,760 --> 00:56:31,440
hell that is and okay, yes, sort of I get it. Ah,

748
00:56:31,519 --> 00:56:34,679
yeah, maybe something. And then
they were like, oh this is

749
00:56:34,719 --> 00:56:37,000
gon jaba or oh this is something
this, this is the Sensimi religion,

750
00:56:37,079 --> 00:56:42,360
and lots of terminology. But when
you sort of get the grasp of it,

751
00:56:42,360 --> 00:56:46,000
it becomes really exciting. So you
have to pay very deep attention to

752
00:56:46,039 --> 00:56:52,400
the dialogues because everything like expositionary happens
in the dialogues. Yeah, yep,

753
00:56:52,440 --> 00:56:55,719
it's one credit on audible, So
I just you cost me a whole credit.

754
00:56:58,360 --> 00:57:00,159
So I hope you really enjoyed the
book. Yeah, me too.

755
00:57:00,440 --> 00:57:02,920
All right, good deal, Well, thanks for coming. This was fun.

756
00:57:04,559 --> 00:57:07,320
Thanks for inviting me. I enjoyed
a lot to talk about to day.

757
00:57:07,519 --> 00:57:12,920
All right, we'll go ahead and
wrap up here and until next time,

758
00:57:12,920 --> 00:57:13,760
folks, max out.
