
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.