WEBVTT
NOTE
Transcription provided by Podhome.fm
Created: 7/6/2024
4:07:58 PM
Duration: 3574.975
Channels: 1
1
00:00:14.065 -->
00:00:15.764 Hello, and welcome to podcast.init,
2
00:00:16.410 -->
00:00:24.885the podcast about Python and the people who make it great. You can subscribe to our show on Itunes, Stitcher, TuneIn Radio, or add our RSS feed to your podcatcher of choice.
3
00:00:25.365 -->
00:00:35.120You can also follow us on Twitter or Google plus and please give us feedback. You can leave us a review on iTunes to help other people find the show, send us a tweet or an email, leave us a message on Google plus,
4
00:00:35.500 -->
00:00:37.440or you can join our community. Visitdiscourse.pythonpodcastdot
5
00:00:39.065 -->
00:00:43.885com for your opportunity to find out about upcoming guests, suggest questions, and propose show ideas.
6
00:00:44.504 -->
00:00:49.170I would like to thank everyone who has donated to the show. Your contributions help us make the show sustainable.
7
00:00:49.470 -->
00:00:52.770For details on how to support the show, you can visit our site at python podcast.com.
8
00:00:54.030 -->
00:00:56.835Linode is sponsoring us this week. Check them out at linode.com/podcastinit
9
00:00:58.255 -->
00:01:02.675and get a $20 credit to try out their fast and reliable Linux virtual servers for your next project.
10
00:01:03.350 -->
00:01:08.729I would also like to thank Hired, a job marketplace for developers and designers for sponsoring this episode of podcast.init.
11
00:01:09.590 -->
00:01:10.729Use the link hired.com/
12
00:01:11.205 -->
00:01:20.025slash podcast in it to double your signing bonus. Your host today is Tobias Macy. Today, we are interviewing Mariano Guerra. Mariano, could you introduce yourself, please?
13
00:01:21.350 -->
00:01:21.850 Sure.
14
00:01:22.550 -->
00:01:24.010So as you said, I'm Mariano.
15
00:01:24.790 -->
00:01:26.970Originally, I'm from Cordo, Argentina.
16
00:01:28.070 -->
00:01:31.915Now for the last couple of years, I've been living in Stuttgart in Germany.
17
00:01:32.375 -->
00:01:33.675I'm a software engineer,
18
00:01:35.095 -->
00:01:36.155and I like
19
00:01:37.049 -->
00:01:37.549mainly
20
00:01:37.930 -->
00:01:39.710playing with programming languages.
21
00:01:40.490 -->
00:01:43.450I like to create them also. I and I also like,
22
00:01:44.090 -->
00:01:45.149distributed systems
23
00:01:45.450 -->
00:01:47.045and also yeah.
24
00:01:48.065 -->
00:01:49.045All all of
25
00:01:49.345 -->
00:01:54.085the parts of software like back end, front end, everything in between.
26
00:01:55.180 -->
00:02:03.680 With the wealth of interesting projects and tools, it's kinda hard to pick a particular niche to focus on because there are just so many interesting areas to explore. It's also interesting
27
00:02:04.115 -->
00:02:11.715how many of our guests and how much I've heard about Argentina coming up in reference to various Python communities. And it seems like there's a pretty strong,
28
00:02:12.150 -->
00:02:14.570strong community of Python users down in Argentina.
29
00:02:15.350 -->
00:02:20.970 Yeah. It's, quite big. And Spanish speaking countries is, I don't know if the biggest, but
30
00:02:21.635 -->
00:02:22.775a really big 1.
31
00:02:23.235 -->
00:02:32.160And also, the name is Python Argentina, but we have members from all over the Spanish speaking countries. So it's not only Argentina in that sense. Okay. And,
32
00:02:32.700 -->
00:02:38.545 Stuttgart is a bit of a difference from Argentina. I'm just curious if you'd like to share how you ended up over in that neck of the woods.
33
00:02:39.025 -->
00:02:39.665 Yeah. Sure.
34
00:02:40.385 -->
00:02:43.765I came to Germany for the first time, like,
35
00:02:44.224 -->
00:02:46.9656 years ago for a scholarship for 6 months.
36
00:02:47.730 -->
00:03:01.295I studied here in the 6 months in the Cultural Institute of Technology and then went back. And and in this travel, I met my girlfriend, current girlfriend. She's also from Argentina. And we went back. We got our degree.
37
00:03:01.595 -->
00:03:04.495And, yeah, we we liked the traveling
38
00:03:04.930 -->
00:03:07.270because while we were here, we travel around.
39
00:03:07.650 -->
00:03:09.110Like, 1 nice thing about
40
00:03:09.570 -->
00:03:13.350Europe is that it's small and you can cross countries really easy.
41
00:03:13.784 -->
00:03:14.284So,
42
00:03:15.224 -->
00:03:19.724yeah, I got my degree and I went to work a couple of months to England.
43
00:03:20.265 -->
00:03:22.105And when she visited me, she got,
44
00:03:22.665 -->
00:03:29.069she applied for some jobs here, and she got a job in Schulgaard. So we I moved. And I I work from home, so
45
00:03:29.450 -->
00:03:30.909I can be here and
46
00:03:31.615 -->
00:03:35.555enjoy, like, the nice airports and that everything is close by.
47
00:03:35.855 -->
00:03:39.955 Yeah. Being able to work from home as a developer is definitely very convenient in that respect.
48
00:03:40.335 -->
00:03:40.835 Yeah.
49
00:03:41.330 -->
00:03:43.990 So how did you get introduced to Python in the first place?
50
00:03:44.290 -->
00:03:45.190 I guess it's
51
00:03:45.490 -->
00:03:46.610a combination of,
52
00:03:47.250 -->
00:03:47.750things.
53
00:03:48.130 -->
00:03:55.095When I started with Linux, like, I don't know, 15 years ago, 2000, I installed Red Hat 6.1, I think.
54
00:03:55.555 -->
00:04:02.450And Red Hat, I think they still do. They all of the scripts and automation they do, they do it in Python.
55
00:04:02.989 -->
00:04:09.250And when I was playing around with Red Hat, because at that point, you had to play around a lot with the software with Linux,
56
00:04:10.105 -->
00:04:16.605I saw like every single utility was written in this Python programming language. At that point, I think it was 1.5
57
00:04:16.985 -->
00:04:18.845or 2.0 or something like that.
58
00:04:19.189 -->
00:04:20.009And then so I,
59
00:04:20.949 -->
00:04:32.715I came back and I I just read the the scripts to try to figure out those stuff work, but I didn't know the language. And at that point, I didn't have Internet. And, also, I didn't know anyone who were was a programmer.
60
00:04:33.095 -->
00:04:36.235I just had a c book and I started with c.
61
00:04:37.550 -->
00:04:39.250And so then I learned assembly
62
00:04:39.550 -->
00:04:42.770and then c plus plus and then I started studying at the university
63
00:04:43.470 -->
00:04:45.324and then learned Java. But,
64
00:04:45.705 -->
00:04:46.604yeah, with Java,
65
00:04:47.145 -->
00:04:49.165I got this feeling of, like, complexity.
66
00:04:50.025 -->
00:04:51.645And then, like, someone
67
00:04:52.389 -->
00:04:59.370sysadmin told me, like, yeah, we do we we use Python for automation. And then other person said, hey, have you checked this
68
00:05:00.105 -->
00:05:05.965software? It's made in Python and I will I kept hearing about Python here and there. And a friend of mine
69
00:05:07.129 -->
00:05:13.789told me, yeah, come to a meeting. The the labs of the university are presenting the projects they are working on.
70
00:05:14.145 -->
00:05:17.045So they presented what they're working on and 1 of them was,
71
00:05:18.305 -->
00:05:21.4451 person doing research on this Python programming language.
72
00:05:21.825 -->
00:05:26.190So I say, okay, here it is again. So we applied for to work on that group
73
00:05:26.650 -->
00:05:27.290and we
74
00:05:27.850 -->
00:05:29.070that was, like, 2, 004.
75
00:05:30.490 -->
00:05:35.315So we entered and, our job was to pick 1 UI toolkit
76
00:05:36.095 -->
00:05:40.815and 1 web framework. We picked GTK at that point and,
77
00:05:41.935 -->
00:05:42.835turbo gears.
78
00:05:43.509 -->
00:05:46.650Like, we did a presentation of all the alternatives and and
79
00:05:47.110 -->
00:05:50.315which 1 was good and which would why we pick the ones we pick.
80
00:05:50.875 -->
00:05:59.295So we did, some software for the labs. They manage, like, equipment and stuff, with, turbo gears at that point. And then
81
00:05:59.729 -->
00:06:00.630I wanted to
82
00:06:01.009 -->
00:06:02.630to try GTK more in-depth.
83
00:06:03.090 -->
00:06:03.490So,
84
00:06:04.130 -->
00:06:05.830my my brother was using
85
00:06:06.370 -->
00:06:11.505Windows at the moment, and he told me, yeah, I would use Linux only if there was a decent,
86
00:06:11.905 -->
00:06:12.405MSN
87
00:06:13.025 -->
00:06:14.725Messenger client for Linux.
88
00:06:15.345 -->
00:06:20.030So I said, I took a weekend and I I made a joke, a really
89
00:06:20.490 -->
00:06:21.310long joke.
90
00:06:21.690 -->
00:06:23.310I made a really simple
91
00:06:23.770 -->
00:06:28.155MSN Messenger client for him, and I say, here you have 1. You now you can switch.
92
00:06:28.775 -->
00:06:35.675And he say he start laughing. He he switched, and he started using it and started giving me feedback. And I was, like,
93
00:06:36.039 -->
00:06:44.780changing all the things he said really fast to to make it work for him. And at some point, I blogged about it and, like, people really started to use it.
94
00:06:45.305 -->
00:06:46.605That became MSN,
95
00:06:47.465 -->
00:06:47.965which
96
00:06:48.265 -->
00:06:49.645was really popular,
97
00:06:50.665 -->
00:06:51.565at that point.
98
00:06:51.945 -->
00:06:55.500And, yeah, we we got, like, hundreds of thousands of users,
99
00:06:55.960 -->
00:07:00.940like, lot of contributors. It was translated to many languages, then it grew and
100
00:07:01.355 -->
00:07:07.195learned to work with, g talk and Facebook Messenger. But then when MSN closed, I just,
101
00:07:07.915 -->
00:07:09.615we just left the project,
102
00:07:10.000 -->
00:07:18.020die a peaceful death, let's say. Mhmm. The code is still there, and it runs. And it runs on Mac, on Windows, on Linux, and
103
00:07:18.639 -->
00:07:26.165everything. But, yeah, the main purpose is not there anymore, so we are not supporting it. So yeah, that's how I got into Python and,
104
00:07:26.785 -->
00:07:30.810yeah, and that at some point there, I think when I was at the labs,
105
00:07:31.110 -->
00:07:31.610I
106
00:07:32.470 -->
00:07:41.345joined Python Argentina, the user group. And, yeah, the the cool thing about Python Argentina first is that the people there are awesome.
107
00:07:42.430 -->
00:07:44.130But also that they organize
108
00:07:45.230 -->
00:07:47.310a lot of events. They have this idea of,
109
00:07:47.950 -->
00:07:48.450federal
110
00:07:48.830 -->
00:07:49.330group.
111
00:07:49.794 -->
00:07:52.695So they are well, they we. I'm a member also.
112
00:07:54.275 -->
00:07:57.574Organized like by days where you can set up
113
00:07:58.290 -->
00:07:59.5901 day of talks,
114
00:07:59.890 -->
00:08:00.390mainly
115
00:08:00.850 -->
00:08:01.990normally in universities
116
00:08:02.450 -->
00:08:02.950to
117
00:08:03.490 -->
00:08:07.270to talk about Python and try to bring new people. It's to tell
118
00:08:08.055 -->
00:08:14.795students mainly or people that are interested in language about Python. So our all introductory talks, and
119
00:08:15.560 -->
00:08:20.860there there were a lot of them and then, like, PyCon started happening, I think, in 2009.
120
00:08:22.440 -->
00:08:23.820And then, like, PyCon's
121
00:08:24.325 -->
00:08:29.705And, yeah. So I stayed, I came for the language and stayed for the community.
122
00:08:30.085 -->
00:08:30.905I still
123
00:08:31.909 -->
00:08:35.529hang around in the chat helping people, maintaining some projects,
124
00:08:36.070 -->
00:08:47.635 just because the community is so cool. So, I brought you on today to talk about your language. And actually, I'm gonna pause for a second and just to make sure I'm pronouncing it the right way. So how how do you pronounce the name of your language?
125
00:08:48.040 -->
00:08:55.180 In it's a play of words. It's a f n e. Okay. It's, because 1 may my first project is MSN.
126
00:08:55.560 -->
00:08:56.060Okay.
127
00:08:56.685 -->
00:08:59.025And it's how you pronounce in Spanish,
128
00:08:59.565 -->
00:09:06.760MSN. Mhmm. And FNA is how you pronounce in Spanish, FN. Mhmm. The 2 letters. Right. So that's the play of words.
129
00:09:07.140 -->
00:09:26.130 So, f n a is a language that runs on the Beam VM, which for people who aren't familiar is the proper name for the Erlang VM. And in the documentation, you mentioned that it's at least partially inspired by the Zen of Python. I'm wondering if you can explain how that inspiration manifested in some of the process that was involved in the creation of FNA.
130
00:09:26.670 -->
00:09:27.410 Yeah. Sure.
131
00:09:27.790 -->
00:09:28.290So
132
00:09:28.670 -->
00:09:32.050about Python, I like, as I said, the community, but also like the mindset.
133
00:09:32.475 -->
00:09:36.815There's the thing I like, I don't know who said it, but you should learn languages
134
00:09:37.275 -->
00:09:37.775that
135
00:09:38.155 -->
00:09:39.935change the way you think about programming.
136
00:09:40.570 -->
00:09:41.070And
137
00:09:41.450 -->
00:09:45.950in some sense, Python changed the way I think about programming in terms of simplicity.
138
00:09:46.650 -->
00:09:48.990Like, that's the main thing I like about Python.
139
00:09:49.425 -->
00:10:01.639But also, like, when read when you read the same, there's so much there to learn. When I was, starting, like, I improved a lot of programming with Python. And if you just follow the same when you are thinking about solving a problem,
140
00:10:02.420 -->
00:10:03.879like, it's a good guidance.
141
00:10:04.420 -->
00:10:08.440And at some point, I was working at some at the work doing Python.
142
00:10:09.525 -->
00:10:16.505And someone newer than me at the for in Python was asking me questions, and I kept replying with the send of Python.
143
00:10:16.810 -->
00:10:19.630And he said, oh, these Python parameters is, like,
144
00:10:19.930 -->
00:10:23.390they talk like send monks. They always reply in this send
145
00:10:23.850 -->
00:10:25.375ways. So I I like,
146
00:10:25.834 -->
00:10:26.574like, it's
147
00:10:27.595 -->
00:10:41.870like a small text that guides you when you are trying to solve a problem. And, like, you see some code and you say this is really complex or really complicated. And then they, like, the same concept you would say this shouldn't be like this or this is too nested and stuff like that.
148
00:10:42.255 -->
00:10:57.360So I I really like like the like the idea of the zen of Python. It's a really small text, really nicely written that, like, con concentrates what Python is or what people think Python should be. So I I like to bring these ideas of the of the
149
00:10:57.875 -->
00:10:59.095of the SEN
150
00:10:59.475 -->
00:11:15.375because I'm not really good at writing SENs or or Haiku or stuff like that. So I just say, okay. Let's adopt everything I like about the Python community instead of trying to come up with some new idea. For example, like, Ruby has this idea of,
151
00:11:15.935 -->
00:11:19.475optimized for programmer happiness and which I find really interesting,
152
00:11:20.149 -->
00:11:20.649but
153
00:11:20.950 -->
00:11:23.690I prefer the simplicity thing of Python. So,
154
00:11:24.630 -->
00:11:25.1301
155
00:11:25.910 -->
00:11:34.925thing that, keeps coming back on FNA is, not invent anything new. Just pick stuff from other languages that works
156
00:11:35.290 -->
00:11:35.790and
157
00:11:36.170 -->
00:11:37.630and that I like, of course.
158
00:11:38.810 -->
00:11:52.305So I tried I bring stuff I like about the the Python community a lot, something in JavaScript and something from the Erlang language and something also from closure. I I don't know if it you can see it in the code, but,
159
00:11:53.030 -->
00:11:56.970like, I some ideas from the closure community are really interesting too.
160
00:11:57.350 -->
00:11:59.050And I forgot the second question.
161
00:11:59.830 -->
00:12:10.089 Just wondering if you can explain some of the process that was involved in the creation of FNA. Some of the concerns that you have to think about when you're designing and building a new programming language. I started,
162
00:12:10.870 -->
00:12:11.850 it was an accident.
163
00:12:12.550 -->
00:12:16.089Like, every single thing I do, like MSNA also,
164
00:12:16.805 -->
00:12:18.585I started learning airline
165
00:12:19.125 -->
00:12:19.625in
166
00:12:20.805 -->
00:12:21.3052006,
167
00:12:21.685 -->
00:12:22.345I think.
168
00:12:22.645 -->
00:12:24.410No. A little bit late later.
169
00:12:24.950 -->
00:12:25.450And,
170
00:12:26.630 -->
00:12:33.050I was finding it really hard to find an excuse to use the language. Like, I learned a lot with
171
00:12:33.884 -->
00:12:35.824I learned a lot a lot from
172
00:12:37.084 -->
00:12:40.305Python while doing this lab project and while doing MSN.
173
00:12:40.899 -->
00:12:46.360And I couldn't find 1 excuse to actually use our link for something real to learn about it.
174
00:12:46.740 -->
00:12:47.240So
175
00:12:47.700 -->
00:12:52.375I was looking for some something to do. And as I said, I like languages, so I did a calculator.
176
00:12:53.475 -->
00:12:57.500Like, you enter, like, formulas and it did the calculation for you.
177
00:12:57.900 -->
00:12:58.400And
178
00:12:59.100 -->
00:13:00.640the it's actually on GitHub.
179
00:13:01.260 -->
00:13:05.040Still the decoder, you can go commit by commit seeing how it evolves.
180
00:13:05.454 -->
00:13:14.195And at some point, I say, yeah. I could add, like, variables, and I added variables. And then I I said, okay. I can add functions, and I added functions.
181
00:13:15.370 -->
00:13:16.829At this point, it was interpreted.
182
00:13:17.529 -->
00:13:20.029So I said, let's see if I could,
183
00:13:20.569 -->
00:13:22.509compile this to bytecode, actually.
184
00:13:22.955 -->
00:13:23.455And
185
00:13:23.995 -->
00:13:27.695when I managed to compile to bytecode, I say, okay. There's a language here.
186
00:13:28.555 -->
00:13:29.055So
187
00:13:29.810 -->
00:13:32.709I was invited to Orland Factory London in 2, 002,
188
00:13:33.329 -->
00:13:33.8292010
189
00:13:34.370 -->
00:13:36.709to talk about it, and I felt
190
00:13:37.089 -->
00:13:38.550this pressure to
191
00:13:39.024 -->
00:13:40.644actually have something more,
192
00:13:41.264 -->
00:13:44.004interesting to show. So I rewrote it as a language
193
00:13:44.384 -->
00:13:50.459from, from scratch. And then, like, there was some interest, so I kept working on it, on and off, since.
194
00:13:50.839 -->
00:13:52.860I stopped, at some point when,
195
00:13:53.320 -->
00:13:58.685like, Elixir picked up and also because I was really busy working on
196
00:13:59.225 -->
00:13:59.885my personal
197
00:14:00.265 -->
00:14:00.765startup.
198
00:14:02.430 -->
00:14:05.250So when I saw Elixir, I said, okay. There there's,
199
00:14:05.949 -->
00:14:09.410the reason I created FNA was to make it easier for
200
00:14:09.855 -->
00:14:14.035people coming from mainstream programming languages or scripting languages to come to the Erlang
201
00:14:14.495 -->
00:14:14.995ecosystem
202
00:14:15.775 -->
00:14:20.930because, at first, airline looks really alien to people in some sense.
203
00:14:21.470 -->
00:14:27.695But, so when I saw Elixir, I said, okay. They are doing the job. But at some point, when I started having a lot
204
00:14:28.075 -->
00:14:28.975of some no.
205
00:14:29.395 -->
00:14:29.895Some
206
00:14:30.315 -->
00:14:31.215more free time,
207
00:14:32.390 -->
00:14:37.930I saw that there was still an issue on my ideas of what a nice programming language for the Erlang VM
208
00:14:39.350 -->
00:14:43.165would be. So I started working on it again for the last
209
00:14:43.625 -->
00:14:47.405year, year and a half. And, yeah, it's almost finished. And,
210
00:14:48.650 -->
00:14:49.630yeah, I think it's,
211
00:14:50.890 -->
00:14:54.670like, there there are, like, 4 main programming languages and then Erlang VM,
212
00:14:55.050 -->
00:14:55.550LFE,
213
00:14:57.210 -->
00:15:00.415LISP flavored Erlang, Elixir, and FNA.
214
00:15:01.355 -->
00:15:03.475And, I forgot about another 1.
215
00:15:03.915 -->
00:15:08.210I don't know. It's pronounced Hoksa or Yoxa or I don't know how it is. It's another list.
216
00:15:10.210 -->
00:15:11.190And I think,
217
00:15:12.050 -->
00:15:14.310each has its own characteristics
218
00:15:14.690 -->
00:15:15.350and strengths.
219
00:15:16.285 -->
00:15:25.425So that's why I still work on FNA because I I think there there's a place for FNA in the in the ecosystem. I'm not trying to compete against the other languages.
220
00:15:26.070 -->
00:15:32.570 And so that mostly answered my next question about what your inspiration was. And so, you said it was essentially an accident
221
00:15:33.110 -->
00:15:33.430and,
222
00:15:34.235 -->
00:15:35.855 I like, yeah, I like
223
00:15:36.235 -->
00:15:38.495designing programming languages. I have
224
00:15:39.275 -->
00:15:39.935a lot
225
00:15:40.635 -->
00:15:43.775of hidden failures that are not public, but
226
00:15:44.540 -->
00:15:47.040the first 1 was 1 I did, like, I don't know,
227
00:15:48.140 -->
00:15:50.56015 years ago or more,
228
00:15:50.940 -->
00:15:55.135that compiled straight to assembly and then that was the fan.
229
00:15:55.755 -->
00:16:11.185And then in the middle, I did 1 the a scheme that compiled to with the PyPy toolchain. There's a talk around and the code is available online. So, yeah, I I like programming languages and and also I like to think on different points of view. Like, if I have this,
230
00:16:11.985 -->
00:16:16.725if I want to focus only on this characteristic, how the programming language would be if I constraints.
231
00:16:17.105 -->
00:16:18.245If I have this constraint,
232
00:16:18.610 -->
00:16:26.550what programming language can I build with this? If I want something that focus on 1 topic or something. And then f n is 1 that the constraints are
233
00:16:26.895 -->
00:16:29.875that it's really easy, really simple, really regular,
234
00:16:30.255 -->
00:16:30.755looks
235
00:16:31.135 -->
00:16:35.800familiar for people coming from Python, Java script, or,
236
00:16:36.180 -->
00:16:36.680like,
237
00:16:37.140 -->
00:16:38.440Algol or mainstream
238
00:16:38.980 -->
00:16:39.880programming languages.
239
00:16:40.580 -->
00:16:44.355And, yeah, that it's easy to read, easy to pick up, like, the readability
240
00:16:45.134 -->
00:16:57.589of Python, like, that you read the code. And even if you don't know the syntax, you can see what's going on and stuff like that. That's like the the main focus on the language. And what I try to to focus on f n a is,
241
00:16:58.310 -->
00:17:04.395many people complain about the the syntax of Erlang and some other things related to the syntax.
242
00:17:04.855 -->
00:17:09.440And you hear the creators of the Erlang language saying but, like,
243
00:17:09.820 -->
00:17:13.840Erlang is really simple. The the the syntax is really simple. You can learn it in an a.
244
00:17:14.220 -->
00:17:17.040And when I was doing f n and trying to,
245
00:17:17.595 -->
00:17:24.975like, do the same ideas of the syntax, but the idea of, Erlang, the language, like, the syntax is pattern matching and case clauses
246
00:17:26.100 -->
00:17:26.680and and
247
00:17:26.980 -->
00:17:35.160guards. So it's only these 3 things, and you write, like, in English. Like, you have commas and columns and semicolons and columns,
248
00:17:35.605 -->
00:17:36.105and,
249
00:17:36.565 -->
00:17:37.865that's all you have.
250
00:17:38.325 -->
00:17:39.465So I try to
251
00:17:40.165 -->
00:17:57.075to extract these ideas they had when they well, they didn't decide the syntax. The syntax was mostly inspired by product. So I say, okay. What if I try to extract what they are trying to say and, like, create a different syntax that may be more approachable for people that are used to these algo languages?
252
00:17:57.535 -->
00:18:01.470So that's the current state of f n. It's based on that.
253
00:18:02.330 -->
00:18:04.110Note that I say f n because,
254
00:18:04.490 -->
00:18:09.284many people say f n too. So I tend to say FN but the correct pronunciation is FN.
255
00:18:09.585 -->
00:18:10.085Okay.
256
00:18:11.825 -->
00:18:14.725 And that also brings up an interesting point because
257
00:18:15.105 -->
00:18:16.325in my
258
00:18:16.910 -->
00:18:20.290listening to some of the communications from the elixir community,
259
00:18:20.830 -->
00:18:23.090I've seen some people mention how
260
00:18:23.725 -->
00:18:30.145in some ways, it can be a bit of a disservice having the more familiar syntax because it can kind of hide some of the
261
00:18:30.900 -->
00:18:35.400cognitive differences and how you actually approach a problem in Erlang based languages
262
00:18:35.700 -->
00:18:41.445because of the more functional and distributed nature. Whereas in languages like Python or Ruby,
263
00:18:41.745 -->
00:18:43.205you're generally more
264
00:18:43.505 -->
00:18:45.924procedural or procedural or iterative
265
00:18:46.225 -->
00:18:49.670in the approach and so that can actually cause some,
266
00:18:50.210 -->
00:18:59.034some initial pain when you're trying to write something the same way as you would write it in Python, but it turns out that the way it is actually executed and the way you should be thinking of it is,
267
00:18:59.495 -->
00:19:04.075somewhat different. So I'm just curious if you've had that experience or had anybody mention that to you.
268
00:19:04.510 -->
00:19:05.010 Yeah.
269
00:19:05.310 -->
00:19:09.650That's something I keep thinking about, but I have 2 views.
270
00:19:10.110 -->
00:19:11.330It's true that,
271
00:19:11.950 -->
00:19:12.850like, if
272
00:19:13.625 -->
00:19:15.725I could make FNA have
273
00:19:16.105 -->
00:19:16.765the syntax
274
00:19:17.065 -->
00:19:23.870as closely or as similar as possible to Python, and then you have this problem. Then you say, hey. This I know the syntax. So
275
00:19:24.170 -->
00:19:29.950people can think I know the syntax, so I know the semantics of the syntax. I know what happened here.
276
00:19:30.305 -->
00:19:36.405So they will write something and it won't work or it will work differently, and they will say, hey. There's something weird here then.
277
00:19:37.450 -->
00:19:42.430So I didn't copy this the Python syntax or the JavaScript syntax or any other syntax
278
00:19:43.530 -->
00:19:44.030100%
279
00:19:44.835 -->
00:19:57.980because you will have that. You you read something and because you know what that does in Python, you think it what it does in in in our line or if and So you have this trap of a familiar a familiar syntax,
280
00:19:58.360 -->
00:20:00.300making you think you know what it means.
281
00:20:01.080 -->
00:20:02.300But in this case,
282
00:20:03.005 -->
00:20:05.485in FNF, like, variables are,
283
00:20:05.965 -->
00:20:10.145uppercase, so you there go, like, okay. This is something different.
284
00:20:10.669 -->
00:20:13.490And then, like, lowercase words are atoms,
285
00:20:14.350 -->
00:20:18.610and it's a plain in documentation. So I fall in that part, I follow the
286
00:20:18.910 -->
00:20:19.490the Erlang
287
00:20:20.315 -->
00:20:23.535approach, the Erlang syntax. So there you see a difference.
288
00:20:24.475 -->
00:20:25.775And f n a is
289
00:20:26.235 -->
00:20:28.655functions first. The I don't try to
290
00:20:29.370 -->
00:20:34.990make something like objects or classes or object oriented notation, so you won't fall in that trap.
291
00:20:35.690 -->
00:20:38.750But on the other hand, like, I try to do it, like,
292
00:20:39.195 -->
00:20:44.654its own syntax that you say, okay. This is a different language. This is not Python for the Erlang VM.
293
00:20:45.115 -->
00:20:50.910But where you can say, okay. Like the rules and the syntax and my fingers are used to write
294
00:20:51.450 -->
00:20:56.434like data, like JSON and functions and the operators like plus and
295
00:20:56.815 -->
00:21:00.995the arithmetic operators and or and and the binary operators.
296
00:21:02.470 -->
00:21:07.210People are used to read them in a way, so I use that because they mean the same thing.
297
00:21:08.070 -->
00:21:17.895But when it comes to, like, the case statement or pattern matching or function definition with different k function clauses and stuff like that,
298
00:21:18.500 -->
00:21:19.640I don't reuse
299
00:21:20.500 -->
00:21:24.920a similar syntax from another language because I want to make it clear that it's something else.
300
00:21:26.645 -->
00:21:28.985But on the other hand, when I was learning Erlang,
301
00:21:29.925 -->
00:21:44.304I had this problem that it's the, like, the other side of this argument, which is you are fighting 2 things 2 3 battles at the same time. 1st, you are learning a different semantics. Like, the semantics of the Erlang virtual machine, which are really different from, like, JavaScript,
302
00:21:45.165 -->
00:21:48.945or any mutable object oriented or imperative language.
303
00:21:49.645 -->
00:21:53.460Then you are fighting the tooling because the tooling in Erlang is quite different.
304
00:21:53.840 -->
00:21:55.380It's improving right now,
305
00:21:56.720 -->
00:22:15.120but it's different. You have to get used to that. And then you're fighting also the syntax. So your your brain is trying to learn 3 things at the same time. The the syntax of a language that is really different from what you know, The semantics of the language that if you come from, imperative object oriented languages, it's different from what you know.
306
00:22:15.455 -->
00:22:24.595And the tooling, which it used to be really bad, but it's getting really good lately. There there's a big push on on tooling lately that's improving. So,
307
00:22:24.910 -->
00:22:25.410like,
308
00:22:25.870 -->
00:22:26.930you are going
309
00:22:28.750 -->
00:22:30.050to, stop learning,
310
00:22:30.670 -->
00:22:34.975Erlang and move to something else because you're saying, okay. This this is too much at the same time. I I'm
311
00:22:36.335 -->
00:22:41.154like, you didn't it's if you are a Python programmer and you start learning JavaScript,
312
00:22:42.190 -->
00:22:52.495many things are the same. Like, objects are like objects, arrays are arrays, mutability is mutability, and stuff like that. Functions are functions, modules are modules. So you can and the syntax is not that different.
313
00:22:52.795 -->
00:22:56.415So you can take a lot when you move. And then you start to get this
314
00:22:57.570 -->
00:23:03.830moments where you say, okay. This is different. And you can, like you take, like, a mental note of this is not like in Python.
315
00:23:04.210 -->
00:23:05.490But you can start with
316
00:23:06.595 -->
00:23:09.815there's this saying that you can write Fortran in any language.
317
00:23:10.995 -->
00:23:13.495I used to write c in any language
318
00:23:13.820 -->
00:23:21.520until I learned Python. And now I try to I used to try to write Python in any language. And then, like I learned closure and
319
00:23:22.525 -->
00:23:23.265the the style
320
00:23:23.725 -->
00:23:24.544makes you try
321
00:23:24.845 -->
00:23:28.304to code in a in a particular way because your your mind
322
00:23:29.730 -->
00:23:36.309gets used to thinking that way. My idea with DEFN is to let you bring a lot of the things you already know.
323
00:23:36.610 -->
00:23:45.365And, of course, to clarify when something is different. But so you don't have to start from scratch learning everything, like, the syntax, the tooling, and the concepts.
324
00:23:45.669 -->
00:23:46.570I want to focus
325
00:23:46.950 -->
00:23:55.289on making the tooling and the syntax as approachable as possible and also having a lot of focus on errors and documentation and support and community.
326
00:23:55.735 -->
00:23:58.315So, you can focus on learning just the semantics
327
00:23:58.774 -->
00:24:01.274of the airline ecosystem, which are the
328
00:24:01.735 -->
00:24:05.514the part that is different and the part that makes the airline ecosystem interesting.
329
00:24:06.040 -->
00:24:06.540Because,
330
00:24:08.440 -->
00:24:16.345Erlang, the language, like, the syntax is you're not going to learn Erlang because of the syntax, or you're not going to learn airline because of the tooling. Your
331
00:24:17.445 -->
00:24:22.220the virtual machine allows you to do stuff that it's not as easy in other
332
00:24:22.680 -->
00:24:23.980virtual machines or ecosystems.
333
00:24:24.520 -->
00:24:28.460So I want to make a language that is so simple and so,
334
00:24:28.955 -->
00:24:37.615like, the definite project is not only the compiler and the syntax and the language, but also the landing page, the documentation, the tutorials, the templates, the plugins.
335
00:24:38.580 -->
00:24:50.065The FNA project is everything. All of that is a release of the FNA language. It's, when when I say 1.0, it means the language is ready. The compiler is ready. The error messages are clear.
336
00:24:50.365 -->
00:24:51.105The templates,
337
00:24:51.804 -->
00:25:00.430are all up to date. The the plug ins are up to date. The documentation covers all the topics, and it's, you have, like, tutorials and step by step guides.
338
00:25:00.809 -->
00:25:01.870I want to make
339
00:25:02.650 -->
00:25:05.150the 1st weeks with the language
340
00:25:05.905 -->
00:25:13.284easy so you can focus on learning what's different. This this moment when you say, okay. This is different in Erlang. This is
341
00:25:13.825 -->
00:25:14.880what I came from
342
00:25:15.200 -->
00:25:15.700for.
343
00:25:16.160 -->
00:25:16.660So
344
00:25:17.200 -->
00:25:22.420that's my idea with the with the project. And I think the Elixir community is doing the same
345
00:25:22.915 -->
00:25:25.815for the people coming from Ruby in some sense
346
00:25:26.435 -->
00:25:28.535because the creator creator of Elixir,
347
00:25:28.835 -->
00:25:30.935Jose Valim, is a core
348
00:25:31.555 -->
00:25:33.290Ruby on Rails committer. So
349
00:25:34.230 -->
00:25:40.090I think he's trying to make as easy as possible for the people coming from the Ruby on Rails community
350
00:25:40.505 -->
00:25:42.765to land on the airline ecosystem and
351
00:25:44.025 -->
00:25:50.205get on their feet and running as quickly and as easy as possible. Of course, if you try to write Ruby on Elixir,
352
00:25:50.730 -->
00:25:55.390you will get these moments where you say, okay. This doesn't work like like, what I expected.
353
00:25:55.930 -->
00:25:56.430But,
354
00:25:57.290 -->
00:26:06.815you are already running a website, a web server doing queries to a database. So you already have something to show and you're happy because you have something running like a web server that replies
355
00:26:07.360 -->
00:26:08.659and displays a website.
356
00:26:08.960 -->
00:26:11.220And then you say, okay. It's worth
357
00:26:12.000 -->
00:26:15.380to learn it and, like, interiorize it because
358
00:26:15.725 -->
00:26:17.345it's worth it and I'm already
359
00:26:17.804 -->
00:26:18.544so far
360
00:26:19.004 -->
00:26:22.384ahead with the language and I'm already productive that it's
361
00:26:22.845 -->
00:26:28.590worth learning it. But if you get stuck the 1st day or the 2nd day or you say or you see that in
362
00:26:29.050 -->
00:26:32.750the 2nd week, you are still on the hello world and you don't understand anything,
363
00:26:33.095 -->
00:26:35.835The chances that you will stay and you won't move to
364
00:26:36.135 -->
00:26:38.555another programming language are really big.
365
00:26:40.775 -->
00:26:42.235Not big, really low.
366
00:26:43.960 -->
00:26:44.460 So,
367
00:26:44.760 -->
00:26:50.065yeah, from your description of how you're trying to play that balancing act of
368
00:26:50.445 -->
00:26:55.825making sure that the syntax is familiar enough, but not so much that it's deceptively familiar.
369
00:26:56.445 -->
00:27:04.160Seems like a pretty thin line to walk, but it sounds as though you're doing a pretty good job of that. But another thing you mentioned too is that the tooling
370
00:27:04.540 -->
00:27:13.595in the Erlang ecosystem is getting progressively better. And I know that part of that is because Erlang, the language in and of itself, has seen a bit of a recent,
371
00:27:13.975 -->
00:27:14.955rise in popularity
372
00:27:15.660 -->
00:27:22.000largely because of the scales that a lot of people are trying to operate at. And also, you know, there have been a few
373
00:27:22.380 -->
00:27:23.280success stories
374
00:27:23.625 -->
00:27:25.485of companies who are using Erlang,
375
00:27:26.025 -->
00:27:29.885so for instance, WhatsApp and then also the React database and RabbitMQ
376
00:27:30.185 -->
00:27:31.565all being written in Erlang.
377
00:27:32.230 -->
00:27:35.850And also, I know that part of the tooling is partly due to the fact that
378
00:27:36.790 -->
00:27:38.650Elixir has been gaining a lot of popularity.
379
00:27:39.030 -->
00:27:40.355And I know that
380
00:27:40.995 -->
00:27:41.495Ruby
381
00:27:41.955 -->
00:27:50.929the Ruby community has a pretty good focus on the developer tooling partly to play into their whole philosophy of developer happiness. And
382
00:27:51.309 -->
00:28:01.394it seems that 1 of the benefits of writing a language that runs on the beam is because, you know, similar to JVM based languages, all of those different ecosystems can interoperate
383
00:28:01.774 -->
00:28:05.075because they all compile to the same byte code. So for instance,
384
00:28:05.455 -->
00:28:13.320correct me if I'm wrong, but you can actually take libraries written in Elixir and in Erlang and utilize them directly in Afin a without having to do any
385
00:28:13.620 -->
00:28:14.120modifications.
386
00:28:15.220 -->
00:28:16.679 Yep. That's right.
387
00:28:17.845 -->
00:28:19.225Yep. So also
388
00:28:19.684 -->
00:28:21.945the the the the Elixir
389
00:28:22.565 -->
00:28:30.150here is a difference, between my approach and the Elixir approach, which I I'm not saying it's a good thing or a bad thing, but just difference,
390
00:28:31.170 -->
00:28:32.630on the airline side,
391
00:28:34.085 -->
00:28:38.505what the Elixir people showed to the airline people let's say is that
392
00:28:38.965 -->
00:28:39.945you could actually
393
00:28:41.284 -->
00:28:42.265make it really
394
00:28:43.559 -->
00:28:46.140like improve programmer happiness on the airline
395
00:28:46.600 -->
00:28:47.419virtual machine,
396
00:28:48.440 -->
00:28:54.735with not so many programmers because when the Elixir community started, they were a small group of people, really active
397
00:28:55.115 -->
00:29:00.895group, but not that many. And they, in like 1 or 2 years, they've created like a package manager and
398
00:29:01.530 -->
00:29:03.150a and a release tool and
399
00:29:03.690 -->
00:29:09.310a website where you could publish packages and web framework and all this stuff. And they,
400
00:29:10.144 -->
00:29:18.085this is only my idea, but, they showed that if you really want to make it easier, simpler, and more user friendly, you can. It's not
401
00:29:18.510 -->
00:29:20.770a matter of the size of the community.
402
00:29:22.270 -->
00:29:23.570But at the same time,
403
00:29:24.670 -->
00:29:29.735it was already getting better. Basho, the company behind React created rebar that,
404
00:29:30.055 -->
00:29:38.650you may like it or not, but it was it solved the problem. It had some problems also, but it was better than what was there before, which was only make files.
405
00:29:39.670 -->
00:29:42.170So some people picked up the work there
406
00:29:43.825 -->
00:29:44.325and
407
00:29:45.345 -->
00:29:47.445and created river 3, which was
408
00:29:48.465 -->
00:29:50.005a rewrite of river
409
00:29:50.520 -->
00:29:52.700that solved the problems that people were having.
410
00:29:53.000 -->
00:29:55.740And also the there's the Airline MK
411
00:29:56.200 -->
00:29:58.700project, which is a more unique style,
412
00:29:59.320 -->
00:29:59.820build
413
00:30:00.855 -->
00:30:01.675tool. So
414
00:30:02.855 -->
00:30:04.075it's it improved
415
00:30:04.695 -->
00:30:06.715along with the Elixir people. But then
416
00:30:07.230 -->
00:30:10.370there was this back and forth and, like, cross pollination
417
00:30:10.670 -->
00:30:11.490where, like,
418
00:30:12.030 -->
00:30:16.770since the Elixir people already had a package manager and a package format and some ideas,
419
00:30:17.775 -->
00:30:29.4303 bar 3 people said, okay. Let's use that package manager and that format for 4 d airline packages too. So there was this back and forth where all the tools kept improving with the work of both sides and the feedback,
420
00:30:30.250 -->
00:30:31.270of both sides.
421
00:30:31.650 -->
00:30:32.425So it's
422
00:30:32.905 -->
00:30:33.805been a good
423
00:30:34.185 -->
00:30:37.4052 or 3 years on the Irvine side in terms of tooling. Still
424
00:30:38.665 -->
00:30:40.445a way to go but
425
00:30:42.460 -->
00:30:45.120quite nice compared to 3 or 4 years ago.
426
00:30:46.539 -->
00:30:52.595And what makes difference with FNA between Elixir? Elixir has mix and hex and
427
00:30:53.855 -->
00:30:55.795some other tool that I may be
428
00:30:56.175 -->
00:30:56.675forgetting.
429
00:30:57.149 -->
00:30:59.250The idea of FNA is to
430
00:30:59.789 -->
00:31:03.409not have, its own tools, but to use,
431
00:31:03.789 -->
00:31:06.785all the tools available on the Erlang side. So
432
00:31:07.645 -->
00:31:08.625if any works
433
00:31:09.565 -->
00:31:12.785out of the box with rebar 3 and with Erlang MK,
434
00:31:13.460 -->
00:31:16.040you just have to add the a 1 plug in under configuration
435
00:31:16.420 -->
00:31:17.400that comes already
436
00:31:18.500 -->
00:31:21.320configured on the templates for the projects I have.
437
00:31:21.655 -->
00:31:25.595And you are already running. You can mix airline code with
438
00:31:26.295 -->
00:31:30.315f n a code with LFE code and it will work.
439
00:31:31.370 -->
00:31:35.230So the idea is to also to not have a standard library.
440
00:31:37.050 -->
00:31:37.550Usually,
441
00:31:38.575 -->
00:31:39.075elixaries
442
00:31:40.815 -->
00:31:41.315has
443
00:31:41.935 -->
00:31:42.435some
444
00:31:42.895 -->
00:31:47.955ideas of their own. It's the language that is the most different from the languages on the Erlang VM.
445
00:31:48.640 -->
00:31:53.780So it's usual that some people, even when you can use, Erlang libraries directly from
446
00:31:54.320 -->
00:31:56.900Elixir, it's usual for people to wrap
447
00:31:57.995 -->
00:32:03.055Erlang libraries to make them more Elixir like. It's what also happens in
448
00:32:03.435 -->
00:32:03.935Clojure.
449
00:32:04.440 -->
00:32:06.940You can use Java libraries directly but you
450
00:32:07.240 -->
00:32:15.475can't find wrappers for almost all the libraries. So, they have like a closure feel. Elixirs tend to wrap to thin wrappers around urban libraries to
451
00:32:15.775 -->
00:32:20.890have a more Elixir field. The idea of f n is that we don't have a standard library.
452
00:32:21.270 -->
00:32:26.490Elixir has 1, not that big but has 1. And we don't have f n libraries.
453
00:32:27.095 -->
00:32:31.915Libraries that are created with f n a can either be used directly from Erlang
454
00:32:32.775 -->
00:32:41.100or even compiled to Erlang. If you want to write in FNA, but the build or the source code in GitHub and your packet manager be directly
455
00:32:41.400 -->
00:32:42.539Erlang, it will be.
456
00:32:42.840 -->
00:32:44.059We are not trying to,
457
00:32:45.034 -->
00:32:46.414like, create an ecosystem
458
00:32:47.274 -->
00:32:50.815of tools and libraries inside inside of the Erlang ecosystem.
459
00:32:51.649 -->
00:32:54.389We reuse everything that's available and try
460
00:32:54.690 -->
00:32:55.190to
461
00:32:56.529 -->
00:32:58.870we we are more in that sense, we are more like,
462
00:32:59.570 -->
00:33:00.870CoffeeScript to JavaScript,
463
00:33:02.485 -->
00:33:05.305and Elixir will be, like, closer to Java.
464
00:33:05.845 -->
00:33:06.345They
465
00:33:06.805 -->
00:33:08.985they are further ahead because,
466
00:33:09.605 -->
00:33:13.840Elixir also has concepts of their own that they take from the closure
467
00:33:14.779 -->
00:33:20.799side, which are protocols, where you can implement a protocol for data type and it will work across
468
00:33:21.105 -->
00:33:21.845all the
469
00:33:22.145 -->
00:33:23.845data types that implement that protocol,
470
00:33:24.304 -->
00:33:27.605which is really cool but requires you to do some extra
471
00:33:28.065 -->
00:33:35.610compiling magic in the middle like Scala and closure have to do. But if any, it's just straight compiling. You can
472
00:33:36.390 -->
00:33:40.295each line of f n a is 1 line of Erlang and there's no overhead. There's
473
00:33:41.175 -->
00:33:43.515no intermediate generation of code
474
00:33:43.815 -->
00:33:47.035behind the scenes that does something extra. It's just straight
475
00:33:49.130 -->
00:33:49.630Erlang.
476
00:33:50.170 -->
00:33:51.309You can even compile
477
00:33:51.610 -->
00:33:53.870FNA code instead of FICO to Erlang.
478
00:33:54.170 -->
00:33:56.750So it in that case, it's more like a coffee script.
479
00:33:57.985 -->
00:34:04.005 That's interesting. I didn't realize that you could, so easily transpile if any to the Erlang syntax.
480
00:34:04.630 -->
00:34:14.010And, it's also an interesting standpoint to like you said not have a standard library and not try to build up a community specifically of FNA users just to
481
00:34:14.375 -->
00:34:28.869basically provide a bridge to people who wanna come into the Erlang ecosystem to make that initial step a little friendlier and then maybe either continue using FNA and stay there or just move further and just use Erlang directly. So
482
00:34:29.555 -->
00:34:31.795 Exactly. As I said at some point,
483
00:34:32.355 -->
00:34:38.694I don't care if, FNA is a gateway drug in some sense where you start with FNA and then realize that,
484
00:34:39.039 -->
00:34:41.140yeah, now I understand Erlang because,
485
00:34:41.599 -->
00:34:45.059it's 1 to 1. Now only I have to learn the syntax,
486
00:34:45.359 -->
00:34:46.259and I can
487
00:34:46.720 -->
00:34:47.220stop
488
00:34:47.905 -->
00:34:52.725using this plug in, and I can use straight Erlang. I I really don't care. It's
489
00:34:53.585 -->
00:34:54.085my
490
00:34:54.785 -->
00:34:59.550way of helping the community get bigger and more more diverse
491
00:35:00.810 -->
00:35:04.110by trying to bring these people from Python and JavaScript
492
00:35:04.410 -->
00:35:04.910that
493
00:35:05.465 -->
00:35:06.125are afraid,
494
00:35:09.465 -->
00:35:10.925maybe, when they see airline.
495
00:35:11.625 -->
00:35:14.490So that's that's the whole idea. And try not
496
00:35:14.790 -->
00:35:16.330to duplicate work because
497
00:35:18.230 -->
00:35:19.530I'm not trying to,
498
00:35:20.605 -->
00:35:30.530in that in that sense, I'm not trying to create a 3rd community, like the the Erlang guys, the Elixir guys, and the FEN guys. I'm not trying to do that. I think the Elixir people are
499
00:35:30.990 -->
00:35:32.050doing a great job
500
00:35:32.590 -->
00:35:37.570at creating a language that has its own ideas and its own its own community. And
501
00:35:37.995 -->
00:35:43.295so, I'm not trying to create a 3rd group. I'm just on the airline side of things.
502
00:35:44.795 -->
00:35:55.260 And, in a couple points, you've alluded to some of the benefits that the Beam provides that are hard to replicate in languages like Python. So, I'm curious if you can
503
00:35:55.585 -->
00:36:05.125give a bit more detail about what some of those benefits are and why somebody why why a Python developer might want to consider using FNA or Elixir to take advantage of them.
504
00:36:06.910 -->
00:36:07.410 Yeah.
505
00:36:09.150 -->
00:36:11.410The reason I came for is,
506
00:36:11.950 -->
00:36:16.205as everyone may think, and that was actually the case concurrency.
507
00:36:17.705 -->
00:36:18.205But
508
00:36:18.505 -->
00:36:20.285when you get in for the concurrency,
509
00:36:20.665 -->
00:36:22.670you stay for the fault tolerance.
510
00:36:23.290 -->
00:36:27.390So there's some people that say I came for the concurrency and stayed for the fault tolerance
511
00:36:27.930 -->
00:36:30.345because that's the most interesting
512
00:36:30.805 -->
00:36:31.305part.
513
00:36:31.685 -->
00:36:34.345Of course, the scalability and the concurrency is great,
514
00:36:35.205 -->
00:36:37.625but default tolerance is the thing
515
00:36:39.109 -->
00:36:40.250other than immutability,
516
00:36:41.190 -->
00:36:43.109the thing that makes change
517
00:36:43.510 -->
00:36:47.775that Erlang change your way of seeing the programming world.
518
00:36:49.035 -->
00:36:55.295The concept of actors and supervisors and message passing and supervisor trees and
519
00:36:57.280 -->
00:36:57.780crash
520
00:36:58.800 -->
00:37:00.260early and often and
521
00:37:01.840 -->
00:37:07.525a supervisor will pick up the crash and will restart and you have this supervisor, and
522
00:37:08.305 -->
00:37:09.444the restart policies,
523
00:37:10.305 -->
00:37:15.365and everything, like, starts crashing because there's some problem. And, then it, the supervisors
524
00:37:15.920 -->
00:37:19.140restart everything from unknown state and you get everything back.
525
00:37:19.680 -->
00:37:22.660Because there there's even a paper that says, like, 99 of
526
00:37:22.960 -->
00:37:37.349the server bugs are transient. Like, if you retry it enough times, they they go away. And if they don't go away, then you should keep crashing until you reach the top supervisor and if it keeps crashing then you crash the VM because there's nothing to do.
527
00:37:37.650 -->
00:37:38.950But all this idea
528
00:37:39.250 -->
00:37:40.790and not only the idea
529
00:37:41.165 -->
00:37:42.925as a pattern, like, you
530
00:37:44.285 -->
00:37:47.744maybe you could create this in other in other languages,
531
00:37:48.285 -->
00:37:51.410but the VM is created for that.
532
00:37:51.870 -->
00:37:52.370So,
533
00:37:53.230 -->
00:37:53.730immutability
534
00:37:54.990 -->
00:37:56.210helps because
535
00:37:58.045 -->
00:38:04.2251 actor cannot change something in another actor like this spooky action as a dis at a distance that you have on
536
00:38:05.550 -->
00:38:08.690on mutable languages, which are, like, almost all of them.
537
00:38:09.390 -->
00:38:19.720And also message passing, actors, you cannot inspect what's inside an actor and you can only modify it by sending messages and you can only send messages if you have the process ID. And
538
00:38:20.140 -->
00:38:20.640and
539
00:38:21.060 -->
00:38:21.560also,
540
00:38:23.060 -->
00:38:23.800each process,
541
00:38:25.460 -->
00:38:26.280since it's
542
00:38:26.580 -->
00:38:28.680receiving messages from a message box,
543
00:38:29.755 -->
00:38:38.255inside the process, it's acting serially. So it takes a message, handles it, then takes the next message and handles it. So inside the process, you are not thinking about concurrency,
544
00:38:38.580 -->
00:38:44.920But when you start to assemble all these process hierarchies and networks of processes sending messages to processes,
545
00:38:45.220 -->
00:38:48.355you get the concurrency for free because the the VM does
546
00:38:49.135 -->
00:38:56.195preemptive scheduling of processes for you, and you have, like, lightweight threads. So lightweight processes, actually. So you don't have to think
547
00:38:56.940 -->
00:39:03.920about how many are these too many processes I'm spawning. You don't care because you can spawn millions of processes without problem,
548
00:39:04.725 -->
00:39:05.625which there's,
549
00:39:06.165 -->
00:39:08.105I think the creator of Erlang
550
00:39:08.485 -->
00:39:16.530said. When he was created, Erlang said, imagine that your programming Python and I, and I say to you, you can only have a a 1, 000 objects.
551
00:39:17.390 -->
00:39:19.410Like, how your way of designing
552
00:39:20.030 -->
00:39:35.339the program will change if you could only create a 1, 000 objects. It's the same with all the programming languages in terms terms of concurrency. You can only create, I don't know, some thousands of threads we have before you start having problems. In our line, you can create millions and you don't have
553
00:39:36.040 -->
00:39:42.380these problems. And also the VM since it does the preemptive scheduling, 1 process cannot affect the
554
00:39:42.935 -->
00:39:45.595other process because if it takes too long to execute
555
00:39:45.895 -->
00:39:47.755some message handling, it will be,
556
00:39:48.695 -->
00:39:50.235sent to the back of the queue.
557
00:39:51.170 -->
00:39:57.030So that's nice also. And the fact that the GC on on Erlang is per process.
558
00:39:57.330 -->
00:39:59.510So each process has a really small
559
00:39:59.970 -->
00:40:00.470heap
560
00:40:00.994 -->
00:40:09.655and it grows as needed. And each process does garbage collection on its own heap. So you don't have a global unique huge heap,
561
00:40:10.310 -->
00:40:14.090that will do stop the world to garbage collect gigabytes of data.
562
00:40:14.470 -->
00:40:16.170So that's cool also.
563
00:40:16.710 -->
00:40:25.645So these all these ideas are the ones that you don't when someone says Erlang, they say, yeah, like concurrency and scalability because of the concurrency.
564
00:40:26.280 -->
00:40:27.420But all of these
565
00:40:27.800 -->
00:40:31.099details, also 1 that is really interesting is
566
00:40:32.040 -->
00:40:33.099the degree of
567
00:40:33.755 -->
00:40:36.815introspection. Run time introspection, you can do on
568
00:40:37.115 -->
00:40:41.295on an running system. You can connect via shell to a running system,
569
00:40:41.700 -->
00:40:45.160even via SSH if you want. There there's a blog post over there.
570
00:40:45.460 -->
00:40:54.265And start, like, inspecting and see the live process tree, and you can even stop processes and inspect what they have inside and all this stuff,
571
00:40:54.725 -->
00:40:58.265which is really useful when you're running a a really complex system.
572
00:40:58.880 -->
00:40:59.380And
573
00:41:00.000 -->
00:41:01.059finally, 2,
574
00:41:01.599 -->
00:41:03.440since you're doing all these message passings
575
00:41:03.760 -->
00:41:06.500passing and you only have a process ID,
576
00:41:07.279 -->
00:41:16.305to send a message, It doesn't matter if the process is on this computer, on this core, on another core, or another another computer on the data center. So the the scalability
577
00:41:17.130 -->
00:41:21.790from 1 core to 5th 16 cores and from 1 server to
578
00:41:22.970 -->
00:41:23.87015 servers,
579
00:41:25.341 -->
00:41:25.895is, like,
580
00:41:26.275 -->
00:41:27.974use use the same instructions.
581
00:41:28.994 -->
00:41:32.100And 1 I didn't mention that many people,
582
00:41:32.580 -->
00:41:35.240think it will be more interesting,
583
00:41:36.100 -->
00:41:38.120and I I thought so, but
584
00:41:38.580 -->
00:41:41.964I I still didn't make so much use of it. It's a hot call reloading.
585
00:41:43.224 -->
00:41:44.765Since you have all this
586
00:41:45.145 -->
00:41:45.645immutable
587
00:41:46.505 -->
00:41:48.444thing and no global
588
00:41:48.825 -->
00:41:52.150heap, You compile a new version of a module. You
589
00:41:52.690 -->
00:41:53.990you reload it, and
590
00:41:54.450 -->
00:41:57.430the code with the will reload, of course, with the procedure.
591
00:41:58.355 -->
00:42:00.934It's really useful if you want to have a high availability,
592
00:42:01.795 -->
00:42:03.655but if you can, like,
593
00:42:04.355 -->
00:42:08.780you have to do some steps to achieve this. You have to write code to handle the migration
594
00:42:09.320 -->
00:42:11.580from 1 version to a next version
595
00:42:11.960 -->
00:42:16.325and the migration back from and the next version to the version before in case
596
00:42:16.625 -->
00:42:17.125the
597
00:42:17.505 -->
00:42:18.644upgrade fails. So
598
00:42:19.664 -->
00:42:20.884it's there, but
599
00:42:21.184 -->
00:42:26.770people normally only use it when when it's really needed, when you are running stuff like WhatsApp or
600
00:42:27.550 -->
00:42:32.130or React or stuff like that. It's not something you you say, okay. I will start a,
601
00:42:32.704 -->
00:42:33.204like,
602
00:42:33.505 -->
00:42:34.244a a blog
603
00:42:34.545 -->
00:42:40.244with the back end in Erlang. I will do hot call reloading because you can restart. It's easier to restart at the beginning.
604
00:42:41.950 -->
00:42:42.450 Yeah.
605
00:42:42.829 -->
00:42:47.410Speaking to your point about fault tolerance, I can't remember exactly the company. I think it might have been,
606
00:42:47.710 -->
00:42:52.455I wanna say Sony's Ericsson, but there is some, yeah, there is some company who
607
00:42:53.155 -->
00:42:56.855using Erlang was able to achieve 9 nines of uptime
608
00:42:57.155 -->
00:42:59.494because of the Erlang VM and its reliability.
609
00:43:00.790 -->
00:43:02.810 Yeah. It's Ericsson in the
610
00:43:03.270 -->
00:43:04.090they created
611
00:43:04.950 -->
00:43:06.330a telephone switch,
612
00:43:07.270 -->
00:43:09.450a hardware switch using Erlang.
613
00:43:09.985 -->
00:43:11.925And there every second,
614
00:43:12.465 -->
00:43:13.505you are not,
615
00:43:13.985 -->
00:43:17.285handling calls, you get a fine because it's regulated.
616
00:43:17.900 -->
00:43:20.080So, yeah, they achieved on on that switch,
617
00:43:20.460 -->
00:43:21.6809 nines of availability.
618
00:43:22.380 -->
00:43:22.880And,
619
00:43:24.540 -->
00:43:26.800also, Erlang, that that's maybe the
620
00:43:27.165 -->
00:43:30.865point where it shines. It's used in these high availability,
621
00:43:32.205 -->
00:43:33.025high scalability
622
00:43:33.325 -->
00:43:33.825services.
623
00:43:34.270 -->
00:43:36.130That's why you can see like databases
624
00:43:36.430 -->
00:43:40.609and message queues and like MQTT brokers and
625
00:43:40.910 -->
00:43:41.565all these
626
00:43:41.964 -->
00:43:42.464backbones.
627
00:43:43.405 -->
00:43:44.224Also, Amazon,
628
00:43:45.484 -->
00:43:47.265s 3 is done with Erlang.
629
00:43:48.365 -->
00:43:49.585All these, like,
630
00:43:49.885 -->
00:43:50.944backbone services
631
00:43:52.150 -->
00:43:54.490that you would expect are highly available
632
00:43:55.510 -->
00:44:00.410to be written in Ireland because of of these, these concepts. And the way of
633
00:44:00.994 -->
00:44:04.775approaching and solving a problem that, allow you to have these properties.
634
00:44:06.275 -->
00:44:17.210 Yeah. It's definitely a very interesting ecosystem and 1 that I continue to want to find a reason to program in, but I have not have not yet found the time and the motivation to do so.
635
00:44:18.375 -->
00:44:25.095So I understand that you are also experimenting with another language implementation that runs on the beam. I'm wondering if you can,
636
00:44:25.494 -->
00:44:31.740give a brief description of what that is and how it compares to FNA and what inspired you to start that project.
637
00:44:33.400 -->
00:44:33.900Sure.
638
00:44:34.440 -->
00:44:35.580 So as I said,
639
00:44:35.925 -->
00:44:38.425FNA is a conservative language.
640
00:44:39.605 -->
00:44:41.145It tries to be simple.
641
00:44:44.470 -->
00:44:49.850Not I don't want to invent anything new with the language, with the tools, with anything, with the syntax.
642
00:44:50.310 -->
00:45:01.395It tries to be really conservative. But as I was developing FNA, I had all these crazy ideas, and I had, like, a backlog in my mind of all these crazy ideas I wanted to try in a language.
643
00:45:02.180 -->
00:45:03.720And, at some point, I say, okay,
644
00:45:04.180 -->
00:45:07.240what if I bring all these crazy ideas into a language?
645
00:45:08.180 -->
00:45:10.520Of course, that won't be a fan because it will
646
00:45:11.185 -->
00:45:12.565turn into a crazy language.
647
00:45:13.265 -->
00:45:15.525So 1 day, I had a really long,
648
00:45:16.065 -->
00:45:16.885wait times,
649
00:45:17.425 -->
00:45:18.245on airports.
650
00:45:18.660 -->
00:45:21.560Like, I had, I don't know, half a day
651
00:45:21.940 -->
00:45:23.400coming back to Germany.
652
00:45:25.460 -->
00:45:26.680So I said, okay.
653
00:45:27.045 -->
00:45:33.385Let's try these ideas and see if they all together fit into 1 language that makes some sense.
654
00:45:33.980 -->
00:45:35.680And that began became
655
00:45:36.380 -->
00:45:36.880Interfix.
656
00:45:37.900 -->
00:45:40.160It's an experimental programming language.
657
00:45:40.620 -->
00:45:43.505Experimental in the sense that I try some things that,
658
00:45:43.905 -->
00:45:48.244may not be good ideas, but I wanted to try them in, in 1 language.
659
00:45:49.480 -->
00:45:52.700It's experimental in that sense, but in the sense of,
660
00:45:53.080 -->
00:45:58.445if it works, yeah, it compiles and it it may be a little bit behind
661
00:45:58.825 -->
00:46:00.765FNA in terms of, stability.
662
00:46:01.305 -->
00:46:06.045But, I've tried it, and I've written some code. And there's people that have written code in interface.
663
00:46:06.640 -->
00:46:07.140And,
664
00:46:07.920 -->
00:46:08.820yeah, it works.
665
00:46:10.400 -->
00:46:10.900I
666
00:46:11.600 -->
00:46:13.095I keep Interfix as
667
00:46:13.974 -->
00:46:17.994a place or a project for people that want to experiment with
668
00:46:18.775 -->
00:46:20.215alternative ways of,
669
00:46:20.535 -->
00:46:21.515writing programs,
670
00:46:23.070 -->
00:46:25.650but always in the syntax part.
671
00:46:26.030 -->
00:46:29.250It compiles it compiles also straight to Erlang,
672
00:46:30.675 -->
00:46:32.055bytecode and can
673
00:46:32.675 -->
00:46:38.694cross compile or transpile to Erlang source code. So you can see what what the meaning of the thing is. And,
674
00:46:40.180 -->
00:46:41.940yeah, there's no, it's,
675
00:46:42.340 -->
00:46:43.640there's no overhead.
676
00:46:44.180 -->
00:46:46.200Like, each feature of the languages
677
00:46:47.415 -->
00:46:50.455compiles directly to a feature of the Erlang language. It's,
678
00:46:50.855 -->
00:46:54.395let's say, it's a crazy syntax that compiles to Erlang Bickel.
679
00:46:56.040 -->
00:46:58.359But I, like, I really like,
680
00:46:58.839 -->
00:47:00.920what I really like about the language is that,
681
00:47:01.480 -->
00:47:05.365when you read some examples, it looks like it can't compile to something.
682
00:47:05.984 -->
00:47:07.045That can't be
683
00:47:07.425 -->
00:47:09.685because my my idea was to
684
00:47:10.385 -->
00:47:10.885use
685
00:47:11.425 -->
00:47:11.925as
686
00:47:12.410 -->
00:47:15.310the least amount of punctuation as possible without
687
00:47:15.850 -->
00:47:18.750resorting to the list list trick of using parentheses.
688
00:47:19.345 -->
00:47:19.845So
689
00:47:20.224 -->
00:47:22.404it's like a Lisp without the parenthesis.
690
00:47:23.105 -->
00:47:23.605And,
691
00:47:24.305 -->
00:47:26.244the language is quite interesting.
692
00:47:27.120 -->
00:47:29.300I suggest you to check the examples
693
00:47:29.760 -->
00:47:31.860on the readme and the examples
694
00:47:32.640 -->
00:47:34.030folder to see
695
00:47:35.475 -->
00:47:36.935what it looks like. And,
696
00:47:37.475 -->
00:47:40.295I can assure you that all the examples compile to something.
697
00:47:40.755 -->
00:47:41.335Of course,
698
00:47:41.955 -->
00:47:49.000some source codes, the the the thing that the program is actually doing are not useful, but, everything compiles to to
699
00:47:50.099 -->
00:47:52.279to actual code that can run.
700
00:47:54.585 -->
00:47:55.085 And,
701
00:47:55.625 -->
00:48:06.040just bringing it back around a bit. So there are definitely plenty of benefits to using the Erlang VM VM and the Erlang ecosystem. I'm wondering if there are any cases that you can think of where
702
00:48:06.580 -->
00:48:11.075the where you would not wanna use Erlang or an Erlang language and would
703
00:48:11.635 -->
00:48:14.935rather use Python because it's either easier or more effective.
704
00:48:17.234 -->
00:48:19.494 Yeah. There are. If you are doing,
705
00:48:22.100 -->
00:48:25.080like, something where Python shines where which is
706
00:48:25.540 -->
00:48:26.520scientific computing,
707
00:48:26.900 -->
00:48:28.200numeric stuff,
708
00:48:28.580 -->
00:48:29.960don't use Erlang because
709
00:48:30.445 -->
00:48:30.945in
710
00:48:32.045 -->
00:48:35.425the math part, it's slow, so it doesn't make sense. And, also,
711
00:48:35.805 -->
00:48:41.259there are some algorithms that are much more efficient if you use, mutation.
712
00:48:41.559 -->
00:48:50.275The you you create an array and sort it in place, replacing the the values that are in the array. If you are using a mutable algorithm, you will be creating
713
00:48:51.055 -->
00:48:51.5551
714
00:48:52.494 -->
00:48:53.395new object
715
00:48:54.015 -->
00:48:56.550per change. Of course, if you use something like,
716
00:48:57.510 -->
00:49:03.775structural sharing, you are not creating that much new memory, but it's slower, much slower. So in the part of,
717
00:49:04.655 -->
00:49:05.155numerics
718
00:49:05.535 -->
00:49:11.875and, like, scientific computing and calculations and machine learning and all that stuff, don't use it.
719
00:49:13.329 -->
00:49:14.790And, also, for scripting,
720
00:49:15.410 -->
00:49:17.349even if you could, there's no reason,
721
00:49:17.810 -->
00:49:25.815I think, because Python and I think if I have to write a script, I would write it in Python. I use Python for
722
00:49:26.915 -->
00:49:27.815Glue, basically.
723
00:49:28.595 -->
00:49:31.015Or if I have to do something quick,
724
00:49:31.470 -->
00:49:32.370I use Python.
725
00:49:33.870 -->
00:49:35.330Erlang is more if you want
726
00:49:35.710 -->
00:49:42.035to take advantage of the of the Erlang as you said and play to the strengths of the of the platform. Platform.
727
00:49:43.055 -->
00:49:50.675Maybe there there are people doing, like, Erlang back ends and then putting Ruby on Rails on front or Python on front with Django
728
00:49:51.200 -->
00:49:51.940to do
729
00:49:52.320 -->
00:49:55.220the the front end of the back end in some sense,
730
00:49:55.920 -->
00:49:57.380on that language those languages.
731
00:49:58.320 -->
00:50:01.625Even if you can do it in our language, you could if you wanted. But
732
00:50:02.325 -->
00:50:05.065as I said, for scripting, for numerical stuff,
733
00:50:05.605 -->
00:50:09.065I think you shouldn't use. And if you want to create a desktop application,
734
00:50:10.440 -->
00:50:12.060it I wouldn't use Erlang either.
735
00:50:12.760 -->
00:50:15.020Of course, for websites and for web services,
736
00:50:15.400 -->
00:50:17.020it's great. And for
737
00:50:17.595 -->
00:50:18.255I say, backbone.
738
00:50:18.714 -->
00:50:20.174I don't know about, like, databases
739
00:50:20.635 -->
00:50:22.654and message queues and all that is great.
740
00:50:23.035 -->
00:50:25.934But for desktop applications, for scripts, for,
741
00:50:26.960 -->
00:50:30.260and for numerical stuff, I wouldn't recommend it.
742
00:50:32.160 -->
00:50:32.660 So,
743
00:50:33.200 -->
00:50:38.955are there any questions that I didn't ask that you think I should have or anything else that you'd like to bring up before we move on?
744
00:50:40.935 -->
00:50:42.555 I cannot think of 1.
745
00:50:43.335 -->
00:50:44.380Oh, that's it.
746
00:50:44.859 -->
00:50:57.525 So for anybody who wants to get in touch with you or follow what you're up to, what would be the best way for them to do that? Or anybody if they're asking for advice on, how to get involved with FNA and the Erlang ecosystem?
747
00:51:00.520 -->
00:51:01.160 You can
748
00:51:02.440 -->
00:51:06.915I guess you will write this on the notes because I won't spell it? I'm warrenoguera
749
00:51:07.215 -->
00:51:08.435on Twitter. I'm
750
00:51:08.815 -->
00:51:09.315marionoguera
751
00:51:10.495 -->
00:51:11.155in GitHub,
752
00:51:12.095 -->
00:51:12.595marionoguera.org
753
00:51:13.375 -->
00:51:14.275is my blog.
754
00:51:15.299 -->
00:51:20.520Those will be the, like, the 3 entry points. And for if you're interested particularly on fna,
755
00:51:21.460 -->
00:51:22.599go to fna.org
756
00:51:23.605 -->
00:51:26.185and first contact me directly and,
757
00:51:26.645 -->
00:51:28.265so I can help you because,
758
00:51:30.005 -->
00:51:31.625I've been working on the language,
759
00:51:31.925 -->
00:51:47.745for the last year and a half half to, have a 1 beta. Like, the first release will be 1 0 beta because the language is almost finished or finished, actually. But, of course, I I don't I don't want to come out with a 1.0 because there may be problems.
760
00:51:49.300 -->
00:52:02.285The only reason I don't do the release is because I want to improve the documentation, and I want to do the release when I I have free time to support the people that come. But if you want to be an early adopter and help me, like, polish the product,
761
00:52:02.985 -->
00:52:06.860before the release, just contact me on those channels and
762
00:52:07.240 -->
00:52:12.620I will gladly help you to get started with the FNA and with any question you may have.
763
00:52:14.775 -->
00:52:18.315 Excellent. So with that, we will move on into the picks.
764
00:52:18.615 -->
00:52:22.075And for my picks today, my first 1 is
765
00:52:22.970 -->
00:52:29.950a project that I came across recently because I just started a new job and got a new computer for it and
766
00:52:30.415 -->
00:52:30.915needed
767
00:52:31.295 -->
00:52:41.970to set up my dot files all over again and decided to to take the opportunity to see if there's a better way that I could go about it than what I was currently using. And so I found a project called dotfiles,
768
00:52:42.750 -->
00:52:43.730spelled d0tphiles.
769
00:52:45.950 -->
00:52:47.970And it's just a collection of
770
00:52:48.915 -->
00:52:54.375dot files for various things such as zsh and bash and your Python RC and,
771
00:52:54.835 -->
00:52:57.460git config and all of that kind of stuff.
772
00:52:57.840 -->
00:53:07.805And it's a really good starting point. A lot of good utility in there. And so I've forked that and made it my own a bit and have been enjoying using that so far.
773
00:53:08.585 -->
00:53:18.470And my next pick today is a conference talk video that I watched a little while ago called the unreasonable effectiveness of dynamic typing for practical programs.
774
00:53:19.330 -->
00:53:20.230And it's
775
00:53:21.535 -->
00:53:22.755a discussion of
776
00:53:23.295 -->
00:53:25.155the static versus dynamic
777
00:53:25.455 -->
00:53:30.980typing argument that's been going on for ages and has a lot of really cogent points
778
00:53:31.520 -->
00:53:32.420about how
779
00:53:33.200 -->
00:53:44.835static typing is good for solving certain sets of problems, but in the whole dynamic dynamic typing is at least equally as good at a number of those same problems, particularly in terms of
780
00:53:45.455 -->
00:53:50.240the accuracy and reliability of code as long as you're practicing proper unit testing,
781
00:53:50.780 -->
00:53:51.280techniques
782
00:53:52.220 -->
00:53:53.760and not relying
783
00:53:54.220 -->
00:53:57.015solely on manual testing. So
784
00:53:57.974 -->
00:54:09.040the the gains that you get from static typing don't necessarily outweigh the gains you get from dynamic typing and in some cases can also be detrimental because of the upfront cognitive load necessary for having to decide
785
00:54:09.500 -->
00:54:14.800all of your types ahead of time and how all of that is going to play out throughout your entire application.
786
00:54:15.575 -->
00:54:21.115So definitely recommend giving that a look, particularly for people who are firmly in the Python camp.
787
00:54:21.494 -->
00:54:24.810And with that, I will pass it to you, Mariano. What have you got for PIX today?
788
00:54:26.330 -->
00:54:26.650 Some
789
00:54:28.010 -->
00:54:29.230in terms of software,
790
00:54:29.850 -->
00:54:31.7101 thing I've been
791
00:54:32.605 -->
00:54:33.505creating lately,
792
00:54:34.845 -->
00:54:36.545small to medium sized application
793
00:54:37.405 -->
00:54:37.905using,
794
00:54:38.925 -->
00:54:41.025I don't know if it's a framework, but
795
00:54:42.140 -->
00:54:44.319a library from from ClosureScript,
796
00:54:45.099 -->
00:54:45.839the closure
797
00:54:46.780 -->
00:54:49.200dialect that compiles to JavaScript called omnext.
798
00:54:49.985 -->
00:54:50.885It's on
799
00:54:51.825 -->
00:54:58.485alpha currently, so you may get burned, but it's quite stable. I've been using it and the product
800
00:54:59.390 -->
00:54:59.890works,
801
00:55:00.190 -->
00:55:09.835and I hadn't had any surprises with it. I recommend you to check, David Nolan's talks about Next and the reasons behind the the the project
802
00:55:10.295 -->
00:55:15.995because also the it's a really novel approach to creating UIs
803
00:55:17.369 -->
00:55:18.349on your browser.
804
00:55:18.809 -->
00:55:19.309It
805
00:55:20.329 -->
00:55:23.630I I don't know if I will be able to go back to JavaScript
806
00:55:24.055 -->
00:55:30.315after creating a UI with Next because it makes so many things that in JavaScript are a pain
807
00:55:30.694 -->
00:55:31.515so simple
808
00:55:32.460 -->
00:55:32.960that,
809
00:55:34.460 -->
00:55:35.760yeah, I it's
810
00:55:36.060 -->
00:55:38.880addictive in some sense. Of course, there there may be,
811
00:55:40.220 -->
00:55:40.720applications
812
00:55:41.805 -->
00:55:47.825where you need a, like, extreme performance where you cannot use it, but for simple applications, for experiments, for
813
00:55:48.285 -->
00:55:53.810applications that don't require extreme performance on the front end side, I think on next, it's really, really interesting.
814
00:55:55.790 -->
00:55:56.290And
815
00:55:56.590 -->
00:56:00.214as a result, I recommend you to check closure script if
816
00:56:01.155 -->
00:56:04.454you don't like JavaScript and are looking for something else
817
00:56:05.155 -->
00:56:06.775to create your front ends
818
00:56:07.340 -->
00:56:10.960because, sadly, Python doesn't have a good story on compile to
819
00:56:12.380 -->
00:56:20.075JavaScript. There there are many projects trying to, but I don't think there's 1, like, production ready, like, ClosureScript is. And
820
00:56:22.030 -->
00:56:24.130also something I'm checking, it's
821
00:56:24.990 -->
00:56:25.490also
822
00:56:25.950 -->
00:56:27.089quite new.
823
00:56:28.030 -->
00:56:30.770It's, a project called The Things Network.
824
00:56:31.645 -->
00:56:33.745It's a project that started in the Netherlands.
825
00:56:34.525 -->
00:56:40.465The some people found, a new protocol and some devices. The protocol is called LoRaWAN
826
00:56:41.150 -->
00:56:41.970that allows
827
00:56:42.430 -->
00:56:47.810really low energy devices to that can can live with the battery for, like, years
828
00:56:48.110 -->
00:56:50.210to send really small amounts of data,
829
00:56:50.795 -->
00:56:52.095but for long distances.
830
00:56:53.194 -->
00:56:55.535So they they did an experiment in Amsterdam,
831
00:56:55.915 -->
00:57:00.390and it's I think it worked, And they created a Kickstarter campaign to
832
00:57:01.410 -->
00:57:03.350to create a really cheap,
833
00:57:04.130 -->
00:57:10.494what they call a gateway. That is, a device like a Wi Fi router that you connect to in your home
834
00:57:11.115 -->
00:57:12.174and can cover
835
00:57:12.795 -->
00:57:13.295theoretically
836
00:57:15.000 -->
00:57:15.74010 kilometers,
837
00:57:17.080 -->
00:57:20.140how do you say it, circle area of 10 kilometers.
838
00:57:20.440 -->
00:57:20.940Mhmm.
839
00:57:22.395 -->
00:57:29.775That that means it can receive messages from 10 kilometers around, lines of sight. In a city, it reduces to, like, 3 kilometers, but it's a lot.
840
00:57:30.630 -->
00:57:31.370And some
841
00:57:32.230 -->
00:57:34.090development kits and devices
842
00:57:34.390 -->
00:57:37.130that to make it easy for people to experiment with this technology.
843
00:57:37.705 -->
00:57:39.165And the Kickstarter was
844
00:57:39.465 -->
00:57:41.885successful. They are launching the
845
00:57:42.265 -->
00:57:43.145the this,
846
00:57:43.465 -->
00:57:44.765the things gateway
847
00:57:45.385 -->
00:57:46.605in July, I think,
848
00:57:47.300 -->
00:57:52.760and I find it really interesting. I'm looking into it. Yesterday, I gave a talk about the the protocol.
849
00:57:53.380 -->
00:57:55.800In my blog post, I wrote a
850
00:57:56.185 -->
00:57:57.885short description of the protocol
851
00:57:59.305 -->
00:58:02.605and how it works and what it does and what it doesn't do and
852
00:58:03.040 -->
00:58:06.420stuff like that, I recommend you to check it because I think,
853
00:58:07.359 -->
00:58:10.980I am always thinking on doing something with, like, sensors sending information
854
00:58:11.865 -->
00:58:13.485and then showing it somewhere else.
855
00:58:13.865 -->
00:58:17.645But you if you use Arduino or Raspberry Pi or Beaglebone,
856
00:58:19.280 -->
00:58:24.340you have to have a power source and they all rely on Wi Fi or something like that. So you cannot
857
00:58:25.120 -->
00:58:28.580create 1 of these and put it on a field or
858
00:58:29.465 -->
00:58:33.405on on a tree or on a river because it won't work.
859
00:58:34.025 -->
00:58:36.365And I find this really interesting
860
00:58:37.065 -->
00:58:37.565alternative.
861
00:58:38.210 -->
00:58:39.349Of course, it's the
862
00:58:39.730 -->
00:58:48.704the the protocol is new and the devices are new and the project is new, so I'm not saying everything works. I'm exploring it, and I recommend you to check it also.
863
00:58:50.444 -->
00:58:57.460 Well, again, I definitely appreciate you taking the time out of your day to join me and tell us all more about FNA and
864
00:58:57.840 -->
00:59:00.500why we should consider using it for some of our projects.
865
00:59:00.880 -->
00:59:02.900And, I hope you enjoy the rest of your day.
866
00:59:03.545 -->
00:59:06.045 Thank you. Enjoy your rest of your day too.