WEBVTT

1
00:00:09.480 --> 00:00:13.119
<v Speaker 1>Welcome to Alixer Mix, your Elixer podcast talking with members

2
00:00:13.160 --> 00:00:15.960
<v Speaker 1>of the community. My name is Mark Erickson, and today

3
00:00:16.000 --> 00:00:19.160
<v Speaker 1>we're joined by Sophie de Benedetto. Hey guys, and our

4
00:00:19.239 --> 00:00:20.800
<v Speaker 1>guest Alvisa Sousmel.

5
00:00:21.320 --> 00:00:23.280
<v Speaker 2>Hello, thanks for having me.

6
00:00:23.640 --> 00:00:24.640
<v Speaker 3>I'm glad you could come on.

7
00:00:25.079 --> 00:00:28.000
<v Speaker 1>So this is an exciting topic for me because it's

8
00:00:28.000 --> 00:00:31.120
<v Speaker 1>something I find fascinating. I think whenever I hear about this,

9
00:00:31.199 --> 00:00:33.799
<v Speaker 1>I think, Wow, that's super advanced and futuristic, and I

10
00:00:34.000 --> 00:00:36.159
<v Speaker 1>have no idea how to do it myself. And so

11
00:00:36.240 --> 00:00:39.960
<v Speaker 1>we've invited Alvisa on to help talk about how to

12
00:00:39.960 --> 00:00:43.119
<v Speaker 1>do this, and so like what we're talking about is

13
00:00:43.679 --> 00:00:46.679
<v Speaker 1>using like image recognition with the Elixer.

14
00:00:46.719 --> 00:00:47.960
<v Speaker 3>And really cool stuff like that.

15
00:00:48.159 --> 00:00:52.079
<v Speaker 1>So first of all, Alvisa, maybe you could tell us

16
00:00:52.119 --> 00:00:54.759
<v Speaker 1>like where you work and a little bit about yourself,

17
00:00:54.920 --> 00:00:56.280
<v Speaker 1>what kind of problems you're solving.

18
00:00:57.000 --> 00:01:01.159
<v Speaker 4>Yes, sure, Seeing the last five six years I've been

19
00:01:01.320 --> 00:01:05.079
<v Speaker 4>a CEO in a London hedge fund and I'm still

20
00:01:05.120 --> 00:01:09.319
<v Speaker 4>working from them as a consultant and at the moment

21
00:01:09.359 --> 00:01:13.359
<v Speaker 4>I'm consulting and running queticoding dot com, which is an

22
00:01:13.439 --> 00:01:17.920
<v Speaker 4>educational site which is at the moment is mainly focused

23
00:01:17.959 --> 00:01:21.799
<v Speaker 4>on Elixir and Phoenix, and I'm working to make some

24
00:01:21.959 --> 00:01:27.480
<v Speaker 4>free and paid Elixir Phoenix courses. And my current clients

25
00:01:27.519 --> 00:01:33.239
<v Speaker 4>are from finance, so the problems I'm facing are similar

26
00:01:33.319 --> 00:01:35.879
<v Speaker 4>to what I've faced so far at the edge fund,

27
00:01:36.519 --> 00:01:40.640
<v Speaker 4>and so to describe what kind of problems I had

28
00:01:40.680 --> 00:01:47.040
<v Speaker 4>to face at the hedge Fund, We've designed three different architectures,

29
00:01:48.319 --> 00:01:51.480
<v Speaker 4>mainly process data in real time. So the first was

30
00:01:51.560 --> 00:01:55.959
<v Speaker 4>the process data for real time traits coming from different

31
00:01:56.000 --> 00:02:01.879
<v Speaker 4>texchanges for hundreds of different products, products, our financial products,

32
00:02:02.040 --> 00:02:06.879
<v Speaker 4>different assets, and the goal of this platform is to

33
00:02:06.959 --> 00:02:10.800
<v Speaker 4>use the data to run our trading models. And in

34
00:02:10.800 --> 00:02:14.560
<v Speaker 4>this case we had we have a lot of Python

35
00:02:14.840 --> 00:02:19.639
<v Speaker 4>code because all the data science framework there are really

36
00:02:19.639 --> 00:02:20.479
<v Speaker 4>great data.

37
00:02:20.680 --> 00:02:22.520
<v Speaker 2>Science framework there.

38
00:02:22.919 --> 00:02:28.719
<v Speaker 4>And another platform was is to process financial tweets in

39
00:02:28.759 --> 00:02:31.759
<v Speaker 4>real time, so we get a huge amount of tweets

40
00:02:31.800 --> 00:02:34.719
<v Speaker 4>in real time. We run our machine learning models to

41
00:02:34.759 --> 00:02:39.759
<v Speaker 4>cluster these tweets to understand which company they refer to,

42
00:02:40.240 --> 00:02:45.080
<v Speaker 4>and then the system generates a minute by minute sentiment

43
00:02:45.360 --> 00:02:49.159
<v Speaker 4>for each company which is useful in different trading situations.

44
00:02:50.439 --> 00:02:53.680
<v Speaker 4>And we have also another platform which is an internal

45
00:02:53.680 --> 00:02:57.960
<v Speaker 4>platform for research. Is like a set of research tools

46
00:02:58.319 --> 00:03:02.840
<v Speaker 4>we used to exchange in form about research. So what

47
00:03:02.919 --> 00:03:06.120
<v Speaker 4>they have in common is the need to process real

48
00:03:06.240 --> 00:03:10.240
<v Speaker 4>time let's say events, and to especially to self heal

49
00:03:11.039 --> 00:03:16.439
<v Speaker 4>because we need we need to stay up. Obviously it's

50
00:03:16.439 --> 00:03:19.639
<v Speaker 4>not one hundred percent, but we need to stay to

51
00:03:19.719 --> 00:03:23.879
<v Speaker 4>be reactive to any kind of anomaly, and to.

52
00:03:23.840 --> 00:03:28.919
<v Speaker 2>Process UH trades as far as fast as we can.

53
00:03:29.439 --> 00:03:29.759
<v Speaker 3>Nice.

54
00:03:29.919 --> 00:03:32.919
<v Speaker 1>So you mentioned in there like the need to leverage

55
00:03:32.960 --> 00:03:38.680
<v Speaker 1>other libraries or languages outside of UH you know, Corelixer,

56
00:03:39.120 --> 00:03:42.120
<v Speaker 1>and it seems like in today's development environment that seems

57
00:03:42.120 --> 00:03:45.599
<v Speaker 1>to be increasingly the case because you have, like you'd mentioned,

58
00:03:45.680 --> 00:03:48.439
<v Speaker 1>data scientists who are using their own tool set of tools,

59
00:03:48.960 --> 00:03:50.840
<v Speaker 1>and they already have these libraries that are being built

60
00:03:50.879 --> 00:03:53.120
<v Speaker 1>up by a whole community of people, and a.

61
00:03:53.039 --> 00:03:54.240
<v Speaker 3>Lot of those tend to be in Python.

62
00:03:54.639 --> 00:03:58.919
<v Speaker 1>And historically, just as web developers, I think we you know,

63
00:03:58.960 --> 00:04:01.680
<v Speaker 1>you're you're accustomed to having work with multiple languages because

64
00:04:01.680 --> 00:04:03.639
<v Speaker 1>you have a front end which might be written in

65
00:04:03.719 --> 00:04:06.000
<v Speaker 1>JavaScript and a back end which is written in something else.

66
00:04:07.319 --> 00:04:10.120
<v Speaker 1>Some people do approach, you know, take Node as a

67
00:04:10.159 --> 00:04:12.199
<v Speaker 1>back end, but you know we have a lixer, or

68
00:04:12.199 --> 00:04:14.680
<v Speaker 1>you've done Ruby on rails or Java or something else,

69
00:04:15.479 --> 00:04:17.399
<v Speaker 1>and then you have mobile on the front end. You know,

70
00:04:17.439 --> 00:04:21.319
<v Speaker 1>you're dealing with you know, mobile frameworks and mobile languages

71
00:04:21.360 --> 00:04:23.279
<v Speaker 1>and different platforms. So it's like we are kind of

72
00:04:23.279 --> 00:04:25.720
<v Speaker 1>in this area and this environment where we have to

73
00:04:25.720 --> 00:04:31.800
<v Speaker 1>deal with multiple types of tools, multiple communities. And so

74
00:04:32.000 --> 00:04:33.800
<v Speaker 1>one of the things I think is interesting is this

75
00:04:33.879 --> 00:04:37.319
<v Speaker 1>whole idea about how Python has a lot of these

76
00:04:37.360 --> 00:04:43.120
<v Speaker 1>libraries for doing like image recognition, for doing you know,

77
00:04:43.160 --> 00:04:45.120
<v Speaker 1>like where you know, be it Python or not. But

78
00:04:45.439 --> 00:04:51.040
<v Speaker 1>I might be using GPUs to do accelerated computing. And

79
00:04:52.360 --> 00:04:55.360
<v Speaker 1>so what I loved about your article is that you're

80
00:04:55.560 --> 00:04:58.959
<v Speaker 1>you're totally acknowledging that, right that there is stuff that

81
00:04:59.000 --> 00:05:02.959
<v Speaker 1>we need to use that's not an elixir. So we

82
00:05:03.199 --> 00:05:06.480
<v Speaker 1>want to basically try to leverage the benefits of each

83
00:05:06.800 --> 00:05:10.399
<v Speaker 1>the strength of each language and each platform to do

84
00:05:10.439 --> 00:05:12.839
<v Speaker 1>what they're best at. So maybe you can tell us

85
00:05:12.839 --> 00:05:15.839
<v Speaker 1>a little bit about this blog post that you wrote

86
00:05:15.920 --> 00:05:17.639
<v Speaker 1>and kind of give us an introduction to this topic

87
00:05:17.680 --> 00:05:18.680
<v Speaker 1>of what you're trying to do.

88
00:05:19.720 --> 00:05:25.759
<v Speaker 4>Yes, sure, the so the blog post is about real

89
00:05:25.879 --> 00:05:30.959
<v Speaker 4>time object detection uh and the idea of using real

90
00:05:31.000 --> 00:05:35.680
<v Speaker 4>time object detection in Phoenix UH. Well, in Elixir and

91
00:05:35.720 --> 00:05:38.839
<v Speaker 4>then using Phoenix to render the result.

92
00:05:40.319 --> 00:05:43.279
<v Speaker 2>So obviously the idea.

93
00:05:43.279 --> 00:05:45.759
<v Speaker 4>Of the of the blog post is not to reinvent

94
00:05:45.839 --> 00:05:52.199
<v Speaker 4>the will is actually to use something that is already there. So,

95
00:05:52.720 --> 00:05:55.920
<v Speaker 4>as you said, there are great frameworks in Python and

96
00:05:56.720 --> 00:06:01.399
<v Speaker 4>UH is there are also high level libraries like a

97
00:06:01.519 --> 00:06:09.560
<v Speaker 4>civy lip which uses open cv under the hood, and

98
00:06:09.839 --> 00:06:13.000
<v Speaker 4>UH it's super easy to use. And you can just

99
00:06:13.079 --> 00:06:16.720
<v Speaker 4>pass an image to this to a function and UH

100
00:06:16.920 --> 00:06:22.839
<v Speaker 4>dysfunction returns uh list of detected objects and UH and

101
00:06:22.879 --> 00:06:24.800
<v Speaker 4>the coordinates of these objects.

102
00:06:25.040 --> 00:06:28.480
<v Speaker 2>So in the in the article, I actually uh uh

103
00:06:28.920 --> 00:06:30.639
<v Speaker 2>go through UH the.

104
00:06:30.560 --> 00:06:34.600
<v Speaker 4>Idea of interfacing and trying to take advantage of this

105
00:06:34.800 --> 00:06:42.959
<v Speaker 4>library UH inside the Elixir, and I went through different ways

106
00:06:43.000 --> 00:06:49.079
<v Speaker 4>of communicating with with Python. Well, the simplest one is

107
00:06:49.120 --> 00:06:54.759
<v Speaker 4>to just launch just run UH the Python process. The

108
00:06:54.879 --> 00:07:01.600
<v Speaker 4>problem of this is that two for example, in this

109
00:07:01.839 --> 00:07:06.319
<v Speaker 4>specific case, we have a neural network, which is a

110
00:07:06.600 --> 00:07:11.040
<v Speaker 4>neural network, well actually a convolutional neural network, and to

111
00:07:11.240 --> 00:07:15.839
<v Speaker 4>load this model it takes around two three second on

112
00:07:16.000 --> 00:07:20.399
<v Speaker 4>a matwork pro and obviously we can't run this UH

113
00:07:20.560 --> 00:07:24.839
<v Speaker 4>this script for each single frame or each single image

114
00:07:24.879 --> 00:07:29.000
<v Speaker 4>we want. And so we need a long running process.

115
00:07:29.360 --> 00:07:36.079
<v Speaker 4>That means we we keep the model in memory and

116
00:07:36.079 --> 00:07:39.560
<v Speaker 4>and we keep the Python process in memory, and we

117
00:07:39.720 --> 00:07:43.240
<v Speaker 4>control it via something is called a port. So a

118
00:07:43.399 --> 00:07:46.680
<v Speaker 4>port in a in Elixir and in Airline, it's a

119
00:07:46.879 --> 00:07:53.600
<v Speaker 4>mechanism to launch an operating system process which is external

120
00:07:53.639 --> 00:07:59.800
<v Speaker 4>to the bm UH. And this brings a lot of advantages. Well, first,

121
00:08:00.079 --> 00:08:04.120
<v Speaker 4>if the process crashes, it doesn't bring down the bim UH,

122
00:08:04.240 --> 00:08:05.519
<v Speaker 4>so it's something external.

123
00:08:05.759 --> 00:08:08.680
<v Speaker 2>And we can communicate.

124
00:08:08.160 --> 00:08:13.639
<v Speaker 4>With this process via message passing and the standard IU UH.

125
00:08:13.720 --> 00:08:16.279
<v Speaker 2>And what I do through the article is to.

126
00:08:18.079 --> 00:08:23.879
<v Speaker 4>Is to use ports to build UH, to build UH,

127
00:08:24.079 --> 00:08:28.560
<v Speaker 4>this communication to H with the with this UH Python

128
00:08:28.639 --> 00:08:34.240
<v Speaker 4>framework and be able to link the camera from UH

129
00:08:34.480 --> 00:08:38.279
<v Speaker 4>from the web browser, take the frames from the web browser,

130
00:08:38.559 --> 00:08:43.360
<v Speaker 4>send this frame across UH a web socket to a

131
00:08:43.360 --> 00:08:49.200
<v Speaker 4>Phoenix channel, and then Elixir sends UH these frames to

132
00:08:49.759 --> 00:08:54.759
<v Speaker 4>the Python side detected which actually runs the the real detection.

133
00:08:55.639 --> 00:09:00.679
<v Speaker 4>And and yeah, the the thing is is so easy

134
00:09:00.799 --> 00:09:06.519
<v Speaker 4>to use this approach to bring and to use to

135
00:09:06.559 --> 00:09:12.440
<v Speaker 4>take advantage of machine learning. And since Python is so so.

136
00:09:12.559 --> 00:09:14.360
<v Speaker 2>Far on the machine learning side.

137
00:09:14.399 --> 00:09:18.440
<v Speaker 4>Actually, one of the reasons Python has a huge adoption

138
00:09:18.600 --> 00:09:23.799
<v Speaker 4>rate is because all these frameworks in the last ten years,

139
00:09:23.840 --> 00:09:28.039
<v Speaker 4>the adoption rate increased a lot. But because these frameworks,

140
00:09:28.919 --> 00:09:34.519
<v Speaker 4>not because the language itself. And yeah to me, to me,

141
00:09:35.759 --> 00:09:40.159
<v Speaker 4>I think Elixir would be great. I actually would prefer

142
00:09:40.440 --> 00:09:47.720
<v Speaker 4>to control a machine learning library with Elixir rather than

143
00:09:47.799 --> 00:09:53.240
<v Speaker 4>Python with pipes and struct and like generate a struct

144
00:09:53.360 --> 00:09:55.440
<v Speaker 4>with it, which is like a job.

145
00:09:55.519 --> 00:09:57.600
<v Speaker 2>I want to run a machine learning job. I want

146
00:09:57.639 --> 00:09:59.039
<v Speaker 2>to run and then.

147
00:10:00.759 --> 00:10:03.960
<v Speaker 4>And then send this job to to a Python to

148
00:10:04.000 --> 00:10:08.240
<v Speaker 4>a Python process with the with depart or with other

149
00:10:08.919 --> 00:10:10.200
<v Speaker 4>solutions like.

150
00:10:10.360 --> 00:10:16.600
<v Speaker 2>Uh, there are other ways like uh E p M D.

151
00:10:17.279 --> 00:10:21.519
<v Speaker 4>So the is said there is a library called remember

152
00:10:21.600 --> 00:10:27.080
<v Speaker 4>correctly pyre lank UH and UH, the it's possible to

153
00:10:28.039 --> 00:10:31.679
<v Speaker 4>uh to create a Python node. UH, just to say

154
00:10:31.720 --> 00:10:35.600
<v Speaker 4>there are other ways we can interface with the with

155
00:10:35.679 --> 00:10:37.000
<v Speaker 4>the Python process.

156
00:10:37.159 --> 00:10:39.639
<v Speaker 1>So one of the ways if I can just kind

157
00:10:39.639 --> 00:10:42.200
<v Speaker 1>of clarify the way I understand ports to work.

158
00:10:42.759 --> 00:10:42.879
<v Speaker 3>UH.

159
00:10:43.080 --> 00:10:46.399
<v Speaker 1>I have used ports before, and UH in my case

160
00:10:46.440 --> 00:10:49.799
<v Speaker 1>I was talking to we needed some you know, we're

161
00:10:49.799 --> 00:10:53.679
<v Speaker 1>migrating a Ruby on Rail's monolith to Elixir, and so

162
00:10:53.720 --> 00:10:55.480
<v Speaker 1>there's some things that Ruby still.

163
00:10:55.240 --> 00:10:57.960
<v Speaker 3>Did best because of libraries or whatever.

164
00:10:58.320 --> 00:10:58.440
<v Speaker 5>You know.

165
00:10:58.440 --> 00:11:00.360
<v Speaker 1>I don't want to re implement an entire life library

166
00:11:00.440 --> 00:11:02.960
<v Speaker 1>just so I can have this little piece of functionality

167
00:11:04.399 --> 00:11:07.080
<v Speaker 1>so as ports as I understand it, Like what I'm

168
00:11:07.080 --> 00:11:10.879
<v Speaker 1>able to do is I can start up the process,

169
00:11:11.200 --> 00:11:13.840
<v Speaker 1>the OS level process that is running Ruby in my

170
00:11:13.919 --> 00:11:16.799
<v Speaker 1>case or Python in your case. And so you're like

171
00:11:16.840 --> 00:11:20.399
<v Speaker 1>you're describing you like this two to three second load

172
00:11:20.440 --> 00:11:23.399
<v Speaker 1>time just to load everything that it needs for the

173
00:11:23.960 --> 00:11:26.679
<v Speaker 1>for doing the memory yea, for doing its processing. And

174
00:11:26.720 --> 00:11:29.679
<v Speaker 1>so once that load is done, then it's just basically

175
00:11:29.919 --> 00:11:34.519
<v Speaker 1>it's messaging through like I think it's even just standard

176
00:11:34.759 --> 00:11:38.799
<v Speaker 1>out kind of just directly kind of talking through the

177
00:11:38.799 --> 00:11:41.440
<v Speaker 1>OS to the other process, not even through like an

178
00:11:41.519 --> 00:11:45.879
<v Speaker 1>HTTP kind of you know port like you know web

179
00:11:45.960 --> 00:11:47.559
<v Speaker 1>ports or anything like that. It's not a web servers,

180
00:11:47.559 --> 00:11:51.240
<v Speaker 1>just talking directly to it. So that has a cost,

181
00:11:51.399 --> 00:11:54.279
<v Speaker 1>I guess in terms of serialization about how do I

182
00:11:54.320 --> 00:11:56.600
<v Speaker 1>actually communicate and how do I serialize my data to

183
00:11:56.639 --> 00:12:00.159
<v Speaker 1>send it across to this other process. But that that's

184
00:12:00.159 --> 00:12:03.399
<v Speaker 1>one of the benefits is uh, it's it can now

185
00:12:03.440 --> 00:12:07.919
<v Speaker 1>be supervised by the beam, right, so if something goes

186
00:12:07.960 --> 00:12:12.759
<v Speaker 1>wrong in my library and it crashes, elector can respond

187
00:12:12.799 --> 00:12:14.039
<v Speaker 1>to that, right have you?

188
00:12:14.120 --> 00:12:16.559
<v Speaker 3>Is that something you've been able to see as well.

189
00:12:17.600 --> 00:12:22.679
<v Speaker 4>Yes, absolutely, this is exactly one of the advantages and

190
00:12:23.120 --> 00:12:29.080
<v Speaker 4>uh uh with part, especially if we wrap a part,

191
00:12:29.519 --> 00:12:32.320
<v Speaker 4>if we wrap a gen server around the part, it

192
00:12:32.480 --> 00:12:36.399
<v Speaker 4>becomes super easy to uh to supervise it.

193
00:12:36.720 --> 00:12:39.639
<v Speaker 2>So yes, in the article I, what I do.

194
00:12:39.720 --> 00:12:44.799
<v Speaker 4>Is to uh wrap dispart uh with with the gen

195
00:12:44.879 --> 00:12:48.879
<v Speaker 4>server UH, and it's possible to run like to start

196
00:12:49.360 --> 00:12:53.240
<v Speaker 4>monitoring this part. So when the process crashes, we just

197
00:12:53.360 --> 00:12:58.080
<v Speaker 4>receive a message to the owner process which is an

198
00:12:58.080 --> 00:13:03.080
<v Speaker 4>exit message. And so in this case we can deal

199
00:13:03.360 --> 00:13:06.879
<v Speaker 4>inside the gen server UH. And we can just like

200
00:13:07.080 --> 00:13:14.240
<v Speaker 4>rerun the part without letting the supervisor do that, without

201
00:13:15.000 --> 00:13:17.799
<v Speaker 4>having to delegate this to the supervisor. Or we can

202
00:13:17.960 --> 00:13:22.919
<v Speaker 4>just decide to not handle the exit process the exit message,

203
00:13:23.120 --> 00:13:27.960
<v Speaker 4>and what happens is that the the gen server process

204
00:13:28.039 --> 00:13:33.440
<v Speaker 4>just crashes and if it's supervised uh, it's restarted again.

205
00:13:33.600 --> 00:13:36.799
<v Speaker 2>Another another advantage is.

206
00:13:38.399 --> 00:13:42.960
<v Speaker 4>Is that of this wrapping wrapping the part with the

207
00:13:43.039 --> 00:13:47.159
<v Speaker 4>gen server is that we can only the owner, so

208
00:13:47.799 --> 00:13:52.279
<v Speaker 4>only the process that starts the part can communicate with

209
00:13:52.320 --> 00:13:56.200
<v Speaker 4>the part. So can send a message which is propagated

210
00:13:56.440 --> 00:14:01.080
<v Speaker 4>via via standard input to the to the Python process

211
00:14:01.519 --> 00:14:05.480
<v Speaker 4>and the same as receiving messages from the Python process,

212
00:14:05.639 --> 00:14:09.799
<v Speaker 4>So only the owner can do this messaging. So if

213
00:14:09.840 --> 00:14:14.240
<v Speaker 4>we want to use a port and let's click, it's

214
00:14:14.279 --> 00:14:17.360
<v Speaker 4>not sure. But if we want to use this sport

215
00:14:17.600 --> 00:14:22.360
<v Speaker 4>and send messages to this sport from many processes, we

216
00:14:22.399 --> 00:14:25.080
<v Speaker 4>need a gen server that is the owner and takes

217
00:14:25.360 --> 00:14:29.519
<v Speaker 4>the ownership of this port. So I think most of

218
00:14:29.600 --> 00:14:32.759
<v Speaker 4>the cases is better to use a gen server, I mean,

219
00:14:32.960 --> 00:14:37.120
<v Speaker 4>especially in this case. And also another advantage is that

220
00:14:37.440 --> 00:14:40.320
<v Speaker 4>if like in this case, if we want to scale,

221
00:14:40.759 --> 00:14:45.120
<v Speaker 4>if we want to scale horizontally, if a port is

222
00:14:45.279 --> 00:14:52.919
<v Speaker 4>embedded is handled via gen server, is easy to spown

223
00:14:52.960 --> 00:14:55.840
<v Speaker 4>a pool of distributed.

224
00:14:56.720 --> 00:14:58.200
<v Speaker 2>Gen server workers.

225
00:14:59.399 --> 00:15:01.720
<v Speaker 6>Yeah, I just want to point out how kind of

226
00:15:01.759 --> 00:15:06.200
<v Speaker 6>incredible that is, and how Elixer's flexibility around like interrupt

227
00:15:06.240 --> 00:15:09.159
<v Speaker 6>in this case with Python is so powerful because what

228
00:15:09.200 --> 00:15:12.440
<v Speaker 6>you're doing is you're leveraging like the concurrency and the

229
00:15:12.480 --> 00:15:15.679
<v Speaker 6>ability to manage processes that Alixir gives us and still

230
00:15:15.720 --> 00:15:19.639
<v Speaker 6>getting like that powerful bit of Python functionality that is

231
00:15:19.679 --> 00:15:23.159
<v Speaker 6>best suited to do that image detection. And that's why

232
00:15:23.159 --> 00:15:25.120
<v Speaker 6>I kind of think it's fun to say, like, oh,

233
00:15:25.200 --> 00:15:27.919
<v Speaker 6>Alixer is kind of good at everything, because in a way.

234
00:15:27.960 --> 00:15:30.519
<v Speaker 6>It is because it's good at using the things that

235
00:15:30.600 --> 00:15:33.840
<v Speaker 6>are better at the thing it can't do. And that's

236
00:15:33.879 --> 00:15:34.480
<v Speaker 6>really awesome.

237
00:15:35.440 --> 00:15:40.960
<v Speaker 2>Yeah, it's it's a fantastic glue in these cases. Is well.

238
00:15:41.039 --> 00:15:42.639
<v Speaker 2>First is I.

239
00:15:42.480 --> 00:15:46.240
<v Speaker 4>Think that the language itself is great, So most of

240
00:15:46.279 --> 00:15:49.000
<v Speaker 4>the time I prefer to handle these kind of things

241
00:15:49.200 --> 00:15:54.039
<v Speaker 4>and to glue things with Elixir. And at the beginning,

242
00:15:54.320 --> 00:15:59.639
<v Speaker 4>I thought that this part mechanism could have huge limits.

243
00:16:00.200 --> 00:16:03.639
<v Speaker 4>At the beginning, I thought, okay, if I send, because

244
00:16:03.919 --> 00:16:07.399
<v Speaker 4>the experiment I did well. One of the experiments I

245
00:16:07.399 --> 00:16:12.559
<v Speaker 4>did is to was to send the row frames like

246
00:16:13.360 --> 00:16:17.720
<v Speaker 4>at thirty frame per second, so each frame is around

247
00:16:17.799 --> 00:16:23.720
<v Speaker 4>the three megabyte, so I was sending around one hundred

248
00:16:23.799 --> 00:16:29.879
<v Speaker 4>megabyte per second, and I thought, okay, maybe maybe I

249
00:16:29.919 --> 00:16:34.840
<v Speaker 4>could have huge delays because there is messaging, there is IO.

250
00:16:35.799 --> 00:16:42.000
<v Speaker 4>But actually each single message was sent the time the

251
00:16:42.080 --> 00:16:48.360
<v Speaker 4>roundtree time I measured is like half millisecond for each

252
00:16:48.559 --> 00:16:52.519
<v Speaker 4>single frame, which is I mean nothing, especially if we

253
00:16:52.559 --> 00:16:58.159
<v Speaker 4>want to run a real time object detection at thirty

254
00:16:58.320 --> 00:17:03.960
<v Speaker 4>frame per second. I mean, I was really impressed by

255
00:17:04.880 --> 00:17:10.000
<v Speaker 4>how fast is this mechanism? And yeah, how easy is

256
00:17:10.079 --> 00:17:17.119
<v Speaker 4>to take this approach and scale arizontally, especially when when

257
00:17:17.759 --> 00:17:22.240
<v Speaker 4>when the party is embeddeding engine server, then we can

258
00:17:22.759 --> 00:17:25.880
<v Speaker 4>use all the advantages of elix heir all the libraries

259
00:17:26.039 --> 00:17:31.880
<v Speaker 4>like like a poor Boy or other libraries and supervision

260
00:17:32.039 --> 00:17:35.920
<v Speaker 4>and it's I mean almost we get everything for free.

261
00:17:36.160 --> 00:17:36.359
<v Speaker 3>Yeah.

262
00:17:36.400 --> 00:17:39.039
<v Speaker 1>I love how Sophie kind of described that too, because

263
00:17:39.920 --> 00:17:43.079
<v Speaker 1>I do think that is a strength of Elixir and

264
00:17:43.359 --> 00:17:46.640
<v Speaker 1>the Beam in particular. It's just to say that it

265
00:17:46.759 --> 00:17:52.519
<v Speaker 1>is a great interoperability messaging kind of platform, so that

266
00:17:52.720 --> 00:17:55.240
<v Speaker 1>it's like it is the way I can manage to say,

267
00:17:55.279 --> 00:17:57.720
<v Speaker 1>these are the things I want done, and then I

268
00:17:57.759 --> 00:17:59.920
<v Speaker 1>can push that out through you in a distributed way

269
00:18:00.240 --> 00:18:02.920
<v Speaker 1>out to the workers who this one might be rust

270
00:18:03.119 --> 00:18:05.160
<v Speaker 1>and it's doing something, and this one might be Python

271
00:18:05.200 --> 00:18:07.920
<v Speaker 1>and just doing something, and then bring all those back

272
00:18:08.359 --> 00:18:12.079
<v Speaker 1>and be able to aggregate and report and do everything

273
00:18:12.119 --> 00:18:14.359
<v Speaker 1>like that. So it really kind of comes back to

274
00:18:14.400 --> 00:18:16.279
<v Speaker 1>it's like wow, you know, it's kind of like this

275
00:18:16.640 --> 00:18:20.359
<v Speaker 1>telephone communication kind of system, and it's like, you know,

276
00:18:20.400 --> 00:18:21.839
<v Speaker 1>it's like wow, who to thunk?

277
00:18:22.720 --> 00:18:23.880
<v Speaker 3>So it's kind of fun.

278
00:18:23.920 --> 00:18:28.680
<v Speaker 1>But what I love is like in my case, except

279
00:18:28.680 --> 00:18:31.160
<v Speaker 1>for like a couple examples like I gave with like Ruby,

280
00:18:31.359 --> 00:18:33.440
<v Speaker 1>where I was needing to go to something because of

281
00:18:33.519 --> 00:18:38.279
<v Speaker 1>a library as a gem that I needed to support

282
00:18:38.440 --> 00:18:41.160
<v Speaker 1>for Otherwise, it's like, I don't. I don't have any

283
00:18:41.200 --> 00:18:43.000
<v Speaker 1>personal needs where I need to go out to those

284
00:18:43.039 --> 00:18:46.319
<v Speaker 1>other things. I don't have performance requirements where I say

285
00:18:46.359 --> 00:18:47.359
<v Speaker 1>I need to go to RUST.

286
00:18:47.680 --> 00:18:47.960
<v Speaker 3>I don't.

287
00:18:48.000 --> 00:18:51.160
<v Speaker 1>I'm not doing anything with right now with machine learning.

288
00:18:51.519 --> 00:18:54.119
<v Speaker 1>We'd like to at some point in the future, but

289
00:18:54.240 --> 00:18:55.960
<v Speaker 1>you know, at some point that's where I will go

290
00:18:56.119 --> 00:18:59.240
<v Speaker 1>and I will be interoperability kind of talking with Python.

291
00:18:59.759 --> 00:19:01.519
<v Speaker 1>So I love that I can do it, but I

292
00:19:01.559 --> 00:19:04.359
<v Speaker 1>don't have to do it. Yeah, Elixer still does everything

293
00:19:04.400 --> 00:19:06.039
<v Speaker 1>I need to write where I am right now.

294
00:19:06.599 --> 00:19:06.799
<v Speaker 5>Yeah.

295
00:19:06.799 --> 00:19:09.759
<v Speaker 6>I think it's also it's also kind of like a

296
00:19:10.839 --> 00:19:14.440
<v Speaker 6>useful case to make or argument to have in your

297
00:19:14.440 --> 00:19:17.480
<v Speaker 6>back pocket when you're dealing with adoption. You know, if

298
00:19:17.519 --> 00:19:21.079
<v Speaker 6>you're trying to convince your team or colleagues to use

299
00:19:21.119 --> 00:19:24.160
<v Speaker 6>Elixir for a particular project, and you know, people are

300
00:19:24.160 --> 00:19:26.160
<v Speaker 6>looking down the line and they're thinking, well, what about

301
00:19:26.160 --> 00:19:29.079
<v Speaker 6>when we need something that Python is better suited for,

302
00:19:29.279 --> 00:19:31.000
<v Speaker 6>or what about when we need to solve this problem

303
00:19:31.079 --> 00:19:33.200
<v Speaker 6>that you know, typically folks may reach for rest for

304
00:19:34.920 --> 00:19:36.759
<v Speaker 6>you can kind of trop this out and say, like,

305
00:19:36.799 --> 00:19:39.079
<v Speaker 6>we can use Elixir now so that we can move fast,

306
00:19:39.079 --> 00:19:40.759
<v Speaker 6>so that we can leverage like a nice design, so

307
00:19:40.759 --> 00:19:43.559
<v Speaker 6>that we can take advantage of all the fantastic Elixer

308
00:19:43.599 --> 00:19:46.680
<v Speaker 6>things around concurrency and fault tolerance. And when we need

309
00:19:46.839 --> 00:19:49.039
<v Speaker 6>something else, we need a tool that's better suited for it.

310
00:19:49.240 --> 00:19:50.799
<v Speaker 5>We have it backed ourselves into a corner.

311
00:19:50.880 --> 00:19:52.640
<v Speaker 6>We're not in a place where we need to, you know,

312
00:19:52.680 --> 00:19:55.359
<v Speaker 6>spin up a separate service and another language and framework

313
00:19:55.480 --> 00:20:00.000
<v Speaker 6>and then figure out what this communication mechanism would look like.

314
00:20:00.039 --> 00:20:04.319
<v Speaker 5>I think one of the things that you mention in

315
00:20:04.359 --> 00:20:05.960
<v Speaker 5>your article obvious is.

316
00:20:05.880 --> 00:20:10.119
<v Speaker 6>That you know, you could have reached for HTTP communication.

317
00:20:10.240 --> 00:20:12.240
<v Speaker 6>You know, both some API end points where you're going

318
00:20:12.319 --> 00:20:16.240
<v Speaker 6>to communicate between your alexro Phoenix app and you know

319
00:20:16.279 --> 00:20:18.279
<v Speaker 6>this this Python application.

320
00:20:18.440 --> 00:20:20.119
<v Speaker 5>But we don't have to. We don't need that.

321
00:20:20.119 --> 00:20:23.400
<v Speaker 6>Overhead, we don't need that complexity. Ports are one way

322
00:20:23.759 --> 00:20:26.519
<v Speaker 6>among some others that Alexa just makes it super super

323
00:20:26.559 --> 00:20:28.960
<v Speaker 6>easy to enact that kind of communication.

324
00:20:29.599 --> 00:20:33.599
<v Speaker 4>Yes, compared to for example, HTTP, which is obviously the first,

325
00:20:33.680 --> 00:20:36.240
<v Speaker 4>I mean the first thing that came to my mind

326
00:20:36.319 --> 00:20:39.119
<v Speaker 4>when I wanted to do something like this, And the

327
00:20:39.160 --> 00:20:43.759
<v Speaker 4>problem is supervision and especially on embedded devices. I mean,

328
00:20:43.799 --> 00:20:47.359
<v Speaker 4>if I want to run this thing, a real real

329
00:20:47.440 --> 00:20:52.079
<v Speaker 4>time outject detection system, that is that does something if

330
00:20:52.079 --> 00:20:55.920
<v Speaker 4>I find some objects in the pictures in the frames

331
00:20:55.960 --> 00:21:00.799
<v Speaker 4>coming from the camera, I have an if I run,

332
00:21:00.880 --> 00:21:05.079
<v Speaker 4>for example, a Python worker that has flask like an

333
00:21:05.200 --> 00:21:09.920
<v Speaker 4>HTTP UH server, I mean usually most of the time,

334
00:21:10.000 --> 00:21:13.960
<v Speaker 4>especially on an embedded device, I want to supervise this

335
00:21:14.200 --> 00:21:20.079
<v Speaker 4>process or this worker, and if I'm able to supervise

336
00:21:20.160 --> 00:21:24.720
<v Speaker 4>it via elkx heir, I'm much happier, especially because this

337
00:21:24.839 --> 00:21:30.480
<v Speaker 4>means I don't have to well, I know what's happening

338
00:21:31.160 --> 00:21:36.000
<v Speaker 4>inside Elixir, so inside the Elixir, I know if my

339
00:21:36.359 --> 00:21:39.160
<v Speaker 4>workers are fine or not, and I don't have to

340
00:21:39.200 --> 00:21:43.359
<v Speaker 4>install some other services like well, I don't know kubernatists.

341
00:21:43.359 --> 00:21:48.200
<v Speaker 4>Maybe not in an embedded device, but it's something that

342
00:21:48.279 --> 00:21:51.440
<v Speaker 4>I could run on a on a different in a

343
00:21:51.480 --> 00:21:55.519
<v Speaker 4>different case if I want to UH scale easily and

344
00:21:55.839 --> 00:21:58.000
<v Speaker 4>supervise different services.

345
00:21:59.359 --> 00:22:05.839
<v Speaker 2>So this parts and makes this much easier.

346
00:22:06.519 --> 00:22:10.759
<v Speaker 4>And another solution, as Mark said, UH with with another

347
00:22:10.880 --> 00:22:15.519
<v Speaker 4>solution to communicate UH for example, like with the with rust,

348
00:22:16.200 --> 00:22:19.759
<v Speaker 4>it would be uh niffs. So I went through also

349
00:22:19.880 --> 00:22:24.680
<v Speaker 4>that path and so yallow which is uh.

350
00:22:24.799 --> 00:22:28.079
<v Speaker 2>It's an acronym for you only look once. Which is

351
00:22:28.079 --> 00:22:32.279
<v Speaker 2>the algorithm behind the object real time object detection. This

352
00:22:32.400 --> 00:22:36.359
<v Speaker 2>is a state of the art object detection system which

353
00:22:36.400 --> 00:22:41.000
<v Speaker 2>is with a real really uh simple, with the n

354
00:22:41.039 --> 00:22:45.759
<v Speaker 2>Vida GPU with its not cheap but around the five

355
00:22:45.799 --> 00:22:50.839
<v Speaker 2>hundred dollars GPU. Uh, you can detect objects at a

356
00:22:50.920 --> 00:22:52.039
<v Speaker 2>thirty different per second.

357
00:22:52.720 --> 00:22:53.279
<v Speaker 4>Uh.

358
00:22:53.359 --> 00:22:55.799
<v Speaker 2>And the thing is uh.

359
00:22:56.000 --> 00:23:02.039
<v Speaker 4>The the creator of this algorithm they he did the

360
00:23:02.119 --> 00:23:04.759
<v Speaker 4>C version C and COUDA versions. So I said, okay,

361
00:23:05.519 --> 00:23:08.759
<v Speaker 4>maybe I could do a NITH. So first it's so

362
00:23:09.079 --> 00:23:13.559
<v Speaker 4>far easier to uh do to use the part with

363
00:23:13.680 --> 00:23:17.160
<v Speaker 4>a Python a high level library, then create an diffan

364
00:23:17.279 --> 00:23:21.440
<v Speaker 4>see and trying to interface with to to bind to

365
00:23:21.480 --> 00:23:26.799
<v Speaker 4>create a binding to this library and the But the

366
00:23:26.839 --> 00:23:31.119
<v Speaker 4>main thing, Uh, what happened is that the first time

367
00:23:31.160 --> 00:23:36.240
<v Speaker 4>I compiled there was an error in my ce neth

368
00:23:36.839 --> 00:23:41.519
<v Speaker 4>and obviously uh it crashed. The problem is that everything crashed,

369
00:23:41.680 --> 00:23:47.079
<v Speaker 4>the beam crashed, and so yeah, there are ways to

370
00:23:47.119 --> 00:23:49.240
<v Speaker 4>deal with it. Well, first is use rust.

371
00:23:49.720 --> 00:23:53.200
<v Speaker 2>The thing is, uh, I didn't find anything.

372
00:23:53.279 --> 00:23:57.799
<v Speaker 4>I mean, there were some libraries, some bindings with open

373
00:23:57.920 --> 00:24:03.599
<v Speaker 4>CV with rust. By the things when quite quite complicated,

374
00:24:03.759 --> 00:24:08.039
<v Speaker 4>quite easily, so I said, okay, ports is far better

375
00:24:08.119 --> 00:24:08.319
<v Speaker 4>to me.

376
00:24:08.400 --> 00:24:11.440
<v Speaker 2>I mean, I'm not. I tried many things.

377
00:24:11.200 --> 00:24:16.359
<v Speaker 4>But if I, if I would go back, I would

378
00:24:16.440 --> 00:24:19.279
<v Speaker 4>just use ports in this case. In this case because

379
00:24:19.519 --> 00:24:23.319
<v Speaker 4>the detection time is still around a twenty million second,

380
00:24:23.359 --> 00:24:30.400
<v Speaker 4>which is reasonable, reasonable time to wait to delegate a

381
00:24:30.480 --> 00:24:33.920
<v Speaker 4>job to a Python process. Obviously, if I just want

382
00:24:34.000 --> 00:24:37.599
<v Speaker 4>to do a sum from for two floats, a part

383
00:24:37.960 --> 00:24:43.480
<v Speaker 4>doesn't isn't isn't isn't the best way because just this

384
00:24:43.680 --> 00:24:50.680
<v Speaker 4>messaging it costs the time. But and in that case

385
00:24:50.720 --> 00:24:54.519
<v Speaker 4>maybe it's better to use to use a NIF. But

386
00:24:56.079 --> 00:25:01.039
<v Speaker 4>for things that are longer that than you milli seconds

387
00:25:01.880 --> 00:25:09.119
<v Speaker 4>parts is easier and safer uh and uh safer than

388
00:25:09.200 --> 00:25:15.880
<v Speaker 4>cm in uh and um yeah so and uh and

389
00:25:15.559 --> 00:25:19.759
<v Speaker 4>and also is we were able to just use a

390
00:25:19.839 --> 00:25:22.960
<v Speaker 4>high level library rather than something.

391
00:25:24.440 --> 00:25:25.599
<v Speaker 2>With a lower level.

392
00:25:25.880 --> 00:25:28.400
<v Speaker 3>I think it's funny the library called Yolo.

393
00:25:30.160 --> 00:25:33.200
<v Speaker 1>You know, I I thought it was like you only

394
00:25:33.240 --> 00:25:35.440
<v Speaker 1>live once, but I can't.

395
00:25:35.480 --> 00:25:37.359
<v Speaker 3>That can't be it. So that's really cool. It's like

396
00:25:37.359 --> 00:25:38.119
<v Speaker 3>you only look once.

397
00:25:38.759 --> 00:25:38.880
<v Speaker 5>Uh.

398
00:25:39.319 --> 00:25:41.000
<v Speaker 1>But what I love about your article, and I just

399
00:25:41.000 --> 00:25:42.920
<v Speaker 1>want to encourage you, dear listener, to check out the

400
00:25:43.000 --> 00:25:46.119
<v Speaker 1>article because if you if this is an interesting topic

401
00:25:46.160 --> 00:25:48.240
<v Speaker 1>to you at all in doing image detection, and you're

402
00:25:48.279 --> 00:25:51.920
<v Speaker 1>just kind of like like me, like I'm anew with this. Uh,

403
00:25:51.960 --> 00:25:55.799
<v Speaker 1>this is an awesome article because Alvisa has put a

404
00:25:55.839 --> 00:25:57.119
<v Speaker 1>ton of effort into this.

405
00:25:57.519 --> 00:26:00.319
<v Speaker 3>It is detailed, it has you know.

406
00:26:00.680 --> 00:26:02.279
<v Speaker 1>One of the things I just love watching in this

407
00:26:02.559 --> 00:26:06.160
<v Speaker 1>is the real time ish kind of updates of as

408
00:26:06.200 --> 00:26:09.400
<v Speaker 1>it's classifying you know, video and it's like he holds

409
00:26:09.440 --> 00:26:11.680
<v Speaker 1>up a remote you know, water bottle and it's like, oh,

410
00:26:11.799 --> 00:26:14.000
<v Speaker 1>and it's drawing boxes around things, and as he gets

411
00:26:14.039 --> 00:26:16.759
<v Speaker 1>up and walks around and how it's following, you know,

412
00:26:16.839 --> 00:26:17.880
<v Speaker 1>classifying a person.

413
00:26:18.359 --> 00:26:21.400
<v Speaker 3>It's like, that's really cool. So I was curious as to.

414
00:26:21.359 --> 00:26:23.920
<v Speaker 1>What kind of you've mentioned, like the the idea of

415
00:26:23.960 --> 00:26:26.720
<v Speaker 1>doing something embedded. Is this a personal project something you're

416
00:26:26.799 --> 00:26:28.920
<v Speaker 1>kind of playing with and exploring, Like what kind of

417
00:26:28.960 --> 00:26:29.559
<v Speaker 1>is driving this?

418
00:26:30.440 --> 00:26:32.519
<v Speaker 2>Yes, so there are two goals.

419
00:26:32.720 --> 00:26:38.039
<v Speaker 4>Yes, it's a personal project, but it's driven from actually

420
00:26:38.519 --> 00:26:44.599
<v Speaker 4>business needs. So I worked with Python in most of

421
00:26:44.680 --> 00:26:48.880
<v Speaker 4>the time in the last five six years a Python

422
00:26:48.960 --> 00:26:53.279
<v Speaker 4>and well in the last three years leisure uh, and

423
00:26:54.279 --> 00:26:59.720
<v Speaker 4>I always needed to uh to deal with this five

424
00:26:59.799 --> 00:27:02.000
<v Speaker 4>well at the beginning, I thought it was a fight.

425
00:27:02.079 --> 00:27:04.440
<v Speaker 4>Oh but there is this on Python. I would like

426
00:27:04.480 --> 00:27:06.519
<v Speaker 4>to have it in elix yir. I really don't like this.

427
00:27:07.160 --> 00:27:10.000
<v Speaker 4>Uh two, it's not that I don't like Python, but

428
00:27:10.079 --> 00:27:11.880
<v Speaker 4>I prefer to write elix heir.

429
00:27:12.640 --> 00:27:13.319
<v Speaker 2>Uh.

430
00:27:13.359 --> 00:27:19.160
<v Speaker 4>So I started actually to find ways to bring different

431
00:27:19.240 --> 00:27:26.480
<v Speaker 4>kind of problems more on like historical uh a list

432
00:27:26.519 --> 00:27:31.160
<v Speaker 4>of historical prices, uh.

433
00:27:30.279 --> 00:27:33.279
<v Speaker 2>Volumes of trades. Uh so Uh.

434
00:27:34.319 --> 00:27:37.519
<v Speaker 4>What I wanted to find is that like a generic,

435
00:27:38.720 --> 00:27:44.319
<v Speaker 4>generic way to deal with this kind of interactions between

436
00:27:44.319 --> 00:27:48.160
<v Speaker 4>Elixir and uh and and Python. So the best way

437
00:27:48.440 --> 00:27:51.720
<v Speaker 4>was to find a heart problem I mean hard in

438
00:27:52.160 --> 00:27:55.599
<v Speaker 4>the sense of processing something like I mean, uh, this

439
00:27:55.720 --> 00:27:57.319
<v Speaker 4>model is one of.

440
00:27:57.240 --> 00:28:01.279
<v Speaker 2>The uh toughest on the processing side.

441
00:28:01.519 --> 00:28:06.519
<v Speaker 4>Uh and uh it's it's so this uh a yallow

442
00:28:07.039 --> 00:28:08.960
<v Speaker 4>needs to be to.

443
00:28:09.000 --> 00:28:11.400
<v Speaker 2>Run yeallow until a three different per second.

444
00:28:11.480 --> 00:28:14.559
<v Speaker 4>We need to be uh faster, not only on the

445
00:28:14.559 --> 00:28:18.640
<v Speaker 4>processing side of yallow. I mean that obviously, especially if

446
00:28:18.680 --> 00:28:21.640
<v Speaker 4>we take this function of the high level library. There

447
00:28:21.720 --> 00:28:25.200
<v Speaker 4>is there is there isn't anything we can do, but

448
00:28:25.680 --> 00:28:27.960
<v Speaker 4>what we can do is to work on the boundaries.

449
00:28:29.640 --> 00:28:32.519
<v Speaker 2>So I said, okay, this is a great problem.

450
00:28:32.559 --> 00:28:36.799
<v Speaker 4>Also to find a like a generic way to handle UH,

451
00:28:36.920 --> 00:28:41.839
<v Speaker 4>this interfate interaction with Python also to deal with other

452
00:28:42.319 --> 00:28:49.160
<v Speaker 4>things I had in mind, like classification of a series

453
00:28:49.400 --> 00:28:54.799
<v Speaker 4>of UH prices. So this is actually what driven. It's

454
00:28:54.799 --> 00:28:59.319
<v Speaker 4>a mix of personal and business. And then I got

455
00:28:59.400 --> 00:29:03.839
<v Speaker 4>hooked by the problem itself and I started to say, okay, oh,

456
00:29:03.839 --> 00:29:07.039
<v Speaker 4>but there is this jetson nano which is an Nvidia

457
00:29:07.079 --> 00:29:10.200
<v Speaker 4>device and at the device it's a ninety nine dollars

458
00:29:11.000 --> 00:29:13.480
<v Speaker 4>UH and is an embedded device.

459
00:29:13.480 --> 00:29:16.519
<v Speaker 2>UH which is powered by.

460
00:29:18.240 --> 00:29:22.000
<v Speaker 4>UH that the power supply is from Amery correctly ten bots.

461
00:29:22.440 --> 00:29:26.400
<v Speaker 4>And the cool thing is that it has an an

462
00:29:26.480 --> 00:29:30.920
<v Speaker 4>Nvidia GPU, so we can run TensorFlow GPU or the

463
00:29:31.119 --> 00:29:37.480
<v Speaker 4>Kuda version of the of the yollow of the yellow

464
00:29:38.200 --> 00:29:43.440
<v Speaker 4>convolution on neural network, which this means it runs much

465
00:29:43.680 --> 00:29:48.119
<v Speaker 4>much faster than on a CPU UH.

466
00:29:48.160 --> 00:29:50.960
<v Speaker 2>So I said, okay, that's great. So now that I have.

467
00:29:51.519 --> 00:29:56.960
<v Speaker 4>A gen server and that that runs this detection along

468
00:29:57.000 --> 00:30:02.240
<v Speaker 4>with the Python process, what if I buy a few

469
00:30:02.279 --> 00:30:05.400
<v Speaker 4>of these devices and by the devices and I linked

470
00:30:05.400 --> 00:30:12.559
<v Speaker 4>them via Elixir distributed Elixir distributed around. So this means

471
00:30:12.759 --> 00:30:19.240
<v Speaker 4>each single device UH runs a worker. So each single

472
00:30:19.279 --> 00:30:22.279
<v Speaker 4>device is a node which runs a worker and Uh.

473
00:30:23.960 --> 00:30:26.359
<v Speaker 4>One of these is a master that has a camera

474
00:30:26.559 --> 00:30:30.960
<v Speaker 4>and actually use uses the other devices to spread the

475
00:30:31.039 --> 00:30:38.240
<v Speaker 4>load of this classification of this attraction across different all

476
00:30:38.279 --> 00:30:41.400
<v Speaker 4>the devices. And uh, this is what I did. Actually

477
00:30:41.440 --> 00:30:43.960
<v Speaker 4>I voted two devices because I don't didn't want to

478
00:30:43.960 --> 00:30:46.240
<v Speaker 4>spend two too many.

479
00:30:46.039 --> 00:30:48.559
<v Speaker 2>Dollars on this. But uh what day saw?

480
00:30:49.160 --> 00:30:52.920
<v Speaker 4>Actually I linked also my computer to the to the

481
00:30:53.039 --> 00:30:54.079
<v Speaker 4>to the cluster.

482
00:30:53.920 --> 00:31:00.839
<v Speaker 2>And uh it Uh it scaled ririzontally super easily.

483
00:31:01.039 --> 00:31:06.200
<v Speaker 4>I just needed to do something like a management module

484
00:31:06.599 --> 00:31:12.039
<v Speaker 4>which uh uh which does something like a round robin

485
00:31:12.200 --> 00:31:16.519
<v Speaker 4>so uh, it knows which node is which node and

486
00:31:16.720 --> 00:31:19.519
<v Speaker 4>the worker is busy and which one is free.

487
00:31:19.640 --> 00:31:21.599
<v Speaker 2>So as soon as it receives.

488
00:31:21.599 --> 00:31:25.119
<v Speaker 4>Uh, the it's like a broker, so it receives uh

489
00:31:25.240 --> 00:31:29.079
<v Speaker 4>the frame uh knows where to where to sign it.

490
00:31:29.720 --> 00:31:30.000
<v Speaker 3>Uh.

491
00:31:30.039 --> 00:31:32.880
<v Speaker 4>And it was super easy. The thing is with the

492
00:31:32.880 --> 00:31:35.000
<v Speaker 4>Elixir was super easy. And I said, okay, if I

493
00:31:35.119 --> 00:31:38.000
<v Speaker 4>let's see if I want to do it in Python. Uh,

494
00:31:38.799 --> 00:31:41.680
<v Speaker 4>it's not, It's absolutely not that easy.

495
00:31:42.880 --> 00:31:43.480
<v Speaker 2>It's not.

496
00:31:43.920 --> 00:31:47.319
<v Speaker 4>There are so many free things in Elixir when it

497
00:31:47.440 --> 00:31:55.559
<v Speaker 4>comes to the scaling horizontally in a distributed manner that it's.

498
00:31:56.839 --> 00:31:59.039
<v Speaker 2>It's amazing that's cool.

499
00:31:59.079 --> 00:32:00.440
<v Speaker 1>So yeah, you have a link to this, and I

500
00:32:00.519 --> 00:32:02.240
<v Speaker 1>included a link to in the show notes to this

501
00:32:02.359 --> 00:32:05.519
<v Speaker 1>Nvidia jets and nano device which is looks like it

502
00:32:05.759 --> 00:32:09.480
<v Speaker 1>retails for about one hundred dollars US, which which I

503
00:32:09.480 --> 00:32:11.839
<v Speaker 1>think is super cool that you can do like coudacors

504
00:32:11.960 --> 00:32:14.079
<v Speaker 1>on this little super embedded thing and have a little

505
00:32:14.079 --> 00:32:18.000
<v Speaker 1>cluster of them and have workers and farm out, you

506
00:32:18.039 --> 00:32:20.039
<v Speaker 1>know work, which is like you think of like, okay,

507
00:32:20.079 --> 00:32:22.680
<v Speaker 1>well if I was going to actually do this, you know,

508
00:32:22.720 --> 00:32:26.279
<v Speaker 1>that is the kind of device that I could sell

509
00:32:26.680 --> 00:32:29.720
<v Speaker 1>and have like in the office area that is processing

510
00:32:29.759 --> 00:32:33.799
<v Speaker 1>the sensor data and the images that are being captured

511
00:32:33.839 --> 00:32:36.839
<v Speaker 1>and doing all of my processing. So very cool. I

512
00:32:36.839 --> 00:32:39.960
<v Speaker 1>had not seen anything like that. Didn't know that was available.

513
00:32:40.839 --> 00:32:41.000
<v Speaker 3>You know.

514
00:32:41.079 --> 00:32:43.519
<v Speaker 1>It's like Raspberry Pie is the thing that everyone kind

515
00:32:43.519 --> 00:32:45.799
<v Speaker 1>of talks about because it is the most approachable place

516
00:32:45.839 --> 00:32:48.319
<v Speaker 1>to start. But yeah, when you're talking about machine learning,

517
00:32:48.599 --> 00:32:51.559
<v Speaker 1>you're wanting to go like coud decors and using the

518
00:32:51.599 --> 00:32:52.640
<v Speaker 1>libraries that are already there.

519
00:32:53.079 --> 00:32:53.799
<v Speaker 3>So very cool.

520
00:32:54.079 --> 00:32:56.279
<v Speaker 1>Well, we are coming about about up to our time.

521
00:32:56.359 --> 00:32:58.119
<v Speaker 1>Is there anything else you want to mention before we

522
00:32:58.400 --> 00:33:03.440
<v Speaker 1>transition side One other thing we haven't touched on. Is

523
00:33:03.480 --> 00:33:05.640
<v Speaker 1>just that you had mentioned in your articles and just

524
00:33:05.720 --> 00:33:09.599
<v Speaker 1>the idea of like also using scenic Oh yeah, okay, so.

525
00:33:09.720 --> 00:33:11.440
<v Speaker 3>Maybe you could talk about that for a moment.

526
00:33:12.319 --> 00:33:12.599
<v Speaker 2>Yes.

527
00:33:13.359 --> 00:33:18.839
<v Speaker 4>The first thing I I I tried is to use

528
00:33:19.400 --> 00:33:24.680
<v Speaker 4>a Phoenix to.

529
00:33:22.759 --> 00:33:25.079
<v Speaker 2>To render, especially to render the results.

530
00:33:25.079 --> 00:33:31.480
<v Speaker 4>So because I needed to get frames as as easy

531
00:33:31.640 --> 00:33:34.519
<v Speaker 4>as I could from from the camera, so I said, okay,

532
00:33:35.319 --> 00:33:37.759
<v Speaker 4>let's try it with Phoenix, especially because I can use

533
00:33:37.799 --> 00:33:41.599
<v Speaker 4>it also to render as the frames and the result

534
00:33:41.720 --> 00:33:46.039
<v Speaker 4>with as VG. Obviously, this is not the best way,

535
00:33:46.400 --> 00:33:48.960
<v Speaker 4>is the easiest way. It was the easiest way. It's

536
00:33:49.000 --> 00:33:54.759
<v Speaker 4>not the best way because there is this because frames

537
00:33:54.759 --> 00:34:01.119
<v Speaker 4>are frames are sent around from Phoenix from the browser UH,

538
00:34:01.119 --> 00:34:04.279
<v Speaker 4>and the browsers sends the UH. The frame is to

539
00:34:04.920 --> 00:34:09.800
<v Speaker 4>as a basic sixty four encoded we have two decode THEMS.

540
00:34:09.320 --> 00:34:10.480
<v Speaker 2>And to the Python workers.

541
00:34:10.519 --> 00:34:13.199
<v Speaker 4>So it's so what it did is to say, okay,

542
00:34:14.079 --> 00:34:17.719
<v Speaker 4>I saw that the throughput I could get with parts

543
00:34:17.800 --> 00:34:24.000
<v Speaker 4>is great, and so I could actually use Python and

544
00:34:24.039 --> 00:34:27.960
<v Speaker 4>open CV to get the frames. So to get the

545
00:34:27.960 --> 00:34:31.360
<v Speaker 4>frames directly from the camera especially is great if we

546
00:34:31.880 --> 00:34:37.400
<v Speaker 4>use it with on embedded device UH. And what they

547
00:34:37.440 --> 00:34:41.920
<v Speaker 4>do well, the first advantage is that open CV.

548
00:34:43.400 --> 00:34:46.280
<v Speaker 2>Works well to get the frame. We have the frame

549
00:34:46.360 --> 00:34:47.840
<v Speaker 2>in memory, UH, and.

550
00:34:47.760 --> 00:34:54.960
<v Speaker 4>The representation is a NUMPI metrics UH. NUMPI is UH

551
00:34:54.679 --> 00:34:58.519
<v Speaker 4>is a is a library in Python to deal with

552
00:34:58.599 --> 00:35:02.599
<v Speaker 4>matrices and and UH. The cool thing is that we

553
00:35:02.639 --> 00:35:05.519
<v Speaker 4>don't need we have this image in memory, we don't

554
00:35:05.559 --> 00:35:10.599
<v Speaker 4>need it's a ROW representation of the image, and so

555
00:35:10.639 --> 00:35:15.760
<v Speaker 4>we don't need to send send the image to other processes.

556
00:35:15.880 --> 00:35:19.039
<v Speaker 4>We just need to classify, run the classify, the the

557
00:35:19.239 --> 00:35:25.440
<v Speaker 4>yallow object detection. And what I so at the beginning,

558
00:35:25.440 --> 00:35:29.039
<v Speaker 4>I said, okay, maybe there will there will be delays

559
00:35:29.119 --> 00:35:34.239
<v Speaker 4>and compared to the compared to the open CV renderer.

560
00:35:35.559 --> 00:35:39.840
<v Speaker 4>But actually what is so is that with Scenic, which

561
00:35:39.880 --> 00:35:47.320
<v Speaker 4>is a framework to create applications, uh desktop applications, and

562
00:35:48.000 --> 00:35:53.880
<v Speaker 4>in Elixir with Phoenix sorry, with Cynic, I was able

563
00:35:53.920 --> 00:36:01.320
<v Speaker 4>to receive the frames from UH from the Python process

564
00:36:01.360 --> 00:36:05.239
<v Speaker 4>from open CV row as a binary and I was

565
00:36:05.280 --> 00:36:09.920
<v Speaker 4>able to take this binary we die without doing any manipulation,

566
00:36:10.280 --> 00:36:16.519
<v Speaker 4>any editing, any and using Scenic to render this frame

567
00:36:16.840 --> 00:36:21.519
<v Speaker 4>directly into the window without any processing of the binary,

568
00:36:21.559 --> 00:36:26.599
<v Speaker 4>which is was great. So yeah, I think this could work.

569
00:36:26.760 --> 00:36:30.760
<v Speaker 4>Is still something I have to try. I think this

570
00:36:31.440 --> 00:36:34.719
<v Speaker 4>could work well in a better device where we are

571
00:36:34.800 --> 00:36:40.199
<v Speaker 4>running this object detection system and we actually want to

572
00:36:40.199 --> 00:36:43.360
<v Speaker 4>see the result on another device. So we have our

573
00:36:43.360 --> 00:36:47.320
<v Speaker 4>embedded device with the camera. It runs a scenic and

574
00:36:47.599 --> 00:36:50.239
<v Speaker 4>the cool thing with scenic we are able to see

575
00:36:50.639 --> 00:36:57.239
<v Speaker 4>remotely the result the window. So it's something I still

576
00:36:57.280 --> 00:37:00.519
<v Speaker 4>have to try, but I think it should well.

577
00:37:00.840 --> 00:37:02.079
<v Speaker 3>Nice. That is very cool.

578
00:37:02.119 --> 00:37:03.800
<v Speaker 1>I love the idea that you can just like scene,

579
00:37:03.800 --> 00:37:07.320
<v Speaker 1>it can just you know, display raw data coming in,

580
00:37:07.559 --> 00:37:09.800
<v Speaker 1>don't have to process it and convert it in any way,

581
00:37:09.840 --> 00:37:11.239
<v Speaker 1>and just kind of like be able to render it.

582
00:37:11.480 --> 00:37:12.559
<v Speaker 3>So that is very cool.

583
00:37:12.639 --> 00:37:16.199
<v Speaker 1>So awesome stuff that people can take advantage of and

584
00:37:16.360 --> 00:37:20.639
<v Speaker 1>check out and look at. So if people are wanting

585
00:37:20.679 --> 00:37:22.559
<v Speaker 1>to kind of get in touch with you and follow

586
00:37:22.599 --> 00:37:25.199
<v Speaker 1>more about this topic, where should they go to do that?

587
00:37:26.599 --> 00:37:31.440
<v Speaker 4>So the site where I where I write my blog

588
00:37:31.480 --> 00:37:37.719
<v Speaker 4>posts is poit coding dot com and I write articles

589
00:37:37.760 --> 00:37:40.920
<v Speaker 4>mainly about Elixir and Phoenix awesome.

590
00:37:40.960 --> 00:37:42.679
<v Speaker 1>So we will also have links to that in the

591
00:37:42.679 --> 00:37:45.440
<v Speaker 1>show notes. Check that out and also where you are

592
00:37:45.519 --> 00:37:46.039
<v Speaker 1>on Twitter?

593
00:37:46.639 --> 00:37:47.239
<v Speaker 2>Yes, your name?

594
00:37:47.880 --> 00:37:51.320
<v Speaker 3>Well, let's go ahead and transition to picks. Sophie, do

595
00:37:51.360 --> 00:37:52.159
<v Speaker 3>you have one you can share.

596
00:37:52.519 --> 00:37:57.000
<v Speaker 5>Yeah, I do. So. I recently started going through this

597
00:37:57.079 --> 00:37:59.920
<v Speaker 5>book called hold On, let me see.

598
00:38:00.119 --> 00:38:04.239
<v Speaker 6>I can find it in our ex section black Hat Go.

599
00:38:04.559 --> 00:38:06.519
<v Speaker 6>So I'm pretty new to GO when I'm starting to

600
00:38:06.639 --> 00:38:10.199
<v Speaker 6>use it at work and just kind of plugging through

601
00:38:10.480 --> 00:38:12.400
<v Speaker 6>and learning what I need to learn to kind of

602
00:38:12.400 --> 00:38:15.079
<v Speaker 6>get stuff done in my actual job. So this has

603
00:38:15.159 --> 00:38:16.880
<v Speaker 6>just been like a really fun read to go a

604
00:38:16.920 --> 00:38:20.199
<v Speaker 6>little bit further and to sort of explore some of

605
00:38:20.199 --> 00:38:21.760
<v Speaker 6>the things that GO can do and some of the

606
00:38:21.880 --> 00:38:25.000
<v Speaker 6>things that we can learn about, you know, the Internet

607
00:38:25.039 --> 00:38:28.719
<v Speaker 6>and how it works using this language and using these frameworks.

608
00:38:29.079 --> 00:38:30.280
<v Speaker 5>I'm not super far into it yet.

609
00:38:30.280 --> 00:38:32.480
<v Speaker 6>I'm only in chapter two, but for somebody that again

610
00:38:32.559 --> 00:38:35.760
<v Speaker 6>is relatively new to Go, it's super approachable. It's been

611
00:38:35.800 --> 00:38:39.280
<v Speaker 6>really cool. It's you know, it's very security oriented. You're

612
00:38:39.360 --> 00:38:41.480
<v Speaker 6>kind of learning, you know, you're not really learning how

613
00:38:41.480 --> 00:38:43.119
<v Speaker 6>to be a black cat attacker. That's not like a

614
00:38:43.199 --> 00:38:45.320
<v Speaker 6>book that you're going to buy on Amazon. You know,

615
00:38:45.360 --> 00:38:48.960
<v Speaker 6>you're learning to improve your offensive security skill set, which

616
00:38:49.000 --> 00:38:51.000
<v Speaker 6>is always an area that I wanted to dive a little.

617
00:38:50.840 --> 00:38:51.360
<v Speaker 5>Bit more into.

618
00:38:51.480 --> 00:38:54.559
<v Speaker 6>So so far, it's been super fun and I'm definitely

619
00:38:54.559 --> 00:38:58.480
<v Speaker 6>recommending it my other pick is not programming related. It

620
00:38:58.559 --> 00:39:01.920
<v Speaker 6>is a reality show that is taking over the internet.

621
00:39:02.000 --> 00:39:04.320
<v Speaker 6>You may have heard of Love is Blind, anyone.

622
00:39:04.559 --> 00:39:06.079
<v Speaker 5>I'm going to try to keep it short because I

623
00:39:06.079 --> 00:39:07.960
<v Speaker 5>am obsessed with it. The premise of.

624
00:39:07.920 --> 00:39:10.719
<v Speaker 6>Love is Blind is that these people are dating each

625
00:39:10.719 --> 00:39:13.480
<v Speaker 6>other in these pod like rooms where you cannot see

626
00:39:13.480 --> 00:39:14.159
<v Speaker 6>the other person.

627
00:39:14.639 --> 00:39:16.599
<v Speaker 5>There's like a frosted glass.

628
00:39:16.239 --> 00:39:19.599
<v Speaker 6>Pane in between them, and the idea is that they

629
00:39:19.639 --> 00:39:22.280
<v Speaker 6>want to get married. So as many proposals that come

630
00:39:22.280 --> 00:39:24.719
<v Speaker 6>out of this dating situation, they're then allowed to meet.

631
00:39:25.159 --> 00:39:27.519
<v Speaker 6>They're sent on like a vacation, they meet each other's families,

632
00:39:27.519 --> 00:39:29.599
<v Speaker 6>they move in together, and then they see if they're.

633
00:39:29.400 --> 00:39:31.480
<v Speaker 5>Going to actually get married. Their goal is to get married.

634
00:39:31.880 --> 00:39:34.159
<v Speaker 6>And I started watching it because it sounds telling nuts

635
00:39:34.159 --> 00:39:36.159
<v Speaker 6>and really fun, which it is. But it's also a

636
00:39:36.199 --> 00:39:41.199
<v Speaker 6>really fascinating just like study of human behavior. I can't

637
00:39:41.199 --> 00:39:43.760
<v Speaker 6>say enough good things about it. It's totally wild and

638
00:39:43.880 --> 00:39:45.800
<v Speaker 6>I really recommend it to basically anyone.

639
00:39:45.840 --> 00:39:47.559
<v Speaker 5>Please watch Love is Blind. You won't regret it.

640
00:39:48.000 --> 00:39:51.599
<v Speaker 6>Oh when it's toasted by Nick Lache of ninety eight degrees,

641
00:39:51.639 --> 00:39:52.880
<v Speaker 6>I should add, which.

642
00:39:52.760 --> 00:39:54.639
<v Speaker 2>Is very important, very cool.

643
00:39:55.000 --> 00:39:58.760
<v Speaker 1>I've heard about that one all right. So my pick

644
00:39:59.039 --> 00:40:03.239
<v Speaker 1>is it's a it is a command line little tool

645
00:40:03.320 --> 00:40:06.679
<v Speaker 1>that was created. It's to make it look like you're

646
00:40:06.719 --> 00:40:08.559
<v Speaker 1>doing some really cool stuff on your computer.

647
00:40:09.199 --> 00:40:10.679
<v Speaker 3>Right. It's it's just for show.

648
00:40:11.559 --> 00:40:16.519
<v Speaker 1>It's actually called Hollywood, but it is it's actually been

649
00:40:16.559 --> 00:40:21.239
<v Speaker 1>made appearances in television shows and movies and things. So like,

650
00:40:21.280 --> 00:40:23.280
<v Speaker 1>if you want to look like super Elite, you know,

651
00:40:23.320 --> 00:40:26.000
<v Speaker 1>you're going to have like your image detection going on

652
00:40:26.000 --> 00:40:28.400
<v Speaker 1>on one screen with like as things are moving around

653
00:40:28.480 --> 00:40:31.039
<v Speaker 1>being classified, and on the other screen you've got Hollywood going.

654
00:40:31.719 --> 00:40:35.320
<v Speaker 1>And so you can check out the website. It's it's

655
00:40:35.360 --> 00:40:37.360
<v Speaker 1>really cool because it you can actually run out of

656
00:40:37.400 --> 00:40:39.039
<v Speaker 1>Docker and stuff like that, so you don't actually have

657
00:40:39.119 --> 00:40:44.440
<v Speaker 1>to install anything. And but what it does is it

658
00:40:44.480 --> 00:40:48.119
<v Speaker 1>opens up multiple t MUCKs panels with then it has

659
00:40:48.199 --> 00:40:51.559
<v Speaker 1>lots of techno nonsense stuff going on, plus some real

660
00:40:51.559 --> 00:40:55.320
<v Speaker 1>stuff like speed tests, directory tree listing, device listing, you know,

661
00:40:55.360 --> 00:40:58.719
<v Speaker 1>off of your actual computer, you know, generating PGP keys,

662
00:40:59.639 --> 00:41:02.199
<v Speaker 1>you know all stuff. It's all console based. It's just

663
00:41:02.320 --> 00:41:05.639
<v Speaker 1>really fun, just just fun that I don't know. I

664
00:41:05.639 --> 00:41:09.960
<v Speaker 1>think it's a cool little toy. But that's it for me, Alvisa,

665
00:41:09.960 --> 00:41:10.440
<v Speaker 1>how about you?

666
00:41:11.280 --> 00:41:12.000
<v Speaker 2>So uh.

667
00:41:12.199 --> 00:41:17.679
<v Speaker 4>The I want to mention uh an article from Sasha

668
00:41:18.400 --> 00:41:22.719
<v Speaker 4>Urick and uh the which is outside Elixir, which is

669
00:41:22.800 --> 00:41:27.719
<v Speaker 4>an article that helped me a lot to see uh

670
00:41:28.159 --> 00:41:32.039
<v Speaker 4>to to use parts uh and I think it's it's

671
00:41:32.079 --> 00:41:37.119
<v Speaker 4>it's a really great read. And the the second thing

672
00:41:37.360 --> 00:41:42.119
<v Speaker 4>is is a book. And actually this book is uh

673
00:41:42.199 --> 00:41:45.960
<v Speaker 4>it's something I was reading. It's a fantastic book. One

674
00:41:45.960 --> 00:41:48.960
<v Speaker 4>of the best books I read in the last two years.

675
00:41:49.400 --> 00:41:56.440
<v Speaker 4>The name is designing that intensive applications and from the

676
00:41:56.480 --> 00:41:59.039
<v Speaker 4>writer dealtor is Martin Klatman.

677
00:41:59.760 --> 00:42:00.000
<v Speaker 3>Uh.

678
00:42:00.079 --> 00:42:00.440
<v Speaker 1>Uh.

679
00:42:00.480 --> 00:42:06.639
<v Speaker 4>It's a quite big book and it goes from the

680
00:42:07.039 --> 00:42:15.760
<v Speaker 4>how database databases are written, how they store data in files, pages,

681
00:42:16.800 --> 00:42:20.800
<v Speaker 4>how to use logs. And the reason why this isn't

682
00:42:21.199 --> 00:42:24.719
<v Speaker 4>uh has been an important book to me is because

683
00:42:25.920 --> 00:42:31.079
<v Speaker 4>I started a blog, my blog actually trying to implement

684
00:42:31.320 --> 00:42:38.360
<v Speaker 4>something a database I log database that was explained in

685
00:42:38.400 --> 00:42:41.440
<v Speaker 4>this book and I tried to do it in Elixir

686
00:42:41.800 --> 00:42:44.880
<v Speaker 4>and it was so easy to do in Elixir that

687
00:42:45.119 --> 00:42:49.880
<v Speaker 4>a Kivali store based on logs right ahead logs something simple.

688
00:42:49.920 --> 00:42:53.599
<v Speaker 4>But it's actually one of the first articles. So uh,

689
00:42:53.719 --> 00:42:54.559
<v Speaker 4>it's a great read.

690
00:42:54.840 --> 00:42:54.960
<v Speaker 5>Uh.

691
00:42:55.239 --> 00:43:00.840
<v Speaker 4>And also it deals he deals also with he explains

692
00:43:00.960 --> 00:43:09.079
<v Speaker 4>the distributed databases all the issues how they also deal

693
00:43:09.159 --> 00:43:10.519
<v Speaker 4>with the different tissues.

694
00:43:10.920 --> 00:43:11.199
<v Speaker 2>Great.

695
00:43:11.199 --> 00:43:16.599
<v Speaker 4>Great, And the last thing is uh, so I follow

696
00:43:16.679 --> 00:43:21.480
<v Speaker 4>you guys on the on the on the movie side

697
00:43:22.239 --> 00:43:28.960
<v Speaker 4>is something I watched recently. It's called Dark and is

698
00:43:29.079 --> 00:43:32.519
<v Speaker 4>Uh time traveling is I think if if I remember

699
00:43:32.599 --> 00:43:33.119
<v Speaker 4>Christly is.

700
00:43:33.719 --> 00:43:36.599
<v Speaker 2>Uh is uh uh.

701
00:43:38.039 --> 00:43:42.880
<v Speaker 4>Based in is Is in Deutschland, I think is uh

702
00:43:43.280 --> 00:43:48.679
<v Speaker 4>and Uh. It's a great TV series about time traveling

703
00:43:49.199 --> 00:43:54.239
<v Speaker 4>uh and the consequences of time traveling. And I'm really

704
00:43:54.280 --> 00:43:58.559
<v Speaker 4>passionate about this topic and it's a great Yeah, it

705
00:43:58.639 --> 00:44:00.719
<v Speaker 4>was great watch.

706
00:44:01.320 --> 00:44:01.800
<v Speaker 3>Oh cool.

707
00:44:02.239 --> 00:44:04.679
<v Speaker 1>All right, so I give a plus one to the

708
00:44:05.159 --> 00:44:08.599
<v Speaker 1>Sashi Yericks article outside Alixer that is when I was

709
00:44:08.719 --> 00:44:11.079
<v Speaker 1>getting into ports. That was like super helpful for me

710
00:44:11.119 --> 00:44:15.599
<v Speaker 1>as well. So awesome good stuff there. All right, Well,

711
00:44:16.480 --> 00:44:18.079
<v Speaker 1>thank you for coming on al Visa. I had a

712
00:44:18.079 --> 00:44:19.480
<v Speaker 1>great time talking with you about this.

713
00:44:19.840 --> 00:44:22.719
<v Speaker 4>And thanks a lot guys for having me.

714
00:44:23.480 --> 00:44:25.239
<v Speaker 3>All right, glad you could come on. And that's it

715
00:44:25.280 --> 00:44:25.760
<v Speaker 3>for today.

716
00:44:26.000 --> 00:44:27.840
<v Speaker 1>Thank you for listening, and we hope you'll join us

717
00:44:27.880 --> 00:44:29.440
<v Speaker 1>next time on Alixer Mix
