Episode Transcript
1
00:00:01,346 --> 00:00:07,429
Hello and welcome to Fork Around and Find Out, the podcast all about forking around and
finding outs.
2
00:00:07,430 --> 00:00:12,472
Today on the show, we are bringing you all stuff about YAML.
3
00:00:12,793 --> 00:00:19,376
And if you uh don't know, we are gonna have some load-bearing white spaces in this
conversation.
4
00:00:20,257 --> 00:00:21,688
Try, Autumn, don't take your head.
5
00:00:21,688 --> 00:00:22,168
It's okay.
6
00:00:22,168 --> 00:00:23,979
It wasn't a good joke, but I tried.
7
00:00:23,979 --> 00:00:28,421
uh So I am excited that today on the show, we have ingy.net's...
8
00:00:28,421 --> 00:00:30,022
uh
9
00:00:30,304 --> 00:00:39,756
a creator and maintainer of the YAML spec and really excited to have you hear how it
started, what you've been doing with it, and kind of what the future is.
10
00:00:39,815 --> 00:00:41,275
Thanks Justin.
11
00:00:41,695 --> 00:00:42,695
Thanks Adam.
12
00:00:43,255 --> 00:00:50,655
Yeah, so my name's Ingy and I created YAML with Clark and Orin Beck.
13
00:00:50,655 --> 00:00:52,035
We started in 2001.
14
00:00:52,035 --> 00:01:03,135
Those guys were working on simplifying XML, which was going to take over the world around,
you know, 1999, 2000, 2001 era and beyond.
15
00:01:03,195 --> 00:01:06,867
But yeah, and so they were part of this.
16
00:01:06,867 --> 00:01:16,394
mailing list called SML and simplify XML and then they kind of got sick of it and Clark
was a Python guy so he made up something that looked like Python and he called it yet
17
00:01:16,394 --> 00:01:32,324
another markup language and YAML and he got yaml.org and interestingly I had I was working
in a place called ActiveState up in Canada in Vancouver and they were famous for putting
18
00:01:32,324 --> 00:01:34,806
Perl on Windows back in the late 90s and
19
00:01:37,356 --> 00:01:44,823
Yeah, so at ActiveState, they decided they were going to be the enterprise based of open
source software, know, back in late 90s.
20
00:01:44,823 --> 00:01:57,934
so, yeah, so they got like some of the top guys like the guy, the Perl release manager at
the time was Gurusamy Sarati and uh then the co-author of the Big Fat Python book from
21
00:01:57,934 --> 00:02:00,556
remember that one from way back when the O'Reilly book.
22
00:02:00,556 --> 00:02:03,959
Yeah, so David Asher and a bunch of other
23
00:02:04,263 --> 00:02:07,363
you know, really heavy open source guys and me.
24
00:02:07,363 --> 00:02:08,683
I just like it.
25
00:02:08,783 --> 00:02:13,203
I've done something cool in Perl and got on the front page of the Perl Journal or
something.
26
00:02:13,203 --> 00:02:20,223
I saw these guys at OzCon and they had the coolest shirts on like, I want to go move up to
Vancouver from Seattle and work with those guys.
27
00:02:20,223 --> 00:02:20,921
Anyway.
28
00:02:20,921 --> 00:02:22,153
how to get into a project.
29
00:02:22,153 --> 00:02:22,861
Have a cool show.
30
00:02:22,861 --> 00:02:27,095
shirts, because I feel like this is important to the story.
31
00:02:27,095 --> 00:02:29,275
they just had good branding after state data.
32
00:02:29,275 --> 00:02:31,795
was like, it just said, A.
33
00:02:31,795 --> 00:02:31,895
S.
34
00:02:31,895 --> 00:02:35,875
and it kind of had this, this is kind of white stripes.
35
00:02:35,875 --> 00:02:36,175
Right.
36
00:02:36,175 --> 00:02:38,835
Because it had a, was before the white stripes.
37
00:02:38,835 --> 00:02:46,735
had a well, black, red and white was kind of the, the color theme and it just looked cool.
38
00:02:46,735 --> 00:02:52,511
Anyway, so I moved up to Vancouver and worked there, but at that time I had made a
39
00:02:53,401 --> 00:02:59,973
A Perl serialization thing that looks like Python and it was called data denture for
indented data.
40
00:03:00,114 --> 00:03:01,542
It was just a CPAN model.
41
00:03:01,542 --> 00:03:02,555
You know, it's still out there.
42
00:03:02,555 --> 00:03:04,975
says go use YAML instead now.
43
00:03:05,236 --> 00:03:10,308
somebody saw this SML project and data denture and wrote an email to the two of us.
44
00:03:10,308 --> 00:03:12,719
It's like one line saying, Hey, you guys should meet.
45
00:03:12,899 --> 00:03:15,210
So Clark and Clark called me on the phone.
46
00:03:15,210 --> 00:03:16,620
gave my phone number.
47
00:03:16,701 --> 00:03:19,722
He called me, we talked for four hours and YAML was on its way.
48
00:03:19,722 --> 00:03:22,603
just like worked on it every day for the next five years over email.
49
00:03:22,603 --> 00:03:23,333
So.
50
00:03:23,367 --> 00:03:26,227
I don't know if you knew that, why would you?
51
00:03:26,347 --> 00:03:33,447
yeah, Yama was entirely specked over emails about 20, 30 emails a day for five years.
52
00:03:34,307 --> 00:03:35,470
And it was,
53
00:03:35,470 --> 00:03:39,784
the original goalie though was people hated writing the brackets of XML.
54
00:03:40,688 --> 00:03:44,301
Well, that was their take on it.
55
00:03:44,301 --> 00:03:45,851
they wanted to...
56
00:03:46,052 --> 00:03:47,013
People were starting...
57
00:03:47,013 --> 00:03:53,477
XML wasn't really made for data, if I may say that, because it was made for textual
markup, right?
58
00:03:53,477 --> 00:03:55,738
That's actually a markup language.
59
00:03:55,919 --> 00:03:59,872
And so they're trying to serialize data with it.
60
00:03:59,872 --> 00:04:07,717
And data, even then, Perl and Python had the same hash array, scalar, or single value data
model.
61
00:04:07,749 --> 00:04:09,571
and then other languages follow suit.
62
00:04:09,571 --> 00:04:12,383
you know, but I caught the JSON data model.
63
00:04:12,784 --> 00:04:18,168
so, yeah, so XML doesn't fit well into that at all.
64
00:04:18,168 --> 00:04:21,518
um You can try to fit.
65
00:04:21,518 --> 00:04:25,265
Where do you draw the line there of like a markup language versus strictly data?
66
00:04:25,371 --> 00:04:36,681
Well, OK, so like, you know, if I say ah I love Justin Garrison's podcast and I want to
bold love, you know, then I would mark up the word.
67
00:04:36,681 --> 00:04:46,019
ah But like in, you know, in data and in Python data side, you you wouldn't really do it
that way, right?
68
00:04:46,019 --> 00:04:46,949
You do.
69
00:04:47,190 --> 00:04:47,771
Yeah, yeah.
70
00:04:47,771 --> 00:04:52,987
So Mark, these Markdown another that's another markup language trademark, obviously in the
name.
71
00:04:52,987 --> 00:04:59,760
So yeah, after like about six months of working on YAML, I'm like, you guys know this
isn't a markup language, right?
72
00:04:59,760 --> 00:05:09,027
And they're like, yeah, it's a serialization language, which means, you know, write your
data out to disk and read it back in or send it across the wire to some other program,
73
00:05:09,027 --> 00:05:10,621
read it back into memory.
74
00:05:10,962 --> 00:05:13,845
So we're like, yeah, but we already got the domain name.
75
00:05:13,845 --> 00:05:14,826
We already got the name.
76
00:05:14,826 --> 00:05:18,017
then I think Orin came up with it.
77
00:05:18,017 --> 00:05:21,721
And Orin thinks I came up with it, but I'm like, how about, so one of us said,
78
00:05:21,723 --> 00:05:26,287
GAML ain't markup language, you know, it's just the kind of recursive backronym.
79
00:05:26,287 --> 00:05:29,736
Yeah, so.
80
00:05:29,736 --> 00:05:34,042
What was the comparison or possibly competition with JSON?
81
00:05:34,960 --> 00:05:36,501
Well, that's kind of funny.
82
00:05:36,501 --> 00:05:38,182
you know, I thought JSON came out in 2006.
83
00:05:38,182 --> 00:05:40,432
That's when we all saw it.
84
00:05:40,432 --> 00:05:42,205
That's when the world saw it kind of overnight.
85
00:05:42,205 --> 00:05:53,472
And it was so easy to implement that the implementation is just like, it's almost like
when Tom came out a few years later, you know, somebody put out a spec and made it pretty
86
00:05:53,472 --> 00:05:53,812
simple.
87
00:05:53,812 --> 00:05:55,783
And then everybody jumped on it.
88
00:05:55,783 --> 00:06:05,019
like, I want to be the GitHub inventor as a author of his markup language, which was, I
don't know if you ever saw the first spec of that, but it was like,
89
00:06:05,351 --> 00:06:07,651
just a big attack.
90
00:06:07,651 --> 00:06:09,331
was just anti-YAML, right?
91
00:06:09,331 --> 00:06:15,351
It was like literally said, and then it ended with, and if you don't believe me, you
haven't had enough whiskey or something like that.
92
00:06:15,351 --> 00:06:18,391
It was just a silly spec at the time.
93
00:06:18,391 --> 00:06:20,251
Thank you.
94
00:06:24,288 --> 00:06:26,633
I was just delivered coffee, so I had to take a sip there.
95
00:06:26,633 --> 00:06:27,314
Okay, so.
96
00:06:27,314 --> 00:06:29,919
ah
97
00:06:30,222 --> 00:06:33,831
But JSON was around 2006, you all started this 2001.
98
00:06:33,831 --> 00:06:35,631
so right, we started in 2001.
99
00:06:35,631 --> 00:06:41,351
And then we looked at it and we're like, oh, that's our flow form looks exactly like this
JSON thing.
100
00:06:41,351 --> 00:06:48,511
And then we're like, look closer and we're like, oh, it is exactly the same except for
three really minor details.
101
00:06:49,651 --> 00:06:54,611
between a key value pair, you need a space after a colon and YAML.
102
00:06:54,611 --> 00:06:56,551
And in JSON, you don't.
103
00:06:57,451 --> 00:07:00,911
But JSON always uses the curlies.
104
00:07:01,563 --> 00:07:04,874
for mappings and um it always quotes its keys.
105
00:07:04,874 --> 00:07:05,874
It only uses string keys.
106
00:07:05,874 --> 00:07:15,879
So we're like, okay, if you're in a curly brace thing and you have double quoted key, then
there's not a space isn't required after the coding.
107
00:07:15,879 --> 00:07:17,809
So then we're JSON compatible.
108
00:07:17,809 --> 00:07:19,851
Is it like a minor thing that we did to the spec?
109
00:07:19,851 --> 00:07:23,392
There's three really minor things that we did to the spec.
110
00:07:23,452 --> 00:07:27,658
we made, so at YAML 1.1 was out and we went to YAML 1.2.
111
00:07:27,658 --> 00:07:29,775
One of the main points of that was just to make
112
00:07:29,965 --> 00:07:34,117
us a superset of JSON or JSON a subset of us officially.
113
00:07:34,618 --> 00:07:39,300
And so, yeah, but I look back in history, JSON was started in 2001.
114
00:07:39,300 --> 00:07:48,435
So, you know, it's just like, I think uh we started to get traction within the Ruby
language, which I really credit for uh getting us off the ground.
115
00:07:48,435 --> 00:07:58,851
You know, they shipped it with core probably 2003 or fours, so uh way too early, but you
know, they were just, they were kind of new kids on the block at the time and it was
116
00:07:58,851 --> 00:08:00,068
pre-rails.
117
00:08:00,068 --> 00:08:01,652
era and yeah.
118
00:08:03,832 --> 00:08:05,293
What were some of the surprises along the way?
119
00:08:05,293 --> 00:08:08,034
Like you mentioned getting in Ruby is one thing.
120
00:08:08,034 --> 00:08:16,244
I feel like the YAML explosion of Kubernetes has been just, it became the thing everyone
loved to hate at some point.
121
00:08:16,244 --> 00:08:17,917
And it's just like, we've got to write YAML.
122
00:08:17,917 --> 00:08:19,708
Well, it's actually, it's been around for a long time.
123
00:08:19,708 --> 00:08:25,090
Like what are those surprises along the way after 24 years of maintaining this?
124
00:08:25,479 --> 00:08:29,432
Well, Justin, we actually met at at KubeCon.
125
00:08:29,432 --> 00:08:39,279
don't remember if you like remember our reaction is like, think it was JJ from IBM and
said, Hey, Justin, here's the the YAML guy.
126
00:08:39,279 --> 00:08:44,023
And you like raised your fist, like you're going to, you know, hit me in the head or
something like that.
127
00:08:44,023 --> 00:08:47,796
And I knew you were kidding, but yeah, I'm like that guy.
128
00:08:47,796 --> 00:08:52,519
And so this was my first KubeCon was last fall and I'm expecting
129
00:08:53,447 --> 00:08:58,467
you cause you get all kinds of hate online rates, like, not a whole lot of love, you know?
130
00:08:58,467 --> 00:09:01,807
So it's just like, is going to be terrible, but you know, I'll go on it.
131
00:09:01,807 --> 00:09:02,887
That's fine.
132
00:09:02,887 --> 00:09:13,367
And, um, and I got some exciting new stuff to share, but I went out and like, you know,
besides like you and a couple other people, like, you know, mock hating.
133
00:09:13,367 --> 00:09:14,267
was, was all love.
134
00:09:14,267 --> 00:09:15,907
was like, it was crazy.
135
00:09:15,907 --> 00:09:17,983
I mean, like you've got the people and it's like,
136
00:09:18,887 --> 00:09:25,687
You know, they're kind of excited to meet the YAML guy and get a selfie, some of them, but
they're like, you know, they, truly like, I'm like, tell me what you don't like.
137
00:09:25,687 --> 00:09:26,827
It's like, I like it.
138
00:09:26,827 --> 00:09:27,547
It's great.
139
00:09:27,547 --> 00:09:38,087
You know, I trying to explore, um, you know, and there's like, got to be just almost
running on 20 competitors to the YAML crown.
140
00:09:38,087 --> 00:09:44,527
As it were somebody at KubeCon calling that I didn't come up with that, but, uh, you know,
and that's fair.
141
00:09:44,527 --> 00:09:48,304
I mean, it's like, there's always, yeah, almost just one way to do things, but, uh,
142
00:09:48,304 --> 00:09:49,374
It seems to be growing popular.
143
00:09:49,374 --> 00:09:53,225
So you asked about along the way, the first one was Ansible.
144
00:09:53,865 --> 00:09:59,357
you know, um all of sudden there was a company whose whole product was front-ended by
YAML.
145
00:09:59,357 --> 00:10:00,777
That was the first time I'd seen that.
146
00:10:00,777 --> 00:10:02,688
I'm like, that's pretty cool.
147
00:10:02,688 --> 00:10:08,699
um And then, you know, YAML was already like catching on.
148
00:10:08,699 --> 00:10:13,490
It's just, it's just kind of, it's, I don't even know what part of the exponential curve
it's on.
149
00:10:13,490 --> 00:10:15,441
And it's not slowing down.
150
00:10:15,441 --> 00:10:16,511
It should be.
151
00:10:17,293 --> 00:10:26,939
but it's not quite yet and there's zero money behind it which is you know it's a good
testament but also
152
00:10:27,074 --> 00:10:28,715
I mean, should there be money behind specs?
153
00:10:28,715 --> 00:10:33,287
Like that seems like any spec might die if there's money.
154
00:10:33,287 --> 00:10:36,499
Like I look at HCL from HashiCorp, right?
155
00:10:36,499 --> 00:10:41,581
Like it's their spec that they invented for simplified JSON.
156
00:10:41,801 --> 00:10:49,685
And the more and more I see that evolve over time, like I don't think that has the
lifespan of YAML because of just the...
157
00:10:49,685 --> 00:10:51,557
could say all kinds of things about it.
158
00:10:51,557 --> 00:10:55,300
It's like, don't want to offend Hashimoto or anything.
159
00:10:55,921 --> 00:10:58,262
But I find it hilarious.
160
00:10:59,304 --> 00:11:04,028
Well, kind of riffing off of, you know, all JSON is VML.
161
00:11:04,028 --> 00:11:16,998
And actually there's an attack probably around 2018 where some guys like, there's these
edge cases uh having to do a surrogate pairs or the C1 section of uh unprintable
162
00:11:16,998 --> 00:11:18,139
characters.
163
00:11:18,627 --> 00:11:20,097
And we're like, OK, we had to get together.
164
00:11:20,097 --> 00:11:23,637
have a group of five of us now that are on the core maintenance team.
165
00:11:23,637 --> 00:11:29,590
And we got together and we like, and it was a hacker news thread.
166
00:11:29,590 --> 00:11:33,351
And so people kept finding little edge cases.
167
00:11:33,351 --> 00:11:35,022
And we had to take on, think, five of them.
168
00:11:35,022 --> 00:11:38,633
And we're like, yeah, it's only a subset as far as we know.
169
00:11:38,633 --> 00:11:41,994
ah We could be proven wrong.
170
00:11:41,994 --> 00:11:44,554
And people come every once in while.
171
00:11:44,554 --> 00:11:47,295
And we just turned out on the right side of it is.
172
00:11:48,032 --> 00:11:59,287
a subset, you know, but it doesn't mean I kind of say, you know, by anybody up here who
can find that the case where it's actually not.
173
00:12:02,855 --> 00:12:03,975
One beer.
174
00:12:05,515 --> 00:12:08,375
but back to HashiCorp.
175
00:12:08,375 --> 00:12:22,375
like JSON, if you don't like Hashi, HCL, you can use JSON, which means you can use YAML,
but that is never mentioned by HashiCorp.
176
00:12:22,375 --> 00:12:30,015
I think it's just like, they're like, we don't, because YAML was well out by the time all
this Hashi stuff came up.
177
00:12:30,015 --> 00:12:32,219
Hashi, tools are great.
178
00:12:32,219 --> 00:12:35,440
But it's like, you you could say that you could use the animal.
179
00:12:35,481 --> 00:12:36,791
It's like, this would be people's choice.
180
00:12:36,791 --> 00:12:46,847
If ATL is your preferred, then uh I never try to make technologies that like say, don't
use his or hers, use mine.
181
00:12:46,847 --> 00:12:47,127
Right?
182
00:12:47,127 --> 00:12:50,249
I just say, I put myself out there and use it if you want.
183
00:12:50,249 --> 00:12:55,241
So, type of thing.
184
00:12:55,241 --> 00:13:01,285
But, so we'll talk about why's, this is how I pronounce the animal script is YS.
185
00:13:01,285 --> 00:13:02,425
So it's like a.
186
00:13:02,955 --> 00:13:06,158
Two letter Ys would be pronounced Ys, right?
187
00:13:06,158 --> 00:13:07,038
But you can put it on it.
188
00:13:07,038 --> 00:13:12,842
So I gave a talk on Helm-Ys, is YAML script applied Helm charts at that talk.
189
00:13:12,842 --> 00:13:14,083
And that went over really well.
190
00:13:14,083 --> 00:13:27,252
the thing that when people saw a side-by-side comparison of Ys, charts done with Ys
compared to charts done with Go templating, which by the way, when you have Go templating
191
00:13:27,252 --> 00:13:31,195
in your YAML files, they're no longer valid YAML files, right?
192
00:13:31,195 --> 00:13:37,306
Not until they're rendered, but wise embedded is like makes them half the size.
193
00:13:37,306 --> 00:13:38,067
That's the same thing.
194
00:13:38,067 --> 00:13:38,799
And is valid.
195
00:13:38,799 --> 00:13:39,059
YAML.
196
00:13:39,059 --> 00:13:40,793
So you could use YAML tools in it.
197
00:13:40,793 --> 00:13:43,014
Anyway, I'm kind of jumping ahead of that, yeah.
198
00:13:43,014 --> 00:13:43,636
that gave me a question.
199
00:13:43,636 --> 00:13:48,719
So I was a maintainer for uh a Helm chart for a very long time, and I hated Go templating.
200
00:13:48,719 --> 00:13:49,876
uh
201
00:13:49,876 --> 00:13:50,307
team now.
202
00:13:50,307 --> 00:13:52,233
I have been since November.
203
00:13:52,233 --> 00:13:56,292
I meet with Farina and all the guys every week.
204
00:13:56,292 --> 00:14:01,135
was a Microsoft hackathon that I showed up at, which it was probably before a KubeCon at
some point.
205
00:14:01,135 --> 00:14:03,456
I went to the Microsoft offices and they're like, we want people to do helm.
206
00:14:03,456 --> 00:14:05,547
And so I learned how to write a helm charts.
207
00:14:05,547 --> 00:14:10,289
And then I PR'd it to the repo and then I became the maintainer for it.
208
00:14:10,310 --> 00:14:11,851
And I maintained it for years.
209
00:14:11,851 --> 00:14:13,271
And I was like, I don't use this software.
210
00:14:13,271 --> 00:14:16,513
I just used it to learn how to write a helm charts.
211
00:14:16,513 --> 00:14:18,394
So hopefully it works for y'all.
212
00:14:18,634 --> 00:14:20,418
But it was a thing that I was building.
213
00:14:20,418 --> 00:14:21,966
I was like, I don't like this go templating.
214
00:14:21,966 --> 00:14:25,918
I don't like templating in general in always.
215
00:14:26,070 --> 00:14:28,114
always kind of has edge cases, right?
216
00:14:28,114 --> 00:14:30,550
Like whether it's Go or Python or whatever, right?
217
00:14:30,550 --> 00:14:35,527
Like at some form, like Ginges is going to fall apart just as easily as Go templates.
218
00:14:35,527 --> 00:14:38,447
It's an attack vector, certainly in some cases.
219
00:14:38,447 --> 00:14:46,487
I took a close look at the Go templating a couple of years ago and I'm like, I can't say
it's as bad as I thought it might be.
220
00:14:46,487 --> 00:14:51,192
I looked for ways that it could go horribly wrong and I'm like, that's not too bad.
221
00:14:51,192 --> 00:14:59,842
But then you're saying so like, why is a YAML script is an alternative for that helm wise
is an alternative for doing Go templating.
222
00:15:00,089 --> 00:15:01,900
Yes, currently it's a post render.
223
00:15:01,900 --> 00:15:06,043
You could actually go to search for Helm.YS.
224
00:15:06,304 --> 00:15:10,668
anyway, it's a post render such that you can replace a little bit.
225
00:15:10,668 --> 00:15:13,620
It'll work with the Go templating, or you could replace all the Go templating.
226
00:15:13,620 --> 00:15:17,573
If you replace all of it, then your template files are valid YAML.
227
00:15:17,634 --> 00:15:24,919
it's just a, if you were to go to yamlscript.org slash Helm.YS, that page is just a side
by side comparison.
228
00:15:25,139 --> 00:15:26,581
can see it in front of face.
229
00:15:26,581 --> 00:15:29,503
um
230
00:15:29,794 --> 00:15:30,577
But let's-
231
00:15:30,577 --> 00:15:40,195
I'm working with the Helm 14 to make it our first class citizen of without the post
rendering factor if possible.
232
00:15:41,682 --> 00:15:43,324
I guess let's take a step back.
233
00:15:43,606 --> 00:15:45,989
What is the point of YAML script?
234
00:15:47,941 --> 00:15:50,238
Yeah, it's a great question.
235
00:15:55,493 --> 00:15:57,581
It's kind of funny because people like, you know.
236
00:16:01,873 --> 00:16:04,234
People ask me to describe the use case for Uniscript.
237
00:16:04,234 --> 00:16:06,175
It's like, well, you have an hour.
238
00:16:06,175 --> 00:16:11,288
It's just like, it's like, there's not an elevator pits or I haven't got the perfect one
yet, but.
239
00:16:12,319 --> 00:16:12,559
okay.
240
00:16:12,559 --> 00:16:13,510
There we go.
241
00:16:13,510 --> 00:16:22,504
So this year I focused on, wise is going to be focused on helping DevOps.
242
00:16:22,504 --> 00:16:30,983
So I mean, there's a wise is a complete programming language with a complete ecosystem
because it builds on top of another language.
243
00:16:30,983 --> 00:16:34,023
and inherits all of the goodness of that language.
244
00:16:34,423 --> 00:16:36,063
There's a lot of great things about it.
245
00:16:36,763 --> 00:16:46,223
But where it really can hit a mark for people is to use it in conjunction with whatever
DevOps tools you're using.
246
00:16:46,223 --> 00:16:59,703
even with that, like so say you had GitHub actions or CircleCI or a couple of that I've
played with, even though they don't load YAML files with with Wwise, which by the way,
247
00:16:59,703 --> 00:17:00,623
YAML script
248
00:17:00,805 --> 00:17:03,116
ships as a wise CLI.
249
00:17:03,116 --> 00:17:03,986
That's one way to use it.
250
00:17:03,986 --> 00:17:09,990
And it also ships as a YAML replacement loader in every language, where every is 11 so
far.
251
00:17:09,990 --> 00:17:15,684
But I have a list of 45 languages that I want to ship this to in the next two years.
252
00:17:15,684 --> 00:17:18,205
And they're really simple.
253
00:17:18,205 --> 00:17:21,127
It's FFI binding to shared libraries.
254
00:17:21,147 --> 00:17:23,959
it's really easy to create the next language I just need.
255
00:17:23,959 --> 00:17:26,522
Usually I try to find somebody else to do it.
256
00:17:26,522 --> 00:17:27,961
I'm like, you want it on?
257
00:17:28,603 --> 00:17:30,794
This language, actually somebody did that last month at KubeCon.
258
00:17:30,794 --> 00:17:32,444
They're like, Hey, do you have crystal yet?
259
00:17:32,444 --> 00:17:33,405
I'm like, no, you want to add it?
260
00:17:33,405 --> 00:17:33,864
And they did.
261
00:17:33,864 --> 00:17:35,386
I got a pull request three days later.
262
00:17:35,386 --> 00:17:38,487
So I don't know you've heard of the crystal language.
263
00:17:38,547 --> 00:17:39,387
Yeah.
264
00:17:39,468 --> 00:17:40,428
So that was really cool.
265
00:17:40,428 --> 00:17:40,928
Yeah.
266
00:17:40,928 --> 00:17:43,619
Um, and it gets more people involved.
267
00:17:43,619 --> 00:17:46,130
try to get people involved in the project that way.
268
00:17:46,130 --> 00:17:50,642
But yeah, it's basically think of all the things that people try to bolt onto YAML, right?
269
00:17:50,642 --> 00:17:53,773
I mean, what's, what are the major problems with the animals?
270
00:17:53,773 --> 00:17:58,115
You have these 5,000 line YAML config files, right?
271
00:17:58,248 --> 00:18:05,068
I mean, it's really great to start your project in YAML where you're using it in a small
super clean and then it just starts growing and growing.
272
00:18:05,068 --> 00:18:06,188
And then you have these 5,000 lines.
273
00:18:06,188 --> 00:18:10,488
What if you could just compose it like you wouldn't write a 5,000 line Python program,
right?
274
00:18:10,488 --> 00:18:13,308
You break it up into libraries and subcomponents and all that.
275
00:18:13,308 --> 00:18:15,588
Why is you can do that easily, right?
276
00:18:15,588 --> 00:18:27,205
Or you can use modules from, it's not all 100 % working yet, but I will have modules
working from
277
00:18:27,205 --> 00:18:30,187
Either written in Wwise, written in Clozor, written in Java, in...
278
00:18:30,187 --> 00:18:34,600
Because those are base things written in Wasm.
279
00:18:34,600 --> 00:18:38,863
That's something I've been working a lot on, on different Wasm technologies recently.
280
00:18:38,863 --> 00:18:50,372
um Or we actually right now we have a system where you can write it in any language, but
the linking mechanism is just basically sockets.
281
00:18:50,372 --> 00:18:52,753
So it uses local sockets to communicate.
282
00:18:52,753 --> 00:18:54,134
it's more of an R piece.
283
00:18:54,134 --> 00:18:55,455
um
284
00:18:56,067 --> 00:18:57,078
RPC type of thing.
285
00:18:57,078 --> 00:19:03,863
basically, as far as you're concerned, you just load the SQL light mights, all that
happened to be written in Python and that just works, right?
286
00:19:03,863 --> 00:19:07,136
So from a wise perspective.
287
00:19:07,136 --> 00:19:09,798
But then you want interpolation.
288
00:19:10,039 --> 00:19:15,663
want to be able to take different parts of your data and repeat uh loops on them.
289
00:19:15,663 --> 00:19:21,147
And one of the problems with that with YAML, I'm sure you've heard of anchors and aliases,
right?
290
00:19:21,387 --> 00:19:23,128
Are you familiar with that feature of YAML?
291
00:19:23,128 --> 00:19:25,831
That's where you have to give a label to
292
00:19:25,891 --> 00:19:30,053
a node and then you can reuse it again later in the document.
293
00:19:30,473 --> 00:19:35,065
So people will do things in pure YAML.
294
00:19:35,065 --> 00:19:36,406
I mean, there's all kinds of frameworks.
295
00:19:36,406 --> 00:19:47,710
The one thing about YAML being not quite finished the way we want it to is it opened up
the doors for dozens of projects to actually make money by, you know, fixing YAML for
296
00:19:47,710 --> 00:19:49,181
their own specific use case.
297
00:19:49,181 --> 00:19:51,582
I've always wanted to fix it for everyone.
298
00:19:51,602 --> 00:19:53,983
I've always wanted to do, we set up to
299
00:19:54,536 --> 00:19:59,036
You know, even Clark and Orin set out to replace all the XML landscape.
300
00:19:59,036 --> 00:20:09,456
So that includes, um, you know, DSL languages, transformation languages, query languages,
all the stuff that XML, all the extras that XML came with.
301
00:20:09,456 --> 00:20:10,056
Um, yeah.
302
00:20:10,056 --> 00:20:19,856
And then by the time we got the 1.2 spec out in 2009, they were just moved on to other
stuff and I stuck around, but it was around in, uh, 2023, all the pieces came together
303
00:20:19,856 --> 00:20:21,636
where I'm like, oh, this is it.
304
00:20:21,636 --> 00:20:23,316
I can make YAML script.
305
00:20:23,591 --> 00:20:25,492
because all the components are there.
306
00:20:25,512 --> 00:20:32,998
It was a combination of this closure language, is C-L-O-J-U-R-E, but it's pronounced
closer.
307
00:20:33,159 --> 00:20:39,424
And it's just a, it's a Lisp that compiles to JDM bytecode, so jar files.
308
00:20:39,424 --> 00:20:50,913
And I had never programmed Java before and I'm like, I'm not going to, you know, go down
this route, but then there's another thing called growlVMNativeImage that will take any
309
00:20:50,913 --> 00:20:53,535
jar thing and compile it to
310
00:20:53,799 --> 00:20:56,851
uh native binary or a native shared library.
311
00:20:56,851 --> 00:21:06,728
And for 20 plus years, I've been looking for the perfect language to write really high
level code instead of C and make shared libraries such that I could bind it anywhere.
312
00:21:06,728 --> 00:21:14,553
And then this all came together and I'm like, and if you look at the YAML script source
code, mean, it's really tight functional code.
313
00:21:14,633 --> 00:21:23,019
So, and it produces this whole thing, but then I could instantly, within a few months, I
had it bound to six languages, you know, and
314
00:21:23,367 --> 00:21:26,143
I could concentrate on binding it to more languages.
315
00:21:26,143 --> 00:21:32,504
always, but it's just kind of go with wherever people want me to take it next.
316
00:21:32,504 --> 00:21:43,227
But the use case is still focused in for like DevOps professionals in that sort of
ecosystem where people might be doing stuff with Kubernetes, uh where there is a lot of
317
00:21:43,227 --> 00:21:51,169
YAML, something else on the like CACD pipelines, where it's GitLab or something else where
it's like this is defined in YAML as well.
318
00:21:51,169 --> 00:21:53,840
And that's those areas because there's so much of it.
319
00:21:53,840 --> 00:22:00,792
Is that why you're trying to just, you're trying to attack that as a place that people
should be using YAML.
320
00:22:00,792 --> 00:22:10,743
like any problems that people have with YAML day to day, YAML script can solve about, you
I'd say 90 plus percent of those.
321
00:22:11,164 --> 00:22:12,404
my standpoint.
322
00:22:13,871 --> 00:22:21,595
Is there anything that people have ever done with YAML that you weren't expecting, like a
use case or just something that was completely out of left field?
323
00:22:22,727 --> 00:22:24,827
Yeah, I mean, and that I love it.
324
00:22:24,827 --> 00:22:26,167
Now I want to do it.
325
00:22:26,167 --> 00:22:26,347
Okay.
326
00:22:26,347 --> 00:22:27,847
So let me give you the example.
327
00:22:28,047 --> 00:22:32,067
Um, comments in the YAML spec comments and YAML from the beginning were thrown away.
328
00:22:32,067 --> 00:22:33,787
They don't fit into the model.
329
00:22:34,027 --> 00:22:35,607
They don't fit into the JSON model.
330
00:22:35,607 --> 00:22:37,567
like, and you can put them anywhere, right?
331
00:22:37,567 --> 00:22:38,627
In a YAML document.
332
00:22:38,627 --> 00:22:49,907
it's like, we wanted to keep comments around, but like now there's probably 50, 60, 70
YAML frameworks out there.
333
00:22:49,907 --> 00:22:52,267
That's what I would call a YAML implementation.
334
00:22:52,411 --> 00:22:53,732
different languages.
335
00:22:54,192 --> 00:23:01,007
Now there's probably half a dozen ones that will do comment roundtripping, but they um all
do it differently, right?
336
00:23:01,007 --> 00:23:11,695
So um at this point I'm like, yeah, we need to actually put out a of a side spec of this
is maybe the preferred way to do it.
337
00:23:11,695 --> 00:23:17,479
So just thought, this is related.
338
00:23:17,479 --> 00:23:21,263
So something huge in YAML just happened.
339
00:23:21,263 --> 00:23:26,705
three or four weeks ago, um Gustavo Niemeyer wrote GoYAML.
340
00:23:26,725 --> 00:23:31,326
I didn't know this, but it's by far the biggest YAML asset in the world.
341
00:23:31,747 --> 00:23:34,707
It's the YAML module that's behind all of Kubernetes.
342
00:23:34,707 --> 00:23:45,791
um Even the Kubernetes SIGS YAML actually just has all of that code embedded in it because
Gustavo, three years ago, stopped maintaining it.
343
00:23:46,650 --> 00:23:57,774
I've talked to Gustavo now and the reason he stopped maintaining it is because he has a uh
very high level job that demands his full attention.
344
00:23:57,774 --> 00:24:02,006
It wasn't that he wanted to abandon it, but he just had to.
345
00:24:02,006 --> 00:24:05,927
There's no time left in his daily life to work on this anymore.
346
00:24:06,208 --> 00:24:11,720
So, and he said, I can't give it away because I don't know if it'll fall into disrepair.
347
00:24:11,720 --> 00:24:14,365
And at first that's like, well, why can't you give it away?
348
00:24:14,365 --> 00:24:15,503
But you know, after...
349
00:24:15,503 --> 00:24:22,239
Reaching out to him and he's like, well, I could consider giving it to the YAML
organization, but it's still kind of have the same problem.
350
00:24:22,239 --> 00:24:29,215
So I'm like, well, we'll just take it over and run with it, but not as a, know, you won't
give it to us.
351
00:24:29,215 --> 00:24:35,961
We'll just make a fork as it were a copy and say that we're carrying this forward.
352
00:24:35,961 --> 00:24:43,771
And if you want to, could, um, it's a couple of weeks away from launching this, but, um,
officially like.
353
00:24:43,771 --> 00:24:45,512
This is the new way to use GoYaml.
354
00:24:45,512 --> 00:24:53,406
But it's going to be a huge boon to Go programming and the Kubernetes thing to have all of
this unforked.
355
00:24:53,406 --> 00:25:03,822
like the Kubernetes SIGs fork is going to use us as it's um upstream because, you know, I
reached out to them and I'm like, why don't you join us?
356
00:25:03,822 --> 00:25:04,893
So they got one of their top guys.
357
00:25:04,893 --> 00:25:11,546
You know, I just reached out to anybody who's really involved in this and had a stake in
it and was like, yeah, join the team.
358
00:25:11,686 --> 00:25:12,307
You know, if...
359
00:25:12,307 --> 00:25:13,103
um
360
00:25:13,103 --> 00:25:17,156
will never break a release will never break your stuff because you're on the team.
361
00:25:17,156 --> 00:25:19,328
You'll make sure it never breaks that kind of thing.
362
00:25:19,328 --> 00:25:21,109
So that's really exciting.
363
00:25:21,109 --> 00:25:23,208
eh
364
00:25:23,208 --> 00:25:33,968
sure why people are more ready to put developers behind open source projects because
having a seat at the table and knowing that you won't get broken and being able to
365
00:25:33,968 --> 00:25:36,749
contribute is huge.
366
00:25:36,749 --> 00:25:37,710
Yeah.
367
00:25:37,850 --> 00:25:39,962
And I was trying to tie this back to comments.
368
00:25:39,962 --> 00:25:44,496
Gustavo, when I did talk to him for, he was so busy, we got to talk for 15 minutes.
369
00:25:44,496 --> 00:25:48,639
But he said that he had ad comment support to go YAML, which I don't know.
370
00:25:48,639 --> 00:25:50,951
And I don't think a lot of people use, it's a, yeah.
371
00:25:50,951 --> 00:25:54,243
So comments was something that people just did.
372
00:25:55,385 --> 00:25:58,997
you know, I mean, we didn't know what YAML was going to be for back in the day.
373
00:25:58,997 --> 00:26:03,821
And we, we made a little list of use cases and anti-use cases and
374
00:26:03,899 --> 00:26:07,112
configuration was in the anti, we're like, people won't want this for config.
375
00:26:07,112 --> 00:26:12,368
I I don't know why we thought that at the time and that's all people use it for right now.
376
00:26:12,368 --> 00:26:13,328
Yeah.
377
00:26:14,631 --> 00:26:17,172
I think we're leaning towards grocery lists.
378
00:26:18,515 --> 00:26:19,016
I don't.
379
00:26:19,016 --> 00:26:27,494
at the Dammel script homepage, the examples here on the homepage have a lot of colons that
remind me of Pearl.
380
00:26:28,716 --> 00:26:30,237
I don't know that's a closure.
381
00:26:30,237 --> 00:26:40,140
I don't know if that's uh something coming through, but is there a reason that this, it to
me feels like it's different or it's a lot different than.
382
00:26:40,140 --> 00:26:41,991
than what YAML typically was.
383
00:26:41,991 --> 00:26:51,319
When I first envisioned, when someone told me, when you told me YAML script, I was like,
okay, this is gonna be like YAML with some like embedded commands, almost like bash has
384
00:26:51,319 --> 00:26:52,870
escape shells, like subshells or whatever.
385
00:26:52,870 --> 00:26:57,042
I'm just gonna have some back ticks in my YAML that does something.
386
00:26:57,043 --> 00:27:02,827
This feels different with multiple colons and my imports and data.
387
00:27:03,889 --> 00:27:05,910
Is there a reason you're going?
388
00:27:05,910 --> 00:27:10,420
You want it to be a lot different, probably because of, to lose some historical baggage?
389
00:27:10,420 --> 00:27:14,409
Is there a reason you want it to look like certain languages were adopted by something?
390
00:27:14,409 --> 00:27:17,334
Is there something that inspired you to do it this way?
391
00:27:18,203 --> 00:27:21,584
Well, I know what you're talking about.
392
00:27:21,584 --> 00:27:25,696
you'll see a double colon instead of a colon between a key and a value.
393
00:27:25,696 --> 00:27:26,947
Well, here's the deal.
394
00:27:26,947 --> 00:27:31,188
Every YAML file that you know of is valid YAML scripts, right?
395
00:27:31,248 --> 00:27:34,169
And it just does exactly what it did.
396
00:27:34,389 --> 00:27:36,250
YAML script will load that perfectly.
397
00:27:36,250 --> 00:27:38,892
And then you can use whatever the tool does.
398
00:27:38,892 --> 00:27:43,944
can convert just loads of this data and you can convert it to different formats or
whatever.
399
00:27:43,944 --> 00:27:47,015
But it's a YAML loader at the end of the day.
400
00:27:47,846 --> 00:27:51,058
bang, YS at the top.
401
00:27:51,058 --> 00:28:03,124
Then you said, okay, this is still YAML, but like, some of these things might be variables
or function names rather than strings, some of the unquoted things.
402
00:28:03,684 --> 00:28:17,221
So any mapping array or scalar, those are the three nodes that make up the YAML or a JSON
document can either be code or data.
403
00:28:18,105 --> 00:28:27,031
So, you know, if you were just writing a program in YAML script, would be almost, you
wouldn't really use data mode unless you needed a clean piece of data somewhere.
404
00:28:27,031 --> 00:28:37,899
know, but for the use case that we're talking about where we're helping DevOps stuff,
they're starting with their YAML files, but then they want to split it off and then load
405
00:28:37,899 --> 00:28:43,133
in a different part, or they want to call a merge function with a specific thing.
406
00:28:43,433 --> 00:28:46,355
So double colon says switch from.
407
00:28:46,875 --> 00:28:51,975
The key, is in data mode, the value here is going to be code.
408
00:28:51,975 --> 00:28:54,179
And it's going to be a code expression.
409
00:28:54,179 --> 00:28:58,522
And there's a lot of really clean ways to do code expressions.
410
00:28:58,522 --> 00:29:02,424
But then for the next key, it'll switch back to data mode in my view.
411
00:29:02,424 --> 00:29:11,169
So that's why you see, if you look at those lines where you're seeing double colons,
you'll see the thing on the left is probably just a string.
412
00:29:11,169 --> 00:29:13,482
But it's unquoted because that's the clean way to write YAML.
413
00:29:13,482 --> 00:29:15,021
You can put quotes around it.
414
00:29:15,173 --> 00:29:17,998
And the thing on the right is an expression.
415
00:29:17,998 --> 00:29:18,498
Yeah.
416
00:29:18,498 --> 00:29:23,858
And the idea here is to allow people to incrementally adopt, right?
417
00:29:23,858 --> 00:29:27,798
Like where you say, oh, can take out this one time.
418
00:29:27,798 --> 00:29:32,478
have this one variable that I use eight times in my YAML file.
419
00:29:32,478 --> 00:29:35,738
It was like, use the name of Kubernetes cluster, whatever it is, right?
420
00:29:35,738 --> 00:29:39,358
It's like, oh, I could just store that as a value at the top and then replace that value.
421
00:29:39,358 --> 00:29:45,300
So if I need to rename it or reuse this file or load from somewhere else, you can do that.
422
00:29:45,300 --> 00:29:48,797
easily without saying I have to rewrite everything in this new language.
423
00:29:49,574 --> 00:29:52,004
Yeah, let me tell you a little story.
424
00:29:52,585 --> 00:29:54,145
and this is really cool.
425
00:29:54,225 --> 00:29:56,856
And I've done this with a number of CID systems.
426
00:29:56,856 --> 00:29:58,336
So let's take GitHub actions.
427
00:29:58,336 --> 00:30:07,348
So um a friend of mine had a really hairy set of workflows and I looked through them and
I'm like, yeah, YAML script can help out here.
428
00:30:07,348 --> 00:30:18,271
So what I did was um I first, and there's a number of ways you can do this, but like,
let's say you put all of the YAML script files in one directory, but they're going to
429
00:30:18,271 --> 00:30:19,321
generate
430
00:30:19,559 --> 00:30:23,079
the original YAML that you had from clean sources, right?
431
00:30:23,319 --> 00:30:35,239
So the first step, if I take on a brand new repo of doing this, is I would copy all of the
YAML files, which are YAML script, I've already said that, into the new source place.
432
00:30:35,339 --> 00:30:42,159
And then I will call YAML script on those to gen all of the files in the place where
they're supposed to be.
433
00:30:42,159 --> 00:30:47,919
And then one time I will do a, I have a little script that will make sure that they're
semantically equivalent.
434
00:30:48,295 --> 00:30:53,995
Was there something about that conversion that made them not be semantically equivalent?
435
00:30:53,995 --> 00:30:59,315
Even though they're syntactically correct, they could be slightly different somehow.
436
00:31:00,655 --> 00:31:01,215
yep.
437
00:31:01,215 --> 00:31:06,995
And then once I've done that, then cleaning up, I just make the sources look as beautiful.
438
00:31:06,995 --> 00:31:07,815
I try different things.
439
00:31:07,815 --> 00:31:09,495
I'm like, oh, he reuses this a bunch of times.
440
00:31:09,495 --> 00:31:11,975
I'm to put this in another file and then include it.
441
00:31:11,975 --> 00:31:13,635
He uses all this repeating things.
442
00:31:13,635 --> 00:31:18,343
I can make a function by just calling that function 20 times instead of.
443
00:31:18,343 --> 00:31:20,103
That big blob of data.
444
00:31:20,563 --> 00:31:29,883
and, but every time I do this, I'll make a small change and then I'll run the, you know,
make update or whatever, however, I, um, the command that I did that will convert all the
445
00:31:29,883 --> 00:31:30,303
files.
446
00:31:30,303 --> 00:31:35,583
And if there's any diff in the result files, then I've done it wrong, right?
447
00:31:35,583 --> 00:31:37,643
I haven't cleanly refactored.
448
00:31:37,643 --> 00:31:39,063
So it's just a great workflow.
449
00:31:39,063 --> 00:31:44,243
And then I just, you know, you know, I'll just spend like a big whack up time doing this.
450
00:31:44,243 --> 00:31:46,703
And then I, you know, I presented it to him he's like, this is amazing.
451
00:31:46,703 --> 00:31:48,507
And then he took it even further and.
452
00:31:48,507 --> 00:31:49,633
Really dope, Anna.
453
00:31:49,633 --> 00:31:50,958
I'll share that in the comments.
454
00:31:50,958 --> 00:31:52,408
I assume there's comments.
455
00:31:52,408 --> 00:31:53,522
We can add a link in the show notes.
456
00:31:53,522 --> 00:31:54,183
Yeah.
457
00:31:54,224 --> 00:31:58,149
Yeah, So remind me to do that.
458
00:32:00,339 --> 00:32:05,911
How does that compare to the workflow that someone might have with like uh Q lang, right?
459
00:32:05,911 --> 00:32:11,123
Like I look at Q as a way to generate YAML and I can say, I can take the output.
460
00:32:11,123 --> 00:32:12,534
In that case, you're starting from scratch, right?
461
00:32:12,534 --> 00:32:18,586
Cause Q lang is a different, it's not necessarily taking in the valid YAML, but I know
there's a lot of...
462
00:32:18,988 --> 00:32:20,809
tools and options that people have been trying to do.
463
00:32:20,809 --> 00:32:26,121
like, well, I want to write real code or I want to write Python or I want to do something
more powerful.
464
00:32:26,221 --> 00:32:35,666
Where's that trade off of the YAML script lets you start from what you have and slowly
kind of change it over time versus one of those tools where it's like, I can go right to
465
00:32:35,666 --> 00:32:45,270
what I think the end goal is of let my engineers write code in whatever language they want
and just generate the YAML from that.
466
00:32:46,183 --> 00:32:49,763
Well, I think that you answered the question that you were asking.
467
00:32:49,763 --> 00:32:59,443
mean, you were saying if you want to decide to do that, you know, if you're already a
Python team and you're on a brand new project and we're going to like, yeah, we're going
468
00:32:59,443 --> 00:33:01,590
to write Python code that generates our config.
469
00:33:01,590 --> 00:33:02,470
me.
470
00:33:05,255 --> 00:33:05,730
That's
471
00:33:05,730 --> 00:33:08,567
I don't know if your video froze.
472
00:33:08,845 --> 00:33:09,658
That's weird.
473
00:33:09,658 --> 00:33:10,580
Let me try something.
474
00:33:10,580 --> 00:33:13,226
Oh, experiments.
475
00:33:14,050 --> 00:33:15,038
Are you back?
476
00:33:15,751 --> 00:33:17,451
I'm still here.
477
00:33:17,451 --> 00:33:20,345
I'm just seeing like a.
478
00:33:20,345 --> 00:33:23,150
you now but your video is really slow and blurry.
479
00:33:23,150 --> 00:33:26,085
Yeah, your video went real blocky and then I lost all audio for a bit.
480
00:33:26,085 --> 00:33:26,626
should we do?
481
00:33:26,626 --> 00:33:32,481
What do you, I could leave and come back like that, but I don't know if that would mess
you up.
482
00:33:33,783 --> 00:33:34,233
Okay.
483
00:33:34,233 --> 00:33:34,884
Yeah, yeah, yeah.
484
00:33:34,884 --> 00:33:35,019
Sure.
485
00:33:35,019 --> 00:33:36,184
We can try that.
486
00:33:37,006 --> 00:33:38,937
So we all kill it or just me.
487
00:33:39,062 --> 00:33:41,944
I can, I mean, can kill it too, let's see.
488
00:33:42,745 --> 00:33:44,445
Let's see if that audio is good.
489
00:33:44,826 --> 00:33:46,827
I hear you much better now.
490
00:33:47,842 --> 00:33:50,450
Sweet, let's start, you can start that answer, that question again.
491
00:33:51,767 --> 00:33:53,614
Yeah, I don't remember the question.
492
00:33:53,614 --> 00:34:03,307
Uh, starting either with, you know, from where they're at with YAML script and saying, or
with YAML and saying, I want to go from, from YAML to YAML script and clean this up or
493
00:34:03,307 --> 00:34:11,809
starting with something like a QLang or something else that's is a, is a all from scratch
sort of rewrite that generates the same YAML, which can give you the same workflow that
494
00:34:11,809 --> 00:34:14,657
you're describing, but in different contexts, right?
495
00:34:14,657 --> 00:34:20,202
Where one is iterating in checking versus starting from scratch and checking.
496
00:34:20,303 --> 00:34:23,374
Yeah, so Qlang is, I mean, it's awesome.
497
00:34:23,374 --> 00:34:27,656
So I look at it and I look for stuff to steal, right?
498
00:34:27,656 --> 00:34:30,857
I mean, that's how you make a good language.
499
00:34:30,857 --> 00:34:34,309
You look at what's great and you see if that fits into your language.
500
00:34:34,309 --> 00:34:43,592
um YQ is another tool that's really great and that uses YAML and does things that YAML
script can't do yet.
501
00:34:43,592 --> 00:34:47,674
um And YAML script does things that YQ can't do.
502
00:34:47,674 --> 00:34:50,495
um
503
00:34:51,115 --> 00:34:56,399
When I actually ask the LLMs, I'm like, tell me about Q.
504
00:34:56,399 --> 00:34:58,200
it's like, here's the advantages and disadvantages.
505
00:34:58,200 --> 00:35:06,626
And some of the disadvantages would be that people really are used to YAML and they have
to learn this new system.
506
00:35:06,626 --> 00:35:10,549
But if you're starting as a Q shop, great.
507
00:35:10,649 --> 00:35:15,953
If there was a tool that could turn all of your YAML files into Q, and maybe there is, I
don't know, great.
508
00:35:15,953 --> 00:35:16,774
That's a free one.
509
00:35:16,774 --> 00:35:18,935
ah Whoever runs Q.
510
00:35:19,749 --> 00:35:21,960
I that idea for free.
511
00:35:21,960 --> 00:35:24,191
But yeah, so I, cause I do the same thing.
512
00:35:24,191 --> 00:35:34,286
I'm like, you know, somebody told me all the stuff that you're doing is great, but if
somebody has YAML files that are 5,000 lines long and they work, they're not going to
513
00:35:34,286 --> 00:35:35,872
switch to YAML script.
514
00:35:35,872 --> 00:35:36,557
And I'm like, fair.
515
00:35:36,557 --> 00:35:40,338
And they're like, unless you give them a tool that does it for them automatically.
516
00:35:40,338 --> 00:35:41,509
And I'm like, yeah, good point.
517
00:35:41,509 --> 00:35:46,981
So uh I think I want to make,
518
00:35:47,909 --> 00:35:52,504
YAML is great, but it was extremely limited.
519
00:35:52,504 --> 00:35:55,727
The whole point of YAML script is, or why is this that it...
520
00:35:57,508 --> 00:36:05,796
it tries to make YAML as good as, better than Python, better than, thank you, um at least
for certain things.
521
00:36:05,796 --> 00:36:09,099
So, um and, you
522
00:36:10,727 --> 00:36:11,097
I know.
523
00:36:11,097 --> 00:36:13,969
I have no problem with doing that.
524
00:36:13,989 --> 00:36:15,378
Like I said, I'm not trying to compete.
525
00:36:15,378 --> 00:36:16,581
I'm just trying to make great stuff.
526
00:36:16,581 --> 00:36:31,001
So oh I was talking to Amazon AWS the other day oh to a guy in there and I was asking
about his products.
527
00:36:31,001 --> 00:36:35,364
And so one is the CDK, the cloud development kit.
528
00:36:36,025 --> 00:36:38,827
And basically they're doing exactly what you said.
529
00:36:38,827 --> 00:36:39,757
They have like
530
00:36:39,759 --> 00:36:46,202
you know, half a dozen languages, um, that make YAML that, you know, your team might
already be familiar with.
531
00:36:46,202 --> 00:36:48,323
And I'm like, well, you should throw YAML script.
532
00:36:48,323 --> 00:36:57,857
And as one of those languages, you don't have to throw the others out, you know, but I bet
YAML script would fit really nicely in there because like, like you said, if you're
533
00:36:57,857 --> 00:37:07,591
starting and you already have YAML, you kind of have to, it's like converting anything
from phone system another is usually kind of a waste of time in my opinion.
534
00:37:07,591 --> 00:37:08,451
It's like,
535
00:37:08,517 --> 00:37:22,238
A lot of companies will switch from like say a language like Ruby to Java or Go and
they'll come up with reasons, you know, because they can hire more developers or that kind
536
00:37:22,238 --> 00:37:23,159
of thing.
537
00:37:23,327 --> 00:37:36,260
And maybe those are true, but it's, know, you have a working system, build the new stuff
in Go or Java or whatever, and keep your old stuff working if you really company wise.
538
00:37:36,260 --> 00:37:38,051
I'm always, you know,
539
00:37:41,634 --> 00:37:48,013
I feel like my experience, my experience is new things come in from the new.
540
00:37:48,013 --> 00:37:48,428
uh
541
00:37:48,428 --> 00:37:56,364
new projects, the new whatever initiative that says like, hey, we want to do the same and
we no longer write, we don't like Ruby anymore.
542
00:37:56,444 --> 00:37:59,566
We're going to do Rust because whatever reason, right?
543
00:37:59,566 --> 00:38:06,352
Like people are interested in it and that helps getting that excitement in a developer
that says like, hey, I get to write something new.
544
00:38:06,352 --> 00:38:08,793
I really want to work on this project.
545
00:38:08,914 --> 00:38:15,168
I don't want to write the same Rails app that I did for the last 15 years or whatever it
is, but.
546
00:38:16,352 --> 00:38:27,632
At some point, there's a tipping moment when enough of the new stuff is written in the new
language and you kind of lose the ability to modify and change and maintain the old
547
00:38:27,632 --> 00:38:36,949
languages, whether because those people have moved on, whether because they just got so
kind of kind of old and people didn't know how it worked anymore.
548
00:38:36,949 --> 00:38:43,431
That's just like, wow, we got to have, we have one Ruby developer now that has to maintain
18 different projects.
549
00:38:43,431 --> 00:38:49,691
Fair, fair, but like, you know, when you first did the decision, just like, we're not
going to be a Ruby shop.
550
00:38:49,691 --> 00:38:51,311
We're going to be a Haskell shop.
551
00:38:51,311 --> 00:38:51,611
I don't know.
552
00:38:51,611 --> 00:38:52,851
I just made that up.
553
00:38:53,751 --> 00:38:56,171
you know, we're going to be a Rust shop.
554
00:38:57,171 --> 00:39:03,031
Does that mean you have to go and replace every piece of Ruby code, you know, because it's
not Rust?
555
00:39:03,031 --> 00:39:04,211
No, it doesn't.
556
00:39:04,211 --> 00:39:11,411
You know, it's like, you know, I just, I think a really smart CEO or CTO.
557
00:39:12,256 --> 00:39:14,818
builds off of what they have and moves to the new thing.
558
00:39:14,818 --> 00:39:16,740
And then it's like, yeah, we're losing all our Ruby stuff.
559
00:39:16,740 --> 00:39:21,564
It's like, okay, well, maybe we need to take our more important things and convert them
over now.
560
00:39:21,564 --> 00:39:32,745
you know, it should never be the goal of a company that's trying to survive and make money
and keep their people employed to, you know, replace every line of code from the old to
561
00:39:32,745 --> 00:39:33,175
the new.
562
00:39:33,175 --> 00:39:36,598
think that's personally.
563
00:39:36,630 --> 00:39:37,615
Well, I don't
564
00:39:39,638 --> 00:39:42,609
Most companies don't decide they're going to be a new type of language.
565
00:39:42,609 --> 00:39:44,080
They're going to kind of experiment with it.
566
00:39:44,080 --> 00:39:49,713
And then at some point they realize they are mostly writing in that new language with the
engineers.
567
00:39:49,713 --> 00:39:59,597
So it kind of evolves over time, but I also think that in general, at least with big
technology companies or, large companies in general, there's always a state of flux where
568
00:39:59,597 --> 00:40:00,848
people are.
569
00:40:00,848 --> 00:40:09,552
There's, there's always some re re-platforming or initiative to modernize or move either
documentation to
570
00:40:09,552 --> 00:40:18,140
a new wiki, code to a new CI CD, apps to new languages, like that's always happening and
things don't ever stay still.
571
00:40:18,301 --> 00:40:26,869
And that's not necessarily a bad thing, but there is just always this like constant busy
work that happens of none of this is making us money.
572
00:40:26,869 --> 00:40:27,779
This doesn't.
573
00:40:27,779 --> 00:40:28,820
that way.
574
00:40:29,201 --> 00:40:36,946
mean, all you said is valid, but I think there's also times when you get a new CTO and he
has to make a name for himself.
575
00:40:36,946 --> 00:40:39,548
So he's like, we're going to switch all of the developments of this.
576
00:40:39,548 --> 00:40:44,251
that's the kind of thing that I think is, you know, then, yep, exactly.
577
00:40:44,251 --> 00:40:44,798
Thank you, Adam.
578
00:40:44,798 --> 00:40:47,870
that big impact to earn their giant stock piles.
579
00:40:47,870 --> 00:40:51,733
uh
580
00:40:51,733 --> 00:41:04,537
seems like right now people, were big tech companies are almost pushing like organizations
or companies as a whole over to whatever they decide they want to maintain.
581
00:41:04,537 --> 00:41:14,160
know, Amazon used to be really Java heavy and now they're pushing JavaScript really hard
and rest, which I mean, rest is a good language for a lot of things, but it seems like
582
00:41:14,160 --> 00:41:17,301
they've picked what they want to invest in and kind of keep it going.
583
00:41:17,301 --> 00:41:18,061
So.
584
00:41:18,830 --> 00:41:23,530
And usually that involves some sort of vilification of the old, right?
585
00:41:23,530 --> 00:41:25,110
Where you're like, oh, you're doing Java still?
586
00:41:25,110 --> 00:41:26,450
That sucks, right?
587
00:41:26,450 --> 00:41:35,390
You should be right in rest now because it's safe typed and whatever, you know, like, like
all the memory safety benefits and things that they can claim is like, you have to get to
588
00:41:35,390 --> 00:41:36,314
the new thing.
589
00:41:36,314 --> 00:41:44,101
sometimes it's bullying through like uh documentation, which I don't think they're doing
that.
590
00:41:44,101 --> 00:41:53,529
I think Amazon will always be a Java shop, but I think for the new infrastructure, all of
the documentation, well, not all of it, but a large majority of it and a large majority of
591
00:41:53,529 --> 00:41:56,461
the examples are being done in JavaScript.
592
00:41:56,461 --> 00:41:58,313
So that's kind of the option.
593
00:41:58,313 --> 00:41:59,074
You know what I mean?
594
00:41:59,074 --> 00:42:03,329
Cause there's so many examples in it that it's almost pushing teams that don't even
595
00:42:03,329 --> 00:42:09,396
normally use JavaScript to do it for infrastructure, just like for a long time they were
using Ruby for infrastructure.
596
00:42:09,396 --> 00:42:10,979
That always confused me.
597
00:42:12,312 --> 00:42:13,342
That probably is.
598
00:42:14,254 --> 00:42:20,704
What do you think is the biggest money making language in the world right now?
599
00:42:21,446 --> 00:42:24,835
I have a possible answer.
600
00:42:24,835 --> 00:42:27,119
I think languages make money in a weird way though.
601
00:42:27,119 --> 00:42:31,756
Like a lot of times it doesn't make money, it saves you money on compute and optimization.
602
00:42:31,756 --> 00:42:37,233
Well, and you mean which are you just talking about like generally like which apps are
written the most that make the most money like
603
00:42:37,233 --> 00:42:38,924
in the world making the most money?
604
00:42:38,924 --> 00:42:40,124
What language?
605
00:42:42,405 --> 00:42:46,026
Yeah, I think uh it begins with a C.
606
00:42:48,406 --> 00:43:01,350
I, yes, I was going to, so I told you about the person I met at KubeCon who wrote the
crystal binding for JavaScript, right?
607
00:43:01,350 --> 00:43:02,270
I mentioned that.
608
00:43:02,270 --> 00:43:04,651
so, yeah, I found that later.
609
00:43:04,651 --> 00:43:05,791
uh
610
00:43:06,311 --> 00:43:11,853
that she's a rock star at Red Hat working on IBM mainframes and she pointed me at an
article.
611
00:43:11,853 --> 00:43:16,104
uh I can link to this article.
612
00:43:16,104 --> 00:43:20,735
It's a quote from IBM and so you've got to wonder how they got the numbers.
613
00:43:20,735 --> 00:43:22,451
But if they're close, it's amazing.
614
00:43:22,451 --> 00:43:35,025
68 % of production workloads are um running on IBM mainframes and of the entire cost of
all production workloads that they account for 6%.
615
00:43:35,258 --> 00:43:37,900
So you're like, what the heck?
616
00:43:37,900 --> 00:43:38,751
How's that possible?
617
00:43:38,751 --> 00:43:48,117
Well, COBOL is the language of government, big pharma, medical, and banks, And insurance.
618
00:43:48,157 --> 00:43:58,845
So the biggest industries in the world that are automated um are running these old systems
that still work and they have to keep them working and they don't break and they don't
619
00:43:58,845 --> 00:44:01,703
have any exposure to the internet because they run on systems.
620
00:44:01,703 --> 00:44:04,483
that were pre-internet so that they don't get attacked, that kind of thing.
621
00:44:04,483 --> 00:44:18,163
So it's really quite interesting that like a, I found this out while I was at a, so, you
know, being around from 2001, I was really big in the Perl community.
622
00:44:18,163 --> 00:44:23,943
And to a degree, I, you know, I still, that's my family, right?
623
00:44:23,943 --> 00:44:29,403
So there's a core developers meeting and it's in Europe every year they have in the
spring.
624
00:44:29,711 --> 00:44:38,135
the Perl toolchain summit and I was over there and I was like, hey guys, know, Perl was
made to run, I just counted today, 25 different architecture platforms.
625
00:44:38,135 --> 00:44:42,236
Like we don't even have that many platforms today, you know, but it was made in 87.
626
00:44:42,236 --> 00:44:44,267
So it was ported to almost everywhere.
627
00:44:44,267 --> 00:44:54,081
And I was like, do we still have access to, you know, IBM 360 architecture, which is now
called 390?
628
00:44:54,081 --> 00:44:56,512
Do we have those machines left?
629
00:44:56,512 --> 00:44:59,083
Because we had test machines for all this stuff.
630
00:44:59,111 --> 00:45:00,922
They're like, no, we lost them a few years ago.
631
00:45:00,922 --> 00:45:05,095
And I'm like, I think I know somebody who can get us access to those.
632
00:45:05,576 --> 00:45:08,898
But in the back of my mind, I'm like, that would be cool to test on those things again.
633
00:45:08,898 --> 00:45:23,828
what if Perl became the darling language of, uh know, because the new COBOL mainframes I'm
talking about, they've now made them run Linux, Kubernetes, seriously, ah all these modern
634
00:45:23,828 --> 00:45:27,121
things, they're getting working on IBM mainframes.
635
00:45:27,121 --> 00:45:27,951
What if
636
00:45:28,017 --> 00:45:32,591
But not a lot of languages, other languages, are targeting that.
637
00:45:32,591 --> 00:45:35,513
So what if Perl became the darling language of the COBOL mainframes again?
638
00:45:35,513 --> 00:45:38,396
I don't know.
639
00:45:38,396 --> 00:45:41,999
I thought it was quite an interesting possible fairy tale.
640
00:45:41,999 --> 00:45:44,300
So we'll see how goes.
641
00:45:44,821 --> 00:45:57,344
I actually met with that working group this morning for the first time to talk about how
we get Perl working full on with IBM stuff again.
642
00:45:57,344 --> 00:46:03,900
I think uh the IBM testing goes through Oregon State University, which has mainframes.
643
00:46:04,001 --> 00:46:08,905
And I remember just seeing that they were at risk of being defunded.
644
00:46:10,267 --> 00:46:11,348
Did they get the funding?
645
00:46:11,348 --> 00:46:12,328
Okay.
646
00:46:12,889 --> 00:46:13,267
I know.
647
00:46:13,267 --> 00:46:18,427
told that in Seattle here, there's a big mainframe center in South Seattle.
648
00:46:18,427 --> 00:46:22,747
then, you know, a guy on the call today, he said he has access to one of these old
systems.
649
00:46:22,747 --> 00:46:23,307
I'm like, where is it?
650
00:46:23,307 --> 00:46:25,067
like, it's in Dallas somewhere.
651
00:46:25,067 --> 00:46:31,407
And then, you know, I applied to this Red Hat, you know, you can sign up for it to get
access.
652
00:46:31,747 --> 00:46:35,687
And yeah, there's like different people running mainframes.
653
00:46:35,687 --> 00:46:37,807
And some of these are brand new, like mainframes.
654
00:46:37,847 --> 00:46:41,727
you know, people carrying, it's like a big laptop, you know.
655
00:46:41,733 --> 00:46:48,077
Mainframes used to be like big room size things, but now it's just like plugs in into a.
656
00:46:48,077 --> 00:46:52,164
lot of military and government run mainframes.
657
00:46:52,171 --> 00:46:53,426
Yeah, yeah, of course.
658
00:46:53,426 --> 00:46:53,853
It's like.
659
00:46:53,853 --> 00:46:54,531
there's some.
660
00:46:54,531 --> 00:47:00,430
I always wonder if that's like if Java will hold on the same way that Cobalt does or if
Cobalt is just so big.
661
00:47:00,430 --> 00:47:03,203
Plus isn't tape getting really cheap also?
662
00:47:04,593 --> 00:47:05,524
That's funny, tape.
663
00:47:05,524 --> 00:47:07,845
um Did you say tape?
664
00:47:09,027 --> 00:47:15,212
Yeah, we used to ship out, and I used to do mainframe assembler in the 90s.
665
00:47:15,913 --> 00:47:25,822
We used to ship our releases on tape, and we used to ship our updates in a mailing, a
paper mailing, and we'd send out, yeah, just if you want to fix this bug, just change
666
00:47:25,822 --> 00:47:27,843
these lines 46 through, you know, whatever.
667
00:47:27,843 --> 00:47:32,087
We'd give line numbers and lines of code of like, you know, just.
668
00:47:32,475 --> 00:47:41,581
go change these files because we shipped the source because like it didn't really matter
if you stole the source you'd never have the the machines to run it on right you know it's
669
00:47:41,581 --> 00:47:44,200
like it's such a different world anyway
670
00:47:44,200 --> 00:47:57,099
reading an article about somebody who used to work on mainframes, they were a TPM and just
their kind of outlook on how like AI is changing everything, but how like everything
671
00:47:57,099 --> 00:48:03,934
changed from like uh mainframes and then, you know, like server servers and clouds and all
that good stuff.
672
00:48:03,934 --> 00:48:05,716
Well, I mean, I guess they're the same thing, but you know what I mean?
673
00:48:05,716 --> 00:48:08,667
Like the kind of revolution of like how we use things.
674
00:48:08,928 --> 00:48:10,429
It was really interesting.
675
00:48:12,794 --> 00:48:19,301
You mentioned briefly about possibly helping people convert their YAML to YAML script.
676
00:48:19,301 --> 00:48:21,344
Is that something that you're looking into?
677
00:48:21,344 --> 00:48:33,597
Is that something that you think is going to be, we can take this giant 800 line Istio
thousands of line Istio YAML Kubernetes file and convert it into YAML script.
678
00:48:34,471 --> 00:48:47,051
Yeah, mean, yes, I'm thinking about it, like, you know, in the last, like this, you know,
in 2025, I'm like, already got my fingers into like, got into Wazom, said, to, you know,
679
00:48:47,051 --> 00:48:52,191
since KubeCon London into MCP, agentic AI stuff.
680
00:48:52,191 --> 00:49:02,651
So it's like, you know, if, I think it might be important to experiment with, can you have
YAML script?
681
00:49:02,777 --> 00:49:07,431
MC, MPC service sets that like, um, you know, some of this could be LL driven.
682
00:49:07,431 --> 00:49:11,134
It would be really interesting to see if that was a possibility.
683
00:49:11,134 --> 00:49:17,259
But yes, of course, if there was like, basically I work on a need basis right now, right?
684
00:49:17,259 --> 00:49:26,657
You know, it's like, if people would be like, yeah, I would use this, but, uh, it's a
problem converting that, you know, and go down that alley or like, you know, definitely
685
00:49:26,657 --> 00:49:29,248
try to find people that would want to work on that.
686
00:49:30,360 --> 00:49:32,242
there's, there's so much cool stuff to.
687
00:49:32,242 --> 00:49:34,454
to do uh with Wyze.
688
00:49:34,454 --> 00:49:38,148
mean, it's just like, and with all these new technologies.
689
00:49:38,148 --> 00:49:42,221
Yeah, it's exciting.
690
00:49:42,262 --> 00:49:42,892
I made it.
691
00:49:42,892 --> 00:49:46,245
I'm like, I gotta write a list because I have scraps of paper everywhere down.
692
00:49:46,245 --> 00:49:51,290
I wrote a list of these are the kind of biggest projects I'm interested in.
693
00:49:51,570 --> 00:49:52,982
And I thought it would be maybe a dozen.
694
00:49:52,982 --> 00:49:55,974
It was like 26 as of this morning.
695
00:49:58,630 --> 00:50:05,271
Like, the one cool thing about Yellowscript is I got so focused on it, I spent like 18
months, you 12 hours a day.
696
00:50:05,271 --> 00:50:07,494
just like, and I loved it every minute of it.
697
00:50:07,494 --> 00:50:08,997
um Took all of last year off.
698
00:50:08,997 --> 00:50:13,122
um Yeah, now currently.
699
00:50:14,384 --> 00:50:17,205
You've doing technology for a while now.
700
00:50:18,246 --> 00:50:26,301
How did you kind of stay interested in technologies from the 90s?
701
00:50:26,301 --> 00:50:29,833
I mean, it's been what, 30 years now?
702
00:50:30,274 --> 00:50:35,879
have you been doing the same thing of just finding something interesting and scratching an
itch or are you...
703
00:50:35,879 --> 00:50:41,059
day, I mean, it's just like, well, I made two important decisions.
704
00:50:41,059 --> 00:50:45,819
like, don't get a big mortgage and don't.
705
00:50:46,799 --> 00:50:47,839
I broke one.
706
00:50:47,839 --> 00:50:51,759
I got married for just a little bit, but like, don't have kids.
707
00:50:53,099 --> 00:51:01,879
Don't have pets and well, Ashley, my partner, she's we have plants now, so but she keeps
them alive, not me.
708
00:51:01,879 --> 00:51:04,059
So, yeah, you know, I mean, I like.
709
00:51:05,019 --> 00:51:10,698
You know, like, what is that line if do stuff you love and you'll never work a day in your
life?
710
00:51:10,698 --> 00:51:17,037
It's just, yeah, it's just like, like, you just take inputs and you're like, I don't know,
it's still fun to me.
711
00:51:17,037 --> 00:51:20,121
I don't know why maybe I'm just kind of a simple person.
712
00:51:20,258 --> 00:51:26,349
Has there been any patterns you've seen that have been different for what's been fun?
713
00:51:28,920 --> 00:51:30,210
Oh, yeah.
714
00:51:32,498 --> 00:51:38,891
I see more patterns that keep it in similarities.
715
00:51:38,891 --> 00:51:46,291
It's like always, you're not going to be super excited about what you're doing five years
ago.
716
00:51:46,291 --> 00:51:47,705
Or maybe it morphed into something, right?
717
00:51:47,705 --> 00:51:49,445
You're like, yeah.
718
00:51:49,445 --> 00:51:54,527
Because I feel like a lot of the ideas are based off of other ideas.
719
00:51:54,527 --> 00:52:00,760
it's probably all stuff I learned when I sat next to this guy who was super into
720
00:52:01,202 --> 00:52:03,784
DRY, don't repeat yourself, programming.
721
00:52:03,784 --> 00:52:08,437
And it's just like, I got my mind and I'm like, okay, this isn't dry enough.
722
00:52:08,437 --> 00:52:09,808
How do we make it dry?
723
00:52:09,808 --> 00:52:10,585
It's just like that.
724
00:52:10,585 --> 00:52:15,232
And then you just like riff off into these wild frameworks and solutions.
725
00:52:15,232 --> 00:52:19,866
And yeah, I think I wrote the first on JavaScript templating language.
726
00:52:19,866 --> 00:52:23,040
It's called Jemplet back in 2006.
727
00:52:23,040 --> 00:52:27,691
There wasn't anything that, and the cool thing about it is it actually compiled to.
728
00:52:28,497 --> 00:52:35,730
JavaScript so you could have these template files and then you compile them to JavaScript
and JavaScript as pre node, right?
729
00:52:36,050 --> 00:52:45,514
It's just starting to catch on like doing clean JavaScript in the browser instead of just
horrid stuff, but yeah.
730
00:52:46,895 --> 00:52:47,325
I don't know.
731
00:52:47,325 --> 00:52:52,257
And then somebody took that idea and ported it to like Lua and called it Lemplet or
something like that.
732
00:52:52,257 --> 00:52:55,859
It's just like, yeah, I don't know.
733
00:52:55,859 --> 00:52:56,819
It's a...
734
00:52:57,605 --> 00:53:03,839
It's kind of a wild ride, I do feel like when I saw wise, like, this is it.
735
00:53:03,839 --> 00:53:05,499
This encapsulates.
736
00:53:06,280 --> 00:53:08,932
That's why I said it's really hard to describe all the things.
737
00:53:08,932 --> 00:53:10,743
Here's some interesting things.
738
00:53:12,751 --> 00:53:25,108
I just noticed one day I'm like, it'd be really easy to use the tool chain that compiles
closure into a native binary since YAML script compiles the closure and then evaluates it.
739
00:53:25,108 --> 00:53:36,835
What if I just take any YAML script program that you haven't wrote and you just say, know,
YS tech tech binary that file and it just creates a native binary for you, things like
740
00:53:36,835 --> 00:53:37,065
that.
741
00:53:37,065 --> 00:53:40,707
So, um but also what if you could write
742
00:53:41,360 --> 00:53:42,601
It's kind of that shared library.
743
00:53:42,601 --> 00:53:49,117
was like, know, YAML script is even higher level, I feel like, than Clojure.
744
00:53:49,117 --> 00:53:50,898
Clojure I kind of think of as my assembly language.
745
00:53:50,898 --> 00:53:52,430
Sorry, Clojure does, but that's how I see it.
746
00:53:52,430 --> 00:53:57,554
Because Lisp is a really normal type of way to generate code in, right?
747
00:53:57,554 --> 00:53:59,055
It's hard to mess up.
748
00:53:59,156 --> 00:54:01,998
Just keep your parentheses balanced, and you don't have to worry about much.
749
00:54:01,998 --> 00:54:03,740
um So it's great that way.
750
00:54:03,740 --> 00:54:07,973
um But with YAML script, I try to make it a...
751
00:54:08,773 --> 00:54:10,325
I just program it in a lot.
752
00:54:10,325 --> 00:54:12,867
And if I don't like something, it doesn't last long.
753
00:54:13,248 --> 00:54:17,012
And I know that you've only seen a couple of examples.
754
00:54:17,012 --> 00:54:20,715
The Helmwise stuff are kind of focused in a certain way.
755
00:54:21,717 --> 00:54:28,293
But if I were to show you some other code, it's like, actually, I have a YAML script
program that will take a
756
00:54:29,959 --> 00:54:32,419
Okay, so there's a site called exorcism.org.
757
00:54:32,419 --> 00:54:33,639
Do know that one?
758
00:54:34,419 --> 00:54:36,219
It's a free language learning site.
759
00:54:36,219 --> 00:54:36,919
It's great.
760
00:54:36,919 --> 00:54:41,419
It's um, it's like exercise is um, so it's exorcism not exorcism.
761
00:54:41,419 --> 00:54:43,579
Um, and it's it's great.
762
00:54:43,579 --> 00:54:44,359
It's free.
763
00:54:44,359 --> 00:54:45,619
It's uh, volunteer driven.
764
00:54:45,619 --> 00:54:46,719
It's been around for a long time.
765
00:54:46,719 --> 00:54:48,079
They have 75 languages.
766
00:54:48,079 --> 00:54:49,679
One of them is YandleScript.
767
00:54:49,679 --> 00:54:51,439
So I took all of last summer.
768
00:54:51,439 --> 00:54:57,939
It's a lot of work to get a language learning track, YandleScript onto exorcism.org.
769
00:54:59,487 --> 00:55:05,495
And this is where we cut because I was like.
770
00:55:07,353 --> 00:55:08,284
all right.
771
00:55:08,284 --> 00:55:09,324
Sorry.
772
00:55:09,425 --> 00:55:11,886
I have to cut that out of it.
773
00:55:12,487 --> 00:55:14,449
But I think it's been going pretty good otherwise.
774
00:55:14,449 --> 00:55:14,819
Okay.
775
00:55:14,819 --> 00:55:19,313
So, yeah, so there's also something called Rosetta code.
776
00:55:19,313 --> 00:55:21,114
Are you familiar with Rosetta code?
777
00:55:21,815 --> 00:55:22,245
Okay.
778
00:55:22,245 --> 00:55:24,097
I actually like have met Mike.
779
00:55:24,097 --> 00:55:25,638
Well, something happened this morning.
780
00:55:25,638 --> 00:55:28,200
ah Rosetta code went down.
781
00:55:28,200 --> 00:55:30,622
It might be down right now if you check.
782
00:55:30,762 --> 00:55:32,984
And I reached out to Mike and I'm like, hey, your site's down.
783
00:55:32,984 --> 00:55:34,385
And he's like, yeah, this is what's going on.
784
00:55:34,385 --> 00:55:36,847
I'm like, I think I can help you when I get done with this.
785
00:55:37,105 --> 00:55:39,064
you know, for.
786
00:55:40,941 --> 00:55:46,314
For can find out podcast I'm So that's what I'm going help him get that back up.
787
00:55:46,314 --> 00:55:48,715
If it's not up and running right now.
788
00:55:49,016 --> 00:55:52,358
it's a domain registrar thing anyway.
789
00:55:52,358 --> 00:55:54,559
um
790
00:55:56,392 --> 00:56:00,712
Yeah, so I wrote something in 2012 or something.
791
00:56:00,712 --> 00:56:02,232
I scraped all of Rosetta code.
792
00:56:02,232 --> 00:56:12,292
it was like, and I do it like every, whenever I think about it, you know, it's not a
prompt or whatever, but I like, it's about 120,000 individual program files.
793
00:56:12,292 --> 00:56:23,612
It's like, I think they're coming up on a thousand languages, 950 plus languages against
1500 programming tests in a matrix in a media Wiki, really janky, but like also pretty
794
00:56:23,612 --> 00:56:23,992
cool.
795
00:56:23,992 --> 00:56:25,215
it's, um,
796
00:56:25,883 --> 00:56:30,665
You know, there's a Rosetta code data project on GitHub where you can just clone the
entire thing.
797
00:56:31,085 --> 00:56:45,101
And, um, so I took, I wanted to make sure that my exercise on solutions to, they have like
150 standard problems that you know, are exposed a different amount in different
798
00:56:45,101 --> 00:56:45,531
languages.
799
00:56:45,531 --> 00:56:48,407
Python has a ton and you had to have 20.
800
00:56:48,407 --> 00:56:51,083
I have 60 or YAML script has 60.
801
00:56:51,894 --> 00:56:55,295
So I wanted to take these programs and compare them to.
802
00:56:55,751 --> 00:56:58,854
uh code written in other languages.
803
00:56:58,854 --> 00:57:05,399
And so I wrote uh a comparison program in YAML script that would, you know, just basically
make a GitHub gist.
804
00:57:06,000 --> 00:57:08,682
And you could do a little collapsible sections in GitHub.
805
00:57:08,682 --> 00:57:21,894
it's with, you know, 74 other languages comparison, and then it shows the number of lines
of code and like, how do I compare against Fortran or Go or Haskell or some really odd uh
806
00:57:21,894 --> 00:57:22,334
ones.
807
00:57:22,334 --> 00:57:23,915
anyway.
808
00:57:24,583 --> 00:57:25,783
So that was a lot of fun.
809
00:57:25,783 --> 00:57:31,063
I just, I'm like, I don't have to be the shortest program.
810
00:57:31,063 --> 00:57:39,023
It's not golf language, but I just want to make sure that I'm in the right realm of, this
a good working language?
811
00:57:39,023 --> 00:57:41,343
Is this how I would expect to program?
812
00:57:41,343 --> 00:57:45,403
And I think it's quite close to that.
813
00:57:45,403 --> 00:57:48,063
I used to write a new YAML script program and I would.
814
00:57:49,039 --> 00:57:50,944
come up with 20 things I wanted to change.
815
00:57:50,944 --> 00:57:55,012
Let's just look little things and now I, know, every once in a while I'll find one or two.
816
00:57:55,439 --> 00:57:56,038
So.
817
00:57:56,038 --> 00:58:00,518
the next five years of YAML looks like?
818
00:58:00,518 --> 00:58:04,198
If we go ahead, it's 2030.
819
00:58:05,098 --> 00:58:06,598
Where do think we're gonna be?
820
00:58:07,975 --> 00:58:12,675
Yeah, with, I don't know, it's such a wild time, you know?
821
00:58:12,855 --> 00:58:17,595
Like I'll keep pushing, like I think YAML script is the future of YAML.
822
00:58:17,835 --> 00:58:20,975
And I'm just gonna quickly explain why.
823
00:58:20,975 --> 00:58:26,015
So, because here's the problem with YAML is it's a giant spec.
824
00:58:26,015 --> 00:58:29,575
It's very, very detailed and very easy to get wrong.
825
00:58:29,575 --> 00:58:37,515
And in fact, we have a YAML test suite and in 2021, not a single language passed the test
suite and it wasn't even.
826
00:58:38,117 --> 00:58:39,768
It was just the start of a test suite.
827
00:58:39,768 --> 00:58:49,822
So it's like all of these implementations, they work good enough in their own language,
but they just have all these little edge cases or minor discrepancies.
828
00:58:49,822 --> 00:58:51,620
So they don't really work good between each other.
829
00:58:51,620 --> 00:58:54,254
And that's what we originally signed up for.
830
00:58:54,254 --> 00:58:57,571
At the same time, we wanted to put out the next version of YAML 1.3.
831
00:58:57,571 --> 00:59:04,478
And we have a bunch of ideas of what we would do and even ways to do that without breaking
the world.
832
00:59:06,663 --> 00:59:12,503
The problem with that is you put out a new spec version and it's taken people like years
to just make the ones that they had.
833
00:59:12,523 --> 00:59:15,483
Nobody's ever going to implement your next version of YAML.
834
00:59:15,483 --> 00:59:18,203
It's not something anybody wants to do.
835
00:59:18,443 --> 00:59:26,923
But what if there was one YAML loader that worked the same in every language, shipped to
every major language that uses YAML.
836
00:59:26,923 --> 00:59:33,283
And the day that 1.3 or whatever the next YAML version spec version is, it was ready to
go.
837
00:59:33,283 --> 00:59:36,927
And it was full featured, did comments like we were talking about, did
838
00:59:36,985 --> 00:59:48,598
everything and if there's a bug in Python, it had the same bug in Ruby and that same bug
fix made by a Haskell person would affect that same person's bug in Java, right?
839
00:59:48,598 --> 00:59:50,049
They'd all be the same.
840
00:59:50,550 --> 00:59:51,471
So...
841
00:59:53,280 --> 01:00:00,383
Whereas I you know, maybe the spec wasn't the best way to make you know, maybe it's a spin
ah
842
01:00:02,095 --> 01:00:03,186
I don't know, implementation.
843
01:00:03,186 --> 01:00:04,096
don't know.
844
01:00:04,137 --> 01:00:04,997
I say both, right?
845
01:00:04,997 --> 01:00:08,059
So it's like, I'll make the spec, people can still implement it.
846
01:00:08,059 --> 01:00:17,576
And I don't think YAML script will be the only implementation to use, but it will be the
one that will evolve and be the most correct with YAML for all languages.
847
01:00:17,576 --> 01:00:20,527
So I think that's really important.
848
01:00:20,868 --> 01:00:28,793
Even without the scripting, there's another, there's, can turn off all the scripting
capabilities of YAML script.
849
01:00:29,714 --> 01:00:31,195
You know, obviously.
850
01:00:31,953 --> 01:00:40,954
You don't want to expose some of the things that it can do, like make web calls, database
calls, whatever, or access file systems or parts of file systems.
851
01:00:41,176 --> 01:00:46,963
Yeah, that's all configurable by either by both the user and by the consumers.
852
01:00:48,632 --> 01:00:55,144
Well, Engy, thank you so much for coming on and telling us all about the past, present,
and future of YAML.
853
01:00:55,144 --> 01:01:06,195
I think it's been uh fascinating not even realizing that most of my career has been
evolved around YAML in some way, because I was writing Ansible pretty early on.
854
01:01:06,195 --> 01:01:10,998
Even SALTs for config management was YAML based.
855
01:01:10,998 --> 01:01:15,121
And while there was always this Python or JSON sort of bits and...
856
01:01:15,121 --> 01:01:16,136
uh
857
01:01:16,136 --> 01:01:22,295
other pieces it was all a subset of yaml in some way so that's really fascinating.
858
01:01:22,295 --> 01:01:25,324
It's really rad, I didn't know YAML powered so many things.
859
01:01:26,213 --> 01:01:28,214
Yeah, I didn't either to be honest.
860
01:01:28,214 --> 01:01:37,409
mean, like, like when I went to KubeCon and just saw the amount of YAML in the world, just
kind of messed with me a bit.
861
01:01:37,490 --> 01:01:40,441
It's a bit crazy.
862
01:01:42,066 --> 01:01:43,757
Where can people find you online?
863
01:01:43,757 --> 01:01:46,689
there a place that you want people to find you online?
864
01:01:46,689 --> 01:01:50,472
Absolutely, I'm like always, I can use another friend.
865
01:01:50,472 --> 01:01:55,185
Yannelscript.org slash INGYDOTNET.
866
01:01:55,185 --> 01:01:57,386
We can put that down in the links.
867
01:01:57,506 --> 01:02:00,508
This is the page of all the ways to contact me.
868
01:02:01,289 --> 01:02:09,914
So, it doesn't have my address, but if you ask me, come over and we'll do a barbecue or
something.
869
01:02:11,183 --> 01:02:13,027
Perfect, we'll have it in the show notes.
870
01:02:14,355 --> 01:02:15,657
Thank you so much.
871
01:02:15,660 --> 01:02:16,063
Yeah.
872
01:02:16,063 --> 01:02:16,414
Autumn.
873
01:02:16,414 --> 01:02:17,806
It's been awesome.
874
01:02:17,806 --> 01:02:24,767
And you guys do a really good job of making a podcast flow really well.
875
01:02:24,767 --> 01:02:26,619
really enjoyed doing this with you guys.
876
01:02:26,789 --> 01:02:28,456
Thanks for coming on the show.
877
01:02:29,196 --> 01:02:32,246
Yeah, we're just nerds that are interested and so it's fun.
878
01:02:32,246 --> 01:02:35,008
It makes it really easy when there's an interesting topic.
879
01:02:35,195 --> 01:02:37,537
When am I gonna, let's see, when am gonna see you again?
880
01:02:37,537 --> 01:02:40,239
Are you going to, you guys got all the coupons?
881
01:02:41,400 --> 01:02:42,927
Are North America's at least?
882
01:02:42,927 --> 01:02:43,610
only wishes.
883
01:02:43,610 --> 01:02:46,053
ah She doesn't tend to go to the cube cons.
884
01:02:46,053 --> 01:02:49,836
hard and then all my friends have fun without me and then Justin sends me pictures.
885
01:02:49,836 --> 01:02:51,372
It's so, it's, it's cruel.
886
01:02:51,372 --> 01:02:51,743
cruel.
887
01:02:51,743 --> 01:02:53,437
That's cruel, Justin.
888
01:02:54,577 --> 01:02:58,191
I will be at KubeCon North America in Atlanta.
889
01:02:58,191 --> 01:03:00,013
Yeah, that's in November.
890
01:03:00,013 --> 01:03:02,385
So I will be there.
891
01:03:03,947 --> 01:03:05,168
Sounds good.
892
01:03:06,890 --> 01:03:10,714
Thank you everyone for listening and we will talk to you again soon.
893
01:03:12,264 --> 01:03:13,463
And.
