Navigated to Macrodata Refinement with Ken Kunz - Transcript
Svelte Radio

ยทE85

Macrodata Refinement with Ken Kunz

Episode Transcript

1 00:00:18,600 --> 00:00:20,420 Kevin: Welcome to Svelte Radio. 2 00:00:22,800 --> 00:00:26,100 Kevin: Hello everyone, welcome back to another episode of Svelte Radio. 3 00:00:26,710 --> 00:00:29,500 Kevin: We're kind of doing this often nowadays, I feel like. 4 00:00:30,040 --> 00:00:32,619 Kevin: I'm joined by my two co-hosts, Anthony, Brittany. 5 00:00:33,240 --> 00:00:33,420 Kevin: Hello. 6 00:00:34,300 --> 00:00:34,500 Speaker 2: Hello. 7 00:00:35,340 --> 00:00:35,620 Kevin: Hey. 8 00:00:36,040 --> 00:00:38,840 Kevin: And today we have another special guest with us. 9 00:00:39,360 --> 00:00:39,940 Kevin: Ken, hello. 10 00:00:41,000 --> 00:00:41,840 Ken: Hey, great to be here. 11 00:00:42,600 --> 00:00:43,880 Kevin: Yeah, nice to have you. 12 00:00:44,480 --> 00:00:46,140 Kevin: It's great seeing you all again. 13 00:00:46,420 --> 00:00:55,020 Kevin: And Ken, we met the first time at Svelte Summit when you did a very, very fun talk there. 14 00:00:55,370 --> 00:00:56,360 Kevin: But we'll get back. 15 00:00:57,100 --> 00:00:58,220 Kevin: We'll get into that later. 16 00:00:59,160 --> 00:01:14,520 Kevin: But yeah, maybe before we get into who Ken is and what he's done in terms of Svelte, maybe we can talk about the latest Svelte feature that dropped yesterday. 17 00:01:16,600 --> 00:01:18,560 Kevin: Type, context, anyone excited? 18 00:01:19,520 --> 00:01:19,660 Kevin: No? 19 00:01:20,180 --> 00:01:20,960 Kevin: Very excited. 20 00:01:21,460 --> 00:01:22,220 Kevin: Very excited? 21 00:01:22,500 --> 00:01:23,280 Kevin: I think it's a 22 00:01:23,280 --> 00:01:23,440 Brittney: very exciting. 23 00:01:23,440 --> 00:01:24,720 Brittney: I should really pay more attention. 24 00:01:25,320 --> 00:01:26,100 Kevin: I think it's a small 25 00:01:26,100 --> 00:01:26,460 Brittney: feature. 26 00:01:27,980 --> 00:01:28,700 Speaker 2: You need 27 00:01:28,700 --> 00:01:30,260 Ken: like a little bell to ring or something. 28 00:01:31,920 --> 00:01:32,640 Ken: I'm sure there's 29 00:01:32,640 --> 00:01:34,180 Brittney: a notification I could get. 30 00:01:34,380 --> 00:01:35,120 Brittney: I just... 31 00:01:36,140 --> 00:01:37,580 Antony: I'm sure it's an announcements channel, isn't it? 32 00:01:37,880 --> 00:01:43,240 Antony: But the thing is, if you say typed, I'm like, oh, that sounds great, but I can't use it because we don't use TypeScript. 33 00:01:44,500 --> 00:01:45,980 Brittney: Oh, I use TypeScript. 34 00:01:46,680 --> 00:01:48,060 Antony: Yeah, we don't. We don't use it. 35 00:01:48,320 --> 00:01:49,580 Antony: I'm excited for you. 36 00:01:50,460 --> 00:01:50,520 Brittney: Is 37 00:01:50,520 --> 00:01:52,440 Kevin: that why Beyond crashes all the time? 38 00:01:52,520 --> 00:01:52,940 Kevin: No, I'm kidding. 39 00:01:53,700 --> 00:01:58,920 Brittney: I don't want to use JS doc, but it's just painful to write. 40 00:01:59,380 --> 00:02:02,180 Brittney: It's not nice like TypeScript. 41 00:02:02,200 --> 00:02:02,380 Brittney: Brittany, 42 00:02:02,700 --> 00:02:05,760 Kevin: you're just going to have the LLM write it for you. 43 00:02:08,020 --> 00:02:08,780 Brittney: Write TypeScript 44 00:02:08,780 --> 00:02:09,140 Speaker 2: and then 45 00:02:09,140 --> 00:02:10,320 Kevin: convert it to JS doc. 46 00:02:10,759 --> 00:02:13,400 Brittney: I guess Claude is going to have to learn JS doc. 47 00:02:14,720 --> 00:02:15,060 Kevin: I'm sure 48 00:02:15,060 --> 00:02:15,700 Brittney: he really does. 49 00:02:16,020 --> 00:02:16,180 Ken: Yeah. 50 00:02:16,600 --> 00:02:21,060 Ken: I think TypeContext is like one of those, it's just like a tiny little nugget of goodness, right? 51 00:02:21,100 --> 00:02:33,600 Ken: It kind of takes something you otherwise had to use to do a little bit more effort yourself, and it just gives you a nice little shrink-wrapped, easy, quick way to do it that's like now the standard, which 52 00:02:33,600 --> 00:02:34,260 Speaker 2: does mean I have 53 00:02:34,260 --> 00:02:36,060 Ken: to go back and change code in a few places. 54 00:02:36,360 --> 00:02:39,760 Ken: But I don't use context a ton, but it's a nice little feature. 55 00:02:40,380 --> 00:02:41,000 Kevin: Yeah, same. 56 00:02:41,700 --> 00:02:42,880 Kevin: Are you in a sauna, Kev? 57 00:02:43,700 --> 00:02:45,680 Kevin: I am in a sauna, yeah. 58 00:02:45,880 --> 00:02:46,800 Kevin: That's why they live in Sweden, 59 00:02:46,920 --> 00:02:47,660 Antony: everyone lives in a sauna. 60 00:02:49,000 --> 00:02:53,620 Kevin: No, I actually moved to like a timber wooden house. 61 00:02:54,940 --> 00:02:58,360 Kevin: so it's very cozy that is called all the 62 00:02:58,360 --> 00:03:08,420 walls look like this and it's has like a grass roof as well wow yeah if you want if you want to have like a new extension all you do is go outside 63 00:03:08,510 --> 00:03:10,400 Antony: and chop a tree down and just like layer it 64 00:03:10,400 --> 00:03:12,140 Kevin: up build 65 00:03:12,140 --> 00:03:12,280 Brittney: a 66 00:03:12,280 --> 00:03:13,080 Speaker 2: tree house on 67 00:03:13,080 --> 00:03:13,520 Brittney: top 68 00:03:13,520 --> 00:03:19,280 Kevin: of the house i mean i could do it but i probably shouldn't the roots 69 00:03:19,280 --> 00:03:20,300 Speaker 2: would come down into 70 00:03:20,300 --> 00:03:22,440 Brittney: your actual house yeah i 71 00:03:22,440 --> 00:03:23,600 Speaker 2: mean i'm actually 72 00:03:23,600 --> 00:03:35,920 Kevin: at the moment i'm actually having trouble with like i don't know the the english word for the for the specific tree but there's like seeds from the tree landing on the grass roof and and 73 00:03:35,920 --> 00:03:36,460 Speaker 2: there are actual 74 00:03:36,460 --> 00:03:39,120 Kevin: roots so i have to go up there and like pull out 75 00:03:39,120 --> 00:03:40,540 Speaker 2: this like tiny trees 76 00:03:40,540 --> 00:03:41,980 Kevin: it's only like i think like 77 00:03:41,980 --> 00:03:46,979 Ken: they're only like this big so it's not that i think you just need some baby goats living up there and then it'd be fine 78 00:03:47,100 --> 00:03:50,040 Kevin: you know i've actually thought about it oh 79 00:03:50,040 --> 00:03:50,240 Antony: my 80 00:03:50,240 --> 00:03:52,760 Ken: god seriously they built 81 00:03:52,760 --> 00:04:02,680 Antony: some houses opposite me and and i said look you should have grass roofs because it would look way better so they came and they just put these weird plants in the roof and like they've got grass roofs technically but it's like a load of plants and 82 00:04:02,680 --> 00:04:02,980 Kevin: trays 83 00:04:02,980 --> 00:04:04,600 Antony: on mounts on the roof it's very strange 84 00:04:04,600 --> 00:04:06,260 Kevin: yeah that's that's cheating 85 00:04:06,260 --> 00:04:07,740 Antony: i don't know if you 86 00:04:07,740 --> 00:04:08,160 Kevin: listen 87 00:04:08,160 --> 00:04:10,260 Brittney: to spelt radio often but we often 88 00:04:10,260 --> 00:04:13,120 Kevin: go on these tangents of like just nonsense. 89 00:04:14,680 --> 00:04:15,860 Kevin: You know, I think we'll keep this in. 90 00:04:15,860 --> 00:04:17,640 Kevin: We start talking about typed context 91 00:04:17,859 --> 00:04:18,040 Brittney: and 92 00:04:18,040 --> 00:04:19,799 Kevin: we're on the last point. 93 00:04:20,280 --> 00:04:20,459 Kevin: Yeah. 94 00:04:20,840 --> 00:04:21,420 Brittney: Baby goats. 95 00:04:22,400 --> 00:04:23,120 Kevin: Yeah, yeah. 96 00:04:24,040 --> 00:04:26,100 Kevin: All right, let's get back 97 00:04:26,100 --> 00:04:27,460 Speaker 2: into 98 00:04:27,460 --> 00:04:27,980 Kevin: Svelte. 99 00:04:30,139 --> 00:04:33,560 Kevin: So maybe, Ken, maybe, why don't you tell us a bit about yourself? 100 00:04:34,000 --> 00:04:34,340 Kevin: Who are you? 101 00:04:34,480 --> 00:04:35,740 Kevin: Why are you using Svelte? 102 00:04:36,520 --> 00:04:36,780 Ken: Sure. 103 00:04:38,280 --> 00:04:42,560 Ken: So I've been doing software development for a little too long for me to say out loud. 104 00:04:43,760 --> 00:04:48,420 Ken: I really kind of have a bit of a unique career trajectory, very non-linear. 105 00:04:48,900 --> 00:04:59,080 Ken: So I've worked almost equal amount of time in my career in user experience, product management, product development, and in actual software engineering roles. 106 00:04:59,740 --> 00:05:00,880 Ken: And I guess I'm weird. 107 00:05:00,940 --> 00:05:01,700 Ken: I like all three. 108 00:05:02,220 --> 00:05:05,740 Ken: I guess for me, the unifying principle is just creating software for humans. 109 00:05:07,140 --> 00:05:13,040 Ken: And over the years, I've tended to be very front-end focused when I've been doing development. 110 00:05:13,280 --> 00:05:21,780 Ken: So I've worked with a lot of different front-end frameworks, tools, could go back to the day when we had zero of those on the front-end. 111 00:05:22,840 --> 00:05:30,460 Ken: But so I was always looking for the perfect, or at least closest to perfect framework that just felt right. 112 00:05:30,580 --> 00:05:35,820 Ken: And I remember many years ago when I first discovered, and it was in the early days of it, Ruby on Rails. 113 00:05:36,280 --> 00:05:41,760 Ken: And it was a pretty major innovation and improvement in front-end development. 114 00:05:42,230 --> 00:05:48,020 Ken: Less on the actual browser JavaScript side, but in terms of just how to build a large-scale front-end application. 115 00:05:48,520 --> 00:05:50,080 Ken: And it just made it easy and felt right. 116 00:05:50,460 --> 00:05:56,100 Ken: But I'd moved much more to focusing on leveraging tools that gave you the power of the browser. 117 00:05:56,470 --> 00:05:59,020 Ken: And none of them felt great to me until I landed on Svelte. 118 00:05:59,090 --> 00:06:00,740 Ken: And it just clicked. 119 00:06:00,790 --> 00:06:01,340 Ken: It felt right. 120 00:06:01,580 --> 00:06:12,860 Ken: It felt like the API design, the thoughtfulness that went into how it was designed, the design side of my brain, the UX side of my brain, it just made a lot of sense. 121 00:06:13,160 --> 00:06:17,120 Ken: So I haven't gone back to anything else since. 122 00:06:17,500 --> 00:06:22,900 Antony: You've triggered something in my mind that you say you build software for humans. 123 00:06:23,280 --> 00:06:25,640 Antony: And it's occurred to me that actually there's two disciplines. 124 00:06:25,960 --> 00:06:27,160 Antony: One is building software for humans. 125 00:06:27,540 --> 00:06:28,880 Antony: One is building software for machines. 126 00:06:30,460 --> 00:06:30,820 Speaker 2: All 127 00:06:30,820 --> 00:06:35,800 Antony: this kind of ESP development stuff that I kind of get myself into nowadays, it's not for humans at all. 128 00:06:35,960 --> 00:06:36,860 Antony: It's for controlling machines. 129 00:06:36,930 --> 00:06:40,920 Antony: And it's like trying to find what is a machine's UX, right? 130 00:06:41,030 --> 00:06:41,160 Antony: Or 131 00:06:41,160 --> 00:06:42,140 Speaker 2: not UX because 132 00:06:42,140 --> 00:06:43,140 Antony: a U doesn't work, but 133 00:06:43,140 --> 00:06:43,780 Speaker 2: MX. 134 00:06:44,070 --> 00:06:44,160 Speaker 2: I 135 00:06:44,160 --> 00:06:44,500 Antony: don't know. 136 00:06:45,340 --> 00:06:47,040 Antony: It's a very different world. 137 00:06:47,200 --> 00:06:51,160 Antony: And you wouldn't even dream of Svelte or anything like that because it's not necessary. 138 00:06:51,360 --> 00:06:53,240 Antony: But it's really, yeah, it's become like 139 00:06:53,240 --> 00:06:54,020 Kevin: one of the esoteric 140 00:06:54,020 --> 00:06:54,720 Antony: thoughts in my head. 141 00:06:55,900 --> 00:07:04,140 Kevin: So it sounds a bit like the question then is like, how do you design an API for a machine? 142 00:07:05,240 --> 00:07:05,600 Kevin: Exactly. 143 00:07:05,900 --> 00:07:11,560 Antony: Yeah. How does the protocol differ? Because an API is still kind of for humans because devs can interact with it. 144 00:07:11,720 --> 00:07:18,140 Antony: But with machines, you might use something like just like, what's it called? Modbus, which I've been trying to figure out recently. 145 00:07:18,819 --> 00:07:24,260 Antony: Modbus just being like packets of bits and you basically send certain bits and you can. 146 00:07:24,640 --> 00:07:35,760 Antony: It's like industrial control systems, so you can set registers, like values of things, so that the circuit board knows what its limits are, what to go to, what to be set to, what speed to be and stuff. 147 00:07:36,260 --> 00:07:38,740 Antony: And they all use Modbus, like Solar System used Modbus. 148 00:07:39,200 --> 00:07:41,700 Antony: My Spark cover that I've been trying to fix recently uses Modbus. 149 00:07:42,160 --> 00:07:46,320 Antony: They all have these little programmer interface, but it's nothing to do with humans. 150 00:07:46,410 --> 00:07:50,680 Antony: You have a device that the human uses that then talks this language to them. 151 00:07:51,680 --> 00:07:53,980 Ken: But you did just say a device the human uses, right? 152 00:07:54,120 --> 00:07:54,940 Ken: So even when you're 153 00:07:54,940 --> 00:07:55,420 Speaker 2: working on that 154 00:07:55,420 --> 00:07:56,220 Ken: stuff, that's like a level 155 00:07:56,220 --> 00:07:57,080 Speaker 2: removed and 156 00:07:57,080 --> 00:08:05,860 Ken: you're designing something for another machine to interact with, even if you're doing context and prompt engineering, let's say, for example, it's a machine on the other end of that. 157 00:08:06,680 --> 00:08:07,480 Speaker 2: But it's your end goal. 158 00:08:08,380 --> 00:08:19,640 Ken: Yeah, your end goal still needs to be the human that's going to ultimately use that, whether that's the end user or like if you're designing APIs and you know other developer humans need to be able to comprehend them. 159 00:08:19,900 --> 00:08:19,980 Ken: Right. 160 00:08:20,240 --> 00:08:23,580 Ken: So it's easy to forget that, especially if you're not like focused on front end. 161 00:08:23,680 --> 00:08:25,040 Ken: you get a layer or two removed. 162 00:08:25,580 --> 00:08:25,720 Ken: But 163 00:08:25,720 --> 00:08:26,680 Antony: I think it's super 164 00:08:26,680 --> 00:08:27,800 Ken: important to always keep in mind. 165 00:08:28,460 --> 00:08:30,060 Antony: It is, but I mean, like this is the thing. 166 00:08:30,140 --> 00:08:37,719 Antony: So in that example you gave there, the human layer is the front end and the API and the context and stuff. 167 00:08:37,840 --> 00:08:40,880 Antony: And the machine layer is the MTP, I guess, right? 168 00:08:41,039 --> 00:08:50,860 Antony: So translating it from what you're doing, your job really is to work on the UI that talks to the thing that then talks to the MTP and the MTP talks to the service. 169 00:08:51,720 --> 00:08:53,180 Antony: So it's still that same sort of thing. 170 00:08:53,560 --> 00:08:56,260 Antony: But yeah, it's true because ultimately there's always an end user. 171 00:08:56,980 --> 00:08:57,660 Speaker 2: I'm the one pushing 172 00:08:57,660 --> 00:09:03,640 Antony: buttons on a control system, even though there's a language inside and a protocol happening there inside. 173 00:09:04,580 --> 00:09:11,600 Ken: And when we write code, we tend to initially think that we're writing it for the compiler or the 174 00:09:11,600 --> 00:09:12,040 Speaker 2: interpreter, 175 00:09:12,780 --> 00:09:15,620 Ken: but we're really writing it for our future self a month later 176 00:09:15,840 --> 00:09:16,080 Speaker 2: that's going 177 00:09:16,080 --> 00:09:18,440 Ken: to have to read it or for the other devs on our team. 178 00:09:18,860 --> 00:09:23,740 Ken: So it's easy to write code that a compiler or interpreter understands 179 00:09:23,740 --> 00:09:24,560 Speaker 2: relatively. 180 00:09:24,560 --> 00:09:25,180 Speaker 2: In a 181 00:09:25,180 --> 00:09:25,600 Antony: 4GL. 182 00:09:26,880 --> 00:09:27,080 Ken: Right. 183 00:09:27,320 --> 00:09:31,720 Antony: We have these 4GLs, and when my dad programmed, he used to use like a 1GL. 184 00:09:31,900 --> 00:09:33,280 Antony: I don't know. He used to push stuff onto a stack. 185 00:09:34,260 --> 00:09:34,400 Kevin: Yeah. 186 00:09:34,580 --> 00:09:34,920 Kevin: Not 187 00:09:34,920 --> 00:09:35,580 Antony: what we do at all. 188 00:09:36,020 --> 00:09:36,160 Antony: Well, 189 00:09:37,200 --> 00:09:37,260 Kevin: yeah. 190 00:09:37,960 --> 00:09:39,820 Kevin: You mentioned Svelte. 191 00:09:41,380 --> 00:09:42,360 Kevin: Curious how that happened. 192 00:09:42,400 --> 00:09:42,540 Kevin: Did he? 193 00:09:42,720 --> 00:09:42,820 Kevin: Right, 194 00:09:42,960 --> 00:09:43,700 Speaker 2: on the Svelte 195 00:09:43,700 --> 00:09:43,940 Kevin: radio. 196 00:09:44,800 --> 00:09:45,180 Speaker 2: But 197 00:09:45,180 --> 00:09:51,060 Kevin: I was just going to ask, you said you found Svelte and you liked it, and that must have been Svelte 3? 198 00:09:51,640 --> 00:09:53,620 Kevin: Or did you get in even earlier than that? 199 00:09:54,180 --> 00:09:55,560 Ken: It was Svelte 3, yeah. 200 00:09:56,320 --> 00:09:58,700 Ken: So, I don't know, should I give you my Svelte origin story? 201 00:09:59,040 --> 00:09:59,940 Kevin: I mean, sure. 202 00:10:00,640 --> 00:10:01,660 Ken: I'll try to keep it short. 203 00:10:02,120 --> 00:10:05,580 Ken: So, it was probably four and a half plus years ago. 204 00:10:05,940 --> 00:10:08,520 Ken: I was working on a couple of startup ideas. 205 00:10:08,620 --> 00:10:16,120 Ken: I had started my own consulting company to both just do software consulting, but also to sort of explore some bootstraps, startup ideas. 206 00:10:16,920 --> 00:10:21,980 Ken: And I was using what seemed like a common sense thing to use at the time, like Next and React. 207 00:10:22,400 --> 00:10:36,600 Ken: And one of the ideas I was working on was pretty graphically intensive, not in terms of super high performance needs, but just in terms of a lot of user interaction, a lot to the user experience. 208 00:10:36,840 --> 00:10:45,680 Ken: And I just felt like I was constantly doing battle with React and just the leaky abstractions of the virtual DOM and the synthetic event system. 209 00:10:46,560 --> 00:10:49,000 Ken: And, you know, it was just frustrating and painful. 210 00:10:49,070 --> 00:10:50,680 Ken: And I did run into some performance issues. 211 00:10:51,390 --> 00:10:54,140 Ken: And so I was at least very primed to look for something else. 212 00:10:54,720 --> 00:10:57,820 Ken: And React just never felt great to me from an API perspective either. 213 00:10:58,070 --> 00:11:03,920 Ken: I appreciated, like, the philosophy behind the reactivity and declarative approach to development. 214 00:11:04,200 --> 00:11:05,880 Ken: But the API just felt wrong. 215 00:11:06,120 --> 00:11:11,580 Ken: And I stumbled at some point in my feed on this video called Rethinking Reactivity. 216 00:11:12,000 --> 00:11:12,920 Speaker 2: Ah, the classic. 217 00:11:13,600 --> 00:11:14,080 Ken: Exactly. 218 00:11:14,440 --> 00:11:18,240 Ken: So honestly, by the end of that video, I was mostly hooked. 219 00:11:18,780 --> 00:11:34,860 Ken: And then by the end of like 15 minutes into this tutorial, which was also just designed so well, like from an end user experience of just so like if your first experience with a framework is the way that it presents itself to you and the sort of getting started aspect of it. 220 00:11:34,960 --> 00:12:03,880 Ken: is such a positive experience, that's going to also sort of hook you. So those things hooked me in. I decided I was going to spend like a day or two to see how far I could get to migrating the app I was working on over from Next and React to SvelteKit Svelte. This was early SvelteKit. It was post-Sapper, but zero dot something SvelteKit. And it really took me barely any time because it's pretty easy to migrate routes and pages and components from one to the other. 221 00:12:04,720 --> 00:12:12,540 Ken: And it was so much easier, better performance, so much less doing battle with, you know, leaky abstractions that I was hooked and have never looked back. 222 00:12:13,480 --> 00:12:17,980 Kevin: Nice. Nice. I feel like this is how almost everyone gets into self. 223 00:12:19,820 --> 00:12:20,280 Brittney: I was 224 00:12:20,280 --> 00:12:20,440 Kevin: going to 225 00:12:20,440 --> 00:12:20,780 Speaker 2: say that 226 00:12:20,780 --> 00:12:22,160 Kevin: earlier. I'm like, this is 227 00:12:22,160 --> 00:12:25,440 Brittney: like the same origin story we hear from almost everyone. 228 00:12:25,550 --> 00:12:25,920 Brittney: And that 229 00:12:25,920 --> 00:12:26,360 Speaker 2: rethinking 230 00:12:26,360 --> 00:12:30,400 Brittney: reactivity should just be like our slogan or something. 231 00:12:30,940 --> 00:12:34,440 Brittney: Like it should just be up on the website for all time. 232 00:12:34,600 --> 00:12:35,320 Brittney: Cause it, I 233 00:12:35,320 --> 00:12:36,120 Speaker 2: feel like it still 234 00:12:36,120 --> 00:12:39,960 Brittney: applies, even though that was talking about Svelte 3 at the time, right? 235 00:12:40,120 --> 00:12:43,700 Brittney: Like we're always rethinking reactivity and how we can do it better. 236 00:12:43,860 --> 00:12:45,140 Brittney: And now with runes and. 237 00:12:46,060 --> 00:12:46,280 Speaker 2: Yeah. 238 00:12:46,620 --> 00:12:47,020 Speaker 2: Speaking of 239 00:12:47,020 --> 00:12:48,620 Kevin: runes, what do you think about Svelte 5? 240 00:12:48,780 --> 00:12:54,480 Kevin: That was a big change for most of us that use Svelte 3, right? 241 00:12:54,960 --> 00:12:55,080 Ken: Yeah. 242 00:12:55,240 --> 00:12:56,540 Ken: For me, it makes a lot of sense. 243 00:12:56,840 --> 00:13:02,440 Ken: I think, first of all, I place a high amount of faith in Rich and the core team, right? 244 00:13:02,700 --> 00:13:13,360 Ken: Like when somebody's proven that they get it in terms of the API design over and over again, and that they value the same things that you value in a framework, you start to put a lot of trust in them. 245 00:13:13,700 --> 00:13:20,320 Ken: And I am the front end lead on a pretty substantial sized code base that's SvelteKit and Svelte. 246 00:13:20,380 --> 00:13:27,060 Ken: And so I've run into a lot of the pain points that they talked about when they talked about the rationale behind runes and Svelte 5. 247 00:13:27,410 --> 00:13:34,800 Ken: I know some people, if you've only worked with maybe, you know, smaller, less complex code bases, you may not have experienced some of those pain points, but I had. 248 00:13:35,380 --> 00:13:39,160 Ken: And so it didn't take me long to say like, okay, I can see why this makes sense. 249 00:13:39,210 --> 00:13:45,840 Ken: I can see why it adds a teeny bit of friction in some scenarios, but that friction is well worth it for the benefits that you get. 250 00:13:45,930 --> 00:13:51,640 Ken: And so pretty shortly after Svelte 5 was production, you know, started migrating our app. 251 00:13:51,650 --> 00:13:53,700 Ken: And it's also nice how you can do that incrementally. 252 00:13:54,140 --> 00:14:03,680 Kevin: That makes sense. Makes sense. So what kind of, what kind of application are you working on? Where do you get to, to use all this front end magic? 253 00:14:04,500 --> 00:14:13,940 Ken: Goodness. Yeah. Yeah. So for my day job, I work with pretty small early stage decentralized finance, DeFi crypto startup called Trading Strategy. 254 00:14:14,640 --> 00:14:17,420 Ken: So we're at tradingstrategy.ai if anybody wants to check it out. 255 00:14:18,820 --> 00:14:26,420 Ken: So I spend most of my time in the front end and the SvelteKit layers, a little bit of time on some of our Python backends. 256 00:14:27,080 --> 00:14:31,960 Ken: But yeah, really just sort of building out all of the features and experiences for end users. 257 00:14:33,180 --> 00:14:53,340 Ken: And we're basically building like a two-sided marketplace where sort of quant or algorithmic strategy developers in the crypto and DeFi space can build algorithmic trading strategies that sort of just are always on and running and looking for opportunities for trading different tokens and coins in the world of DeFi. 258 00:14:53,480 --> 00:15:05,800 Ken: And then investors can essentially invest in those almost like a hedge fund, deposit into it and let that trading happen in the background for them and take advantage of the smarts of some of these quant developers. 259 00:15:08,400 --> 00:15:11,560 Antony: Is this like a robotic fund manager? 260 00:15:12,220 --> 00:15:13,140 Ken: A robotic fund manager? 261 00:15:13,220 --> 00:15:24,140 Ken: I mean, in a way, I mean, it's the idea of algorithmic trading has been around for a long time in traditional finance, especially in some cases like high speed algorithmic trading. 262 00:15:24,200 --> 00:15:29,820 Ken: You can't really do high speed trading that well in in blockchain DeFi at this point. 263 00:15:30,180 --> 00:15:34,980 Ken: So our strategies tend to run on like a, you know, every hour, every four hour type trading cycle. 264 00:15:35,760 --> 00:15:49,760 Ken: But yeah, they're looking at basically technical indicators of, and every strategy is going to have its own sort of logic or sort of alpha for how it's trying to win in the market, right? 265 00:15:49,960 --> 00:15:58,700 Ken: But it's going to have a bunch of essentially rules and algorithms that it's using to decide when it's good to trade what and look for some way to get an upside. 266 00:15:59,120 --> 00:16:07,660 Ken: And then that allows, like any investor can put some crypto, some like USDC or something like that into a vault. 267 00:16:08,130 --> 00:16:11,540 Ken: And it would be just like putting money into a fund in a traditional finance world. 268 00:16:11,890 --> 00:16:17,620 Ken: And then usually that strategy developer would take some type of performance fee as what they've done. 269 00:16:18,060 --> 00:16:19,060 Antony: Like a hedge fund. 270 00:16:19,520 --> 00:16:19,680 Ken: Yeah. 271 00:16:20,460 --> 00:16:22,300 Antony: Who makes the algorithms? 272 00:16:22,470 --> 00:16:28,380 Antony: Who decides, like, not makes them, but who decides what the trading strategy will be? 273 00:16:29,600 --> 00:17:05,939 Ken: yeah any anybody in theory right now it's people that work for our company or people that we're partnering with as sort of early adopters on that side of the marketplace to to help them you know there's a lot of people that have done this type of like quant algorithmic trading work in the traditional finance world or even in the centralized exchange centralized finance world of crypto we're trying to bring it to decentralized finance and so obviously one of our targets for that side are that have this experience maybe in other domains like traditional finance and to help them bring those talents and skills over to decentralized finance 274 00:17:05,939 --> 00:17:26,300 Kevin: oh and what about like in terms of issues when you've been building this like do you can you remember any particular like thing that was particularly hard to build or that that was like oof this is a tough front end problem to solve 275 00:17:27,020 --> 00:17:50,700 Ken: Yeah, I think probably some of the bigger challenges I've run into is finding the best libraries or frameworks to use for financial charts. Think about time series charts, and especially if you've ever seen candlestick charts, they look like little candles, red and green to show if it's for that time period up or down. 276 00:17:50,820 --> 00:17:54,680 Ken: And you want those to be like very dynamic and interactive, right? 277 00:17:54,710 --> 00:17:57,400 Ken: You want to be able to sort of zoom in and out and pan left and right. 278 00:17:58,020 --> 00:18:00,880 Ken: And you want it to essentially be like infinitely scrollable. 279 00:18:01,120 --> 00:18:09,400 Ken: So if you're like going back in time, but you don't want to fetch all the data when you first load it up, but you want that data to kind of come in quickly as you sort of scroll back or forward. 280 00:18:10,600 --> 00:18:12,960 Ken: If you change timeframes, then you're like fetching new data. 281 00:18:13,010 --> 00:18:13,980 Ken: How are you caching that? 282 00:18:14,050 --> 00:18:17,360 Ken: So if you switch back to a different timeframe, you don't necessarily always have to refresh. 283 00:18:18,460 --> 00:18:46,280 Ken: there haven't been great solutions that are sort of Svelte native for that. I've experimented with a lot of options, including just using like D3 for the sort of mathy logic side of it, and then using just Svelte and SVG for the actual drawing of chart elements. I don't think it's a great fit to use like D3's sort of rendering APIs, but just use Svelte for that side. I've experimented with that and I've experimented with a bunch of different charting libraries. 284 00:18:47,180 --> 00:18:56,940 Ken: Some of the ones that are, you know, sort of Svelte native are coming along to the point where they could work for that, say like layer chart, especially because it has canvas, which could be needed in this scenario. 285 00:18:57,010 --> 00:18:57,240 Ken: You have 286 00:18:57,240 --> 00:18:57,980 Kevin: too many SVG 287 00:18:57,980 --> 00:18:58,260 Ken: elements. 288 00:18:58,410 --> 00:19:00,040 Ken: You start to run into some performance issues. 289 00:19:00,480 --> 00:19:15,440 Kevin: I was going to say, no, I was just going to say like the amount of information and the amount of DOM elements you would have to put into to make it look as it should is like ginormous potentially. 290 00:19:16,240 --> 00:19:38,120 Kevin: I think I've seen, I think there is a library that is pretty much just like a canvas thing and it just even renders text and like, but this, I think this library was more for like trading, actually trading stuff, like buying and selling and stuff. 291 00:19:38,580 --> 00:19:38,660 Ken: Right. 292 00:19:38,860 --> 00:19:39,020 Ken: I 293 00:19:39,020 --> 00:19:40,080 Kevin: can't remember the name of it. 294 00:19:40,380 --> 00:20:42,740 Ken: Where we landed after some experimentation was using TradingView, LightweightCharts, open source library. And TradingView is probably the most popular like charting framework that's used in the world of trading in general. And they publish like a bigger sort of more comprehensive version of their library that I think is proprietary license, but they have this open source lightweight charts. And that was enough for our current use cases. So it's just sort of a vanilla JS library that's imperative. And so I had to wrap that with like a declarative Svelte API, you know, using like effects. And so there's some challenges there, right? Like you can sometimes get into reactivity bugs when we were migrating from like certain of those components from Svelte 4 to Svelte 5, even though it's supposed to be like Svelte 5 should be backward compatible. I actually had some like reactivity bugs there with like when actions would re-execute based on the update call, stuff like that. So I had to, you know, get down into the weeds a little bit, maybe spend a day or two sort of debugging and figuring out the right solution. 295 00:20:43,580 --> 00:20:55,360 Ken: But in the end, you know, if you were to go to our site, pop a little search term up in the upper right corner, like, I don't know, ETH for Ethereum, you know, pick a trading pair and look at it. 296 00:20:55,420 --> 00:20:59,260 Ken: You'll see those charts rendering and you can sort of scroll back and forth or switch timeframes. 297 00:20:59,910 --> 00:21:02,980 Ken: And they're very performant and it's worked out really well. 298 00:21:03,050 --> 00:21:08,200 Ken: And it's pretty easy to plug vanilla JavaScript libraries into Svelte, which is one of the things I love about it. 299 00:21:08,440 --> 00:21:08,920 Brittney: For sure. 300 00:21:09,100 --> 00:21:09,820 Brittney: I love that too. 301 00:21:10,260 --> 00:21:13,080 Brittney: Like I'm migrating an old plugin app. 302 00:21:14,420 --> 00:21:20,140 Brittney: I think that was probably Svelte 3 originally, but they were able to get it to Svelte 4 just because it was minor changes. 303 00:21:20,390 --> 00:21:33,820 Brittney: And then now it's got like these old map plugins and like all these kinds of old JavaScript APIs that I can just easily pull over and not have to worry about while I'm migrating. 304 00:21:34,580 --> 00:21:34,860 Brittney: So nice. 305 00:21:35,900 --> 00:21:44,440 Kevin: Before we started recording, You mentioned a library called Svelte FSM, and you did like a lightning talk at Svelte Summit way back. 306 00:21:45,000 --> 00:21:45,160 Kevin: Well, 307 00:21:45,260 --> 00:21:45,860 Ken: way back. 308 00:21:46,240 --> 00:21:46,920 Kevin: A couple of years ago, 309 00:21:47,700 --> 00:21:47,920 I guess. 310 00:21:48,760 --> 00:21:49,140 Kevin: Several. 311 00:21:49,880 --> 00:21:50,820 Ken: Early on in my Svelte career. 312 00:21:51,440 --> 00:21:51,620 Kevin: Yeah. 313 00:21:51,700 --> 00:21:52,680 Kevin: So what is that? 314 00:21:52,840 --> 00:21:58,160 Kevin: And are you using it for this trading kind of thing as well? 315 00:21:58,680 --> 00:21:58,880 Ken: Yeah. 316 00:21:59,200 --> 00:21:59,340 Ken: Yeah. 317 00:21:59,400 --> 00:22:02,560 Ken: I use it pretty actively in our trading strategy application. 318 00:22:03,260 --> 00:22:21,680 Ken: I developed that, you know, as sort of part of that same origin story that I shared earlier when I, after I'd migrated that application over to Svelte, I was working on some things that just required a lot of complex, like state transition management and rules about, you know, when you could move something from one state to another. 319 00:22:22,600 --> 00:22:31,600 Ken: And it just felt like something where a finite state machine was like the right abstraction to use and the right, you know, sort of model to use to control that. 320 00:22:32,000 --> 00:22:35,300 Ken: And I think this is true potentially for a lot of different complex UI elements. 321 00:22:36,340 --> 00:22:40,340 Ken: And so I wanted to pull a state machine in as a way to control that. 322 00:22:40,430 --> 00:22:42,860 Ken: And I looked at what was available in the JavaScript world. 323 00:22:42,970 --> 00:22:45,880 Ken: And this didn't have to be in any way like Svelte native. 324 00:22:46,560 --> 00:22:48,960 Ken: It's really just a little sort of bundle of logic. 325 00:22:49,720 --> 00:22:53,900 Ken: But if you look at obviously the popular one in the JavaScript world is X state. 326 00:22:54,600 --> 00:22:59,040 Ken: And just like trying to pull in, again, this is maybe three, four years ago, maybe they've done some optimization work. 327 00:22:59,100 --> 00:23:04,660 Ken: But just trying to pull in the most minimal version of X state at the time was like 30 kilobytes. 328 00:23:05,240 --> 00:23:08,320 Ken: And the API itself is also pretty heavy, pretty complex. 329 00:23:08,390 --> 00:23:11,440 Ken: You need like four levels of nesting just to sort of have the minimal state machine. 330 00:23:11,900 --> 00:23:12,240 Speaker 2: And it 331 00:23:12,240 --> 00:23:18,520 Ken: just didn't feel right, especially for like, I just needed something that could control a given spelt component. 332 00:23:18,930 --> 00:23:24,620 Ken: I didn't need a big, deep, hierarchical state machine to control all of the state of my application or something. 333 00:23:24,800 --> 00:23:26,400 Ken: I'm not really a big fan of that pattern. 334 00:23:27,020 --> 00:23:38,300 Kevin: xstate feels kind of more like a thing for like i i always thought about it as you would use xstate to handle like the application 335 00:23:38,300 --> 00:23:41,780 Ken: because right like redux or going from different views 336 00:23:41,780 --> 00:23:44,180 Kevin: to and stuff like that and then kind of 337 00:23:44,180 --> 00:23:45,860 Ken: tie it all together and 338 00:23:45,860 --> 00:23:52,400 Kevin: it's just i went to like a workshop for X-State with Matt Pocock a while back. 339 00:23:53,840 --> 00:23:58,100 Kevin: And it's really cool, but it's just very complicated. 340 00:23:59,160 --> 00:24:09,820 Ken: Yeah, it's very much the kitchen sink approach to everything you could imagine that finite state charts, even sort of a more complex variant of finite state machines can do. 341 00:24:10,460 --> 00:24:11,740 Ken: So I wanted something simple. 342 00:24:11,760 --> 00:24:24,840 Ken: I wanted something that was sort of the bare bones, basic aspects of a finite state machine, you know, actions, transitions, you know, specified states and guards and things like that. 343 00:24:25,320 --> 00:24:29,180 Ken: And so I just tried to think of like, I looked to see if there was something else. 344 00:24:29,240 --> 00:24:30,540 Ken: I didn't find anything else I liked. 345 00:24:30,700 --> 00:24:32,280 Ken: And so I just started to work on something. 346 00:24:32,560 --> 00:24:36,820 Ken: And the more mature it got, the more I felt like this is something I could, you know, publish open source. 347 00:24:37,700 --> 00:24:46,980 Ken: And then the opportunity to publish the request for proposals for that particular Svelte Summit, which was just virtual only, were coming out. 348 00:24:47,200 --> 00:24:49,880 Ken: And I was like, okay, I'll throw this out in the mix. 349 00:24:50,600 --> 00:24:56,980 Ken: But yeah, I came up with something that was like one kilobyte minified and that had just like the simplest possible API. 350 00:24:57,220 --> 00:24:59,140 Ken: So for example, like calling an action. 351 00:24:59,820 --> 00:25:10,820 Ken: So once you instantiated a state machine, which was just a function FSM that you imported, calling an action on it was just calling dot whatever your action was. 352 00:25:11,040 --> 00:25:18,500 Ken: So if you have a light switch, which is sort of the simplest, hello world finite state machine or a switch that can toggle as your action. 353 00:25:19,090 --> 00:25:23,860 Ken: If your name of your state machine is called switch, you would just call switch.toggle, right? 354 00:25:24,240 --> 00:25:34,020 Ken: And so it's using proxies to take whatever it's receiving as a method call name and then looking to see whatever state your state machine is in. 355 00:25:34,210 --> 00:25:39,980 Ken: Is there a matching action, which could just be a transition? 356 00:25:40,320 --> 00:25:51,400 Ken: So it could just be a static property that has a new state it's transitioning to, or it could be a function that optionally returns a transition value for a new state. 357 00:25:51,940 --> 00:25:56,380 Ken: And so I just tried to come up with the simplest possible API, something that would feel very natural in Svelte. 358 00:25:56,780 --> 00:26:00,540 Ken: And it implemented the store contract. 359 00:26:01,060 --> 00:26:02,120 Ken: So it would act as a store. 360 00:26:02,120 --> 00:26:03,960 Ken: You could use the dollar sign syntax on it. 361 00:26:04,320 --> 00:26:14,320 Ken: So I'm still using that today, even in our Svelte 5 app, even though it might feel more natural to start to use more like a runes style, like reactive class 362 00:26:14,320 --> 00:26:15,200 Kevin: -based machine. 363 00:26:16,020 --> 00:26:17,160 Kevin: Are we going to release a new version? 364 00:26:19,040 --> 00:26:20,060 Ken: Yeah, I thought about it. 365 00:26:20,060 --> 00:26:21,040 Ken: I didn't have a ton of time. 366 00:26:21,820 --> 00:26:23,380 Ken: And someone else went and did that for me. 367 00:26:23,510 --> 00:26:38,900 Ken: So if you look at the runes collection of open source tools, which are great, I think it was Edan Gazet, who's part of GitHub Next, sort of took Svelte FSM and reworked it for Svelte 5. 368 00:26:39,920 --> 00:26:42,980 Ken: So there's a finite state machine sort of component that's part of Runes. 369 00:26:43,100 --> 00:26:48,500 Ken: I actually used that in my Svelte MDR talk and the application I built for that. 370 00:26:48,680 --> 00:26:50,040 Ken: So it works great. 371 00:26:50,240 --> 00:26:54,180 Ken: It's as similar as possible as probably if you could make the API. 372 00:26:54,780 --> 00:26:59,800 Ken: In some ways, I like the Svelte 4 API for that particular, for stores a little bit better in that scenario. 373 00:27:00,160 --> 00:27:03,060 Ken: But yeah, that's probably what I would use today if I was starting something new. 374 00:27:03,400 --> 00:27:09,440 Antony: I will say if you were to have used X-State, you wouldn't be the first person to use X-State with Svelte in some quite intense 375 00:27:09,440 --> 00:27:10,740 Speaker 2: applications. 376 00:27:11,800 --> 00:27:17,960 Antony: My friend who probably listens to this podcast, hello Mike, but he wrote his application purely in Svelte 377 00:27:17,960 --> 00:27:18,560 Speaker 2: and X-State. 378 00:27:18,980 --> 00:27:23,240 Antony: He didn't use anything relating to Svelte stores or page transmissions, anything. 379 00:27:23,440 --> 00:27:24,340 Antony: It's all he just used X-State 380 00:27:24,340 --> 00:27:25,560 Speaker 2: for every single action 381 00:27:25,560 --> 00:27:26,060 Antony: within the system. 382 00:27:26,460 --> 00:27:29,120 Antony: I mean, he had great success, but he likes to build quite 383 00:27:29,120 --> 00:27:29,800 Speaker 2: complex things. 384 00:27:30,020 --> 00:27:32,400 Antony: So he's got a brain the size of a small planet. 385 00:27:32,680 --> 00:27:36,560 Antony: So I think that, you know, he's the kind of person who keeps it on his head. 386 00:27:36,600 --> 00:27:41,240 Antony: I was just like, yeah, that would probably blow my mind and I would probably melt or something. 387 00:27:41,340 --> 00:27:41,960 Antony: I don't know what happened. 388 00:27:42,940 --> 00:27:46,480 Antony: But yeah, egg state can work, but I like the fact you build your own. 389 00:27:46,480 --> 00:27:47,460 Antony: I think that's really They can play 390 00:27:47,460 --> 00:27:55,940 Ken: really nice together. There's no reason you can't do it. I think as Kev was saying earlier, like that would maybe make more sense if you were using it to manage like overall application state. 391 00:27:56,700 --> 00:28:27,920 Ken: whereas I'm using state machines just to in a very like fine-grained way to manage the state of a single component right and that's where it felt heavy and a little like too much both in terms of build size but also even the API but and to me like a website itself is a state machine right like each page is a single state that you can be in only one at a time and you have transitions between pages and stealth kit is essentially my my finance state machine management sort of system for that overall website state machine, right? 392 00:28:28,420 --> 00:28:36,820 Ken: Your routes and your links and your go-tos, that really manages your states and transitions of the overall application. 393 00:28:37,440 --> 00:28:42,580 Ken: So I don't feel like I need a big, heavy sort of state management system for that. 394 00:28:42,580 --> 00:28:50,260 Ken: I have it in a way that makes a lot of sense to me, which is SvelteKit, and then I just use SvelteFSM or something like it for, like, fine-grained state management. 395 00:28:51,280 --> 00:28:51,520 Kevin: Nice. 396 00:28:51,540 --> 00:28:51,920 Kevin: Makes sense. 397 00:28:53,900 --> 00:29:04,980 Kevin: So I was going to say last time I saw you, I was in a storage room and inflating helium balloons, but that was not the last time I saw you. 398 00:29:04,980 --> 00:29:06,960 Kevin: But it would have been funny if it was the last time I saw you. 399 00:29:07,340 --> 00:29:08,100 Kevin: That would be great, yeah. 400 00:29:08,600 --> 00:29:16,260 Kevin: So let's talk about inflating balloons, or maybe not balloons, but let's talk about your Svelte Summit talk. 401 00:29:16,560 --> 00:29:17,520 Kevin: What was the title of it? 402 00:29:18,660 --> 00:29:20,260 Kevin: Yeah, it was Macro Data Refinement 403 00:29:20,260 --> 00:29:21,020 Ken: with Svelte. 404 00:29:22,160 --> 00:29:25,700 Ken: Yeah, some people may immediately understand what that means. 405 00:29:26,020 --> 00:29:32,580 Ken: And for the rest of the world, it's like, oh, you're using Svelte for some kind of data-oriented solutions? 406 00:29:33,620 --> 00:29:45,620 Ken: But Macro Data Refinement, MDR, is a function and a job within the show severance for some of the severed, any employees who work at Lumen. 407 00:29:46,380 --> 00:29:54,360 Ken: And there's a really distinctive, unique sort of user experience that plays a prominent role within that show. 408 00:29:54,660 --> 00:30:09,560 Ken: The MDR interface, microdata refinement interface, where you have these refiners sitting in front of a little like old school looking like set from the 70s kind of terminal and, you know, sort of identifying groups of numbers and categorizing them into these different buckets. 409 00:30:10,760 --> 00:30:25,640 Ken: And yeah, I gave my Svelte MDR talk in character as a software employee who works for the fictitious company Lumen and why we chose Svelte as our framework for building the Svelte MDR interface. 410 00:30:26,480 --> 00:30:27,780 Kevin: Absolutely amazing talk. 411 00:30:28,980 --> 00:30:35,560 Kevin: And you really went all in on like all the props on everything, which is kind of hilarious. 412 00:30:37,240 --> 00:30:41,600 Kevin: You printed Rich Harris' face on balloons? 413 00:30:43,720 --> 00:30:44,700 Speaker 2: Yeah, that was next 414 00:30:44,700 --> 00:30:45,040 Kevin: level. 415 00:30:45,320 --> 00:30:50,940 Kevin: If people have seen Rich Harris' profile picture on Blue Sky, that's the balloon, right? 416 00:30:51,420 --> 00:30:52,360 Kevin: If I remember correctly. 417 00:30:53,200 --> 00:30:53,840 Kevin: I also 3D 418 00:30:53,840 --> 00:30:54,660 Ken: printed, of 419 00:30:54,660 --> 00:30:55,380 Kevin: course, on the podcast. 420 00:30:56,340 --> 00:30:59,740 Ken: On the podcast, you can't see this, but I 3D printed the board speaker. 421 00:31:01,320 --> 00:31:04,140 Ken: If you have watched Severance, you know what the board is. 422 00:31:04,660 --> 00:31:08,280 Ken: But yeah, the balloons were probably the hardest prop to acquire. 423 00:31:08,780 --> 00:31:10,480 Ken: The speaker was some effort as well. 424 00:31:10,760 --> 00:31:17,600 Ken: I have name tags lying around here somewhere, like the Lumen style, you know, sort of badges and security badges. 425 00:31:17,900 --> 00:31:19,140 Ken: So I did go all in. 426 00:31:20,000 --> 00:31:20,300 Ken: Go ahead, Dan. 427 00:31:22,160 --> 00:31:25,800 Antony: Josh, did you actually design the model for the 3D print? 428 00:31:26,420 --> 00:31:26,580 Antony: I 429 00:31:26,580 --> 00:31:28,140 Ken: found it online, downloaded it. 430 00:31:28,640 --> 00:31:29,520 Antony: I literally printed it 431 00:31:29,520 --> 00:31:30,760 Ken: for free at my local library. 432 00:31:32,280 --> 00:31:32,620 Antony: Nice. 433 00:31:33,200 --> 00:31:39,900 Antony: I was going to say, I think I came home from your talk and I was trying to look for the model on Fangs or whatever site I was using. 434 00:31:40,020 --> 00:31:40,140 Antony: Because I 435 00:31:40,140 --> 00:31:40,740 Ken: wanted to have that. 436 00:31:41,180 --> 00:31:43,580 Ken: I can try to find it and send it to you if you want it. 437 00:31:43,980 --> 00:31:44,480 Antony: You should send it. 438 00:31:44,660 --> 00:31:45,280 Antony: Yeah, send it to me. 439 00:31:46,520 --> 00:31:56,460 Ken: But yeah, once I had the idea for the talk, it was getting to the point where it was like, I don't know, a day or two before the close for the request for proposals for talks. 440 00:31:57,140 --> 00:32:00,260 Ken: And I knew I wanted to propose one because, hey, free ticket to 441 00:32:00,260 --> 00:32:01,900 Speaker 2: Barcelona and getting to hang out with 442 00:32:01,900 --> 00:32:02,120 Ken: everybody. 443 00:32:02,440 --> 00:32:06,620 Ken: And I was actually at Svelte Summit in Stockholm as well. 444 00:32:06,800 --> 00:32:10,920 Ken: And just the chance to get the band back together, be back together with everyone. 445 00:32:11,620 --> 00:32:12,820 Ken: I was super excited about it. 446 00:32:12,940 --> 00:32:16,460 Ken: And there's a good chance that my employer would have paid for me to go. 447 00:32:16,480 --> 00:32:17,920 Ken: They did back when I went to Stockholm. 448 00:32:18,580 --> 00:32:22,580 Ken: But if I can go, it's a different experience, right, to have a chance to get a talk. 449 00:32:23,080 --> 00:32:24,580 Ken: Yeah, just brainstorming different ideas. 450 00:32:24,860 --> 00:32:29,520 Ken: And it was right around the time that season two of Severance, like the first couple of episodes had dropped. 451 00:32:30,140 --> 00:32:31,700 Ken: And I was already like super into it again. 452 00:32:31,980 --> 00:32:32,400 Ken: you know season 453 00:32:32,400 --> 00:32:34,040 Speaker 2: one yeah 454 00:32:34,040 --> 00:33:04,880 Ken: so i don't know at some point the idea popped into my head and i'd seen somebody else had created a react version of the mdr interface i was like i could do this but so much better and felt um and from a performance and just you know like even implementation details perspective so i got inspired and submitted the talk thought maybe there's a 10 chance it gets accepted but then it did and so then my my brain started kind of going in terms of all the different ways you could lean into being fully in character with it so 455 00:33:05,410 --> 00:33:07,520 Kevin: i mean it was great like 456 00:33:07,520 --> 00:33:09,680 Brittney: it was a really fun talk and 457 00:33:09,680 --> 00:33:24,100 Kevin: for for those that haven't seen it like even just like the you have you have like the the pixel art that they kind of used in one of the episodes like you had that with rich hairs in it instead of of the other 458 00:33:24,100 --> 00:33:24,979 Brittney: characters right 459 00:33:25,000 --> 00:33:27,100 Kevin: it's super fun and 460 00:33:27,100 --> 00:33:38,920 Brittney: there's a lot of like easter eggs and like just fun little things especially if you had seen the show but even if you hadn't it was still entertaining and you even convinced me to become an innie at the end that's 461 00:33:38,920 --> 00:33:43,940 Ken: right well you helped with my britney you helped with my intro right and and uh 462 00:33:43,940 --> 00:33:45,420 Brittney: yeah i had 463 00:33:45,420 --> 00:33:59,520 Ken: some like intro music that came from one of the episodes of the show there a who song and then kev you mentioned this earlier but uh man thank you so much for your help. Like I needed somebody to help me inflate balloons with Rich Harris's face on them and, you know, 464 00:33:59,580 --> 00:34:01,160 Speaker 2: tie little ribbons on them 465 00:34:01,160 --> 00:34:21,820 Ken: and essentially make it a bouquet. And yeah, the only, I think the only people that were in on this, like the balloons part and sort of some of the, like the details of, of how all in I had gone were basically Brittany and Kev, the two of you guys. So thank you for, you know, both helping out, but also keeping it under wraps. And it was a lot of fun 466 00:34:21,820 --> 00:34:29,820 Brittney: yeah we had to convince rich to come out there even though he was trying to finish writing his talk as per usual his 467 00:34:29,820 --> 00:34:31,840 Ken: talk was his talk was right after mine 468 00:34:31,840 --> 00:34:33,100 Brittney: and so yeah for 469 00:34:33,100 --> 00:35:12,740 Ken: him to have attended you know that doesn't always happen right um that the pictures that you referenced britney i spent a lot of time wrangling with mid-journey um and like using a lot of like fine-grained like prompting details with mid journey, like giving it, um, style references and character references, um, and trying to come up with those images. And I think at least one of those I finished at like midnight the night before my talk was like, it'd be really fun if I had this picture of Rich Harris eating a pizza roll, but like actually like Kira Egan eating a pizza roll. Right. So, um, yeah, it was fun. 470 00:35:16,340 --> 00:35:16,640 Ken: Yeah. 471 00:35:16,840 --> 00:35:24,400 Kevin: So in terms of the actual application that you had to write, like the macro data refinement, 472 00:35:24,920 --> 00:35:25,680 Speaker 2: was 473 00:35:25,680 --> 00:35:26,760 Kevin: it tough to write? 474 00:35:27,140 --> 00:35:37,800 Kevin: How did you? So let's try to explain what it looks like to the listener. It's like a bunch of numbers and you're supposed to like. 475 00:35:38,780 --> 00:35:39,100 Ken: The 476 00:35:39,100 --> 00:35:39,900 Kevin: numbers can be kind 477 00:35:39,900 --> 00:35:41,420 Ken: of scary, right? 478 00:35:41,520 --> 00:35:42,100 Kevin: So the numbers are 479 00:35:42,100 --> 00:35:49,220 Ken: moving. The numbers are like moving around. They're in this, they're in this just like Cartesian coordinate grid on the screen, right? 480 00:35:49,820 --> 00:36:10,480 Ken: And, but they're moving around in different, like each number has got its own little bit of different motion to it. And you're supposed to, the refiners are supposed to be looking for like a group of numbers that feels a little scary, right? And then they sort of put a little boundary or fence around those numbers and then they click on a bin and there's like five bins on the bottom And the numbers sort of animate into one of those bins. 481 00:36:10,590 --> 00:36:14,680 Ken: And eventually they finish refining a particular file. 482 00:36:15,110 --> 00:36:18,020 Ken: They don't have any idea what it's for, what it means. 483 00:36:18,940 --> 00:36:20,420 Ken: They speculate a little bit, right? 484 00:36:21,860 --> 00:36:24,520 Ken: So it was actually pretty complex to build. 485 00:36:24,680 --> 00:36:37,840 Ken: I mean, I did have some reference implementations to look at, but I did roll like every bit of code for it from scratch because I knew I would be using some like different approaches than what I saw in like the React version or some of the other versions that I'd seen out there. 486 00:36:38,540 --> 00:36:42,820 Ken: But I just kind of tried to build it organically and let the design emerge as I did it. 487 00:36:43,580 --> 00:36:49,700 Ken: But some of the specific animations were a little bit tricky to find the right solution for. 488 00:36:51,320 --> 00:36:53,960 Ken: And some of the state management holistically. 489 00:36:54,120 --> 00:36:56,260 Ken: You don't want to... 490 00:36:56,260 --> 00:37:06,280 Ken: There's different interactions you can do, like using your cursor to select a group of numbers, and then you hit a button, And those numbers start to like move into a bin. 491 00:37:06,560 --> 00:37:12,200 Ken: You don't want to then simultaneously be able to select a new group of numbers while the interaction from the first one is completing. 492 00:37:12,420 --> 00:37:19,400 Ken: Right. So you want to really like prevent, you know, weird race conditions and stuff like that. 493 00:37:19,460 --> 00:37:29,960 Ken: So that's where using a state machine library actually helped a lot is that like the overall interactions you can do depend on what current state your application is in. 494 00:37:30,540 --> 00:37:35,900 Ken: And so that controls sort of the conditions around you can interact in different ways. 495 00:37:37,940 --> 00:37:41,940 Kevin: Yeah, I mean, I was blown away by the whole talk. 496 00:37:42,510 --> 00:37:46,920 Kevin: If you haven't seen it on YouTube, you should definitely go and watch it. 497 00:37:47,400 --> 00:37:53,420 Kevin: Like, I don't think anyone didn't enjoy it. 498 00:37:54,500 --> 00:37:58,120 Kevin: At least felt like everybody loved 499 00:37:58,120 --> 00:37:58,260 Ken: it. 500 00:37:59,100 --> 00:38:03,440 Ken: It seemed like people that knew severance maybe probably enjoyed it the most, but there were 501 00:38:03,440 --> 00:38:03,940 Speaker 2: plenty of people 502 00:38:03,940 --> 00:38:08,900 Ken: that didn't know severance who later told me, I've now watched severance because of your talk. 503 00:38:09,440 --> 00:38:11,360 Ken: So that felt gratifying as well. 504 00:38:11,360 --> 00:38:13,280 Ken: I feel like Apple owes me some kickbacks 505 00:38:13,280 --> 00:38:15,700 Speaker 2: as like a marketer for Apple. 506 00:38:16,880 --> 00:38:25,880 Ken: I will say I read a blog post at one point that said like, hey, a really good like conference talk, tech conference talk, needs to like inform, educate, and entertain. 507 00:38:26,820 --> 00:38:28,500 Ken: And so I was thinking about that. 508 00:38:28,660 --> 00:38:35,520 Ken: And as somebody who's spent a lot of time in my career in user experience, I was thinking about every member of the audience is an end user of this talk. 509 00:38:36,260 --> 00:38:44,640 Ken: And so how am I designing an experience for them that's going to sort of satisfy what they're going to want out of a talk? 510 00:38:44,900 --> 00:38:48,340 Ken: And so I just try to put myself into the posture of the position of the end user. 511 00:38:49,080 --> 00:38:51,260 Ken: That was my guiding principle as I worked on it. 512 00:38:52,820 --> 00:38:58,720 Antony: so just the application that you wrote is it online for our viewers 513 00:38:58,900 --> 00:38:59,140 Ken: it is 514 00:39:00,980 --> 00:39:02,120 Antony: let's add a link to that 515 00:39:02,620 --> 00:39:24,060 Ken: yeah you can put that in the notes I can say it out loud now if you want to it's just mdr.kentropic.com kentropic is like my blue sky handle and my handle in some other places the code is up on github just under kencoons is my github username So I have it as one of my pinned repos there. 516 00:39:24,500 --> 00:39:27,140 Ken: So it should be pretty easy to find and you can throw that in the notes. 517 00:39:28,500 --> 00:39:28,960 Kevin: Will do. 518 00:39:30,020 --> 00:39:30,280 Kevin: Great. 519 00:39:30,840 --> 00:39:31,160 Kevin: Excellent. 520 00:39:32,339 --> 00:39:38,040 Kevin: Anything else about the talk that you think we should talk about from like a Svelte perspective? 521 00:39:38,670 --> 00:39:53,200 Kevin: That maybe something that we, as the viewers of the talk or the audience didn't notice, but that you like spent a lot of time on that was hard to do or? 522 00:39:54,159 --> 00:39:54,880 Kevin: The minutiae. 523 00:39:55,060 --> 00:39:55,180 Kevin: Yeah. 524 00:39:55,760 --> 00:39:56,120 Kevin: Minutiae. 525 00:39:56,140 --> 00:39:56,720 Kevin: How do you say that word? 526 00:39:56,920 --> 00:39:58,080 Kevin: Like you did, I 527 00:39:58,080 --> 00:39:58,260 Ken: guess. 528 00:39:58,430 --> 00:39:58,940 Ken: Yeah, I mean. 529 00:39:59,660 --> 00:40:00,540 Kevin: And I'm not sure. 530 00:40:00,780 --> 00:40:10,600 Ken: You know, Brittany mentioned some of the pictures and some of the sort of style of artwork and sort of working with Majorney to try to come up with that stuff was definitely like took more time than you might guess. 531 00:40:12,340 --> 00:40:13,140 Ken: You know, getting the code. 532 00:40:13,340 --> 00:40:25,780 Ken: I wanted the code to be something that would be instructive and even like not just instructive at a code level, but sort of the why of animation and the importance of animation and transitions within any front-end app. 533 00:40:25,980 --> 00:40:44,480 Ken: So, you know, when I was thinking about the educate aspect, I actually probably spent just as much time talking about like the user experience of thinking about the fourth dimension, the time dimension in your applications where we often think of like mostly two dimensions, sometimes a little bit of a third dimension, but we often forget about that time dimension of transitions and animation. 534 00:40:44,900 --> 00:40:48,580 Ken: So I wanted to think a lot about that as part of the educate aspect. 535 00:40:50,080 --> 00:40:57,720 Ken: And then I would say something that took a lot of sort of call it mental and emotional energy is just getting fully into character. 536 00:40:58,080 --> 00:41:01,080 Ken: Right. Like, I think I did a pretty good job. 537 00:41:01,100 --> 00:41:05,220 Ken: You guys can be the judge of like truly staying fully in character for the whole talk. 538 00:41:05,980 --> 00:41:06,320 Ken: And so 539 00:41:06,320 --> 00:41:08,600 Brittney: you're shaking our heads just for clarity. 540 00:41:09,660 --> 00:41:10,620 Brittney: Kevin and 541 00:41:10,620 --> 00:41:11,420 Speaker 2: Anthony are 542 00:41:11,420 --> 00:41:12,700 Brittney: all shaking our heads yes, 543 00:41:12,940 --> 00:41:13,860 Ken: but he 544 00:41:13,860 --> 00:41:15,400 Brittney: did do a very good job. 545 00:41:16,000 --> 00:41:27,480 Ken: So that probably over the course of months as I worked on the talk and just like background processing, you know, I'm just sort of thinking about what would somebody who's an actual Lumen employee, like how would they talk? 546 00:41:27,550 --> 00:41:28,400 Ken: What would they say? 547 00:41:28,960 --> 00:41:30,080 Ken: How would they represent Lumen? 548 00:41:30,290 --> 00:41:31,960 Ken: How would they represent their work? 549 00:41:32,480 --> 00:41:47,280 Ken: And so, you know, they're sort of always in the background and always like jotting down notes of like you know different ideas of how to how to be fully in character i think in some ways my platonic ideal of somebody who like goes all in on a talk is is bert who's 550 00:41:47,280 --> 00:41:48,140 Speaker 2: given you 551 00:41:48,140 --> 00:41:57,700 Ken: know talks at several and so admiring sort of bert's ability to sort of just go all in i sort of took that as inspiration for going all in on my talk so 552 00:41:57,700 --> 00:42:05,360 Kevin: yeah yeah bert bert's talks are are crazy in a different way very good like yeah they 553 00:42:05,360 --> 00:42:08,720 Antony: almost feel they almost feel scrappy but they're not scrappy they're just kind of they're very well 554 00:42:08,720 --> 00:42:10,040 Kevin: planned just the 555 00:42:10,040 --> 00:42:13,820 Antony: whole the whole aesthetic of his talks right which is quite insane no you 556 00:42:13,820 --> 00:42:19,620 Kevin: i think you did play the character really nicely like it it was very very well done for sure 557 00:42:19,620 --> 00:42:21,560 Speaker 2: all right um 558 00:42:21,560 --> 00:42:31,920 Kevin: any any other questions for for ken before we get on to the the spicy section of the podcast as i sometimes call it i see them yeah all 559 00:42:31,920 --> 00:43:04,620 Ken: right one thing i'll got to mention earlier when we were chatting before but yeah recently so somebody that i met in barcelona um was a guy named mike rourke who was also giving a talk called svelte in orbit awesome talk you should check that out as well and uh so we're chatting on the first day of the conference i saw him sitting across the table at like the speaker's dinner but didn't get a chance to meet him we're chatting and he's like where are you from i'm like oh yeah chicago area oh where you know and i describe where i'm from and he lives like a couple kilometers away from me wow Right. So, you know, we never, we meet, we meet in Barcelona. Right. 560 00:43:04,860 --> 00:43:05,460 Ken: And so I 561 00:43:05,460 --> 00:43:05,800 Speaker 2: mentioned 562 00:43:05,800 --> 00:43:09,900 Ken: at the top, at the conference, I've been thinking about starting up a local chapter of Salt Society. 563 00:43:10,720 --> 00:43:11,600 Ken: He's like, we should do it. 564 00:43:11,650 --> 00:43:20,740 Ken: Took us a couple of months after we were, you know, back in the area here, but we have gotten that going. So anybody who's anywhere close to Chicago, Brittany, you're not that far away. You should come 565 00:43:20,740 --> 00:43:21,360 Brittney: visit us sometime. 566 00:43:21,360 --> 00:43:23,480 Brittney: I was going to say I should drive like the three 567 00:43:23,480 --> 00:43:23,900 Ken: hours 568 00:43:23,900 --> 00:43:24,760 Kevin: there for one 569 00:43:24,760 --> 00:43:25,180 Brittney: of them. 570 00:43:25,400 --> 00:43:27,340 Brittney: Like it's not going to be a monthly thing for me. 571 00:43:27,390 --> 00:43:27,960 Brittney: Oh, it's not. 572 00:43:28,120 --> 00:43:30,120 Kevin: Brittany, you're not too far away. 573 00:43:30,420 --> 00:43:30,920 Kevin: Three hours? 574 00:43:31,280 --> 00:43:31,400 Kevin: Three 575 00:43:31,400 --> 00:43:31,640 Brittney: hours. 576 00:43:31,860 --> 00:43:32,540 Brittney: Three hours. 577 00:43:32,720 --> 00:43:33,660 Brittney: It's all relative. 578 00:43:34,140 --> 00:43:34,780 Brittney: Can't you get a train? 579 00:43:34,820 --> 00:43:34,940 Brittney: It's 580 00:43:34,940 --> 00:43:35,400 Ken: all relative. 581 00:43:35,820 --> 00:43:35,960 Kevin: Just 582 00:43:35,960 --> 00:43:36,400 Brittney: get a train. 583 00:43:36,600 --> 00:43:37,240 Speaker 2: Still three hours. 584 00:43:37,480 --> 00:43:37,700 Speaker 2: Three hours. 585 00:43:38,000 --> 00:43:38,860 Ken: The train takes 586 00:43:38,860 --> 00:43:40,380 Brittney: like seven hours to 587 00:43:40,380 --> 00:43:40,620 get there. 588 00:43:42,680 --> 00:43:42,860 Brittney: Our 589 00:43:42,860 --> 00:43:43,980 Kevin: trains are horrible. 590 00:43:44,300 --> 00:43:45,200 Ken: Our trains are pretty slow. 591 00:43:45,820 --> 00:43:46,160 Ken: I know. 592 00:43:46,380 --> 00:43:46,460 Ken: Well, 593 00:43:46,840 --> 00:43:53,500 Kevin: yeah, you mentioned Svelte Chicago here, and I think you've already had the first one, right? 594 00:43:54,260 --> 00:43:57,580 Ken: We've had two, and our next one's coming up in like 10 days or so, yeah. 595 00:43:58,000 --> 00:43:58,100 Kevin: Yeah. 596 00:43:58,760 --> 00:43:59,160 Kevin: Exciting. 597 00:43:59,480 --> 00:44:01,280 Kevin: Are you getting a lot of good people showing 598 00:44:01,280 --> 00:44:01,460 Ken: up? 599 00:44:01,530 --> 00:44:04,060 Ken: We're having about like 12 to 15 so far, 600 00:44:04,690 --> 00:44:05,440 Kevin: which for a brand 601 00:44:05,440 --> 00:44:06,480 Speaker 2: new stalled 602 00:44:06,480 --> 00:44:09,840 Ken: meetup, you know, sort of a little more niche audience is pretty good. 603 00:44:10,460 --> 00:44:12,680 Ken: And it's a great group, and we've had a lot of fun. 604 00:44:12,800 --> 00:44:19,160 Ken: And we're trying to keep it a little bit organic, a little bit like not totally overstructured, you know. 605 00:44:19,900 --> 00:44:20,580 Kevin: Oh, that's good. 606 00:44:20,640 --> 00:44:20,920 Kevin: I'm messaging 607 00:44:20,920 --> 00:44:23,580 Brittney: the details, and I will try to make one. 608 00:44:24,020 --> 00:44:25,020 Kevin: When is the next one? 609 00:44:25,700 --> 00:44:28,460 Kevin: Tuesday, October 28th is what it says here. 610 00:44:28,760 --> 00:44:29,080 Kevin: Yeah, okay. 611 00:44:29,840 --> 00:44:35,040 Kevin: So then probably people will have heard about it on the podcast and they 612 00:44:35,040 --> 00:44:35,680 Ken: just go 613 00:44:35,680 --> 00:44:36,100 Kevin: show up. 614 00:44:36,740 --> 00:44:37,000 Kevin: Hopefully. 615 00:44:38,400 --> 00:44:39,280 Kevin: All right, cool. 616 00:44:39,860 --> 00:44:40,600 Kevin: Unpopular opinions? 617 00:44:41,560 --> 00:44:42,080 Kevin: Who has one? 618 00:44:42,420 --> 00:44:43,020 Kevin: I have one. 619 00:44:43,020 --> 00:44:44,160 Kevin: You always have one, Anthony. 620 00:44:45,100 --> 00:44:45,380 Kevin: Tell us. 621 00:44:48,240 --> 00:44:54,980 Antony: Okay, so my unpopular opinion this time is, it's a techie one, but testing, right? 622 00:44:55,260 --> 00:45:01,480 Antony: So optimize tests for isolation first, and then speed second, because people make the mistake. 623 00:45:01,490 --> 00:45:02,720 Antony: I mean, tests should run quickly, right? 624 00:45:02,880 --> 00:45:04,540 Antony: That's what I said, become a burden. 625 00:45:06,120 --> 00:45:14,660 Antony: But we had a test that were like four minutes, and we were trying to figure out how to speed them up, because four minutes is a long time when you're trying to just check in and stuff. 626 00:45:16,039 --> 00:45:22,420 Antony: And one of the suggestions, or some of the suggestions that came up, were around, like, why am I using before each for every single test? 627 00:45:23,020 --> 00:45:28,580 Antony: Every single, I only allow one expectation per test, So you can't expect multiple things. 628 00:45:29,210 --> 00:45:35,360 Antony: And every test has a before, like every group of tests has a before each that runs every single test. 629 00:45:35,470 --> 00:45:40,840 Antony: And it inserts it from the database, clears out the database, does all sorts of stuff, create indexes if you need to, et cetera. 630 00:45:41,540 --> 00:45:47,080 Antony: And one of the suggestions was that we used before because then we set the data once and we run all the iterations, run all the tests, sorry. 631 00:45:48,200 --> 00:45:52,580 Antony: That to me introduces risk because it's not impossible to mutate data. 632 00:45:52,770 --> 00:46:33,760 Antony: I mean, maybe it's not controversial, but it is depending on how you approach testing is if every single expectation is running complete isolation with no ability for any other party outside thing as a factor to influence the data you put in and the data you were expecting then you will have confidence that your tests actually work otherwise you get pollution left right and center and your tests don't run and i think and there was no penalty by the way this wasn't but there is absolutely, in my mind, it's a better approach to have slightly slower tests and take that penalty to get that isolation. 633 00:46:34,340 --> 00:46:35,080 Kevin: Yeah, I 634 00:46:35,080 --> 00:46:35,560 Antony: think I agree. 635 00:46:37,160 --> 00:46:44,880 Kevin: This makes me think of this idea I read somewhere about using SQLite for testing. 636 00:46:45,440 --> 00:46:51,260 Kevin: Like if you're, so let's say you're using, I don't know what you're using, Superbase or Postgres, whatever, right? 637 00:46:52,620 --> 00:46:55,740 Kevin: Like, if you can somehow manage to write your... 638 00:46:56,620 --> 00:46:58,920 Kevin: I guess if you're using an ORM, you could kind of do this. 639 00:47:00,280 --> 00:47:05,640 Kevin: Like, if you could use SQLite locally when testing, that would kind of mitigate some stuff. 640 00:47:05,740 --> 00:47:06,000 Kevin: Yeah, absolutely. 641 00:47:06,050 --> 00:47:10,960 Kevin: But then, like, there's differences between Postgres and SQLite, so you'd have to... 642 00:47:11,419 --> 00:47:14,260 Antony: There are, and that's always a risk, right? 643 00:47:14,350 --> 00:47:18,700 Antony: But if you talk about unit tests there, and maybe, you know, when you run it on your CI, you can use the real thing, right? 644 00:47:18,840 --> 00:47:21,540 Antony: So you can just iron out those very, very small edge cases. 645 00:47:22,070 --> 00:47:30,400 Antony: We use Mongo as our main database, and there is an in-memory version of Mongo, which is very quick, but it is enterprise only. 646 00:47:30,560 --> 00:47:32,440 Antony: I'm not going to pay a huge fee to 647 00:47:32,440 --> 00:47:32,780 Speaker 2: use Mongo 648 00:47:32,780 --> 00:47:33,540 Antony: to get that. 649 00:47:34,510 --> 00:47:34,900 Speaker 2: And I 650 00:47:34,900 --> 00:47:37,500 Antony: almost don't like Mongo for this reason. 651 00:47:39,220 --> 00:47:45,620 Antony: Their local testing story is kind of always an afterthought compared to their main performance story. 652 00:47:46,000 --> 00:47:48,060 Antony: Search indexes are an absolute nightmare to use locally. 653 00:47:48,340 --> 00:48:03,520 Antony: so much checking that indexes are working, run up to sync and all that kind of stuff because ultimately it's been done brilliant, Atlas Search works really well, but it's an afterthought and you can't really test it locally with any sort of reliability. 654 00:48:05,040 --> 00:48:06,860 Antony: And it's the same with this enterprise. 655 00:48:07,200 --> 00:48:09,680 Antony: Why is Mongo Memory Enterprise? 656 00:48:09,920 --> 00:48:10,740 Antony: That makes no sense. 657 00:48:11,020 --> 00:48:13,460 Speaker 2: What enterprise would use it in memory? 658 00:48:14,960 --> 00:48:16,480 Antony: Well, exactly, right? 659 00:48:16,700 --> 00:48:21,700 Antony: So the thing for me is, you know, I do like mostly, I like Mongo. 660 00:48:22,860 --> 00:48:24,580 Antony: Their local testing store needs some work. 661 00:48:25,580 --> 00:48:32,920 Antony: But I would say that the good thing about it is it's so quick, actually, that, you know, we have nearly 9,000 tests, most of which write for database. 662 00:48:33,580 --> 00:48:39,080 Antony: And I'll tell you what, they run, in now, we've gotten down to, on an M4, half a minute 663 00:48:39,080 --> 00:48:39,560 Speaker 2: to 664 00:48:39,560 --> 00:48:40,620 Antony: run 9,000 tests. 665 00:48:40,660 --> 00:48:41,020 Speaker 2: Oh, wow. 666 00:48:41,380 --> 00:48:44,200 Antony: And these are all clearing databases, inserting database data. 667 00:48:45,020 --> 00:48:45,740 Antony: This is not a problem. 668 00:48:46,020 --> 00:48:49,540 Antony: Like, it's not an issue, but I think it'd be even quicker with Mongo memory. 669 00:48:50,120 --> 00:48:59,460 Antony: There's also, what's it called, NEDB, which is the local open source equivalent to Mongo, but it doesn't implement any of the new API stuff. 670 00:48:59,620 --> 00:49:00,840 Antony: It's kind of an abandoned project. 671 00:49:01,160 --> 00:49:04,480 Antony: So we used to use that, but our usage is too complicated now. 672 00:49:06,160 --> 00:49:13,480 Ken: Yeah, when I worked in Rails years ago, we would run all the unit tests against SQLite. 673 00:49:14,080 --> 00:49:17,240 Ken: And of course, with the active record form layer, that was pretty straightforward. 674 00:49:17,420 --> 00:49:18,800 Ken: I think that was even like the default. 675 00:49:19,280 --> 00:49:19,580 Ken: Yeah, yeah. 676 00:49:20,940 --> 00:49:21,040 Kevin: Nice. 677 00:49:21,440 --> 00:49:27,840 Kevin: This reminds me, I should probably write a bunch of tests for the new Spout Society website. 678 00:49:28,800 --> 00:49:29,160 Speaker 2: Anyway. 679 00:49:30,380 --> 00:49:30,840 Kevin: Good reminder. 680 00:49:32,420 --> 00:49:32,540 Kevin: Yeah. 681 00:49:33,440 --> 00:49:33,740 Kevin: All right. 682 00:49:34,320 --> 00:49:38,100 Kevin: Does anyone else have an unpopular opinion that they want to share? 683 00:49:38,800 --> 00:49:39,440 Ken: I've got one. 684 00:49:39,840 --> 00:49:50,400 Ken: I'm going to take some inspiration from Anthony from a couple of weeks ago, Spelt Radio, where he, you know, went just a little, you know, into sort of politics and into the deep end. 685 00:49:50,600 --> 00:49:59,900 Ken: So I'm going to say unpopular opinion, at least in the U.S. and some other Western countries these days, is that authoritarianism is bad, would 686 00:49:59,900 --> 00:50:00,920 Speaker 2: be my unpopular opinion. 687 00:50:02,080 --> 00:50:05,180 Ken: Now, I know, like, a lot of us might say, well, we agree with that, right? 688 00:50:05,920 --> 00:50:10,060 Ken: Obviously, not all voters seem to agree with that here and in some places. 689 00:50:10,250 --> 00:50:22,260 Ken: But I think sometimes we have to look not just at the authoritarianism we see in others, but actually look at ourselves or look at the communities that we're a part of. 690 00:50:22,480 --> 00:50:28,140 Ken: Because even if you don't have a lot of power, I think authoritarianism is a little bit about how you wield the power you have. 691 00:50:29,260 --> 00:50:37,680 Ken: Are you using it in a coercive or domineering way or using your power to try to, you know, bring about good for those who have less power? 692 00:50:38,360 --> 00:50:51,920 Ken: So and I think we will ultimately really only defeat authoritarianism, not with its own, you know, like not by turning authoritarianism on itself or else, you know, that sort of that forms us into a certain kind of person. 693 00:50:52,340 --> 00:50:56,540 Ken: If we wield power that way, even if we think we're doing it for the right reasons. 694 00:50:57,500 --> 00:51:00,360 Ken: So that's my unpopular opinion. 695 00:51:00,880 --> 00:51:12,780 Antony: It's interesting because, again, you've caused a thought in my head, and that is that the biggest complaint now from people in the UK is socialism is authoritarianism. 696 00:51:12,980 --> 00:51:17,200 Antony: Socialism is somehow being controlled by people who are a government. 697 00:51:17,910 --> 00:51:26,840 Antony: And actually, the people who are propelling that opinion are people who have the opposite opinions, but want almost dictatorship. 698 00:51:26,880 --> 00:51:37,220 Antony: and therefore that becomes like people who want authoritarianism telling you that authoritarianism is bad i think that's how it works out i'm not completely sure yeah 699 00:51:37,800 --> 00:51:55,720 Kevin: yeah i haven't figured out but it's it's interesting yeah i was gonna mention that even even just you you you said like you have to look at yourself in or like how do you wield power and that comes up a whole lot on the Svelte Discord. 700 00:51:55,920 --> 00:51:56,980 Kevin: Like, how do you moderate 701 00:51:56,980 --> 00:51:58,280 Speaker 2: something? 702 00:51:58,780 --> 00:52:00,560 Kevin: Because that's, I mean, it's not really 703 00:52:00,560 --> 00:52:03,280 Speaker 2: one person doing it, right? 704 00:52:03,580 --> 00:52:03,780 Speaker 2: Yeah, 705 00:52:04,040 --> 00:52:04,520 Kevin: right, right. 706 00:52:04,960 --> 00:52:06,740 Kevin: It just made me think of that. 707 00:52:06,800 --> 00:52:07,420 Kevin: And it's tough. 708 00:52:07,840 --> 00:52:08,320 Kevin: Like, it's tough. 709 00:52:08,600 --> 00:52:09,820 Kevin: I can't imagine how hard... 710 00:52:09,820 --> 00:52:10,040 Kevin: But it has to be 711 00:52:10,040 --> 00:52:11,400 Brittney: done for the greater 712 00:52:11,400 --> 00:52:11,760 Kevin: good 713 00:52:11,760 --> 00:52:11,980 Speaker 2: of 714 00:52:11,980 --> 00:52:12,600 Brittney: the community. 715 00:52:12,940 --> 00:52:13,860 Kevin: So it is a very 716 00:52:13,860 --> 00:52:15,820 Brittney: similar parallel to, like, 717 00:52:16,840 --> 00:52:17,140 Speaker 2: there 718 00:52:17,140 --> 00:52:20,620 Brittney: are good things about big government. 719 00:52:21,580 --> 00:52:31,200 Kevin: there are bad things about the government it depends on what you're dealing with yeah I'm just very happy I'm not a politician Kev is big government 720 00:52:31,460 --> 00:52:41,940 Antony: Kev is wealth government but the thing is here right is that also you know on the wealth discord the biggest problem is not necessarily that we have rules and we have to enforce them because that's kind of a given like 721 00:52:41,940 --> 00:52:42,340 Speaker 2: you have to 722 00:52:42,340 --> 00:52:48,220 Antony: do that but I think the problem with it is is that everybody reacts differently to 723 00:52:48,220 --> 00:52:49,660 Speaker 2: authorities and so 724 00:52:49,660 --> 00:52:59,920 Antony: you have to have an approach that works well at least for the majority of people because you don't want to get into like a fracas you know you want to say to somebody this is these are the rules how it works we 725 00:52:59,920 --> 00:53:00,380 Speaker 2: have rules 726 00:53:00,380 --> 00:53:14,759 Antony: you're here on the basis of the rules and and you know obey or leave and to some people that will just get the right wrong way yeah they will they will get riled up and they'll make the thing worse before you can solve it and the solution is blocking them 727 00:53:14,780 --> 00:53:15,660 Ken: And you're always going 728 00:53:15,660 --> 00:53:16,020 Antony: to have that. 729 00:53:16,700 --> 00:53:18,600 Ken: Rules create a set of boundary conditions, right? 730 00:53:18,740 --> 00:53:19,860 Ken: They sort of create a baseline. 731 00:53:20,260 --> 00:53:20,440 Ken: Yes. 732 00:53:20,620 --> 00:53:25,000 Ken: But you're not going to get good behavior just by saying, well, I followed the rules, right? 733 00:53:25,200 --> 00:53:29,980 Ken: There's a lot more that goes into actually like constructive, positive types of engagement. 734 00:53:31,260 --> 00:53:34,220 Ken: But at least they give you like, right, here's a baseline set of boundary conditions. 735 00:53:34,440 --> 00:53:39,080 Ken: But I think you're going to get better behavior often than through like example, right? 736 00:53:39,240 --> 00:53:49,140 Ken: through demonstrating good behavior and then through not being overly, like, domineering in the way that you would moderate in that kind of a context, right? 737 00:53:49,360 --> 00:53:52,360 Ken: Trying to de-escalate if there's a situation, right? 738 00:53:52,470 --> 00:53:58,840 Ken: Not, like, just pulling out the rule book and saying you violated rule 37.D4, you're 739 00:53:58,840 --> 00:54:00,500 Kevin: out of here, I ban you, you know, but 740 00:54:00,500 --> 00:54:01,480 Ken: trying to, like, calm 741 00:54:01,480 --> 00:54:02,700 Kevin: things down, you know? 742 00:54:02,900 --> 00:54:04,320 Kevin: Yeah, I mean, at some point, 743 00:54:04,440 --> 00:54:05,000 Ken: you end up there. 744 00:54:05,030 --> 00:54:06,240 Kevin: People also respond better if you give them a reason. 745 00:54:06,920 --> 00:54:07,760 Kevin: That's the issue, right? 746 00:54:07,840 --> 00:54:09,480 Kevin: That's not easy. 747 00:54:10,640 --> 00:54:10,980 Kevin: All right. 748 00:54:11,500 --> 00:54:14,060 Kevin: Brittany, do you have an unpopular opinion? 749 00:54:15,040 --> 00:54:16,360 Brittney: Not that I can think of right now. 750 00:54:17,120 --> 00:54:17,600 Kevin: Yeah, me neither. 751 00:54:18,680 --> 00:54:22,900 Kevin: Let's go to the fun section of the last part of the episode. 752 00:54:23,280 --> 00:54:24,060 Antony: That was the fun part. 753 00:54:27,380 --> 00:54:27,760 Kevin: All right. 754 00:54:27,880 --> 00:54:28,540 Kevin: I have a pick. 755 00:54:28,860 --> 00:54:30,880 Kevin: So I have recently switched browsers. 756 00:54:31,780 --> 00:54:33,060 Kevin: Yeah, you heard it here first. 757 00:54:33,300 --> 00:54:35,540 Kevin: I quit Safari. 758 00:54:36,720 --> 00:54:41,700 Kevin: I've been using Safari for probably close to three or four years now, full time. 759 00:54:42,380 --> 00:54:42,480 Kevin: Yeah. 760 00:54:42,850 --> 00:54:43,300 Kevin: Not joking. 761 00:54:44,599 --> 00:54:45,840 Kevin: I love it. 762 00:54:46,120 --> 00:54:46,740 Kevin: Safari is great. 763 00:54:47,220 --> 00:54:55,920 Kevin: But I've switched to one called Zen, which is like a Firefox-based browser. 764 00:54:57,119 --> 00:54:58,160 Brittney: Oh, interesting. 765 00:54:58,700 --> 00:54:58,800 Kevin: Yeah. 766 00:54:58,890 --> 00:55:03,020 Kevin: And I've been having the greatest time surfing the 767 00:55:03,020 --> 00:55:03,160 Brittney: web. 768 00:55:03,160 --> 00:55:04,040 Brittney: What is that built on? 769 00:55:04,040 --> 00:55:04,720 Brittney: Spider Monkey? 770 00:55:04,970 --> 00:55:05,480 Brittney: Is that the 771 00:55:05,480 --> 00:55:06,540 Kevin: Firefox one? 772 00:55:07,040 --> 00:55:22,020 Kevin: I love that name yeah it's fun it has all these cool features like yesterday I realized I can do command space or sorry command T and that's usually in most browsers that's just open a new 773 00:55:22,020 --> 00:55:22,200 Speaker 2: tab 774 00:55:23,060 --> 00:55:23,520 Brittney: but 775 00:55:23,520 --> 00:55:33,340 Kevin: in Xen it opens this small panel where you just type the URL so it's kind of like if you've used Spotlight on Mac like command space or whatever you 776 00:55:33,340 --> 00:55:35,019 Brittney: activate 777 00:55:35,040 --> 00:55:35,960 Kevin: So it's kind of like that. 778 00:55:36,020 --> 00:55:38,800 Kevin: And then you can do Command K, and that's searching. 779 00:55:39,320 --> 00:55:40,020 Kevin: So you just search. 780 00:55:40,280 --> 00:55:41,700 Kevin: That's so fun. 781 00:55:41,800 --> 00:55:42,520 Brittney: Oh, that is nice. 782 00:55:42,760 --> 00:55:43,580 Antony: So nice. 783 00:55:44,300 --> 00:55:48,100 Antony: So I thought we were done with controversial opinions that Safari is good and now 784 00:55:48,100 --> 00:55:48,640 Speaker 2: you use Firefox. 785 00:55:49,080 --> 00:55:50,040 Speaker 2: I've had that unpopular 786 00:55:50,040 --> 00:55:51,500 Kevin: opinion on the podcast, I think. 787 00:55:51,920 --> 00:55:52,960 Antony: I do like Firefox. 788 00:55:54,980 --> 00:55:55,820 Antony: I do, I do. 789 00:55:56,040 --> 00:55:56,460 Antony: I like Firefox. 790 00:55:56,800 --> 00:55:57,200 Antony: I use it. 791 00:55:57,280 --> 00:55:57,400 Antony: I've 792 00:55:57,400 --> 00:55:58,580 Brittney: switched mostly to Chrome. 793 00:55:58,700 --> 00:55:59,080 Brittney: I don't know. 794 00:55:59,100 --> 00:56:06,940 Brittney: My last job, I had something where it was not working very well and Firefox and I finally switched now that they have better grid tools. 795 00:56:07,300 --> 00:56:09,340 Brittney: But yeah, I still like Firefox. 796 00:56:10,170 --> 00:56:12,520 Antony: I mean, yeah, it's dominating. 797 00:56:12,830 --> 00:56:16,100 Antony: Chrome is always going to dominate because Google backing it right on Firefox and Mozilla. 798 00:56:16,660 --> 00:56:18,140 Antony: They're not dominating, right? 799 00:56:19,700 --> 00:56:21,000 Antony: There's one other feature 800 00:56:21,000 --> 00:56:23,460 Kevin: that I want to mention as well that I also found. 801 00:56:23,600 --> 00:56:24,880 Kevin: It's like split web views. 802 00:56:25,130 --> 00:56:27,240 Kevin: So you can have one tab, but it has 803 00:56:27,240 --> 00:56:27,700 Speaker 2: two websites. 804 00:56:28,560 --> 00:56:37,020 Kevin: So I can have, for example, Blue Sky on the left side, and then I'll have Twitter or Rex or whatever on the other side. 805 00:56:37,760 --> 00:56:39,540 Kevin: And then you can get both sides of the political 806 00:56:39,540 --> 00:56:39,920 Speaker 2: spectrum, 807 00:56:40,300 --> 00:56:40,480 Kevin: can't you? 808 00:56:43,180 --> 00:56:43,700 Brittney: Pretty much. 809 00:56:44,840 --> 00:56:47,420 Kevin: I promise it was not just an example. 810 00:56:48,420 --> 00:56:51,940 Brittney: You could do that with rectangle and just separating your windows too. 811 00:56:53,100 --> 00:56:55,540 Kevin: Yeah, but it's like... 812 00:56:55,540 --> 00:56:55,820 Kevin: That's true. 813 00:56:56,440 --> 00:57:01,300 Kevin: Sometimes when you're browsing the web, you want to view two websites at the same time. 814 00:57:02,020 --> 00:57:05,660 Kevin: So why not make it so that when you click the tab, both websites show up? 815 00:57:06,120 --> 00:57:10,660 Kevin: If you have it in two windows, you have to click both tabs if you want to get back to that 816 00:57:10,660 --> 00:57:11,940 Ken: kind of state. 817 00:57:11,970 --> 00:57:14,960 Ken: I was looking for that feature recently when I was trying to do a demo. 818 00:57:15,230 --> 00:57:20,380 Ken: And I wanted just one window sort of shared live on the Zoom or whatever. 819 00:57:20,910 --> 00:57:25,700 Ken: But I wanted to show sort of two views side by side. 820 00:57:26,280 --> 00:57:26,700 Ken: That 821 00:57:26,700 --> 00:57:27,900 Brittney: just gave me an idea. 822 00:57:28,120 --> 00:57:37,120 Brittney: That actually sounds really nice for when you're migrating something or comparing something from a Figma design to your actual design and just splitting it in one window. 823 00:57:38,360 --> 00:57:38,780 Brittney: All right. 824 00:57:39,300 --> 00:57:39,620 Ken: All right. 825 00:57:39,740 --> 00:57:40,580 Ken: I like your pick. 826 00:57:40,760 --> 00:57:41,600 Ken: Gave me an idea, too. 827 00:57:42,080 --> 00:57:42,720 Ken: Yeah, I'm going to try it out. 828 00:57:42,720 --> 00:57:42,800 Ken: Why not? 829 00:57:43,200 --> 00:57:44,020 Ken: Gave me an idea, too. 830 00:57:44,320 --> 00:57:44,760 Ken: How about this? 831 00:57:46,540 --> 00:57:47,660 Antony: Three windows in 832 00:57:47,660 --> 00:57:47,740 Brittney: one time. 833 00:57:47,760 --> 00:57:48,300 Brittney: I'm worried about that. 834 00:57:48,300 --> 00:57:49,020 Brittney: I mean, it can't 835 00:57:49,020 --> 00:57:49,700 Antony: do that as well. 836 00:57:52,040 --> 00:57:57,340 Brittney: honestly mozilla has been following falling a little behind with things 837 00:57:57,340 --> 00:57:58,440 Speaker 2: since like 838 00:57:58,440 --> 00:58:00,420 Brittney: the layoffs what like two or three years ago 839 00:58:00,420 --> 00:58:01,400 Speaker 2: but 840 00:58:01,400 --> 00:58:05,740 Brittney: so i worry a little bit about something built on that at this point but 841 00:58:05,740 --> 00:58:16,580 Kevin: i i have some great news for you though if you feel like you could use the the edge browser that also has this feature apparently oh 842 00:58:16,580 --> 00:58:21,320 Brittney: and it's based on pro.com right can you use edge on mac I think so 843 00:58:21,850 --> 00:58:25,640 Antony: yeah and Linux oh yeah I think it runs on Linux oh interesting 844 00:58:26,160 --> 00:58:29,620 Brittney: okay yeah I don't know give 845 00:58:29,620 --> 00:58:30,000 SoundRouse 846 00:58:30,180 --> 00:58:34,880 Antony: a try first because they realize they realize that Windows is losing popularity I love tab 847 00:58:34,880 --> 00:58:36,980 Brittney: groups and I'm addicted to tab groups 848 00:58:37,200 --> 00:58:37,320 Antony: now 849 00:58:37,320 --> 00:58:44,280 Brittney: in Chrome so I just have like everything grouped together and collapse them when I'm not using them and it's really nice I'm going to 850 00:58:44,280 --> 00:58:45,000 Ken: try again I guess that 851 00:58:45,000 --> 00:58:48,039 Brittney: can be my pick because I don't I didn't really think about a pick 852 00:58:50,060 --> 00:58:54,480 Ken: I'm going to try Zen because I also use Zed as an editor that's not my pick so 853 00:58:54,480 --> 00:58:55,360 Kevin: Zen, Zed, 854 00:58:55,440 --> 00:58:56,920 Ken: I don't know it's going to go together 855 00:58:57,420 --> 00:58:59,840 Kevin: I do as well and you can 856 00:58:59,840 --> 00:59:00,560 Ken: validate with Zod 857 00:59:02,980 --> 00:59:07,560 Kevin: I also use Zod I never realized my 858 00:59:07,560 --> 00:59:13,320 Ken: company is actually called Zenthropic I mean 859 00:59:13,320 --> 00:59:14,820 Kevin: you have to use the Zen 860 00:59:14,820 --> 00:59:15,780 Ken: browser yeah try it 861 00:59:17,540 --> 00:59:19,140 Kevin: quadrangle Is your pick set then? 862 00:59:20,160 --> 00:59:22,080 Ken: I have a completely non-technical pick. 863 00:59:22,380 --> 00:59:22,700 Ken: All right. 864 00:59:22,900 --> 00:59:23,240 Ken: Go for it. 865 00:59:23,260 --> 00:59:24,700 Ken: Which is rock climbing. 866 00:59:26,360 --> 00:59:27,880 Ken: I started getting into it a couple years ago. 867 00:59:28,780 --> 00:59:32,420 Ken: And I just want to recommend anybody should try it out. 868 00:59:32,720 --> 00:59:34,260 Ken: Maybe it's not going to be for everyone, of course. 869 00:59:34,440 --> 00:59:37,040 Ken: But, I mean, it's just a great activity. 870 00:59:37,220 --> 00:59:38,320 Ken: Like, it's a full body workout. 871 00:59:39,160 --> 00:59:39,940 Ken: It's social. 872 00:59:40,400 --> 00:59:41,640 Ken: It's mental challenges. 873 00:59:42,480 --> 00:59:46,180 Ken: So I actually find it to be sort of a kind of therapy, right? 874 00:59:46,680 --> 00:59:51,640 Ken: Like, I don't know if you've ever heard of, I think it's Brene Brown, like growth mindset versus fixed 875 00:59:51,640 --> 00:59:52,000 Brittney: mindset. 876 00:59:52,020 --> 00:59:53,340 Brittney: I love Brene Brown. 877 00:59:53,720 --> 00:59:53,840 Brittney: The 878 00:59:53,840 --> 00:59:54,740 Ken: idea of like 879 00:59:54,740 --> 00:59:55,760 Brittney: failure isn't 880 00:59:55,760 --> 00:59:56,260 Ken: really failure. 881 00:59:56,460 --> 00:59:59,480 Ken: It's, you know, just sort of a step on the path of learning and growth. 882 01:00:00,160 --> 01:00:03,080 Ken: And, you know, that's something I think I've struggled with at times in my life. 883 01:00:03,320 --> 01:00:12,000 Ken: And when you go to the gym and you're rock climbing, like you can't do it without being in a growth mindset because people are watching you fail constantly. 884 01:00:12,140 --> 01:00:19,980 Ken: And you just have to start to like reframe failure is just sort of a step in the path of part of your experience and your growth. 885 01:00:20,960 --> 01:00:22,640 Ken: And so I'm super into it. 886 01:00:22,720 --> 01:00:28,060 Ken: I'm actually leaving this afternoon to go down to the Red River Gorge, Kentucky for a climbing weekend. 887 01:00:29,480 --> 01:00:31,420 Ken: Got a bunch of new friends as a result of climbing. 888 01:00:31,560 --> 01:00:32,160 Ken: It's awesome. 889 01:00:32,780 --> 01:00:33,340 Ken: So check it out. 890 01:00:33,520 --> 01:00:33,920 Ken: Be safe. 891 01:00:34,780 --> 01:00:34,920 Ken: Thanks. 892 01:00:35,360 --> 01:00:35,600 Ken: I'll try. 893 01:00:35,960 --> 01:00:39,080 Antony: But you're talking about climbing as in with ropes and stuff, right? 894 01:00:39,100 --> 01:00:39,400 Antony: Not bouldering. 895 01:00:39,400 --> 01:00:39,920 Antony: I do both. 896 01:00:40,140 --> 01:00:40,980 Antony: Yeah, I like bouldering. 897 01:00:41,740 --> 01:00:41,980 Ken: I like 898 01:00:41,980 --> 01:00:43,080 Antony: top 899 01:00:43,080 --> 01:00:44,600 Ken: rope and lead climbing on ropes. 900 01:00:45,600 --> 01:00:53,520 Ken: Sport climbing is sort of the version of doing that outside, but not what they call trad or traditional climbing where you need to put in your own cams and stuff. 901 01:00:53,740 --> 01:00:54,500 Ken: That's a little more dangerous. 902 01:00:54,640 --> 01:00:55,080 Ken: It may be a 903 01:00:55,080 --> 01:00:56,080 Speaker 2: little bit of my pay 904 01:00:56,080 --> 01:00:56,320 Ken: grade. 905 01:00:58,180 --> 01:01:00,720 Ken: But yeah, it's very fun. 906 01:01:00,760 --> 01:01:00,920 Ken: Cool. 907 01:01:01,780 --> 01:01:01,860 Ken: Nice. 908 01:01:02,220 --> 01:01:03,000 Ken: Yeah, I love bowling. 909 01:01:03,000 --> 01:01:03,500 Ken: I love bowling. 910 01:01:04,160 --> 01:01:04,480 Antony: All right. 911 01:01:04,700 --> 01:01:04,940 Antony: Anthony? 912 01:01:06,200 --> 01:01:06,440 Antony: Right. 913 01:01:06,880 --> 01:01:08,840 Antony: My pick is technical again. 914 01:01:09,100 --> 01:01:09,240 Antony: Ha ha. 915 01:01:10,220 --> 01:01:16,840 Antony: my picnical pic, I don't know what I'm talking about anymore, is N8N. 916 01:01:17,420 --> 01:01:17,980 Kevin: Ah, right. 917 01:01:18,250 --> 01:01:20,320 Antony: So N8N is a tool. 918 01:01:20,560 --> 01:01:25,400 Antony: It's a lot like Zapier, but way cheaper because it can be free because open source. 919 01:01:26,440 --> 01:01:29,160 Antony: It's a lot like Make, which I learned about recently. 920 01:01:29,960 --> 01:01:34,540 Antony: Make is kind of like Zapier and Make are no-code automation tools. 921 01:01:35,640 --> 01:01:38,660 Antony: N8N is no and low-code automation tools. 922 01:01:38,740 --> 01:01:44,440 Antony: So it has integrations for everything you could possibly imagine, even things like linear, which I didn't think in any other parking was used. 923 01:01:45,740 --> 01:01:55,180 Antony: But basically, it allows you to drag and drop items, objects, integrations, drag and drop the fields from within them into transformers, whatever you want to do. 924 01:01:55,220 --> 01:02:03,100 Antony: So you can basically take input from something, a webhook or a query it runs, whatever, transform into something else and pop it out to some other thing. 925 01:02:03,420 --> 01:02:05,320 Antony: You can use it to control your home with Home Assistant. 926 01:02:05,920 --> 01:02:38,900 Antony: you can use it to like we do send things to slack and discord and whatever else um you can use it to automate email systems automate reports whatever you want to do you can do anything that's all you want to do with it but the reason i like it is one because it's a lot cheaper than the other two um and two because it's no it's low code as well so you can have you can go right well this integration doesn't work doesn't have what i want i'm going to break out i'm going to go into um into low code mode and i can use javascript python whatever we do to integrate with something else that it doesn't know about or something it doesn't know about, just integrate more raw with it. 927 01:02:40,340 --> 01:02:52,880 Antony: And it's just, since I've installed it, I've thought, you know what, there's so much I can do with this that will save a load of dev time, building integrations to scratch ourselves, trying to figure out where to host them, how to run them, how to optimize their hosting so that it costs a fortune. 928 01:02:53,440 --> 01:02:54,880 Antony: This kind of runs and does it all for you. 929 01:02:55,300 --> 01:02:56,400 Antony: So I'm pretty excited about NA10. 930 01:02:56,660 --> 01:02:57,700 Antony: I've done a couple of things in it. 931 01:02:57,760 --> 01:03:36,900 Antony: I have this thing where if you email any name at a certain address, which I won't mention what domain it is because it will get spammed probably um anything in that address will go into our slack into a like a channel called inbound email and it will basically allow you to test more easily because you can use this address um when you're testing your software without having to have multiple different email accounts or or whatever else so it's kind of it's great for that sort of thing that was daddy he took me a few minutes from knowing nothing about it um but I've got lots more plans in respect to that sending out reports to people how their profitability is doing how much money we made in Stripe the other day that that sort of thing is it's pretty cool and it's dead easy to use I really like it 932 01:03:36,900 --> 01:03:48,800 Kevin: nice I was gonna say I've been looking at these uh kinds of solutions recently like uh N8M is self-hostable as well right I don't know if you've mentioned that yeah 933 01:03:48,800 --> 01:03:51,500 Antony: yeah yes exactly so it can be free I've 934 01:03:51,500 --> 01:03:56,560 Kevin: been looking at one called active pieces, which is also supposed to both active pieces. 935 01:03:59,319 --> 01:03:59,920 Speaker 2: But 936 01:03:59,920 --> 01:04:02,120 Kevin: it's more for building agents. 937 01:04:02,880 --> 01:04:03,420 Kevin: AI agents. 938 01:04:04,400 --> 01:04:12,180 Kevin: I don't look too much into NADM, but I assume it's maybe geared a bit more towards using LLMs. 939 01:04:12,920 --> 01:04:14,320 Kevin: Maybe categorizing stuff 940 01:04:14,430 --> 01:04:15,060 Speaker 2: so you get 941 01:04:15,060 --> 01:04:21,020 Kevin: emails into an inbox and then, I don't know, it kind of puts categories or labels on something. 942 01:04:21,600 --> 01:04:22,000 Kevin: I don't know. 943 01:04:23,319 --> 01:04:26,080 Kevin: I'm just going to start using it, so we'll see. 944 01:04:26,540 --> 01:04:26,960 Kevin: All right. 945 01:04:27,680 --> 01:04:29,880 Kevin: I think we did it. 946 01:04:30,320 --> 01:04:31,140 Kevin: We did a whole episode. 947 01:04:31,720 --> 01:04:31,960 Kevin: Crazy. 948 01:04:32,360 --> 01:04:33,760 Kevin: Even with you being in the bar. 949 01:04:34,200 --> 01:04:35,560 Kevin: You would have thought you'd be 950 01:04:35,560 --> 01:04:37,020 Speaker 2: blackout drunk at this point. 951 01:04:39,820 --> 01:04:40,480 Kevin: But yeah, all right. 952 01:04:41,000 --> 01:04:43,820 Kevin: Thank you, Ken, for coming on and joining 953 01:04:43,820 --> 01:04:44,460 Ken: us and talking 954 01:04:44,460 --> 01:04:45,320 Kevin: about everything. 955 01:04:46,240 --> 01:04:46,820 Ken: Thanks for having me. 956 01:04:46,920 --> 01:04:47,580 Ken: This was a lot of fun. 957 01:04:47,800 --> 01:04:47,960 Kevin: Yeah. 958 01:04:48,270 --> 01:04:49,560 Kevin: And we will... 959 01:04:49,560 --> 01:04:49,880 Speaker 2: Thank you. 960 01:04:49,960 --> 01:04:51,180 Speaker 2: Thank you to everyone who's listening. 961 01:04:51,700 --> 01:04:54,060 Speaker 2: and we will talk to you next week. 962 01:04:54,280 --> 01:04:54,400 Speaker 2: Yeah. 963 01:04:54,840 --> 01:04:54,940 Speaker 2: Bye 964 01:04:54,940 --> 01:04:55,240 Brittney: -bye. 965 01:04:55,900 --> 01:04:56,040 Brittney: Cheers. 966 01:04:56,200 --> 01:04:56,280 Brittney: Cheers. 967 01:04:57,300 --> 01:04:57,460 Speaker 2: Bye. 968 01:04:57,660 --> 01:04:57,880 Brittney: Bye-bye.

Never lose your place, on any device

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