Navigated to Creating YAML with Ingy döt Net - Transcript

Creating YAML with Ingy döt Net

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.

Never lose your place, on any device

Create a free account to sync, back up, and get personal recommendations.