رونوشت 🔗
WEBVTT
1
00:00:04.919 --> 00:00:09.080
Welcome back to another episode of JavaScript Jabber. This week,
2
00:00:09.119 --> 00:00:10.759
on our panel, we have Dan Shapire.
3
00:00:11.599 --> 00:00:15.720
Hello from a freezing wintry tel Aviv, sixty degrees fahrenheit.
4
00:00:16.039 --> 00:00:17.199
Thank you for rubbing that in.
5
00:00:17.960 --> 00:00:20.120
I know, I think it's below freezing here. We also
6
00:00:20.120 --> 00:00:21.440
have Steve Edwards.
7
00:00:21.719 --> 00:00:24.679
Yo yo yo, coming at you from a slightly warmer
8
00:00:24.800 --> 00:00:27.440
now Oregon, where we really need snow.
9
00:00:29.120 --> 00:00:33.759
Yeah. Also, Steve, word is that you are currently looking
10
00:00:33.759 --> 00:00:35.439
for a Laravelle view job.
11
00:00:35.840 --> 00:00:37.840
Yes, something slnes would be nice.
12
00:00:39.119 --> 00:00:41.000
All right, So if you want to hire a Steve,
13
00:00:42.679 --> 00:00:43.479
get a hold of him.
14
00:00:45.039 --> 00:00:46.840
This particular Steve would be nice.
15
00:00:47.200 --> 00:00:50.560
That's right. Do you want to put like contact information
16
00:00:50.640 --> 00:00:51.039
out there?
17
00:00:52.960 --> 00:00:53.159
Yeah?
18
00:00:53.159 --> 00:00:55.039
I was gonna wait till shameless plugs at the end,
19
00:00:55.079 --> 00:00:58.000
but yeah, you can my infos on my GitHub at
20
00:00:58.039 --> 00:01:03.359
Wonder nine to five, same handle for Twitter. It was
21
00:01:03.359 --> 00:01:05.200
probably the best way to get old Steve at s
22
00:01:05.359 --> 00:01:06.799
mg a web dot com.
23
00:01:08.000 --> 00:01:09.920
Cool. I just want to make sure that yeah, people
24
00:01:09.959 --> 00:01:11.480
hear it and they can reach you if they need to.
25
00:01:12.239 --> 00:01:16.200
I'm Charles Maxwood from Top End Devs And this week
26
00:01:16.280 --> 00:01:18.760
we have a special guest. We have Matteo Colina.
27
00:01:19.519 --> 00:01:24.599
Hello, I folks, Hey, Hi from for Lee Italy. It's
28
00:01:24.719 --> 00:01:28.040
been a rainy day here and I'm staying it home.
29
00:01:28.760 --> 00:01:33.719
I didn't know you. I've been to for Lee.
30
00:01:34.079 --> 00:01:36.799
Really like not you won't even know that is where
31
00:01:36.799 --> 00:01:37.680
he's on the map.
32
00:01:39.840 --> 00:01:44.439
Yeah, Pasatoduani in Italia. I was a missionary in Italy
33
00:01:44.480 --> 00:01:47.400
and yeah, so I've been to for Lee and Remini
34
00:01:47.439 --> 00:01:50.560
and wow, I lived in Oncona for like six months
35
00:01:50.599 --> 00:01:53.359
so yeah, wow, Oh so you know.
36
00:01:53.840 --> 00:01:56.319
And we and we, my wife and I passed really
37
00:01:56.359 --> 00:02:00.280
close by just when Matteo happened to be in London. Yes,
38
00:02:00.560 --> 00:02:02.879
so we unfortunately kind of missed each other.
39
00:02:03.719 --> 00:02:05.719
That would been a rag.
40
00:02:06.000 --> 00:02:11.759
But my calendar these days during conferences and is close
41
00:02:11.800 -->
Load full transcript
00:02:12.439
to a nightmare.
42
00:02:13.159 --> 00:02:15.360
Well, all I can say is will probably be in
43
00:02:15.400 --> 00:02:19.439
Italy again because we love Italy, and next time hopefully
44
00:02:19.479 --> 00:02:21.319
we'll be able to actually meet.
45
00:02:23.800 --> 00:02:26.080
Yeah, I would love to go back. We had a
46
00:02:26.120 --> 00:02:28.879
foreign exchange student who also lives in Oncona and so
47
00:02:29.240 --> 00:02:32.879
we'd like to see her and her baby. So anyway,
48
00:02:33.879 --> 00:02:36.680
what are we talking about that's not travel tech or
49
00:02:37.280 --> 00:02:38.479
Steve needs a job.
50
00:02:39.599 --> 00:02:42.280
Today we're talking a little bit about the latest thing
51
00:02:42.599 --> 00:02:48.360
in platformatic my company, and not j yes, I think
52
00:02:49.719 --> 00:02:53.080
maybe with some ais pist in it, because you know,
53
00:02:53.120 --> 00:02:54.199
everything is AI today.
54
00:02:54.319 --> 00:02:56.919
Yeah, a lot of our listeners may not be familiar
55
00:02:56.919 --> 00:03:00.039
with Platformatic, but I think that if you're doing a
56
00:03:00.199 --> 00:03:03.000
think with notes, there's a good chance that you're probably
57
00:03:03.080 --> 00:03:05.240
using at least one thing from Platformatic.
58
00:03:05.479 --> 00:03:08.960
Like it's absolutely at this point, I think you're using
59
00:03:09.000 --> 00:03:13.800
something from from Platformatic close to one hundred percent. Okay,
60
00:03:14.000 --> 00:03:19.879
it's as I say, last year, I touched forty two
61
00:03:20.240 --> 00:03:24.599
a billion downloads on NPM some some some impossible numbers
62
00:03:24.639 --> 00:03:24.919
like that.
63
00:03:25.599 --> 00:03:27.520
So this is the state.
64
00:03:28.960 --> 00:03:31.800
So like every man, woman and child on this planet
65
00:03:31.919 --> 00:03:36.000
is downloading stuff on Platformatic like ten times a year.
66
00:03:36.039 --> 00:03:36.800
I have no idea.
67
00:03:36.879 --> 00:03:40.960
Yeah, at this point, it's it's it's it's it's everywhere.
68
00:03:41.039 --> 00:03:44.879
As I say, I am in everybody Dependency three.
69
00:03:45.360 --> 00:03:47.280
So I am the Nebraska man. I'm joking.
70
00:03:51.280 --> 00:03:53.240
Okay, I thought it was just your mom over there
71
00:03:53.360 --> 00:03:55.280
NPM installed Platformatic stuff.
72
00:03:55.479 --> 00:03:57.639
Look, that can be possible. You know.
73
00:03:58.000 --> 00:04:01.280
I fixed that laptop for for christ So that was
74
00:04:01.280 --> 00:04:01.680
the gift.
75
00:04:02.280 --> 00:04:02.800
There you go.
76
00:04:04.039 --> 00:04:06.039
So it's the one time over the over the year
77
00:04:06.120 --> 00:04:10.680
that somebody can ask me to fix a computer over Christmas.
78
00:04:11.680 --> 00:04:12.400
The tech support.
79
00:04:13.680 --> 00:04:17.680
It's it's it's it's something that everybody does. So so
80
00:04:17.800 --> 00:04:22.639
true talking about things we have since the
last time
81
00:04:22.759 --> 00:04:27.519
was year so what we have released a few benchmarks
82
00:04:27.560 --> 00:04:34.319
okay that I think are pretty relevant for everybody to
83
00:04:35.399 --> 00:04:38.399
look at. So let me just get them and so
84
00:04:38.439 --> 00:04:43.120
that we can discuss them. I'm going to pass them.
85
00:04:43.040 --> 00:04:46.199
While you do. I was. I want to emphasize that
86
00:04:46.240 --> 00:04:51.199
while I was obviously somewhat kidding before, it is absolutely
87
00:04:51.240 --> 00:04:53.759
true that I kind of considue you to be sort
88
00:04:53.759 --> 00:04:57.360
of mister no JS, especially now that Ryan Dalla has
89
00:04:57.439 --> 00:04:58.920
moved on to other things.
90
00:04:59.800 --> 00:05:05.519
H It's well, I have been since this summer. I've
91
00:05:05.560 --> 00:05:09.560
been nominated the chair of the no JS project. So wow,
92
00:05:10.120 --> 00:05:13.240
I am effectively running the thing.
93
00:05:14.720 --> 00:05:17.560
Wow. I didn't even know that. Wow, that's pretty.
94
00:05:17.439 --> 00:05:23.399
It's an honor. Let's put it this way. It's an honor.
95
00:05:23.560 --> 00:05:26.439
Yeah, we talked about it slightly before we started the
96
00:05:26.480 --> 00:05:30.959
show officially that I'm I'm you know, Node is not new,
97
00:05:31.399 --> 00:05:35.560
obviously it's been around for a while, but I'm I'm
98
00:05:35.639 --> 00:05:41.199
seeing Node usage actually increasing. A lot of organizations that
99
00:05:41.240 --> 00:05:44.360
have previously been using other technologies for the back end
100
00:05:45.040 --> 00:05:48.879
are adopting Node as their go to technology for back
101
00:05:49.000 --> 00:05:52.279
end stuff. I don't know if it's because of the
102
00:05:52.399 --> 00:05:57.480
Lambda functions and stuff like that, or it's because you know,
103
00:05:57.600 --> 00:06:02.920
all the meta framework out there, Next JS and ten
104
00:06:03.000 --> 00:06:06.319
stack and whatnot. I don't know. Maybe it's like everything together,
105
00:06:06.879 --> 00:06:11.560
but I'm definitely seeing no JS technology usage pickup a
106
00:06:11.560 --> 00:06:15.040
lot of companies. Like I was speaking at this conference
107
00:06:15.079 --> 00:06:18.839
in Israel, and like every company that I was talking
108
00:06:18.879 --> 00:06:22.240
to was doing something with no JS on the back end.
109
00:06:23.240 --> 00:06:26.800
Yeah, it's everywhere, Okay, right now, if you want to
110
00:06:26.800 --> 00:06:28.879
build anything for the Web, you're using Note.
111
00:06:29.399 --> 00:06:32.959
If you're not using Note, you are probably.
112
00:06:32.560 --> 00:06:36.839
On a minority, and it's it might be good to
113
00:06:36.839 --> 00:06:40.319
be in a minority. But the mainstream stack right now
114
00:06:41.160 --> 00:06:45.480
is something React based plus no JS on the server.
115
00:06:48.079 --> 00:06:51.560
And I'm in the minority me too, I know.
116
00:06:52.000
--> 00:06:58.199
But you're probably using View. I've heard okay, Laravel Lvl, I.
117
00:06:58.160 --> 00:07:00.720
Would I would wonder, Okay, this is a how do
118
00:07:00.759 --> 00:07:03.800
you do server side rendering with view on Laavo.
119
00:07:04.879 --> 00:07:05.600
If you use.
120
00:07:05.879 --> 00:07:09.319
Inertia JS, which is something I'm a big fan of
121
00:07:09.360 --> 00:07:13.160
and I've talked about ad nauseum probably on here. Inertia
122
00:07:13.199 --> 00:07:15.680
has a service side rending capability. If you're using View
123
00:07:15.720 --> 00:07:18.560
with something like nuxt, it also has server side rending capability.
124
00:07:18.759 --> 00:07:21.600
Yeah, but then it's node right correct.
125
00:07:21.800 --> 00:07:24.399
Okay, point well, you asked how to do with view,
126
00:07:24.519 --> 00:07:25.600
so that's how No.
127
00:07:25.600 --> 00:07:27.879
No, But it's say with knox is node.
128
00:07:28.079 --> 00:07:28.240
Yes.
129
00:07:29.480 --> 00:07:33.000
Is the inertia not no, not JavaScript running somewhere.
130
00:07:33.240 --> 00:07:37.000
Inertia is real quick. Is basically a glue layer between
131
00:07:37.000 --> 00:07:38.399
your front and your back end that allows you to
132
00:07:38.399 --> 00:07:41.959
plug and play. So you could use View with Ruby,
133
00:07:42.000 --> 00:07:44.959
with Laravel, with Node, you could use you So you
134
00:07:44.959 --> 00:07:48.160
could use viewsvelt react Angular on the front end, and
135
00:07:48.240 --> 00:07:53.560
you could use laravl Node, Ruby on the back end
136
00:07:54.160 --> 00:07:59.199
in any combination. So it's just it's crazy fast. I
137
00:07:59.240 --> 00:08:01.879
have an application that I've built and maintained for a while,
138
00:08:01.879 --> 00:08:04.600
and it's just amazing how fast it is. It basically
139
00:08:04.720 --> 00:08:09.519
sort of hijacks the post request and the browser doesn't
140
00:08:09.519 --> 00:08:11.920
do a full reload. You passes some headers that tell it,
141
00:08:11.920 --> 00:08:14.639
hey don't do a full Perial railroad and communication between
142
00:08:14.639 --> 00:08:17.759
the two point being, to answer your question, if you
143
00:08:17.839 --> 00:08:21.279
go with inertia, there's service any capability.
144
00:08:21.360 --> 00:08:23.439
So if I want to do a Larrabell and view.
145
00:08:23.480 --> 00:08:26.279
Then I can do that like I am seeing. Okay,
146
00:08:26.319 --> 00:08:28.199
to be clear, I'm looking. I opened it up in
147
00:08:28.240 --> 00:08:30.240
a second and I'm showing me some not js.
148
00:08:33.879 --> 00:08:37.080
On Well, it's possible. I haven't used.
149
00:08:37.039 --> 00:08:39.399
It's like it's the way to do these kind of
150
00:08:39.440 --> 00:08:42.799
things typically is there is some no JS little notes
151
00:08:42.879 --> 00:08:45.200
thing running and doing the job.
152
00:08:45.279 --> 00:08:45.720
I don't know.
153
00:08:45.799 --> 00:08:50.759
It somewhere, okay, because in the problem is that with
154
00:08:50.879 --> 00:08:54.919
modern front and frameworks you need the areizomorphic. So you
155
00:08:55.039 --> 00:08:57.639
have the same Java skipt code that runs on the
156
00:08:57.639 --> 00:08:59.600
front and on the back end, and in order to
157
00:08:59.639 --> 00:09:03.960
do some side rendering you have to render it on
158
00:09:03.960 --> 00:09:04.559
on the back.
159
00:09:05.000 --> 00:09:05.559
Okay.
160
00:09:05.799 --> 00:09:08.360
So jovscripture on time on the back end.
161
00:09:08.559 --> 00:09:10.240
And you need a Java sleap run time on the
162
00:09:10.240 --> 00:09:11.840
back okay to.
163
00:09:11.840 --> 00:09:13.960
Do this it's underneath. Yeah, okay, I get you.
164
00:09:14.159 --> 00:09:15.559
So this is why I'm saying.
165
00:09:15.559 --> 00:09:17.320
This is the point of there is always some no
166
00:09:17.440 --> 00:09:21.120
JS everywhere in in In.
167
00:09:21.120 --> 00:09:23.840
And then kind and then PLATFORMA. They kind of flipped
168
00:09:23.840 --> 00:09:26.919
the script there where you kind of put WordPress and
169
00:09:27.000 --> 00:09:28.960
Narvel on top of note or something.
170
00:09:30.360 --> 00:09:33.399
Yes, So last last year we shaped a few experiments.
171
00:09:33.799 --> 00:09:37.639
We were able to run full pitchp inside no JS.
172
00:09:38.840 --> 00:09:42.480
It works really well. It's actually very performant, to be honest.
173
00:09:43.159 --> 00:09:49.360
So there is literally nothing stopped that kind of those
174
00:09:49.440 --> 00:09:55.159
kind of deployments. But it's let's see what the market says,
175
00:09:55.279 --> 00:09:58.720
and if there is, if they are attractive for the market,
176
00:09:58.799 --> 00:10:00.679
we will keep for showing those.
177
00:10:01.360 --> 00:10:03.120
Is it raging or something?
178
00:10:03.519 --> 00:10:04.519
No binaries.
179
00:10:05.120 --> 00:10:09.000
It is the actual PHP right high from the operating system.
180
00:10:09.159 --> 00:10:11.120
It's the same thing. It's it's the same hooks that
181
00:10:11.120 --> 00:10:11.879
the patchy uses.
182
00:10:12.919 --> 00:10:17.240
Hm hmm, Okay, now I understand what you're doing. That's interesting.
183
00:10:19.360 --> 00:10:22.399
So we were talking about benchmarking. Does how does this
184
00:10:22.519 --> 00:10:23.080
tie back in?
185
00:10:23.440 --> 00:10:30.039
Yeah, so we've been doing this is the benchmarks. Okay,
186
00:10:30.360 --> 00:10:32.720
we've done a few. I just wanted to point out
187
00:10:32.919 --> 00:10:38.519
chew one is and let's see where the chat is.
188
00:10:38.559 --> 00:10:40.600
Here is a chat.
189
00:10:41.679 --> 00:10:43.919
Yeah, there's a chat. It's on the right. It's got
190
00:10:43.919 --> 00:10:44.759
a little chat bubble.
191
00:10:44.799 --> 00:10:46.600
Okay, here we go. I'm passing in the chat. So
192
00:10:46.679 --> 00:10:48.879
this is one. I am passing it.
193
00:10:49.200 -->
00:10:57.639
The second one that we have done, and then I
194
00:10:57.679 --> 00:10:58.559
have a few more.
195
00:10:58.399 --> 00:10:59.080
To talk about.
196
00:10:59.240 --> 00:11:02.519
So the first one is we've done last year. It's
197
00:11:02.559 --> 00:11:08.799
a benchmark showing next JS performance. Okay, under very high traffic.
198
00:11:09.919 --> 00:11:13.279
So for Next, yes, so what happened, What is happening
199
00:11:13.600 --> 00:11:20.759
is we have done a lot of tests, okay, and
200
00:11:21.440 --> 00:11:25.519
it's with a lot of tests for example, with one
201
00:11:25.519 --> 00:11:29.360
thousand requests on per second for I mean, for a
202
00:11:29.399 --> 00:11:36.440
couple of minutes on against next JS and those were
203
00:11:36.519 --> 00:11:37.919
hitting essentially saturation.
204
00:11:38.039 --> 00:11:39.320
This was a hellower page.
205
00:11:39.720 --> 00:11:40.039
Okay.
206
00:11:40.519 --> 00:11:45.559
It's very normal for your system to go to if
207
00:11:45.600 --> 00:11:48.840
you're using Next or a React based server side system,
208
00:11:49.120 --> 00:11:53.840
to go between eight twenty, between eight and twenty maybe
209
00:11:53.919 --> 00:11:55.559
fifty requests per second at.
210
00:11:55.440 --> 00:11:56.720
Best, okay.
211
00:11:56.759 --> 00:11:59.279
If you have a very complex system like it's low
212
00:11:59.559 --> 00:12:05.720
okay in the genetic terms of things, okay. So the
213
00:12:06.039 --> 00:12:12.919
critical point okay of this was the success rate, but
214
00:12:13.039 --> 00:12:16.159
more important in the latency okay. The latency for this
215
00:12:16.279 --> 00:12:19.320
kind of system is very bad okay. And this is
216
00:12:19.360 --> 00:12:25.320
affecting a lot of companies out there, okay. And a
217
00:12:25.360 --> 00:12:32.519
good chunk of that problem is due to our scheduling
218
00:12:32.639 --> 00:12:39.679
is done of of multiple parts in kubernets okay, round robin. Unfortunately,
219
00:12:39.799 --> 00:12:43.279
it's it's not the best algorithm most of the time, okay,
220
00:12:44.399 --> 00:12:49.360
But the one that's the one we have. And last,
221
00:12:49.360 --> 00:12:53.200
but not least, there is the problem of event look blocking.
222
00:12:53.799 --> 00:12:55.360
Event look blocking it's critical.
223
00:12:56.039 --> 00:12:58.240
So if the if the event look blocks, then know
224
00:12:59.000 --> 00:13:06.679
the system becomes responsive after this, So it's it's it's problematic.
225
00:13:07.039 --> 00:13:10.200
But then the whole thing about note that the event
226
00:13:10.320 --> 00:13:12.960
loup is kind of never supposed to be blocked.
227
00:13:14.600 --> 00:13:22.039
Well, tell that to all the developers using React, like,
228
00:13:22.320 --> 00:13:26.000
that's the absolutely, that's the world point the idea. Yeah,
229
00:13:26.120 --> 00:13:26.919
that's the idea.
230
00:13:27.600 --> 00:13:35.159
But reacts over side rendering is super
expensive, okay, and
231
00:13:36.320 --> 00:13:37.840
it's super expensive.
232
00:13:37.759 --> 00:13:42.200
So yeah, a lot of string operations and stuff.
233
00:13:42.720 --> 00:13:45.559
No, it's a massive So basically what React does It
234
00:13:45.600 --> 00:13:48.799
creates a full virtual dam of all the elements in
235
00:13:48.840 --> 00:13:51.480
the page and then it stringifies that and you need
236
00:13:51.519 --> 00:13:54.960
to walk through a massive tree for every request.
237
00:13:55.080 --> 00:13:58.120
So this create a massive pressure on the GC as.
238
00:13:58.039 --> 00:14:01.399
Well as the computational cost of a locating of stringifying
239
00:14:01.399 --> 00:14:02.320
all of those elements.
240
00:14:02.639 --> 00:14:06.559
That's really unfortunate given that it then immediately discards that
241
00:14:06.759 --> 00:14:09.480
entire virtual dome exactly.
242
00:14:10.480 --> 00:14:13.279
You know why I've been a pretty like there is.
243
00:14:13.679 --> 00:14:16.200
The only framework that does better is solid I think
244
00:14:16.440 --> 00:14:18.279
is significantly better on the topic.
245
00:14:18.440 --> 00:14:22.000
Okay, maybe because it doesn't have a virtual dome.
246
00:14:23.360 --> 00:14:28.919
This is a good point. This is actually a good point.
247
00:14:29.120 --> 00:14:34.600
Okay, And yeah, so the word point of note is
248
00:14:34.639 --> 00:14:39.639
not blocking the end loop and I can really subscribe
249
00:14:39.679 --> 00:14:43.600
to that sentence. Okay, So to the point, so to
250
00:14:43.639 --> 00:14:47.519
the point that if the event look blocks for a
251
00:14:47.559 --> 00:14:51.600
long time, it's better to kill that node process and
252
00:14:51.639 --> 00:14:57.000
start a fresh one up because keeping that running is useless.
253
00:14:57.799 --> 00:15:02.679
Yeah, if you're going to be doing really significant GC,
254
00:15:04.000 --> 00:15:07.600
then why I mean, just you know, I'm reminded of
255
00:15:07.679 --> 00:15:13.240
what the Apache I think the approach was about, like
256
00:15:13.480 --> 00:15:19.039
managing like the heap in in like sort of chunks
257
00:15:19.039 --> 00:15:21.759
and then discarding the entire chunk rather than trying to
258
00:15:21.759 --> 00:15:23.200
do fun grain GC.
259
00:15:24.519 --> 00:15:28.960
Well, it's to some extent is relatively similar what we
260
00:15:28.960 --> 00:15:31.799
are doing. So with what or not just application server
261
00:15:32.919 --> 00:15:35.600
we have based on this on this thing, we can
262
00:15:35.679 --> 00:15:37.919
monitor the state of the event loop from the outside
263
00:15:38.320 --> 00:15:42.080
and if you detect it, it is totally blocked. Nothing comes true,
264
00:15:42.120 --> 00:15:44.440
nothing is going to come through. We just shut the
265
00:15:44.720 --> 00:15:48.799
shut the thing down. So and because we can, we
266
00:15:48.879 --> 00:15:52.039
shut the thing down and we started from and restart,
267
00:15:52.240 --> 00:15:57.120
we can essentially recover a really broken pad back to
268
00:15:57.240 --> 00:15:59.240
life and let some traffic pass through.
269
00:15:59.480 --> 00:16:04.159
So the basic idea is saying, instead of trying to
270
00:16:04.240 --> 00:16:08.879
do this really really complex GCS at a high frequency,
271
00:16:09.000 --> 00:16:12.919
because of all the incoming requests, every once in a while,
272
00:16:13.039 --> 00:16:15.679
just kill the pod and start fresh.
273
00:16:15.720 --> 00:16:18.559
Well, it's when the event will be is blocked. So
274
00:16:18.759 --> 00:16:22.120
it's literally like when there are too many like. The
275
00:16:22.159 --> 00:16:24.200
problem is also that there are all those requests are
276
00:16:24.200 --> 00:16:28.399
piling up to be processed and after five seconds it's
277
00:16:28.440 --> 00:16:28.919
no point.
278
00:16:29.600 --> 00:16:32.440
There's no point in processing them. You' just abort them.
279
00:16:32.759 --> 00:16:36.240
And it's because of the GC, because of the virtual dome.
280
00:16:36.279 --> 00:16:37.399
It's all of both of them.
281
00:16:37.840 --> 00:16:40.879
It's it's a very it's a very superre intensive operation,
282
00:16:41.080 --> 00:16:42.039
especially with a lot.
283
00:16:41.879 --> 00:16:47.440
Of interesting You would think that they would have figured
284
00:16:47.440 --> 00:16:50.840
it out a way to offload it to workers.
285
00:16:50.440 --> 00:16:52.639
Or something, which is what we did.
286
00:16:53.440 --> 00:16:55.639
Is that a different thing or the no.
287
00:16:55.840 --> 00:17:00.480
So basically with what we can have multiple workers listening
288
00:17:00.519 --> 00:17:05.200
to the same socket so that you can do the
289
00:17:05.240 --> 00:17:08.200
load balancing easier. It's very similar to say, oh, it
290
00:17:08.240 --> 00:17:11.799
is similar to nod cluster or PM two and not cluster,
291
00:17:12.119 --> 00:17:16.359
but instead of doing the load balancing inside not JS,
292
00:17:16.960 --> 00:17:21.240
which is what nod cluster and pmhould do with in
293
00:17:21.400 --> 00:17:24.920
that we use a new node feature that let us
294
00:17:25.000 --> 00:17:29.039
do load balancing inside the kernel using scores, a flag
295
00:17:29.119 --> 00:17:34.000
calls so on the score reuse port, which is significantly faster.
296
00:17:34.920 --> 00:17:38.319
Can you elaborate a little bit about what actually is?
297
00:17:38.759 --> 00:17:40.880
Because it's an application showy for not JS, you can
298
00:17:40.960 --> 00:17:42.799
just give it your app. It will run it inside
299
00:17:42.799 --> 00:17:45.240
a worker thread and the main thread will just minor
300
00:17:45.359 --> 00:17:48.359
it and you can scale it up and down multiple threads,
301
00:17:48.400 --> 00:17:51.960
multiple course, and if you want, you can even have
302
00:17:52.039 --> 00:17:55.519
aterogenerus system. You can have multiple different
applications running there
303
00:17:55.720 --> 00:17:58.839
and they can communicate via message passing or just h GDP
304
00:17:59.400 --> 00:18:00.000
over memory.
305
00:18:00.079 --> 00:18:04.039
See so what does it compete with? What are they like?
306
00:18:05.519 --> 00:18:08.039
When would I use what? And would I put like
307
00:18:08.279 --> 00:18:10.160
next JS? On top of what?
308
00:18:10.720 --> 00:18:13.440
If you're if you're deploying not JES in Kubernetus, you're
309
00:18:13.480 --> 00:18:16.759
probably not doing the not doing the right thing if
310
00:18:16.799 --> 00:18:18.839
you're not doing it today using what?
311
00:18:19.640 --> 00:18:22.279
Yes, what does it stand for? By the way?
312
00:18:23.279 --> 00:18:27.400
What come on? What can what be? Can that be?
313
00:18:28.319 --> 00:18:28.599
Come on?
314
00:18:29.000 --> 00:18:30.480
How do you exactly spell it?
315
00:18:31.440 --> 00:18:36.160
W A T T. It's an honor to over James vat.
316
00:18:36.640 --> 00:18:44.640
Ah Okay, yeah, the power. Yeah, so we need a name.
317
00:18:44.720 --> 00:18:46.680
So on MPM is VATPMH.
318
00:18:46.680 --> 00:18:49.359
I now I sit in your blog post. Yes, so
319
00:18:49.440 --> 00:18:53.480
whenever I use node in Kubernetes, you recommend using it
320
00:18:53.519 --> 00:18:55.160
on top of what I.
321
00:18:55.200 --> 00:18:59.079
Would say, Yes, it gives you more reliability in this
322
00:18:59.240 --> 00:19:03.599
example with jes that I've shared in the chat, essentially
323
00:19:03.640 --> 00:19:08.000
we can move down P ninety five from a second
324
00:19:08.720 --> 00:19:11.920
to two one hundred and thirty five milliseconds.
325
00:19:12.440 --> 00:19:15.640
Oh wow. And just for those who don't follow along
326
00:19:15.680 --> 00:19:19.640
with benchmark stuff of P ninety five, is ninety five
327
00:19:19.720 --> 00:19:23.000
percent of your requests take this long or less?
328
00:19:23.400 --> 00:19:28.000
So in other words, yeah, beneficial for the five percent
329
00:19:28.119 --> 00:19:29.359
slowest users.
330
00:19:29.400 --> 00:19:31.000
Is beneficial for everybody.
331
00:19:30.799 --> 00:19:34.960
If fits for everybody. Yeah, essentially, Yeah, so all the
332
00:19:35.160 --> 00:19:38.960
all the requests now, so ninety five percent of the
333
00:19:39.079 --> 00:19:41.759
requests instead of taking up to a second, now take
334
00:19:42.039 --> 00:19:44.559
up to two hundred and thirty five milliseconds. Now you
335
00:19:44.599 --> 00:19:46.960
assume that the other five percent it also speeds up
336
00:19:47.000 --> 00:19:51.039
for But yeah, that's kind of the measure, and it's
337
00:19:51.079 --> 00:19:53.319
it's one of the more common ways of measuring how
338
00:19:53.319 --> 00:19:57.680
fast your application is because the load and the requests
339
00:19:57.720 --> 00:19:59.640
and what it has to do and what else is
340
00:19:59.759 --> 00:20:01.880
running on the machine can vary from time to time,
341
00:20:01.920 --> 00:20:03.519
and so this kind of averages it out.
342
00:20:03.880 --> 00:20:07.680
Also, think about it from the perspective of a business
343
00:20:08.240 --> 00:20:13.000
loto you like, you want to think about the customers
344
00:20:13.000 --> 00:20:16.359
that have it the worst, and you can't really afford
345
00:20:16.400 --> 00:20:19.119
to lose five or ten percent of your business because
346
00:20:19.200 --> 00:20:26.680
it's just too slow. Exactly. But I'm thinking about what
347
00:20:26.720 --> 00:20:30.759
you said. It does mean though, that you want to
348
00:20:30.839 --> 00:20:36.640
allocate more than one CPU per yes, no instance in
349
00:20:36.680 --> 00:20:38.079
your kubernets in how.
350
00:20:37.960 --> 00:20:42.839
You absolutely this actually helps. Okay, let me explain why
351
00:20:42.880 --> 00:20:43.319
it helps.
352
00:20:43.480 --> 00:20:48.079
Okay, The cost of spinning up a new pod in
353
00:20:48.200 --> 00:20:54.039
Kubernatis is more or less fixed independent of the amount
354
00:20:54.359 --> 00:21:01.279
the amount of resources that are attached, okay, or anyway,
355
00:21:01.279 --> 00:21:02.720
it's not very much different.
356
00:21:03.240 --> 00:21:03.519
Okay.
357
00:21:04.359 --> 00:21:08.680
If I am scheduling largest things, each unit of scale
358
00:21:08.880 --> 00:21:14.079
gives me more power to handle my spikes better. So
359
00:21:14.559 --> 00:21:17.599
it's the edges of scaling are a little bit steeper.
360
00:21:18.279 --> 00:21:23.240
But this actually helps smooth the curve way quicker because
361
00:21:23.359 --> 00:21:24.960
these new things.
362
00:21:26.519 --> 00:21:27.119
Make it.
363
00:21:28.720 --> 00:21:32.640
Can handle more load per unit. Okay, So this is
364
00:21:32.640 --> 00:21:33.119
one thing.
365
00:21:33.279 --> 00:21:33.640
Okay.
366
00:21:33.680 --> 00:21:37.960
The second thing is Kubernatis takes minutes to scale, so
367
00:21:38.079 --> 00:21:41.400
when the load typically reacts in one two minutes is
368
00:21:41.480 --> 00:21:44.960
very slow, tiny to to to schedule things up. And
369
00:21:46.039 --> 00:21:49.480
by having this system you can actually absorb the shock
370
00:21:49.680 --> 00:21:52.200
completely inside your pods.
371
00:21:52.200 --> 00:21:55.279
Interesting, very interesting. I need to think about this some more.
372
00:21:55.359 --> 00:21:59.279
I will definitely make sure that our develops people see this.
373
00:22:02.759 --> 00:22:06.200
I mean literally everybody is using kubernets these days, whether
374
00:22:06.200 --> 00:22:06.640
they need.
375
00:22:06.559 --> 00:22:08.720
To exactly exactly.
376
00:22:09.359 --> 00:22:12.480
We also have built, but it's not mentioned in this benchmark,
377
00:22:12.720 --> 00:22:17.279
built another product called Intelligent Command Center that is open
378
00:22:17.319 --> 00:22:23.119
source as well, that reduced the decision time of kubernets
379
00:22:23.720 --> 00:22:32.279
from minutes two seconds. So the pod starting is down
380
00:22:32.480 --> 00:22:35.200
is making less than five seconds the decision to start
381
00:22:35.200 --> 00:22:35.680
a new part.
382
00:22:36.400 --> 00:22:39.279
Doesn't that make the system kind of more noisy.
383
00:22:40.200 --> 00:22:43.759
Yes to some part, not to the other, because it's
384
00:22:43.799 --> 00:22:47.799
actually it's actually very fast in scaling up. Okay, but
385
00:22:47.920 --> 00:22:51.920
it can scale up on very specific signals from the app,
386
00:22:52.640 --> 00:22:58.200
so it and so it can be a little bit
387
00:22:58.200 --> 00:23:00.839
more noisy, but it actually allows you to reduce your
388
00:23:00.880 --> 00:23:03.359
baseline of instance significantly.
389
00:23:03.279 --> 00:23:06.000
So you can scale up when you need to.
390
00:23:06.359 --> 00:23:08.319
You can scale up way quicker when you need to,
391
00:23:08.359 --> 00:23:11.559
so you can reduce your baseline and during off peak
392
00:23:11.599 --> 00:23:15.960
hours you can actually save a lot of Yeah.
393
00:23:15.799 --> 00:23:18.480
I guess that's always the thing that I'm concerned with
394
00:23:18.519 --> 00:23:21.480
when you have this kind of automation, is, you know,
395
00:23:21.559 --> 00:23:24.400
does a scale up too much? Does it? You know,
396
00:23:24.400 --> 00:23:26.319
does it handle things when you know when I need
397
00:23:26.319 --> 00:23:28.559
it to scale down? Because yeah, it costs a lot
398
00:23:28.599 --> 00:23:31.440
more when you scale way up. But if that's what
399
00:23:31.480 --> 00:23:35.680
you're getting in traffic, and usually traffic translates in some
400
00:23:35.720 --> 00:23:40.559
ways to money, not always, but yeah, so that anyway
401
00:23:41.240 --> 00:23:41.839
pretty cool.
402
00:23:42.000 --> 00:23:45.079
So this was part of our results.
403
00:23:45.119 --> 00:23:51.279
We published this study, okay, and hopefully we can get
404
00:23:51.359 --> 00:23:54.279
some results from our rock click customer down out soon.
405
00:23:54.799 --> 00:23:58.640
But this is our own and all the benchmarkt and
406
00:23:58.759 --> 00:24:01.279
ernests done for this is open source, so you can
407
00:24:01.359 --> 00:24:02.759
check it out and run it yourself.
408
00:24:02.799 --> 00:24:03.440
If you're this.
409
00:24:03.400 --> 00:24:06.559
Should be making a lot more noise than it is.
410
00:24:06.640 --> 00:24:10.119
I think I was kind of aware of this, but
411
00:24:10.200 --> 00:24:13.359
I was not fully aware of this. And like I said,
412
00:24:13.400 --> 00:24:17.759
literally everybody is doing non kumberinators these days. So if
413
00:24:17.799 --> 00:24:22.039
the impact is so dramatic and so significant and so
414
00:24:22.519 --> 00:24:29.599
readily achievable, yes, you know, there's literally no reason not
415
00:24:29.720 --> 00:24:32.079
to try it out. This is.
416
00:24:33.920 --> 00:24:36.359
Partially the reason why when you asked to
come to
417
00:24:36.440 --> 00:24:38.480
join the show. I said, I'm coming join the show.
418
00:24:39.839 --> 00:24:44.680
This is the research that we published. So we published
419
00:24:44.759 --> 00:24:49.079
late last year, I think, and it's pretty solid.
420
00:24:49.400 --> 00:24:57.359
I would say. Then we have done another article.
421
00:24:57.599 --> 00:25:03.599
Okay, I'm more spicy one if you if a more
422
00:25:03.640 --> 00:25:09.160
spicy one, I would say, okay. And we benchmarked on
423
00:25:09.200 --> 00:25:11.839
the same benchmark on the first one, slightly different traffic
424
00:25:11.880 --> 00:25:17.720
load whatever, Okay. We benchmarked the note the tree no
425
00:25:17.839 --> 00:25:22.880
dress run times in Kubernetes so bunn no JS as
426
00:25:22.880 --> 00:25:25.519
well as our own way of scheduling things with what
427
00:25:26.200 --> 00:25:33.640
so we got some really unexpected results, not the results
428
00:25:33.640 --> 00:25:41.640
that I would expect, and it showed that bun So.
429
00:25:41.720 --> 00:25:45.000
Just before you you tell what you found, just to clarify,
430
00:25:45.200 --> 00:25:48.519
what is only for node, it's not for the other
431
00:25:48.960 --> 00:25:51.079
For the other platforms, you can't use it to DNO
432
00:25:51.240 --> 00:25:51.960
with bun.
433
00:25:52.039 --> 00:25:53.039
No you can't.
434
00:25:53.519 --> 00:25:57.519
Well like you can't because those other platforms are not
435
00:25:57.680 --> 00:26:01.200
fully not GS compatible. And the approach that we have
436
00:26:01.279 --> 00:26:05.440
taken with what is instead of creating a custom built
437
00:26:05.599 --> 00:26:08.519
not just run time with our patches, we have upstream
438
00:26:08.519 --> 00:26:11.839
all our patches up to note core of the things
439
00:26:11.839 --> 00:26:17.319
that we needed, and that is only is written mostly
440
00:26:17.319 --> 00:26:22.119
in JavaScript mostly every now and then we had to
441
00:26:22.200 --> 00:26:25.920
have a little bit of C plus plus to implement
442
00:26:25.960 --> 00:26:28.480
some feature for all not Jazz versions.
443
00:26:28.160 --> 00:26:30.079
That are not being released yet.
444
00:26:30.160 --> 00:26:34.200
So if we need a feature, we need to extend
445
00:26:34.200 --> 00:26:34.880
support for it.
446
00:26:35.039 --> 00:26:39.759
But it's right now, I think it's all JavaScript.
447
00:26:40.079 --> 00:26:42.119
I have to say before you go too much further
448
00:26:42.200 --> 00:26:45.759
that I like this idea of hey, we needed this
449
00:26:45.880 --> 00:26:48.799
in node in order to make what work, and so
450
00:26:48.839 --> 00:26:50.920
you contribute it back and so it's stuff that other
451
00:26:50.920 --> 00:26:51.880
people can use.
452
00:26:52.119 --> 00:26:56.039
Exactly one like this is the whole point. Like part
453
00:26:56.079 --> 00:26:59.680
of the reason why I funded Platformatic was can I
454
00:26:59.759 --> 00:27:06.240
try to
build a business that can uh make the
455
00:27:06.440 --> 00:27:11.960
open source economically viable and and allow us to grow
456
00:27:12.000 --> 00:27:15.480
with it? So let's try. This is the this might
457
00:27:15.519 --> 00:27:19.200
try Okay, I might succeed, might not succeed. I hope
458
00:27:19.200 --> 00:27:24.400
I succeed, but I needed to try this. So my journey.
459
00:27:25.000 --> 00:27:26.759
I'm going to go into a tangent here real quick
460
00:27:26.759 --> 00:27:28.880
because I'm kind of curious. So when you say make
461
00:27:29.079 --> 00:27:33.000
the open source uh economically viable, what do you mean?
462
00:27:33.079 --> 00:27:33.160
Like?
463
00:27:33.240 --> 00:27:35.160
What what the fundamental point is?
464
00:27:35.359 --> 00:27:45.160
The fundamental point is there is a substantial lack of
465
00:27:45.599 --> 00:27:53.359
investment in core technologies from companies, and we need more
466
00:27:53.440 --> 00:27:59.200
companies that are that invest significant amount of money into
467
00:27:59.240 --> 00:27:59.880
the commons.
468
00:28:00.960 --> 00:28:03.160
In order to do so, we need them.
469
00:28:03.000 --> 00:28:03.319
To be.
470
00:28:04.799 --> 00:28:08.319
Economic, to be good businesses so they can contribute back
471
00:28:08.519 --> 00:28:14.920
and up. Okay, And you cannot rely on the sponsor
472
00:28:15.000 --> 00:28:20.440
model because it's too little, too late. So you need
473
00:28:21.359 --> 00:28:23.839
if you need to pay to do payroll, you need
474
00:28:23.920 --> 00:28:29.960
to have significant sales involved. So the goal is to
475
00:28:30.000 --> 00:28:33.680
build a significantly big enough company that can afford multiple
476
00:28:33.680 --> 00:28:36.559
people and working full time on the core technologies, and
477
00:28:36.759 --> 00:28:39.880
not because it's it's a good thing to do, but
478
00:28:40.119 --> 00:28:44.440
because it needs them to be there as a core
479
00:28:44.559 --> 00:28:47.640
function of the business so that it's not a donation,
480
00:28:47.960 --> 00:28:49.480
it's a function.
481
00:28:50.559 --> 00:28:51.480
Okay.
482
00:28:51.599 --> 00:28:54.640
And because it's a function and it's a core part
483
00:28:54.640 --> 00:28:56.359
of it, it will not stop.
484
00:28:57.400 --> 00:28:59.440
And what is that company selling them?
485
00:29:00.359 --> 00:29:02.000
That was what I wash.
486
00:29:02.079 --> 00:29:07.079
So our current business model okay, after several pivot iterations
487
00:29:07.079 --> 00:29:13.519
and stuff, we sell enterprise version of all our technologies
488
00:29:13.759 --> 00:29:21.039
plus support and on boarding. So if somebody needs anything
489
00:29:21.079 --> 00:29:24.039
related to no JS, we can provide support, We can
490
00:29:24.200 --> 00:29:30.599
provide and we can provide an enterprise license for our
491
00:29:30.640 --> 00:29:32.559
core technologies and include.
492
00:29:32.279 --> 00:29:33.799
What does an enterprise license.
493
00:29:33.880 --> 00:29:39.559
Mean this is an answer for Michael question for micro founder. Okay,
494
00:29:41.400 --> 00:29:44.839
so there is for the Intelligent Command Center.
495
00:29:45.480 --> 00:29:46.519
There is a.
496
00:29:48.480 --> 00:29:56.319
Premium version with added features for example like more audit controls, loggins,
497
00:29:56.519 --> 00:30:00.440
these kind of things so far, but it will grow more.
498
00:30:00.880 --> 00:30:08.119
It's more related to SLAS and response to incidents and
499
00:30:08.599 --> 00:30:10.200
being available that.
500
00:30:11.799 --> 00:30:13.440
Like other things.
501
00:30:13.839 --> 00:30:16.319
So it's more on the support side than the future side.
502
00:30:17.039 --> 00:30:20.079
It's the future side is more on all these technology
503
00:30:20.119 --> 00:30:26.839
are moving dynamically, so they our customers can steer, can
504
00:30:26.839 --> 00:30:29.119
steer the wheel and I'll pass the side.
505
00:30:29.160 --> 00:30:30.000
Where we go next?
506
00:30:30.079 --> 00:30:32.680
And what what they need? What features are missing? And
507
00:30:33.119 --> 00:30:34.480
you know their partners.
508
00:30:34.359 --> 00:30:36.759
I think that esslas are the way to go, to
509
00:30:36.799 --> 00:30:38.079
be honest, To.
510
00:30:38.000 --> 00:30:39.920
Be honest, I would say they sell very.
511
00:30:39.759 --> 00:30:44.440
Well because like literally, if I'm running your back in
512
00:30:44.519 --> 00:30:49.920
my back end on node, I need ESLAS and and
513
00:30:50.720 --> 00:30:54.799
if you know, if I if I can out kind
514
00:30:54.839 --> 00:31:01.400
of guaranteed by licensing your services, then it's no brainer.
515
00:31:01.799 --> 00:31:07.160
That's what it is. So anyway, that's exactly the point.
516
00:31:07.559 --> 00:31:10.680
Cool. So now let's go back to where we were
517
00:31:10.720 --> 00:31:12.079
before we went on the tangent.
518
00:31:12.160 --> 00:31:14.559
If we can remember, yeah, okay, we can go on
519
00:31:14.599 --> 00:31:20.319
the tangent all the time. So anyway we are, I
520
00:31:20.359 --> 00:31:24.200
was chatting, I've over the break, I've done this extensive
521
00:31:24.200 --> 00:31:30.240
benchmark on band Dino and note okay, and I got
522
00:31:30.519 --> 00:31:34.319
very surprising results. The benchmarks included running the same next
523
00:31:34.359 --> 00:31:35.400
Jaess application that.
524
00:31:35.400 --> 00:31:39.400
We talked about before. Okay, reactions are rendering? Have your memory?
525
00:31:39.480 --> 00:31:40.559
Have you on CPU?
526
00:31:41.039 --> 00:31:41.920
Really like.
527
00:31:44.039 --> 00:31:47.880
Possibly the worst load but also the most common load
528
00:31:48.400 --> 00:31:52.599
that you can have running on OJS these days, And
529
00:31:52.680 --> 00:31:55.400
I got very surprising result that I didn't expect them
530
00:31:55.440 --> 00:31:59.519
to be so specifically.
531
00:31:59.480 --> 00:32:06.039
I got but p ninety nine of.
532
00:32:08.519 --> 00:32:12.319
Seventy four milliseconds for ban one three dot five they
533
00:32:12.319 --> 00:32:13.519
did new versions of.
534
00:32:13.839 --> 00:32:15.279
So approximately one second.
535
00:32:16.279 --> 00:32:20.839
Yes, well not JS was one hundred and seventy four.
536
00:32:21.799 --> 00:32:24.960
Do you know at one hundred and not JS with
537
00:32:25.039 --> 00:32:26.640
what at one hundred and fifteen?
538
00:32:27.480 --> 00:32:33.599
So Bun was noticeably slower than everybody else exactly. To
539
00:32:33.680 --> 00:32:37.240
be honest, I know that Bun has a reputation for
540
00:32:37.319 --> 00:32:40.799
being fast, but the people need but people need to
541
00:32:40.880 --> 00:32:44.920
understand that fast can mean different things in different situations.
542
00:32:45.480 --> 00:32:46.359
Exactly that.
543
00:32:47.000 --> 00:32:49.680
Well, I hear people tell other things about Bun too,
544
00:32:49.680 --> 00:32:54.799
but yeah, you run a different application the different engines
545
00:32:54.920 --> 00:32:59.720
manage memory differently and concurrency differently than other things differently,
546
00:32:59.720 --> 00:33:01.039
and so yeah, it's.
547
00:33:00.920 --> 00:33:04.079
Beyond a different application. I think it's it's like a
548
00:33:04.079 --> 00:33:08.799
different scenario, yes, because you've got you've got startup times,
549
00:33:09.440 --> 00:33:13.799
and you've got and you've got run times, and there's
550
00:33:13.799 --> 00:33:17.400
a question of when optimizations kick in. If they kick in,
551
00:33:18.440 --> 00:33:20.960
what do you do in the jet stage stuff like that.
552
00:33:21.240 --> 00:33:25.559
So what could be really fast for a long running
553
00:33:26.759 --> 00:33:30.640
a no type service could be really slow when you're
554
00:33:30.680 --> 00:33:35.440
building a utility that just runs, does something and then terminates,
555
00:33:35.759 --> 00:33:40.960
and an expectation that a certain platform will do everything
556
00:33:41.039 --> 00:33:46.839
better is well, it's happened before, but it's not always realistic.
557
00:33:47.559 --> 00:33:50.119
It's so a few notes.
558
00:33:50.279 --> 00:33:53.799
Okay, after chatting with a few people, they gave me
559
00:33:53.880 --> 00:33:57.200
this informal feedback. You can take what we do with
560
00:33:57.279 --> 00:34:03.200
a gain of salt jsc which is the JavaScript run
561
00:34:03.279 --> 00:34:08.199
time behind ban and Safari is optimized for cold starts
562
00:34:08.800 --> 00:34:11.880
to start very immediately. Imagine when you open Safari on
563
00:34:11.920 --> 00:34:14.159
your iPhone, it opens up super quick.
564
00:34:14.480 --> 00:34:22.599
Okay, while V eight is more optimized for running or
565
00:34:22.639 --> 00:34:24.719
wrong running application. Thanks Jmail.
566
00:34:25.519 --> 00:34:28.519
Yeah, that's the thing, you know, people
talk about like
567
00:34:28.639 --> 00:34:33.159
the various You know, there's this been trend of rewriting
568
00:34:33.239 --> 00:34:37.719
the JavaScript utility ecosystem in other programming languages, be it
569
00:34:37.840 --> 00:34:42.039
go or be at rust or be it whatever, instead
570
00:34:42.079 --> 00:34:47.280
of doing it in JavaScript or typescript. And you kind
571
00:34:47.280 --> 00:34:49.880
of hit your head on the nail there, matel Because,
572
00:34:49.920 --> 00:34:51.360
for example, if we think about.
573
00:34:51.159 --> 00:34:53.360
And that's a nail on the head, not head on
574
00:34:53.360 --> 00:34:55.079
the nail unless you really want to hit your head
575
00:34:55.119 --> 00:34:55.599
on the nail.
576
00:34:55.800 --> 00:34:57.960
Or is that what I said? Yeah, okay, just.
577
00:34:58.159 --> 00:34:59.320
To point ound was painful.
578
00:34:59.599 --> 00:35:03.280
Well know Hebrew we right, we right right to left.
579
00:35:03.360 --> 00:35:07.039
So well, but I mean, gives gives new gives new
580
00:35:07.079 --> 00:35:08.639
meaning to the term hammerhead, doesn't it.
581
00:35:09.000 --> 00:35:13.119
Yeah? Anyway, what I was saying is that the JavaScript
582
00:35:13.199 --> 00:35:17.760
optimizer in EA, I always forget the name whether is
583
00:35:17.840 --> 00:35:18.920
a turbo fan or what.
584
00:35:18.880 --> 00:35:22.639
A turbo fan. We also have mag Lab now.
585
00:35:22.400 --> 00:35:27.360
But yeah, it's basically based on identifying hot code and
586
00:35:27.400 --> 00:35:31.960
then optimizing that while the code is actually executing. But
587
00:35:32.079 --> 00:35:35.159
in order to identify hot code, the application needs to
588
00:35:35.199 --> 00:35:37.719
be running for a while. And if you're running a
589
00:35:37.760 --> 00:35:40.800
tool that just starts up, does its job and then finishes,
590
00:35:41.679 --> 00:35:44.679
you'll never get to that optimization stage.
591
00:35:45.880 --> 00:35:52.280
Exactly, which is long enough you get into that optimization state.
592
00:35:52.400 --> 00:35:54.400
Which is kind of my concern by the way, with
593
00:35:54.920 --> 00:35:57.000
some Lambda function usage.
594
00:35:58.559 --> 00:36:03.119
Well, I let me say this, if you are moving
595
00:36:03.400 --> 00:36:12.239
serious traffic, you are probably better served using ECS or
596
00:36:12.440 --> 00:36:17.519
cobnetis or whatever long running process. But to be honest,
597
00:36:17.599 --> 00:36:20.760
Lambda actually okay, let's let's go. Let's open the lambda
598
00:36:20.800 --> 00:36:24.519
point because it's actually a validation of that to some extent.
599
00:36:25.079 --> 00:36:28.079
So if you if you have followed what has been
600
00:36:28.159 --> 00:36:31.000
launched by a w as in the latest the latest
601
00:36:31.039 --> 00:36:36.559
rainvent in December, is a new Lambda run time for
602
00:36:37.159 --> 00:36:41.239
I troueput scenario I traffic scenario that is not actually
603
00:36:42.280 --> 00:36:46.320
one request per process, okay, but it allows one process
604
00:36:46.480 --> 00:36:49.440
look at this to have as many threads as it
605
00:36:49.519 --> 00:36:52.960
wants to end or requests in a lot of things.
606
00:36:53.119 --> 00:36:58.679
Is actually similar to how that works internally in how
607
00:36:58.840 --> 00:37:03.480
the things are scheduled. So this kind of system allows
608
00:37:04.079 --> 00:37:04.719
Lambda to.
609
00:37:06.559 --> 00:37:09.400
You know, use all the potential of no js essentially
610
00:37:10.119 --> 00:37:17.119
and actually leverage these long running optimizations that we talked about.
611
00:37:17.800 --> 00:37:18.320
Interesting.
612
00:37:19.519 --> 00:37:23.159
So it's actually very interesting model, and a lot of
613
00:37:23.199 --> 00:37:26.079
people are not you know, tapped into this yet, like
614
00:37:26.079 --> 00:37:29.960
they think, oh, no, jes single treded or mostly single traded,
615
00:37:30.639 --> 00:37:33.159
while in reality it's not, and you can do a
616
00:37:33.199 --> 00:37:37.239
lot of interesting things with it, and they just you know,
617
00:37:37.480 --> 00:37:38.320
ignore the point.
618
00:37:38.480 --> 00:37:42.159
Well to be to be honest, no, JavaScript is a
619
00:37:42.159 --> 00:37:47.360
single threaded language, but Node and the JavaScript Virtual Machine
620
00:37:47.360 --> 00:37:49.280
has never really been single threaded.
621
00:37:51.280 --> 00:37:54.840
So it's exactly so for.
622
00:37:54.840 --> 00:37:57.800
Those of you who don't know. For example, the VGC
623
00:37:58.079 --> 00:38:02.440
actually runs off of the main thread to significant extent.
624
00:38:03.320 --> 00:38:06.079
Yeah, well it has been, not at the beginning.
625
00:38:06.280 --> 00:38:08.920
Not at the beginning I'm talking about currently.
626
00:38:09.039 --> 00:38:11.360
Yeah, yeah, it's it's it's off the of it.
627
00:38:12.039 --> 00:38:14.119
So anyway, I just wanted to say we got these
628
00:38:14.360 --> 00:38:18.039
incredible results, like not expected, to be honest, I didn't,
629
00:38:18.280 --> 00:38:20.440
like I had to check them five times and have
630
00:38:20.559 --> 00:38:22.800
to have some friends check them with me.
631
00:38:23.440 --> 00:38:26.400
So why was it expected? You you didn't expect such
632
00:38:26.440 --> 00:38:30.880
a band to be that slow in that particular test, yes,
633
00:38:31.119 --> 00:38:33.880
And did you expect Dino to be that fast by the.
634
00:38:33.880 --> 00:38:38.679
Way, yes, yes, significantly. I was expecting Dino to have
635
00:38:38.719 --> 00:38:39.840
those kind of numbers.
636
00:38:40.320 --> 00:38:44.320
I think that's a scenario that they've been optimizing for, right, No, no.
637
00:38:44.079 --> 00:38:50.519
No, it's the way so they their dino event loop
638
00:38:51.239 --> 00:38:55.199
is based on Tokyo, while no event loop is based
639
00:38:55.239 --> 00:38:55.800
on libuv.
640
00:38:56.280 --> 00:38:58.440
Okay, and Tokyo is.
641
00:39:00.159 --> 00:39:04.400
Be a decade later than libv type of thing, and
642
00:39:04.920 --> 00:39:08.719
by things have improved, you now you do those kinds
643
00:39:08.719 --> 00:39:13.320
of things, okay, And it's very hard to chase something
644
00:39:13.400 --> 00:39:18.000
like libuv understood, So there is that is the problem,
645
00:39:18.199 --> 00:39:20.199
Like it's it's not just LIBUV by the way, it's
646
00:39:20.239 --> 00:39:24.239
also the node machinery in entirety. So how we get
647
00:39:24.280 --> 00:39:27.719
the data out of libuv, how we schedule new connections
648
00:39:27.719 --> 00:39:29.079
and we do all Like there's a lot of work
649
00:39:29.119 --> 00:39:31.679
over there and a lot of over it, but some
650
00:39:31.800 --> 00:39:35.800
of that over it is essentially legacy, and it's very
651
00:39:35.880 --> 00:39:38.320
hard for us to like it's possible, it would be
652
00:39:38.360 --> 00:39:42.000
possible to optimize, but it's a hell of a lot harder.
653
00:39:42.280 --> 00:39:45.679
So could you remind me again what the numbers are
654
00:39:45.760 --> 00:39:47.599
for node versus note with what.
655
00:39:48.599 --> 00:39:49.639
So on p.
656
00:39:49.760 --> 00:39:53.199
Nineteen nine we add one hundred and seventy four millisecond
657
00:39:53.239 --> 00:39:55.320
I may we measured one hundred and seventy four million
658
00:39:55.360 --> 00:39:59.039
second with node and with what one hundred and fifteen.
659
00:40:00.000 --> 00:40:02.719
One hundred and fifteen that's one one five.
660
00:40:03.199 --> 00:40:06.079
Yep, one seven four versus one one five.
661
00:40:07.239 --> 00:40:11.760
So we're talking about close about thirty percent reduction, forty
662
00:40:11.760 --> 00:40:13.239
percent reductions.
663
00:40:12.719 --> 00:40:13.280
Something like that.
664
00:40:13.360 --> 00:40:15.159
Yeah, that's significant.
665
00:40:15.920 --> 00:40:19.880
I know last Dino VAT and Dino are very close.
666
00:40:19.960 --> 00:40:21.559
And that's the SSR scenario.
667
00:40:22.039 --> 00:40:24.000
Yes, by the way, So I guess.
668
00:40:23.800 --> 00:40:26.159
What I'm wondering is is so for the people watching
669
00:40:26.239 --> 00:40:30.480
at home right this, you're throwing out numbers and scenarios,
670
00:40:30.519 --> 00:40:33.639
But what does this look like for me? Right? So
671
00:40:33.719 --> 00:40:36.079
I have a next JS setup, or i have a
672
00:40:36.840 --> 00:40:39.079
note application that I've written, and I've got React on
673
00:40:39.079 --> 00:40:41.719
the front end and I've got server side rendering setup
674
00:40:41.920 --> 00:40:46.079
or whatever, like, how does this actually translate? And what
675
00:40:46.119 --> 00:40:50.239
does this look like when I'm troubleshooting or you know,
676
00:40:50.480 --> 00:40:52.480
measuring my own benchmarks or things like that.
677
00:40:53.079 --> 00:40:58.360
So the key difference is the point of so when
678
00:40:58.360 --> 00:41:02.039
you're doing in your is when you do saturation or
679
00:41:02.079 --> 00:41:07.280
stress testing. Stress testing, so you're putting it to a
680
00:41:07.400 --> 00:41:11.119
very high load scenario and you want to know when
681
00:41:11.119 --> 00:41:12.440
your up breaks.
682
00:41:13.360 --> 00:41:15.440
And essentially.
683
00:41:16.400 --> 00:41:20.960
These numbers tells create more or less ranking of where
684
00:41:21.000 --> 00:41:25.519
your applications stay responsive and is usable by the end user.
685
00:41:25.840 --> 00:41:28.639
Okay, in those scenarios, I'll.
686
00:41:28.400 --> 00:41:32.599
Give another way to look at it. You're doing SSR
687
00:41:33.679 --> 00:41:39.400
to improve application startup times. Yes, that's the primary motivation
688
00:41:39.480 --> 00:41:44.320
of doing SSR. And what we've literally learned now is
689
00:41:44.400 --> 00:41:47.199
that you might be doing SSR with the goal of
690
00:41:47.320 --> 00:41:51.320
improving startup time and end up part of my French
691
00:41:52.000 --> 00:41:56.920
screwing yourself because your back end will not be able
692
00:41:56.960 --> 00:42:05.679
to properly handle the extra load. And I'm actually looking
693
00:42:05.880 --> 00:42:09.079
at the Crux data. We've spoken about it on the
694
00:42:09.079 --> 00:42:13.360
show on several occasions, so a quick reminder what it is.
695
00:42:14.559 --> 00:42:20.440
Google collects anonymous performance information from all browser sessions or
696
00:42:20.519 --> 00:42:23.719
Chrome browser sessions and unless you opt out, and it's
697
00:42:23.760 --> 00:42:25.880
not really easy to opt out, so assume it's more
698
00:42:26.000 --> 00:42:29.360
less everybody. And they are looking and then they are
699
00:42:29.400 --> 00:42:32.960
breaking it down by technologies used using the HTP archive.
700
00:42:33.440 --> 00:42:37.159
So basically for each domain, they're looking if a domain
701
00:42:37.239 --> 00:42:40.480
has sufficient amount of traffic, so they're looking at the
702
00:42:40.519 --> 00:42:43.639
top ten million domains more or less in terms of traffic.
703
00:42:44.239 --> 00:42:48.000
They're segmenting them by technologies used, and then they actually
704
00:42:48.400 --> 00:42:51.400
release this information to the world so you can actually
705
00:42:51.519 --> 00:42:56.280
see which technology is more likely to give you better performance.
706
00:42:56.840 --> 00:43:01.719
And I'm currently looking at the graph that compares all
707
00:43:01.760 --> 00:43:06.639
the websites within cracks, the WordPress websites, the Wix websites,
708
00:43:07.159 --> 00:43:11.039
and next JS websites. And I'm looking at what percentile
709
00:43:11.079 --> 00:43:15.239
of websites get good performance results. According to Google, it's
710
00:43:15.239 --> 00:43:20.119
the cob vitals. Okay, wow, yeah, And if we're talking
711
00:43:20.199 --> 00:43:25.119
about all technologies, we're talking about about fifty one percent,
712
00:43:25.199 --> 00:43:29.480
So approximately half of websites get good coed vitals and
713
00:43:29.559 --> 00:43:34.480
about half get poor web vitals. If we're talking about WordPress,
714
00:43:34.719 --> 00:43:37.880
the number is forty six percent. So WordPress is slightly
715
00:43:38.440 --> 00:43:42.800
lower than all technologies at large, but pretty close. So
716
00:43:43.000 --> 00:43:45.400
WordPress and all technologies is more or less the same.
717
00:43:45.800 --> 00:43:48.480
Maybe also the fact that like half the web runs
718
00:43:48.519 --> 00:43:53.199
on WordPress. Wis currently is at seventy three percent.
719
00:43:54.159 --> 00:43:56.880
And what is this website? Is the cracks data set? Right?
720
00:43:57.360 --> 00:43:59.320
Yes, I can send you. I'll put the link in
721
00:43:59.320 --> 00:43:59.920
the chat.
722
00:44:00.199 --> 00:44:02.119
An Houp going fantastic. I found it.
723
00:44:03.079 --> 00:44:05.840
So Wix has seventy three percent. So if you're building
724
00:44:05.880 --> 00:44:11.039
a website on Wix, there's a seventy three percent probability
725
00:44:11.400 --> 00:44:17.079
that you will be getting good performance. Okay, what's the number? Sorry,
726
00:44:17.159 --> 00:44:19.440
what's the number for next JS? Now you assume that
727
00:44:19.440 --> 00:44:22.159
next YS would be great because the whole thing about
728
00:44:22.199 --> 00:44:27.440
next GS is that it's as SARRD. So what's the
729
00:44:27.480 --> 00:44:28.920
probability for next gs?
730
00:44:28.960 --> 00:44:32.360
Can you guess feel like you're setting me up to
731
00:44:32.440 --> 00:44:37.039
let me down so well, I would have assumed before
732
00:44:37.079 --> 00:44:41.360
you said it, kind of skeptically that it'd be you know, yeah,
733
00:44:41.440 --> 00:44:44.519
somewhere around wis you know, sixty seventy percent, but you're
734
00:44:44.519 --> 00:44:47.119
making you're making it sound like it's probably like thirty percent.
735
00:44:47.679 --> 00:44:52.119
Exactly, it's twenty nine percent. So the probability of getting
736
00:44:52.119 --> 00:44:55.480
good performance when you're using NEXTJS, you know, you're you're
737
00:44:55.519 --> 00:44:58.960
putting all this effort into building let's say AI is
738
00:44:59.000 --> 00:45:01.760
not doing your entire job yet you're doing putting all
739
00:45:01.800 --> 00:45:05.719
this effort in encoding your website and react and hosting
740
00:45:05.800 --> 00:45:09.760
it and whatever you and your probability of getting good
741
00:45:09.800 --> 00:45:14.679
co ed vitals is less than thirty percent, And that's
742
00:45:15.039 --> 00:45:16.320
really unfortunate.
743
00:45:16.719 --> 00:45:20.679
Yeah, that's bad. So the stuff that Mateo is talking about,
744
00:45:20.760 --> 00:45:23.519
then do you do you get those kinds of performance
745
00:45:24.039 --> 00:45:27.239
increases kind of for free just by upgrading your note
746
00:45:27.320 --> 00:45:28.840
or make.
747
00:45:28.760 --> 00:45:31.840
It better by using what on top of next which
748
00:45:31.840 --> 00:45:32.719
it just works.
749
00:45:32.519 --> 00:45:36.400
So it's not and I can do it on versall, no.
750
00:45:36.559 --> 00:45:39.800
Versall ransom your own thing. So the fundamental problem, the
751
00:45:39.800 --> 00:45:42.920
fundamental point is next JS is designed to run well
752
00:45:42.960 --> 00:45:49.679
on versall and to run it well on your own infrastructure.
753
00:45:49.719 --> 00:45:52.320
You're missing a few components, and we added those few.
754
00:45:53.239 --> 00:45:55.599
So with verse cell out of the box, I'd be
755
00:45:55.679 --> 00:45:59.320
getting comparable performance to what I have.
756
00:46:00.079 --> 00:46:05.000
Absolutely no idea. I've not measured. I've not benchmarked their cloud.
757
00:46:05.199 --> 00:46:09.199
To be honest, I don't even it's a good product.
758
00:46:09.280 --> 00:46:12.440
I am a customer like Performati is a customer overrsell. Okay,
759
00:46:13.079 --> 00:46:15.119
we are as most startup. Is the greatest thing ever
760
00:46:15.199 --> 00:46:19.440
to be using perself. Okay, yeah, it's easy, it's easy.
761
00:46:19.559 --> 00:46:22.079
There are a lot of companies out there that cannot
762
00:46:22.199 --> 00:46:26.960
use yourself for all sorts of reasons, okay, from and
763
00:46:27.079 --> 00:46:28.280
that is critical.
764
00:46:29.000 --> 00:46:32.440
I know that the companies are running next gs on
765
00:46:32.599 --> 00:46:34.360
top of Amazon a.
766
00:46:34.480 --> 00:46:36.840
W Yeah exactly, So this is what I'm saying.
767
00:46:36.880 --> 00:46:40.440
Okay, they are running those things, and there is even
768
00:46:40.480 --> 00:46:42.480
a thing called open next run it on top of
769
00:46:42.760 --> 00:46:47.880
cloud Flare and other stuff. Okay, what we've done make
770
00:46:47.960 --> 00:46:51.039
it run very well on top of Kubernetus.
771
00:46:51.440 --> 00:46:55.239
By the way, I'm curious, what's your opinion of nest JS.
772
00:46:55.719 --> 00:47:00.239
You're asking me tough questions, then I am not I
773
00:47:00.320 --> 00:47:04.360
am I do have opinion.
774
00:47:04.440 --> 00:47:05.480
I have one opinion.
775
00:47:07.039 --> 00:47:09.880
Nest is the back end framework, specifically, isn't it?
776
00:47:10.360 --> 00:47:14.840
Nest is like NOE for Java developers I have.
777
00:47:17.840 --> 00:47:23.320
I have a problem with it. Okay, the problem I
778
00:47:23.400 --> 00:47:31.920
have with nest is its reliance on the old time
779
00:47:32.000 --> 00:47:35.880
skip decorators. So I don't know if you've been following
780
00:47:35.920 --> 00:47:39.119
the story of Java skip decorators with the year thirty nine.
781
00:47:39.239 --> 00:47:44.119
That standard that never ever materializes. It's been stuck in
782
00:47:44.760 --> 00:47:48.559
stage two and a half like forever
exactly.
783
00:47:49.800 --> 00:47:52.440
So the problem is that.
784
00:47:54.440 --> 00:47:57.480
Just you know what, before you do, let's just clarify
785
00:47:57.519 --> 00:48:00.719
that all our listeners I kind of assume that listeners
786
00:48:00.760 --> 00:48:05.760
were familiar with Kubernetes, which might have been either correct
787
00:48:05.880 --> 00:48:08.480
or incorrect. An assumption to make, but let's not assume
788
00:48:08.519 --> 00:48:13.679
the same for decorators. Decorators are a language feature in
789
00:48:13.800 --> 00:48:18.960
JavaScript or typescript which allow you to decorate function method
790
00:48:19.039 --> 00:48:23.400
classes and methods and properties. You put the ad sign
791
00:48:23.519 --> 00:48:26.599
and then some words, and basically it wraps the declaration
792
00:48:26.760 --> 00:48:30.239
in a function call and that function call can modify
793
00:48:31.239 --> 00:48:38.719
the actual class definition or the method definition. So for example,
794
00:48:38.800 --> 00:48:44.079
let's say the canonical example is I want to print
795
00:48:44.079 --> 00:48:47.719
out a log whenever a method enters and exits. Instead
796
00:48:47.760 --> 00:48:52.719
of explicitly adding a log everywhere, I can decorate the
797
00:48:52.800 --> 00:48:58.000
class maybe and thenates automatically. It basically modifies the behavior
798
00:48:58.079 --> 00:49:02.000
of all the class methods. Whenever I instantiate the instance,
799
00:49:02.039 --> 00:49:05.639
I get this functionality automatically. So it's a it's a
800
00:49:05.679 --> 00:49:08.920
way of implementing cross cutting concerns.
801
00:49:09.400 --> 00:49:13.559
Yes, it has two problems though, Okay.
802
00:49:13.840 --> 00:49:18.079
Oh, just to finish it's it's been a part it's
803
00:49:18.119 --> 00:49:24.679
it's very very popular in in Angular. Uh, it's been
804
00:49:24.800 --> 00:49:29.719
part of typescript for a while, and there's a proposal
805
00:49:29.800 --> 00:49:32.639
to add it to the JavaScript language itself, which, like
806
00:49:32.719 --> 00:49:34.280
we said, is kind of stuck in purgative.
807
00:49:35.159 --> 00:49:39.199
Yes, okay, let me explain the situation there. Okay, So
808
00:49:41.719 --> 00:49:45.039
the current so this pack.
809
00:49:46.639 --> 00:49:50.119
As it was originally proposed and done in typescript okay,
810
00:49:51.000 --> 00:49:56.920
all types types four and something okay, and before was
811
00:49:57.960 --> 00:50:01.159
was very hard to poly fil Okay. If you look
812
00:50:01.199 --> 00:50:06.320
at the JavaScript code that is being those syntax transpiles to,
813
00:50:07.960 --> 00:50:09.199
you can get very scared.
814
00:50:09.519 --> 00:50:15.480
Okay, lets let's go eight. It's like regenerator style things.
815
00:50:15.559 --> 00:50:18.320
I don't know if you ever looked at the cover
816
00:50:18.400 --> 00:50:22.639
of what our generator does, but is pretty ugly, okay,
817
00:50:22.760 --> 00:50:25.400
because there is a lot of global state. There is
818
00:50:25.480 --> 00:50:31.199
a lot of things happening. It's not nice.
819
00:50:31.760 --> 00:50:37.800
Then the standard changed in a way that it's essentially
820
00:50:37.880 --> 00:50:42.159
Java is essentially function wrappers okay, which can be attached
821
00:50:42.199 --> 00:50:46.760
to classes because classes are functions okay, or functions okay,
822
00:50:46.960 --> 00:50:52.039
which makes it way easier to to reason about this thing, okay.
823
00:50:52.159 --> 00:50:55.400
And also it's just a function, so it literally is
824
00:50:55.480 --> 00:50:59.679
easier to you know, implement some extent.
825
00:50:59.480 --> 00:51:02.719
The function that gets cold with the function as its
826
00:51:02.840 --> 00:51:05.679
argument and in context, and then it returns a function
827
00:51:05.800 --> 00:51:07.880
that gets used instead of the original function.
828
00:51:08.400 --> 00:51:10.800
Exactly, Very straightforward, Okay.
829
00:51:11.280 --> 00:51:16.880
I was just thinking, Yeah, it sounds like I'm still
830
00:51:16.920 --> 00:51:18.199
not sure I follow anyway.
831
00:51:18.719 --> 00:51:21.199
Anyway, It's it's simple, but there is a difference, okay.
832
00:51:21.280 --> 00:51:26.440
The old standard allowed to attach decorator to.
833
00:51:27.239 --> 00:51:29.760
Arguments parameters hmm.
834
00:51:29.960 --> 00:51:32.679
Yeah, and nest chess uses that a lot.
835
00:51:33.000 --> 00:51:39.159
Exactly, and in the new standard this is not possible.
836
00:51:38.719 --> 00:51:42.400
Anymore because they're not functions. They're just parameters.
837
00:51:42.000 --> 00:51:49.119
Exactly, and and that is my world problem.
838
00:51:49.639 --> 00:51:53.199
Okay, that nest chess is tied to a syntax which
839
00:51:53.239 --> 00:51:56.800
goes against the grain of where JavaScript is heading exactly.
840
00:51:57.840 --> 00:52:02.440
Also, its transpiled is really bad. That's it.
841
00:52:03.440 --> 00:52:05.920
I care a lot about the Java skity is being executed,
842
00:52:05.960 --> 00:52:10.239
and that is transpiled to some really two things that
843
00:52:10.280 --> 00:52:12.760
I would not have running on my servers.
844
00:52:16.119 --> 00:52:19.280
I'll say it again. It's really popular with people that
845
00:52:19.519 --> 00:52:24.079
come to note from Java, so I know a lot
846
00:52:24.119 --> 00:52:27.960
of back end developers that literally swear by it. It's
847
00:52:28.000 --> 00:52:30.119
a back end that you use as a back end
848
00:52:30.119 --> 00:52:33.519
for API. Course. Yes, it's it's not about necessa or
849
00:52:33.519 --> 00:52:35.599
anything like that exactly.
850
00:52:36.239 --> 00:52:37.519
But I am, I am.
851
00:52:37.679 --> 00:52:39.519
I have a side on all of this, so you
852
00:52:39.559 --> 00:52:41.039
can take all of what I said with a gain
853
00:52:41.119 --> 00:52:44.599
of salt. I have built to Fastify to solve this
problem.
854
00:52:44.719 --> 00:52:48.719
Been using it for the last decade and very happy
855
00:52:48.760 --> 00:52:49.039
with it.
856
00:52:49.599 --> 00:52:54.519
Yeah, it's really opinionated anyway. Moving But in terms of performance,
857
00:52:54.679 --> 00:52:56.760
what can you say aboutn SGS.
858
00:52:57.079 --> 00:53:01.519
I have not benchmarked it signific Okay.
859
00:53:01.920 --> 00:53:07.920
I suspect is slower than Core Express or Fastify. You
860
00:53:07.920 --> 00:53:10.920
can use Express or Fastify underneath, and I suspect is
861
00:53:11.119 --> 00:53:13.239
slower and it adds a little bit over it on top.
862
00:53:13.440 --> 00:53:15.960
Yeah, it has to kind of because it's literally built
863
00:53:16.000 --> 00:53:16.599
on top of it.
864
00:53:16.719 --> 00:53:25.559
So yes, I hope is as little as possible. But look,
865
00:53:25.679 --> 00:53:28.679
you're asking so you might get an article on it.
866
00:53:28.800 --> 00:53:31.760
So I'm my co found is telling me to do it,
867
00:53:31.880 --> 00:53:34.559
so to do the research. So I'll do the research.
868
00:53:34.760 --> 00:53:37.719
I can say that it's pretty popular. It's popular to
869
00:53:37.760 --> 00:53:41.360
the extent that it's boring, you know, like the best
870
00:53:41.360 --> 00:53:44.119
compliment you can give about the technology is that it's boring.
871
00:53:44.400 --> 00:53:46.400
Yeah, I know, I know, I do the same.
872
00:53:47.159 --> 00:53:50.400
Okay. So moving back to what we were talking about
873
00:53:50.440 --> 00:53:55.199
with so you talked about the surprising results that you got. Now,
874
00:53:55.840 --> 00:54:01.320
so obviously, if I'm running the bottom line is that
875
00:54:02.079 --> 00:54:07.400
if I'm running currently node on Amazon, and especially if
876
00:54:07.400 --> 00:54:09.679
I'm using it for a s SR, not necessarily, but
877
00:54:09.800 --> 00:54:12.760
especially if I'm using it for as SR, then I
878
00:54:12.840 --> 00:54:17.039
should be looking at what because bun won't save me
879
00:54:18.400 --> 00:54:22.639
pretty much. And okay, cool, anything else to add on
880
00:54:22.679 --> 00:54:23.719
that particular.
881
00:54:23.320 --> 00:54:26.119
Topic, Nope, I think I covered it all.
882
00:54:26.599 --> 00:54:29.639
So you had a list, let's go to the next one. Yay.
883
00:54:29.920 --> 00:54:32.920
So so just just on the issue of time. We
884
00:54:33.039 --> 00:54:38.199
have been recording for about an hour, which I'm totally
885
00:54:38.239 --> 00:54:42.519
fine sticking around for however long, but I need.
886
00:54:42.119 --> 00:54:46.039
To probably go at when these meeting ends that I
887
00:54:46.079 --> 00:54:47.320
have on my calendar.
888
00:54:47.119 --> 00:54:49.360
So that doesn't it just means that you want to
889
00:54:49.400 --> 00:54:51.320
bring it on and I bring you on again.
890
00:54:51.960 --> 00:54:58.519
Absolutely, I'm coming again. I'm coming again, of course.
891
00:54:58.719 --> 00:54:59.039
Okay.
892
00:54:59.119 --> 00:55:02.039
So the second one that I wanted to cover is
893
00:55:02.079 --> 00:55:05.360
the topic of flame graphs. Now, in all of these
894
00:55:05.400 --> 00:55:10.440
benchmarking to do a lot of optimizations and look at things, okay,
895
00:55:11.320 --> 00:55:16.639
and we created a brand new frame graph tool to
896
00:55:17.079 --> 00:55:18.440
do performance analysis.
897
00:55:18.960 --> 00:55:22.519
I don't know what a flame graph is, So imagine
898
00:55:22.559 --> 00:55:23.840
that you are.
899
00:55:25.280 --> 00:55:27.679
You want to do a performance optimization. Okay, you have
900
00:55:27.880 --> 00:55:30.239
you know your application is low, and you want to
901
00:55:30.239 --> 00:55:31.000
know where it's low.
902
00:55:31.440 --> 00:55:35.280
Okay. A flame graph shows.
903
00:55:34.880 --> 00:55:40.440
You the hottest points in your code base that consume
904
00:55:40.599 --> 00:55:41.239
the most time.
905
00:55:42.400 --> 00:55:44.239
Okay, I've seen them, I just didn't know that's what
906
00:55:44.280 --> 00:55:45.800
they were called exactly.
907
00:55:45.960 --> 00:55:46.239
Okay.
908
00:55:46.280 --> 00:55:50.079
So Cinema GRAPHA and a new relic, so yeah.
909
00:55:49.880 --> 00:55:50.199
They can.
910
00:55:50.280 --> 00:55:52.519
You can click a button and get the flame graph.
911
00:55:52.599 --> 00:55:56.000
The key point is you the flame graph abstract time.
912
00:55:56.039 --> 00:55:58.800
So it takes an internet of time and says, let
913
00:55:58.840 --> 00:56:01.400
me represent this the function calls that happen in this
914
00:56:01.519 --> 00:56:05.559
interval of time. Okay, because in that way, I know
915
00:56:05.679 --> 00:56:08.239
how much a function is being called compared to the others.
916
00:56:08.280 --> 00:56:09.559
So I can make a comparison.
917
00:56:10.000 --> 00:56:14.639
Okay, so I can, so we can detect how much
918
00:56:14.719 --> 00:56:16.559
function was called and how hot it is.
919
00:56:16.920 --> 00:56:21.719
Okay, but I've been doing this for for a long time.
920
00:56:21.800 --> 00:56:25.000
I created the second kind of two third generation tool
921
00:56:25.039 --> 00:56:28.119
that I create with these kind of things. Okay, a
922
00:56:28.280 --> 00:56:31.679
new version of note require differently tools to get it done.
923
00:56:32.239 --> 00:56:34.559
PingER Cross is the last, but probably there will be
924
00:56:34.599 --> 00:56:35.639
another one in a few years.
925
00:56:35.800 --> 00:56:36.079
Okay.
926
00:56:36.519 --> 00:56:40.880
Now, somebody who's listening to us and here's a flame
927
00:56:40.960 --> 00:56:46.639
graft to measure NOTE performance might be thinking, Hey, why
928
00:56:46.679 --> 00:56:49.480
do I need this from a platformatic where I have
929
00:56:49.559 --> 00:56:57.239
it built into dev tools for like forever for why
930
00:56:57.280 --> 00:56:59.199
do I need at another one? What's wrong
with the
931
00:56:59.199 --> 00:57:00.840
one that's built in death tools.
932
00:57:01.280 --> 00:57:08.239
The tools gives you a flame shart, not a flame draft.
933
00:57:09.599 --> 00:57:15.840
It's not as readable, it doesn't give you the full picture. Also,
934
00:57:17.519 --> 00:57:23.000
it's the way. The part of the problem is the
935
00:57:23.039 --> 00:57:27.840
collection of that data is very expensive, so by running
936
00:57:28.000 --> 00:57:34.039
it in the tools, you are essentially altering, like the
937
00:57:34.559 --> 00:57:39.079
act of observing something modifies the behavior.
938
00:57:40.440 --> 00:57:44.119
Quantum mechanics, right, Yeah, it's quantum mechanics at play.
939
00:57:44.400 --> 00:57:47.719
Yes, just to clarify, I'm aware of the issues and
940
00:57:47.760 --> 00:57:50.039
I totally agree with you. I'm just bringing it up
941
00:57:50.079 --> 00:57:52.400
so you can rebut it perfect.
942
00:57:52.480 --> 00:57:52.760
Okay.
943
00:57:52.800 --> 00:57:55.639
So it's quantum mechanics at work. You observe it, you
944
00:57:55.760 --> 00:57:56.199
change it.
945
00:57:56.400 --> 00:57:56.760
Okay.
946
00:57:57.440 --> 00:58:01.239
The way the what we have done instead of relying
947
00:58:01.320 --> 00:58:04.800
on the inspector to to get that data, okay, we
948
00:58:04.840 --> 00:58:08.599
are using a C plus plus module from our good
949
00:58:08.639 --> 00:58:12.039
friends at Data Dog that they're using their agent to
950
00:58:12.079 --> 00:58:14.920
collect those data from C plus plus straight out of
951
00:58:15.000 --> 00:58:19.039
the eight in the fastest possible way. So it does
952
00:58:19.119 --> 00:58:24.199
not interfere much with the application itself to the point
953
00:58:24.239 --> 00:58:26.760
that you can use it in production to collect those
954
00:58:26.760 --> 00:58:29.679
flame graphs. Now, if you try to enable the inspector,
955
00:58:29.760 --> 00:58:32.079
you are looking at a fifty percent performance job.
956
00:58:32.960 --> 00:58:35.920
It's beyond that. First of all, let's start with the
957
00:58:35.960 --> 00:58:39.280
fact that you probably don't want to attach the development
958
00:58:39.360 --> 00:58:44.000
tool to your production environment. Yes, somebody might click pause,
959
00:58:49.840 --> 00:58:55.519
Oh yeah, you're not going to be running in production
960
00:58:55.719 --> 00:59:02.920
Node servant production with as inspect you know, yeah, yeah,
961
00:59:02.960 --> 00:59:05.719
and you're not and you're not going to believe that
962
00:59:05.719 --> 00:59:08.280
that port open. Well, you know, you can do it
963
00:59:08.360 --> 00:59:14.000
as such tunneling and whatnot. But anyway, and like Matteo said,
964
00:59:14.239 --> 00:59:22.639
the overhead of actually doing a flame chart is really high.
965
00:59:21.960 --> 00:59:25.760
And by the way, also for that same reason, it's
966
00:59:25.800 --> 00:59:29.119
time constrained. You can't run it forever. You can run
967
00:59:29.199 --> 00:59:32.119
it for a very limited amount of time. Now, I
968
00:59:32.559 --> 00:59:37.559
have in the past implemented certain scenarios in certain applications
969
00:59:37.599 --> 00:59:42.039
where we sent a signal or an event into a
970
00:59:42.079 --> 00:59:47.960
process to kind of trigger it. But it's you can again,
971
00:59:48.000 --> 00:59:50.159
you can only run these sort of things for a
972
00:59:50.199 --> 00:59:51.519
really limited amount of time.
973
00:59:52.639 --> 00:59:53.119
Exactly.
974
00:59:54.320 --> 00:59:56.599
You can also still run this kind of tool for
975
00:59:56.639 --> 01:00:01.079
a limited amount of time, So it's a you know,
976
01:00:01.199 --> 01:00:03.840
you can even the way you do it, you run
977
01:00:03.920 --> 01:00:08.679
it for essentially one minute to collect what's happening. And
978
01:00:09.400 --> 01:00:14.400
in our platform, we can even start collecting it when
979
01:00:14.519 --> 01:00:18.400
usage goes over a certain threshold, so that you know,
980
01:00:18.519 --> 01:00:24.119
you don't you're not wasting money. But it's actually very good,
981
01:00:24.360 --> 01:00:26.800
so you can actually.
982
01:00:28.159 --> 01:00:31.719
Even running in production get good data out. Data Doctor
983
01:00:31.760 --> 01:00:33.920
is running this in production all the time. It's fantastic.
984
01:00:34.679 --> 01:00:37.039
By the way, I have to say, it was really funny.
985
01:00:37.079 --> 01:00:39.679
So when I found out about this tool and I
986
01:00:39.719 --> 01:00:42.960
started using it, and I started experimenting with it, and
987
01:00:43.000 --> 01:00:46.280
I reported like six issues or something like that back
988
01:00:46.320 --> 01:00:49.599
to Mateo and the guys and the gang, and like
989
01:00:49.679 --> 01:00:53.119
within one day it fixed all of them. It was
990
01:00:53.840 --> 01:00:54.800
it was really amusing.
991
01:00:55.159 --> 01:01:00.320
Yeah, very fast. It's so there is that. Okay, tool
992
01:01:00.480 --> 01:01:04.000
was great. Last week. I think we shaped something new.
993
01:01:04.239 --> 01:01:10.119
We shipped a way to get the representation of the
994
01:01:10.159 --> 01:01:13.960
flamegraph as marked down, so you can essentially feed it
995
01:01:14.079 --> 01:01:17.639
to an l LM and it will just fix things.
996
01:01:18.800 --> 01:01:24.519
So it will basically understand where your bottlenecks are in
997
01:01:24.599 --> 01:01:29.800
terms of performance and focus on them automatic exactly. Like
998
01:01:29.960 --> 01:01:34.400
this function is slow, but it's not just slow. It's impacting.
999
01:01:35.199 --> 01:01:38.000
It's being called a lot, so it has a significant impact.
1000
01:01:38.199 --> 01:01:40.840
Or that function is hardly used, there's no point in
1001
01:01:40.840 --> 01:01:42.039
optimizing exactly.
1002
01:01:43.440 --> 01:01:46.559
Yeah, but like you said, Matteo, it seems also that
1003
01:01:47.519 -->
01:01:51.639
some of the fixes are pretty commonly understood and easy
1004
01:01:51.679 --> 01:01:54.039
for the LLM to implement, and so I can also
1005
01:01:54.480 --> 01:01:57.760
you know, it's like add add a database index or hey,
1006
01:01:57.920 --> 01:01:59.599
if you can't if you do it this way instead
1007
01:01:59.639 --> 01:02:02.000
of that way. This structure is more performant than that one.
1008
01:02:02.079 --> 01:02:06.320
And you know it's it's it's little changes, but they're
1009
01:02:07.320 --> 01:02:10.599
low risk, low risk, and the LAM is great at it.
1010
01:02:10.800 --> 01:02:14.840
Okay, I called the low hanging fruits. Okay, so the
1011
01:02:14.880 --> 01:02:18.119
low hanging fruits are super easy to do.
1012
01:02:18.360 --> 01:02:19.559
For the alarms. Okay.
1013
01:02:20.119 --> 01:02:23.800
Now from the frame graph you can even spot some
1014
01:02:23.960 --> 01:02:28.679
bad architectural patterns happening. And the bad architectural patterns are
1015
01:02:28.800 --> 01:02:32.079
harder so to figure out.
1016
01:02:32.280 --> 01:02:36.960
So during my research I've done, I opened a few bugs. Okay.
1017
01:02:37.800 --> 01:02:42.119
One is on a React router. I found that it
1018
01:02:43.119 --> 01:02:47.119
for every rendering its schedules a timer that's never cleared,
1019
01:02:47.719 --> 01:02:51.400
so it runs to completion. It's it's like five second,
1020
01:02:52.159 --> 01:02:55.840
but that cause it's becomes a hot spot for the
1021
01:02:55.840 --> 01:02:56.639
garbage collection.
1022
01:02:57.519 --> 01:02:59.679
Right. I was going to say, it's a memory leak,
1023
01:02:59.719 --> 01:03:01.920
but it's nice. It does get it.
1024
01:03:04.400 --> 01:03:08.239
Eventually, yes, but it's enough that it gets by. It'll
1025
01:03:08.400 --> 01:03:11.559
keep memory located for more and it's enough for that
1026
01:03:11.719 --> 01:03:15.119
memory to be moved to old space. So it's actually
1027
01:03:15.159 --> 01:03:19.159
creating a some problems for the wrong time that's actually
1028
01:03:19.199 --> 01:03:23.039
not needed. That could avoid could be avoided. Okay, I
1029
01:03:23.039 --> 01:03:26.480
sent a patch. Another one that I found recently is
1030
01:03:26.639 --> 01:03:30.159
a bug on with this tool is on GT.
1031
01:03:30.480 --> 01:03:31.519
I don't know if you know GT.
1032
01:03:32.199 --> 01:03:34.119
By the way, I found this a very horrible bug
1033
01:03:34.239 --> 01:03:36.079
and I am really bad.
1034
01:03:36.480 --> 01:03:38.639
Let me pass it to you because.
1035
01:03:40.559 --> 01:03:44.079
And GT is a module a lot than sixty million
1036
01:03:44.119 --> 01:03:45.400
times per week something like that.
1037
01:03:46.280 --> 01:03:46.599
GT.
1038
01:03:47.440 --> 01:03:51.199
Yeah, GT, this is a bug. I passed the bag
1039
01:03:51.199 --> 01:03:53.639
in the chat J I T I yeah.
1040
01:03:54.440 --> 01:03:58.440
It makes any any function that export in a function
1041
01:03:59.199 --> 01:04:01.000
between sixteen seventy times lower.
1042
01:04:01.519 --> 01:04:02.320
What is chitty.
1043
01:04:03.400 --> 01:04:08.400
It's a module to load the typescript straight from node,
1044
01:04:08.599 --> 01:04:12.920
similar to tes what tes no does, but that differently
1045
01:04:13.039 --> 01:04:18.159
typed syme of things is used by yes, lint, nxt, netro,
1046
01:04:18.960 --> 01:04:19.800
post CSS.
1047
01:04:22.480 --> 01:04:22.920
I don't know.
1048
01:04:23.559 --> 01:04:26.559
Tailwind is very popular in front and I have I
1049
01:04:26.559 --> 01:04:28.800
had no idea this even existed until it showed up
1050
01:04:28.800 --> 01:04:29.800
in my flamegraphs.
1051
01:04:30.239 --> 01:04:33.840
Man, don't you love it when people use proxies?
1052
01:04:34.360 --> 01:04:37.719
Yes? You see see I have you know it's it's
1053
01:04:37.760 --> 01:04:40.960
it's one of the most misused technologies that you can
1054
01:04:41.000 --> 01:04:43.440
get in that Like, if you're using a proxy, you
1055
01:04:43.480 --> 01:04:46.239
should ask am I doing it wrong?
1056
01:04:47.480 --> 01:04:51.639
And the answer would probably be yes, yes, not always,
1057
01:04:51.719 --> 01:04:53.719
not one hundred percent of the time, but you should
1058
01:04:53.760 --> 01:04:55.679
definitely be able to justify yourself.
1059
01:04:56.039 --> 01:04:59.199
Yeah. So I'm going to kind of push us to
1060
01:04:59.239 --> 01:05:02.079
wrap up this particular topic because we only have like
1061
01:05:02.119 --> 01:05:03.079
eight minutes left.
1062
01:05:03.079 --> 01:05:06.679
So I just have to say that before we conclude
1063
01:05:06.679 --> 01:05:12.840
on this, that the ability to gather performance information throughout
1064
01:05:12.880 --> 01:05:19.159
the lifetime of a process in production is invaluable. You know,
1065
01:05:19.280 --> 01:05:24.960
we've had similar technologies in other programming languages, like the
1066
01:05:25.280 --> 01:05:32.280
what's it called in Java? Java has the Java black
1067
01:05:32.400 --> 01:05:37.440
box sort of thing, I forget the name. That they
1068
01:05:37.960 --> 01:05:42.000
have the ability to collect performance information without usually without
1069
01:05:42.039 --> 01:05:46.079
significantly impacting runtime performance, that you can do it in production.
1070
01:05:46.199 --> 01:05:48.840
The ability to do the same thing or similar thing
1071
01:05:49.480 --> 01:05:54.679
in for node is really invaluable. And I'm really grateful
1072
01:05:54.719 --> 01:05:58.119
for Mattel and everybody Platformatic for releasing this game.
1073
01:05:59.400 --> 01:06:02.599
Is there free tried out if you want, if you need,
1074
01:06:02.880 --> 01:06:06.840
you know, talk a little bit about my company enough.
1075
01:06:07.039 --> 01:06:11.840
But if you using this tag and you it's core
1076
01:06:11.880 --> 01:06:13.920
part of what you do, you can reach out.
1077
01:06:14.000 -->
01:06:15.559
We'll be very happy to help you.
1078
01:06:18.159 --> 01:06:22.480
Cool. All right, Well, I'm going to push us two picks. Uh,
1079
01:06:22.840 --> 01:06:24.679
this is where we do shout outs about stuff we
1080
01:06:24.840 --> 01:06:30.000
like and uh yeah, I know that you're kind of
1081
01:06:30.079 --> 01:06:32.599
under a time crunch Matereo, do you want to go first?
1082
01:06:32.639 --> 01:06:34.119
Or do you want one of us to go first?
1083
01:06:34.559 --> 01:06:34.800
Oh?
1084
01:06:35.719 --> 01:06:38.599
Let me let you go first and then I go last.
1085
01:06:38.960 --> 01:06:41.159
Okay, Dan, what are your picks?
1086
01:06:41.599 --> 01:06:46.679
Okay? So I've got two picks. The first pick is.
1087
01:06:46.760 --> 01:06:52.559
We've been playing this amusing game in our family these
1088
01:06:52.599 --> 01:06:57.320
past couple of weeks. It's called Hitster. It's this kind
1089
01:06:57.360 --> 01:07:00.719
of a game where you've got a certain like deck
1090
01:07:00.760 --> 01:07:05.960
of cards and each card has this QR code that
1091
01:07:06.039 --> 01:07:10.400
you scan, and it goes with your phone and it
1092
01:07:10.519 --> 01:07:13.960
goes to the and it actually starts playing that song.
1093
01:07:15.519 --> 01:07:18.880
I think it uses Spotify, but I'm not. I don't
1094
01:07:18.880 --> 01:07:21.239
remember off the top of my head. And the idea
1095
01:07:21.480 --> 01:07:24.159
is that you play every you divide into teams. You
1096
01:07:24.199 --> 01:07:28.320
play the song for about twenty seconds, and then the
1097
01:07:28.400 --> 01:07:33.719
team that turn it currently is needs to guess the artist,
1098
01:07:34.360 --> 01:07:36.519
the title of the song, the artist, and the year
1099
01:07:36.559 --> 01:07:39.920
in which it came out. If you need to guess
1100
01:07:39.960 --> 01:07:42.599
at least two to get a point, If you guess
1101
01:07:42.639 --> 01:07:46.639
all three, you get two points. Something along these lines.
1102
01:07:47.639 --> 01:07:50.119
And we've been playing this in our family, and it's
1103
01:07:50.639 --> 01:07:53.679
songs from all eras. In the case of Israel, it's
1104
01:07:53.679 --> 01:07:58.480
both Israeli music and you know international or American music
1105
01:07:58.559 --> 01:08:01.800
or British music, and it's really a lot of fun.
1106
01:08:01.880 --> 01:08:06.239
We enjoy it very very much. You know, you listen
1107
01:08:06.280 --> 01:08:09.800
to music, what's you know and and try to guess
1108
01:08:10.320 --> 01:08:12.960
the songs. It's it's a lot of fun. So that
1109
01:08:13.000 --> 01:08:17.359
would be my first pick, and the second pick is
1110
01:08:17.399 --> 01:08:21.720
again is actually Matteo. I want to mention that on
1111
01:08:22.439 --> 01:08:27.760
X Matteo, you put out videos on a fairly regular basis.
1112
01:08:28.279 --> 01:08:31.279
It's they're relatively short usually I think they're like twenty
1113
01:08:31.319 --> 01:08:35.800
minutes each, usually about a variety of topics related to
1114
01:08:36.000 --> 01:08:41.520
know the Jass development obviously, and they're uniformly excellent, and
1115
01:08:41.600 --> 01:08:45.359
I highly recommend following Matteo and watching the videos that
1116
01:08:45.880 --> 01:08:50.199
come out. So that would be my second pick, And
1117
01:08:50.359 --> 01:08:51.600
those are my picks for today.
1118
01:08:52.159 --> 01:08:55.680
Awesome, Steve, what are your picks.
1119
01:08:55.600 --> 01:09:00.439
Before I get to the high point of every episode,
1120
01:09:00.479 --> 01:09:02.920
which are the dad jokes of the week. An interesting
1121
01:09:03.279 --> 01:09:08.920
video that popped up on YouTube last night by Jeffrey Ray.
1122
01:09:09.199 --> 01:09:13.800
Jeffrey Ray, who is the owner creator of Larra Cass, which,
1123
01:09:13.800 --> 01:09:16.560
if not Larabelle Community is a pretty well known training
1124
01:09:16.600 --> 01:09:21.159
platform for Larabell and on many many other topics as well.
1125
01:09:21.680 --> 01:09:24.560
And he titled it I'm Done, and it's just sort
1126
01:09:24.560 --> 01:09:29.479
of a a it's about thirteen fourteen minutes where he's
1127
01:09:29.520 --> 01:09:31.960
just talking about the impact that AI has had on
1128
01:09:32.199 --> 01:09:34.439
Larrakass and they just had to layoff a bunch of people,
1129
01:09:35.399 --> 01:09:39.600
similar to what happened with Tailwind and the you know,
1130
01:09:39.880 --> 01:09:44.399
sort of the use of AI and coding and you know,
1131
01:09:44.439 --> 01:09:49.600
the pros and cons and sort of almost having to
1132
01:09:49.880 --> 01:09:54.760
use it or get left behind. He's a I gotta
1133
01:09:54.800 --> 01:09:56.119
agree with him in a lot of what he says.
1134
01:09:56.119 --> 01:09:58.600
It's only about fourteen minutes, so it's it's a good watch,
1135
01:09:58.680 --> 01:10:03.159
but it's I think it addresses the reality of AI
1136
01:10:03.319 --> 01:10:06.520
encoding and how it's impact impacting things both I think,
1137
01:10:06.560 --> 01:10:08.079
I think both for good and bad.
1138
01:10:08.680 --> 01:10:12.800
I think we should probably bring a bunch of open
1139
01:10:12.840 --> 01:10:19.920
source creators, people like Matteo, like maybe uh, we've had
1140
01:10:19.920 --> 01:10:24.079
a of the Joel we we've had on the show
1141
01:10:25.720 --> 01:10:29.479
talking about the slint and t slint uh and and
1142
01:10:29.640 --> 01:10:34.760
basically talk about the impact that AI is having on
1143
01:10:34.760 --> 01:10:39.119
on open source developers. It's really cutting the branch that
1144
01:10:39.239 --> 01:10:41.840
a lot of them are sitting on financially.
1145
01:10:41.720 --> 01:10:43.960
On that upper Ever note, I'll get to the dad
1146
01:10:44.039 --> 01:10:49.239
jokes of the week. So, first of all, pretty straightforward
1147
01:10:49.279 --> 01:10:53.199
question here, what do you call a pony with a
1148
01:10:53.279 --> 01:10:56.600
sore throat? A little horse?
1149
01:10:59.439 --> 01:10:59.600
Right?
1150
01:11:02.479 --> 01:11:03.720
So good, thank you, Mateo.
1151
01:11:03.800 --> 01:11:04.159
I love that.
1152
01:11:07.039 --> 01:11:09.319
So everybody knows who Alan Turing is, right, the term
1153
01:11:09.399 --> 01:11:14.000
touring complete Uh, you know in computer science Enigma and yeah,
1154
01:11:14.039 --> 01:11:16.760
he cracked the Enigma codes in World War Two, but
1155
01:11:17.800 --> 01:11:20.840
nobody knows his sister Kay, who provided drink, snacks and
1156
01:11:20.840 --> 01:11:26.560
sandwiches for him and his colleagues. I was in catering, Yeah,
1157
01:11:27.000 --> 01:11:27.319
right right.
1158
01:11:27.800 --> 01:11:29.319
It took me a minute. Yeah.
1159
01:11:29.359 --> 01:11:33.920
And then finally, uh, why does Spider Man hate driving
1160
01:11:33.960 --> 01:11:41.640
with his evil twin because he's a bad parallel parker? Oh?
1161
01:11:41.960 --> 01:11:43.760
Thank you. Those are the dad jokes of the week.
1162
01:11:45.000 --> 01:11:47.960
I usually don't laugh at the dad jokes, but Mateo's
1163
01:11:48.039 --> 01:11:49.520
reaction was priceless.
1164
01:11:50.000 --> 01:11:51.279
That's half the fun sometimes.
1165
01:11:52.000 --> 01:11:54.720
Oh all right, I'm gonna jump in with some picks.
1166
01:11:55.000 --> 01:11:56.960
The first one I always do a board game pick,
1167
01:11:58.439 --> 01:12:02.239
and this one we got for Christmas. Man, has it
1168
01:12:02.279 --> 01:12:04.199
been that long since I've been able to get on
1169
01:12:04.279 --> 01:12:10.960
and record. Yes, thanks Steve. He made me feel better. Anyway.
1170
01:12:11.600 --> 01:12:13.359
The game that one of the games we got was
1171
01:12:13.359 --> 01:12:18.119
Everdell came out twenty eighteen. My wife and I played it,
1172
01:12:18.119 --> 01:12:20.680
so it was just two players with us. It probably
1173
01:12:20.680 --> 01:12:22.880
took us an hour, maybe a little longer to play.
1174
01:12:23.399 --> 01:12:25.920
We were learning it as we went though. I think
1175
01:12:25.960 --> 01:12:29.239
I played it with my sister and my wife another
1176
01:12:29.319 --> 01:12:31.760
time and it took us about the same amount of
1177
01:12:31.760 --> 01:12:33.560
time because at that point we knew what we were doing.
1178
01:12:34.439 --> 01:12:38.800
And anyway, what it is, it's actually the board's kind
1179
01:12:38.840 --> 01:12:42.560
of cool because it's got this tree that you kind
1180
01:12:42.560 --> 01:12:46.359
of slide together. It's made out of cardboard, but it
1181
01:12:46.399 --> 01:12:48.840
looks really cool when it's set up and it's sitting
1182
01:12:48.880 --> 01:12:51.720
on the board. Reminds me a little bit of the
1183
01:12:52.439 --> 01:12:59.880
Tower in Fate of the Fellowship, which is a pandemic
1184
01:13:00.279 --> 01:13:05.079
like game based on Lord of the Rings. But anyway,
1185
01:13:05.159 -->
01:13:09.319
so Everdell plays up to four players and you're trying
1186
01:13:09.319 --> 01:13:11.960
to collect resources in order to fill missions, and you're
1187
01:13:11.960 --> 01:13:18.520
building a little town of animals in you know, basically
1188
01:13:18.600 --> 01:13:20.600
in front of you, and that gives you special ability.
1189
01:13:20.680 --> 01:13:25.279
So it's a pretty standard kind of game. It's just
1190
01:13:25.399 --> 01:13:29.000
you know, a couple of little nuances and stuff. Anyway,
1191
01:13:29.399 --> 01:13:32.159
it was fun. Definitely enjoyed it. It's not.
1192
01:13:33.640 --> 01:13:34.359
It's not so.
1193
01:13:34.560 --> 01:13:37.479
Novel or different or whatever that I would just go
1194
01:13:37.560 --> 01:13:41.880
and reach for it on my own on a regular basis.
1195
01:13:42.039 --> 01:13:44.319
But I did enjoy it. It's definitely a game worth,
1196
01:13:44.520 --> 01:13:47.439
you know, having him playing, and the artwork on it
1197
01:13:47.479 --> 01:13:52.640
is incredible. So I'm going to pick Everdell board game
1198
01:13:52.680 --> 01:13:58.119
has a board game weight of two point eighty three,
1199
01:13:58.239 --> 01:14:02.439
and that means that it's it's it's a fairly involved game,
1200
01:14:02.479 --> 01:14:04.439
but if you've played a lot of the other resource
1201
01:14:04.479 --> 01:14:11.119
gathering deck building kind of games, it's nothing outside of
1202
01:14:11.159 --> 01:14:16.800
the realm of what you're what you've probably already played.
1203
01:14:17.199 --> 01:14:24.960
So I'll pick that, and then what else. I started
1204
01:14:25.000 --> 01:14:28.199
watching land Man and I've been enjoying that. That's on
1205
01:14:28.239 --> 01:14:31.239
Paramount Plus, and so I'm going to pick that. And
1206
01:14:31.279 --> 01:14:34.159
then I watched My wife and I started watching the show,
1207
01:14:34.239 --> 01:14:36.800
and she's a little bit sensitive to people dropping f
1208
01:14:36.880 --> 01:14:39.680
bombs during shows, and so if there's too much of that,
1209
01:14:39.720 --> 01:14:41.720
she won't watch it. And so we watched like the
1210
01:14:41.760 --> 01:14:45.520
first episode way back when of eleven twenty two sixty three,
1211
01:14:47.399 --> 01:14:51.880
which is, uh, there's this history teacher. His friend's been
1212
01:14:51.920 --> 01:14:54.800
going back in time to try and save JFK from
1213
01:14:54.840 --> 01:14:59.279
being assassinated. And so anyway, he takes all of his
1214
01:14:59.319 --> 01:15:03.000
friends research and you know, all the preparation that he's done,
1215
01:15:03.000 --> 01:15:06.600
and he goes back to save JFK and right then
1216
01:15:06.640 --> 01:15:08.399
come back to the future where it's supposed to be
1217
01:15:08.399 --> 01:15:11.479
better because you know, Linda Johnson wouldn't have gotten us
1218
01:15:11.479 --> 01:15:14.039
into the Vietnam War and a whole bunch of other
1219
01:15:14.439 --> 01:15:16.840
things that other people did that you know, this particular
1220
01:15:16.880 --> 01:15:20.640
guy didn't like wouldn't have happened. And anyway, so I'm
1221
01:15:20.640 --> 01:15:23.000
not going to spoil how it changes the future, even
1222
01:15:23.000 --> 01:15:26.359
though the show's like ten years old, just in case
1223
01:15:26.359 --> 01:15:29.560
you want to go watch it, because honestly, it's it's
1224
01:15:29.600 --> 01:15:34.720
actually pretty like the whole journey's pretty pretty interesting to
1225
01:15:34.720 --> 01:15:38.399
watch him go through and you know, encounter people from
1226
01:15:38.399 --> 01:15:41.680
the past and stuff like that. So I'm going to pick.
1227
01:15:42.119 --> 01:15:44.279
So you've got to pick Prime Month plus. How are
1228
01:15:44.319 --> 01:15:46.479
you enjoying Star Trek Starfleet Academy.
1229
01:15:47.039 --> 01:15:51.239
I have not watched it at all. I've seen ads
1230
01:15:51.239 --> 01:15:53.119
for it, but I haven't watched it. Is it good.
1231
01:15:53.840 --> 01:15:57.720
I've not watched it. I'm going based on the reactions
1232
01:15:57.800 --> 01:16:02.960
and the critics. You know, the story that they released
1233
01:16:02.960 --> 01:16:08.279
the first episode for free on YouTube and a nerdratic
1234
01:16:09.359 --> 01:16:12.319
in competition with him basically just put a video of
1235
01:16:13.000 --> 01:16:15.760
doll of Spock sitting on a chair and he got
1236
01:16:15.800 --> 01:16:16.520
more views.
1237
01:16:16.800 --> 01:16:19.520
Oh funny. I have to say that.
1238
01:16:20.960 --> 01:16:23.680
I understand that they did. It's Star Treks Acolyte.
1239
01:16:24.359 --> 01:16:29.680
Okay, Yeah, I've I've liked a lot of stuff on
1240
01:16:30.600 --> 01:16:34.319
Paramount Plus, but yeah, that's not That's not one that
1241
01:16:34.359 --> 01:16:40.000
I've been watching. We liked Star Trek Discovery and Star
1242
01:16:40.079 --> 01:16:44.960
Trek Piccard, but anyway, I haven't watched that one yet.
1243
01:16:45.600 --> 01:16:50.159
So yeah, so Landman and eleven sixty three, which I
1244
01:16:50.159 --> 01:16:54.560
think was originally on Prime and is now on Netflix. Anyway, Tayo,
1245
01:16:54.600 --> 01:16:55.520
what are your picks?
1246
01:16:56.319 --> 01:16:57.960
So the first one is.
1247
01:16:59.399 --> 01:17:02.640
I've been taking a lot with Ai thinks, Okay, as
1248
01:17:02.680 --> 01:17:07.439
everybody and I have having a lot of fun these
1249
01:17:07.520 --> 01:17:13.680
last few days on a project called PI. It's a
1250
01:17:13.720 --> 01:17:17.720
little open source codeing agent that is highly customizable. The
1251
01:17:17.880 --> 01:17:22.000
heart of malt Bot now cloud bot whatever is what
1252
01:17:22.039 --> 01:17:26.239
that thing uses internally to do work. Okay, and it's
1253
01:17:26.279 --> 01:17:30.000
super fun to use and very fun to modify and
1254
01:17:30.479 --> 01:17:31.960
change things and so on and so forth.
1255
01:17:32.680 --> 01:17:36.079
Is really fun. So I've been tinkling with that.
1256
01:17:37.239 --> 01:17:39.720
Also, I can use it with Ulama and even have
1257
01:17:39.760 --> 01:17:44.079
a local model running very easily, and I add some success,
1258
01:17:44.119 --> 01:17:46.319
some success, so I can run the full AI think
1259
01:17:46.359 --> 01:17:50.279
on my machine. Not that I want to, but it's possible.
1260
01:17:50.279 --> 01:17:52.880
So I can literally use those things on a plane
1261
01:17:52.880 --> 01:17:56.079
if I want to, which is something that I really
1262
01:17:56.119 --> 01:17:57.039
wanted to achieve.
1263
01:17:57.520 --> 01:18:04.239
So I have done had fun with that. Okay, yeah,
1264
01:18:03.800 --> 01:18:07.239
it's very easy. The other thing it's we're talking with
1265
01:18:07.279 --> 01:18:10.039
the eye is tile scale. If you're not using tilescale,
1266
01:18:10.319 --> 01:18:15.039
tailscale is you're missing out. Okay. You can interconnect all
1267
01:18:15.039 --> 01:18:17.119
your devices, servers and so and so force in a
1268
01:18:17.159 --> 01:18:23.159
single network. It's phenomenal. Okay, I'm a fan. So try
1269
01:18:23.199 --> 01:18:26.239
that and combination with those two together, I can more
1270
01:18:26.319 --> 01:18:29.119
or ize call things on the phone if I want to,
1271
01:18:29.720 --> 01:18:31.880
and whenever I go, I can just have you know,
1272
01:18:31.960 --> 01:18:36.239
checking on my agents doing things. And yeah, I'm becoming
1273
01:18:36.239 --> 01:18:37.640
one of those people apparently.
1274
01:18:38.319 --> 01:18:42.720
So the problem that I have right now, I know
1275
01:18:42.840 --> 01:18:45.039
that a lot of people are running multiple agents at
1276
01:18:45.079 --> 01:18:49.439
the same time. I'm having problems with that multitasking between
1277
01:18:49.800 --> 01:18:54.840
different tasks myself, so it's difficult for me to schedule
1278
01:18:55.039 --> 01:18:57.720
enough agents to do things all the time in the background.
1279
01:18:59.600 --> 01:19:03.239
I maybe it's a fault of my own as a
1280
01:19:03.279 --> 01:19:08.319
manager or something, but the end result is that I
1281
01:19:08.359 --> 01:19:11.600
often end up waiting for AI to finish something.
1282
01:19:12.800 --> 01:19:17.960
Yeah, which is you know, doesn't spit things up essentially, Well, yes.
1283
01:19:17.880 --> 01:19:21.319
And no, but but yeah, it's kind of like going
1284
01:19:21.399 --> 01:19:26.199
back to the early two thousands when we had slow compilers.
1285
01:19:27.359 --> 01:19:29.199
Yep, a little bit.
1286
01:19:30.000 --> 01:19:32.439
All right, well, Matteo. If people want to continue to
1287
01:19:32.479 --> 01:19:34.159
follow along with the things you're working on, where do
1288
01:19:34.159 --> 01:19:34.600
they find it.
1289
01:19:35.479 --> 01:19:41.199
They find me on Twitter at mate Hoolina, or they
1290
01:19:41.239 --> 01:19:43.520
can subscribe to my newsletter and.
1291
01:19:44.880 --> 01:19:49.039
At nodland dot dev and yeah, that's kind of.
1292
01:19:48.960 --> 01:19:52.800
It cool, and of course follow at Clubformatic and contact
1293
01:19:52.880 --> 01:19:54.239
us if you need any help.
1294
01:19:54.720 --> 01:19:55.680
Very happy to chat.
1295
01:19:56.159 --> 01:19:57.680
Sounds good, all right.
1296
01:19:57.920 --> 01:20:01.960
Support the people who are making no literally work.
1297
01:20:03.720 --> 01:20:07.399
Yeah all right, yeah, we'll go ahead and wrap up
1298
01:20:07.800 --> 01:20:15.680
until next time. That's out. Mm hmm.