WEBVTT

1
00:00:06.240 --> 00:00:10.000
<v Speaker 1>Hey everybody, and welcome to another episode of Alixer Mix.

2
00:00:10.480 --> 00:00:13.000
<v Speaker 2>This week on our panel we have Sasha Wolf.

3
00:00:13.039 --> 00:00:14.400
<v Speaker 3>Hello everybody, I'm.

4
00:00:14.320 --> 00:00:17.239
<v Speaker 1>Charles Maxwood from devchat dot TV. And this week we

5
00:00:17.320 --> 00:00:20.640
<v Speaker 1>have a special guest, and that's Ivan Rubelog. Did I

6
00:00:20.719 --> 00:00:22.519
<v Speaker 1>get anywhere close to saying your name right?

7
00:00:23.000 --> 00:00:24.839
<v Speaker 4>Yes, that's right. Hello, every bunny.

8
00:00:25.160 --> 00:00:27.280
<v Speaker 1>Do you want to introduce yourself real quick? Let people

9
00:00:27.280 --> 00:00:28.879
<v Speaker 1>know who you are and why you're famous?

10
00:00:29.120 --> 00:00:32.799
<v Speaker 4>Yeah? Sure, thanks to work for kind words. So, Hi,

11
00:00:32.920 --> 00:00:36.920
<v Speaker 4>I'm Ivan. I'm originally I'm from Russia, but for three

12
00:00:37.000 --> 00:00:40.520
<v Speaker 4>years we with my family live in Humburg, Germany. So

13
00:00:41.000 --> 00:00:47.079
<v Speaker 4>I'm software back at Elixir, engineer, working in business domains

14
00:00:47.759 --> 00:00:51.960
<v Speaker 4>real estate and currently in B two B business. Yeah,

15
00:00:52.119 --> 00:00:52.960
<v Speaker 4>so that's cool.

16
00:00:53.719 --> 00:00:57.920
<v Speaker 1>And yeah, I was looking at this Domo library that

17
00:00:58.000 --> 00:01:01.000
<v Speaker 1>you wrote. I have to admit I'm I'm still green

18
00:01:01.079 --> 00:01:03.359
<v Speaker 1>when it comes to some of this stuff. So and

19
00:01:03.560 --> 00:01:04.959
<v Speaker 1>follow all of it. But do you want to give

20
00:01:05.000 --> 00:01:07.239
<v Speaker 1>us kind of the ten thousand view on what domo

21
00:01:07.400 --> 00:01:08.200
<v Speaker 1>is and what it does?

22
00:01:08.400 --> 00:01:08.640
<v Speaker 3>Yeah?

23
00:01:08.680 --> 00:01:13.920
<v Speaker 4>Sure, that started like about a year ago, and I

24
00:01:14.000 --> 00:01:17.840
<v Speaker 4>usually had the impressions that I miss something within Elixir

25
00:01:18.799 --> 00:01:23.000
<v Speaker 4>and when I look at the structure and especially type

26
00:01:23.040 --> 00:01:26.400
<v Speaker 4>definitions of the structure. Of course, there is a dialyzer

27
00:01:26.519 --> 00:01:31.040
<v Speaker 4>tool that helps us to check validity of the source

28
00:01:31.079 --> 00:01:34.280
<v Speaker 4>code program same time, it doesn't work at run time,

29
00:01:34.480 --> 00:01:38.719
<v Speaker 4>and vilizer is quite heavy too, to be honest. So

30
00:01:39.400 --> 00:01:43.680
<v Speaker 4>and I was missing these things. That's okay. Elixir is

31
00:01:44.120 --> 00:01:49.359
<v Speaker 4>dynamically type language, and on the other hand, the type definition,

32
00:01:49.840 --> 00:01:53.120
<v Speaker 4>maybe I can do something about that. And then pandemic

33
00:01:53.159 --> 00:01:57.920
<v Speaker 4>started and I've got some free time, and I just

34
00:01:58.640 --> 00:02:05.640
<v Speaker 4>kick it off. Made these libraries that basically validates the

35
00:02:05.680 --> 00:02:10.560
<v Speaker 4>structure against the type definition and return meaningful errors about

36
00:02:10.680 --> 00:02:14.039
<v Speaker 4>the fields. Okay, here you define that this field should

37
00:02:14.039 --> 00:02:17.319
<v Speaker 4>be a string, and you have some number in this

38
00:02:17.400 --> 00:02:21.400
<v Speaker 4>field in the structure. So these aims to keep the

39
00:02:21.840 --> 00:02:26.360
<v Speaker 4>state valid because many software errors comes from invalid state

40
00:02:26.680 --> 00:02:32.759
<v Speaker 4>in the memory, and structures looks like a good place

41
00:02:32.879 --> 00:02:36.639
<v Speaker 4>for keeping the state. So that was my thought, Okay,

42
00:02:36.759 --> 00:02:40.919
<v Speaker 4>let's make a tool that validates a state within the structure.

43
00:02:41.199 --> 00:02:44.319
<v Speaker 3>Was prompted by like a concrete, like if use case

44
00:02:44.400 --> 00:02:46.560
<v Speaker 3>you had, like for example, at work, you had some

45
00:02:46.599 --> 00:02:49.080
<v Speaker 3>issues or what was just like an just an academic

46
00:02:49.159 --> 00:02:52.039
<v Speaker 3>idea at the beginning, and you were curious to try

47
00:02:52.080 --> 00:02:52.680
<v Speaker 3>somethings out.

48
00:02:53.000 --> 00:02:57.120
<v Speaker 4>Well, yeah, it was mostly inspired by book The Main

49
00:02:57.159 --> 00:03:01.599
<v Speaker 4>Dream Design by Eric Evans and more. It was more

50
00:03:01.759 --> 00:03:07.960
<v Speaker 4>like in academic inspiration, let's say. And yeah, so I've

51
00:03:07.960 --> 00:03:12.000
<v Speaker 4>got this feelings that there are lots of trials and

52
00:03:12.159 --> 00:03:16.439
<v Speaker 4>terrors around. So we know that there are other libraries

53
00:03:16.520 --> 00:03:23.199
<v Speaker 4>like norm that aiming the validation and other attempts to

54
00:03:23.240 --> 00:03:28.120
<v Speaker 4>make to introduce types in Elixir to get these benefits

55
00:03:28.159 --> 00:03:32.919
<v Speaker 4>of checking and some time nothing what I meant before

56
00:03:33.080 --> 00:03:36.800
<v Speaker 4>suit mean well, and because of that I decided, okay,

57
00:03:36.879 --> 00:03:39.240
<v Speaker 4>maybe I should give it a try and do some

58
00:03:40.159 --> 00:03:43.599
<v Speaker 4>not full fledged type system or something, because Elixir is

59
00:03:43.599 --> 00:03:46.199
<v Speaker 4>not such kind of thing but a very little, tiny

60
00:03:46.879 --> 00:03:51.879
<v Speaker 4>specific library that does on the validation of the structures

61
00:03:52.280 --> 00:03:54.599
<v Speaker 4>and basically keeping invariants.

62
00:03:54.840 --> 00:03:55.080
<v Speaker 3>Yeah.

63
00:03:55.400 --> 00:03:58.960
<v Speaker 4>So, answering your question directly, no, it wasn't inspired by

64
00:03:59.080 --> 00:04:03.639
<v Speaker 4>any and create task at the office. So it was

65
00:04:03.680 --> 00:04:07.159
<v Speaker 4>more like general ideas that I would like to have

66
00:04:07.319 --> 00:04:07.879
<v Speaker 4>such a thing.

67
00:04:08.479 --> 00:04:11.800
<v Speaker 3>And are you not using it in like any production scenarios?

68
00:04:11.840 --> 00:04:14.280
<v Speaker 3>I mean you said it comes from an academic background, sure,

69
00:04:14.319 --> 00:04:16.560
<v Speaker 3>but do you know that like anybody is using it

70
00:04:16.600 --> 00:04:17.800
<v Speaker 3>in production? Yeah?

71
00:04:17.879 --> 00:04:23.839
<v Speaker 4>Well sure, so I checked it's with current real projects

72
00:04:23.839 --> 00:04:28.720
<v Speaker 4>that we have and it works well. So and it's

73
00:04:29.279 --> 00:04:33.480
<v Speaker 4>kind of at early stage, so of course it's in

74
00:04:33.519 --> 00:04:36.600
<v Speaker 4>development for about a year, but only a couple of

75
00:04:36.639 --> 00:04:40.399
<v Speaker 4>days ago I can say okay that final things were

76
00:04:40.439 --> 00:04:43.480
<v Speaker 4>fixed and now it can be widely adopted.

77
00:04:43.959 --> 00:04:48.319
<v Speaker 3>Okay, Well, would you see like DOMO being used most

78
00:04:48.360 --> 00:04:51.439
<v Speaker 3>likely any specific use cases where you say, hey, that's

79
00:04:51.879 --> 00:04:55.000
<v Speaker 3>like a pretty good fit for DOMO where I saw

80
00:04:55.120 --> 00:04:58.439
<v Speaker 3>personal success and using it, Like when more people reach

81
00:04:58.480 --> 00:05:00.920
<v Speaker 3>for DOMO compared to something like for example, norm as

82
00:05:00.920 --> 00:05:03.240
<v Speaker 3>you mentioned earlier, because just to give them context for

83
00:05:03.399 --> 00:05:06.639
<v Speaker 3>listeners like NORMS, this data validation library where you specify

84
00:05:06.720 --> 00:05:09.839
<v Speaker 3>schemas like in code, like it doesn't use the type specs,

85
00:05:09.839 --> 00:05:13.480
<v Speaker 3>but like you can basically use functions and stuff from

86
00:05:13.560 --> 00:05:16.319
<v Speaker 3>norm to say okay, the data should conform to this

87
00:05:16.480 --> 00:05:20.680
<v Speaker 3>schema and mean demo that uses the typespecs. So when

88
00:05:20.680 --> 00:05:23.480
<v Speaker 3>would you say, is like it's a scenario where somebody

89
00:05:23.519 --> 00:05:26.040
<v Speaker 3>would like to use DOMO any specific.

90
00:05:27.600 --> 00:05:31.360
<v Speaker 4>Yeah, sure, that's an amazing question. Thanks a lot. So

91
00:05:32.399 --> 00:05:36.639
<v Speaker 4>there is another component in DOMO. It's that I haven't

92
00:05:36.680 --> 00:05:41.079
<v Speaker 4>mentioned before. So it it's not only validating the data

93
00:05:41.120 --> 00:05:45.079
<v Speaker 4>against the type definition TYPESPEC, but it also has these

94
00:05:45.240 --> 00:05:50.519
<v Speaker 4>pre condition functions attached to the type, so meaning that

95
00:05:50.920 --> 00:05:53.519
<v Speaker 4>for example, if you have the type definition for a

96
00:05:53.560 --> 00:05:57.120
<v Speaker 4>field of your structure, you can also add a pre

97
00:05:57.240 --> 00:06:01.240
<v Speaker 4>condition function to this type that the normal library would

98
00:06:01.319 --> 00:06:05.279
<v Speaker 4>call and if this function returns okay, then it would

99
00:06:05.319 --> 00:06:08.279
<v Speaker 4>consider that the value is not only of that type,

100
00:06:08.279 --> 00:06:11.279
<v Speaker 4>but it's also of a for example, right format that

101
00:06:11.360 --> 00:06:16.480
<v Speaker 4>you expect. So and saying that I can point out

102
00:06:16.560 --> 00:06:20.959
<v Speaker 4>to the concrete scenario. So for example, if you know

103
00:06:21.079 --> 00:06:25.360
<v Speaker 4>that you have an identifier in your system for your order.

104
00:06:25.480 --> 00:06:28.759
<v Speaker 4>For example, let's say you build e commerce system right

105
00:06:29.240 --> 00:06:32.879
<v Speaker 4>some websites the e commerce website, and you know that

106
00:06:33.000 --> 00:06:37.000
<v Speaker 4>in your system this identifiers have specific format for example

107
00:06:37.360 --> 00:06:41.480
<v Speaker 4>AA letter in the beginning and some numbers afterwards. You

108
00:06:41.519 --> 00:06:45.639
<v Speaker 4>can just define the type okay my ideas of string

109
00:06:45.800 --> 00:06:50.680
<v Speaker 4>type and add a precondition function to this, so saying

110
00:06:51.079 --> 00:06:54.680
<v Speaker 4>that the value should begins with A and then using

111
00:06:54.720 --> 00:06:59.040
<v Speaker 4>this type across any structures in your application. You would

112
00:06:59.040 --> 00:07:04.279
<v Speaker 4>have these automatically validated whenever the structure is created with

113
00:07:05.079 --> 00:07:09.240
<v Speaker 4>a construction function added by dormal library, and the DOMO

114
00:07:09.319 --> 00:07:13.000
<v Speaker 4>will guarantee you that you will have valid values for

115
00:07:13.040 --> 00:07:19.000
<v Speaker 4>this id type across your application and that in this

116
00:07:19.120 --> 00:07:23.160
<v Speaker 4>regards the state would be valid. So yeah, this is

117
00:07:23.240 --> 00:07:26.720
<v Speaker 4>one of scenarios, and it can go even more. Like

118
00:07:27.000 --> 00:07:30.959
<v Speaker 4>we can go further. We can define with normal library,

119
00:07:30.959 --> 00:07:35.800
<v Speaker 4>it's possible to define the precondition for the struct type.

120
00:07:36.079 --> 00:07:39.399
<v Speaker 4>You know, when you write this type T for your structure,

121
00:07:40.040 --> 00:07:42.560
<v Speaker 4>and you can say, okay, for this type T, the

122
00:07:42.639 --> 00:07:47.279
<v Speaker 4>miprecondition function will be this one you name it. And

123
00:07:48.199 --> 00:07:51.680
<v Speaker 4>let's say you would like to have some relations check

124
00:07:51.800 --> 00:07:56.720
<v Speaker 4>between fields of this structure, saying that if this is

125
00:07:56.759 --> 00:07:59.199
<v Speaker 4>the order structure for e commerce website, that you have

126
00:07:59.279 --> 00:08:03.120
<v Speaker 4>some allowed amount or of the order in terms of money,

127
00:08:03.800 --> 00:08:07.399
<v Speaker 4>and you would like to have the sum of all

128
00:08:07.560 --> 00:08:10.560
<v Speaker 4>line items in this order to be not higher than

129
00:08:10.639 --> 00:08:16.439
<v Speaker 4>this given amount. So this precondition function attached to the

130
00:08:16.519 --> 00:08:21.160
<v Speaker 4>type of the structure can validate that and give some

131
00:08:21.560 --> 00:08:26.639
<v Speaker 4>meaningful error bag that okay, you should have the summary

132
00:08:26.639 --> 00:08:31.120
<v Speaker 4>amount less than a lot. And that's as a scenario.

133
00:08:31.120 --> 00:08:37.639
<v Speaker 4>When DOMO gives you a consistency of your structure or

134
00:08:37.759 --> 00:08:41.399
<v Speaker 4>more higher level let's say so so it allows to

135
00:08:41.799 --> 00:08:46.919
<v Speaker 4>follow business rules of the system implementing. So this is

136
00:08:46.919 --> 00:08:47.799
<v Speaker 4>the second scenario.

137
00:08:48.200 --> 00:08:52.399
<v Speaker 3>So that's I guess that could make sense to use Thermo.

138
00:08:52.480 --> 00:08:55.159
<v Speaker 3>For example, at the edges of my system. When I

139
00:08:55.159 --> 00:08:57.960
<v Speaker 3>say I have a Phoenix API, for example, getting some

140
00:08:58.080 --> 00:09:01.399
<v Speaker 3>jacon in and I want to verify that the user

141
00:09:01.440 --> 00:09:06.279
<v Speaker 3>actually like the information the user gave me, conforms to

142
00:09:06.600 --> 00:09:10.480
<v Speaker 3>a certain data schema to like to the to the

143
00:09:10.519 --> 00:09:15.039
<v Speaker 3>requests objects I expect, and that I then can use

144
00:09:15.120 --> 00:09:17.840
<v Speaker 3>that to forward it to the rest of my application,

145
00:09:18.000 --> 00:09:21.519
<v Speaker 3>being sure that, Yeah, as you said, preconditions are met.

146
00:09:21.759 --> 00:09:23.799
<v Speaker 3>Is that right? Is that like a scenario where you

147
00:09:23.840 --> 00:09:25.240
<v Speaker 3>would say DOMO is applicable.

148
00:09:25.440 --> 00:09:29.720
<v Speaker 4>Yes, is one of scenarios where DOMO can can play

149
00:09:30.200 --> 00:09:35.480
<v Speaker 4>and it's like equivalent to what can be implemented with norm. Right,

150
00:09:35.600 --> 00:09:39.000
<v Speaker 4>So you can define the schema and validate the adjacent

151
00:09:39.080 --> 00:09:42.240
<v Speaker 4>on the let's say boundary of your application, and then

152
00:09:42.360 --> 00:09:46.799
<v Speaker 4>be sure that the data that you operate on is valid.

153
00:09:47.799 --> 00:09:51.759
<v Speaker 4>And yeah, there's definitely one of the possible scenarios. On

154
00:09:51.840 --> 00:09:56.120
<v Speaker 4>the other hand, there are other scenarios. It's when you

155
00:09:56.159 --> 00:10:00.159
<v Speaker 4>work with a pure core having only pure functions and

156
00:10:00.320 --> 00:10:05.080
<v Speaker 4>structures in it, and you would like to follow to

157
00:10:05.200 --> 00:10:08.559
<v Speaker 4>make it follow some business rules that should be executed

158
00:10:08.600 --> 00:10:12.600
<v Speaker 4>in your system. So, for example, it's from the domain

159
00:10:12.960 --> 00:10:17.080
<v Speaker 4>domain driven design framework. Right, So when you have a

160
00:10:17.159 --> 00:10:20.200
<v Speaker 4>set of business rules, you can define them with normal

161
00:10:20.279 --> 00:10:24.679
<v Speaker 4>precondition functions page to the type and have this business

162
00:10:24.759 --> 00:10:29.399
<v Speaker 4>rule fulfilled everywhere you use these values of these type

163
00:10:29.440 --> 00:10:35.159
<v Speaker 4>in structures. So, for example, as I mentioned this before

164
00:10:35.320 --> 00:10:39.720
<v Speaker 4>with order, right, so you can have the order structure

165
00:10:39.799 --> 00:10:46.480
<v Speaker 4>in your core and have these values dependency between items

166
00:10:46.519 --> 00:10:52.240
<v Speaker 4>of this order and allowed amount the same invariants, same

167
00:10:52.320 --> 00:10:58.720
<v Speaker 4>kind of invariants may be for other structures that participate

168
00:10:58.759 --> 00:11:01.399
<v Speaker 4>in the business logic of your application.

169
00:11:02.120 --> 00:11:02.399
<v Speaker 2>Right.

170
00:11:03.080 --> 00:11:07.360
<v Speaker 4>And instead of the okay, this can be compared that

171
00:11:07.759 --> 00:11:10.559
<v Speaker 4>you can say, hey, I can write this in any module,

172
00:11:10.759 --> 00:11:17.080
<v Speaker 4>write this verification that my structure have a valid number

173
00:11:17.120 --> 00:11:21.320
<v Speaker 4>of items and that there's some is not exceeding the

174
00:11:21.720 --> 00:11:26.159
<v Speaker 4>allowed amount for this order. And the interesting part here

175
00:11:26.360 --> 00:11:29.440
<v Speaker 4>is that if you do this with DOMO, by using

176
00:11:29.480 --> 00:11:33.120
<v Speaker 4>this precondition function attached to the type, you can have

177
00:11:33.279 --> 00:11:37.080
<v Speaker 4>this validation not only in this structure but in any

178
00:11:37.200 --> 00:11:41.320
<v Speaker 4>other kind of structures using this type. So it goes

179
00:11:41.960 --> 00:11:46.679
<v Speaker 4>like automatically in these places and you don't need to

180
00:11:47.080 --> 00:11:51.720
<v Speaker 4>think twice about if I forgot any validations or you know,

181
00:11:51.879 --> 00:11:56.960
<v Speaker 4>any parts of checking my structures in regards to business

182
00:11:56.960 --> 00:12:01.759
<v Speaker 4>logic of the application, and it even can go further

183
00:12:01.960 --> 00:12:06.120
<v Speaker 4>across the application boundaries. For example, if you have several

184
00:12:06.159 --> 00:12:10.759
<v Speaker 4>micro services that is very common nowadays, you may have

185
00:12:10.879 --> 00:12:14.799
<v Speaker 4>hundreds of them, and if, for example, you share these

186
00:12:14.960 --> 00:12:20.399
<v Speaker 4>type definition and pre condition functions in some model files

187
00:12:20.440 --> 00:12:24.600
<v Speaker 4>across these several applications, due to the normal library, you

188
00:12:24.600 --> 00:12:28.759
<v Speaker 4>can be sure that this would be checked and full filled.

189
00:12:29.679 --> 00:12:38.519
<v Speaker 4>These either these validations for boundary situation or for business

190
00:12:38.559 --> 00:12:40.039
<v Speaker 4>logic in the core.

191
00:12:40.840 --> 00:12:43.559
<v Speaker 3>When you say sharing the model fied, I assume like

192
00:12:43.600 --> 00:12:46.799
<v Speaker 3>in the sense of like a private tax package or

193
00:12:46.840 --> 00:12:48.200
<v Speaker 3>what exactly are you thinking of?

194
00:12:48.440 --> 00:12:52.759
<v Speaker 4>Oh, yeah, sure, it can be a hex package. On

195
00:12:52.840 --> 00:12:56.000
<v Speaker 4>the other hand, it's usually starts like a little you

196
00:12:56.159 --> 00:13:02.480
<v Speaker 4>just have several modules like share models that you can

197
00:13:02.919 --> 00:13:08.799
<v Speaker 4>check out in various repels. So the techniques are various

198
00:13:08.840 --> 00:13:13.559
<v Speaker 4>for that. So for example, you can have shared Git

199
00:13:13.639 --> 00:13:18.759
<v Speaker 4>repository with this model and you can edit as submodules

200
00:13:18.799 --> 00:13:22.600
<v Speaker 4>to other Git repositors or you know, just check it.

201
00:13:22.639 --> 00:13:25.120
<v Speaker 3>But basically you lose like some kind of mechanism to

202
00:13:25.240 --> 00:13:29.519
<v Speaker 3>like get the code into your micro services, be through

203
00:13:29.679 --> 00:13:33.480
<v Speaker 3>x package or like through okay, yeah, that's right, okay,

204
00:13:33.759 --> 00:13:36.159
<v Speaker 3>And I was just thinking because there are also solutions

205
00:13:36.159 --> 00:13:39.679
<v Speaker 3>such as protobaf or others I can think of right now,

206
00:13:40.000 --> 00:13:42.720
<v Speaker 3>which like also follow this idea of having like a

207
00:13:42.759 --> 00:13:45.799
<v Speaker 3>model definition which then can be used to generate some code.

208
00:13:45.840 --> 00:13:49.559
<v Speaker 3>But that's like more agnostic, not really specific to to

209
00:13:49.559 --> 00:13:50.320
<v Speaker 3>to elix here.

210
00:13:50.440 --> 00:13:55.080
<v Speaker 4>Yeah, it's very interesting. Yes, the true protobuffs are very

211
00:13:55.120 --> 00:14:00.919
<v Speaker 4>good to have the intercommunication be validated time. It is

212
00:14:01.240 --> 00:14:05.320
<v Speaker 4>impossible to put function protobize definition.

213
00:14:06.159 --> 00:14:08.399
<v Speaker 3>Which with some might argue is a good thing.

214
00:14:09.639 --> 00:14:10.399
<v Speaker 4>At some scenario.

215
00:14:10.559 --> 00:14:10.759
<v Speaker 3>Yes.

216
00:14:11.159 --> 00:14:13.720
<v Speaker 4>On the other hand, with dormo, you can do that

217
00:14:13.919 --> 00:14:18.360
<v Speaker 4>and do more precise validation like Okay, if that if

218
00:14:18.360 --> 00:14:25.440
<v Speaker 4>these conditions that mad, then these values should be as expected.

219
00:14:25.519 --> 00:14:28.600
<v Speaker 4>On the other hand, if I have another value in

220
00:14:28.639 --> 00:14:32.559
<v Speaker 4>my structure set to this value, then this should be

221
00:14:33.080 --> 00:14:36.320
<v Speaker 4>should be another duly expected. So you can imagine that

222
00:14:36.639 --> 00:14:41.720
<v Speaker 4>it can be quite complex interdependencies between fields of even

223
00:14:41.759 --> 00:14:47.159
<v Speaker 4>one structure, not saying about some nested structures that usually

224
00:14:47.279 --> 00:14:50.639
<v Speaker 4>now can be seen in modern applications.

225
00:14:50.960 --> 00:14:55.320
<v Speaker 3>Okay, to get back to something you said earlier, So

226
00:14:55.360 --> 00:14:58.559
<v Speaker 3>you said that you can reuse like type definitions and

227
00:14:58.720 --> 00:15:01.519
<v Speaker 3>preconditions that attached with that type. So if for example,

228
00:15:01.559 --> 00:15:04.120
<v Speaker 3>I like to get back into an example, you said, like, yeah,

229
00:15:04.120 --> 00:15:07.440
<v Speaker 3>I've a certain identifier, like an order identifier. I could

230
00:15:07.519 --> 00:15:12.679
<v Speaker 3>just specify this type in some module, attach some preconditions

231
00:15:12.720 --> 00:15:15.559
<v Speaker 3>to it, and then use it across my application and

232
00:15:16.000 --> 00:15:19.679
<v Speaker 3>wherever I use DOMO. Basically, I assume then that would

233
00:15:19.679 --> 00:15:24.519
<v Speaker 3>basically reuse these preconditions attached to my order identifier type.

234
00:15:24.600 --> 00:15:27.399
<v Speaker 3>Is that right? Did I get that right? Yeah? That's right?

235
00:15:27.559 --> 00:15:31.399
<v Speaker 3>To Okay, it looks like that. Okay, that's nice. I

236
00:15:31.440 --> 00:15:34.919
<v Speaker 3>guess DOMO boils a bit down to like saying to

237
00:15:34.960 --> 00:15:37.559
<v Speaker 3>avoid a bit of a petition, right, because for example,

238
00:15:37.600 --> 00:15:43.480
<v Speaker 3>if you look at EMO, you acto schemas like like

239
00:15:43.480 --> 00:15:46.200
<v Speaker 3>for at least from my experience, you tend to have

240
00:15:46.799 --> 00:15:48.720
<v Speaker 3>this scenario where you say, okay, this is like my

241
00:15:48.759 --> 00:15:52.720
<v Speaker 3>schema and these my fields. But then it's also helpful

242
00:15:52.840 --> 00:15:54.960
<v Speaker 3>to to have type definition on tops so that you

243
00:15:55.159 --> 00:15:58.080
<v Speaker 3>then just for documentation purposes, right ba, I say okay,

244
00:15:58.519 --> 00:16:00.840
<v Speaker 3>this is like the type of this, and these are

245
00:16:00.919 --> 00:16:03.159
<v Speaker 3>like the sphere as an integer and this field as

246
00:16:03.200 --> 00:16:06.039
<v Speaker 3>a string. And then you also have on the bottom,

247
00:16:06.120 --> 00:16:09.519
<v Speaker 3>like maybe some some ECTO change set validations where they say, okay,

248
00:16:09.679 --> 00:16:12.480
<v Speaker 3>I use the idea needs to start with an AID

249
00:16:12.799 --> 00:16:14.799
<v Speaker 3>or my other ID needs to start with an ASOL.

250
00:16:14.840 --> 00:16:17.279
<v Speaker 3>So I guess DOMO goes a bit in that direction

251
00:16:17.320 --> 00:16:19.679
<v Speaker 3>where they say, okay, I don't want to maintain like

252
00:16:20.200 --> 00:16:23.879
<v Speaker 3>multiple definitions of the same information basically.

253
00:16:23.679 --> 00:16:29.360
<v Speaker 4>Right true true, that's it. And moreover, Domo has support

254
00:16:29.440 --> 00:16:33.240
<v Speaker 4>of ACTO. So if you have these schema defined, and

255
00:16:33.480 --> 00:16:37.440
<v Speaker 4>you have these type defined into the schema, you can

256
00:16:37.639 --> 00:16:41.399
<v Speaker 4>call the change set in the Dormo library and the

257
00:16:41.519 --> 00:16:47.320
<v Speaker 4>function that's named validate type, and DOMO will automatically validate

258
00:16:47.399 --> 00:16:50.440
<v Speaker 4>changes in the Acto change set for you according to

259
00:16:50.519 --> 00:16:56.639
<v Speaker 4>the type you defined. So this is already supported and

260
00:16:56.799 --> 00:16:57.519
<v Speaker 4>quite convenient.

261
00:16:57.799 --> 00:17:02.200
<v Speaker 3>That's nice. I assume that, like to actually reuse a

262
00:17:02.240 --> 00:17:06.359
<v Speaker 3>type for example, such as the order ID, I have

263
00:17:06.440 --> 00:17:09.599
<v Speaker 3>to like use Domo in that place, right, I can't

264
00:17:09.640 --> 00:17:12.720
<v Speaker 3>just use any remote type. I mean that, like, how

265
00:17:12.759 --> 00:17:14.559
<v Speaker 3>does that work? When you say okay, it's like a

266
00:17:14.559 --> 00:17:17.839
<v Speaker 3>string T, then like we probably have some code written

267
00:17:17.839 --> 00:17:20.400
<v Speaker 3>which says, okay, if it's a string, then doing this

268
00:17:20.519 --> 00:17:23.200
<v Speaker 3>and that check. But if I just say I have

269
00:17:23.319 --> 00:17:25.799
<v Speaker 3>like this module over there, which like doesn't use domo

270
00:17:25.839 --> 00:17:29.920
<v Speaker 3>at all, but it specifies my type, I don't know which,

271
00:17:30.359 --> 00:17:33.680
<v Speaker 3>just say like it's a map with like certain certain keys,

272
00:17:33.799 --> 00:17:36.559
<v Speaker 3>and the keys need to be of a certain value.

273
00:17:36.599 --> 00:17:39.240
<v Speaker 3>Is that like something DOMO can can handle them? Or

274
00:17:39.839 --> 00:17:41.880
<v Speaker 3>how exactly can I can I imagine this to work?

275
00:17:42.400 --> 00:17:42.720
<v Speaker 4>Yeah?

276
00:17:42.759 --> 00:17:45.319
<v Speaker 3>Like where are the boundaries? Basically like why does it break?

277
00:17:45.799 --> 00:17:50.000
<v Speaker 4>Okay, so three key questions, so where it's break? Well,

278
00:17:50.519 --> 00:17:53.680
<v Speaker 4>I can say that that's a very good example. And

279
00:17:54.559 --> 00:17:57.240
<v Speaker 4>it was a quite long year. But then here so

280
00:17:57.720 --> 00:18:00.799
<v Speaker 4>I had the time to resolve this and it was

281
00:18:00.960 --> 00:18:05.000
<v Speaker 4>successfully completed. So how DOMA works. If you have remote

282
00:18:05.000 --> 00:18:10.039
<v Speaker 4>type is within some structure or other module that's not

283
00:18:10.240 --> 00:18:14.839
<v Speaker 4>using DOMA at all, library automatically take this type into

284
00:18:16.119 --> 00:18:24.599
<v Speaker 4>validation because more has is shipped with compiler. So when

285
00:18:24.640 --> 00:18:29.799
<v Speaker 4>you add library to the project, it has two pass compilation.

286
00:18:30.440 --> 00:18:33.240
<v Speaker 4>First pass is by alixer and second past of the

287
00:18:33.279 --> 00:18:37.039
<v Speaker 4>compilation is by DOMA compiler that just do the job

288
00:18:37.200 --> 00:18:40.880
<v Speaker 4>by getting all the type definitions from remote modules and

289
00:18:40.960 --> 00:18:44.680
<v Speaker 4>putting them in place where the validation should be performed.

290
00:18:45.079 --> 00:18:49.720
<v Speaker 4>So and moreover, if you change remote type, for example,

291
00:18:49.759 --> 00:18:53.759
<v Speaker 4>you compile your project and you change one of the

292
00:18:53.839 --> 00:18:56.960
<v Speaker 4>keys in this map you mentioned in the remote module,

293
00:18:57.119 --> 00:18:59.839
<v Speaker 4>I mean type definition of the key and you can

294
00:19:00.240 --> 00:19:05.759
<v Speaker 4>again the DOMO will notice that and recompile the module

295
00:19:05.759 --> 00:19:08.559
<v Speaker 4>where you use is remote map definition.

296
00:19:08.759 --> 00:19:14.279
<v Speaker 3>So automatically as signs that compiled time dependency to the remote.

297
00:19:14.000 --> 00:19:18.000
<v Speaker 4>Model, it tracks dependence in between types in your application

298
00:19:18.240 --> 00:19:20.400
<v Speaker 4>and recompiles appropriately.

299
00:19:20.680 --> 00:19:24.160
<v Speaker 3>I assume that this can have a hit on compilation

300
00:19:24.279 --> 00:19:26.400
<v Speaker 3>times because I mean, if you look at what the

301
00:19:26.440 --> 00:19:28.960
<v Speaker 3>Alexi core team and the Phoenix core team has been

302
00:19:29.000 --> 00:19:32.400
<v Speaker 3>doing in the past few months, they very much try

303
00:19:32.440 --> 00:19:37.640
<v Speaker 3>to reduce this kind of like compile time compilation compilation

304
00:19:37.720 --> 00:19:41.759
<v Speaker 3>links between modules which can SUI times. So I assume

305
00:19:41.799 --> 00:19:44.119
<v Speaker 3>that at least like a trade off of using domo

306
00:19:44.160 --> 00:19:46.519
<v Speaker 3>in that fashion is probably that it might impact your

307
00:19:46.559 --> 00:19:47.599
<v Speaker 3>compiled times.

308
00:19:47.359 --> 00:19:50.960
<v Speaker 4>Right, yeah, sure when you comes at price, so definitely

309
00:19:51.200 --> 00:19:56.039
<v Speaker 4>it would increase compilation times. In synthetic tests it was

310
00:19:56.119 --> 00:20:02.680
<v Speaker 4>about maybe twenty percent of increase compilation time. And of

311
00:20:02.759 --> 00:20:07.160
<v Speaker 4>course during the run time it's additional sipute cycles that

312
00:20:07.319 --> 00:20:11.240
<v Speaker 4>are spent on the validation of the data you've got.

313
00:20:11.519 --> 00:20:13.839
<v Speaker 3>I mean, that's your idea, right.

314
00:20:15.119 --> 00:20:18.319
<v Speaker 4>That's true. Yeah. At the same time, I can say

315
00:20:18.359 --> 00:20:23.799
<v Speaker 4>that there is a heavy optimization implemented yet for the

316
00:20:24.000 --> 00:20:29.200
<v Speaker 4>dependency checks it just works. I can say that during

317
00:20:29.279 --> 00:20:33.720
<v Speaker 4>the compilation time, Dormo relies to the pattern matching a lot,

318
00:20:34.680 --> 00:20:38.680
<v Speaker 4>and at least for the part when you have this

319
00:20:38.839 --> 00:20:42.960
<v Speaker 4>validation at run time of your values. It's working on

320
00:20:43.400 --> 00:20:48.240
<v Speaker 4>already optimized code optimized by Elixir and a lung compilers.

321
00:20:48.279 --> 00:20:53.480
<v Speaker 4>Because of pattern matches that automatically generated by Domo, you

322
00:20:53.559 --> 00:20:58.279
<v Speaker 4>can have quite a good performance. Yeah. If you you know,

323
00:20:58.480 --> 00:21:03.160
<v Speaker 4>when we talk about code generation, that definitely happens here

324
00:21:03.200 --> 00:21:06.960
<v Speaker 4>with the dormal library. It's always a question mark, Okay,

325
00:21:07.160 --> 00:21:12.000
<v Speaker 4>what this library generates and how it works in my application,

326
00:21:12.920 --> 00:21:16.359
<v Speaker 4>So you can ask this question at some point in time.

327
00:21:17.200 --> 00:21:22.519
<v Speaker 4>And interesting enough that Domo rights the source code of

328
00:21:22.720 --> 00:21:27.720
<v Speaker 4>this validation into the build folder. So if you add

329
00:21:27.759 --> 00:21:32.160
<v Speaker 4>the type definition to your structure and say use dormo there,

330
00:21:32.680 --> 00:21:36.680
<v Speaker 4>then in underscore build folder you would have a Domo

331
00:21:36.720 --> 00:21:40.440
<v Speaker 4>generated called subfolder where you can see the old source

332
00:21:40.480 --> 00:21:44.559
<v Speaker 4>code that is used to do these run time validations.

333
00:21:44.720 --> 00:21:48.559
<v Speaker 4>So it's yeah, then used as a compilation source or

334
00:21:48.680 --> 00:21:51.279
<v Speaker 4>is it just like for the user's benefit, Well, it's

335
00:21:51.359 --> 00:21:55.440
<v Speaker 4>used as compilation source. The same time, if you change it,

336
00:21:55.440 --> 00:21:59.319
<v Speaker 4>it wouldn't affect anything because it would be overwritten during

337
00:21:59.359 --> 00:22:02.839
<v Speaker 4>the next company, so you can read it, but you

338
00:22:02.920 --> 00:22:09.000
<v Speaker 4>can't affect it much. This add this additional confidence about

339
00:22:09.039 --> 00:22:13.640
<v Speaker 4>what's going on when you call this function validate type

340
00:22:13.680 --> 00:22:18.400
<v Speaker 4>on your structure or constructor function or if you do

341
00:22:18.799 --> 00:22:20.759
<v Speaker 4>a reidate type in ECTO schema.

342
00:22:21.000 --> 00:22:23.400
<v Speaker 3>Okay, I guess the question which for some people might

343
00:22:23.480 --> 00:22:26.039
<v Speaker 3>have like how readable is this code because that code

344
00:22:26.079 --> 00:22:29.839
<v Speaker 3>generation tends to sometimes produce code which is like a

345
00:22:29.839 --> 00:22:33.039
<v Speaker 3>bit not so nice on the ice to say to

346
00:22:33.079 --> 00:22:33.799
<v Speaker 3>phrase it like that.

347
00:22:36.839 --> 00:22:42.359
<v Speaker 4>Yeah, true, there is a four matter run during the

348
00:22:42.359 --> 00:22:48.480
<v Speaker 4>generation of this code, and it's quite readable and quite simple.

349
00:22:48.640 --> 00:22:52.079
<v Speaker 4>So worse, the more fields in your structure you have,

350
00:22:52.200 --> 00:22:56.200
<v Speaker 4>the longer would be the output and the source code file.

351
00:22:57.079 --> 00:22:57.559
<v Speaker 3>Same time.

352
00:22:58.079 --> 00:23:02.720
<v Speaker 4>It's quite straightforward there too, same in functions there that

353
00:23:03.160 --> 00:23:06.599
<v Speaker 4>you just can read and say, okay, here is the validation,

354
00:23:06.799 --> 00:23:09.519
<v Speaker 4>here is the pattern matching. So it's quite simple.

355
00:23:10.359 --> 00:23:13.599
<v Speaker 3>So that means that like domo generates like an additional

356
00:23:13.640 --> 00:23:16.559
<v Speaker 3>module or what which is then used FORUL for type checking.

357
00:23:17.279 --> 00:23:21.519
<v Speaker 4>Yeah, okay, okay, what happens when you use domo at

358
00:23:21.640 --> 00:23:26.359
<v Speaker 4>minimum level? You can just add use domo into your

359
00:23:26.720 --> 00:23:33.640
<v Speaker 4>struct module, right, and then dormo generates a submodule that

360
00:23:33.839 --> 00:23:37.759
<v Speaker 4>is called type ensure. So let's say your module named

361
00:23:37.839 --> 00:23:43.599
<v Speaker 4>car and after DOMA works, you have also in addition

362
00:23:44.319 --> 00:23:49.039
<v Speaker 4>car dot type insure and inside of this type ensure

363
00:23:49.359 --> 00:23:53.599
<v Speaker 4>all validation happened and how it works in regards to

364
00:23:53.720 --> 00:23:57.799
<v Speaker 4>your original car structure. DOMO adds functions to the car

365
00:23:57.880 --> 00:24:02.680
<v Speaker 4>structure as well. It's a new function that is constructor

366
00:24:02.720 --> 00:24:07.799
<v Speaker 4>function for the structure and validate type function that is

367
00:24:07.839 --> 00:24:12.640
<v Speaker 4>for validation of existing instance. So there are also a

368
00:24:12.720 --> 00:24:19.279
<v Speaker 4>couple of other functions like typed fields and required fields

369
00:24:19.759 --> 00:24:23.000
<v Speaker 4>that returns the list of the fields of your structure

370
00:24:23.160 --> 00:24:27.599
<v Speaker 4>that has not new types. Let's say, so that's useful

371
00:24:27.640 --> 00:24:32.960
<v Speaker 4>in actual change that. So the first two new and

372
00:24:33.319 --> 00:24:37.519
<v Speaker 4>validate type functions they just facate for type insure module.

373
00:24:38.400 --> 00:24:42.960
<v Speaker 4>So when you call car dot new and keywould leads

374
00:24:43.079 --> 00:24:47.359
<v Speaker 4>to these fields and values for these fields, the new

375
00:24:47.440 --> 00:24:52.319
<v Speaker 4>function bypasses that after some checks to type insure module

376
00:24:53.039 --> 00:24:57.279
<v Speaker 4>type insure module, do pattern matches validate the all types

377
00:24:57.559 --> 00:25:01.599
<v Speaker 4>of the values is as expected, then run pre condition

378
00:25:01.720 --> 00:25:06.000
<v Speaker 4>functions associated with these types, checking okay the format of

379
00:25:06.079 --> 00:25:09.240
<v Speaker 4>these values is good, all invariants have full field, and

380
00:25:09.319 --> 00:25:13.640
<v Speaker 4>then returns back to the call site so and it

381
00:25:13.759 --> 00:25:20.359
<v Speaker 4>returns the constructor the structure basically, So that's how you

382
00:25:20.400 --> 00:25:22.640
<v Speaker 4>can be sure that at the time of the call,

383
00:25:22.839 --> 00:25:26.839
<v Speaker 4>when you get this structure back, it's valid structure according

384
00:25:26.880 --> 00:25:30.599
<v Speaker 4>to the type and pre conditions defined. Then if you

385
00:25:30.680 --> 00:25:35.559
<v Speaker 4>modify the structure, for example, alter field of the car,

386
00:25:36.319 --> 00:25:40.559
<v Speaker 4>then you can call again the validate type function with

387
00:25:40.720 --> 00:25:44.839
<v Speaker 4>this modified instance, and the validate type function would do

388
00:25:44.920 --> 00:25:48.279
<v Speaker 4>the same trip to the type insurance back, giving you

389
00:25:48.400 --> 00:25:52.519
<v Speaker 4>the answer is it still okay structure matching the type

390
00:25:52.519 --> 00:25:56.119
<v Speaker 4>and preconditions or no, you have this field incorrect because

391
00:25:56.160 --> 00:25:59.799
<v Speaker 4>of this and that. So that's how it works basically.

392
00:26:00.119 --> 00:26:03.359
<v Speaker 3>Okay, And what happened if I, like, have my car

393
00:26:03.920 --> 00:26:07.480
<v Speaker 3>struck and I have said use domo and then instead

394
00:26:07.519 --> 00:26:10.319
<v Speaker 3>of that, I just define a module which it's called

395
00:26:10.440 --> 00:26:13.839
<v Speaker 3>type insure. What would happened then, like, because then I

396
00:26:14.000 --> 00:26:15.359
<v Speaker 3>have a name class.

397
00:26:15.079 --> 00:26:19.079
<v Speaker 4>Right, yeah, sure, the behavior would be the same if

398
00:26:19.759 --> 00:26:24.240
<v Speaker 4>if you define type insure twice. So you can do

399
00:26:24.319 --> 00:26:28.640
<v Speaker 4>this by hand and there are no any you know,

400
00:26:28.799 --> 00:26:32.079
<v Speaker 4>hidden things behind that. It's just simply a generation of

401
00:26:32.119 --> 00:26:36.039
<v Speaker 4>the Elixir source code and compiling it with the LEIKXIR

402
00:26:36.720 --> 00:26:37.400
<v Speaker 4>two times.

403
00:26:37.440 --> 00:26:40.599
<v Speaker 3>So okay, I guess, like on one thing DOMO could

404
00:26:40.680 --> 00:26:43.920
<v Speaker 3>do there is like generating like it in a different

405
00:26:43.960 --> 00:26:46.440
<v Speaker 3>name space, right, like could for example generated in domo

406
00:26:46.599 --> 00:26:49.960
<v Speaker 3>dot type insure dot name of a module, because then,

407
00:26:50.079 --> 00:26:53.799
<v Speaker 3>I mean people could then still define a module which

408
00:26:53.799 --> 00:26:56.119
<v Speaker 3>is called that way. But if they basically messed with

409
00:26:56.200 --> 00:26:59.720
<v Speaker 3>like another uplic another libraries name space, it's like they

410
00:26:59.799 --> 00:27:00.400
<v Speaker 3>all fault.

411
00:27:00.519 --> 00:27:05.640
<v Speaker 4>Right, Yeah, well this nice idea. Let's see what can

412
00:27:05.680 --> 00:27:09.160
<v Speaker 4>be done in this regard. And there is another scenario

413
00:27:09.319 --> 00:27:14.000
<v Speaker 4>how to start using domo. You may not even use

414
00:27:14.240 --> 00:27:17.680
<v Speaker 4>all the functions that DOMA adds to your structure. For example,

415
00:27:17.720 --> 00:27:21.359
<v Speaker 4>let's say we have the car, and if you even

416
00:27:21.480 --> 00:27:25.400
<v Speaker 4>write use domo inside the car, you already get some benefits.

417
00:27:25.799 --> 00:27:29.160
<v Speaker 4>What I mean, during the compilation time, it would check

418
00:27:29.240 --> 00:27:32.799
<v Speaker 4>the default values of your car structure, these values that

419
00:27:32.960 --> 00:27:37.000
<v Speaker 4>you usually define with death struck, and during the compilation time,

420
00:27:37.079 --> 00:27:42.759
<v Speaker 4>DOMO already would validate if the default value specified conforms

421
00:27:42.799 --> 00:27:46.599
<v Speaker 4>to the type and pre conditions, and if it's not,

422
00:27:46.759 --> 00:27:50.880
<v Speaker 4>it would say compile error. So you have these values

423
00:27:50.960 --> 00:27:56.359
<v Speaker 4>not matching, and yeah, that's that's interesting. Even more, if

424
00:27:56.759 --> 00:28:01.160
<v Speaker 4>for example, you have some connected structure like one structure

425
00:28:01.240 --> 00:28:07.599
<v Speaker 4>nested in another and you let's say car, and what

426
00:28:07.720 --> 00:28:13.079
<v Speaker 4>can be inside of the car. Let's say some some seat,

427
00:28:13.359 --> 00:28:17.400
<v Speaker 4>yeah seat, and you know these seats with leather or

428
00:28:17.480 --> 00:28:21.079
<v Speaker 4>other materials some, So we can imagine that for the

429
00:28:21.119 --> 00:28:24.880
<v Speaker 4>seat it can be a separate structure defining all the

430
00:28:24.960 --> 00:28:26.079
<v Speaker 4>parameters of the sea.

431
00:28:26.200 --> 00:28:28.680
<v Speaker 3>I want to cut a blue seed and orange seed

432
00:28:28.799 --> 00:28:31.000
<v Speaker 3>and two yellow seeds. Yeah.

433
00:28:31.160 --> 00:28:35.880
<v Speaker 4>For example, So if you give the default value of

434
00:28:36.000 --> 00:28:39.799
<v Speaker 4>seats to the car saying okay, I would like orange

435
00:28:40.200 --> 00:28:43.559
<v Speaker 4>seat and blue and put it into the depths truct

436
00:28:43.599 --> 00:28:47.799
<v Speaker 4>of the car. And if you use a dorma function

437
00:28:48.119 --> 00:28:53.279
<v Speaker 4>like seat dot new right, so it would check during

438
00:28:53.359 --> 00:28:58.720
<v Speaker 4>the compilation time the validity of this default value. And if,

439
00:28:58.759 --> 00:29:01.559
<v Speaker 4>for example, you put into the sea dot new some

440
00:29:02.160 --> 00:29:08.799
<v Speaker 4>invalid value by mistake instead of orange stream orange atom,

441
00:29:09.119 --> 00:29:13.079
<v Speaker 4>and it wouldn't manage the seed type. DOMO will also

442
00:29:13.680 --> 00:29:16.680
<v Speaker 4>give you back the compilation error saying okay. So you're

443
00:29:16.720 --> 00:29:20.680
<v Speaker 4>constructing the thing that is not mentioned the type as

444
00:29:20.720 --> 00:29:24.839
<v Speaker 4>a default value. And this works even in function calls.

445
00:29:25.119 --> 00:29:28.920
<v Speaker 4>So if you pass this default value with domo dot

446
00:29:29.000 --> 00:29:33.039
<v Speaker 4>new to the function heater definition, it will also be

447
00:29:33.160 --> 00:29:37.160
<v Speaker 4>checked during the compile time. So how DOMO does that.

448
00:29:37.920 --> 00:29:43.680
<v Speaker 4>It basically tracks the calls to dot new that is

449
00:29:43.720 --> 00:29:48.799
<v Speaker 4>generated by the DOMA obviously, and then during the compilation

450
00:29:49.039 --> 00:29:54.559
<v Speaker 4>pass it just make validation of these fields.

451
00:29:55.000 --> 00:29:59.000
<v Speaker 3>Okay, that some timeful. I mean I've not a had

452
00:29:59.000 --> 00:30:03.079
<v Speaker 3>a scenario. Well default values were as complex where I said, okay,

453
00:30:03.279 --> 00:30:05.240
<v Speaker 3>I want to verify about it. Don't make the mistake here.

454
00:30:05.279 --> 00:30:07.680
<v Speaker 3>But if you get for free, that's what's nice, I guess.

455
00:30:07.799 --> 00:30:12.160
<v Speaker 4>Yeah, And you know the software is constantly evolving, so

456
00:30:13.279 --> 00:30:16.839
<v Speaker 4>and it may happen then for example, at some point

457
00:30:16.839 --> 00:30:20.440
<v Speaker 4>in time you change the type of your structure and

458
00:30:20.799 --> 00:30:25.160
<v Speaker 4>all humans, so you can forget to change the default value, right,

459
00:30:25.880 --> 00:30:31.599
<v Speaker 4>and that potentially could lead to mistakes, and DORMO play

460
00:30:31.640 --> 00:30:35.759
<v Speaker 4>safe here, so it gives you appropriate feedback very early

461
00:30:35.799 --> 00:30:36.599
<v Speaker 4>at compile time.

462
00:30:37.000 --> 00:30:39.039
<v Speaker 3>Charles, do you have any questions I've been talking.

463
00:30:38.839 --> 00:30:41.799
<v Speaker 1>About it's about to chime in. I'm more curious about

464
00:30:41.920 --> 00:30:45.920
<v Speaker 1>like testing and performance. Yeah, how does this affect any

465
00:30:45.960 --> 00:30:46.079
<v Speaker 1>of that?

466
00:30:47.279 --> 00:30:52.039
<v Speaker 4>Well, did some synthetic tests, so you can find the

467
00:30:52.880 --> 00:30:56.799
<v Speaker 4>detailed results in the read me to the library. What

468
00:30:57.039 --> 00:31:02.920
<v Speaker 4>I've observed it's one point twenty six times slower than

469
00:31:03.400 --> 00:31:08.000
<v Speaker 4>without library at run time. So it looks like around

470
00:31:08.599 --> 00:31:15.000
<v Speaker 4>thirty PAF and slower work. Same time you get valid

471
00:31:15.079 --> 00:31:18.680
<v Speaker 4>state of your application price.

472
00:31:19.359 --> 00:31:21.279
<v Speaker 3>I guess it makes sense when you're like, I wouldn't

473
00:31:21.279 --> 00:31:23.200
<v Speaker 3>probably use it in a scenario where I will already

474
00:31:23.359 --> 00:31:27.119
<v Speaker 3>know that certain data is valid, because then I mean,

475
00:31:27.319 --> 00:31:29.559
<v Speaker 3>way check in the first place. Right, But if you

476
00:31:29.720 --> 00:31:31.880
<v Speaker 3>are in a scenario they say, okay, I I'm not

477
00:31:32.200 --> 00:31:36.240
<v Speaker 3>uncertain that the data which I'm getting here is conforming

478
00:31:36.319 --> 00:31:38.920
<v Speaker 3>to what I expected to be, then sure why not?

479
00:31:39.079 --> 00:31:41.519
<v Speaker 3>I mean you can even write now validation at all,

480
00:31:41.599 --> 00:31:45.160
<v Speaker 3>but which works if the users friendly enough to give

481
00:31:45.200 --> 00:31:48.759
<v Speaker 3>you a right data. If they don't, then it's going

482
00:31:48.839 --> 00:31:51.880
<v Speaker 3>to go boom. Right, yeah, yes, and.

483
00:31:52.200 --> 00:31:55.880
<v Speaker 4>It's not only user sometimes the business logic can be

484
00:31:56.000 --> 00:32:00.440
<v Speaker 4>quite sophisticated. And if of course we have you test

485
00:32:00.640 --> 00:32:04.880
<v Speaker 4>and cover all not happy but unhappy path as well.

486
00:32:05.759 --> 00:32:10.400
<v Speaker 4>And same time, it can be that you can forget

487
00:32:10.519 --> 00:32:15.519
<v Speaker 4>are one or another combination of all parameters and adding

488
00:32:15.640 --> 00:32:21.720
<v Speaker 4>these validated against the type can add additional let's say,

489
00:32:23.079 --> 00:32:27.200
<v Speaker 4>it can give you additional insurance that you will have

490
00:32:27.400 --> 00:32:28.920
<v Speaker 4>valid state of your application.

491
00:32:29.880 --> 00:32:33.880
<v Speaker 3>One thing. As Charles asked about testing, for example, I say, like,

492
00:32:33.960 --> 00:32:36.119
<v Speaker 3>I let's go back to that example from earlier with

493
00:32:36.240 --> 00:32:39.079
<v Speaker 3>the idea it's a swing, it's supposed to start with

494
00:32:39.160 --> 00:32:41.599
<v Speaker 3>a letter A, Like I mean, how would I then

495
00:32:41.720 --> 00:32:44.079
<v Speaker 3>go roup fighting a test for that? Like? Because I mean,

496
00:32:44.240 --> 00:32:47.759
<v Speaker 3>as you mentioned earlier, this is like a reusable type, right,

497
00:32:47.839 --> 00:32:50.720
<v Speaker 3>like a type I can use the multiple places I

498
00:32:50.799 --> 00:32:53.240
<v Speaker 3>can see, like how I would use reuse like the

499
00:32:53.559 --> 00:32:57.359
<v Speaker 3>destruct how we test the struct definitions of dormal because

500
00:32:57.400 --> 00:33:00.920
<v Speaker 3>then I can just call dot new right if it

501
00:33:01.160 --> 00:33:04.400
<v Speaker 3>raises an error, it turns an error toroogle, then then

502
00:33:04.759 --> 00:33:09.079
<v Speaker 3>it can failed successful. Is that like an option to say, Okay,

503
00:33:09.160 --> 00:33:11.160
<v Speaker 3>I have this type over here, and now I would

504
00:33:11.200 --> 00:33:13.319
<v Speaker 3>write to write some tests because I also have some

505
00:33:13.400 --> 00:33:15.359
<v Speaker 3>preconditions attached to that, and I want to make sure

506
00:33:15.400 --> 00:33:19.480
<v Speaker 3>that I didn't make a mistake while writing these preconditions, right, yeah,

507
00:33:20.000 --> 00:33:22.359
<v Speaker 3>so like some option to do that? Yeah?

508
00:33:22.680 --> 00:33:26.720
<v Speaker 4>So I remember one talk in regards to that from

509
00:33:27.079 --> 00:33:31.839
<v Speaker 4>camp back about what is right size of unit that

510
00:33:32.200 --> 00:33:36.200
<v Speaker 4>is under the test. And I can say that, for example,

511
00:33:36.519 --> 00:33:40.599
<v Speaker 4>in the test, you can define as trugged for test

512
00:33:40.720 --> 00:33:45.519
<v Speaker 4>purposes that uses the type definition and be sure that

513
00:33:47.160 --> 00:33:53.559
<v Speaker 4>these preconditions associated with this type working properly by calling

514
00:33:53.720 --> 00:33:57.799
<v Speaker 4>these you know, test struck Nott new Okay, so this

515
00:33:58.039 --> 00:34:01.279
<v Speaker 4>would be what what does it? It means that you

516
00:34:01.359 --> 00:34:05.839
<v Speaker 4>would ast the interface and not internal implementation. Right, So

517
00:34:06.519 --> 00:34:11.440
<v Speaker 4>the publicly available interface provided by domo is this new

518
00:34:11.559 --> 00:34:13.960
<v Speaker 4>function and validate type function.

519
00:34:14.480 --> 00:34:18.360
<v Speaker 3>Okay, but there's no API where I can say, hey, Domo,

520
00:34:18.679 --> 00:34:22.239
<v Speaker 3>I'd like to use this type over there, and please

521
00:34:22.519 --> 00:34:24.840
<v Speaker 3>check it, like check piece values I give you, and

522
00:34:24.920 --> 00:34:29.639
<v Speaker 3>now tell me if that conforms, like basically probably similar

523
00:34:29.639 --> 00:34:32.960
<v Speaker 3>to what norm does. Right, there's like no altitude that

524
00:34:33.480 --> 00:34:36.440
<v Speaker 3>I guess they always have to go through, like the

525
00:34:36.960 --> 00:34:40.199
<v Speaker 3>motions of like specifying a struct and then I mean

526
00:34:40.280 --> 00:34:43.199
<v Speaker 3>either using a struct I already find or specifying one

527
00:34:43.239 --> 00:34:45.320
<v Speaker 3>if I want to, for example, test the remote type.

528
00:34:45.639 --> 00:34:49.239
<v Speaker 4>Yeah, well technically you can, so you can call type

529
00:34:49.360 --> 00:34:53.079
<v Speaker 4>ensure modules that Domo generates for these kind of things.

530
00:34:53.199 --> 00:34:57.800
<v Speaker 4>So there is a public function that is called. And

531
00:34:58.400 --> 00:35:02.639
<v Speaker 4>on the other hand, it's a question where your interface is.

532
00:35:02.880 --> 00:35:08.480
<v Speaker 3>So if yeah, I guess we're now entering some a

533
00:35:08.679 --> 00:35:13.920
<v Speaker 3>certain level of philosophical conversation like what is a unit test?

534
00:35:15.239 --> 00:35:18.039
<v Speaker 3>What is the purpose of life? Yeah?

535
00:35:18.159 --> 00:35:21.679
<v Speaker 4>Well, it's possible to do the unit testing with either

536
00:35:21.800 --> 00:35:26.079
<v Speaker 4>new function or with calling typing. Sure, model directly.

537
00:35:26.880 --> 00:35:29.400
<v Speaker 3>Yeah, I can see why I call it. Type into

538
00:35:29.400 --> 00:35:33.599
<v Speaker 3>a model directly is something which probably should not be encouraged.

539
00:35:34.880 --> 00:35:37.239
<v Speaker 3>From what you told me, it feels like it's more

540
00:35:37.239 --> 00:35:41.360
<v Speaker 3>of a private API think, so yeah, yeah, better not

541
00:35:41.519 --> 00:35:42.400
<v Speaker 3>go there, I guess.

542
00:35:42.800 --> 00:35:46.639
<v Speaker 4>So it's a quite simple thing. On the other hand,

543
00:35:47.239 --> 00:35:52.320
<v Speaker 4>if you would like to express business rooms, it's another

544
00:35:52.519 --> 00:35:55.480
<v Speaker 4>possible way to do that. So for me, it's also

545
00:35:55.800 --> 00:36:02.400
<v Speaker 4>always a question to keep every scene in place, especially

546
00:36:02.519 --> 00:36:05.760
<v Speaker 4>when some parts of the business rules are shared across

547
00:36:05.920 --> 00:36:10.719
<v Speaker 4>various parts of the application or even across several micro services.

548
00:36:11.199 --> 00:36:13.800
<v Speaker 3>So abe bit of a hard question now when it's

549
00:36:13.880 --> 00:36:18.280
<v Speaker 3>like a scenario where you would not use DOMO, So

550
00:36:18.599 --> 00:36:20.960
<v Speaker 3>it fe like, say, okay, this is just not the

551
00:36:21.079 --> 00:36:24.320
<v Speaker 3>right tool for job when people may be reach for

552
00:36:24.400 --> 00:36:26.239
<v Speaker 3>something else or write custom code.

553
00:36:26.880 --> 00:36:30.559
<v Speaker 4>Yeah, so I think every tool should be used for

554
00:36:30.679 --> 00:36:39.239
<v Speaker 4>appropriate problem. And if it's high performances application like maybe cryptocurrency,

555
00:36:39.719 --> 00:36:46.920
<v Speaker 4>where you have heavy calculations and every microsecond is on count,

556
00:36:47.239 --> 00:36:52.599
<v Speaker 4>then maybe it's not right a problem to use DOMO for.

557
00:36:53.320 --> 00:36:55.719
<v Speaker 4>On the other hand, if you have a business application

558
00:36:56.119 --> 00:37:00.199
<v Speaker 4>like e commerce, website or lots of business logic that

559
00:37:00.480 --> 00:37:04.840
<v Speaker 4>should work correctly and you can spend some time to

560
00:37:05.239 --> 00:37:08.760
<v Speaker 4>get the answer to provide the user, then dom could

561
00:37:08.800 --> 00:37:09.599
<v Speaker 4>be a good choice.

562
00:37:10.199 --> 00:37:13.599
<v Speaker 3>Okay, So what is any anything you see on the

563
00:37:13.679 --> 00:37:16.800
<v Speaker 3>horizon for for like DOMO, any next steps you'd like

564
00:37:16.880 --> 00:37:19.199
<v Speaker 3>to take, anything which is missing and you'd like to

565
00:37:19.280 --> 00:37:21.360
<v Speaker 3>tackle what comes next.

566
00:37:22.719 --> 00:37:28.119
<v Speaker 4>Yeah, So I'm looking forward for some large system to

567
00:37:29.079 --> 00:37:33.559
<v Speaker 4>give this library a try, because all applications I work

568
00:37:33.679 --> 00:37:40.400
<v Speaker 4>with of the average size, so it's kind of web

569
00:37:40.519 --> 00:37:45.960
<v Speaker 4>shops or such kind of websites, and I'm really interested

570
00:37:46.159 --> 00:37:49.920
<v Speaker 4>to see how it would work on one hundred micro

571
00:37:50.000 --> 00:37:56.039
<v Speaker 4>services setups, so where you have lots of components that

572
00:37:56.119 --> 00:38:00.760
<v Speaker 4>should be play that should play nice together too, and

573
00:38:01.760 --> 00:38:06.920
<v Speaker 4>very welcome for any such kind of collaborations to run

574
00:38:07.000 --> 00:38:13.119
<v Speaker 4>a test on such larger than average systems. Other plans

575
00:38:13.239 --> 00:38:19.480
<v Speaker 4>are to add additional type checks to dormo, Like it

576
00:38:19.679 --> 00:38:24.039
<v Speaker 4>checks all the standard types, but that are defined in

577
00:38:24.199 --> 00:38:27.760
<v Speaker 4>the Elixir documentation. At the same time, it doesn't check

578
00:38:28.480 --> 00:38:35.639
<v Speaker 4>types that referencing itself yet, so I mean crimary trees,

579
00:38:36.119 --> 00:38:41.000
<v Speaker 4>recursive types, right, So I'd like to add support for that.

580
00:38:41.480 --> 00:38:47.039
<v Speaker 4>It's not such usual scenario in business applications, but I

581
00:38:47.360 --> 00:38:48.320
<v Speaker 4>intend to support this.

582
00:38:48.719 --> 00:38:51.639
<v Speaker 3>I've done this when I wanted to have a representation

583
00:38:51.840 --> 00:38:54.440
<v Speaker 3>of like adjacent of like an arbitrary adjacent because then

584
00:38:54.519 --> 00:38:57.400
<v Speaker 3>you can say, okay, like adjacent value can be like

585
00:38:57.480 --> 00:38:59.559
<v Speaker 3>a list, that can be an integer, that can be

586
00:38:59.599 --> 00:39:01.400
<v Speaker 3>a stream, but it can also gain be an object

587
00:39:01.880 --> 00:39:07.320
<v Speaker 3>with in turn users values which then by definition, so yeah,

588
00:39:07.320 --> 00:39:09.960
<v Speaker 3>and I can see why why that we useful? Yeah,

589
00:39:10.119 --> 00:39:13.599
<v Speaker 3>and for many for many such kinds of definitions. DOMO

590
00:39:14.079 --> 00:39:17.239
<v Speaker 3>is working. Now if you say, okay, this is part

591
00:39:17.320 --> 00:39:20.599
<v Speaker 3>of Jason, and inside of this part of Jason, it

592
00:39:20.639 --> 00:39:22.599
<v Speaker 3>would be the same part of Jason, so you know,

593
00:39:23.079 --> 00:39:25.280
<v Speaker 3>recursively and DOMO wouldn't work.

594
00:39:25.800 --> 00:39:28.199
<v Speaker 4>So yeah, what happens when you do that? It doesn't

595
00:39:28.239 --> 00:39:31.280
<v Speaker 4>raise an error? Yeah, yeah, it rises an error that

596
00:39:31.519 --> 00:39:37.239
<v Speaker 4>is not supported yet. Okay, so no binary trees for now, sorry,

597
00:39:37.440 --> 00:39:42.440
<v Speaker 4>so with leaves and branches, but it's it's a question

598
00:39:42.679 --> 00:39:45.119
<v Speaker 4>of some further work on that.

599
00:39:45.760 --> 00:39:50.239
<v Speaker 3>It's also mean it might just then explode the runtime complexity, right,

600
00:39:50.320 --> 00:39:54.079
<v Speaker 3>because if you have a very large binarit tree, yes,

601
00:39:54.559 --> 00:39:56.519
<v Speaker 3>but sure, that's that's always an issue.

602
00:39:57.239 --> 00:40:00.800
<v Speaker 4>Sure, And for example, if you have very long list

603
00:40:01.000 --> 00:40:04.719
<v Speaker 4>that can be in your structure, it's also can be

604
00:40:04.800 --> 00:40:09.360
<v Speaker 4>an issue. So This is natural limitation for DOMO because

605
00:40:09.599 --> 00:40:14.920
<v Speaker 4>it validates each list tallemands for conformance to the type,

606
00:40:15.320 --> 00:40:18.599
<v Speaker 4>so it should be considered as well.

607
00:40:18.840 --> 00:40:21.800
<v Speaker 3>It's like some some smart instead of DOMO, for example,

608
00:40:21.800 --> 00:40:24.320
<v Speaker 3>when you say I've got a list of any, because

609
00:40:24.360 --> 00:40:27.440
<v Speaker 3>then there has no reason to check each element of

610
00:40:27.559 --> 00:40:30.079
<v Speaker 3>a list if you say it can be anything. Is

611
00:40:30.320 --> 00:40:33.039
<v Speaker 3>something like that DOMO or yeah.

612
00:40:33.119 --> 00:40:38.960
<v Speaker 4>Well in regards to Liz, no, Well, it's so there

613
00:40:39.000 --> 00:40:42.360
<v Speaker 4>are such kind of optimizations. If you say that some

614
00:40:42.559 --> 00:40:45.719
<v Speaker 4>field is any, for example, it wouldn't be checked, so

615
00:40:46.119 --> 00:40:49.760
<v Speaker 4>it would be a shortcut like okay, SVLID and lists

616
00:40:50.079 --> 00:40:55.760
<v Speaker 4>should be supported as well with any type inside. Yeah,

617
00:40:56.119 --> 00:40:59.480
<v Speaker 4>so I intend to look up for other such kind

618
00:40:59.519 --> 00:41:00.760
<v Speaker 4>of optimitysations too.

619
00:41:01.800 --> 00:41:03.719
<v Speaker 3>But I guess that goes into what you said earlier,

620
00:41:03.880 --> 00:41:06.199
<v Speaker 3>like to see it use the larger scale, and then

621
00:41:06.719 --> 00:41:09.320
<v Speaker 3>these kinds of issues and optimization things are going to

622
00:41:09.360 --> 00:41:14.639
<v Speaker 3>crop up naturally because you push the library to its limits. Yeah,

623
00:41:14.760 --> 00:41:18.280
<v Speaker 3>that's true. Okay, child to you if anything left because

624
00:41:18.400 --> 00:41:19.360
<v Speaker 3>I'm trying out.

625
00:41:19.599 --> 00:41:22.599
<v Speaker 1>I think you pretty much covered it. Yeah, a couple

626
00:41:22.639 --> 00:41:24.119
<v Speaker 1>of the questions I was going to ask and when

627
00:41:24.159 --> 00:41:24.760
<v Speaker 1>you cover them.

628
00:41:24.719 --> 00:41:28.960
<v Speaker 4>So so it may seems a bit weird from the

629
00:41:29.320 --> 00:41:33.679
<v Speaker 4>first point of view, right, So attaching pre conditions to

630
00:41:33.840 --> 00:41:37.679
<v Speaker 4>types and sharing here in there, but all the other

631
00:41:38.400 --> 00:41:43.079
<v Speaker 4>And it's another view on the same problem of having

632
00:41:43.360 --> 00:41:48.039
<v Speaker 4>valid state and fulfiling invariants in your models.

633
00:41:48.480 --> 00:41:51.360
<v Speaker 2>So all right, well, I'm gonna push your Swart picks.

634
00:41:51.719 --> 00:41:55.199
<v Speaker 1>You have a conversation about stuff that we like before

635
00:41:55.239 --> 00:41:58.079
<v Speaker 1>we do that, though, yvon if people want to follow

636
00:41:58.119 --> 00:42:01.000
<v Speaker 1>you on social media connect how do they do that?

637
00:42:01.360 --> 00:42:05.039
<v Speaker 4>You can follow me on githab My username is Ivan

638
00:42:05.199 --> 00:42:09.239
<v Speaker 4>rublev and you can follow me on Twitter. User name

639
00:42:09.360 --> 00:42:13.840
<v Speaker 4>is Levy Brown. Maybe I should write it somewhere folks,

640
00:42:13.880 --> 00:42:16.840
<v Speaker 4>and you can add it to the description of the podcast.

641
00:42:17.519 --> 00:42:18.440
<v Speaker 3>Yeah, yeah, we'll do that.

642
00:42:18.800 --> 00:42:20.880
<v Speaker 1>Yeah, absolutely, yeah, I just put it in the chat.

643
00:42:21.039 --> 00:42:24.880
<v Speaker 1>Well all right, well let's go ahead and do the picks, Sasha,

644
00:42:25.000 --> 00:42:26.039
<v Speaker 1>Do you have some picks for us?

645
00:42:26.639 --> 00:42:29.159
<v Speaker 3>Yes, And it's actually related to what we talked about,

646
00:42:29.199 --> 00:42:31.760
<v Speaker 3>because I mean even mentioned that he A lot of

647
00:42:31.880 --> 00:42:34.599
<v Speaker 3>these ideas are based on the main driven design by

648
00:42:34.840 --> 00:42:41.079
<v Speaker 3>Evan True. I forgot his last name, Evan Evans, Eric Evans, Yeah, Eric,

649
00:42:41.519 --> 00:42:44.559
<v Speaker 3>that was And there's also another book not from Eric Evans,

650
00:42:44.679 --> 00:42:48.880
<v Speaker 3>but from from Scott Blushing and that's called the main

651
00:42:48.960 --> 00:42:52.440
<v Speaker 3>Modeling Made Functional. Yeah, that's an amazing book. Yeah, it's

652
00:42:52.559 --> 00:42:54.599
<v Speaker 3>very nice. Arguably it's probably the best book I've read

653
00:42:54.639 --> 00:42:58.360
<v Speaker 3>it on the winderin design. It's also relatively short, especially

654
00:42:58.400 --> 00:43:00.679
<v Speaker 3>compared to Eric Evans book, which is not short.

655
00:43:03.920 --> 00:43:06.039
<v Speaker 2>And we should see if we get Eric on we

656
00:43:06.159 --> 00:43:08.559
<v Speaker 2>had him on Ruby Road for a long time ago.

657
00:43:09.360 --> 00:43:12.079
<v Speaker 3>Nice. Wow, yeah, that would be pretty cool, to be honest,

658
00:43:12.400 --> 00:43:14.360
<v Speaker 3>maybe you could also get Scott Blushing. Of all, he's

659
00:43:14.360 --> 00:43:16.679
<v Speaker 3>not an elixir of death. But yeah, just to get

660
00:43:16.719 --> 00:43:18.480
<v Speaker 3>back to the pic. So the book is called domin

661
00:43:18.559 --> 00:43:21.079
<v Speaker 3>Modeling Made Functional, and it's it's actually a nice introduction

662
00:43:21.239 --> 00:43:24.360
<v Speaker 3>into both like in the domainder design and also functional programming.

663
00:43:25.000 --> 00:43:28.000
<v Speaker 3>He's using f sharp there, and he's like talking a

664
00:43:28.039 --> 00:43:30.679
<v Speaker 3>lot about how to use the type system to basically

665
00:43:30.840 --> 00:43:35.119
<v Speaker 3>help you restricting and like restricting things to what they

666
00:43:35.159 --> 00:43:39.239
<v Speaker 3>should be to like basically avoid in that state already

667
00:43:39.320 --> 00:43:41.559
<v Speaker 3>on the type system level, which plays a bit in

668
00:43:41.639 --> 00:43:43.840
<v Speaker 3>what we talked about today, because I mean demo helps

669
00:43:43.880 --> 00:43:48.960
<v Speaker 3>with like using the type definitions and forcing those. And yeah,

670
00:43:49.039 --> 00:43:51.760
<v Speaker 3>it's like a really really nice book. It's well written,

671
00:43:52.000 --> 00:43:55.599
<v Speaker 3>it's it didn't really bore me to death text books

672
00:43:55.639 --> 00:43:58.639
<v Speaker 3>which I just stopped reading at a certain point. And

673
00:43:58.760 --> 00:44:01.440
<v Speaker 3>if anybody is interested in my demander of design is

674
00:44:01.480 --> 00:44:04.079
<v Speaker 3>into some function programming and types, then I can really

675
00:44:04.320 --> 00:44:05.599
<v Speaker 3>wold hotly recommend.

676
00:44:05.280 --> 00:44:07.360
<v Speaker 2>This book awesome. I'm going to throw out a couple

677
00:44:07.400 --> 00:44:07.760
<v Speaker 2>of picks.

678
00:44:08.480 --> 00:44:10.840
<v Speaker 1>The book I'm reading right now is I'm still in

679
00:44:10.880 --> 00:44:14.599
<v Speaker 1>the middle of a Rhythm of War by Brandon Sanderson.

680
00:44:15.039 --> 00:44:18.519
<v Speaker 1>Really enjoying that picture book fantasy book. I have another pick,

681
00:44:18.599 --> 00:44:20.599
<v Speaker 1>but I'm kind of saving it for last. There was

682
00:44:20.599 --> 00:44:22.280
<v Speaker 1>something else we're going to pick, and I can't remember.

683
00:44:22.599 --> 00:44:24.199
<v Speaker 1>I guess I'll just go to this last one because

684
00:44:24.199 --> 00:44:25.920
<v Speaker 1>I'm excited about it. So I've been doing a whole

685
00:44:25.920 --> 00:44:29.320
<v Speaker 1>bunch of work lately around the idea of top end devs.

686
00:44:30.000 --> 00:44:32.360
<v Speaker 1>You all, if you listen to dev chat dot tv

687
00:44:32.679 --> 00:44:36.000
<v Speaker 1>and are you subscribe to the mailing list and stuff

688
00:44:36.039 --> 00:44:37.440
<v Speaker 1>like that, you're going to start seeing a whole lot

689
00:44:37.519 --> 00:44:40.559
<v Speaker 1>more stuff branded with top end devs instead of dev

690
00:44:40.679 --> 00:44:43.559
<v Speaker 1>chat dot tv, because we're kind of moving everything over

691
00:44:43.920 --> 00:44:47.039
<v Speaker 1>to that, mainly because I want to communicate to people that, hey, look,

692
00:44:47.320 --> 00:44:49.159
<v Speaker 1>if you put in some effort. We talked a lot

693
00:44:49.199 --> 00:44:52.000
<v Speaker 1>about this last week with Audi. Audi and I talked

694
00:44:52.000 --> 00:44:54.639
<v Speaker 1>about this, but you can take your career wherever you

695
00:44:54.719 --> 00:44:58.360
<v Speaker 1>want it, and I am committed to that idea, and

696
00:44:58.519 --> 00:45:02.000
<v Speaker 1>so I want to because devchat dot tv doesn't dev

697
00:45:02.079 --> 00:45:04.239
<v Speaker 1>chat doesn't, it doesn't really mean anything.

698
00:45:04.800 --> 00:45:04.960
<v Speaker 3>You know.

699
00:45:05.119 --> 00:45:07.360
<v Speaker 1>The idea was is, Hey, we talked about dev right,

700
00:45:07.840 --> 00:45:10.559
<v Speaker 1>but this is kind of more of a higher idea

701
00:45:10.639 --> 00:45:11.599
<v Speaker 1>and aspirational idea.

702
00:45:11.800 --> 00:45:12.800
<v Speaker 2>One of the things that I'm doing.

703
00:45:12.840 --> 00:45:14.639
<v Speaker 1>And I can't remember if I brought this up last time,

704
00:45:14.679 --> 00:45:16.199
<v Speaker 1>and so I'm going to just throw it out here

705
00:45:16.320 --> 00:45:18.599
<v Speaker 1>so you all can show up if you need it.

706
00:45:18.960 --> 00:45:21.400
<v Speaker 1>But one of the things that I've really picked up

707
00:45:21.440 --> 00:45:22.960
<v Speaker 1>lately is is the coaching.

708
00:45:23.199 --> 00:45:23.360
<v Speaker 2>Right.

709
00:45:23.480 --> 00:45:26.440
<v Speaker 1>I've just loved helping people figure out, Hey, what do

710
00:45:26.519 --> 00:45:28.000
<v Speaker 1>I do next, What do we need to learn, what

711
00:45:28.079 --> 00:45:31.800
<v Speaker 1>do I need to work on to grow into what

712
00:45:32.000 --> 00:45:35.480
<v Speaker 1>I want what I want to be. And as I've

713
00:45:35.880 --> 00:45:38.880
<v Speaker 1>been doing that, it just it just fires me up.

714
00:45:38.960 --> 00:45:41.519
<v Speaker 1>I mean, I had a conversation with somebody on Friday,

715
00:45:42.119 --> 00:45:44.239
<v Speaker 1>and you know, he's trying to figure out where to

716
00:45:44.320 --> 00:45:46.559
<v Speaker 1>go next, right, and we talked about all kinds of stuff,

717
00:45:47.000 --> 00:45:48.880
<v Speaker 1>and at the end of the call, you know it's like, hey,

718
00:45:49.000 --> 00:45:51.119
<v Speaker 1>you know, go do this stuff. Let's talk in a

719
00:45:51.159 --> 00:45:55.599
<v Speaker 1>couple of weeks, right, and holy cow is just seeing

720
00:45:55.639 --> 00:45:58.679
<v Speaker 1>the potential of what he can do and the power

721
00:45:58.800 --> 00:46:00.000
<v Speaker 1>behind what he can accomplish.

722
00:46:00.920 --> 00:46:02.239
<v Speaker 2>It just gets me going, right.

723
00:46:02.760 --> 00:46:06.199
<v Speaker 1>And there are some things that everybody can do, and

724
00:46:06.320 --> 00:46:08.320
<v Speaker 1>then there are some things that, as we get into

725
00:46:08.360 --> 00:46:11.159
<v Speaker 1>the particulars of your situation, you can do, right. And

726
00:46:11.239 --> 00:46:12.920
<v Speaker 1>that's kind of the difference I guess between like the

727
00:46:12.960 --> 00:46:16.079
<v Speaker 1>course and coaching, or training and coaching. And so what

728
00:46:16.159 --> 00:46:18.280
<v Speaker 1>I'm doing is I'm kind of splitting the difference between both.

729
00:46:18.639 --> 00:46:21.320
<v Speaker 1>And so I'm using Zoom's webinar system. But it's not

730
00:46:21.360 --> 00:46:23.880
<v Speaker 1>a webinar, right. Webinar is I give you half the

731
00:46:23.960 --> 00:46:27.280
<v Speaker 1>information that's useful, leave you hanging, and then give you

732
00:46:27.320 --> 00:46:29.440
<v Speaker 1>a sales pitch. I'm not doing any of that crap. Okay,

733
00:46:29.559 --> 00:46:31.599
<v Speaker 1>that's I'm not doing a webinar. But I am going

734
00:46:31.679 --> 00:46:33.320
<v Speaker 1>to do training. So I'm gonna do like ten or

735
00:46:33.360 --> 00:46:36.199
<v Speaker 1>fifteen minutes of training and then for then the rest

736
00:46:36.280 --> 00:46:38.159
<v Speaker 1>of the hour hour and a half that I have,

737
00:46:38.960 --> 00:46:41.920
<v Speaker 1>I'm planning on doing this Wednesdays around noon mountain time.

738
00:46:42.239 --> 00:46:46.320
<v Speaker 1>I'm just gonna take questions, okay, and not take questions

739
00:46:46.400 --> 00:46:49.880
<v Speaker 1>in the sense of you know, what what what? How

740
00:46:49.920 --> 00:46:51.519
<v Speaker 1>do how do strings work in elixir?

741
00:46:51.679 --> 00:46:51.719
<v Speaker 3>You?

742
00:46:51.760 --> 00:46:53.800
<v Speaker 1>No, it's not that kind of stuff, right if I

743
00:46:53.960 --> 00:46:55.920
<v Speaker 1>if you have that question and I can answer it,

744
00:46:55.960 --> 00:46:57.519
<v Speaker 1>you can ask it, right, and I'll try and answer it.

745
00:46:58.039 --> 00:47:00.880
<v Speaker 2>But what I'm really looking to dive into is, hey,

746
00:47:01.480 --> 00:47:03.000
<v Speaker 2>I've got this far.

747
00:47:03.039 --> 00:47:05.440
<v Speaker 1>In my career, or hey, I'm trying to figure this

748
00:47:05.559 --> 00:47:08.360
<v Speaker 1>stuff out, or hey, i've got this situation at work,

749
00:47:08.559 --> 00:47:09.960
<v Speaker 1>or I'm trying to find a job and I'm not

750
00:47:10.000 --> 00:47:12.960
<v Speaker 1>getting interviews, or things are going really well, but I

751
00:47:13.039 --> 00:47:14.079
<v Speaker 1>feel like I could do more.

752
00:47:14.159 --> 00:47:16.440
<v Speaker 2>What should I be doing next? And then we'll actually

753
00:47:16.599 --> 00:47:19.519
<v Speaker 2>talk through your situation, right, talk through where you're at,

754
00:47:20.280 --> 00:47:22.320
<v Speaker 2>and figure out where things should go.

755
00:47:22.480 --> 00:47:22.599
<v Speaker 3>Right.

756
00:47:22.679 --> 00:47:25.519
<v Speaker 2>So it's going to be almost more coaching than Q

757
00:47:25.719 --> 00:47:27.880
<v Speaker 2>and A. But we'll just do it until we run

758
00:47:27.920 --> 00:47:31.199
<v Speaker 2>out of time, run out of questions, whatever, right, And

759
00:47:32.440 --> 00:47:34.199
<v Speaker 2>I really just want to help people out, So it's

760
00:47:34.239 --> 00:47:39.239
<v Speaker 2>totally free, right, no commitment, no whatever. I'm not going

761
00:47:39.320 --> 00:47:41.199
<v Speaker 2>to do a sales pitch right and try and sell

762
00:47:41.239 --> 00:47:43.159
<v Speaker 2>you on coaching, nothing like that.

763
00:47:43.360 --> 00:47:43.519
<v Speaker 3>Right.

764
00:47:43.840 --> 00:47:47.079
<v Speaker 1>I am offering paid coaching, but I'm not gonna try

765
00:47:47.079 --> 00:47:49.559
<v Speaker 1>and sell anybody on that on these calls. Right, it's

766
00:47:49.639 --> 00:47:53.400
<v Speaker 1>completely free, completely you know whatever. So all you have

767
00:47:53.480 --> 00:47:55.079
<v Speaker 1>to do is just go to dev chat dot TV

768
00:47:55.199 --> 00:47:57.159
<v Speaker 1>slash level up. I think you have to put your

769
00:47:57.199 --> 00:47:59.880
<v Speaker 1>email address in so that the Zoom system can send

770
00:47:59.920 --> 00:48:03.239
<v Speaker 1>you the link to the webinar software and then from

771
00:48:03.280 --> 00:48:07.840
<v Speaker 1>there you're in, right, And yeah, just show up, jump

772
00:48:07.920 --> 00:48:10.760
<v Speaker 1>on the call, and we'll answer as many questions as

773
00:48:10.800 --> 00:48:13.320
<v Speaker 1>you want. And if we don't get to you, then

774
00:48:13.360 --> 00:48:15.360
<v Speaker 1>show up the next week, right, because we're going to

775
00:48:15.400 --> 00:48:18.880
<v Speaker 1>do it every week. And yeah, I'm really looking forward

776
00:48:18.920 --> 00:48:20.880
<v Speaker 1>to helping some folks out. Like I said, this is

777
00:48:20.960 --> 00:48:24.199
<v Speaker 1>the stuff that really just makes me feel like I'm

778
00:48:24.400 --> 00:48:28.039
<v Speaker 1>making a difference myself, right, and then yeah, you know,

779
00:48:28.159 --> 00:48:31.719
<v Speaker 1>if it turns into a kind of a deeper relationship

780
00:48:31.800 --> 00:48:33.679
<v Speaker 1>and we wind up doing coaching, than great. And if

781
00:48:34.119 --> 00:48:37.119
<v Speaker 1>I kind of get you there in twenty minutes, then great.

782
00:48:37.360 --> 00:48:39.239
<v Speaker 1>Then you got there in twenty minutes, and you can

783
00:48:39.280 --> 00:48:41.280
<v Speaker 1>come back when you get stuck again or you need

784
00:48:41.320 --> 00:48:44.199
<v Speaker 1>more guidance. All right, So that's kind of what I'm

785
00:48:44.239 --> 00:48:46.199
<v Speaker 1>looking at, and I'm really hoping that I can help

786
00:48:46.239 --> 00:48:46.679
<v Speaker 1>some fokes out.

787
00:48:46.719 --> 00:48:48.400
<v Speaker 2>So dev chat, not TV slash level up, that's my

788
00:48:48.840 --> 00:48:49.840
<v Speaker 2>evon what are your picks?

789
00:48:50.000 --> 00:48:55.000
<v Speaker 4>Okay, my peak for today and his book called micro

790
00:48:55.119 --> 00:48:59.119
<v Speaker 4>Services in Auction by Morgan Bruce and Paul Opereira. It's

791
00:48:59.719 --> 00:49:04.880
<v Speaker 4>very nice and laconic book about building micro services the

792
00:49:05.000 --> 00:49:07.880
<v Speaker 4>right way to Yeah, you can recommend it.

793
00:49:08.239 --> 00:49:10.719
<v Speaker 2>Awesome. All right, Well we're gonna go ahead and wrap up.

794
00:49:10.920 --> 00:49:12.159
<v Speaker 2>Thanks for coming. This was fun.

795
00:49:12.320 --> 00:49:16.199
<v Speaker 4>Thanks a lot, folks. It was very nice discussion about

796
00:49:16.280 --> 00:49:19.800
<v Speaker 4>types and the library. Thanks for having me today.

797
00:49:20.519 --> 00:49:22.280
<v Speaker 3>If you fear interested in types like, check out our

798
00:49:22.320 --> 00:49:28.119
<v Speaker 3>episode with the Gleam of Lewis. Oh yeah, that's fun too, Yes, yes,

799
00:49:28.199 --> 00:49:31.320
<v Speaker 3>Gleam is very nice. Usually very nice too. We had

800
00:49:31.559 --> 00:49:33.599
<v Speaker 3>two weeks ago on the show. That was pretty cool.

801
00:49:33.760 --> 00:49:34.760
<v Speaker 2>Yeah, louis cool.

802
00:49:35.280 --> 00:49:35.760
<v Speaker 3>Good stuff.

803
00:49:35.800 --> 00:49:38.360
<v Speaker 2>All right, Well till next time, folks. Next up,
