1
00:00:00,040 --> 00:00:03,120
Coding Elixir with AI or 
building AI into your Elixir 

2
00:00:03,120 --> 00:00:05,840
apps? 
The Elixir AI Collective Discord

3
00:00:05,840 --> 00:00:08,720
is your community for both. 
Link in the description below. 

4
00:00:09,920 --> 00:00:12,520
Secure your Elixir apps with 
paraxial IO. 

5
00:00:12,680 --> 00:00:15,720
From code analysis and bot 
defense to dependency checks, 

6
00:00:15,720 --> 00:00:19,000
they've got you covered. 
Elixir first design with GitHub 

7
00:00:19,000 --> 00:00:21,400
integration. 
Elevate your security at 

8
00:00:21,400 --> 00:00:31,280
paraxial dot IO testing. 
What's up? 

9
00:00:31,320 --> 00:00:34,120
I'm Jacob Litzow, your Elixir 
mentor and welcome to another 

10
00:00:34,120 --> 00:00:36,520
exciting episode of the Elixir 
Mentor podcast. 

11
00:00:36,520 --> 00:00:38,640
This is where we discuss 
everything related to Elixir, 

12
00:00:38,640 --> 00:00:40,800
from interviews with 
enthusiasts, pioneers in the 

13
00:00:40,800 --> 00:00:44,680
community to innovative projects
and libraries shaping Elixir's 

14
00:00:44,680 --> 00:00:46,920
future. 
Today I'm joined with Leandro, 

15
00:00:46,920 --> 00:00:51,880
creator of MDX and Loomis, and 
he's also a returning guest on 

16
00:00:51,880 --> 00:00:53,920
the podcast. 
So it's exciting to have you 

17
00:00:53,920 --> 00:00:56,600
back. 
Thanks for joining me today. 

18
00:00:56,600 --> 00:01:00,560
And yeah, I always have more fun
when I have returning guests. 

19
00:01:00,560 --> 00:01:03,560
I don't know why I feel like 
it's we already like broke the 

20
00:01:03,560 --> 00:01:07,280
ice. 
Thank you for having me back on 

21
00:01:07,440 --> 00:01:10,480
and excited to be talking about 
MBX and Lumis this time. 

22
00:01:11,160 --> 00:01:14,200
Yeah. 
And I feel like last time what 

23
00:01:14,200 --> 00:01:18,520
we talked about Beacon and I 
feel like what were you were 

24
00:01:18,520 --> 00:01:25,960
working on, like the UI, was it 
not? 

25
00:01:25,960 --> 00:01:28,160
No, what were you working on? 
I'm blanking now. 

26
00:01:29,000 --> 00:01:33,280
It was about a year ago, so 
probably I was working on the 

27
00:01:33,560 --> 00:01:36,800
admin interface for for Beacon. 
That's right. 

28
00:01:36,920 --> 00:01:40,760
OK. 
Yeah, So we were working on the 

29
00:01:41,200 --> 00:01:44,160
like the live editor of 
templates. 

30
00:01:44,920 --> 00:01:47,960
That's right. 
And it and it became a Elixir 

31
00:01:47,960 --> 00:01:55,360
conf talk in 2000, 24 as well. 
So yeah, for a little like quick

32
00:01:55,360 --> 00:01:58,560
refresh for those watching that 
might not know you, do you want 

33
00:01:58,560 --> 00:02:00,200
to give like a just a brief 
background? 

34
00:02:01,240 --> 00:02:03,560
Oh, yeah, sure. 
Yeah, yeah, yeah, sure. 

35
00:02:03,600 --> 00:02:08,600
So, yeah, I've been working with
Elixir for 10 years now. 

36
00:02:09,600 --> 00:02:13,280
You know, I used to work with 
Rios, you know, back in the day.

37
00:02:13,640 --> 00:02:16,560
And I'm from Brazil, same as 
Joseph Vallin. 

38
00:02:16,560 --> 00:02:22,120
So it was kind of natural for me
to get into Elixir, you know, 

39
00:02:22,680 --> 00:02:26,520
those 10 years trying to make my
my contributions to the 

40
00:02:26,520 --> 00:02:30,400
community. 
And some of you might know me 

41
00:02:30,400 --> 00:02:33,920
from Beacon when I was working 
at Dockyard. 

42
00:02:34,760 --> 00:02:38,800
Now I'm working at Nutella 
Spark, it's an ad tech solution 

43
00:02:38,800 --> 00:02:47,280
for US based schools and also 
working on the MDX and Lumis 

44
00:02:47,280 --> 00:02:49,880
projects, Markdown and Syntex 
highlighter. 

45
00:02:50,400 --> 00:02:56,520
It's a you know it's it's a mix 
of Elixir, Rust and someone now 

46
00:02:56,520 --> 00:03:01,880
is working the looms project to 
Java and I'm also working to 

47
00:03:01,880 --> 00:03:05,120
port the looms project to Jean 
Crete as well. 

48
00:03:05,120 --> 00:03:08,520
So there is a lot we can we can 
discuss. 

49
00:03:09,040 --> 00:03:12,520
Yeah, that's really cool. 
I'm curious what what kind of 

50
00:03:12,520 --> 00:03:17,440
what sparked like MDX? 
Like what made you want to make 

51
00:03:17,440 --> 00:03:19,760
a Markdown library? 
And I'm guessing it's written in

52
00:03:19,760 --> 00:03:24,360
Elixir, right? 
Yeah, that was like, you know, 

53
00:03:24,800 --> 00:03:30,080
it start about two and I don't 
maybe three years ago ish. 

54
00:03:30,680 --> 00:03:33,520
So I was working on Beacons Ms. 
right? 

55
00:03:33,640 --> 00:03:39,720
And we had to migrate all the 
blog posts from the old Docker 

56
00:03:39,720 --> 00:03:45,600
website to Beacon. 
And that means migrate about 800

57
00:03:46,000 --> 00:03:49,040
blog posts just, you know, 
markdown. 

58
00:03:49,320 --> 00:03:54,000
And as you can imagine, like 10 
years of history, you know, 

59
00:03:54,000 --> 00:03:57,800
different people writing blog 
posts, markdown files. 

60
00:03:57,800 --> 00:04:02,400
So we had a bunch of different 
markdowns to migrate from the 

61
00:04:02,400 --> 00:04:08,280
old one to Beacon. 
And that's when we realized that

62
00:04:08,920 --> 00:04:14,720
Earmark at that time was not 
generating the output we were 

63
00:04:14,720 --> 00:04:18,920
expecting. 
And so just just to be clear, 

64
00:04:18,959 --> 00:04:21,040
Earmark is a really amazing 
library. 

65
00:04:21,399 --> 00:04:26,040
You know it, it has been serving
the community for so many years 

66
00:04:26,040 --> 00:04:27,640
now. 
So it's a really, really hard 

67
00:04:27,640 --> 00:04:30,480
work to do. 
So if Earmarks works for you, 

68
00:04:30,960 --> 00:04:32,720
you know, keep you using, it's 
amazing. 

69
00:04:33,320 --> 00:04:39,080
But for us back then, we had an 
issue with some blog posts 

70
00:04:39,600 --> 00:04:43,800
because the the problem we've 
marked down is marked down is a 

71
00:04:43,800 --> 00:04:48,800
permissive format. 
Like you can write whatever you 

72
00:04:48,800 --> 00:04:52,960
want, but there's no guarantee 
the the output is what you 

73
00:04:52,960 --> 00:04:56,640
expect, right? 
So let's say for example, you 

74
00:04:56,640 --> 00:05:00,800
can write like a table or a 
lease, but the generate HML 

75
00:05:00,800 --> 00:05:05,600
might not be what you expect. 
And that's the problem I found 

76
00:05:05,880 --> 00:05:09,120
with some specific details with 
earmark. 

77
00:05:09,560 --> 00:05:13,920
And at that time I opened an 
issue for the project. 

78
00:05:13,960 --> 00:05:21,880
I was willing to contribute back
upstream fix earmark, but the so

79
00:05:22,200 --> 00:05:29,840
the maintainer at that time he, 
you know, he just, he just 

80
00:05:29,840 --> 00:05:33,400
realized the the earmark he 
could not change the earmark 

81
00:05:33,400 --> 00:05:35,600
design to make that 
implementation. 

82
00:05:35,600 --> 00:05:37,720
So I was stuck with this 
problem. 

83
00:05:38,440 --> 00:05:44,920
I need earmark solution markdown
solution to migrate all the blog

84
00:05:44,920 --> 00:05:50,400
posts the dockyard, but I was 
not finding a mixer solution 

85
00:05:50,880 --> 00:05:55,240
right. 
So coming back from Elixir Conf 

86
00:05:55,840 --> 00:06:02,000
in Florida, I was, I was stuck 
at the airport because of a 

87
00:06:02,120 --> 00:06:06,680
thunderstorm. 
So there was no, no timeline for

88
00:06:06,680 --> 00:06:09,760
my, my flight. 
And you know, I had nothing to 

89
00:06:09,760 --> 00:06:14,160
do essentially. 
So that's when I, you know, I 

90
00:06:14,160 --> 00:06:18,720
opened the, the rust book. 
I started reading about Rust and

91
00:06:18,720 --> 00:06:22,040
decide to create a new proof of 
proof of concept. 

92
00:06:23,440 --> 00:06:27,520
You know just a wrapper of the 
Conrac library. 

93
00:06:27,720 --> 00:06:30,880
Conrac is Rust is the Rust 
parser that does all the 

94
00:06:30,880 --> 00:06:33,800
markdown parsing and rendering 
for MDX. 

95
00:06:34,680 --> 00:06:38,480
So that's when I start MDX. 
It was pretty much a proof of 

96
00:06:38,480 --> 00:06:42,880
concept just to see like if you 
can use Conrac, a well 

97
00:06:42,880 --> 00:06:47,960
established markdown parser for 
Rust, if you can use that in 

98
00:06:47,960 --> 00:06:50,800
Elixir. 
So I was there at the airport 

99
00:06:50,800 --> 00:06:53,680
just reading the books and, you 
know, writing some code. 

100
00:06:53,680 --> 00:06:56,040
And that's how MDX started 
essentially. 

101
00:06:56,840 --> 00:07:01,640
And yeah, so I use, I use most 
of my free time at that time to 

102
00:07:01,640 --> 00:07:06,640
work on a proof of concept. 
And then eventually when I, you 

103
00:07:06,640 --> 00:07:11,400
know, proved that was working, I
started using MDX on Beacon. 

104
00:07:11,720 --> 00:07:15,360
And that's how Beacon came to 
be, came to life. 

105
00:07:15,960 --> 00:07:20,040
And I'm also grateful for 
Dockyard because I was also 

106
00:07:20,040 --> 00:07:23,800
working on MDX on my work time 
sometimes. 

107
00:07:23,800 --> 00:07:30,320
So that's that was let's say a 
sponsorship of Dockyard on the 

108
00:07:30,320 --> 00:07:33,560
project as well. 
Yeah, that's really awesome. 

109
00:07:34,000 --> 00:07:37,720
So I'm curious, are you just, 
are you basically just using a 

110
00:07:37,720 --> 00:07:42,240
NIF then with with Comrack or 
how's that working? 

111
00:07:43,040 --> 00:07:48,720
Yeah, it starts just like a 
niche, just a rocker essentially

112
00:07:49,160 --> 00:07:54,440
just passing the options from 
Elixir to Korak and, you know, 

113
00:07:54,720 --> 00:07:59,000
return the HML. 
So it starts like this, very, 

114
00:07:59,000 --> 00:08:03,560
very simple at that time. 
Now the project has grown to 

115
00:08:04,200 --> 00:08:09,120
have way more features like plug
insurance and streaming and heat

116
00:08:09,120 --> 00:08:13,440
support and more, more features 
that Correct does not have. 

117
00:08:14,280 --> 00:08:17,720
It's just a Linuxer MBX 
solution. 

118
00:08:19,000 --> 00:08:21,000
OK, cool. 
But but it's still using. 

119
00:08:21,000 --> 00:08:24,640
Correct. 
OK, What's like, what's the most

120
00:08:24,640 --> 00:08:29,440
difficult thing you've ran into 
right now building MBX? 

121
00:08:31,280 --> 00:08:35,960
Probably in terms of 
implementation, I'd say 

122
00:08:35,960 --> 00:08:41,480
streaming, but that's that's the
that's not the only difficult 

123
00:08:41,480 --> 00:08:45,480
when you're working on an open 
source project right there is 

124
00:08:46,480 --> 00:08:51,520
like maybe people don't realize 
how hard it is to work on open 

125
00:08:51,520 --> 00:08:53,760
source project. 
And even though index is not 

126
00:08:53,760 --> 00:08:58,720
super huge library, but you 
know, maintaining a project is 

127
00:08:58,720 --> 00:09:02,400
really hard. 
But in terms of implementation 

128
00:09:02,400 --> 00:09:06,960
now you'd say streaming. 
Streaming is streaming is the 

129
00:09:06,960 --> 00:09:12,960
feature that allows you to heal 
or complete the fragments of 

130
00:09:12,960 --> 00:09:16,520
markdown. 
And that's very useful for AI 

131
00:09:16,960 --> 00:09:19,960
like applications where you have
the tokens. 

132
00:09:20,800 --> 00:09:23,880
So the the AI is feeding some 
tokens to you. 

133
00:09:24,440 --> 00:09:28,400
Those tokens are incomplete 
fragments of markdown and then 

134
00:09:28,400 --> 00:09:32,280
you have to render that, you 
know, those fragments. 

135
00:09:33,040 --> 00:09:37,040
So that's really, really hard to
do because you have many edge 

136
00:09:37,040 --> 00:09:41,560
cases that you have to solve. 
So for example, let's say you 

137
00:09:41,560 --> 00:09:46,840
have like a cold block or a 
table or you know, blocks of 

138
00:09:46,840 --> 00:09:50,640
markdown. 
You have to complete those 

139
00:09:50,640 --> 00:09:55,480
blocks and then you've parse and
you have to parse and render 

140
00:09:55,480 --> 00:09:58,800
those fragments. 
And there are many ways to do 

141
00:09:58,800 --> 00:10:02,200
this. 
Probably the most popular 

142
00:10:02,520 --> 00:10:05,920
popular library now is streamed 
down by Versailles. 

143
00:10:06,680 --> 00:10:12,080
They they have like this kind of
library library for Markdown as 

144
00:10:12,080 --> 00:10:15,080
well. 
And there are some others 

145
00:10:15,280 --> 00:10:19,440
implementing a different way 
creating new parsers for this 

146
00:10:19,440 --> 00:10:24,000
specific use case. 
But for MDX it does not make 

147
00:10:24,000 --> 00:10:27,560
sense to create a new parser 
because we are using call Rack 

148
00:10:27,760 --> 00:10:32,840
and it's it's not an easy task 
to create a new markdown parser.

149
00:10:33,800 --> 00:10:40,000
So the way it works essentially 
is as we get new fragments, we 

150
00:10:40,000 --> 00:10:46,680
keep placing those fragments 
into the stack and using new 

151
00:10:46,680 --> 00:10:51,640
ball parsec to parse those 
fragments and then try to figure

152
00:10:51,640 --> 00:10:55,800
out which element we are working
with. 

153
00:10:55,880 --> 00:11:00,240
Like a table table or a 
paragraph or a lease. 

154
00:11:00,360 --> 00:11:03,560
You know, what kind of element 
we have that fragment. 

155
00:11:04,000 --> 00:11:09,320
And then we have to complete 
that fragment like a link or a 

156
00:11:09,360 --> 00:11:12,280
table. 
For example, we've let's say we 

157
00:11:12,280 --> 00:11:16,600
have just the heater of the 
table and just the first column 

158
00:11:16,920 --> 00:11:19,480
of the table. 
Let's say we have those tokens 

159
00:11:19,520 --> 00:11:23,080
in the stack. 
Then we have to complete the 

160
00:11:23,080 --> 00:11:27,280
rest of the table in order to 
render that table. 

161
00:11:28,000 --> 00:11:32,720
So so yeah, streaming is. 
I'm curious with, with 

162
00:11:32,720 --> 00:11:36,080
streaming, you might not always 
have like you might not know 

163
00:11:36,080 --> 00:11:37,640
that the table's finished yet, 
right? 

164
00:11:37,640 --> 00:11:39,520
Because you can't control what's
coming through. 

165
00:11:39,840 --> 00:11:44,600
Or is that interesting and so 
you just kind of assume it's 

166
00:11:44,600 --> 00:11:51,120
finished and you have to end the
table and then as more data 

167
00:11:51,120 --> 00:11:54,240
streams in you, you build on it?
Or how does that work? 

168
00:11:54,840 --> 00:11:58,600
Yeah, that that's pretty much 
how you, you know how that's 

169
00:11:58,600 --> 00:12:01,920
that's the problem we have 
because most of the parsers, the

170
00:12:01,920 --> 00:12:05,480
markdown parsers, they need the 
full document, the full 

171
00:12:05,480 --> 00:12:08,760
markdown. 
So they only they only work with

172
00:12:08,760 --> 00:12:12,720
the full document, not with 
fragments of or pieces of 

173
00:12:12,720 --> 00:12:16,840
markdown. 
So as we receive fragments we 

174
00:12:16,840 --> 00:12:21,320
need we need to complete them. 
So for example string DAO is 

175
00:12:21,320 --> 00:12:28,000
using regex, so they just try to
find the element by regex. 

176
00:12:28,360 --> 00:12:30,480
So let's say there is a 
asterisk. 

177
00:12:31,080 --> 00:12:36,280
So you you know, that's, you 
know, you know, if that's like a

178
00:12:36,280 --> 00:12:39,680
bold statement or something like
that. 

179
00:12:39,680 --> 00:12:45,080
And then you have to place the 
the paint off the fragment so 

180
00:12:45,080 --> 00:12:49,520
you can render that. 
So let's say you receive like a 

181
00:12:49,520 --> 00:12:54,520
dash for a lease, right? 
And then you have to render that

182
00:12:54,600 --> 00:12:56,920
as a lease. 
So you have to complete that 

183
00:12:56,920 --> 00:13:01,800
element as a lease. 
And as you receive more of that,

184
00:13:02,360 --> 00:13:05,760
more of those elements, you 
keep, you know, you, you keep 

185
00:13:05,760 --> 00:13:10,760
just feeding the, the streaming 
parser and, and just like like a

186
00:13:10,760 --> 00:13:13,040
buffer. 
And then eventually you just 

187
00:13:13,040 --> 00:13:18,640
flush and render. 
OK, Yeah, how do you, how do you

188
00:13:18,640 --> 00:13:23,600
keep track of syntax? 
Like you're obviously what's the

189
00:13:23,600 --> 00:13:28,600
word I'm looking for. 
You're you're basically like 

190
00:13:28,920 --> 00:13:31,440
optimistically completing 
things, right? 

191
00:13:31,720 --> 00:13:34,760
So how do you know when it's 
like you can't just like insert 

192
00:13:34,760 --> 00:13:36,320
that optimistic completion, 
right? 

193
00:13:36,320 --> 00:13:39,800
Because you have to know it it 
was you that added it as more 

194
00:13:39,800 --> 00:13:43,520
data streams in Or am I over 
complicating things? 

195
00:13:44,200 --> 00:13:49,040
No, that that's, you know, some,
some, some implementations they 

196
00:13:49,720 --> 00:13:54,880
that's that's how index works. 
So let's think about an example 

197
00:13:54,880 --> 00:13:56,440
here. 
Let's say you have a code. 

198
00:13:56,720 --> 00:14:01,400
Code block is probably the most,
you know the most the better 

199
00:14:01,400 --> 00:14:06,240
example here, let's say you you 
start code block, you know, you 

200
00:14:06,240 --> 00:14:11,080
have the back dates and you have
like the Elixir info streaming. 

201
00:14:11,080 --> 00:14:15,240
And then you start streaming 
some code like the first line, 

202
00:14:15,240 --> 00:14:22,440
the second line and so on. 
So when when MDMDX receives a 

203
00:14:22,440 --> 00:14:28,520
new fragment, it just plays the 
the block and the end of the 

204
00:14:28,520 --> 00:14:35,320
block to close the decode block.
And so as it it's get as it gets

205
00:14:35,320 --> 00:14:39,680
more and more code lines, it 
just completes the end of the 

206
00:14:39,680 --> 00:14:44,120
block and render that piece. 
So I think eventually it's going

207
00:14:44,120 --> 00:14:46,040
to receive the the end of the 
block. 

208
00:14:46,400 --> 00:14:51,440
So it just discard that's 
temporary block and then 

209
00:14:51,440 --> 00:14:55,800
continue. 
But the only thing that MDX does

210
00:14:55,800 --> 00:15:00,920
not do now is reverting a 
decision. 

211
00:15:01,200 --> 00:15:04,880
So let's say you receive a piece
of markdown and for some reason 

212
00:15:04,880 --> 00:15:08,600
they streaming parts of things 
that leak that's a lease or a 

213
00:15:08,600 --> 00:15:11,840
code block or whatever. 
And then eventually it realized 

214
00:15:11,840 --> 00:15:16,080
that was not. 
OK, so it can't go back and 

215
00:15:16,080 --> 00:15:20,120
correct its mistake. 
No, not right now, because 

216
00:15:20,120 --> 00:15:23,760
that's really, really complex to
do, because you have to keep not

217
00:15:23,760 --> 00:15:27,920
only the future like fragments, 
but have to keep the stack of 

218
00:15:27,920 --> 00:15:31,240
the whole document. 
And it can go back to the 

219
00:15:31,240 --> 00:15:33,280
beginning of the document, 
right? 

220
00:15:33,280 --> 00:15:39,120
Because Markdown you have blocks
and inline elements and then you

221
00:15:39,120 --> 00:15:43,120
have nested elements. 
So you have to go back to the 

222
00:15:43,120 --> 00:15:48,120
root of the decision. 
So that's really hard to do and 

223
00:15:48,120 --> 00:15:51,560
that's something that is not 
worth doing right now because 

224
00:15:51,560 --> 00:15:54,760
I'm curious can do that. 
Yeah, I'm curious, do you have 

225
00:15:54,760 --> 00:15:58,400
like a solution mapped out in 
your head or not? 

226
00:15:58,400 --> 00:16:01,800
Is it just too complicated or 
you haven't spent much time on 

227
00:16:01,800 --> 00:16:05,760
it? 
No I I had some ideas but it 

228
00:16:05,760 --> 00:16:09,600
gets so complex it's not worth 
it. 

229
00:16:09,600 --> 00:16:12,640
Well, and like you, performance 
becomes a problem, right? 

230
00:16:12,640 --> 00:16:16,080
Like everyone expects like a 
markdown to be rendered 

231
00:16:16,400 --> 00:16:19,320
relatively fast, right? 
Especially when you're streaming

232
00:16:19,320 --> 00:16:22,160
the data and that should be 
almost instant. 

233
00:16:23,480 --> 00:16:27,360
Yeah, it also depends on the 
room time where you are calling 

234
00:16:27,360 --> 00:16:30,360
MDX. 
If you have a live view where 

235
00:16:30,360 --> 00:16:35,160
you can def the, you know, you 
can define the content, then 

236
00:16:35,160 --> 00:16:38,920
that helps a lot, right? 
Because as you get more 

237
00:16:39,400 --> 00:16:44,840
fragments and then you can just 
def the the reindeer to a live 

238
00:16:44,840 --> 00:16:49,800
view page, you can just leverage
the define algorithm of live 

239
00:16:49,800 --> 00:16:52,680
view. 
So it it it really depends where

240
00:16:52,720 --> 00:16:55,280
we you are streaming that 
markdown. 

241
00:16:56,320 --> 00:17:01,040
I'm curious like once you have 
like all the data like you know 

242
00:17:01,040 --> 00:17:04,839
well at least like a portion and
you realize like you know some 

243
00:17:04,839 --> 00:17:08,960
syntax was assumed incorrectly, 
couldn't you just re render 

244
00:17:08,960 --> 00:17:12,599
everything you have in memory at
that point or it does it not 

245
00:17:12,599 --> 00:17:17,319
really work that? 
You can, you can, but there's 

246
00:17:17,319 --> 00:17:20,040
going to be like a flag on the 
page, right? 

247
00:17:20,040 --> 00:17:24,880
Let's say you had like a list 
and then you just re render the 

248
00:17:24,880 --> 00:17:28,079
whole document. 
If it changed the elements, 

249
00:17:28,079 --> 00:17:31,000
you're going to see some changes
on the page, like you're going 

250
00:17:31,000 --> 00:17:36,200
to see like the page changing. 
It's not a big deal, but it's 

251
00:17:36,200 --> 00:17:40,440
possible to just, you know, the 
documents finish, try to render 

252
00:17:40,440 --> 00:17:44,640
the whole document you know and 
make and fix any mistakes. 

253
00:17:45,240 --> 00:17:51,440
But the idea is to reduce the 
mistakes as much as possible 

254
00:17:51,440 --> 00:17:56,880
that you don't need to do that. 
There was there was a 

255
00:17:56,880 --> 00:18:02,880
contribution recently, someone 
sent a fix for the streaming 

256
00:18:02,880 --> 00:18:09,080
parser adding more patterns 
because we are using Invoke 

257
00:18:09,080 --> 00:18:11,440
Parsec. 
So that's how we identify the 

258
00:18:11,440 --> 00:18:15,840
patterns and someone sent a fix 
to improve it. 

259
00:18:16,600 --> 00:18:19,080
So I think it's pretty stable 
right now. 

260
00:18:20,240 --> 00:18:27,720
You know, some tools are using, 
we have Ashy Jido and others 

261
00:18:27,960 --> 00:18:32,880
libraries using MDXI. 
Don't know who is using the 

262
00:18:32,880 --> 00:18:38,480
streaming feature to be honest, 
but I know some, some, some 

263
00:18:38,480 --> 00:18:40,880
companies, some tools, some 
people are using this streaming 

264
00:18:40,880 --> 00:18:43,760
feature now. 
So it it should be stable 

265
00:18:43,760 --> 00:18:45,360
enough. 
That's awesome. 

266
00:18:46,000 --> 00:18:48,680
I won't be probably using the 
streaming feature, but I am 

267
00:18:48,680 --> 00:18:52,720
going to check it out and 
implement MDX into kill switch. 

268
00:18:52,720 --> 00:18:57,200
I think it'll be cool. 
Yeah, just like if you do just, 

269
00:18:57,480 --> 00:19:02,200
you know, just pay attention to 
the to the render HML, something

270
00:19:02,200 --> 00:19:06,560
that is does not look right, 
just open an issue and then we 

271
00:19:06,560 --> 00:19:09,960
can like we can work on that 
because there are many, many, 

272
00:19:09,960 --> 00:19:15,080
many edge cases with streaming 
because you you don't control 

273
00:19:15,080 --> 00:19:19,760
the the fragments, right. 
And you know, it can be like a 

274
00:19:19,880 --> 00:19:22,080
whole lease or just a piece of 
that lease. 

275
00:19:22,080 --> 00:19:26,400
And that lease can be like a 
task or no task. 

276
00:19:26,480 --> 00:19:31,280
And then you don't know if you 
have to render a text or a task 

277
00:19:31,680 --> 00:19:34,520
like like those tasks you have 
in GitHub. 

278
00:19:35,400 --> 00:19:40,120
So it's really hard to, you 
know, to get all the elements 

279
00:19:40,120 --> 00:19:43,760
correct. 
But you know, it's, it's kind 

280
00:19:43,760 --> 00:19:46,080
of, it should be stable now, 
yeah. 

281
00:19:46,880 --> 00:19:48,400
I like that. 
How long have you been working 

282
00:19:48,400 --> 00:19:54,600
on MDX? 
On MDX let me check the first 

283
00:19:55,320 --> 00:19:59,880
version was September 2023. 
OK. 

284
00:20:01,760 --> 00:20:06,000
It was right after Elixir conf. 
It was just the first version 

285
00:20:06,000 --> 00:20:09,440
like the the proof of concept 
was working and then I released 

286
00:20:09,440 --> 00:20:12,400
the first the first. 
It all stemmed from you getting 

287
00:20:12,400 --> 00:20:16,600
bored at an airport. 
Yes, it's like that, Yeah. 

288
00:20:17,360 --> 00:20:22,480
I had no idea how wrestler 
worked. 

289
00:20:22,480 --> 00:20:26,440
Like I knew about the wrestler 
but never had used it in a 

290
00:20:26,440 --> 00:20:29,480
project before, so I started 
just learning there and, you 

291
00:20:29,480 --> 00:20:34,240
know, and that's how it started.
Yeah I have never used rustler 

292
00:20:34,240 --> 00:20:38,840
or nifs and like in my own 
project so I'm aware of them. 

293
00:20:38,960 --> 00:20:41,240
I just have I have 0 experience 
with them. 

294
00:20:41,600 --> 00:20:44,240
What what was the learning curve
like do you think? 

295
00:20:44,240 --> 00:20:47,800
Is rustler pretty easy or was it
complicated? 

296
00:20:48,960 --> 00:20:53,280
I to be honest, I think Rustler 
deserves more attention from the

297
00:20:53,280 --> 00:20:56,320
community because a really, 
really good piece of software, 

298
00:20:56,960 --> 00:21:00,240
it solves a lot of problems 
because sometimes you don't have

299
00:21:00,240 --> 00:21:03,480
a library in the Elixir 
community, so you can just 

300
00:21:03,480 --> 00:21:06,760
leverage all their ecosystems, 
right? 

301
00:21:06,800 --> 00:21:11,960
And Rus has Rus has a lot of 
libraries for a lot. 

302
00:21:12,360 --> 00:21:13,360
Of different. 
Things. 

303
00:21:13,720 --> 00:21:17,360
If you're doing heavy computing 
or anything, you're better off 

304
00:21:17,360 --> 00:21:20,800
using Rust instead of Elixir 
too, right? 

305
00:21:20,800 --> 00:21:24,600
Just for speed of processing. 
It depends. 

306
00:21:25,200 --> 00:21:29,200
It depends what you if you need 
to exchange data, there's going 

307
00:21:29,200 --> 00:21:34,240
to be overhead between Elixir 
and Rust. 

308
00:21:34,880 --> 00:21:38,480
If you can, if you can share the
same space of memory like some 

309
00:21:38,480 --> 00:21:47,120
projects do, then it's it's OK. 
But if you need to exchange data

310
00:21:47,120 --> 00:21:51,680
and see realize the data, then 
it's going to have some 

311
00:21:51,720 --> 00:21:53,520
overhead. 
But it really depends on the 

312
00:21:53,520 --> 00:21:56,920
project. 
But The thing is, you can share 

313
00:21:56,920 --> 00:21:59,640
the same space of memory and 
that's a really, really cool 

314
00:21:59,640 --> 00:22:03,240
feature. 
Then it makes it way more. 

315
00:22:03,240 --> 00:22:06,200
Performing. 
Yeah, I can see that. 

316
00:22:06,240 --> 00:22:09,680
That's cool. 
Maybe someday I'll like come up 

317
00:22:09,680 --> 00:22:13,280
with an excuse to try Rustler 
and put in a project. 

318
00:22:14,440 --> 00:22:17,040
Yeah, it's really nice, really 
nice project. 

319
00:22:19,120 --> 00:22:26,240
So now like I feel like MDX and 
then it's Loomis, right? 

320
00:22:26,240 --> 00:22:30,800
I'm saying that correctly. 
Yes, I I I think so. 

321
00:22:30,880 --> 00:22:33,400
I to be honest, I renamed the 
project. 

322
00:22:33,400 --> 00:22:37,280
It used to be called another 
name which I don't know how to 

323
00:22:37,280 --> 00:22:40,840
pronounce. 
So that's the reason I I renamed

324
00:22:40,840 --> 00:22:44,480
to Loomis and I just say Loomis,
but you know. 

325
00:22:45,400 --> 00:22:47,480
Nice. 
Now I feel like I don't know. 

326
00:22:48,520 --> 00:22:53,040
I would always kind of assume 
the like Loomis would just be 

327
00:22:53,040 --> 00:22:57,520
integrated into a markdown, but 
there's probably a lot more 

328
00:22:57,920 --> 00:23:02,680
complicated aspects to syntax 
highlighting for code blocks. 

329
00:23:02,680 --> 00:23:08,560
Yeah. 
Yeah, Loomis also start like to 

330
00:23:08,560 --> 00:23:13,560
solve a problem on the Dockyard 
blog post because we had to, you

331
00:23:13,560 --> 00:23:16,640
know, code. 
We have to have synthetic 

332
00:23:16,640 --> 00:23:21,200
highlighting for different types
of languages and code because 

333
00:23:21,200 --> 00:23:25,840
the Dockyard blog, the blog has,
you know, Ruby, JavaScript, 

334
00:23:26,040 --> 00:23:31,880
Swift and a lot of other stuff. 
And in the mixer we have the 

335
00:23:31,880 --> 00:23:37,760
makeup library, you know, create
by just evaline and, and then it

336
00:23:37,920 --> 00:23:42,360
didn't have all the parsers that
I needed for this, this problem.

337
00:23:43,080 --> 00:23:50,120
So then I, I started researching
the options I had and I had two 

338
00:23:50,120 --> 00:23:55,720
options essentially, either I, I
had to create new parsers for 

339
00:23:55,720 --> 00:23:58,680
makeup and I had to maintain 
those parsers. 

340
00:23:58,680 --> 00:24:01,640
And it's not easy to create 
those parsers either. 

341
00:24:02,600 --> 00:24:07,680
Or I could just leverage 3 
seater. 3 seater is being used 

342
00:24:07,680 --> 00:24:12,080
by a lot of editors now. 
It's just a parser for. 

343
00:24:12,640 --> 00:24:15,360
It's essentially A parser for 
languages. 

344
00:24:15,360 --> 00:24:17,920
It's defines the grammar for 
languages. 

345
00:24:18,920 --> 00:24:22,480
And then one of the modules is 
the syntax highlight because it 

346
00:24:22,480 --> 00:24:25,600
identifies the tokens on the 
search code and then you can 

347
00:24:25,600 --> 00:24:29,720
apply like colors on those 
tokens. 

348
00:24:30,760 --> 00:24:33,880
So that those are the two 
options I had. 

349
00:24:34,360 --> 00:24:40,600
And since I was already working 
with Rust in the MDX, I decided 

350
00:24:40,600 --> 00:24:45,840
to just give a try for, you 
know, for these, for three 

351
00:24:45,840 --> 00:24:49,920
seater, I was using a library 
called Inkyjet. 

352
00:24:50,320 --> 00:24:54,520
Back back then he was also 
Rustler, pretty much the same 

353
00:24:54,520 --> 00:24:57,280
idea. 
And inkjet. 

354
00:24:57,280 --> 00:25:02,160
The Internet used to work with 
the Helix editor, right? 

355
00:25:02,160 --> 00:25:05,800
So we had the three pseudo 
grammars on one side and the 

356
00:25:05,800 --> 00:25:09,520
theme, the color schemes from 
the Helix editor. 

357
00:25:10,480 --> 00:25:15,760
The problem though, is, was that
the colors were not matching 

358
00:25:16,480 --> 00:25:21,880
because many themes from the 
Helix editor was, they were like

359
00:25:22,240 --> 00:25:27,440
outdated or incomplete. 
So it was not working very well 

360
00:25:27,440 --> 00:25:32,200
for my specific use case. 
And I was contributing to that 

361
00:25:32,200 --> 00:25:37,120
project, the inkjet project. 
But it came to a point where I 

362
00:25:37,120 --> 00:25:41,680
decided to create my own project
so I could have the three serial

363
00:25:41,680 --> 00:25:47,800
grammars and the Neofine themes.
Because in Neofine you have like

364
00:25:48,120 --> 00:25:52,200
all the themes, all the color 
schemes are very well maintained

365
00:25:52,200 --> 00:25:57,480
and we have a lot of options. 
So that's when the synthetic 

366
00:25:57,480 --> 00:26:02,360
highlighter is started. 
But it start as like internal 

367
00:26:02,360 --> 00:26:07,880
code inside MDX and then it 
start growing to the point where

368
00:26:07,880 --> 00:26:13,560
I create the, the Alton. 
It used to be called Alton in 

369
00:26:13,560 --> 00:26:16,600
Elixir. 
It was another, I separate the 

370
00:26:16,640 --> 00:26:20,320
two projects, so MDX and Alton 
back in the day. 

371
00:26:21,480 --> 00:26:25,480
And then eventually I realized 
the Alton project was more worse

372
00:26:25,480 --> 00:26:30,040
than Elixer because it was 
because there is, there is no 

373
00:26:30,240 --> 00:26:34,080
bindings for three seater for 
three Elixer, no official 

374
00:26:34,080 --> 00:26:35,680
bindings. 
It's just Rust. 

375
00:26:37,440 --> 00:26:41,720
I mean it's Rust in some other 
like languages, but no, no 

376
00:26:41,720 --> 00:26:44,400
Elixer. 
So the project was pretty much 

377
00:26:44,400 --> 00:26:49,120
just Rust, right? 
And then I realized that I had 

378
00:26:49,120 --> 00:26:52,440
to it was better to just release
a Russ library. 

379
00:26:53,560 --> 00:26:58,360
The the problem was the problem 
though, is like there wasn't the

380
00:26:58,560 --> 00:27:03,920
autumn name was not available to
publish as a crate, as a Russ 

381
00:27:03,920 --> 00:27:07,160
library. 
And the best name I could I 

382
00:27:07,160 --> 00:27:11,760
could, I could find was 
Autonomous, which is Latin, 

383
00:27:11,760 --> 00:27:16,320
Latin for autumn. 
It's not working very well 

384
00:27:16,320 --> 00:27:18,160
because you know, it's hard to 
pronounce. 

385
00:27:18,520 --> 00:27:20,760
People don't understand it, 
including me. 

386
00:27:22,400 --> 00:27:24,800
So eventually I just renamed 
Loomis. 

387
00:27:24,920 --> 00:27:29,200
And now we have Loomis for 
lexer, Loomis for Rust. 

388
00:27:29,200 --> 00:27:33,360
We have Acli, the the maintainer
of. 

389
00:27:34,280 --> 00:27:37,280
I don't know how to pronounce 
this correctly, but Shikari or 

390
00:27:37,280 --> 00:27:41,080
something like that is the the 
was me runtime for Java. 

391
00:27:41,680 --> 00:27:46,800
He also ported movies for for 
Java, so we also have a Java 

392
00:27:46,800 --> 00:27:48,480
library now. 
I was. 

393
00:27:48,600 --> 00:27:52,480
Going to So are you supporting 
all these multiple run times or 

394
00:27:53,280 --> 00:27:56,280
do you just let other people 
support? 

395
00:27:56,320 --> 00:28:01,560
Well, I'm working on the JS 
runtime or JS version, so yes. 

396
00:28:02,720 --> 00:28:06,320
OK, so yeah. 
So the core engine is just Rust 

397
00:28:06,600 --> 00:28:11,720
and CLI is also Rust. 
Elixir is a Rustler rustler 

398
00:28:11,920 --> 00:28:15,120
wrapper, so it's not that much 
code right now. 

399
00:28:17,120 --> 00:28:23,360
JS in TypeScript on the other 
hand is the most complex one I'd

400
00:28:23,360 --> 00:28:29,720
say because the biggest problem 
is with three seater is all the 

401
00:28:29,720 --> 00:28:34,520
languages that you have. 
They are defined the gram, the 

402
00:28:34,520 --> 00:28:39,880
grammar is defined like a like a
Jason JavaScript file and then 

403
00:28:39,880 --> 00:28:44,880
it compiles to AC and transpires
to C and then you compile that. 

404
00:28:46,200 --> 00:28:51,320
The problem is a parser for a 
Rus or Elixir. 

405
00:28:51,320 --> 00:28:55,120
They have like 1 megabyte or two
maybe. 

406
00:28:55,640 --> 00:29:00,400
So if you include all the 
languages like let's say 100 

407
00:29:00,400 --> 00:29:05,920
different languages, each one 
consuming like 1 megabyte or 

408
00:29:05,920 --> 00:29:10,440
two, it does not work. 
Like you're not going to 

409
00:29:10,440 --> 00:29:15,920
download 200 megabytes for just 
a Syntex highlight library. 

410
00:29:16,920 --> 00:29:19,920
What you don't want just bloat 
in your project. 

411
00:29:21,160 --> 00:29:23,920
Yeah, so that's the biggest 
problem right now in. 

412
00:29:24,360 --> 00:29:26,840
Keeping projects small? 
Yeah, that makes sense. 

413
00:29:28,400 --> 00:29:32,240
So the way we I'm trying to 
solve these now is using OASM. 

414
00:29:33,080 --> 00:29:39,640
SO3 seater has a target. 
You can compile the parsers into

415
00:29:39,640 --> 00:29:46,640
OASM modules and then the 
JavaScript libraries can just 

416
00:29:46,640 --> 00:29:50,520
load those modules, those 
languages dynamically at 

417
00:29:50,520 --> 00:29:54,960
runtime. 
So the core is to TypeScript, 

418
00:29:55,360 --> 00:29:58,920
but the languages, the parsers 
are loaded dynamically. 

419
00:29:59,840 --> 00:30:01,800
So that's a way to solve this 
problem. 

420
00:30:01,840 --> 00:30:05,840
Although it's not perfect 
because there is an overhead to 

421
00:30:06,080 --> 00:30:11,040
load those languages, but that's
the best we can do right now, at

422
00:30:11,040 --> 00:30:15,000
least until you we have the the 
water components. 

423
00:30:15,800 --> 00:30:19,400
Water components might solve 
this problem, but it's not 

424
00:30:19,400 --> 00:30:21,320
something we can use right now. 
I. 

425
00:30:23,880 --> 00:30:29,960
See I I don't know if I fully 
understand how wasm works. 

426
00:30:33,520 --> 00:30:34,840
Can you explain that a little 
bit? 

427
00:30:35,640 --> 00:30:38,640
Yeah, yeah, sure. 
So essentially you can think 

428
00:30:38,640 --> 00:30:44,360
about WASM like having like for 
example, we have the Bing VM, 

429
00:30:44,720 --> 00:30:46,920
right? 
And then you run some code into 

430
00:30:47,240 --> 00:30:51,400
into the VM. 
WASM is a WASM requires a 

431
00:30:51,400 --> 00:30:57,000
runtime as well. 
So, so in Ross you have wasn't 

432
00:30:57,000 --> 00:30:59,880
time. 
In Elixir we have some as well. 

433
00:31:00,280 --> 00:31:04,160
For Java there is this chikori 
chikori something like that. 

434
00:31:04,400 --> 00:31:10,440
It's a runtime as well. 
For JS we also have some 

435
00:31:10,480 --> 00:31:14,240
runtimes. 
So you you need to load at 

436
00:31:14,240 --> 00:31:19,400
runtime and then you can load 
the wasn't modules into that 

437
00:31:19,400 --> 00:31:23,640
runtime. 
And it works for the user and 

438
00:31:23,800 --> 00:31:27,520
and also for the developers. 
It works like transparent, like 

439
00:31:27,560 --> 00:31:30,800
it's transparent. 
You can just call the functions 

440
00:31:30,800 --> 00:31:34,880
from the from the new OSM 
module. 

441
00:31:35,720 --> 00:31:39,240
So if you create like a hello 
word function and then compile 

442
00:31:39,240 --> 00:31:44,440
into a OSME module, you can call
that very same function in any 

443
00:31:44,440 --> 00:31:49,000
runtime in real S or JS or 
That's pretty cool. 

444
00:31:49,000 --> 00:31:53,800
So it, yeah, yeah, Wasmi is 
really, really nice. 

445
00:31:53,920 --> 00:31:58,680
I had never used it before for 
anything, like for real. 

446
00:31:59,120 --> 00:32:02,320
It's the first time I'm using 
Rawsmi for something that, you 

447
00:32:02,320 --> 00:32:05,520
know, I have to make it work 
correctly. 

448
00:32:06,760 --> 00:32:10,640
It seems to be really a really 
good solution. 

449
00:32:11,040 --> 00:32:13,280
I know. 
And some projects are using it 

450
00:32:13,280 --> 00:32:18,600
now, For example, the popcorn. 
I, I know it's on the news now. 

451
00:32:19,080 --> 00:32:25,680
Popcorn is just using OASM as 
well load Elixir on the browser.

452
00:32:26,800 --> 00:32:31,280
So yeah, it's, it's a really 
nice solution, but there are 

453
00:32:31,280 --> 00:32:34,280
some limitations. 
It's not a, not a perfect 

454
00:32:34,280 --> 00:32:41,240
solution, but my, my idea with 
this is having the same API, the

455
00:32:41,240 --> 00:32:45,240
same syntax highlight API for 
different platforms. 

456
00:32:45,240 --> 00:32:50,720
So we have the same API for JS, 
same API for reals and elixirs. 

457
00:32:50,720 --> 00:32:54,800
So you can have the same syndex 
highlighter, the same colors, 

458
00:32:54,800 --> 00:33:01,240
the same languages parsers, all 
the ecosystem in different 

459
00:33:01,240 --> 00:33:05,960
languages and including 
including the CLI. 

460
00:33:06,440 --> 00:33:08,960
Yeah, that's really cool. 
And then it kind of work. 

461
00:33:09,080 --> 00:33:12,880
It'll work the same way as you 
kind of change technologies and 

462
00:33:12,880 --> 00:33:15,320
tech stacks too, right? 
You'd be pretty familiar with 

463
00:33:15,320 --> 00:33:19,400
the library. 
Yeah, because right now you have

464
00:33:19,480 --> 00:33:23,000
really good libraries, but if 
you go to JavaScript you have to

465
00:33:23,000 --> 00:33:27,000
choose one, if you go to also 
have to choose another one and 

466
00:33:27,000 --> 00:33:29,440
so on. 
So sometimes you have a back 

467
00:33:29,440 --> 00:33:33,560
end, a front end and you have to
choose different Syndex 

468
00:33:33,560 --> 00:33:36,240
highlighter libraries, including
the CLI. 

469
00:33:36,760 --> 00:33:41,320
You know all those coding agents
now have a Syntex highlighter 

470
00:33:42,160 --> 00:33:46,480
and and actually tree seater 
works really well for it. 

471
00:33:46,960 --> 00:33:52,080
You know AI streaming like 
feature shutdown interfaces 

472
00:33:52,080 --> 00:33:56,560
because Tracer. 
It works really well with 

473
00:33:56,800 --> 00:33:59,440
incomplete code. 
Yeah, that's cool. 

474
00:34:00,240 --> 00:34:02,320
The same problem we had with 
Mark now. 

475
00:34:03,160 --> 00:34:04,160
Interesting. 
All right. 

476
00:34:04,240 --> 00:34:07,680
I'm going to put this on hold 
for a second and we'll be right 

477
00:34:07,680 --> 00:34:11,080
back in like, I don't know. 30 
seconds. 

478
00:34:11,080 --> 00:34:14,560
Hey, I'm Kimberly with Elixir 
mentor Jacob recently added 

479
00:34:14,560 --> 00:34:17,880
recruitment services to help 
companies hire pre vetted Elixir

480
00:34:17,880 --> 00:34:20,880
devs. 
I help with company outreach, so

481
00:34:20,880 --> 00:34:24,159
if you're hiring, I may be 
reaching out, or you can connect

482
00:34:24,159 --> 00:34:26,360
with us anytime at 
elixirmentor.com. 

483
00:34:28,560 --> 00:34:33,480
And we're back, all right. 
So I'm curious between like 

484
00:34:33,480 --> 00:34:38,880
having two, like you're kind of 
the solo person in charge of MDX

485
00:34:38,880 --> 00:34:42,639
and Loomis, right? 
How, how do you balance the 

486
00:34:42,639 --> 00:34:45,000
tube? 
Just having two open source 

487
00:34:45,000 --> 00:34:46,600
projects? 
I feel like that's a big 

488
00:34:46,600 --> 00:34:54,960
undertaking. 
I mean, you have to choose the 

489
00:34:54,960 --> 00:35:00,720
most important features. 
And one thing I learned I was 

490
00:35:00,720 --> 00:35:07,720
talking to you Zach from Ash a 
while ago and one thing he said 

491
00:35:07,720 --> 00:35:11,480
to me that it's really important
for open source project is to be

492
00:35:11,840 --> 00:35:18,880
like should be as responsive as 
as possible people open issue. 

493
00:35:18,960 --> 00:35:21,760
Zach is the most responsive 
person I've ever met. 

494
00:35:21,760 --> 00:35:23,400
That's. 
Impressive. 

495
00:35:24,640 --> 00:35:27,520
He and Valene, they are like AI 
don't know. 

496
00:35:27,760 --> 00:35:30,240
I think they are some kind of 
botch because. 

497
00:35:30,240 --> 00:35:31,400
I know. 
I don't think they're real 

498
00:35:31,400 --> 00:35:34,880
people. 
Yeah, they can just spawn up new

499
00:35:34,880 --> 00:35:37,400
versions of themselves and 
they're just everywhere. 

500
00:35:38,120 --> 00:35:43,240
Yeah, it's, you know, it's 
unbelievable, but the idea is to

501
00:35:43,240 --> 00:35:46,840
be as responsible as possible. 
If you have a someone open an 

502
00:35:46,840 --> 00:35:49,200
issue. 
If you don't have a solution, at

503
00:35:49,200 --> 00:35:52,560
least just reply and say, hey, 
I'm going to work on this, it's 

504
00:35:52,560 --> 00:35:54,480
on the backlog. 
I have some ideas. 

505
00:35:55,400 --> 00:35:58,920
And then you just kind of, you 
know, gives. 

506
00:35:59,640 --> 00:36:03,800
So give something to the person.
Sometimes that person has some 

507
00:36:03,800 --> 00:36:06,880
idea, he's just not sure what to
do. 

508
00:36:06,960 --> 00:36:10,840
And that's how you also get 
contributions back, right? 

509
00:36:11,640 --> 00:36:14,320
So the idea should be as 
responsible as possible. 

510
00:36:14,320 --> 00:36:20,280
That's the first rule. 
And you know, using AI nowadays 

511
00:36:20,280 --> 00:36:27,560
is, is a way to help with the 
backlog, even though like vibe 

512
00:36:27,760 --> 00:36:31,640
coding is not a solution. 
You know, you have to be very 

513
00:36:32,080 --> 00:36:34,240
careful. 
Yeah. 

514
00:36:34,240 --> 00:36:37,880
Have you seen any like nasty 
messy contribution attempts? 

515
00:36:37,880 --> 00:36:43,280
Like does it increase your PRS 
from contributors or not really?

516
00:36:44,040 --> 00:36:47,240
No, not really. 
MDX and looms are not products 

517
00:36:47,240 --> 00:36:51,360
that are receiving a lot of PRS,
I would say. 

518
00:36:53,080 --> 00:36:57,400
But it's interesting because we 
are getting, we are getting more

519
00:36:57,400 --> 00:37:00,560
contributions. 
The last version, the last MDX 

520
00:37:00,560 --> 00:37:05,920
version was was pretty much just
external contributors. 

521
00:37:07,320 --> 00:37:12,160
So that's really cool when you 
have people contributing, right.

522
00:37:12,360 --> 00:37:17,000
People are not only using the 
project, but also helping to 

523
00:37:17,000 --> 00:37:21,640
improve it. 
And I, I saw yesterday on the 

524
00:37:21,640 --> 00:37:26,800
leak surf forum the hope to be 
pronounced his name correctly. 

525
00:37:26,840 --> 00:37:30,720
Austin Ziegler. 
He's building some plug 

526
00:37:30,720 --> 00:37:37,400
insurance for for MDX. 
So it's it's yeah, it's really 

527
00:37:37,400 --> 00:37:40,400
nice because, you know, the plug
in system. 

528
00:37:40,920 --> 00:37:48,120
I was talking to you why tech 
Mac like 2 years, two years ago,

529
00:37:48,120 --> 00:37:52,800
because the plug in system is 
based on the rack system, plug 

530
00:37:52,800 --> 00:37:55,000
in system. 
It's pretty much the same idea. 

531
00:37:55,640 --> 00:37:59,520
And he was really, you know, 
cool to, you know, just, you 

532
00:37:59,520 --> 00:38:01,920
know, use it. 
And he gave some ideas, some 

533
00:38:01,920 --> 00:38:08,840
feedback as well for MDX. 
And now you can build plug 

534
00:38:08,840 --> 00:38:13,600
insurance. 
I built, I built the JFM, the 

535
00:38:13,600 --> 00:38:22,000
good Hub, McDonald, I built the 
Mermaid as well and a few 

536
00:38:22,000 --> 00:38:25,200
others. 
And now people are also building

537
00:38:25,440 --> 00:38:29,240
plug insurance, right? 
So it's not just the MDX like we

538
00:38:29,240 --> 00:38:36,240
have MDX, the plug insurance 
Loomis and also Conrac, Conrac 

539
00:38:36,240 --> 00:38:39,960
which you know the upstream 
markdown parser. 

540
00:38:40,880 --> 00:38:45,160
I am also contributor to Conrac 
because I need to make changes 

541
00:38:45,320 --> 00:38:52,000
on CONRAC first to support, you 
know features downstream in MDX.

542
00:38:52,880 --> 00:38:58,360
The the most impactful 
contribution on CONRAC from my 

543
00:38:58,360 --> 00:39:04,480
end was the Higgs parser. 
So the markdown can work with 

544
00:39:04,560 --> 00:39:07,720
hex components and Elixir 
expressions. 

545
00:39:09,120 --> 00:39:13,920
So, but yeah, back to your to 
your question. 

546
00:39:13,920 --> 00:39:19,800
Essentially you have to be very 
pragmatic like you have an 

547
00:39:19,800 --> 00:39:21,960
issue, you have APR, you have to
take a decision. 

548
00:39:21,960 --> 00:39:26,800
Don't, don't, don't let it file.
Otherwise it'd be, you know, 

549
00:39:26,840 --> 00:39:30,000
there's going to be a lot of PRS
and issues. 

550
00:39:30,000 --> 00:39:35,920
You have to be responsive. 
It's hard, but at least for now,

551
00:39:35,960 --> 00:39:41,760
MDX and gums are not like huge 
projects like you know, like Ash

552
00:39:41,760 --> 00:39:45,840
or Phoenix or whatever. 
So it's fine for now. 

553
00:39:45,840 --> 00:39:51,760
But getting, if it does get more
contributions and issues, I 

554
00:39:51,760 --> 00:39:54,720
don't know. 
I just, you know, you have to 

555
00:39:54,720 --> 00:39:57,080
find some time. 
Yeah, for sure. 

556
00:39:59,360 --> 00:40:05,400
Yeah, recently I opened the spot
the sponsors sponsorship on you 

557
00:40:05,440 --> 00:40:10,960
hub and yeah, I got some some 
sponsors like it's not something

558
00:40:10,960 --> 00:40:14,960
I'm looking for like my you 
know, it's not not my main 

559
00:40:14,960 --> 00:40:16,440
source of commerce. 
Hey. 

560
00:40:16,440 --> 00:40:18,680
Guys, head over there and 
sponsor this project. 

561
00:40:20,000 --> 00:40:22,440
Yeah, like. 
If you're using MDX, you know, 

562
00:40:22,520 --> 00:40:27,720
feel free and you know, it's a, 
it's a really nice way to, to 

563
00:40:27,720 --> 00:40:32,400
help as well. 
And I'm grateful to have some, 

564
00:40:32,400 --> 00:40:37,880
like I had one, I had some one 
time contributors. 

565
00:40:38,280 --> 00:40:43,240
Mike from Dido is now 
contributing monthly as well. 

566
00:40:43,680 --> 00:40:45,760
So that's really, really nice to
have. 

567
00:40:45,760 --> 00:40:49,400
Like, I mean, open source is 
about community. 

568
00:40:49,560 --> 00:40:52,240
That's really what open source 
is. 

569
00:40:53,080 --> 00:40:56,720
Jeto is something like they're 
making new projects every day. 

570
00:40:56,720 --> 00:40:59,600
I feel like they they're, I 
can't keep up. 

571
00:40:59,600 --> 00:41:01,560
I'm in their Discord and I can't
keep up. 

572
00:41:02,160 --> 00:41:05,640
Yeah, you open Twitter X or 
whatever and there's a new 

573
00:41:05,640 --> 00:41:08,960
project. 
Like OK, I didn't have time to 

574
00:41:08,960 --> 00:41:11,160
see the other one, now there's a
new one. 

575
00:41:11,760 --> 00:41:14,040
I'm making, I'm going to make 
Mike come on and do like a 

576
00:41:14,040 --> 00:41:16,240
coding live stream with me 
because I was like, dude, I 

577
00:41:16,240 --> 00:41:17,720
can't keep up. 
So you have to teach me 

578
00:41:17,720 --> 00:41:19,440
everything that you're doing in 
Jeto. 

579
00:41:21,440 --> 00:41:25,440
Yeah, it's really it. 
I mean, now AI, it's really hard

580
00:41:25,440 --> 00:41:28,880
to keep up because you know. 
You feel like everyone's pedal 

581
00:41:28,880 --> 00:41:32,800
to the metal now and it's like 
new stuff multiple times a day. 

582
00:41:32,800 --> 00:41:37,800
Like we thought it was hard to 
keep up in in tech before AI and

583
00:41:37,800 --> 00:41:42,000
now now look at it. 
Yeah, we should. 

584
00:41:43,040 --> 00:41:45,600
I guess we still need to learn 
how to navigate this. 

585
00:41:45,600 --> 00:41:49,640
This time is because, you know, 
new projects, you know, 

586
00:41:49,640 --> 00:41:52,480
contributions and you know, a 
lot of stuff happening at the 

587
00:41:52,480 --> 00:41:57,440
same time. 
In Markdown, for example, we 

588
00:41:57,440 --> 00:42:01,760
have so many new projects 
because, you know, Markdown has 

589
00:42:01,760 --> 00:42:05,320
a specification. 
So I'd say using AI to create a 

590
00:42:05,320 --> 00:42:10,120
decent parser from just, you 
know, from scratch, just using 

591
00:42:10,120 --> 00:42:17,320
AI is I'd say it's possible. 
So I had, you know, I'm trying 

592
00:42:17,320 --> 00:42:21,240
to follow some projects, but 
every day there's something new,

593
00:42:21,640 --> 00:42:24,440
even for just for markdown or 
ceilidh highlights. 

594
00:42:26,280 --> 00:42:29,600
Yeah, that's crazy. 
One thing I'm noticing is there 

595
00:42:29,600 --> 00:42:33,680
seems to be a growing gap of 
like especially so like Ioffer 

596
00:42:33,680 --> 00:42:35,560
like pre vetted recruitment 
stuff. 

597
00:42:36,200 --> 00:42:42,080
And so I'm reviewing a lot of 
code and I think we have the 

598
00:42:42,080 --> 00:42:46,040
issue that I'm starting to see 
and it's kind of annoying is I 

599
00:42:46,040 --> 00:42:49,440
think you have a lot of people 
that are like very like junior, 

600
00:42:49,440 --> 00:42:54,120
mid level developers trying to 
claim senior level now because 

601
00:42:54,120 --> 00:42:57,400
they think they can code so much
better and faster with LLMS. 

602
00:42:58,120 --> 00:43:02,960
But it you're just like wading 
through so much LLM slop, it's 

603
00:43:02,960 --> 00:43:07,400
like they don't know how to 
actually create, create well 

604
00:43:07,400 --> 00:43:10,440
structured code with LLMS. 
And there's like a there's a big

605
00:43:10,440 --> 00:43:13,760
gap because like I see, you 
know, like senior level guys 

606
00:43:13,760 --> 00:43:16,680
that I work with on the daily on
a daily basis. 

607
00:43:16,680 --> 00:43:19,640
I know they're using LLMS to 
write their code, but it still 

608
00:43:19,640 --> 00:43:22,640
looks like good code. 
And you know, you're not over 

609
00:43:22,640 --> 00:43:25,840
engineering solutions, but then 
you have like you're less 

610
00:43:25,840 --> 00:43:29,520
talented developers that are 
just like spitting out these 

611
00:43:29,520 --> 00:43:33,680
crazy over engineered solutions.
And it's like almost too much. 

612
00:43:34,080 --> 00:43:37,040
And you're like, come on, guys. 
You got like, there's got to be,

613
00:43:37,480 --> 00:43:40,960
I don't know, we need like a, a 
better push to teach people how 

614
00:43:40,960 --> 00:43:45,000
to use LLMS in their workflow. 
Yeah, yeah. 

615
00:43:45,000 --> 00:43:47,680
And that reminds me of another 
Jido project. 

616
00:43:47,680 --> 00:43:51,640
The there's like a Jido spec or 
something like the spec driven 

617
00:43:51,640 --> 00:43:54,880
development. 
That's a new, I mean it's not a 

618
00:43:54,880 --> 00:44:01,520
new thing, but seems like to be 
born again because of AI. 

619
00:44:01,640 --> 00:44:06,680
So you because there's a big 
difference between the AI 

620
00:44:06,680 --> 00:44:11,440
driving the code driving you and
you driving the AI code. 

621
00:44:11,440 --> 00:44:13,600
Yeah, it's 100%. 
Right. 

622
00:44:13,840 --> 00:44:18,480
And seems like spec driven 
development is kind of, you 

623
00:44:18,480 --> 00:44:24,040
know, the, it's not, I'm not 
going to see the solution 

624
00:44:24,040 --> 00:44:28,160
because we are still learning, 
you know, but the spectrum 

625
00:44:28,160 --> 00:44:32,480
driven development might be a 
way that people can, you know, 

626
00:44:33,000 --> 00:44:36,120
just stop for a second, think 
about the problem 1st. 

627
00:44:36,360 --> 00:44:42,360
And to realize a bad, a good 
design, you have to be a senior 

628
00:44:42,360 --> 00:44:46,040
developer, you have to have 
experience, right? 

629
00:44:46,200 --> 00:44:51,360
And so AI alone is not enough. 
You need to understand what's 

630
00:44:51,360 --> 00:44:55,920
happening. 
So I was able to. 

631
00:44:56,240 --> 00:44:58,960
Catch architectural mistakes 
too, right? 

632
00:44:58,960 --> 00:45:05,000
If you just are just generically
asking an LLM to create a 

633
00:45:05,000 --> 00:45:08,840
feature and there's no guiding 
or planning to that feature, 

634
00:45:09,080 --> 00:45:12,240
you're going to get over 
engineered slop and like unused 

635
00:45:12,520 --> 00:45:14,800
do. 
The amount of unused code in 

636
00:45:14,800 --> 00:45:17,960
coding projects is baffling to 
me too. 

637
00:45:18,720 --> 00:45:25,920
Have have you ever tried to ask 
Claude to review the codecs or 

638
00:45:25,920 --> 00:45:30,600
GPT code or vice versa? 
They, you know, put the two 

639
00:45:30,640 --> 00:45:35,320
together 1 reveal the code of 
the other and they always find 

640
00:45:35,320 --> 00:45:40,360
bugs and like a lot of stuff. 
I'm like, I'll be, it'll be like

641
00:45:40,360 --> 00:45:42,440
hit or miss. 
I feel like sometimes it'll just

642
00:45:42,440 --> 00:45:45,240
be a total garbage review and 
then sometimes it'll actually 

643
00:45:45,240 --> 00:45:48,920
find stuff that's like super 
helpful, but it's not consistent

644
00:45:48,920 --> 00:45:53,480
enough that I trust it. 
Like using like Copilot to do 

645
00:45:53,480 --> 00:45:55,760
code reviews or clawed to do 
code reviews. 

646
00:45:56,280 --> 00:46:00,280
Like I feel like it hallucinates
more than it helps but I still 

647
00:46:00,280 --> 00:46:04,040
use them. 
Yeah, I I'm finding that having 

648
00:46:04,040 --> 00:46:07,200
skills, really well written 
skills. 

649
00:46:07,200 --> 00:46:11,320
Yeah, skills are important. 
Yeah, it does help a lot. 

650
00:46:11,800 --> 00:46:14,920
It reduce hallucinations. 
It, you know, it's a way to like

651
00:46:15,800 --> 00:46:22,040
a constraint for the, the AI for
the Asians, but it's, I've been 

652
00:46:22,360 --> 00:46:26,560
doing this experiment like 
running cloud and codecs at the 

653
00:46:26,560 --> 00:46:30,920
same time and asking 1 to reveal
the code of the other. 

654
00:46:31,680 --> 00:46:36,200
And it's funny because when I 
need to go back to the, to cloud

655
00:46:36,200 --> 00:46:38,840
and say, Hey, that's what GPT 
found about your code. 

656
00:46:38,840 --> 00:46:43,520
And then it's like, Oh yeah, 
that's read a book like, so why 

657
00:46:43,520 --> 00:46:49,240
didn't you get the book before? 
So you you cannot trust for 

658
00:46:49,240 --> 00:46:50,840
sure. 
Like you have to review the 

659
00:46:50,840 --> 00:46:52,960
code, you have to know what's 
happening. 

660
00:46:53,680 --> 00:46:58,440
So it does require some, you 
know, experience to use AII. 

661
00:46:59,040 --> 00:47:04,760
Think the the big mistake a lot 
of like mid level and under 

662
00:47:04,760 --> 00:47:07,440
developers are making too is 
they're trying to one shot these

663
00:47:07,440 --> 00:47:10,840
things instead of like stepping 
through a problem. 

664
00:47:11,480 --> 00:47:14,400
Because I like the smaller you 
break things down, the higher 

665
00:47:14,400 --> 00:47:17,240
quality of the code can because 
you're actually paying attention

666
00:47:17,240 --> 00:47:20,800
to it more carefully too. 
So if it spits out something 

667
00:47:20,800 --> 00:47:23,680
that's not quite right, you're 
going to correct it and then 

668
00:47:23,680 --> 00:47:27,400
move on, right. 
So I feel like the one shot in 

669
00:47:27,400 --> 00:47:31,720
giant features is not the 
smartest move without plan. 

670
00:47:31,760 --> 00:47:37,560
So like I have like 1 shotted 
features before but like I have 

671
00:47:37,560 --> 00:47:42,560
a whole planning phase and I 
create like an epic and issues 

672
00:47:42,560 --> 00:47:44,440
and like a checklist essentially
right? 

673
00:47:45,000 --> 00:47:48,680
So but that works. 
Because you have experience in 

674
00:47:48,680 --> 00:47:50,320
that, right? 
Yeah, that works because you 

675
00:47:50,320 --> 00:47:52,360
know what's happening. 
Yeah, yeah. 

676
00:47:52,720 --> 00:47:57,000
So by the coding's a mistake, it
does not work. 

677
00:47:57,600 --> 00:48:01,080
Yeah, I think of it more as like
a junior's writing the stuff you

678
00:48:01,080 --> 00:48:03,640
don't want to write, but you 
still are reviewing it and 

679
00:48:03,640 --> 00:48:07,200
putting your name on it when you
hit that merge button, you know?

680
00:48:08,640 --> 00:48:11,880
Yeah, I mean, it's really cool 
to have contributions on on 

681
00:48:11,880 --> 00:48:17,800
projects, but you have to be 
careful, you know, especially on

682
00:48:17,800 --> 00:48:22,600
bigger projects and even like 
bigger projects now they just 

683
00:48:22,600 --> 00:48:27,320
reject AI contributions. 
So they just. 

684
00:48:27,320 --> 00:48:28,680
Sometimes it's hard to tell 
though. 

685
00:48:29,480 --> 00:48:33,080
It's getting harder and harder. 
Yes, that that's true. 

686
00:48:33,200 --> 00:48:34,120
That's true. 
But. 

687
00:48:34,120 --> 00:48:38,600
But I think like the the 
giveaways are, I mean, if you're

688
00:48:38,600 --> 00:48:41,880
not careful, you get random 
really weird comments in your 

689
00:48:41,880 --> 00:48:44,120
code. 
And I don't think any well 

690
00:48:44,120 --> 00:48:46,960
written code needs comments. 
So you shouldn't have commented 

691
00:48:46,960 --> 00:48:50,440
code And then I would say over 
engineering problems. 

692
00:48:50,680 --> 00:48:56,440
That's like a big giveaway. 
Yeah, you, you, you, you can, 

693
00:48:56,440 --> 00:48:58,960
you can tell. 
Sometimes it's hard, but you can

694
00:48:58,960 --> 00:49:04,760
tell when it's AI generic code 
like comments and it's not it 

695
00:49:04,760 --> 00:49:09,000
does not go straight to the 
problem or it does not it's not 

696
00:49:09,000 --> 00:49:13,600
using the right boundaries on on
your code that that a lot of you

697
00:49:13,600 --> 00:49:18,120
know, or for example, adding new
libraries that are outdated and 

698
00:49:18,680 --> 00:49:19,480
stuff like that. 
So. 

699
00:49:19,560 --> 00:49:24,200
It loves using old like old 
libraries like on everything. 

700
00:49:25,440 --> 00:49:28,720
Which actually an open source 
project makes sense because it 

701
00:49:28,720 --> 00:49:35,320
cannot depends on the ecosystem.
But usually you have to declare 

702
00:49:35,440 --> 00:49:39,280
older versions, so otherwise 
people cannot use your. 

703
00:49:39,280 --> 00:49:40,880
Project. 
Yeah, that makes sense. 

704
00:49:41,480 --> 00:49:45,760
But you know, regular project, 
usually you want to, you know, 

705
00:49:45,880 --> 00:49:50,600
you want to have the latest 
right and AI they fail, usually 

706
00:49:50,600 --> 00:49:53,000
they fail to do that. 
There are always a couple of 

707
00:49:53,000 --> 00:49:56,320
versions off, you know. 
Yeah, yes. 

708
00:49:56,320 --> 00:50:01,200
So there are, there are ways to 
you know, that you can tell if 

709
00:50:01,200 --> 00:50:05,000
it's AAI generic code or not. 
But I guess sometimes it's 

710
00:50:05,000 --> 00:50:07,880
really hard and just, you know, 
just goes. 

711
00:50:07,880 --> 00:50:11,360
But but for open source 
maintainers, I can see the the 

712
00:50:11,400 --> 00:50:15,480
problem. 
Although although I'm pro pro 

713
00:50:15,480 --> 00:50:18,920
AII like to use AIII think it 
helps. 

714
00:50:18,920 --> 00:50:21,240
But you need to understand 
what's happening right? 

715
00:50:21,360 --> 00:50:23,560
Because the the code is is still
yours. 

716
00:50:23,560 --> 00:50:28,560
It's your PR, it's your brain, 
it's your code even though it 

717
00:50:28,560 --> 00:50:31,920
was generated by AI. 
Yeah, I agree. 

718
00:50:32,080 --> 00:50:34,080
I'm I'm a big, you know, I'm a 
fan. 

719
00:50:34,200 --> 00:50:38,680
It took me, I was like a late, 
late to the partier but late to 

720
00:50:38,680 --> 00:50:41,320
the party. 
But now I like it because it, it

721
00:50:41,320 --> 00:50:48,960
just improves my efficiency. 
And once you kind of know how to

722
00:50:48,960 --> 00:50:52,040
work it into your own like 
workflow and planning, I think 

723
00:50:52,040 --> 00:50:55,360
it's pretty powerful tool. 
Like I'm not a good front end 

724
00:50:55,360 --> 00:50:59,120
developer and it helps me be a 
lot better front end developer. 

725
00:50:59,960 --> 00:51:03,560
So it's beneficial for me in 
those ways. 

726
00:51:04,320 --> 00:51:07,160
Yeah, same here. 
If you go to the Lumis website, 

727
00:51:07,160 --> 00:51:10,920
that was the itinerary like the 
front end is. 

728
00:51:11,520 --> 00:51:16,000
I have no idea to how to write 
that code because I'm not a 

729
00:51:16,000 --> 00:51:20,560
front end developer either. 
So for that stuff it's really 

730
00:51:20,560 --> 00:51:24,000
nice. 
And also, for example, the Lumis

731
00:51:24,000 --> 00:51:29,880
requires a lot of, a lot of like
bureaucracy code, like defining 

732
00:51:29,880 --> 00:51:33,280
the languages, repos and all 
that stuff. 

733
00:51:34,360 --> 00:51:39,760
That's the kind of, that's the 
kind of code AI just shines, you

734
00:51:39,760 --> 00:51:42,640
know, just repeated code, you 
know, just get this block and 

735
00:51:42,640 --> 00:51:46,200
repeat and change just just the 
name or just the URL or 

736
00:51:46,200 --> 00:51:49,960
something. 
You know, it takes forever to 

737
00:51:50,360 --> 00:51:54,400
maintain this kind of code. 
But AI is just 5 minutes and 

738
00:51:54,400 --> 00:51:58,840
then you reveal and it's done. 
So there are many, many users 

739
00:51:58,840 --> 00:52:02,360
for, for AI for sure. 
You just have to be careful. 

740
00:52:03,120 --> 00:52:08,000
You definitely do. 
And yeah, yeah. 

741
00:52:08,640 --> 00:52:12,880
And guys, if you're not truly 
like a mid level or senior, 

742
00:52:13,200 --> 00:52:16,000
don't pretend you are because 
you think you are with AI just, 

743
00:52:16,720 --> 00:52:19,800
you know, take take. 
You got to go through the the 

744
00:52:19,800 --> 00:52:23,120
same ladders and steps everyone 
else has and you'll get there 

745
00:52:23,120 --> 00:52:26,120
eventually. 
Yeah, but you can use AI for 

746
00:52:26,120 --> 00:52:28,400
learning as well. 
Yes, absolutely. 

747
00:52:28,680 --> 00:52:30,680
I use it all the time for 
learning honestly. 

748
00:52:30,680 --> 00:52:33,440
Like if I ever see like a block 
of code or like some kind of 

749
00:52:33,440 --> 00:52:39,040
like flow in the code base that 
I'm not quite sure how it works.

750
00:52:39,040 --> 00:52:41,520
Dude I I have AI break it down 
for me. 

751
00:52:42,600 --> 00:52:46,800
Yeah, I I do the same like for 
research and you know, you can 

752
00:52:46,800 --> 00:52:50,000
just use it. 
I just like, hey, give a talk 

753
00:52:50,000 --> 00:52:55,440
and how to brainstorm something 
or research it's or even 

754
00:52:55,440 --> 00:52:58,000
learning about a new product, 
about a new code base. 

755
00:52:58,000 --> 00:53:00,840
It's really helpful. 
Yeah, for sure. 

756
00:53:01,080 --> 00:53:05,640
I'm curious, with like MDX and 
Loomis now, do you have any 

757
00:53:05,640 --> 00:53:08,200
projects that you're building 
where you're using them 

758
00:53:08,440 --> 00:53:12,040
consistently or not? 
Not really anymore. 

759
00:53:12,880 --> 00:53:19,320
I was using for the Wazmi 
research because I had never 

760
00:53:19,320 --> 00:53:23,440
used Wazmi before even though I,
you know, I knew about about it 

761
00:53:23,440 --> 00:53:29,120
but never used. 
So Wazmi research and these new 

762
00:53:29,320 --> 00:53:33,600
JavaScript library requires a 
lot of, you know, copy and paste

763
00:53:33,600 --> 00:53:37,600
code essentially. 
So I'm using for that as well 

764
00:53:38,280 --> 00:53:40,360
and using for code review as 
well. 

765
00:53:40,360 --> 00:53:44,920
Even though it's not perfect, 
but sometimes it catch some bugs

766
00:53:44,920 --> 00:53:49,280
or something that you, you like,
you really, sometimes you miss 

767
00:53:49,280 --> 00:53:52,200
something, right? 
And then you can use for code 

768
00:53:52,200 --> 00:53:56,920
review and give some hints about
something you for you're 

769
00:53:56,920 --> 00:53:59,240
forgetting or you have to take 
another look. 

770
00:54:00,120 --> 00:54:04,600
So for code review as well and 
for for Lumis, for Lumis and 

771
00:54:04,600 --> 00:54:08,560
MEDX, that's the, you know, 
that's where I'm using AI now 

772
00:54:08,920 --> 00:54:11,200
essentially. 
OK, nice. 

773
00:54:11,520 --> 00:54:16,720
Wait, I, I feel like it's, 
there's some sort of benefit 

774
00:54:16,840 --> 00:54:20,480
like if you don't to have 
another engineer look at code 

775
00:54:21,120 --> 00:54:24,600
that like not everyone can pick 
up everything, like you'll miss 

776
00:54:24,600 --> 00:54:28,120
things from time to time. 
And I feel like on solo 

777
00:54:28,120 --> 00:54:31,960
projects, AI has a huge benefit 
there because it's kind of like 

778
00:54:32,640 --> 00:54:35,400
an extra pair of eyes. 
At least it makes you look 

779
00:54:35,400 --> 00:54:38,320
closer at parts of code, whether
you agree with what it finds or 

780
00:54:38,320 --> 00:54:42,280
not. 
Yeah, that's that's true because

781
00:54:42,640 --> 00:54:46,520
most open source projects are 
just just one person like 

782
00:54:47,720 --> 00:54:52,160
working on a lot of stuff at the
same at same time, you know, on 

783
00:54:52,400 --> 00:54:57,400
on his free time or or you know,
short limited time. 

784
00:54:58,440 --> 00:55:04,440
So it's, it's a way to unblock 
new features to help with code 

785
00:55:04,440 --> 00:55:09,120
review. 
Yeah, it's for, I mean, there 

786
00:55:09,120 --> 00:55:15,120
are downsides of, you know, 
using or abusing AI in the open 

787
00:55:15,120 --> 00:55:17,920
source community, but it can 
also help. 

788
00:55:19,040 --> 00:55:24,560
Yeah, 100% that like now that 
you're not, you're not like 

789
00:55:24,880 --> 00:55:28,320
working on the Beacon project 
and that's where you're kind of 

790
00:55:28,320 --> 00:55:31,600
consuming these libraries. 
Are you consuming your libraries

791
00:55:31,600 --> 00:55:37,760
anywhere else currently or no? 
No, not really. 

792
00:55:39,160 --> 00:55:43,040
Although I really enjoy working 
on MDX and Loomis, I'm not. 

793
00:55:43,400 --> 00:55:49,280
I'm not going to stop, but I had
some ideas to use MDX or Loomis.

794
00:55:49,280 --> 00:55:52,800
But you know, I was trying to 
find some ideas where I could 

795
00:55:52,800 --> 00:55:58,800
monetize the projects, right? 
Like a private project, like a 

796
00:55:58,880 --> 00:56:02,960
private closed source project, 
something I could sell. 

797
00:56:04,480 --> 00:56:08,680
But for now, I'm just trying to 
get the, you know, the bigger 

798
00:56:08,680 --> 00:56:11,880
features that I want to have on 
those libraries. 

799
00:56:12,800 --> 00:56:16,680
And then eventually maybe you 
know, create something like a 

800
00:56:17,120 --> 00:56:20,480
like a side project, not 
something big or whatever, 

801
00:56:21,040 --> 00:56:24,920
something small that I could try
to monetize and help, you know, 

802
00:56:25,000 --> 00:56:27,640
to help fund the project. 
Yeah, Yeah. 

803
00:56:27,640 --> 00:56:32,720
I'm a big believer in doing like
like micro products and just 

804
00:56:32,720 --> 00:56:36,920
have, you know, a couple micro 
products and you know, try to 

805
00:56:36,920 --> 00:56:41,400
grow them to a couple 1000 users
and then that's good, that's 

806
00:56:41,400 --> 00:56:44,520
good like side income and 
eventually like it could 

807
00:56:44,520 --> 00:56:47,160
replace, you know, your day job,
whatever. 

808
00:56:47,160 --> 00:56:50,720
And then you just have all these
cool side projects that actually

809
00:56:50,720 --> 00:56:55,400
monetize. 
Yeah, I mean, I'm not looking to

810
00:56:55,400 --> 00:57:01,080
keeping keeping my my day, day 
job, but it'll be nice to have 

811
00:57:01,080 --> 00:57:06,800
like a side project that I could
main mainly helped fund the 

812
00:57:06,800 --> 00:57:09,600
project. 
And yeah, for sure, that would 

813
00:57:09,600 --> 00:57:11,080
be nice. 
What? 

814
00:57:11,240 --> 00:57:13,360
What do you have any ideas that 
you can share? 

815
00:57:14,840 --> 00:57:17,800
No, not really. 
I was, you know that that's the 

816
00:57:17,800 --> 00:57:20,320
problem. 
Every day you open Twitter and 

817
00:57:20,320 --> 00:57:23,800
there are like a bunch of new 
projects, a bunch of new ideas 

818
00:57:23,800 --> 00:57:26,400
and stuff in. 
There's no original idea at this

819
00:57:26,400 --> 00:57:29,240
point anymore, is there? 
Yeah, yeah. 

820
00:57:29,240 --> 00:57:34,840
But you can always innovate even
in well established, you know, 

821
00:57:34,840 --> 00:57:37,480
areas. 
But the problem is there's so 

822
00:57:37,480 --> 00:57:42,160
many, so much happening at the 
same time, like and you know, 

823
00:57:42,160 --> 00:57:49,120
markdown has been used in 
projects for like MCP projects 

824
00:57:49,120 --> 00:57:52,760
or that kind of stuff. 
But it's moving so fast that, 

825
00:57:52,800 --> 00:57:58,160
you know, your idea became like,
your idea becomes stale like in 

826
00:57:58,160 --> 00:58:02,480
a week. 
So it's like it's, it's hard to 

827
00:58:02,480 --> 00:58:04,080
decide. 
It's hard to find something that

828
00:58:04,080 --> 00:58:09,280
you can like commit to because 
if you start some side project, 

829
00:58:09,280 --> 00:58:11,960
you have to be certain about 
that project, right? 

830
00:58:12,520 --> 00:58:14,080
Because you're going to spend 
some time. 

831
00:58:14,960 --> 00:58:19,480
So it's yeah for now just 
working on the working search 

832
00:58:19,480 --> 00:58:22,240
projects. 
Fair enough. 

833
00:58:22,920 --> 00:58:24,840
What? 
What kind of things do you work 

834
00:58:24,840 --> 00:58:27,800
on with your day job? 
Yeah. 

835
00:58:27,800 --> 00:58:30,200
So right now I'm working at 
Tallis Park. 

836
00:58:30,200 --> 00:58:37,560
They are a tech solution for, 
you know, for US based schools. 

837
00:58:38,600 --> 00:58:46,560
And so we, I can say for sure, 
but we were one of the first to 

838
00:58:46,560 --> 00:58:49,240
use live view, you know. 
In production. 

839
00:58:49,240 --> 00:58:51,840
I was just going to ask, are you
writing Elixir every day? 

840
00:58:51,920 --> 00:58:54,440
Yeah, it's Elixir essentially. 
Yeah. 

841
00:58:55,600 --> 00:59:00,920
So we have been using Phoenix 
live view for like for years now

842
00:59:01,640 --> 00:59:05,920
and seems like the first 
published, like one of the first

843
00:59:06,200 --> 00:59:10,480
published versions. 
And yeah, so it's pretty much 

844
00:59:10,720 --> 00:59:16,600
Phoenix and Live view. 
And we do have some markdown in 

845
00:59:16,600 --> 00:59:22,400
the product, but not, not so 
much we, we, we use MDX here, 

846
00:59:22,400 --> 00:59:24,800
but it's not the core of the 
product. 

847
00:59:26,280 --> 00:59:31,920
But most of the projects just 
Phoenix and live view and that 

848
00:59:32,080 --> 00:59:35,800
yeah, that's how I got into live
view. 

849
00:59:35,800 --> 00:59:40,640
And that's, yeah. 
So that's the, the, the project 

850
00:59:40,640 --> 00:59:43,560
we are. 
It's pretty much just live view,

851
00:59:43,560 --> 00:59:45,000
yeah. 
OK, cool. 

852
00:59:46,160 --> 00:59:50,280
Any like interesting fun project
or problems that you've recently

853
00:59:50,440 --> 00:59:58,320
ran into that you had to solve? 
Like here the OR like any of 

854
00:59:59,840 --> 01:00:02,160
like you mean here in the like 
in the? 

855
01:00:02,160 --> 01:00:05,800
Company or yeah, in the company 
just on the platform, like do 

856
01:00:05,800 --> 01:00:09,000
you have like a pretty large 
user base? 

857
01:00:09,000 --> 01:00:12,040
Do you have performance issues 
you're dealing with? 

858
01:00:13,320 --> 01:00:19,360
Yeah, I guess, I guess now it's 
more about scaling the company. 

859
01:00:19,440 --> 01:00:22,760
You know, when you have like 
like you have a product and you 

860
01:00:22,760 --> 01:00:27,440
have a bunch of clients and you 
have to scale like the you know,

861
01:00:27,600 --> 01:00:30,480
the infrastructure that you 
have, you need to scale and then

862
01:00:30,480 --> 01:00:34,040
the the cold base. 
So you are that at this point 

863
01:00:34,040 --> 01:00:38,480
now. 
But over the years, that's how I

864
01:00:38,480 --> 01:00:42,240
got into Phoenix Live your 
contributions, because we 

865
01:00:42,240 --> 01:00:48,200
started using live view on this 
product and also Ecto and all 

866
01:00:48,200 --> 01:00:55,240
the other libraries and we had 
to like, we needed some, you 

867
01:00:55,920 --> 01:00:59,600
know, some features that, you 
know, we didn't have back in the

868
01:00:59,600 --> 01:01:02,320
day. 
So for example, when we start 

869
01:01:02,320 --> 01:01:07,800
scaling and having more 
customers, we had to analyze the

870
01:01:07,800 --> 01:01:11,800
performance of the database and 
the queries on the database. 

871
01:01:12,480 --> 01:01:16,160
So that's, for example, when I 
contribute the EXPLAIN function 

872
01:01:16,160 --> 01:01:20,880
in Ecto, so we can run the 
EXPLAIN query on Ecto. 

873
01:01:22,000 --> 01:01:25,760
And so, yeah, I was able to do 
some, you know, contribution 

874
01:01:25,760 --> 01:01:31,160
here and there, the ecosystem 
because of, you know, the 

875
01:01:31,160 --> 01:01:33,080
company's growth. 
So that's another way that you 

876
01:01:33,080 --> 01:01:37,080
can also, in my opinion, you can
contribute to open service, 

877
01:01:37,120 --> 01:01:38,480
right? 
You have a problem in your 

878
01:01:38,480 --> 01:01:41,760
project, like don't, don't wait 
for a solution. 

879
01:01:41,760 --> 01:01:44,120
Just, you know, you can solve 
it. 

880
01:01:44,840 --> 01:01:49,240
Yeah, I know it's hard, but it's
another way that you can, you 

881
01:01:49,240 --> 01:01:52,880
know, contribute to open source.
Well I always find it funny when

882
01:01:52,880 --> 01:01:55,200
you see like open source 
projects and someone's 

883
01:01:55,200 --> 01:01:59,760
complaining about a feature not 
working or wanting a new 

884
01:01:59,760 --> 01:02:03,520
feature. 
Like guys you could just ask if 

885
01:02:03,520 --> 01:02:06,120
it's on the road map and then 
submit the PR. 

886
01:02:06,120 --> 01:02:07,960
Do it. 
Like if you need it, you should 

887
01:02:07,960 --> 01:02:11,720
submit the PR. 
Just just open Cloud Code and. 

888
01:02:13,120 --> 01:02:16,040
Vibe it out, put on your 
sunglasses and go. 

889
01:02:18,080 --> 01:02:22,200
And just submit the PR, Yeah, 
but you can, you can do like you

890
01:02:22,200 --> 01:02:25,040
can, you can for sure 
contribute. 

891
01:02:26,480 --> 01:02:33,120
It's not super hard I'd say. 
Just make sure that it will be 

892
01:02:33,120 --> 01:02:35,200
accepted before you put it in 
the work though. 

893
01:02:36,360 --> 01:02:42,200
Yeah, it it depends when it's a 
feature request, depending on 

894
01:02:42,200 --> 01:02:45,960
the project, you have to use the
issue tracker or there's a core 

895
01:02:45,960 --> 01:02:49,160
or you can chat about our 
discord server. 

896
01:02:50,440 --> 01:02:54,480
When it's a bug fix, I'd say 
don't wait, just send the patch,

897
01:02:54,880 --> 01:03:00,800
just send the PR. 
And yeah, that's, you know, the 

898
01:03:00,800 --> 01:03:04,920
good thing about Elixir 
community is that we are pretty 

899
01:03:04,920 --> 01:03:09,800
much pretty much everyone is 
very friend friendly and open. 

900
01:03:10,080 --> 01:03:17,600
So it's AI would say Elixir is a
we we could say it's a small 

901
01:03:17,600 --> 01:03:23,480
community compared to others. 
So we some we kind of know each 

902
01:03:23,560 --> 01:03:27,680
other, if you know what I mean. 
And then it's it's easier to get

903
01:03:27,680 --> 01:03:30,440
contributions in this 
environment. 

904
01:03:30,640 --> 01:03:35,760
It's more friendly than others. 
Yeah, I'd say for the most part,

905
01:03:35,760 --> 01:03:37,720
everyone's really nice in the 
electric community. 

906
01:03:39,200 --> 01:03:40,920
I think that's one of the 
bonuses, right? 

907
01:03:42,440 --> 01:03:49,360
Yes, yeah, yeah, and yeah. 
For so for index and, and and 

908
01:03:49,360 --> 01:03:56,080
Loomis, we got some 
contributions recently and it's,

909
01:03:57,040 --> 01:04:00,760
you know, it's nice to see the 
the library growing and 

910
01:04:00,760 --> 01:04:04,480
contribution. 
So what I sometimes people ask 

911
01:04:04,480 --> 01:04:07,440
me like, hey, can I contribute 
or can do something like just 

912
01:04:07,720 --> 01:04:11,200
just open the issue, like open 
an issue we can discuss. 

913
01:04:11,200 --> 01:04:14,120
We can, you know, sometimes it 
does not work out, but 

914
01:04:15,160 --> 01:04:18,200
eventually most of them does 
work. 

915
01:04:18,800 --> 01:04:22,080
And that's how you can get, you 
know, contributions done. 

916
01:04:23,960 --> 01:04:27,680
Yeah. 
Any, any lessons that you can 

917
01:04:27,680 --> 01:04:34,160
share having open source 
projects because like did you, 

918
01:04:34,360 --> 01:04:37,000
did you do anything before 
Beacon or was Beacon kind of 

919
01:04:37,000 --> 01:04:43,640
your first open source project? 
I used to do some contributions 

920
01:04:43,880 --> 01:04:47,680
back in the day for angry JS and
radios. 

921
01:04:49,760 --> 01:04:56,560
That's when I started and then, 
you know, eventually after 

922
01:04:56,560 --> 01:05:01,160
migrating to Elixir, getting 
some contributions to Elixir 

923
01:05:01,160 --> 01:05:08,280
projects. 
But I don't know, maybe maybe 

924
01:05:08,400 --> 01:05:13,640
Beacon was, you know, the first 
big one, I'd say, if I can say. 

925
01:05:13,720 --> 01:05:15,480
That you were like a main 
contributor on. 

926
01:05:16,160 --> 01:05:19,920
Yeah, yeah. 
But I'd say if you're starting a

927
01:05:19,920 --> 01:05:26,240
new project, if you want to 
succeed, I'd say marketing is 

928
01:05:26,240 --> 01:05:30,400
very important, even though no 
one likes to do that. 

929
01:05:30,720 --> 01:05:34,960
No, it's the hardest thing ever.
I always tell people the easiest

930
01:05:34,960 --> 01:05:40,560
part of, like, building like a 
SAS product or like a library is

931
01:05:40,800 --> 01:05:43,280
coding. 
And that's just because my 

932
01:05:43,280 --> 01:05:46,520
brain's not, Yeah, my brain's 
not wired for the marketing and 

933
01:05:46,520 --> 01:05:50,920
the sales. 
It's like you wish the like the 

934
01:05:50,920 --> 01:05:52,560
statement, build it and they 
will come. 

935
01:05:52,560 --> 01:05:55,440
You wish that was true, but it's
the farthest thing from the 

936
01:05:55,440 --> 01:05:58,480
truth. 
And, and I'm guilt of that. 

937
01:05:58,480 --> 01:06:02,640
I'm guilt of that as well 
because that's, you know, MDX, 

938
01:06:02,640 --> 01:06:05,760
for example, I never talk about 
MDX in public. 

939
01:06:07,240 --> 01:06:08,880
I. 
Have Here we are, though you're 

940
01:06:08,880 --> 01:06:11,800
in public. 
Yeah, that's the first time I'm 

941
01:06:11,800 --> 01:06:16,520
talking about MDX in English. 
Like you know before that I had 

942
01:06:16,520 --> 01:06:22,400
a meet up, remote meet up in 
Brazil, but it was Portuguese. 

943
01:06:22,480 --> 01:06:27,040
Right now is the first time I'm 
talking about MDX in English. 

944
01:06:27,040 --> 01:06:31,920
Like the library, he's like 2 
years old more and that that's 

945
01:06:31,920 --> 01:06:35,360
the first time I'm talking about
MDX in English. 

946
01:06:35,360 --> 01:06:42,600
So marketing is important. 
So right now we have 500,000 

947
01:06:42,600 --> 01:06:47,080
downloads and I had. 
I have never talked about index 

948
01:06:47,240 --> 01:06:50,920
in public, only like Twitter. 
Sometimes I just post some 

949
01:06:50,920 --> 01:06:52,840
releases. 
I was going to ask, how do you 

950
01:06:52,840 --> 01:06:56,880
do you think people are finding 
it through the hex library or 

951
01:06:56,880 --> 01:07:00,800
through the hex website? 
Probably following you on on 

952
01:07:00,800 --> 01:07:04,400
Twitter. 
I'm I'm not sure to be honest. 

953
01:07:05,160 --> 01:07:08,760
I know some people react on the 
Elixir forum. 

954
01:07:08,760 --> 01:07:13,840
People use the Elixir forum as a
sirs new libraries and news on 

955
01:07:13,840 --> 01:07:17,440
the community, the thinking 
Lexer podcast. 

956
01:07:17,440 --> 01:07:22,280
They have been covering the MDX 
releases for some time now. 

957
01:07:22,280 --> 01:07:25,160
I'm very grateful because that's
a really good source. 

958
01:07:25,600 --> 01:07:32,720
Yeah, I know the I know Mark is 
using MDX, so he's always, you 

959
01:07:32,720 --> 01:07:35,840
know, following the development 
of MDX. 

960
01:07:36,120 --> 01:07:40,920
So that's probably a good 
source, but I'm, I'm not sure, 

961
01:07:42,160 --> 01:07:44,120
you know, people just starting 
to use it. 

962
01:07:44,280 --> 01:07:48,640
And sometimes people just say, 
Hey, I'm using index on this and

963
01:07:48,640 --> 01:07:53,480
I, I had no idea. 
I I don't know, to be honest, 

964
01:07:53,720 --> 01:07:58,440
where people are finding index. 
But but again, marketing is 

965
01:07:58,440 --> 01:08:01,160
important. 
So, you know, I'm trying to be 

966
01:08:01,160 --> 01:08:05,160
more open about the development.
There are a lot of challenges of

967
01:08:05,240 --> 01:08:09,240
the, you know, development of 
people's people sometimes don't 

968
01:08:09,240 --> 01:08:13,240
realize how hard it is to, you 
know, mark down and Syntex 

969
01:08:13,240 --> 01:08:17,120
highlight are they look like a 
simple problem to solve, but 

970
01:08:17,640 --> 01:08:19,680
it's not. 
I mean, just talking to you 

971
01:08:19,680 --> 01:08:23,200
about like the streaming aspects
and like things that I never 

972
01:08:23,200 --> 01:08:27,120
even thought about. 
There's a lot of complex 

973
01:08:27,120 --> 01:08:30,000
problems under the hood for 
something that you just want to 

974
01:08:30,000 --> 01:08:32,560
work perfectly right as a end 
user. 

975
01:08:32,560 --> 01:08:34,479
You just think, oh, it's simple.
It's just. 

976
01:08:35,960 --> 01:08:37,520
Just. 
Markdown, dude, it's just 

977
01:08:37,520 --> 01:08:40,560
markdown. 
Yeah, it's it's not like 

978
01:08:41,560 --> 01:08:44,399
streaming is just one of the 
features. 

979
01:08:44,399 --> 01:08:48,800
We have a bunch of more stuff. 
Is there any benefit do you 

980
01:08:48,800 --> 01:08:53,479
think, like building a markdown 
library in Elixir versus other 

981
01:08:55,000 --> 01:09:01,720
technologies or languages? 
There's another Elixir library, 

982
01:09:02,240 --> 01:09:04,840
I think it's called Med if not 
mistaken. 

983
01:09:05,600 --> 01:09:09,840
And it's a really nice idea 
because it's pretty much even 

984
01:09:09,880 --> 01:09:15,960
based, not even like process, 
but you know, more like a 

985
01:09:15,960 --> 01:09:20,960
functional design. 
So you can leverage this kind of

986
01:09:21,960 --> 01:09:27,880
functional design in mixer. 
I, I wish I I wish I could read.

987
01:09:28,640 --> 01:09:36,359
I wish I could write a parser, a
pure Elixer parser for for MDXI.

988
01:09:36,359 --> 01:09:40,120
Don't know, maybe someday, but 
what is the? 

989
01:09:41,040 --> 01:09:43,319
What's the most difficult part 
there? 

990
01:09:43,319 --> 01:09:48,080
Just finding the time to do it 
or are there limitations that 

991
01:09:48,080 --> 01:09:51,439
you know of? 
Markdown has many many edge 

992
01:09:51,439 --> 01:09:56,280
cases you have to like. 
The parsing is not easy. 

993
01:09:56,280 --> 01:09:59,080
You have to deal with a lot of 
complication. 

994
01:10:00,560 --> 01:10:03,760
Even though you have the 
specification like you have the 

995
01:10:03,760 --> 01:10:11,040
common mark specification, which
is like 10-11 years old now 

996
01:10:11,120 --> 01:10:15,760
this, this specification, so it 
is, it is well established, but 

997
01:10:15,760 --> 01:10:19,400
there are many sometimes some, 
some parts of this 

998
01:10:19,400 --> 01:10:22,000
specification. 
You, you have to understand what

999
01:10:22,000 --> 01:10:24,480
they mean. 
Like it's not strict 

1000
01:10:25,600 --> 01:10:29,040
specification sometimes. 
And there are many edge cases 

1001
01:10:29,040 --> 01:10:33,520
that you have to deal with. 
So if if you look at like if you

1002
01:10:33,520 --> 01:10:37,560
look at the correct source code,
it's like really complex source 

1003
01:10:37,560 --> 01:10:42,320
code. 
And the the Conrad author, I 

1004
01:10:42,320 --> 01:10:49,600
think they, they used to work on
the GitHub specification at 

1005
01:10:49,600 --> 01:10:55,440
GitHub and now working at GitLab
and GitLab is kind of sponsoring

1006
01:10:55,440 --> 01:11:00,720
the Conrad development. 
And Conrad is used to generate 

1007
01:11:00,720 --> 01:11:06,800
all the Rus docs like like we 
have the hack stocks where else 

1008
01:11:06,800 --> 01:11:11,400
has documentations and they use 
they use conrac so it's a well 

1009
01:11:11,480 --> 01:11:17,520
well established parser. 
So there are some reasons to 

1010
01:11:17,520 --> 01:11:23,800
create a pure Elixir parser, but
it's not an easy task. 

1011
01:11:24,120 --> 01:11:27,360
Yeah, I'm sure. 
Sounds like a lot of work. 

1012
01:11:29,080 --> 01:11:33,280
Yeah, it it like Conrac. 
Conrac has a lot of contributors

1013
01:11:33,280 --> 01:11:40,320
now, so it's the only downside 
of using correct? 

1014
01:11:40,600 --> 01:11:43,600
My opinion is really having 
like. 

1015
01:11:44,840 --> 01:11:50,320
It's not a blocker, but it's a 
REST library so if you want to 

1016
01:11:50,320 --> 01:11:54,240
use it you have to either 
download the pre compiled binary

1017
01:11:54,800 --> 01:11:57,880
or compile compile the REST 
code. 

1018
01:11:58,800 --> 01:12:01,760
Right. 
Right, which is not a big deal, 

1019
01:12:01,760 --> 01:12:05,520
but there might be some 
scenarios or environments where 

1020
01:12:05,720 --> 01:12:10,760
that's not allowed. 
But otherwise it's fine. 

1021
01:12:11,920 --> 01:12:16,400
The the roster pre compiled 
project is like amazing. 

1022
01:12:16,400 --> 01:12:20,640
It's so a lot of you solve this 
problem of confining the roast 

1023
01:12:20,640 --> 01:12:23,120
code. 
Man you can just have the pre 

1024
01:12:23,120 --> 01:12:25,400
compiled binary. 
You also have to kind of like 

1025
01:12:25,400 --> 01:12:27,600
pick and choose how you want to 
spend your time, right? 

1026
01:12:27,600 --> 01:12:30,360
For an open source project 
that's not really making you any

1027
01:12:30,360 --> 01:12:34,200
money except for, you know, a 
few sponsorships, Do you really 

1028
01:12:34,200 --> 01:12:38,200
want to build a whole parser 
from scratch or just leverage a 

1029
01:12:38,200 --> 01:12:40,320
tool that already works really 
well, you know? 

1030
01:12:41,760 --> 01:12:48,280
Yeah, like I have so many, I 
have so many ideas to do with 

1031
01:12:48,760 --> 01:12:53,200
MDX and Lumis. 
The next one I'm going to work 

1032
01:12:53,200 --> 01:12:58,920
is the Higgs parser, right? 
Right now we do have Higgs 

1033
01:12:58,920 --> 01:13:01,680
support. 
You can write Higgs components 

1034
01:13:01,680 --> 01:13:05,400
and mixer expressions inside the
markdown, and it does generate 

1035
01:13:05,560 --> 01:13:07,120
a. 
It compiles. 

1036
01:13:09,760 --> 01:13:11,520
I forgot the name of that 
struct. 

1037
01:13:11,520 --> 01:13:16,280
Nowadays struct that is used by 
live view, so you can just bring

1038
01:13:16,280 --> 01:13:21,560
their mark down side live view 
page like like if you had a hex 

1039
01:13:21,560 --> 01:13:24,960
template. 
So you can have components and 

1040
01:13:24,960 --> 01:13:31,680
expressions inside markdown. 
But there's a problem the when 

1041
01:13:31,680 --> 01:13:36,480
you the way it works now, it 
just identifies the boundaries 

1042
01:13:36,640 --> 01:13:40,440
like what is markdown, what is 
hex inside the markdown 

1043
01:13:40,440 --> 01:13:47,440
document, and it keeps the Higgs
part out of the markdown parser.

1044
01:13:48,240 --> 01:13:52,000
And then we do a second pass 
compilation of using the Higgs 

1045
01:13:52,000 --> 01:13:55,200
compiler. 
So first it parse the markdown, 

1046
01:13:55,560 --> 01:13:58,800
keep the Higgs like, does that 
change that part? 

1047
01:13:59,680 --> 01:14:02,040
And then the second pass with 
the Higgs compiler. 

1048
01:14:02,520 --> 01:14:08,120
The problem though is the inner 
content of those Higgs parts, 

1049
01:14:08,120 --> 01:14:11,640
Higgs blocks. 
We need to parse that as 

1050
01:14:11,640 --> 01:14:14,440
markdown as well. 
Because if you have markdown 

1051
01:14:15,040 --> 01:14:17,960
inside the component, which is 
inside the markdown inside 

1052
01:14:17,960 --> 01:14:20,280
another component, you know you 
can be nested. 

1053
01:14:20,960 --> 01:14:25,600
We need to go down all the 
children and parse those small 

1054
01:14:25,600 --> 01:14:32,000
pieces of markdown as well. 
So that's how other libraries 

1055
01:14:32,000 --> 01:14:37,920
work like MDX, the JavaScript 
library and that that was the 

1056
01:14:37,920 --> 01:14:42,200
main inspiration for MDEX. 
There's MDXJS. 

1057
01:14:43,000 --> 01:14:48,000
They work this way if you have 
JavaScript inside components and

1058
01:14:48,000 --> 01:14:51,960
markdown as well. 
It can it, it does render the 

1059
01:14:51,960 --> 01:14:56,400
markdown, it does parse the 
markdown inside components and 

1060
01:14:56,400 --> 01:15:00,440
that's really hard to do. 
I'm working on the Rose code. 

1061
01:15:00,440 --> 01:15:03,640
Make that happen on the current 
parser. 

1062
01:15:04,440 --> 01:15:09,400
As I get that done, I can just 
use it on on the MDX. 

1063
01:15:10,320 --> 01:15:16,760
And then finally I can say the 
Heeks support is like 100% done 

1064
01:15:16,800 --> 01:15:20,400
and working. 
So we can have Mcdowie Felixer 

1065
01:15:21,600 --> 01:15:23,920
for, you know, for Elixer 
projects. 

1066
01:15:24,360 --> 01:15:32,480
Yeah, that's awesome and right. 
So right now Heeks isn't fully 

1067
01:15:32,480 --> 01:15:36,440
supported or it is. 
It works, but if you have 

1068
01:15:36,440 --> 01:15:41,760
markdown side the components 
it's going to be like just raw 

1069
01:15:41,760 --> 01:15:44,280
text. 
So OK, I see. 

1070
01:15:45,400 --> 01:15:49,000
Because what it does is all the 
text, you know all the 

1071
01:15:49,000 --> 01:15:54,760
information inside the, you know
the block is just hex. 

1072
01:15:55,160 --> 01:16:00,080
And then when you send that to 
the hex compiler, if you have 

1073
01:16:00,080 --> 01:16:05,240
like a title or a bold text or 
something like a markdown text, 

1074
01:16:06,280 --> 01:16:10,640
the H compiler has no idea 
that's a markdown, right? 

1075
01:16:10,840 --> 01:16:14,720
Then it's just reindeers as a a 
raw text. 

1076
01:16:15,880 --> 01:16:17,680
I see. 
So that's that's the problem we 

1077
01:16:17,680 --> 01:16:20,280
have right now. 
I'm trying to solve on the 

1078
01:16:20,320 --> 01:16:25,680
correct side first the the worst
Spicer and then I can use them 

1079
01:16:25,680 --> 01:16:28,000
in the X. 
OK. 

1080
01:16:28,360 --> 01:16:31,640
That's cool, yeah. 
So yeah, you never would think 

1081
01:16:31,760 --> 01:16:35,520
the complicated under the hood 
problems you have. 

1082
01:16:37,720 --> 01:16:39,440
And. 
Now everyone knows that listens 

1083
01:16:39,440 --> 01:16:42,000
to this podcast. 
They know how hard creating a 

1084
01:16:42,000 --> 01:16:46,440
markdown library is. 
Yeah, it's no easy task like and

1085
01:16:46,440 --> 01:16:50,640
that's why maybe I, I mean, 
again, I should be talking more 

1086
01:16:50,640 --> 01:16:55,840
about those those problems 
because you know, it's really 

1087
01:16:55,840 --> 01:17:01,440
fun to solve those problems, but
it does take time and you know, 

1088
01:17:01,720 --> 01:17:04,520
I could be sharing more about 
this those problems. 

1089
01:17:05,040 --> 01:17:08,960
Yeah, yeah, I know it's good and
I'm glad that you're on on the 

1090
01:17:08,960 --> 01:17:12,760
podcast talking about it. 
And I just have to have you back

1091
01:17:12,760 --> 01:17:16,520
on more often to keep keep us 
updated on all your projects. 

1092
01:17:17,240 --> 01:17:22,000
Yeah, that would be nice because
like if I get the three seater, 

1093
01:17:22,240 --> 01:17:26,680
you know loom is alone has a 
bunch of complex like 3 seater 

1094
01:17:26,680 --> 01:17:30,400
Novi cleaning that we need to 
extract and now wasn't 

1095
01:17:30,400 --> 01:17:35,160
compilation, you know bunch of 
bunch of stuff happening there. 

1096
01:17:36,040 --> 01:17:41,000
So you can so you can just to 
have like nice colors. 

1097
01:17:41,160 --> 01:17:46,280
The source code you know the the
the output seems simple but the 

1098
01:17:46,440 --> 01:17:49,720
out engineering for is the hard 
part. 

1099
01:17:49,920 --> 01:18:00,520
Yeah, for sure. 
And for for MDX, you know, MDX 

1100
01:18:00,520 --> 01:18:07,080
has other features as well, but 
the main, one of the main 

1101
01:18:07,080 --> 01:18:10,600
concerns is also the 
performance. 

1102
01:18:11,560 --> 01:18:16,800
We, we had this problem back in 
the day with Beacon because if 

1103
01:18:17,280 --> 01:18:21,960
because we had to compile a 
bunch of pages at the same time,

1104
01:18:22,920 --> 01:18:24,800
right? 
So if you take like a second, 

1105
01:18:25,880 --> 01:18:30,600
like a second to compile a page,
compile, I mean from markdown to

1106
01:18:30,600 --> 01:18:35,560
HTML to live view. 
If you take a second or two or 

1107
01:18:35,560 --> 01:18:39,840
whatever and you have like 100 
or 1000 pages, performance 

1108
01:18:39,840 --> 01:18:43,040
matters. 
And that was one of the reasons 

1109
01:18:43,200 --> 01:18:49,160
I chose Korac as well because 
you know, on a benchmark it's 

1110
01:18:49,200 --> 01:18:54,560
way, way faster than any other 
Elixir library. 

1111
01:18:55,240 --> 01:18:59,280
And and Korac is not even the 
fastest implementation. 

1112
01:18:59,520 --> 01:19:05,280
There are others way even more 
faster than than Korac, but 

1113
01:19:05,280 --> 01:19:08,720
conrac is is fast is fastest, 
you know. 

1114
01:19:09,640 --> 01:19:12,400
So what's the fastest? 
Like breaking down to like AC 

1115
01:19:12,400 --> 01:19:14,480
language or something like that 
or getting. 

1116
01:19:15,560 --> 01:19:19,520
Yeah, there is. 
I mean again there's there's the

1117
01:19:19,640 --> 01:19:24,920
I mean there is a pull down C 
mark, which I believe is faster 

1118
01:19:24,920 --> 01:19:31,120
than Conrac, OK. 
There is also Med for C which is

1119
01:19:31,120 --> 01:19:35,800
marked down for C It's also 
really really fast. 

1120
01:19:36,680 --> 01:19:40,040
But the problem is correct. 
It was the only one that had 

1121
01:19:40,040 --> 01:19:46,360
extensions that I could support 
GitHub and like discord, flavor 

1122
01:19:46,360 --> 01:19:51,240
markdown, GitLab as well. 
And the IT had extensions so I 

1123
01:19:51,240 --> 01:19:55,080
could plug in a syntex 
highlighter and a bunch of other

1124
01:19:55,080 --> 01:19:59,240
stuff. 
So and since the outer used to 

1125
01:19:59,240 --> 01:20:02,480
work. 
On the specification, the GitHub

1126
01:20:02,480 --> 01:20:06,440
specification and now working on
the GitLab specification. 

1127
01:20:08,160 --> 01:20:10,720
I mean, they, they, they really 
know how it works. 

1128
01:20:10,840 --> 01:20:13,120
So they have hands on 
experience. 

1129
01:20:13,640 --> 01:20:18,840
So it was the safest choice. 
And I was glad to yeah. 

1130
01:20:19,560 --> 01:20:24,920
And I was glad to know they, the
rest team chose correct to 

1131
01:20:24,920 --> 01:20:27,440
generate the the documentation 
as well. 

1132
01:20:27,440 --> 01:20:32,440
So there was like a, you know, 
prove the the chart that you 

1133
01:20:32,440 --> 01:20:35,800
know, that was a good choice. 
Yeah, cool. 

1134
01:20:38,160 --> 01:20:41,280
Well, but I, I really appreciate
you coming on and talking about 

1135
01:20:41,680 --> 01:20:45,240
MDXI think we can like slowly 
start to wrap this up, but we 

1136
01:20:45,240 --> 01:20:49,280
have a pretty good question and 
I think both of us can answer. 

1137
01:20:49,280 --> 01:20:51,880
It has nothing to do with what 
we were talking about, but I 

1138
01:20:51,880 --> 01:20:56,120
feel like we've both been on 
this developer journey. 

1139
01:20:56,480 --> 01:21:00,960
And so Desmond asks, how has the
journey been transitioning from 

1140
01:21:00,960 --> 01:21:03,320
a junior to mid, then senior 
dev? 

1141
01:21:03,720 --> 01:21:06,200
Did you have mentors along the 
way? 

1142
01:21:06,600 --> 01:21:09,520
And then how about like coding 
in multiple languages? 

1143
01:21:12,360 --> 01:21:16,040
Oh yeah, that's a really. 
I mean, we could record a 

1144
01:21:16,040 --> 01:21:18,040
podcast just. 
I know we really could. 

1145
01:21:19,080 --> 01:21:21,880
We could I'll, I'll give it a 
stab. 

1146
01:21:22,000 --> 01:21:25,160
I, I think one, it's really 
important to have mentors, 

1147
01:21:25,160 --> 01:21:26,600
right? 
You need to work with people 

1148
01:21:26,600 --> 01:21:31,320
that are smarter than you and, 
but also support you like 

1149
01:21:31,400 --> 01:21:34,640
learning and kind of like trust 
in your ability to learn and 

1150
01:21:34,640 --> 01:21:38,760
produce, right. 
And I would say if I were to 

1151
01:21:38,760 --> 01:21:42,440
think back when I first started,
I was a very junior developer. 

1152
01:21:42,440 --> 01:21:46,080
I was mostly like an iOS 
developer dipping my toes into 

1153
01:21:46,200 --> 01:21:48,800
like node JS and some back end 
API stuff. 

1154
01:21:49,680 --> 01:21:53,880
And the second I kind of felt 
like I could build a full app, 

1155
01:21:53,880 --> 01:21:56,240
right? 
I can do the front end app work 

1156
01:21:56,480 --> 01:22:01,360
and the back end rest APII was 
really cocky and thought like I 

1157
01:22:01,360 --> 01:22:04,840
knew everything. 
And I think like I talk about it

1158
01:22:04,840 --> 01:22:07,320
a lot on this podcast, but the 
Dunning Kruger curve. 

1159
01:22:08,760 --> 01:22:11,840
I think juniors have a really 
good habit of once they feel 

1160
01:22:11,840 --> 01:22:14,160
like they can build a whole app,
you're at the top of mount 

1161
01:22:14,160 --> 01:22:17,280
stupid, but you like you feel 
like you could like conquer the 

1162
01:22:17,280 --> 01:22:19,720
world, right? 
And then you Start learning 

1163
01:22:19,720 --> 01:22:21,680
about like security 
vulnerabilities. 

1164
01:22:21,680 --> 01:22:25,000
Your app might have gotten 
hacked and yet you fall down 

1165
01:22:25,000 --> 01:22:26,840
real quick and you're like 
humbled. 

1166
01:22:27,560 --> 01:22:31,640
And then from that point on, I 
would say you start becoming mid

1167
01:22:31,640 --> 01:22:33,960
and you slowly are building your
way up to a senior. 

1168
01:22:34,320 --> 01:22:40,840
But you always know how much 
more you don't know the more you

1169
01:22:40,840 --> 01:22:42,960
learn, right? 
So I feel like you're always on 

1170
01:22:42,960 --> 01:22:45,720
this chase to know it all and 
it's impossible. 

1171
01:22:45,720 --> 01:22:48,680
You never will. 
Yeah, it's it's interesting 

1172
01:22:48,680 --> 01:22:52,080
because when you are junior, you
don't know much you so you can 

1173
01:22:52,280 --> 01:22:56,360
you can not do much yet. 
And then you Start learning and 

1174
01:22:56,360 --> 01:23:00,040
then you start producing a lot 
of code, a lot of stuff. 

1175
01:23:00,560 --> 01:23:04,000
And then when you are the middle
is like you are on the top of 

1176
01:23:04,000 --> 01:23:09,080
the curve like over engineering 
everything, like writing a lot 

1177
01:23:09,080 --> 01:23:12,720
of stuff. 
And then senior for me is when 

1178
01:23:12,720 --> 01:23:17,840
you realize that you don't like 
cold is not the end goal like 

1179
01:23:18,240 --> 01:23:21,240
coding is just, you know, part 
of the process. 

1180
01:23:21,680 --> 01:23:24,960
And then removing code is 
actually better than adding 

1181
01:23:24,960 --> 01:23:29,440
code, which is kind of the 
opposite when you're learning. 

1182
01:23:29,880 --> 01:23:33,200
But there is this difference 
when you get into like more 

1183
01:23:33,200 --> 01:23:39,240
senior position and it. 
Becomes the simplest solution as

1184
01:23:39,240 --> 01:23:42,080
the best solution, not the over 
engineered like. 

1185
01:23:42,080 --> 01:23:46,360
I feel like there's a weird 
thing and among engineers, not 

1186
01:23:46,360 --> 01:23:50,960
just software engineers, but 
you, you want to like flex, how 

1187
01:23:50,960 --> 01:23:53,720
smart you are with a real 
complex solution. 

1188
01:23:53,880 --> 01:23:56,240
And that's the last thing you 
want in your code base is a 

1189
01:23:56,240 --> 01:23:59,200
complex solution. 
You want the simplest version of

1190
01:23:59,200 --> 01:24:01,080
that solution. 
Yeah. 

1191
01:24:01,360 --> 01:24:04,680
And two more things. 
One about mentorship is it's 

1192
01:24:04,680 --> 01:24:07,480
really, really good to have 
mentorship, but don't wait for 

1193
01:24:07,640 --> 01:24:11,000
mentorship. 
You have to build something like

1194
01:24:11,120 --> 01:24:13,600
yeah, you don't need, you don't 
need permission to build 

1195
01:24:13,600 --> 01:24:15,280
something. 
You can just build something, 

1196
01:24:15,680 --> 01:24:19,920
publish like just you know, 
that's true for our concerns, 

1197
01:24:19,920 --> 01:24:21,760
for mentorship. 
Don't wait. 

1198
01:24:22,200 --> 01:24:25,440
Just go and build something. 
Yeah, like I was really 

1199
01:24:25,440 --> 01:24:27,800
fortunate. 
Like I, I worked like, you know,

1200
01:24:27,800 --> 01:24:32,760
I like my first developer job. 
I just was like, you know, the 

1201
01:24:32,800 --> 01:24:35,760
CEO liked me, he liked my drive 
and motivation. 

1202
01:24:35,760 --> 01:24:39,120
So I kind of like luckily fell 
into that and had like a really 

1203
01:24:39,120 --> 01:24:42,760
good mentor there. 
But at the same time, like if 

1204
01:24:42,760 --> 01:24:45,960
you don't have that, say you 
don't have a dev job, but you 

1205
01:24:45,960 --> 01:24:50,600
have a, an idea, build that. 
And then, you know, watch 

1206
01:24:50,800 --> 01:24:54,720
podcasts like this, watch my 
tutorials, follow other people 

1207
01:24:54,720 --> 01:24:56,880
building stuff in the Elixir 
community. 

1208
01:24:57,080 --> 01:25:00,160
And those people become your 
mentors and you can learn from 

1209
01:25:00,160 --> 01:25:02,640
them 'cause they, they'll post 
about either what they're 

1210
01:25:02,640 --> 01:25:05,200
building, maybe a mistake that 
they made. 

1211
01:25:05,240 --> 01:25:08,920
And like so you have it, you're 
just acquiring it a little 

1212
01:25:08,920 --> 01:25:12,600
differently. 
Yeah, and don't be afraid to do 

1213
01:25:12,600 --> 01:25:17,880
this stuff like 2019. 
I had a talk at Elixir Conf and 

1214
01:25:17,880 --> 01:25:22,600
the talk start with a mistake I 
made like really, really hooky 

1215
01:25:22,600 --> 01:25:27,560
mistake. 
I was trying to contribute just 

1216
01:25:27,560 --> 01:25:32,280
a fix on the documentation on on
their Airlink and I completely 

1217
01:25:32,280 --> 01:25:36,560
messed up the geek, you know, 
the geek branches or whatever. 

1218
01:25:37,200 --> 01:25:42,040
It was like a really rookie 
mistake and like it happens. 

1219
01:25:42,240 --> 01:25:45,400
And that was part of my talk 
because I was trying to say, 

1220
01:25:45,400 --> 01:25:49,800
hey, just go and do stuff and. 
You know, just. 

1221
01:25:50,080 --> 01:25:53,080
Don't don't need to wait. 
And you know, some, sometimes 

1222
01:25:53,080 --> 01:25:56,520
something bad happens, but it's,
it's fine. 

1223
01:25:57,480 --> 01:26:00,800
Yeah, I mean, it doesn't matter 
where you are on your career. 

1224
01:26:00,800 --> 01:26:04,960
Like you can be a staff level 
engineer and you're still going 

1225
01:26:04,960 --> 01:26:06,760
to run into things you've never 
seen before. 

1226
01:26:08,080 --> 01:26:10,960
Yeah. 
I feel like what makes what what

1227
01:26:10,960 --> 01:26:14,280
levels up an engineer is the 
ability to solve a problem that 

1228
01:26:14,280 --> 01:26:16,440
they've never seen before, you 
know? 

1229
01:26:16,840 --> 01:26:21,680
Yeah, yeah, it's I feel like 
that now working with me was me 

1230
01:26:22,240 --> 01:26:27,680
stuff like I I have been reading
about was me for a long time, 

1231
01:26:27,680 --> 01:26:30,360
but never use it. 
So now I I feel like a junior 

1232
01:26:30,440 --> 01:26:34,120
working was me because that's 
new to me, right. 

1233
01:26:34,200 --> 01:26:39,920
And that's, that's, that's fine.
Yeah, I mean, I'm so like to go 

1234
01:26:39,920 --> 01:26:42,640
on his like, what about coding 
in multiple languages? 

1235
01:26:43,080 --> 01:26:46,560
I feel like the the basic 
principles of programming, 

1236
01:26:46,560 --> 01:26:49,640
they're all the same. 
You're just changing syntax 

1237
01:26:49,640 --> 01:26:52,480
essentially, right? 
I mean object oriented 

1238
01:26:52,480 --> 01:26:55,800
programming versus functional 
and immutable obviously have 

1239
01:26:55,800 --> 01:26:58,840
their differences but for the 
most part like writing a 

1240
01:26:58,840 --> 01:27:05,000
programming language comes down 
to syntax and I context switch a

1241
01:27:05,000 --> 01:27:08,320
lot less. 
Now I write a lot of Elixir and 

1242
01:27:08,520 --> 01:27:11,160
a little bit of JavaScript. 
I don't do a lot of other things

1243
01:27:11,160 --> 01:27:15,720
anymore, but when I was jumping 
between like Swift, JavaScript, 

1244
01:27:16,200 --> 01:27:20,280
C#, an that was the at the 
beginning and like, I learned a 

1245
01:27:20,280 --> 01:27:21,560
lot. 
I'm real thankful. 

1246
01:27:21,560 --> 01:27:25,640
But it, it, it wears on you, but
at the same time you just end up

1247
01:27:25,640 --> 01:27:29,720
like I like, I would like forget
how to do like for loops in 

1248
01:27:29,920 --> 01:27:31,880
languages, right? 
Because I was so I had like 

1249
01:27:31,880 --> 01:27:35,720
Google syntax all the time. 
But like for the most part, like

1250
01:27:35,720 --> 01:27:39,360
the concept of programming is 
relatively the same between all 

1251
01:27:39,360 --> 01:27:40,800
languages. 
You just will. 

1252
01:27:41,520 --> 01:27:44,840
You just have to remember the 
syntax or like the language you 

1253
01:27:44,840 --> 01:27:48,280
know. 
Understand the fundamentals and 

1254
01:27:48,280 --> 01:27:50,640
you'll be fine. 
You can jump into another 

1255
01:27:50,640 --> 01:27:55,320
language and you'll be fine. 
I guess for me the the hardest 

1256
01:27:55,320 --> 01:27:59,160
like move was from Ruby and 
Rails to Elixir. 

1257
01:27:59,640 --> 01:28:04,160
My first year or so working for 
Elixir I was still trying to 

1258
01:28:04,160 --> 01:28:08,360
write like objects, like an 
instance and state and using 

1259
01:28:08,360 --> 01:28:12,560
gene servers as a class. 
You know, that kind of, it was 

1260
01:28:12,600 --> 01:28:15,400
a, it was a mess. 
Coming from an object oriented 

1261
01:28:15,400 --> 01:28:18,400
programming language, like 
that's all I knew. 

1262
01:28:18,640 --> 01:28:20,680
And then I came to Elixir. 
It was hard. 

1263
01:28:20,800 --> 01:28:22,760
It's hard to change your 
mindset. 

1264
01:28:23,520 --> 01:28:26,280
Yeah. 
But also it once it clicks, it 

1265
01:28:26,360 --> 01:28:30,440
makes it's it's way easier I 
think. 

1266
01:28:30,720 --> 01:28:33,760
I believe like I have a feeling 
that Elixir is way easier than 

1267
01:28:33,760 --> 01:28:38,240
other languages, but you have 
first the functional program has

1268
01:28:38,360 --> 01:28:41,320
clicked on your mind first and 
then I. 

1269
01:28:41,320 --> 01:28:45,520
Just if you started with it, 
that's how your brain works 

1270
01:28:45,520 --> 01:28:47,160
solving problems naturally, 
right? 

1271
01:28:47,160 --> 01:28:50,200
Like you kind of transform a 
thing and pass it along. 

1272
01:28:50,800 --> 01:28:54,160
But once you have objects 
oriented cloud in your brain, 

1273
01:28:54,400 --> 01:28:57,520
it's hard to go back to that and
relearn that that way of. 

1274
01:28:57,520 --> 01:29:02,320
Thinking yeah, but if you start 
with functional programming you 

1275
01:29:02,320 --> 01:29:05,280
have to learn Ruby shack 
oriented program as well because

1276
01:29:05,560 --> 01:29:08,680
you become a better better 
engineer when you understand 

1277
01:29:08,680 --> 01:29:10,640
both they are. 
Completely. 

1278
01:29:10,920 --> 01:29:13,960
They're not. 
It's not an alternative to 1 to 

1279
01:29:13,960 --> 01:29:15,200
the. 
No, you can. 

1280
01:29:15,320 --> 01:29:17,480
You can learn from both and use 
both. 

1281
01:29:18,160 --> 01:29:20,840
I agree depend on the language 
but the concept. 

1282
01:29:20,840 --> 01:29:23,560
The idea is you have you need to
move. 

1283
01:29:24,560 --> 01:29:28,200
Yeah, well, like just the idea. 
Well, when you're in the object 

1284
01:29:28,200 --> 01:29:31,920
oriented world, you have a lot 
more architectural patterns, 

1285
01:29:31,920 --> 01:29:34,760
right? 
And you know, you learn about 

1286
01:29:34,760 --> 01:29:39,720
like singletons and you can pass
state around and objects and you

1287
01:29:39,720 --> 01:29:44,520
know it has its superpowers, but
it also leads to a lot of really

1288
01:29:44,520 --> 01:29:49,840
hard traceable bugs. 
Yeah, that that's one thing with

1289
01:29:49,840 --> 01:29:53,520
functional programming, at least
for me, it leads to a simple 

1290
01:29:53,520 --> 01:29:57,160
code way more than object 
program, Yeah. 

1291
01:29:57,320 --> 01:29:59,360
It sets you up to write clean 
code. 

1292
01:30:00,920 --> 01:30:02,760
Yeah. 
And think of not in the sense of

1293
01:30:02,760 --> 01:30:08,480
like the clean organization 
style, like I mean clean coding,

1294
01:30:08,480 --> 01:30:11,440
like writing less. 
Code like the simplest. 

1295
01:30:11,520 --> 01:30:13,280
Yeah, the less code. 
Simplest. 

1296
01:30:13,320 --> 01:30:16,040
Yeah. 
Simplest approach to a solution,

1297
01:30:16,120 --> 01:30:18,920
right? 
Yeah, and I'm not. 

1298
01:30:19,000 --> 01:30:23,600
Yeah, that reminds me of another
stuff like when I was every time

1299
01:30:23,600 --> 01:30:26,280
I tried to contribute something,
I tried to learn from the 

1300
01:30:26,280 --> 01:30:29,520
maintainer. 
And you can learn from people 

1301
01:30:29,520 --> 01:30:32,400
like Joseph Alim, Charisma Card 
and others. 

1302
01:30:33,240 --> 01:30:37,120
They have like a really good 
approach about, you know, 

1303
01:30:37,680 --> 01:30:41,480
thinking design and, you know, 
realizing what is needed and 

1304
01:30:41,480 --> 01:30:44,960
what is not needed, which is 
probably more important. 

1305
01:30:45,640 --> 01:30:48,800
And then you can learn. 
And I see that, you know those 

1306
01:30:48,840 --> 01:30:52,680
guys, they try to make the most 
simple solution and the most 

1307
01:30:52,680 --> 01:30:56,800
effective one, which is really, 
really hard, but you can learn. 

1308
01:30:57,680 --> 01:31:01,560
Yeah, I think it's harder to 
know what solutions shouldn't 

1309
01:31:01,560 --> 01:31:05,720
even be brought into a 
conversation to like, you know, 

1310
01:31:05,720 --> 01:31:09,640
how many features get thrown at 
any kind of like open source 

1311
01:31:09,640 --> 01:31:13,600
project or language or anything,
honestly, even like even if 

1312
01:31:13,600 --> 01:31:16,640
you're building a SAS product, 
right, you know how many feature

1313
01:31:16,640 --> 01:31:20,440
requests you're going to get and
the ability to know what 

1314
01:31:20,520 --> 01:31:24,000
strengthens your product versus 
what, doesn't it? 

1315
01:31:24,320 --> 01:31:26,200
I think that's the probably the 
hardest piece. 

1316
01:31:26,920 --> 01:31:31,960
Yeah, the the balance of, you 
know, the amount of code you 

1317
01:31:31,960 --> 01:31:37,280
need to write to support new 
features because the code has to

1318
01:31:37,280 --> 01:31:42,280
be flexible enough to grow and 
support new features, but not 

1319
01:31:42,280 --> 01:31:45,800
over complex. 
So this balance is really, 

1320
01:31:45,800 --> 01:31:48,760
really hard to get. 
You know, you have to write just

1321
01:31:48,760 --> 01:31:54,520
the minimum amount of code that 
is flexible, scarce enough to 

1322
01:31:54,520 --> 01:31:57,840
continue. 
But that's really hard to do 

1323
01:31:57,880 --> 01:32:01,120
that. 
I don't know if there's formal 

1324
01:32:01,120 --> 01:32:05,640
education on that, but at least 
for me that was like like years 

1325
01:32:05,640 --> 01:32:10,200
of experience, making mistakes, 
really time. 

1326
01:32:10,200 --> 01:32:13,240
In the saddle, making mistakes 
and learning from them. 

1327
01:32:13,240 --> 01:32:20,640
Like I I think my most like 
leveling up events in my life 

1328
01:32:20,640 --> 01:32:26,600
were really bad mistakes. 
Yeah, you, you can learn from 

1329
01:32:26,600 --> 01:32:29,960
manufacturing. 
Or hearing about other people's 

1330
01:32:29,960 --> 01:32:35,520
mistakes, like I just had Thomas
from level all on and you know, 

1331
01:32:35,560 --> 01:32:41,120
staff level engineer, like super
smart guy and they just had like

1332
01:32:41,120 --> 01:32:46,560
a rate limiting issue with Oauth
and like so all their users 

1333
01:32:46,560 --> 01:32:49,920
couldn't use their platform all 
of a sudden. 

1334
01:32:50,160 --> 01:32:52,320
And it's like one of those 
things where you don't think 

1335
01:32:52,320 --> 01:32:56,880
about and like they, they have 
like a school system platform, 

1336
01:32:56,880 --> 01:32:58,160
right? 
A learning platform. 

1337
01:32:58,560 --> 01:33:01,960
And all the students from a 
school district were on the same

1338
01:33:01,960 --> 01:33:05,480
IP address. 
And so they, they hit a problem 

1339
01:33:05,480 --> 01:33:08,240
that they never knew they had 
because they were hitting a rate

1340
01:33:08,240 --> 01:33:12,000
limit on authentication. 
And that's just like things like

1341
01:33:12,000 --> 01:33:14,320
that. 
Yeah, that's another way to 

1342
01:33:14,320 --> 01:33:21,000
learn is exposure to real world 
situations like, and you know, 

1343
01:33:21,160 --> 01:33:24,160
if you're a junior, you're not 
going to have so much exposure, 

1344
01:33:24,160 --> 01:33:28,440
but you can like other people do
and you can learn from them. 

1345
01:33:28,440 --> 01:33:30,600
And then you grow, you keep 
going. 

1346
01:33:30,960 --> 01:33:35,120
And as you get more exposure and
that's where you you learn. 

1347
01:33:35,640 --> 01:33:40,080
So more conversations and like 
meetups are really important. 

1348
01:33:40,080 --> 01:33:43,120
Go meet people, talk about your 
projects, talk about your 

1349
01:33:43,120 --> 01:33:45,760
problems. 
And you know 9 times out of 10 

1350
01:33:45,760 --> 01:33:49,840
someone else in that room that's
listening already have the same 

1351
01:33:49,840 --> 01:33:52,560
problem you're experiencing and 
they can tell you how they 

1352
01:33:52,560 --> 01:33:55,760
solved it. 
Yeah, we have a really good 

1353
01:33:56,720 --> 01:34:02,680
elixir Metap nearby in Toronto 
and they, you know, we have 

1354
01:34:02,680 --> 01:34:05,680
metaps, I don't know, twice a 
year, maybe not. 

1355
01:34:05,800 --> 01:34:09,080
It's not so frequent, but every 
time it's, you know, packing 

1356
01:34:09,080 --> 01:34:12,240
with a lot of people and really 
good talks. 

1357
01:34:12,240 --> 01:34:16,640
It's another way that you can, 
you know, you can, you can also 

1358
01:34:16,800 --> 01:34:20,720
share like you can give a talk 
in the meet up if you, you know,

1359
01:34:20,840 --> 01:34:24,840
if you feel like it's another 
way to, I feel it's like another

1360
01:34:24,840 --> 01:34:29,560
way to learn as well is sharing 
about what you know, sharing 

1361
01:34:29,560 --> 01:34:33,680
about your experience. 
So yeah, there are many ways to 

1362
01:34:33,680 --> 01:34:38,480
grow in the career, but yeah, 
it's a very long. 

1363
01:34:38,920 --> 01:34:40,880
Talk. 
Yeah, you just got to keep doing

1364
01:34:40,880 --> 01:34:42,960
it, keep showing up every day, 
right? 

1365
01:34:42,960 --> 01:34:45,640
And then eventually, before you 
know it, you're like, wow, I've 

1366
01:34:45,640 --> 01:34:48,720
learned a lot and I still don't 
know a lot. 

1367
01:34:48,920 --> 01:34:51,160
And you just kind of have to 
accept that. 

1368
01:34:51,160 --> 01:34:53,840
And then you just. 
That's it. 

1369
01:34:53,840 --> 01:34:56,120
Yeah, it yeah. 
It's impossible to know 

1370
01:34:56,360 --> 01:34:59,160
everything. 
If someone says he knows 

1371
01:34:59,160 --> 01:35:01,920
everything, he's lying because 
it's impossible. 

1372
01:35:02,040 --> 01:35:03,840
I'm going to tell you where he 
is right now. 

1373
01:35:03,840 --> 01:35:08,360
He's on the top of the Dunning 
Crew Kruger curve if someone 

1374
01:35:08,360 --> 01:35:12,880
claims to know it all. 
Yeah, yeah. 

1375
01:35:12,960 --> 01:35:15,800
We are always learning. 
For sure. 

1376
01:35:15,880 --> 01:35:20,360
Absolutely. 
All right, Leandro, thank you so

1377
01:35:20,360 --> 01:35:24,720
much for joining me. 
This was a fun conversation as 

1378
01:35:24,720 --> 01:35:26,920
always. 
And yeah, anytime you want to 

1379
01:35:26,920 --> 01:35:28,480
come back on, just please reach 
out. 

1380
01:35:29,520 --> 01:35:34,360
Yeah, thank you for having me. 
Thanks to everyone for tuning in

1381
01:35:34,360 --> 01:35:37,120
and listening, I appreciate it 
and hope you guys have a good 

1382
01:35:37,120 --> 01:35:42,840
weekend testing.
