WEBVTT

1
00:00:05.360 --> 00:00:09.839
<v Speaker 1>Welcome to the Ruby Roags. My name is John Epperson.

2
00:00:10.080 --> 00:00:12.480
<v Speaker 1>And on our panel today we have Luke Stutters.

3
00:00:12.759 --> 00:00:13.279
<v Speaker 2>Hello.

4
00:00:13.759 --> 00:00:17.519
<v Speaker 1>And for our guests today, we have Richard Fellman.

5
00:00:18.000 --> 00:00:20.920
<v Speaker 3>Richard, Richard, we've had you on the panel before.

6
00:00:21.039 --> 00:00:23.399
<v Speaker 1>I was not here. I was listening to the podcast

7
00:00:23.480 --> 00:00:26.280
<v Speaker 1>at this time. It was quite a while ago. I

8
00:00:26.320 --> 00:00:29.120
<v Speaker 1>believe Oddy was still on who.

9
00:00:29.320 --> 00:00:30.839
<v Speaker 3>I don't remember who else would have been there.

10
00:00:31.120 --> 00:00:35.200
<v Speaker 1>Looks like, according to the pics Chuck and Evan, Jessica

11
00:00:35.320 --> 00:00:38.439
<v Speaker 1>Kurt's time. I actually don't remember how to pronounce her

12
00:00:38.520 --> 00:00:43.560
<v Speaker 1>last name. It was Okay here too. It was like

13
00:00:43.640 --> 00:00:44.600
<v Speaker 1>kind I used to work together.

14
00:00:44.600 --> 00:00:46.719
<v Speaker 4>And as I recall, it's a long time ago, I

15
00:00:46.719 --> 00:00:49.200
<v Speaker 4>think she introduced herself to me as care like care bear,

16
00:00:49.399 --> 00:00:52.159
<v Speaker 4>So I think that's how it's pronounced, which I'll correct.

17
00:00:52.240 --> 00:00:54.960
<v Speaker 1>Remember that now that I think about it. I remember

18
00:00:55.000 --> 00:00:57.280
<v Speaker 1>hearing that okay, fair enough. Wow, I can't believe it.

19
00:00:57.280 --> 00:01:01.880
<v Speaker 1>I didn't even recognize that, sorry, Jessica. Yeah, so welcome,

20
00:01:02.280 --> 00:01:07.200
<v Speaker 1>welcome again. And I remember listening to this particular podcast. Actually,

21
00:01:07.920 --> 00:01:10.480
<v Speaker 1>I remember being very excited about ELM, and ELM is

22
00:01:11.159 --> 00:01:13.280
<v Speaker 1>one of the many things over the years that I

23
00:01:13.359 --> 00:01:14.799
<v Speaker 1>was like, I'm going to do that thing, and I

24
00:01:14.879 --> 00:01:17.640
<v Speaker 1>didn't do it, so I'm excited to hear how it's

25
00:01:17.760 --> 00:01:20.840
<v Speaker 1>changed and different. It also sounds like you, or I mean,

26
00:01:21.000 --> 00:01:23.439
<v Speaker 1>sounds like you did release a book, so we can

27
00:01:23.480 --> 00:01:25.719
<v Speaker 1>talk about that too, I guess maybe to get us

28
00:01:25.719 --> 00:01:28.640
<v Speaker 1>into this, why don't you talk about what the I

29
00:01:28.680 --> 00:01:30.959
<v Speaker 1>don't know what the goal of your book was, and like,

30
00:01:31.280 --> 00:01:32.359
<v Speaker 1>why did you release it?

31
00:01:32.439 --> 00:01:33.920
<v Speaker 3>Why'd you write it? Yeah?

32
00:01:33.959 --> 00:01:36.239
<v Speaker 4>Sure, So the main goal of the book is to

33
00:01:36.280 --> 00:01:39.120
<v Speaker 4>help people who have never done anything with ELM or

34
00:01:39.159 --> 00:01:43.280
<v Speaker 4>anything with functional programming of any sort, learn ELM from

35
00:01:43.319 --> 00:01:46.879
<v Speaker 4>scratch and basically be able to build applications at ELM.

36
00:01:47.359 --> 00:01:49.000
<v Speaker 4>One of my big goals for writing the book is

37
00:01:49.040 --> 00:01:52.400
<v Speaker 4>that when I was first getting into like functional programming languages,

38
00:01:52.480 --> 00:01:55.760
<v Speaker 4>especially typed functional programming languages, I found that a lot

39
00:01:55.760 --> 00:01:57.799
<v Speaker 4>of the books, actually really all the books I could

40
00:01:57.799 --> 00:02:00.840
<v Speaker 4>find at the time, were just really really refocused. They

41
00:02:00.840 --> 00:02:03.400
<v Speaker 4>would talk about a lot about like philosophy, and they

42
00:02:03.480 --> 00:02:06.840
<v Speaker 4>use the phrase reason about a lot, and I just

43
00:02:07.359 --> 00:02:09.800
<v Speaker 4>don't work that way. I like to build stuff, and

44
00:02:09.879 --> 00:02:11.759
<v Speaker 4>so I wanted to write a book for people who

45
00:02:11.800 --> 00:02:14.120
<v Speaker 4>like to build stuff like me. So that's what the

46
00:02:14.120 --> 00:02:16.400
<v Speaker 4>book is it's a way to learn by building stuff.

47
00:02:16.400 --> 00:02:18.919
<v Speaker 4>So over the course of the book, starting from chapter two,

48
00:02:18.960 --> 00:02:21.000
<v Speaker 4>like chapter one is basically like syntax and stuff like that,

49
00:02:21.000 --> 00:02:22.919
<v Speaker 4>and you know, kind of stuff you need. Starting from

50
00:02:23.000 --> 00:02:24.800
<v Speaker 4>chapter two, for the rest of the book, you're working

51
00:02:24.800 --> 00:02:28.280
<v Speaker 4>on building a sort of a photo browsing application. And

52
00:02:28.560 --> 00:02:31.199
<v Speaker 4>each chapter it's like you get a new a new

53
00:02:31.240 --> 00:02:35.159
<v Speaker 4>feature to build from your fictitious manager and you build it,

54
00:02:35.159 --> 00:02:36.560
<v Speaker 4>and then over the course of the chapter, while you're

55
00:02:36.560 --> 00:02:38.840
<v Speaker 4>building it, you learn some new concept in language, like

56
00:02:38.879 --> 00:02:41.240
<v Speaker 4>testing or you know something like that.

57
00:02:41.520 --> 00:02:44.919
<v Speaker 1>It sounds very it sounds very Real's esque, right, like

58
00:02:45.159 --> 00:02:48.840
<v Speaker 1>get your do your iterative thing, get your small victory,

59
00:02:49.439 --> 00:02:50.719
<v Speaker 1>move on to the next step.

60
00:02:50.919 --> 00:02:55.039
<v Speaker 4>Could Yeah, it's it's definitely like. It was a real

61
00:02:55.159 --> 00:02:58.120
<v Speaker 4>challenge to write the book in that style. I at

62
00:02:58.120 --> 00:02:59.680
<v Speaker 4>first I was like, man, why is it everybody wat

63
00:02:59.680 --> 00:03:01.319
<v Speaker 4>a book like this? And by the end I was like, oh,

64
00:03:01.479 --> 00:03:04.759
<v Speaker 4>now I know, because it turns out to be a

65
00:03:04.800 --> 00:03:07.240
<v Speaker 4>big challenge to get everything to sort of pull together

66
00:03:07.599 --> 00:03:10.240
<v Speaker 4>in that way, because it's not just that you're like,

67
00:03:10.319 --> 00:03:12.199
<v Speaker 4>of course, I need to build the application myself so

68
00:03:12.240 --> 00:03:14.479
<v Speaker 4>that I can, you know, go back and build it up.

69
00:03:14.520 --> 00:03:15.319
<v Speaker 3>Chapter by chapter.

70
00:03:15.719 --> 00:03:18.319
<v Speaker 4>But then whenever I would discover oh wait a minute,

71
00:03:18.319 --> 00:03:20.360
<v Speaker 4>I need to teach this chapter this concept a little

72
00:03:20.400 --> 00:03:22.560
<v Speaker 4>bit earlier, a little bit later, then I'd have to

73
00:03:22.560 --> 00:03:25.759
<v Speaker 4>go revise the application and then also go sort of

74
00:03:25.800 --> 00:03:28.240
<v Speaker 4>propagate that change through all the chapters that were affected.

75
00:03:28.319 --> 00:03:31.840
<v Speaker 4>So revisions took a lot longer than I was hoping

76
00:03:31.840 --> 00:03:36.319
<v Speaker 4>for upfront. Totally fair, That makes a lot of sense. Well,

77
00:03:36.319 --> 00:03:37.800
<v Speaker 4>I'm really happy with how it turned out. I mean,

78
00:03:37.960 --> 00:03:40.039
<v Speaker 4>it ends up. Yeah, you do actually build an application

79
00:03:40.039 --> 00:03:42.759
<v Speaker 4>from start to finish and learn about the language along

80
00:03:42.800 --> 00:03:43.039
<v Speaker 4>the way.

81
00:03:43.280 --> 00:03:47.319
<v Speaker 1>So how how do you recommend using ELM? Do you

82
00:03:47.360 --> 00:03:50.879
<v Speaker 1>see ELM as a thing that lives alongside rails in

83
00:03:50.919 --> 00:03:51.479
<v Speaker 1>our stack?

84
00:03:51.840 --> 00:03:52.199
<v Speaker 3>Is it?

85
00:03:52.240 --> 00:03:54.639
<v Speaker 1>Is it really a separate thing that we should we

86
00:03:54.680 --> 00:03:56.719
<v Speaker 1>should we should pick this tool off the shelf when

87
00:03:56.759 --> 00:03:59.919
<v Speaker 1>we're approaching certain kinds of problems and leave rails, you know,

88
00:04:00.080 --> 00:04:02.840
<v Speaker 1>for the instead, or yeah, how do you see these

89
00:04:02.879 --> 00:04:03.439
<v Speaker 1>things living?

90
00:04:04.000 --> 00:04:04.879
<v Speaker 3>Yeah? Great question.

91
00:04:05.159 --> 00:04:06.759
<v Speaker 4>So, I mean the way that we use it at work,

92
00:04:06.800 --> 00:04:09.120
<v Speaker 4>like very specifically, is we have rails on the back

93
00:04:09.199 --> 00:04:11.520
<v Speaker 4>end for most of our back end at this point,

94
00:04:11.879 --> 00:04:15.159
<v Speaker 4>and then on each individual page, what we do is

95
00:04:15.199 --> 00:04:18.600
<v Speaker 4>instead of loading some compiled JavaScript, we load some compiled

96
00:04:18.639 --> 00:04:21.879
<v Speaker 4>ELM instead. So basically, anytime you're doing what I would

97
00:04:21.920 --> 00:04:24.360
<v Speaker 4>call a web application, whether that's a single page app

98
00:04:24.519 --> 00:04:27.360
<v Speaker 4>or just something that has a lot of complicated front

99
00:04:27.399 --> 00:04:30.319
<v Speaker 4>end logic, I think that's where elms are really good fit. Conversely,

100
00:04:30.360 --> 00:04:32.279
<v Speaker 4>if you have just kind of a tiny little bit

101
00:04:32.279 --> 00:04:35.160
<v Speaker 4>of JavaScript that's just kind of like augmenting what's primarily

102
00:04:35.279 --> 00:04:37.759
<v Speaker 4>HTML on the page, I don't think it's worth it

103
00:04:37.800 --> 00:04:40.000
<v Speaker 4>to go like all the way to ELM. You're not

104
00:04:40.000 --> 00:04:41.720
<v Speaker 4>really going to get the benefit of using a whole

105
00:04:41.720 --> 00:04:44.199
<v Speaker 4>different language unless you have a lot of complexity.

106
00:04:43.639 --> 00:04:46.560
<v Speaker 1>There, all right, So we can throw away our React

107
00:04:46.839 --> 00:04:48.920
<v Speaker 1>and things like that in exchange for out.

108
00:04:49.279 --> 00:04:50.120
<v Speaker 3>That's what we did at work.

109
00:04:50.160 --> 00:04:53.759
<v Speaker 4>Yeah, so literally we started from Reacting and migrated things

110
00:04:53.800 --> 00:04:56.480
<v Speaker 4>to ELM. Eventually, I guess it's more accurate to say

111
00:04:56.480 --> 00:04:59.399
<v Speaker 4>that ELM took over. Technically, we still have some ancient

112
00:04:59.439 --> 00:05:01.720
<v Speaker 4>React in there. It's like react o dot twelve, I think,

113
00:05:02.680 --> 00:05:04.920
<v Speaker 4>because we just haven't it's been that long since we

114
00:05:04.959 --> 00:05:06.199
<v Speaker 4>wrote any new React code.

115
00:05:07.000 --> 00:05:07.519
<v Speaker 3>That's fair.

116
00:05:08.079 --> 00:05:11.240
<v Speaker 1>Yeah, I was it like duff, I don't know whatever

117
00:05:11.399 --> 00:05:14.040
<v Speaker 1>somewhere in there React change and then I went from

118
00:05:14.079 --> 00:05:16.720
<v Speaker 1>being very excited about it to not not being as

119
00:05:16.720 --> 00:05:17.399
<v Speaker 1>big of a fan.

120
00:05:18.120 --> 00:05:20.199
<v Speaker 3>So how do you feel about this? All? Right?

121
00:05:20.279 --> 00:05:22.439
<v Speaker 1>So, so stimulus is kind of a thing in the

122
00:05:22.519 --> 00:05:25.720
<v Speaker 1>reals community right now and with a good amount of popularity.

123
00:05:26.120 --> 00:05:28.399
<v Speaker 1>I don't know, I don't know how popular it is.

124
00:05:28.720 --> 00:05:31.600
<v Speaker 1>I like it, but how does it compare with things

125
00:05:31.639 --> 00:05:33.480
<v Speaker 1>like that? How do you pick or are you just

126
00:05:33.519 --> 00:05:35.759
<v Speaker 1>committed to ELM and so you really haven't you know,

127
00:05:36.360 --> 00:05:38.639
<v Speaker 1>put it's on a comparative time in.

128
00:05:39.040 --> 00:05:40.600
<v Speaker 4>Yeah, I mean, to be honest, I mean we've been

129
00:05:40.639 --> 00:05:43.600
<v Speaker 4>so happy with ELM that we definitely have not really

130
00:05:43.639 --> 00:05:46.839
<v Speaker 4>like reconsidered that choice. The way that I see it

131
00:05:46.879 --> 00:05:49.399
<v Speaker 4>is it's it's kind of like the big question is

132
00:05:49.399 --> 00:05:52.399
<v Speaker 4>sort of ELM versus JavaScript as a whole, because they're

133
00:05:52.439 --> 00:05:55.000
<v Speaker 4>very different languages. I mean, they've both sort of solved

134
00:05:55.040 --> 00:05:56.720
<v Speaker 4>the same problem, but they come at it from pretty

135
00:05:56.759 --> 00:06:00.120
<v Speaker 4>different angles. And so from our perspective, like, we have

136
00:06:00.120 --> 00:06:01.800
<v Speaker 4>a lot of people who are just really happy being

137
00:06:01.800 --> 00:06:05.759
<v Speaker 4>ELM programmers. And something that I've noticed is that once

138
00:06:05.800 --> 00:06:07.560
<v Speaker 4>people get a taste of using ELM at work, it's

139
00:06:07.560 --> 00:06:10.279
<v Speaker 4>pretty common that like the first place they go after,

140
00:06:10.480 --> 00:06:12.600
<v Speaker 4>you know, when they're looking to move jobs is like

141
00:06:12.720 --> 00:06:15.480
<v Speaker 4>the jobs channel on ELM Slack because they want to

142
00:06:15.560 --> 00:06:18.160
<v Speaker 4>use ELM again rather than going back to JavaScript or

143
00:06:18.120 --> 00:06:20.000
<v Speaker 4>type script or that whole ecosystem.

144
00:06:20.279 --> 00:06:23.279
<v Speaker 2>I got some dumb questions fire away. I got some

145
00:06:23.360 --> 00:06:25.560
<v Speaker 2>dumb questions answers.

146
00:06:26.000 --> 00:06:30.240
<v Speaker 5>Ruby infamously has has little to know typing and an

147
00:06:30.279 --> 00:06:36.079
<v Speaker 5>amazing imagination. What is it about front end development that

148
00:06:37.160 --> 00:06:41.240
<v Speaker 5>seems to require some kind of typing system?

149
00:06:41.519 --> 00:06:44.360
<v Speaker 4>You know, I don't know that it's necessarily so much

150
00:06:44.360 --> 00:06:47.000
<v Speaker 4>of a domain specific thing. For me personally, I would

151
00:06:47.000 --> 00:06:50.360
<v Speaker 4>say it's more about sort of the identity of the

152
00:06:50.439 --> 00:06:54.800
<v Speaker 4>language itself. So you can classify both Ruby and JavaScript

153
00:06:54.839 --> 00:06:58.600
<v Speaker 4>as you know, dynamic languages, but they feel very different

154
00:06:58.639 --> 00:07:00.800
<v Speaker 4>to use. I mean, they go about it in very

155
00:07:00.800 --> 00:07:04.560
<v Speaker 4>different ways. And similarly, I would say that like ELM

156
00:07:04.600 --> 00:07:08.360
<v Speaker 4>and typescript, although they're both type check languages, they feel

157
00:07:08.439 --> 00:07:10.399
<v Speaker 4>very different to use and they go about it in

158
00:07:10.480 --> 00:07:13.279
<v Speaker 4>very different ways. So I don't know that it's necessarily

159
00:07:14.120 --> 00:07:16.959
<v Speaker 4>a front end specific thing. So Evan who was on

160
00:07:17.000 --> 00:07:19.120
<v Speaker 4>the podcast last time, he's the guy who created ELM,

161
00:07:19.720 --> 00:07:23.639
<v Speaker 4>and he basically when he was trying to when he

162
00:07:23.680 --> 00:07:25.800
<v Speaker 4>created the language, it was because he had this experience

163
00:07:25.800 --> 00:07:29.600
<v Speaker 4>where he was doing an internship at Google, and he

164
00:07:29.720 --> 00:07:32.040
<v Speaker 4>was working on like C plus plus and Gmail or

165
00:07:32.040 --> 00:07:34.319
<v Speaker 4>something like that, and a friend of his was doing

166
00:07:34.319 --> 00:07:36.920
<v Speaker 4>some JavaScript stuff and he'd finished his project early and

167
00:07:36.959 --> 00:07:38.759
<v Speaker 4>was going over to help out his friend, and he

168
00:07:38.839 --> 00:07:41.879
<v Speaker 4>was really surprised by just how hard it seemed to

169
00:07:41.920 --> 00:07:44.399
<v Speaker 4>be to work in that environment relative to kind of

170
00:07:44.439 --> 00:07:46.279
<v Speaker 4>what he assumed it would be like at a place

171
00:07:46.319 --> 00:07:48.839
<v Speaker 4>like Google, where they just have the most investment ever

172
00:07:48.920 --> 00:07:53.319
<v Speaker 4>in JavaScript. And what he remembered was he was like, man,

173
00:07:53.920 --> 00:07:56.160
<v Speaker 4>I worked with some of these older languages in college,

174
00:07:56.199 --> 00:07:58.759
<v Speaker 4>like these mL family languages that have these nice module

175
00:07:58.800 --> 00:08:01.240
<v Speaker 4>systems and things like this and that, and it seemed

176
00:08:01.240 --> 00:08:02.879
<v Speaker 4>like a lot of this stuff was just much easier.

177
00:08:03.519 --> 00:08:05.680
<v Speaker 4>So his thinking was not, you know, oh, let's add

178
00:08:05.680 --> 00:08:07.160
<v Speaker 4>a type checker to this, because I think if he'd

179
00:08:07.160 --> 00:08:09.040
<v Speaker 4>done that he would have ended up with something more

180
00:08:09.079 --> 00:08:11.240
<v Speaker 4>similar to typescript or flow or you know, one of

181
00:08:11.279 --> 00:08:14.560
<v Speaker 4>these other projects. But rather he was thinking about at

182
00:08:14.560 --> 00:08:18.199
<v Speaker 4>the language level, I've had these really positive, nice experiences

183
00:08:18.240 --> 00:08:21.120
<v Speaker 4>with these this other family of languages that are you know,

184
00:08:21.360 --> 00:08:23.839
<v Speaker 4>not as popular in mainstream use. It's like, I think

185
00:08:24.199 --> 00:08:27.399
<v Speaker 4>there'd be an opportunity to try this out in this domain.

186
00:08:28.160 --> 00:08:30.560
<v Speaker 4>So whether that's innate to front end or not, I

187
00:08:30.600 --> 00:08:32.679
<v Speaker 4>don't know, but I think it's It really has more

188
00:08:32.679 --> 00:08:35.200
<v Speaker 4>to do with like the positive feelings that people expressed

189
00:08:35.200 --> 00:08:37.159
<v Speaker 4>about ELM, I think are similar to the positive feelings

190
00:08:37.200 --> 00:08:39.720
<v Speaker 4>people expressed about Ruby. It's just like a joy to use.

191
00:08:39.759 --> 00:08:41.480
<v Speaker 4>It's a delight to use the language.

192
00:08:41.720 --> 00:08:47.039
<v Speaker 5>That's not a very postive and uplifting story. I'm going

193
00:08:47.080 --> 00:08:50.399
<v Speaker 5>to suggest that reality is that the web is getting

194
00:08:50.720 --> 00:08:53.919
<v Speaker 5>is getting worse instead of better. Brownses coming left right,

195
00:08:53.960 --> 00:08:58.240
<v Speaker 5>the center obviously iees going away, but still in other

196
00:08:58.360 --> 00:09:04.799
<v Speaker 5>things require eleven for commercial reason. And the front end

197
00:09:05.080 --> 00:09:08.200
<v Speaker 5>is inherently a hostile It's like a wild West atmosphere.

198
00:09:08.200 --> 00:09:12.159
<v Speaker 5>When I'm safe on my server with my Ruby micro frameworks,

199
00:09:12.399 --> 00:09:17.279
<v Speaker 5>all rails, no one can touch me. I control the environment.

200
00:09:18.039 --> 00:09:19.879
<v Speaker 5>It seems to me that on the front end, you

201
00:09:19.919 --> 00:09:23.200
<v Speaker 5>are on the front lines. Front End development is front

202
00:09:23.200 --> 00:09:25.600
<v Speaker 5>line development. There we go. You heard it here first.

203
00:09:27.600 --> 00:09:32.720
<v Speaker 5>What I think, reading through and listening to Evan talked

204
00:09:32.720 --> 00:09:36.679
<v Speaker 5>about ELM is ELM is like a shield that can

205
00:09:36.759 --> 00:09:41.200
<v Speaker 5>protect you against the e vagarities of what can be

206
00:09:41.279 --> 00:09:45.360
<v Speaker 5>really quite a hostile programming environment on the front end.

207
00:09:47.279 --> 00:09:48.159
<v Speaker 2>And let me.

208
00:09:50.320 --> 00:09:53.360
<v Speaker 5>Delve into some of my own front end experiences. Recently,

209
00:09:54.080 --> 00:09:57.960
<v Speaker 5>I had to start writing complicated front ends. This is

210
00:09:58.039 --> 00:10:01.840
<v Speaker 5>not something I've done. I've been writing very simple front

211
00:10:01.919 --> 00:10:05.120
<v Speaker 5>ends with a business logic in the back and maybe

212
00:10:05.120 --> 00:10:07.919
<v Speaker 5>you just have to hit a button or you can

213
00:10:07.919 --> 00:10:11.360
<v Speaker 5>do everything separate pages as fine. But you know, as

214
00:10:11.440 --> 00:10:15.799
<v Speaker 5>as it turns out, I do have to write some

215
00:10:15.919 --> 00:10:21.320
<v Speaker 5>fairly complicated almost desktop app like Interphasis now for sure.

216
00:10:22.240 --> 00:10:25.759
<v Speaker 5>And I looked at Stimulus, but I've been using Voo

217
00:10:26.240 --> 00:10:29.600
<v Speaker 5>to do my front end development, and I get errors left,

218
00:10:29.679 --> 00:10:32.320
<v Speaker 5>right and center. I get more errors from food and

219
00:10:32.399 --> 00:10:36.200
<v Speaker 5>I have from any any other language, any other programming environment.

220
00:10:36.720 --> 00:10:40.039
<v Speaker 5>It really really likes to blow up, and it's very

221
00:10:40.120 --> 00:10:43.000
<v Speaker 5>much a sun death situation. One error in my Voo

222
00:10:43.000 --> 00:10:48.320
<v Speaker 5>code will take out the whole page. So I would

223
00:10:48.399 --> 00:10:52.080
<v Speaker 5>be interested, very interested in a front end where I

224
00:10:52.120 --> 00:10:56.480
<v Speaker 5>don't have that concern that the app's going to blow

225
00:10:56.600 --> 00:11:01.519
<v Speaker 5>up for someone on some browser and then they just dead.

226
00:11:02.080 --> 00:11:06.639
<v Speaker 5>The single page app stops working and I've lost that business.

227
00:11:07.879 --> 00:11:10.879
<v Speaker 4>Yeah, I mean that's we were using ELM with Internet

228
00:11:10.879 --> 00:11:15.039
<v Speaker 4>Explorer nine for many years, so that's certainly not a concern.

229
00:11:15.080 --> 00:11:16.879
<v Speaker 4>And also I mean, if an ELM app's going to

230
00:11:16.879 --> 00:11:18.799
<v Speaker 4>blow up, it's going to be you get a compile error.

231
00:11:19.879 --> 00:11:22.639
<v Speaker 4>We actually went almost two years before we got our

232
00:11:22.679 --> 00:11:25.960
<v Speaker 4>first runtime era that was logged like our production server

233
00:11:26.080 --> 00:11:28.360
<v Speaker 4>like logged a runtime exception. It's just I mean, it

234
00:11:28.399 --> 00:11:30.960
<v Speaker 4>can't happen. Actually, the particularly one that we ran into

235
00:11:31.000 --> 00:11:32.679
<v Speaker 4>them was then fixed in the next release of ELMS,

236
00:11:32.679 --> 00:11:35.200
<v Speaker 4>so that couldn't happen anymore. But that's really kind of

237
00:11:35.240 --> 00:11:37.879
<v Speaker 4>ELM's goal is that if something bad's going to happen,

238
00:11:37.879 --> 00:11:40.000
<v Speaker 4>it's going to happen on your local development machine at

239
00:11:40.000 --> 00:11:42.759
<v Speaker 4>compile time, not at run time where it can affect

240
00:11:42.759 --> 00:11:43.240
<v Speaker 4>your users.

241
00:11:43.279 --> 00:11:44.919
<v Speaker 3>And it really delivers on that.

242
00:11:45.039 --> 00:11:48.639
<v Speaker 4>We still have like JavaScript blogging, you know, enabled unproduction

243
00:11:48.799 --> 00:11:51.279
<v Speaker 4>and yeah, the number of runtime exceptions we get from

244
00:11:51.320 --> 00:11:53.679
<v Speaker 4>our JavaScript you know, we still have some legacy JS,

245
00:11:53.720 --> 00:11:56.919
<v Speaker 4>even though now it's we have like four hundred thousand

246
00:11:56.960 --> 00:11:58.759
<v Speaker 4>lines of ELM code. This is at no rid ink,

247
00:11:58.799 --> 00:12:01.840
<v Speaker 4>by the way, where we mixed up for software for

248
00:12:01.879 --> 00:12:04.480
<v Speaker 4>English teachers, so students and teachers. We have like millions

249
00:12:04.519 --> 00:12:07.159
<v Speaker 4>of users, you know, very high traffic, lots of different devices.

250
00:12:07.559 --> 00:12:10.039
<v Speaker 4>By the way, we're hiring full stack engineers and also

251
00:12:11.120 --> 00:12:13.799
<v Speaker 4>sr and tooling engineers. If you're interested in working with

252
00:12:13.840 --> 00:12:17.919
<v Speaker 4>ELM at work, that's no redink dot com slash jobs.

253
00:12:18.440 --> 00:12:20.759
<v Speaker 4>But I mean what we've seen over the years, and

254
00:12:20.840 --> 00:12:23.200
<v Speaker 4>we've been using ELM since twenty fifteen. Actually, I think

255
00:12:23.200 --> 00:12:26.399
<v Speaker 4>on that podcast we were relatively new to using it

256
00:12:27.200 --> 00:12:29.120
<v Speaker 4>at the time, but now we've had, you know, a

257
00:12:29.120 --> 00:12:31.159
<v Speaker 4>lot of experience under our bills. We're way past the

258
00:12:31.159 --> 00:12:35.000
<v Speaker 4>honeymoon phase and we still love it. And part of

259
00:12:35.000 --> 00:12:37.000
<v Speaker 4>the reason is just yeah, I mean we get to

260
00:12:37.000 --> 00:12:39.799
<v Speaker 4>see every day in our error reports, you know, on bugsnag,

261
00:12:41.159 --> 00:12:43.799
<v Speaker 4>just how many exceptions our JavaScript code from you know,

262
00:12:43.840 --> 00:12:46.600
<v Speaker 4>twenty fourteen is still throwing that we haven't you know,

263
00:12:46.639 --> 00:12:50.799
<v Speaker 4>gone back and deleted or rewritten in ELM and our

264
00:12:50.799 --> 00:12:54.080
<v Speaker 4>ELM code just you know, just plowing along doing well. Yeah,

265
00:12:54.240 --> 00:12:57.240
<v Speaker 4>it feels kind of surreal almost to be to be honest,

266
00:12:57.480 --> 00:12:59.679
<v Speaker 4>I had never thought that, like, prior to using ELM,

267
00:12:59.679 --> 00:13:01.679
<v Speaker 4>that would something you could get in the browser, because yeah,

268
00:13:01.679 --> 00:13:03.919
<v Speaker 4>I mean, as you said, there's it's a bit of

269
00:13:03.919 --> 00:13:06.840
<v Speaker 4>a it can feel like a hostile environment in some ways,

270
00:13:06.919 --> 00:13:09.919
<v Speaker 4>especially to doing really complex things, because let's face it,

271
00:13:09.960 --> 00:13:12.279
<v Speaker 4>that's not what jobst was designed for It was designed

272
00:13:12.320 --> 00:13:14.639
<v Speaker 4>for really small scripts, and the way that we use

273
00:13:14.679 --> 00:13:17.240
<v Speaker 4>it is to basically build desktop applications that have to

274
00:13:17.279 --> 00:13:20.639
<v Speaker 4>be streamed over the internet and used, you know, immediately,

275
00:13:22.000 --> 00:13:24.600
<v Speaker 4>not what it was designed for. But but yeah, ELM

276
00:13:24.679 --> 00:13:28.639
<v Speaker 4>does do a really good job of presenting something that's

277
00:13:28.759 --> 00:13:33.080
<v Speaker 4>much nicer than it's a much nicer interface to the browser.

278
00:13:33.480 --> 00:13:34.120
<v Speaker 3>It is different.

279
00:13:34.399 --> 00:13:35.879
<v Speaker 4>I mean it would sort of have to be, right,

280
00:13:35.919 --> 00:13:37.200
<v Speaker 4>I mean, it would be weird if you could have

281
00:13:37.240 --> 00:13:41.279
<v Speaker 4>something that was both familiar and much better. At some point,

282
00:13:41.279 --> 00:13:45.159
<v Speaker 4>in order to be significantly better, you've got to be different, so,

283
00:13:45.320 --> 00:13:48.200
<v Speaker 4>you know, hence why there are many of us out

284
00:13:48.200 --> 00:13:51.240
<v Speaker 4>there writing things like books and tutorials and things like.

285
00:13:51.240 --> 00:13:54.080
<v Speaker 1>That to help people learn it. How is it to

286
00:13:54.120 --> 00:13:57.799
<v Speaker 1>get up and running for Rails developer? So how difficult

287
00:13:58.200 --> 00:13:59.399
<v Speaker 1>or easy? Good?

288
00:14:00.120 --> 00:14:00.480
<v Speaker 3>Yeah?

289
00:14:00.720 --> 00:14:04.480
<v Speaker 4>I man, I think it was since Rails five you've

290
00:14:04.480 --> 00:14:06.559
<v Speaker 4>been able to use it out the box with sprockets.

291
00:14:07.120 --> 00:14:09.000
<v Speaker 4>Don't quote me on that because we actually have a

292
00:14:09.000 --> 00:14:10.960
<v Speaker 4>different build syst and we used to use it with sprockets,

293
00:14:10.960 --> 00:14:14.240
<v Speaker 4>but now we do our own thing. But yeah, I mean,

294
00:14:14.360 --> 00:14:16.840
<v Speaker 4>I guess it's been a long time since I set

295
00:14:16.840 --> 00:14:19.399
<v Speaker 4>it up from scratch, so I but I believe it

296
00:14:19.399 --> 00:14:20.759
<v Speaker 4>should be straightforward.

297
00:14:20.919 --> 00:14:21.480
<v Speaker 3>Fair enough.

298
00:14:21.960 --> 00:14:25.320
<v Speaker 1>I mean, I guess wrong person to ask, since you're like, yeah,

299
00:14:25.360 --> 00:14:28.080
<v Speaker 1>I've lived with it for forever, I don't remember.

300
00:14:27.840 --> 00:14:28.320
<v Speaker 3>What I did.

301
00:14:29.240 --> 00:14:32.960
<v Speaker 4>Yeah, I mean back back, admittedly back in twenty fifteen,

302
00:14:33.000 --> 00:14:34.720
<v Speaker 4>when it was like the early days. Yeah it was

303
00:14:34.879 --> 00:14:36.759
<v Speaker 4>you know, you had to do custom stuff to set

304
00:14:36.759 --> 00:14:38.840
<v Speaker 4>it up. But I don't believe that's true anymore.

305
00:14:39.360 --> 00:14:39.559
<v Speaker 3>Yeah.

306
00:14:39.840 --> 00:14:41.519
<v Speaker 1>I looked up a couple of things, and it does

307
00:14:41.559 --> 00:14:44.720
<v Speaker 1>look like it works with like webpacker now and some things.

308
00:14:44.759 --> 00:14:46.759
<v Speaker 1>I mean, there's a gem out there to get it started.

309
00:14:47.200 --> 00:14:50.840
<v Speaker 1>I don't fair enough. I mean, I actually the gem

310
00:14:50.960 --> 00:14:53.320
<v Speaker 1>actually now that I'm looking at is no reading slash

311
00:14:53.360 --> 00:14:55.960
<v Speaker 1>and umbnails. So I assume that you guys are involved

312
00:14:55.960 --> 00:15:01.240
<v Speaker 1>in that somewhat. Yep, that's the same suction. Fair enough?

313
00:15:01.360 --> 00:15:03.840
<v Speaker 1>So yeah, all right, cool? So, I mean there's some

314
00:15:03.840 --> 00:15:06.159
<v Speaker 1>stuff out there. You haven't touched it in a while,

315
00:15:06.200 --> 00:15:09.120
<v Speaker 1>so you don't remember how hard it is. But fair enough.

316
00:15:09.919 --> 00:15:12.360
<v Speaker 4>But I do remember, specifically hearing that it got easier

317
00:15:12.399 --> 00:15:13.679
<v Speaker 4>since we originally set it up.

318
00:15:13.919 --> 00:15:19.080
<v Speaker 3>So yeah, all right, close enough? Sweet? So why oh

319
00:15:19.120 --> 00:15:19.919
<v Speaker 3>go ahead, Luke.

320
00:15:19.879 --> 00:15:21.440
<v Speaker 2>Can I ask you about service side?

321
00:15:21.440 --> 00:15:21.919
<v Speaker 3>Rendering.

322
00:15:22.360 --> 00:15:25.039
<v Speaker 4>Sure, so service side rendering is a thing that is

323
00:15:25.080 --> 00:15:28.240
<v Speaker 4>not supported out the box. It is something that you

324
00:15:28.279 --> 00:15:30.519
<v Speaker 4>can get with like a third party module. That's not

325
00:15:30.519 --> 00:15:32.360
<v Speaker 4>something we do at work, but I know that's like

326
00:15:32.399 --> 00:15:35.120
<v Speaker 4>a use case that some people care about and have done.

327
00:15:35.519 --> 00:15:38.200
<v Speaker 4>I don't know how it integrates with RAILS though, because,

328
00:15:38.240 --> 00:15:40.159
<v Speaker 4>like I said, we don't personally use it at work.

329
00:15:40.200 --> 00:15:40.519
<v Speaker 2>Thank you.

330
00:15:41.039 --> 00:15:44.840
<v Speaker 5>It's not people who kind of start in Ruby. They

331
00:15:44.919 --> 00:15:49.080
<v Speaker 5>start service side first. That's what you get. Yeah, yeah,

332
00:15:49.120 --> 00:15:55.080
<v Speaker 5>and they transition to a client side rendered model, which

333
00:15:55.159 --> 00:15:58.840
<v Speaker 5>is one I went through and learning food was quite drastic.

334
00:15:59.000 --> 00:16:02.120
<v Speaker 5>You know, you really you really do have to reorganize

335
00:16:02.159 --> 00:16:05.919
<v Speaker 5>things and the way you think them did. Do you

336
00:16:06.039 --> 00:16:10.759
<v Speaker 5>think of ELM as a client side framework?

337
00:16:11.039 --> 00:16:12.000
<v Speaker 3>Oh? Yeah, absolutely.

338
00:16:12.039 --> 00:16:13.879
<v Speaker 4>I mean, like I said, I think if it is,

339
00:16:14.039 --> 00:16:16.440
<v Speaker 4>you know, if I'm building something complex, I want ELM

340
00:16:16.480 --> 00:16:18.639
<v Speaker 4>to help me with that. If I'm building something where

341
00:16:18.679 --> 00:16:21.039
<v Speaker 4>the client side interaction is really simple, I just wouldn't

342
00:16:21.039 --> 00:16:23.559
<v Speaker 4>bother with any you know, compile the JAS technology. I

343
00:16:23.600 --> 00:16:27.120
<v Speaker 4>probably wouldn't even you know, bother with a JS framework.

344
00:16:27.159 --> 00:16:29.200
<v Speaker 4>I just write plain old JAS.

345
00:16:29.279 --> 00:16:29.480
<v Speaker 3>You know.

346
00:16:29.919 --> 00:16:31.960
<v Speaker 4>If I'm talking to just a handful of lines here,

347
00:16:32.080 --> 00:16:34.200
<v Speaker 4>just to you know, wire a button up to do

348
00:16:34.240 --> 00:16:37.759
<v Speaker 4>something you know, slightly unusual. That's kind of what jobscript

349
00:16:37.759 --> 00:16:40.879
<v Speaker 4>was originally designed for. And I think it's you know,

350
00:16:41.039 --> 00:16:43.120
<v Speaker 4>it's it's probably not worth the hassle of doing anything

351
00:16:43.159 --> 00:16:45.679
<v Speaker 4>custom at the build level if you if you know

352
00:16:45.720 --> 00:16:48.080
<v Speaker 4>it's going to be really small. But on the other hand,

353
00:16:48.080 --> 00:16:49.399
<v Speaker 4>a lot of times you know it's going to be

354
00:16:49.440 --> 00:16:51.200
<v Speaker 4>something really big and complex. And I think that's where

355
00:16:51.200 --> 00:16:51.759
<v Speaker 4>ELM shines.

356
00:16:52.120 --> 00:16:54.120
<v Speaker 1>Yeah, I feel like we're kind of like past the

357
00:16:54.200 --> 00:16:59.000
<v Speaker 1>stage right where we only write small stuff. Literally, I mean,

358
00:16:59.519 --> 00:17:02.200
<v Speaker 1>shoot these small projects that I don't think I'm writing

359
00:17:02.279 --> 00:17:05.920
<v Speaker 1>much JS on, Suddenly I have ten JSS files like

360
00:17:06.400 --> 00:17:08.039
<v Speaker 1>and I was, I was just like, this is a

361
00:17:08.079 --> 00:17:08.680
<v Speaker 1>simple app.

362
00:17:08.720 --> 00:17:10.240
<v Speaker 3>Like what happened in this way?

363
00:17:10.279 --> 00:17:13.440
<v Speaker 4>It works well, you know, I mean to A counterpoint

364
00:17:13.480 --> 00:17:16.480
<v Speaker 4>to that is recently I was writing a documentation generator

365
00:17:16.559 --> 00:17:18.279
<v Speaker 4>and that is something where you know, I mean, it

366
00:17:18.359 --> 00:17:21.920
<v Speaker 4>is almost all static HTML. And I actually tried to

367
00:17:21.960 --> 00:17:23.279
<v Speaker 4>have a goal of I was like, let's see if

368
00:17:23.319 --> 00:17:26.000
<v Speaker 4>I can make this work even if someone has JavaScript disabled.

369
00:17:26.519 --> 00:17:28.839
<v Speaker 4>And I was able to do it with absolutely everything

370
00:17:28.960 --> 00:17:31.319
<v Speaker 4>except for I wanted to have a little search box

371
00:17:31.359 --> 00:17:33.200
<v Speaker 4>that would filter things like as you typed into it.

372
00:17:33.359 --> 00:17:35.359
<v Speaker 4>So I basically made it so that search box only

373
00:17:35.359 --> 00:17:38.480
<v Speaker 4>appears if you have JavaScript enabled and then everything else.

374
00:17:38.519 --> 00:17:40.799
<v Speaker 4>But I mean the whole all the JavaScript code on

375
00:17:40.799 --> 00:17:42.799
<v Speaker 4>that page, you know, fits on one screen. I don't

376
00:17:42.799 --> 00:17:45.279
<v Speaker 4>even have to use a scroll bar, right, So yeah,

377
00:17:45.279 --> 00:17:47.720
<v Speaker 4>I didn't bother with a build step for that.

378
00:17:48.119 --> 00:17:49.240
<v Speaker 3>Nice. Yeah.

379
00:17:49.279 --> 00:17:51.759
<v Speaker 1>And I think one thing that I would throw into

380
00:17:51.799 --> 00:17:55.680
<v Speaker 1>the ring is I definitely have gotten a lot of

381
00:17:56.079 --> 00:17:59.559
<v Speaker 1>for the low JS code sites, right, Like I've gotten

382
00:17:59.599 --> 00:18:03.400
<v Speaker 1>a ton of workout of Stimulus, So that's been great too.

383
00:18:03.640 --> 00:18:08.440
<v Speaker 1>So talk to me about why I should pick ELM,

384
00:18:08.759 --> 00:18:11.200
<v Speaker 1>Like what maybe what the right use case would be

385
00:18:11.319 --> 00:18:14.920
<v Speaker 1>for for somebody that's considering it, and maybe.

386
00:18:14.680 --> 00:18:17.960
<v Speaker 4>A wrong case if you're aware of that. I mean,

387
00:18:17.960 --> 00:18:21.319
<v Speaker 4>I think the main use case is just you have

388
00:18:21.559 --> 00:18:24.559
<v Speaker 4>an application that's, like Luke said, something that's basically a

389
00:18:24.599 --> 00:18:28.759
<v Speaker 4>desktop app in the browser, something that's like gonna be

390
00:18:29.119 --> 00:18:34.759
<v Speaker 4>pretty complex, and so some here are some I don't know,

391
00:18:34.920 --> 00:18:39.720
<v Speaker 4>interesting facts about ELM. If you look at JS framework

392
00:18:39.759 --> 00:18:42.559
<v Speaker 4>benchmarks and you put ELM into those benchmarks, ELM does

393
00:18:42.599 --> 00:18:45.759
<v Speaker 4>extremely well in those benchmarks, Like it's really fast generally speaking,

394
00:18:45.799 --> 00:18:50.200
<v Speaker 4>outperforms react outperforms view. I think there's like one benchmark

395
00:18:50.240 --> 00:18:53.240
<v Speaker 4>where like the latest Angular outperformed it in one of

396
00:18:53.279 --> 00:18:55.839
<v Speaker 4>the like micro benchmarks, and all the others Elms faster

397
00:18:55.880 --> 00:18:59.319
<v Speaker 4>than it. So it's it's it's it runs really fast. Also,

398
00:18:59.559 --> 00:19:03.640
<v Speaker 4>compiled asset size, it's basically smaller than anything but swelt Felt.

399
00:19:03.680 --> 00:19:05.240
<v Speaker 4>I mean, okay, it's hard to beat Spelt because it's

400
00:19:05.279 --> 00:19:07.799
<v Speaker 4>like that's their whole point, that's what it was built for.

401
00:19:08.960 --> 00:19:11.759
<v Speaker 4>But generally speaking, in terms of compiled asset size, ELM

402
00:19:11.839 --> 00:19:14.839
<v Speaker 4>is smaller than everything Butt svelt for like real world.

403
00:19:14.680 --> 00:19:17.440
<v Speaker 3>Applications, And.

404
00:19:18.880 --> 00:19:21.799
<v Speaker 4>Yeah, it's it's just the output that you get is

405
00:19:21.880 --> 00:19:24.079
<v Speaker 4>very high quality. And then also the experience of building

406
00:19:24.079 --> 00:19:26.480
<v Speaker 4>the application is that it just feels really nice and

407
00:19:26.519 --> 00:19:30.000
<v Speaker 4>everything's like works really reliably. One of the biggest things

408
00:19:30.000 --> 00:19:33.440
<v Speaker 4>that I think for me, that I love about ELM

409
00:19:33.759 --> 00:19:37.200
<v Speaker 4>is that the ecosystem is totally separate. Like for our

410
00:19:37.240 --> 00:19:41.079
<v Speaker 4>front end, except for our legacy JS stuff, we don't

411
00:19:41.119 --> 00:19:45.359
<v Speaker 4>use NPM. We just use ELM's package system. And the

412
00:19:45.440 --> 00:19:48.640
<v Speaker 4>really critical difference there is that everything in the ELM

413
00:19:48.680 --> 00:19:52.079
<v Speaker 4>package ecosystem is one hundred percent l It's just all

414
00:19:52.119 --> 00:19:54.680
<v Speaker 4>built on this same set of shared primitives, this sort

415
00:19:54.720 --> 00:19:58.440
<v Speaker 4>of different foundational api of how to interact with the browser,

416
00:19:58.839 --> 00:20:02.160
<v Speaker 4>which means that we don't get these like you know

417
00:20:02.359 --> 00:20:04.319
<v Speaker 4>errors sort of sneaking into our system and like oh,

418
00:20:04.359 --> 00:20:07.000
<v Speaker 4>this library had an incompatibility with that library and they

419
00:20:07.039 --> 00:20:09.279
<v Speaker 4>were one of them was you know, doing something that

420
00:20:09.279 --> 00:20:11.160
<v Speaker 4>it shouldn't have been doing. It's like, no, they all

421
00:20:11.200 --> 00:20:14.160
<v Speaker 4>play by the same rules. A way of thinking of

422
00:20:14.200 --> 00:20:17.279
<v Speaker 4>this is it's like, well, imagine if javas started with

423
00:20:17.440 --> 00:20:21.720
<v Speaker 4>typescript in e S six in twenty twenty rather than

424
00:20:21.799 --> 00:20:26.920
<v Speaker 4>in you know, the nineties. You know, how much better

425
00:20:26.960 --> 00:20:29.599
<v Speaker 4>would people have? How much better of an ecosystem would

426
00:20:29.599 --> 00:20:32.079
<v Speaker 4>people have made with the benefit of hindsight and with

427
00:20:32.160 --> 00:20:35.359
<v Speaker 4>also without having to do all these backwards compatibility hacks

428
00:20:35.359 --> 00:20:38.920
<v Speaker 4>for old hacks that people used to do previously. And

429
00:20:38.960 --> 00:20:40.799
<v Speaker 4>in a lot of ways, ELM is sort of the

430
00:20:40.839 --> 00:20:44.200
<v Speaker 4>result of like that plus sort of going even further

431
00:20:44.279 --> 00:20:45.839
<v Speaker 4>and saying, what if we didn't even need to take

432
00:20:45.920 --> 00:20:49.839
<v Speaker 4>JavaScript as a language as the foundation, and somewhat miraculously

433
00:20:50.079 --> 00:20:52.400
<v Speaker 4>there there actually is an ecosystem there. You know, it's

434
00:20:52.480 --> 00:20:55.319
<v Speaker 4>obviously it's not as big as NPM because no ecosystem

435
00:20:55.359 --> 00:20:57.440
<v Speaker 4>is as big as NPM. But I mean if you

436
00:20:57.480 --> 00:21:00.200
<v Speaker 4>go to package dot, ELM, dash Lang, dot Org, I

437
00:21:00.240 --> 00:21:02.160
<v Speaker 4>mean you can just browse through these packages. There's a

438
00:21:02.240 --> 00:21:05.960
<v Speaker 4>ton of packages and they're all they're nice things like

439
00:21:06.000 --> 00:21:09.200
<v Speaker 4>semantic versioning is actually enforced. So what that means is

440
00:21:09.519 --> 00:21:12.400
<v Speaker 4>if I go to publish a package and I'm going

441
00:21:12.440 --> 00:21:14.920
<v Speaker 4>to actually delete this function I decided it was a

442
00:21:14.960 --> 00:21:18.279
<v Speaker 4>bad idea, I'm going to take it out. If I

443
00:21:18.319 --> 00:21:21.839
<v Speaker 4>don't bump the major version number, the package manager will

444
00:21:21.839 --> 00:21:23.680
<v Speaker 4>actually reject that and it'll say, no, no, that's a

445
00:21:23.680 --> 00:21:25.799
<v Speaker 4>breaking change. You have to bump the major version number

446
00:21:25.839 --> 00:21:28.680
<v Speaker 4>for breaking change. So and there are other you know,

447
00:21:28.759 --> 00:21:30.079
<v Speaker 4>things that clearly will break.

448
00:21:29.880 --> 00:21:32.200
<v Speaker 3>Compatibility that it'll do that for.

449
00:21:32.400 --> 00:21:35.519
<v Speaker 4>So when I get a package from ELM package, I

450
00:21:35.599 --> 00:21:37.920
<v Speaker 4>know that I'm going to have this really nice upgrading experience.

451
00:21:37.920 --> 00:21:40.440
<v Speaker 4>And to be honest, I feel pretty spoiled by that

452
00:21:40.480 --> 00:21:42.599
<v Speaker 4>because every time I like, I still use NPM for

453
00:21:42.680 --> 00:21:45.079
<v Speaker 4>like some side projects like command line tools and stuff,

454
00:21:45.599 --> 00:21:48.039
<v Speaker 4>and whenever I go to upgrade, like immediately like five

455
00:21:48.079 --> 00:21:50.920
<v Speaker 4>things break. I pray my packages. I'm just used to

456
00:21:51.039 --> 00:21:54.920
<v Speaker 4>things breaking, but an ailment's opposite. Whenever I upgrade my

457
00:21:54.920 --> 00:21:57.880
<v Speaker 4>packages I expect unless there are major version bumps, in

458
00:21:57.880 --> 00:21:59.400
<v Speaker 4>which case, you know, I expect to have to make

459
00:21:59.440 --> 00:22:02.920
<v Speaker 4>some changes. If it's all minor and patch versions, I'm

460
00:22:02.960 --> 00:22:04.839
<v Speaker 4>just like, yeah, just upgrade, and then I expect everything

461
00:22:04.839 --> 00:22:09.119
<v Speaker 4>to just still work perfectly. And that's normally what I get.

462
00:22:09.160 --> 00:22:12.039
<v Speaker 4>I mean, of course bugs can happen, but but yeah,

463
00:22:12.039 --> 00:22:14.119
<v Speaker 4>I mean certainly I expect everything to compile again, and

464
00:22:14.160 --> 00:22:15.279
<v Speaker 4>that that has always been true.

465
00:22:15.640 --> 00:22:18.720
<v Speaker 1>It's pretty nice. It does sound very nice. I think

466
00:22:18.920 --> 00:22:22.519
<v Speaker 1>my experience rail sits somewhere in between where most people

467
00:22:22.720 --> 00:22:25.519
<v Speaker 1>most of the time do a great job and then

468
00:22:25.599 --> 00:22:29.440
<v Speaker 1>occasionally you just get completely surprised and bit but yeah,

469
00:22:30.240 --> 00:22:36.000
<v Speaker 1>so yeah, yeah, okay, so maybe okay, So ELM is

470
00:22:36.000 --> 00:22:38.319
<v Speaker 1>is faster, it's you know, smaller.

471
00:22:39.160 --> 00:22:42.880
<v Speaker 4>You love your experience in ELM. The compiler runs faster

472
00:22:42.920 --> 00:22:46.640
<v Speaker 4>than typescript. Too fair in the experience of people who

473
00:22:46.720 --> 00:22:49.880
<v Speaker 4>use both what about the wood the F word? The

474
00:22:50.079 --> 00:22:52.759
<v Speaker 4>F would I only know one F word you might

475
00:22:52.759 --> 00:22:54.799
<v Speaker 4>be referring to, And I'm not sure how it pertains

476
00:22:54.839 --> 00:22:56.039
<v Speaker 4>to our technical discussions.

477
00:22:57.319 --> 00:22:57.559
<v Speaker 3>ELM.

478
00:22:57.720 --> 00:23:01.079
<v Speaker 2>ELM is functional. Oh functional programming.

479
00:23:01.400 --> 00:23:04.720
<v Speaker 5>Yeah, now, this is this is something I've seen a

480
00:23:04.759 --> 00:23:08.640
<v Speaker 5>bit about that was longer than what I was thinking of. Yeah, right,

481
00:23:09.240 --> 00:23:10.599
<v Speaker 5>I didn't say it was a full a lot of word,

482
00:23:10.640 --> 00:23:12.519
<v Speaker 5>but it is the threat, and it was on.

483
00:23:12.519 --> 00:23:14.359
<v Speaker 1>My list of things to ask and I didn't. I

484
00:23:14.400 --> 00:23:15.400
<v Speaker 1>didn't recognize that.

485
00:23:15.519 --> 00:23:16.519
<v Speaker 3>Yeah, yeah, go ahead.

486
00:23:17.640 --> 00:23:20.319
<v Speaker 5>Back in the day, hack and years was full of

487
00:23:20.519 --> 00:23:24.319
<v Speaker 5>stuff on a Haskel and it just used to make

488
00:23:24.319 --> 00:23:27.640
<v Speaker 5>me angry and confused. And I genuine believe that Haskell

489
00:23:27.720 --> 00:23:30.559
<v Speaker 5>has probably set functional programming back twenty years.

490
00:23:31.079 --> 00:23:32.680
<v Speaker 3>You know, you might be right about that.

491
00:23:32.799 --> 00:23:37.440
<v Speaker 2>To be honest, that's a don't don't at me.

492
00:23:39.240 --> 00:23:42.279
<v Speaker 4>Well, I mean, that's a that's a controversial statement to

493
00:23:42.359 --> 00:23:45.039
<v Speaker 4>make in the functional programming community, but I think I

494
00:23:45.039 --> 00:23:47.279
<v Speaker 4>could be more nuanced about it than that, which.

495
00:23:47.079 --> 00:23:50.000
<v Speaker 5>Is let me let me just say that I feel

496
00:23:50.200 --> 00:23:52.880
<v Speaker 5>off put off by the fact that says it's functional.

497
00:23:52.920 --> 00:23:56.240
<v Speaker 5>This fills me with fear to see that, just to

498
00:23:56.279 --> 00:23:58.000
<v Speaker 5>see the F word in a language.

499
00:23:58.640 --> 00:24:01.960
<v Speaker 2>I know I'm wrong. I believe that the ELM does.

500
00:24:01.759 --> 00:24:04.519
<v Speaker 5>Provide a speriod development experience, and Mike, you said if

501
00:24:04.559 --> 00:24:06.839
<v Speaker 5>it didn't, people wouldn't be applying for jobs doing it,

502
00:24:07.279 --> 00:24:08.559
<v Speaker 5>so I totally believe you.

503
00:24:08.720 --> 00:24:11.440
<v Speaker 4>Well, check it out, go to ELM dash lang dot

504
00:24:11.559 --> 00:24:14.200
<v Speaker 4>org and and you'll see that it doesn't self describe

505
00:24:14.200 --> 00:24:17.039
<v Speaker 4>as a functional language. It uses a different word. What's

506
00:24:17.039 --> 00:24:21.359
<v Speaker 4>the would a delightful language? Ah, because that's what it's about, right,

507
00:24:21.400 --> 00:24:26.119
<v Speaker 4>It does sound at friendly and like, yes, technically if

508
00:24:26.119 --> 00:24:28.440
<v Speaker 4>you go to Wikipedia, it's classified as a functional language,

509
00:24:28.440 --> 00:24:31.039
<v Speaker 4>but that's really not a big as big a part

510
00:24:31.079 --> 00:24:35.160
<v Speaker 4>of ELM's identity as being a language that's really user friendly.

511
00:24:35.519 --> 00:24:39.279
<v Speaker 4>It's really uh. I think just because you know, the

512
00:24:39.599 --> 00:24:42.680
<v Speaker 4>languages that Evan used were functional languages. You know that

513
00:24:42.680 --> 00:24:44.799
<v Speaker 4>that he said, hey, that I had a better experience

514
00:24:44.839 --> 00:24:48.119
<v Speaker 4>in college using these sort of more obscure languages. I

515
00:24:48.160 --> 00:24:49.920
<v Speaker 4>want to try and bring something like that, you know,

516
00:24:49.960 --> 00:24:52.720
<v Speaker 4>to the modern world. I think it's it's more about

517
00:24:52.720 --> 00:24:57.079
<v Speaker 4>the legacy than about trying to advance a particular like

518
00:24:57.119 --> 00:25:01.599
<v Speaker 4>agenda or viewpoint and just finding that, you know, Evan

519
00:25:01.680 --> 00:25:03.720
<v Speaker 4>tried to put together a language and I think he

520
00:25:03.799 --> 00:25:05.960
<v Speaker 4>really succeeded that. It just has a lot of really

521
00:25:06.039 --> 00:25:09.759
<v Speaker 4>nice characteristics and a functional language is how he ended

522
00:25:09.839 --> 00:25:12.759
<v Speaker 4>up there. But I completely understand where you're coming from.

523
00:25:12.880 --> 00:25:14.960
<v Speaker 4>I have felt this too. When I was early on,

524
00:25:15.039 --> 00:25:17.440
<v Speaker 4>I had a friend who was really into functional programming

525
00:25:17.480 --> 00:25:19.200
<v Speaker 4>and who sort of would talk to me at lunch

526
00:25:19.240 --> 00:25:21.599
<v Speaker 4>about it and really convinced me that it was worth

527
00:25:21.599 --> 00:25:24.480
<v Speaker 4>my while to look into. But man, when I go

528
00:25:24.519 --> 00:25:27.119
<v Speaker 4>on Hacker News, when I when I started like watching

529
00:25:27.200 --> 00:25:29.640
<v Speaker 4>some talks, yeah, some of them were really nice, but

530
00:25:29.680 --> 00:25:32.119
<v Speaker 4>also some of them just felt like I just felt

531
00:25:32.200 --> 00:25:33.839
<v Speaker 4>very inadequate, like this is.

532
00:25:33.759 --> 00:25:35.480
<v Speaker 2>Like some club that I didn't belong to.

533
00:25:36.240 --> 00:25:38.279
<v Speaker 4>And if I'm being honest, part of the way that

534
00:25:38.359 --> 00:25:40.880
<v Speaker 4>I wrote element Action was in reaction to that. Like,

535
00:25:41.279 --> 00:25:43.079
<v Speaker 4>I don't think that it should be that way. I

536
00:25:43.079 --> 00:25:46.319
<v Speaker 4>think functional programming languages are languages just like you know,

537
00:25:46.359 --> 00:25:49.680
<v Speaker 4>other paradigms, and they should you know, sort of stand

538
00:25:49.680 --> 00:25:52.640
<v Speaker 4>and fall on their own merits, not because people are

539
00:25:52.680 --> 00:25:55.160
<v Speaker 4>talking about them as like you know I mentioned earlier,

540
00:25:55.240 --> 00:25:57.400
<v Speaker 4>like the phrase reason about that one really kind of

541
00:25:57.400 --> 00:26:00.839
<v Speaker 4>bothers me because it almost seems bi implicate that, like

542
00:26:00.960 --> 00:26:04.119
<v Speaker 4>other languages or other paradigms are unreasonable. And I think

543
00:26:04.160 --> 00:26:06.920
<v Speaker 4>there's plenty of ways to you know, criticize and to

544
00:26:07.160 --> 00:26:10.119
<v Speaker 4>talk about trade offs of different languages without all the

545
00:26:10.160 --> 00:26:12.480
<v Speaker 4>sort of like high minded like oh, this is just

546
00:26:12.519 --> 00:26:15.279
<v Speaker 4>like innately better. I think we can get more specific

547
00:26:15.319 --> 00:26:17.839
<v Speaker 4>and say, like, for example, like ELM programs, you know,

548
00:26:18.039 --> 00:26:20.359
<v Speaker 4>tend not to crash. That's just like a very concrete,

549
00:26:20.759 --> 00:26:22.640
<v Speaker 4>nice thing that we can agree is, you know, a

550
00:26:22.680 --> 00:26:24.759
<v Speaker 4>positive thing. I don't think we need to say like

551
00:26:24.839 --> 00:26:27.160
<v Speaker 4>ELM programs are easier to reason about and you know,

552
00:26:27.279 --> 00:26:30.880
<v Speaker 4>are more elegant or something like that. I just yeah,

553
00:26:31.200 --> 00:26:34.640
<v Speaker 4>I think it's the way that functional programming languages, and

554
00:26:34.880 --> 00:26:37.400
<v Speaker 4>in particular I think, like you said, Haskell, I think

555
00:26:37.720 --> 00:26:39.599
<v Speaker 4>historically the way that Haskell has been talked about in

556
00:26:39.759 --> 00:26:42.400
<v Speaker 4>Hacker News and elsewhere a lot of the time is

557
00:26:43.279 --> 00:26:45.519
<v Speaker 4>is not really doing the people who like to use

558
00:26:45.559 --> 00:26:46.720
<v Speaker 4>these languages any favors.

559
00:26:48.000 --> 00:26:51.599
<v Speaker 5>What's the ELM community like in twenty twenty you use

560
00:26:51.880 --> 00:26:54.079
<v Speaker 5>touched briefly on how to get a job, and now

561
00:26:54.279 --> 00:26:56.519
<v Speaker 5>where do things happen? And how does it feel to

562
00:26:56.559 --> 00:26:57.799
<v Speaker 5>be part of the OLM community?

563
00:26:58.519 --> 00:26:59.079
<v Speaker 3>Great question.

564
00:26:59.240 --> 00:27:01.559
<v Speaker 4>So I would say the two main places that people

565
00:27:01.599 --> 00:27:05.279
<v Speaker 4>hang out would be on ELM discourse and on ELM slack.

566
00:27:05.559 --> 00:27:07.519
<v Speaker 4>So I can remind me I can put some links

567
00:27:07.519 --> 00:27:10.279
<v Speaker 4>in the show notes to those. But yeah, so discourse

568
00:27:10.400 --> 00:27:12.559
<v Speaker 4>is for sort of more long form discussions. Slack is

569
00:27:12.599 --> 00:27:15.839
<v Speaker 4>from real time discussions. I generally recommend to people to

570
00:27:15.880 --> 00:27:19.160
<v Speaker 4>start off with elm Slack because the Beginner's channel there

571
00:27:19.240 --> 00:27:21.599
<v Speaker 4>is just full of really friendly, helpful people who will

572
00:27:21.640 --> 00:27:25.599
<v Speaker 4>just answer questions in real time. It's a honestly, it's

573
00:27:25.920 --> 00:27:28.519
<v Speaker 4>the friendliest community I've ever been a part of. And

574
00:27:28.559 --> 00:27:31.079
<v Speaker 4>I say that with affection for the Ruby community, but

575
00:27:31.319 --> 00:27:33.039
<v Speaker 4>I just, I don't know, Maybe it's just the ELM

576
00:27:33.039 --> 00:27:34.920
<v Speaker 4>community just has a special place in my heart, but

577
00:27:34.960 --> 00:27:37.839
<v Speaker 4>I mean, everybody's just really nice and really friendly, and

578
00:27:38.559 --> 00:27:40.279
<v Speaker 4>I don't know, I just have a lot of friends

579
00:27:40.279 --> 00:27:43.039
<v Speaker 4>there and just think very fondly of it. When I

580
00:27:43.079 --> 00:27:45.720
<v Speaker 4>think about what I recommend to people in terms of

581
00:27:46.200 --> 00:27:48.720
<v Speaker 4>getting into the community, I always say ELM Slack. And

582
00:27:48.720 --> 00:27:51.359
<v Speaker 4>then the next place I mentioned is discourse. But that's

583
00:27:51.359 --> 00:27:52.720
<v Speaker 4>not to say that there aren't other places, like I

584
00:27:52.759 --> 00:27:54.480
<v Speaker 4>know there's an ELM subreddit and things like that, but

585
00:27:54.519 --> 00:27:57.200
<v Speaker 4>I think those are kind of the two main places.

586
00:27:57.640 --> 00:27:59.559
<v Speaker 2>Pre pandemic a really big place.

587
00:28:00.119 --> 00:28:02.920
<v Speaker 4>We had an increasing number of ELM conferences, So I

588
00:28:02.920 --> 00:28:06.119
<v Speaker 4>think back in twenty fifteen we had zero ELM conferences.

589
00:28:06.519 --> 00:28:08.279
<v Speaker 4>In twenty nineteen we'd gotten all the way up to

590
00:28:08.319 --> 00:28:10.880
<v Speaker 4>four different ELM conferences, and there was going to be

591
00:28:10.880 --> 00:28:13.799
<v Speaker 4>in ELM Japan for the first time in twenty twenty,

592
00:28:14.079 --> 00:28:16.000
<v Speaker 4>which unfortunately had to be called off along with all

593
00:28:16.000 --> 00:28:20.200
<v Speaker 4>the other twenty twenty ELM conferences. So hopefully, knock on wood,

594
00:28:20.240 --> 00:28:22.559
<v Speaker 4>those will be coming back after the world gets back

595
00:28:22.599 --> 00:28:25.519
<v Speaker 4>to normal. But I really miss it. I just have

596
00:28:25.599 --> 00:28:27.839
<v Speaker 4>a lot of great memories of just getting to meet

597
00:28:27.839 --> 00:28:31.119
<v Speaker 4>people in person and you know, exchange ideas and.

598
00:28:32.640 --> 00:28:33.799
<v Speaker 3>Yeah, awesome.

599
00:28:34.119 --> 00:28:39.799
<v Speaker 1>Yeah, I think not necessarily to rehash functional stuff per se.

600
00:28:39.880 --> 00:28:43.240
<v Speaker 1>But I mean I think one of the you talked

601
00:28:43.240 --> 00:28:46.000
<v Speaker 1>about like nice communities, right, or we were kind of

602
00:28:46.039 --> 00:28:48.720
<v Speaker 1>talking about nice communities, and you're like, well, I love

603
00:28:48.839 --> 00:28:51.200
<v Speaker 1>ELM even more than I like Ruby's community, right, And

604
00:28:51.319 --> 00:28:54.599
<v Speaker 1>I think, I mean, to be frank, there's something, there's

605
00:28:54.640 --> 00:28:59.319
<v Speaker 1>some sort of thing, right, nice communities and how you

606
00:28:59.400 --> 00:29:02.799
<v Speaker 1>advocate for your language, you know, I think kind of

607
00:29:02.799 --> 00:29:03.680
<v Speaker 1>go hand in hand.

608
00:29:03.799 --> 00:29:03.920
<v Speaker 3>Right.

609
00:29:04.400 --> 00:29:08.279
<v Speaker 1>I like Ruby, and I feel like not not taking

610
00:29:08.279 --> 00:29:10.920
<v Speaker 1>my Ruby Bible so to speak, and be beating people

611
00:29:10.960 --> 00:29:15.079
<v Speaker 1>over the head that right makes people amenable to wanting

612
00:29:15.119 --> 00:29:16.559
<v Speaker 1>to join the Ruby community.

613
00:29:16.599 --> 00:29:19.240
<v Speaker 3>And I feel like I have never been browbeat by

614
00:29:19.279 --> 00:29:19.839
<v Speaker 3>an own.

615
00:29:19.680 --> 00:29:25.599
<v Speaker 1>Bible, So I have a positive opinion of the ol community, right,

616
00:29:26.240 --> 00:29:29.400
<v Speaker 1>whereas I have been smacked by the JavaScript in the

617
00:29:29.440 --> 00:29:32.839
<v Speaker 1>Haskell two by four's you know quite a lot, right, No,

618
00:29:34.079 --> 00:29:37.240
<v Speaker 1>so yeah, I think that makes a lot of sense. Yeah, anyway,

619
00:29:37.240 --> 00:29:41.559
<v Speaker 1>I'm a big fan of like nice communities. Otherwise, I

620
00:29:41.680 --> 00:29:43.599
<v Speaker 1>think we have programming, you know.

621
00:29:43.720 --> 00:29:46.440
<v Speaker 4>That's I think that's that's sort of the one of

622
00:29:46.440 --> 00:29:48.240
<v Speaker 4>the changes we can be in the world, you know,

623
00:29:48.799 --> 00:29:51.319
<v Speaker 4>Like you know, like min Swan, it's just a great

624
00:29:51.519 --> 00:29:53.279
<v Speaker 4>you know, Matt's is nice to we are nice, Like

625
00:29:53.880 --> 00:29:56.799
<v Speaker 4>I love that. It's it's just a great like mantra

626
00:29:56.880 --> 00:29:58.720
<v Speaker 4>to live by, like, yeah, let's let's try to be

627
00:29:58.799 --> 00:29:59.400
<v Speaker 4>nice to each other.

628
00:29:59.440 --> 00:29:59.599
<v Speaker 3>You know.

629
00:30:00.359 --> 00:30:03.599
<v Speaker 1>I agree so that that particular one always bothers me,

630
00:30:03.720 --> 00:30:06.000
<v Speaker 1>not because it not because the idea bothers me, but

631
00:30:06.039 --> 00:30:09.440
<v Speaker 1>because what happens when Matts dies or what happened if

632
00:30:09.480 --> 00:30:12.799
<v Speaker 1>Matt's like you know, I don't know, like if something

633
00:30:12.880 --> 00:30:17.799
<v Speaker 1>happens to Matt's and he suddenly not nice, Like we've

634
00:30:17.839 --> 00:30:21.799
<v Speaker 1>had enough bad news in twenty twenty. All right, I'll

635
00:30:21.839 --> 00:30:24.400
<v Speaker 1>knock up with guys. I'm not trying to suggest that

636
00:30:24.480 --> 00:30:27.079
<v Speaker 1>this would happen. I'm just it always like worries me.

637
00:30:27.119 --> 00:30:27.519
<v Speaker 3>What if?

638
00:30:27.680 --> 00:30:30.640
<v Speaker 1>Sorry, but yeah, no, I like nice communities and I've

639
00:30:30.680 --> 00:30:34.359
<v Speaker 1>always like it's part of the reason why, uh, for me,

640
00:30:34.480 --> 00:30:37.119
<v Speaker 1>the Elixir community has always you know, had some sort

641
00:30:37.160 --> 00:30:39.799
<v Speaker 1>of draw right, Like I feel like they've always tried

642
00:30:39.839 --> 00:30:42.839
<v Speaker 1>to be like make me feel like they're going to

643
00:30:42.880 --> 00:30:44.640
<v Speaker 1>be a nice community if I come join them.

644
00:30:44.839 --> 00:30:49.200
<v Speaker 4>So I think another another interesting thing, so you know,

645
00:30:49.400 --> 00:30:51.920
<v Speaker 4>to maybe draw a bit of contrast. But I think

646
00:30:51.960 --> 00:30:54.119
<v Speaker 4>they're sort of coming at the like, let's have a

647
00:30:54.200 --> 00:30:57.519
<v Speaker 4>nice community from different angles. Evan has always said, like, hey,

648
00:30:57.599 --> 00:31:00.519
<v Speaker 4>let's you know, it's great if you like el compared

649
00:31:00.519 --> 00:31:02.440
<v Speaker 4>to you know, what you're using before, but let's not

650
00:31:02.519 --> 00:31:04.920
<v Speaker 4>bash other languages. You know, like we can say like, hey,

651
00:31:04.960 --> 00:31:07.160
<v Speaker 4>I prefer this, but we don't need to like talk

652
00:31:07.200 --> 00:31:09.799
<v Speaker 4>smac about you know, whatever we were using before.

653
00:31:10.440 --> 00:31:14.240
<v Speaker 5>It's too late because I've done it already.

654
00:31:14.640 --> 00:31:17.599
<v Speaker 4>But at the same time, he also says, you know, hey,

655
00:31:17.799 --> 00:31:19.920
<v Speaker 4>I don't want to Like people would ask like, hey,

656
00:31:19.920 --> 00:31:23.119
<v Speaker 4>should we call ourselves Elmists or Elmer's or you know,

657
00:31:23.319 --> 00:31:25.279
<v Speaker 4>arborists or like what what you know, what name should

658
00:31:25.279 --> 00:31:27.480
<v Speaker 4>we use? And evyone was like, how about just ELM programmers,

659
00:31:27.519 --> 00:31:28.880
<v Speaker 4>Because at the end of the day, it's a tool,

660
00:31:29.160 --> 00:31:31.200
<v Speaker 4>you know, it's not It's not like we need to

661
00:31:31.200 --> 00:31:33.200
<v Speaker 4>sign up for religion here. It's like, you know, it's

662
00:31:33.240 --> 00:31:35.240
<v Speaker 4>okay if you like ELM for this problem, and it's

663
00:31:35.279 --> 00:31:37.440
<v Speaker 4>okay if you like other things for other problems. We

664
00:31:37.480 --> 00:31:40.720
<v Speaker 4>don't need to you know, self self identify as like

665
00:31:40.759 --> 00:31:44.319
<v Speaker 4>that strongly with this tool that we're using. And I

666
00:31:44.359 --> 00:31:47.319
<v Speaker 4>think that sort of reminds me of it's like the

667
00:31:47.319 --> 00:31:50.240
<v Speaker 4>opposite of the thing you were saying earlier about functional programming,

668
00:31:50.279 --> 00:31:53.039
<v Speaker 4>Like there are definitely some people I've met who for

669
00:31:53.119 --> 00:31:54.440
<v Speaker 4>whom it's not just a tool.

670
00:31:54.440 --> 00:31:55.440
<v Speaker 3>It's not just a paradigm.

671
00:31:55.599 --> 00:31:57.960
<v Speaker 4>It's sort of like a way of life or or

672
00:31:58.160 --> 00:32:01.000
<v Speaker 4>like something that you know needs to be preached as

673
00:32:01.000 --> 00:32:03.000
<v Speaker 4>opposed to just you know, I think there's an important

674
00:32:03.039 --> 00:32:05.519
<v Speaker 4>difference between that and saying like hey, here's this nice thing,

675
00:32:05.680 --> 00:32:08.000
<v Speaker 4>you know, or hey, this has nice properties. We can

676
00:32:08.039 --> 00:32:10.559
<v Speaker 4>talk about it in sort of a calm way without

677
00:32:10.759 --> 00:32:13.799
<v Speaker 4>without you know, forming factions. And I think that's, yeah,

678
00:32:13.880 --> 00:32:16.039
<v Speaker 4>that's that's also like a step in the right direction

679
00:32:16.160 --> 00:32:20.720
<v Speaker 4>towards having nice communities. Removes the zelotry from it, and

680
00:32:21.039 --> 00:32:24.519
<v Speaker 4>it kind of just yeah, yeah, but you know, I mean, obviously,

681
00:32:24.599 --> 00:32:27.079
<v Speaker 4>like I'm a very passionate person, I really love ELM,

682
00:32:27.079 --> 00:32:30.519
<v Speaker 4>but you know that's not to say that, like I

683
00:32:30.559 --> 00:32:33.319
<v Speaker 4>you know, I'm not going to claim that ELM will

684
00:32:33.319 --> 00:32:35.920
<v Speaker 4>be the best language of for all time for every problem,

685
00:32:35.960 --> 00:32:38.200
<v Speaker 4>Like there are problems like I just talked about earlier

686
00:32:38.240 --> 00:32:41.039
<v Speaker 4>where I choose not to use ELM, and also there

687
00:32:41.079 --> 00:32:43.160
<v Speaker 4>you know, will it would be weird if this turned

688
00:32:43.200 --> 00:32:45.480
<v Speaker 4>out to be the last programming language anyone ever needed

689
00:32:45.519 --> 00:32:49.960
<v Speaker 4>for you know, this domain. Right, Like we're technologists. Technology evolves,

690
00:32:50.079 --> 00:32:51.680
<v Speaker 4>sooner or later, there's going to be something else.

691
00:32:52.440 --> 00:32:54.799
<v Speaker 3>Yeah, No, go ahead.

692
00:32:55.359 --> 00:32:59.680
<v Speaker 5>I was gonna say, speaking of evolution, how how has

693
00:32:59.720 --> 00:33:03.400
<v Speaker 5>the grown in the last five years.

694
00:33:03.839 --> 00:33:06.839
<v Speaker 4>That's a great question. You know, It's funny because I

695
00:33:06.839 --> 00:33:09.960
<v Speaker 4>think of it as a mixture of growth but also refinement,

696
00:33:10.079 --> 00:33:12.079
<v Speaker 4>and so some things have grown and other things have

697
00:33:12.160 --> 00:33:15.240
<v Speaker 4>sort of intentionally shrunk. So actually, back in twenty fifteen,

698
00:33:15.279 --> 00:33:17.119
<v Speaker 4>that was pretty close to a big turning point for

699
00:33:17.160 --> 00:33:20.200
<v Speaker 4>the language, which is to date, the biggest like breaking

700
00:33:20.279 --> 00:33:22.640
<v Speaker 4>change the language has ever had, like by a very

701
00:33:22.720 --> 00:33:27.240
<v Speaker 4>large margin, which was basically simplifying the foundational primitives of

702
00:33:27.240 --> 00:33:30.359
<v Speaker 4>the language. So originally there used to be this very

703
00:33:30.400 --> 00:33:32.720
<v Speaker 4>low level of concept called signals, and everything was built

704
00:33:32.720 --> 00:33:35.920
<v Speaker 4>out of signals, and at some point what we discovered

705
00:33:36.000 --> 00:33:39.559
<v Speaker 4>was that in practice, everybody tended to organize their signals

706
00:33:39.559 --> 00:33:42.480
<v Speaker 4>into this model, view and update concept. So you'd have

707
00:33:42.480 --> 00:33:44.759
<v Speaker 4>your model, which is like your application state, then you'd

708
00:33:44.759 --> 00:33:46.599
<v Speaker 4>have your view, which was a way to render that state,

709
00:33:46.640 --> 00:33:48.400
<v Speaker 4>and then you'd have update, which is a way of

710
00:33:48.440 --> 00:33:51.279
<v Speaker 4>transitioning from one state to another based on user input.

711
00:33:51.559 --> 00:33:53.480
<v Speaker 4>And those are sort of the three ingredients that everybody

712
00:33:53.480 --> 00:33:56.599
<v Speaker 4>would use. And at some point this became a library,

713
00:33:56.960 --> 00:33:59.039
<v Speaker 4>and then eventually it was like, you know what, why

714
00:33:59.079 --> 00:34:01.880
<v Speaker 4>don't we just make this the because signals are really

715
00:34:01.960 --> 00:34:04.759
<v Speaker 4>hard to learn and everybody uses them in the same

716
00:34:04.799 --> 00:34:08.079
<v Speaker 4>way anyway. So basically Evan said, yeah, we're gonna we're

717
00:34:08.079 --> 00:34:10.519
<v Speaker 4>going to move the foundation and say, now the foundation

718
00:34:10.719 --> 00:34:13.559
<v Speaker 4>is this this sort of model, view and update API

719
00:34:14.199 --> 00:34:17.760
<v Speaker 4>that everyone uses anyway. And that's what it's been ever since.

720
00:34:17.800 --> 00:34:20.880
<v Speaker 4>And it was a really nice simplification to the language

721
00:34:21.119 --> 00:34:24.760
<v Speaker 4>in my view, and it's sort of almost become synonymus

722
00:34:24.760 --> 00:34:28.199
<v Speaker 4>with elements that knows the ELM architecture, and that architecture

723
00:34:28.199 --> 00:34:30.480
<v Speaker 4>has since been ported to JavaScript, and you know, various

724
00:34:30.519 --> 00:34:32.920
<v Speaker 4>libraries and people seem to like to use it outside

725
00:34:32.960 --> 00:34:35.239
<v Speaker 4>the own community too, but making it like a first

726
00:34:35.320 --> 00:34:37.400
<v Speaker 4>last thing in the language I think was the biggest

727
00:34:37.400 --> 00:34:40.719
<v Speaker 4>way that elms change since those days. Other things that

728
00:34:40.760 --> 00:34:44.079
<v Speaker 4>have changed, so other things have like simplified and gone away.

729
00:34:44.079 --> 00:34:47.039
<v Speaker 4>There've been various API changes. The compiler has gotten a

730
00:34:47.079 --> 00:34:49.239
<v Speaker 4>lot faster since it was in those days. Like now

731
00:34:49.280 --> 00:34:51.320
<v Speaker 4>it's it's very fast. I mean it's normal to have

732
00:34:51.719 --> 00:34:54.440
<v Speaker 4>a scratch compiler usually should only take so we have

733
00:34:54.519 --> 00:34:56.320
<v Speaker 4>like four hundred thousand lines of code at work. Actually

734
00:34:56.320 --> 00:34:58.360
<v Speaker 4>I haven't measured this in a while, but generally speaking,

735
00:34:58.400 --> 00:35:00.599
<v Speaker 4>if you're doing an incremental recompile, expect it to be

736
00:35:00.760 --> 00:35:04.000
<v Speaker 4>under a second or like maybe about a second, depending

737
00:35:04.039 --> 00:35:06.239
<v Speaker 4>on what changed and like how big the how many

738
00:35:06.280 --> 00:35:09.119
<v Speaker 4>other modules that affects. Obviously lots of you know, bug

739
00:35:09.119 --> 00:35:11.719
<v Speaker 4>fixes and things like that, but really like the fundamental

740
00:35:11.719 --> 00:35:14.800
<v Speaker 4>experience of using ELM, I don't think has has changed

741
00:35:14.840 --> 00:35:17.000
<v Speaker 4>that much other than just sort of getting better. I

742
00:35:17.039 --> 00:35:21.880
<v Speaker 4>would say it's more refinements than anything else. We got

743
00:35:22.079 --> 00:35:24.599
<v Speaker 4>a nicer debugger, it does like time travel and stuff

744
00:35:24.639 --> 00:35:27.639
<v Speaker 4>like that out the box. And yeah, at this point

745
00:35:27.639 --> 00:35:30.960
<v Speaker 4>I would say the language has has gotten quite stable.

746
00:35:31.159 --> 00:35:34.840
<v Speaker 4>I don't really anticipate any major breaking changes in the

747
00:35:34.880 --> 00:35:38.239
<v Speaker 4>immediate future, which you know, for a language that's granted,

748
00:35:38.280 --> 00:35:41.400
<v Speaker 4>you know, not not been around for even a decade yet,

749
00:35:41.400 --> 00:35:43.280
<v Speaker 4>at this point, it's nice to see that it's sort

750
00:35:43.320 --> 00:35:45.000
<v Speaker 4>of starting to be like, Okay, this is this has

751
00:35:45.000 --> 00:35:47.599
<v Speaker 4>been vetted, this design is nice. We don't need to

752
00:35:48.199 --> 00:35:50.679
<v Speaker 4>like keep making big changes. There were like one or

753
00:35:50.679 --> 00:35:53.559
<v Speaker 4>two changes of various sizes that seem to be necessary

754
00:35:53.639 --> 00:35:55.679
<v Speaker 4>based on what we learned, but at this point it's like, yeah,

755
00:35:55.719 --> 00:35:57.800
<v Speaker 4>it seems to be working pretty well for people. One

756
00:35:58.239 --> 00:36:02.320
<v Speaker 4>possible which I don't want to promise because not clearly

757
00:36:02.320 --> 00:36:04.440
<v Speaker 4>that this will end up making sense. But you mentioned

758
00:36:04.480 --> 00:36:08.400
<v Speaker 4>earlier about desktop applications in the browser, and so one

759
00:36:08.400 --> 00:36:10.199
<v Speaker 4>thing that a lot of people ask me about is

760
00:36:10.199 --> 00:36:12.440
<v Speaker 4>web assembly. You know, what's what's the deal with like

761
00:36:12.559 --> 00:36:15.320
<v Speaker 4>ELM web assembly because ELM compiles the JavaScript. And the

762
00:36:15.360 --> 00:36:17.880
<v Speaker 4>short answer there is that ELM is designed to be

763
00:36:17.920 --> 00:36:21.000
<v Speaker 4>able to compile to web assembly in fact in a

764
00:36:21.039 --> 00:36:24.280
<v Speaker 4>backwards compatible way where even you're so one of the

765
00:36:24.280 --> 00:36:26.239
<v Speaker 4>things you can do with ELM's JavaScript inner opt. So

766
00:36:26.599 --> 00:36:28.599
<v Speaker 4>we use this at work for like there's some like

767
00:36:28.760 --> 00:36:31.559
<v Speaker 4>rich text like wuzywig editor that we use like little

768
00:36:31.559 --> 00:36:35.000
<v Speaker 4>things like that that's written in JavaScript. And one of

769
00:36:35.000 --> 00:36:36.599
<v Speaker 4>the things that ELM is designed to be able to

770
00:36:36.679 --> 00:36:39.559
<v Speaker 4>do is in the future to be able to compile

771
00:36:39.639 --> 00:36:42.400
<v Speaker 4>to web assembly instead of JavaScript and yet still be

772
00:36:42.480 --> 00:36:45.119
<v Speaker 4>able to be backwards compatible with not only your existing

773
00:36:45.159 --> 00:36:48.679
<v Speaker 4>ELM code, but that even includes your JavaScript innerupt This

774
00:36:48.719 --> 00:36:51.000
<v Speaker 4>is all like theoretically, you know, by design, but it's

775
00:36:51.000 --> 00:36:53.760
<v Speaker 4>not necessarily going to work out in practice if maybe

776
00:36:53.760 --> 00:36:56.920
<v Speaker 4>something surprising happens. But yeah, there's really no reason that

777
00:36:57.000 --> 00:36:59.239
<v Speaker 4>like from a design perspective, ELM could not compile to

778
00:36:59.239 --> 00:37:01.440
<v Speaker 4>web assembly if that turns out to be something that

779
00:37:01.960 --> 00:37:04.079
<v Speaker 4>people want. Of course, there are questions of like browser

780
00:37:04.119 --> 00:37:07.000
<v Speaker 4>support and things like that, but it's somewhat of an

781
00:37:07.000 --> 00:37:09.760
<v Speaker 4>exciting prospect to me that the code that I've already written,

782
00:37:09.840 --> 00:37:11.400
<v Speaker 4>or like all that you know, code we have at

783
00:37:11.400 --> 00:37:14.400
<v Speaker 4>work could someday just get just a really big, nice

784
00:37:14.440 --> 00:37:17.199
<v Speaker 4>performance upgrade by having a compiled the websmbly instead of

785
00:37:17.280 --> 00:37:20.480
<v Speaker 4>JavaScript without our having to really lift a finger. But

786
00:37:20.679 --> 00:37:22.480
<v Speaker 4>you know, that's sort of what you can get when

787
00:37:22.519 --> 00:37:26.440
<v Speaker 4>you have a language that's by design sort of compiling

788
00:37:26.519 --> 00:37:31.159
<v Speaker 4>to JavaScript as sort of a compilation target exclusively rather

789
00:37:31.199 --> 00:37:33.000
<v Speaker 4>than as you know, sort of like an enhancement on

790
00:37:33.119 --> 00:37:34.440
<v Speaker 4>top of JavaScript like typescript.

791
00:37:34.559 --> 00:37:34.960
<v Speaker 2>Is no.

792
00:37:35.039 --> 00:37:36.760
<v Speaker 5>I think Web simply had a bit of a tough

793
00:37:36.800 --> 00:37:39.800
<v Speaker 5>start in its in its life where the first time

794
00:37:39.840 --> 00:37:44.480
<v Speaker 5>anyone saw it was when it was mining bitcoins on

795
00:37:45.039 --> 00:37:48.639
<v Speaker 5>unwelcomely on your computer. So hopefully in future web senta

796
00:37:48.719 --> 00:37:51.360
<v Speaker 5>would be a bit brighter. That was really interesting what

797
00:37:51.360 --> 00:37:53.920
<v Speaker 5>you see that jobascript interrupts. So as a as a

798
00:37:54.840 --> 00:37:58.039
<v Speaker 5>semi reluctant front end dabbler, you know I am. I

799
00:37:58.079 --> 00:38:01.920
<v Speaker 5>am the front end builder of last results, and I

800
00:38:02.360 --> 00:38:08.480
<v Speaker 5>like to take relatively complete JavaScript components to solve a

801
00:38:08.559 --> 00:38:11.760
<v Speaker 5>problem which I have a lot of difficulty buildings. Say,

802
00:38:11.760 --> 00:38:14.119
<v Speaker 5>for example, I want to do to build, as you said,

803
00:38:14.159 --> 00:38:17.320
<v Speaker 5>a rich text editor, some kind of busy with tool.

804
00:38:17.679 --> 00:38:20.119
<v Speaker 5>I don't want to spend a lot of time doing that.

805
00:38:20.639 --> 00:38:22.800
<v Speaker 5>If I can just drop one in and sure it

806
00:38:22.880 --> 00:38:24.920
<v Speaker 5>might take me a couple of days to get it working,

807
00:38:25.239 --> 00:38:28.519
<v Speaker 5>but that sure beats six months writing one from scratch.

808
00:38:29.119 --> 00:38:33.960
<v Speaker 5>So how interoperable is ELM And do you cover that

809
00:38:34.079 --> 00:38:34.639
<v Speaker 5>in your book?

810
00:38:35.440 --> 00:38:37.920
<v Speaker 4>Yes, there's actually a whole chapter on that called talking

811
00:38:37.920 --> 00:38:43.800
<v Speaker 4>to JavaScript. And yeah, so ELM is definitely interoperable with JavaScript.

812
00:38:43.920 --> 00:38:46.159
<v Speaker 4>But the way that it does it is pretty clever

813
00:38:46.199 --> 00:38:49.159
<v Speaker 4>in my opinion, where it basically sort of segments the

814
00:38:49.199 --> 00:38:51.719
<v Speaker 4>JavaScript off and so they're sort of like ELM Land

815
00:38:51.760 --> 00:38:54.639
<v Speaker 4>and JavaScript Plan and you can get the two worlds

816
00:38:54.639 --> 00:38:56.400
<v Speaker 4>to talk to each other. That's why the chapter is

817
00:38:56.400 --> 00:39:00.400
<v Speaker 4>called Talking to JavaScript. But it's not a fluid so

818
00:39:00.440 --> 00:39:02.320
<v Speaker 4>you can't, for example, in the middle of your ELM

819
00:39:02.320 --> 00:39:05.679
<v Speaker 4>function just call an arbitrary JavaScript function. It's more like

820
00:39:05.880 --> 00:39:07.360
<v Speaker 4>the way I like to think of it as it's

821
00:39:07.559 --> 00:39:10.800
<v Speaker 4>somewhat like broadcasting an event. So ELM will say like, hey, JavaScript,

822
00:39:10.800 --> 00:39:12.239
<v Speaker 4>I want you to do this thing, and then on

823
00:39:12.280 --> 00:39:14.280
<v Speaker 4>the JavaScript side you have a listener set up and says, oh,

824
00:39:14.559 --> 00:39:16.360
<v Speaker 4>I hear that ELM wants me to do this thing, great,

825
00:39:16.679 --> 00:39:18.760
<v Speaker 4>I will do that thing, and then broadcast an event

826
00:39:18.800 --> 00:39:21.119
<v Speaker 4>back to ELM and ELM's listening for events from JavaScript.

827
00:39:21.519 --> 00:39:23.920
<v Speaker 4>And so in this way you have a very strong

828
00:39:23.960 --> 00:39:26.960
<v Speaker 4>abstraction boundary there, and so you can tell all the

829
00:39:27.000 --> 00:39:29.480
<v Speaker 4>things on ELM Land follow the rules that you're used to,

830
00:39:29.519 --> 00:39:31.239
<v Speaker 4>and all the things on JavaScript Plan. You know, it's

831
00:39:31.239 --> 00:39:32.719
<v Speaker 4>back to the wild West. But they can talk to

832
00:39:32.760 --> 00:39:34.440
<v Speaker 4>each other, so you can, you know, and the end

833
00:39:34.519 --> 00:39:36.360
<v Speaker 4>user has no idea this is happening. It's just, you know,

834
00:39:36.400 --> 00:39:38.920
<v Speaker 4>from their perspective, it's just a page. The other thing

835
00:39:38.960 --> 00:39:41.079
<v Speaker 4>you can do, and I covered both of these techniques

836
00:39:41.079 --> 00:39:44.079
<v Speaker 4>in the book, is actually you can use custom elements,

837
00:39:44.239 --> 00:39:47.119
<v Speaker 4>which is part of the Web component specification. I think

838
00:39:47.159 --> 00:39:50.719
<v Speaker 4>that ELM programmers might be in practice the biggest users

839
00:39:50.719 --> 00:39:54.400
<v Speaker 4>of web components just for interrupt because it turns out

840
00:39:54.440 --> 00:39:57.079
<v Speaker 4>to be a very convenient way to do interact with

841
00:39:57.159 --> 00:39:59.840
<v Speaker 4>JavaScript stuff. So the way if you're not familiar with

842
00:40:00.159 --> 00:40:01.239
<v Speaker 4>web components.

843
00:40:00.840 --> 00:40:03.159
<v Speaker 2>That bishim of web components.

844
00:40:03.679 --> 00:40:08.639
<v Speaker 4>Okay, so it's it's a relatively rarely used specification in

845
00:40:08.639 --> 00:40:11.079
<v Speaker 4>the browser, but it's basically a way to define a

846
00:40:11.280 --> 00:40:13.239
<v Speaker 4>custom element. At least this is the part of it

847
00:40:13.280 --> 00:40:14.000
<v Speaker 4>that we really use.

848
00:40:14.360 --> 00:40:14.719
<v Speaker 3>Technically.

849
00:40:14.800 --> 00:40:17.440
<v Speaker 4>Web components also covers like shadow down and things like that,

850
00:40:17.480 --> 00:40:20.840
<v Speaker 4>which not really important for the interropt purposes. But custom

851
00:40:20.880 --> 00:40:23.960
<v Speaker 4>elements in particular is a pretty straightforward idea for a feature,

852
00:40:23.960 --> 00:40:27.639
<v Speaker 4>which is basically, so you've got your built in htmail

853
00:40:27.679 --> 00:40:30.119
<v Speaker 4>elements like you got button and div and you know,

854
00:40:30.159 --> 00:40:32.519
<v Speaker 4>so on and so forth, and custom elements is a

855
00:40:32.559 --> 00:40:36.800
<v Speaker 4>way for you to in JavaScript define new elements which

856
00:40:36.920 --> 00:40:40.119
<v Speaker 4>whenever they're instantiating the browser. The browser just runs your

857
00:40:40.199 --> 00:40:42.599
<v Speaker 4>JavaScript code no matter how they got into the dom.

858
00:40:42.960 --> 00:40:46.480
<v Speaker 4>So in this way, what you can do is you

859
00:40:46.519 --> 00:40:48.840
<v Speaker 4>can start by saying, I want to define a new

860
00:40:48.880 --> 00:40:52.880
<v Speaker 4>custom element called I don't know, whizzywig dash Editor, and

861
00:40:52.920 --> 00:40:55.400
<v Speaker 4>whenever I see a tag, whenever the browser sees a

862
00:40:55.440 --> 00:40:57.639
<v Speaker 4>tag called wizzywig dash Editor, it's going to run this

863
00:40:57.719 --> 00:41:00.880
<v Speaker 4>custom JavaScript code that I have defined to set it

864
00:41:01.000 --> 00:41:03.760
<v Speaker 4>up and have it, you know, send events, and then

865
00:41:04.079 --> 00:41:06.360
<v Speaker 4>tear it down when it's all done. And then on

866
00:41:06.400 --> 00:41:08.360
<v Speaker 4>the ELM side, you just say, oh, I would like

867
00:41:08.400 --> 00:41:10.599
<v Speaker 4>to put it in an element here called wizzywig dash Editor,

868
00:41:10.599 --> 00:41:12.599
<v Speaker 4>and I'm going to give it these attributes, these properties

869
00:41:12.880 --> 00:41:14.960
<v Speaker 4>and set up these event handlers on it, and then

870
00:41:15.079 --> 00:41:17.239
<v Speaker 4>the browser will actually take care of of making the

871
00:41:17.280 --> 00:41:19.360
<v Speaker 4>communication happen because the browsers like, oh, you've added one

872
00:41:19.400 --> 00:41:20.880
<v Speaker 4>of these elements. I will go ahead and run my

873
00:41:20.920 --> 00:41:23.519
<v Speaker 4>hook for the custom element, and so on and so forth.

874
00:41:23.519 --> 00:41:25.840
<v Speaker 4>And Yeah, in the book we give examples of doing

875
00:41:25.880 --> 00:41:29.280
<v Speaker 4>interrop in both of those different styles. Yeah, the custom element, one,

876
00:41:29.320 --> 00:41:31.119
<v Speaker 4>of course, is is quite nice when you want to

877
00:41:31.159 --> 00:41:33.039
<v Speaker 4>have something like right in the middle of your dom,

878
00:41:33.599 --> 00:41:37.199
<v Speaker 4>like you know, a custom element, and then the other

879
00:41:37.239 --> 00:41:39.239
<v Speaker 4>style is more for like if you want to do

880
00:41:39.280 --> 00:41:41.320
<v Speaker 4>some processing, like you want to send it off to

881
00:41:42.159 --> 00:41:45.559
<v Speaker 4>like a JavaScript logging library or something like that.

882
00:41:45.920 --> 00:41:48.199
<v Speaker 1>It's my understanding that this is what we're doing when

883
00:41:48.280 --> 00:41:52.079
<v Speaker 1>we put custom components on the page with like React,

884
00:41:52.440 --> 00:41:53.119
<v Speaker 1>for example.

885
00:41:53.400 --> 00:41:57.480
<v Speaker 4>So React doesn't actually use the Web Component SPECK or

886
00:41:57.519 --> 00:41:59.719
<v Speaker 4>the custom Element spec. They have their own sort of

887
00:41:59.719 --> 00:42:02.440
<v Speaker 4>thing behind the scenes. I actually a few years ago

888
00:42:02.760 --> 00:42:05.679
<v Speaker 4>I went to a conference where one of the days

889
00:42:05.679 --> 00:42:08.360
<v Speaker 4>of the conference had a it was called a Creator's Summit,

890
00:42:08.400 --> 00:42:12.159
<v Speaker 4>and it was basically representatives from several different communities like

891
00:42:12.519 --> 00:42:15.400
<v Speaker 4>technologies working in the browser. So it was like me

892
00:42:15.519 --> 00:42:20.039
<v Speaker 4>from ELM and Tom Dale from Ember, and Andrew Clark

893
00:42:20.079 --> 00:42:24.880
<v Speaker 4>from React and Steven Fluinn from Angler and I totally

894
00:42:24.880 --> 00:42:26.320
<v Speaker 4>blanking on who was there from view, but it was

895
00:42:26.320 --> 00:42:30.000
<v Speaker 4>two people. It was Diviya and anyway, so people from

896
00:42:30.039 --> 00:42:33.920
<v Speaker 4>different print and technologies. And one of the questions that

897
00:42:34.119 --> 00:42:36.519
<v Speaker 4>someone asked at one point of the group was like, Hey,

898
00:42:36.760 --> 00:42:39.400
<v Speaker 4>do any of us really think that we should change

899
00:42:39.440 --> 00:42:42.840
<v Speaker 4>our component systems over to use custom elements and like

900
00:42:43.000 --> 00:42:46.199
<v Speaker 4>web components or should we just continue doing our own things?

901
00:42:46.199 --> 00:42:47.760
<v Speaker 4>And we all agree that we should all continue doing

902
00:42:47.760 --> 00:42:49.920
<v Speaker 4>our own things. And I mentioned like, hey, by the way,

903
00:42:49.960 --> 00:42:51.880
<v Speaker 4>we actually we really liked it for interropt but yeah,

904
00:42:51.920 --> 00:42:56.039
<v Speaker 4>we still use our own representation internally for actual rendering,

905
00:42:56.559 --> 00:42:58.800
<v Speaker 4>and everybody has good reasons for doing that.

906
00:42:58.840 --> 00:43:00.840
<v Speaker 3>I think that's probably likely the it's going to stay.

907
00:43:00.920 --> 00:43:03.920
<v Speaker 3>That's an interesting tidbit. Yeah, I've been educating.

908
00:43:05.360 --> 00:43:07.000
<v Speaker 4>I have been too, but I've forgotten a lot of

909
00:43:07.039 --> 00:43:08.199
<v Speaker 4>it over the years.

910
00:43:08.599 --> 00:43:13.280
<v Speaker 1>That's totally fair. Okay, So what is the testing land

911
00:43:13.480 --> 00:43:17.760
<v Speaker 1>like out there? Like, I mean, is the tooling ecosystem good?

912
00:43:18.679 --> 00:43:22.639
<v Speaker 1>Does it have edges? I mean you already mentioned earlier

913
00:43:22.719 --> 00:43:25.519
<v Speaker 1>the time traveling, the debugging, you know, the time traveling

914
00:43:25.519 --> 00:43:26.559
<v Speaker 1>debugger that you already have.

915
00:43:27.079 --> 00:43:31.159
<v Speaker 4>So yeah, so great question. So for unit testing, there's

916
00:43:31.239 --> 00:43:35.000
<v Speaker 4>ELM Test and basically there isn't really any ELM specific

917
00:43:35.039 --> 00:43:38.239
<v Speaker 4>sort of integration test stuff because usually when you're dealing

918
00:43:38.280 --> 00:43:40.639
<v Speaker 4>with integration tests, you sort of need to spin up

919
00:43:40.639 --> 00:43:43.639
<v Speaker 4>a browser and like actually you know, like run the

920
00:43:43.639 --> 00:43:46.440
<v Speaker 4>code to see what what actual dom elements up here there.

921
00:43:47.000 --> 00:43:50.400
<v Speaker 4>If you want to test the sort of ELM virtual

922
00:43:50.440 --> 00:43:52.599
<v Speaker 4>don code, you can do that in ELM test itself,

923
00:43:52.599 --> 00:43:54.440
<v Speaker 4>and you can actually run queries on your own like

924
00:43:54.639 --> 00:43:57.519
<v Speaker 4>internal like staying within elm land virtual dom and say like, oh,

925
00:43:57.559 --> 00:43:59.400
<v Speaker 4>I expect that to be a button here and a

926
00:43:59.440 --> 00:44:01.639
<v Speaker 4>div there and so forth. But of course you know

927
00:44:01.719 --> 00:44:04.559
<v Speaker 4>that it's always possible that the real browser might do

928
00:44:04.599 --> 00:44:07.639
<v Speaker 4>something different if you have certain extensions installed or things

929
00:44:07.679 --> 00:44:09.400
<v Speaker 4>like that, or you have other jobs on the page.

930
00:44:09.400 --> 00:44:11.920
<v Speaker 4>That's that's you know, messing with the dom. So if

931
00:44:11.960 --> 00:44:14.480
<v Speaker 4>you want an integration test, ELM doesn't really have anything

932
00:44:14.519 --> 00:44:16.480
<v Speaker 4>special to say there. You can use like Cyprus or

933
00:44:16.480 --> 00:44:19.440
<v Speaker 4>something like that. But for unit testing, ELM Test is

934
00:44:19.599 --> 00:44:21.840
<v Speaker 4>kind of, you know, similarly to ELM itself, designed to

935
00:44:21.880 --> 00:44:23.960
<v Speaker 4>be really nice, easy to use out the box, and

936
00:44:24.039 --> 00:44:25.920
<v Speaker 4>really fast, and I think it does a.

937
00:44:26.320 --> 00:44:26.960
<v Speaker 3>Good job with that.

938
00:44:27.079 --> 00:44:30.079
<v Speaker 4>There's a chapter on that of the book also, Okay,

939
00:44:30.159 --> 00:44:31.320
<v Speaker 4>even better, even better.

940
00:44:31.719 --> 00:44:32.400
<v Speaker 3>I don't know.

941
00:44:32.599 --> 00:44:35.320
<v Speaker 1>Is there anything that you specifically feel like we maybe

942
00:44:35.360 --> 00:44:37.719
<v Speaker 1>haven't touched on yet that you're like, well, well we

943
00:44:37.760 --> 00:44:39.159
<v Speaker 1>should really talk about this thing.

944
00:44:39.840 --> 00:44:41.679
<v Speaker 4>That's a good question. No, I think it's been an

945
00:44:41.719 --> 00:44:45.280
<v Speaker 4>interesting discussion. I can't think of anything. Okay, we'll also

946
00:44:45.400 --> 00:44:46.239
<v Speaker 4>put hit.

947
00:44:46.679 --> 00:44:48.519
<v Speaker 1>You also put in your notes that you had an

948
00:44:48.760 --> 00:44:51.519
<v Speaker 1>interesting story around how you came to be the author

949
00:44:51.559 --> 00:44:54.280
<v Speaker 1>of the Oh yeah, so.

950
00:44:54.239 --> 00:44:55.920
<v Speaker 4>The way I came to be the author of ELM

951
00:44:55.960 --> 00:44:58.440
<v Speaker 4>in Action was that. And this is actually in the

952
00:44:58.320 --> 00:45:00.280
<v Speaker 4>in the forward of the book. So I got I

953
00:45:00.320 --> 00:45:02.159
<v Speaker 4>got an email from Manning saying they were going to

954
00:45:02.159 --> 00:45:03.960
<v Speaker 4>do a book about ELM and they wanted to know,

955
00:45:04.039 --> 00:45:06.000
<v Speaker 4>like they, I guess I'd given a talk about ELM

956
00:45:06.079 --> 00:45:08.079
<v Speaker 4>or something at that point, and I was a, I

957
00:45:08.119 --> 00:45:10.000
<v Speaker 4>don't know, part of the early ELM community, I guess,

958
00:45:10.320 --> 00:45:12.480
<v Speaker 4>and they asked if I wanted to get on a

959
00:45:12.519 --> 00:45:15.199
<v Speaker 4>call to talk about, you know, people I might recommend

960
00:45:15.239 --> 00:45:17.440
<v Speaker 4>for writing the book. And at this point I co

961
00:45:17.519 --> 00:45:19.920
<v Speaker 4>authored a very early book on React and I'd written

962
00:45:19.920 --> 00:45:21.840
<v Speaker 4>some blog posts and that was kind of about it,

963
00:45:22.000 --> 00:45:24.760
<v Speaker 4>given like a talk or two, and I'd never you know,

964
00:45:24.840 --> 00:45:26.679
<v Speaker 4>written a whole book myself or anything like that. But

965
00:45:26.840 --> 00:45:29.480
<v Speaker 4>I got on the call and I started getting really

966
00:45:29.639 --> 00:45:33.039
<v Speaker 4>animated about just explaining about like, well, it's really important

967
00:45:33.079 --> 00:45:34.960
<v Speaker 4>that this is a book about building things, and you know,

968
00:45:35.400 --> 00:45:38.079
<v Speaker 4>kind of like a reaction to some of the stuff

969
00:45:38.119 --> 00:45:40.039
<v Speaker 4>Luke was saying earlier and trying to make it you know,

970
00:45:40.360 --> 00:45:44.800
<v Speaker 4>like not about you know, this like high minded stuff,

971
00:45:44.800 --> 00:45:46.480
<v Speaker 4>but just about let's just build a thing in a

972
00:45:46.519 --> 00:45:49.440
<v Speaker 4>nice programming language. And then I was like, oh, and also,

973
00:45:49.480 --> 00:45:51.360
<v Speaker 4>you want to make sure to start by teach this

974
00:45:51.400 --> 00:45:53.400
<v Speaker 4>first and then teach that later, and teach this in

975
00:45:53.440 --> 00:45:55.840
<v Speaker 4>terms of that, because I'd also been like, you know,

976
00:45:56.039 --> 00:45:58.239
<v Speaker 4>had some experience teaching ELM to people at this point,

977
00:45:58.440 --> 00:45:59.760
<v Speaker 4>and of course, by the end of the call, I

978
00:45:59.760 --> 00:46:01.960
<v Speaker 4>was like, all right, I'll write it, which which I

979
00:46:02.000 --> 00:46:05.800
<v Speaker 4>suspect was kind of what they were. You know, why

980
00:46:05.840 --> 00:46:07.440
<v Speaker 4>they reached out to me to ask me for names

981
00:46:07.480 --> 00:46:09.000
<v Speaker 4>in the first place. That may have been the goal,

982
00:46:09.039 --> 00:46:12.360
<v Speaker 4>and if so, you know, well played. But I did

983
00:46:12.440 --> 00:46:14.760
<v Speaker 4>not intend to write a book about ELM until they

984
00:46:14.800 --> 00:46:16.840
<v Speaker 4>reached out to me and asked me for some names

985
00:46:16.840 --> 00:46:18.360
<v Speaker 4>of people who might be good to write it, which

986
00:46:18.360 --> 00:46:21.199
<v Speaker 4>I also recommended. There are other people who've written ELM

987
00:46:21.239 --> 00:46:24.239
<v Speaker 4>books too, But yeah, I thought that was funny. I

988
00:46:24.239 --> 00:46:26.960
<v Speaker 4>don't know, maybe other authors have had that similar experience,

989
00:46:27.039 --> 00:46:28.480
<v Speaker 4>but it was the first for me.

990
00:46:28.840 --> 00:46:32.519
<v Speaker 5>Where can I go to look at sites made using ELM?

991
00:46:32.840 --> 00:46:36.000
<v Speaker 5>So we've got a no reading site? What other sites

992
00:46:36.039 --> 00:46:38.039
<v Speaker 5>are on it? You're like, look, ELM can do.

993
00:46:38.039 --> 00:46:39.440
<v Speaker 3>This, Oh, good question.

994
00:46:39.599 --> 00:46:42.119
<v Speaker 4>I think there is a built with ELM GitHub brief

995
00:46:42.159 --> 00:46:45.480
<v Speaker 4>O somewhere built with ELM dot Co. Yeah, let's say

996
00:46:45.519 --> 00:46:48.519
<v Speaker 4>they just got a bunch of a bunch of sites here. Yeah,

997
00:46:48.599 --> 00:46:51.280
<v Speaker 4>screenshots and links to various things.

998
00:46:51.480 --> 00:46:53.400
<v Speaker 2>I think I will go and check that out. Oh

999
00:46:53.440 --> 00:46:54.519
<v Speaker 2>that's what I assumed as well.

1000
00:46:54.840 --> 00:46:55.119
<v Speaker 3>Cool.

1001
00:46:55.159 --> 00:46:58.719
<v Speaker 1>Then I think we should probably roll into pics maybe

1002
00:46:58.800 --> 00:47:01.159
<v Speaker 1>unless we have something else. Sounds like we don't have

1003
00:47:01.159 --> 00:47:03.440
<v Speaker 1>anything else. Okay, sweet Luke, did you want to start

1004
00:47:03.519 --> 00:47:03.880
<v Speaker 1>us off?

1005
00:47:04.000 --> 00:47:04.440
<v Speaker 3>I did.

1006
00:47:04.639 --> 00:47:07.960
<v Speaker 5>I have been building front ends this week finally enough,

1007
00:47:08.039 --> 00:47:11.280
<v Speaker 5>and I've been using a few components from a guy

1008
00:47:11.360 --> 00:47:14.480
<v Speaker 5>called Rick who has a kind of small software business

1009
00:47:14.559 --> 00:47:18.760
<v Speaker 5>in the Netherlands called Pekina dot nl and it's p

1010
00:47:19.079 --> 00:47:23.239
<v Speaker 5>qi na dot nl And these are just kind of

1011
00:47:23.519 --> 00:47:28.360
<v Speaker 5>far upload components and a few really useful things, and

1012
00:47:28.559 --> 00:47:32.960
<v Speaker 5>I've been using them to upload to Linod's objects storage

1013
00:47:33.719 --> 00:47:37.440
<v Speaker 5>s free alike storage system, which is my second pick

1014
00:47:37.760 --> 00:47:42.079
<v Speaker 5>and I have picked up before. But the object component

1015
00:47:42.599 --> 00:47:47.599
<v Speaker 5>object storage component on Linode does not talk to the

1016
00:47:47.719 --> 00:47:52.559
<v Speaker 5>standard AWSS three gem in Ruby, and if you start

1017
00:47:52.639 --> 00:47:55.280
<v Speaker 5>talking to it and following the S three guide, you

1018
00:47:55.320 --> 00:47:59.199
<v Speaker 5>will quickly find it is not S three compatible out

1019
00:47:59.199 --> 00:48:03.199
<v Speaker 5>of the box. You must add to your rails set

1020
00:48:03.280 --> 00:48:07.400
<v Speaker 5>up a magic option, and that magic option is the

1021
00:48:07.559 --> 00:48:12.760
<v Speaker 5>HTP continued timeout and then everything magically starts working. So

1022
00:48:13.000 --> 00:48:16.800
<v Speaker 5>a qualified pick layer for Lino System. It's a lot

1023
00:48:16.960 --> 00:48:20.360
<v Speaker 5>cheaper than S free, it's a lot cheaper than Google Plant,

1024
00:48:20.400 --> 00:48:23.199
<v Speaker 5>but you do need to know the magic option to

1025
00:48:23.239 --> 00:48:24.920
<v Speaker 5>get it working with Ruby.

1026
00:48:25.159 --> 00:48:28.000
<v Speaker 4>Fun fact about them, they're actually headquartered in Philadelphia, which

1027
00:48:28.039 --> 00:48:30.039
<v Speaker 4>is where I live, and they host meetups at their

1028
00:48:30.079 --> 00:48:34.480
<v Speaker 4>office which is actually in a bank, like they're actually

1029
00:48:34.519 --> 00:48:34.840
<v Speaker 4>they have.

1030
00:48:35.199 --> 00:48:36.440
<v Speaker 2>They've got their own bank.

1031
00:48:37.039 --> 00:48:39.119
<v Speaker 4>Well the building used to be a bank, so they

1032
00:48:39.159 --> 00:48:41.360
<v Speaker 4>actually have like servers down where the vaults used to be.

1033
00:48:41.400 --> 00:48:44.000
<v Speaker 3>It's pretty cool. Nice, that's pretty sweet.

1034
00:48:44.480 --> 00:48:48.360
<v Speaker 1>Yeah, all right, So I have a couple of picks today.

1035
00:48:48.559 --> 00:48:52.079
<v Speaker 1>One is just kind of something that I was encountering

1036
00:48:52.119 --> 00:48:55.199
<v Speaker 1>this past week. So I was working on a thing

1037
00:48:55.280 --> 00:48:58.480
<v Speaker 1>recently where so you know, I have my consulting firm

1038
00:48:58.559 --> 00:49:02.280
<v Speaker 1>or whatever, and we had a clients come in that

1039
00:49:02.440 --> 00:49:05.840
<v Speaker 1>wanted a very they they wanted some they wanted some

1040
00:49:05.880 --> 00:49:10.280
<v Speaker 1>customizations to Shopify and in the end, you know, they

1041
00:49:10.440 --> 00:49:14.039
<v Speaker 1>what they wanted was like Shopify Pro or plus or

1042
00:49:14.039 --> 00:49:16.000
<v Speaker 1>whatever it is that costs like a couple grand a

1043
00:49:16.000 --> 00:49:19.719
<v Speaker 1>month or whatever. So they that wasn't really in their budget.

1044
00:49:19.800 --> 00:49:24.119
<v Speaker 1>And so anyway, long story shorts, after a really long

1045
00:49:24.199 --> 00:49:27.199
<v Speaker 1>process of talking about what they wanted and what they

1046
00:49:27.280 --> 00:49:29.320
<v Speaker 1>you know, discovering what they needed and things like that,

1047
00:49:29.760 --> 00:49:31.559
<v Speaker 1>kind of turns out that they just kind of wanted

1048
00:49:31.559 --> 00:49:33.760
<v Speaker 1>a small thing, and we ended up we ended up

1049
00:49:33.760 --> 00:49:37.880
<v Speaker 1>basically proposing to put together a site or whatever, basically

1050
00:49:37.960 --> 00:49:41.119
<v Speaker 1>a custom thing for them. It's using Spree, you know

1051
00:49:41.360 --> 00:49:44.280
<v Speaker 1>or whatever. So you know, if you remember from way

1052
00:49:44.360 --> 00:49:47.280
<v Speaker 1>back or whatever they I mean, they're obviously still around

1053
00:49:47.280 --> 00:49:50.119
<v Speaker 1>Spree and whatever the thing they came out of them later,

1054
00:49:50.599 --> 00:49:51.920
<v Speaker 1>I can't remember off the top of myself.

1055
00:49:52.000 --> 00:49:55.159
<v Speaker 2>The e commerce yep.

1056
00:49:55.239 --> 00:49:58.360
<v Speaker 1>So you know, it works. It's pretty and you know,

1057
00:49:59.039 --> 00:50:01.119
<v Speaker 1>if you're just trying to up more or less e

1058
00:50:01.159 --> 00:50:05.360
<v Speaker 1>commerce thing for somebody and it looks like a monolith

1059
00:50:05.360 --> 00:50:08.079
<v Speaker 1>and it quacks like a monolith like rails was, Spree

1060
00:50:08.320 --> 00:50:10.639
<v Speaker 1>does the tricks. So that was pretty cool, yep. And

1061
00:50:10.679 --> 00:50:13.159
<v Speaker 1>so then for my second my second thing, I was

1062
00:50:13.280 --> 00:50:15.519
<v Speaker 1>looking at my list of stuff and something that I

1063
00:50:15.559 --> 00:50:17.400
<v Speaker 1>haven't recommended here that's on my list.

1064
00:50:18.000 --> 00:50:20.920
<v Speaker 3>It so a book series that I read a really

1065
00:50:20.960 --> 00:50:21.679
<v Speaker 3>long time ago.

1066
00:50:22.000 --> 00:50:24.639
<v Speaker 1>I don't know what it is, but I've always like

1067
00:50:24.760 --> 00:50:27.639
<v Speaker 1>kind of liked Merlin. You know, the Mage King Arthur

1068
00:50:27.760 --> 00:50:30.880
<v Speaker 1>kind of era stuff, right, So you know, if you're

1069
00:50:30.880 --> 00:50:35.360
<v Speaker 1>familiar with you're familiar with Legends stuff, some of them

1070
00:50:35.400 --> 00:50:38.320
<v Speaker 1>talk about him in a pretty cool manner, and he's

1071
00:50:38.360 --> 00:50:41.599
<v Speaker 1>always kind of has, you know, a pretty cool atmosphere

1072
00:50:41.599 --> 00:50:43.760
<v Speaker 1>to him. But then there's something, I mean, he's got

1073
00:50:43.800 --> 00:50:49.599
<v Speaker 1>some creepy elements to him, right, Like, but but there Merlin,

1074
00:50:49.960 --> 00:50:53.239
<v Speaker 1>both both actually, but but Merlin specifically as what I'm

1075
00:50:53.280 --> 00:50:55.880
<v Speaker 1>talking about. But there's this book series where basically the

1076
00:50:55.920 --> 00:51:00.840
<v Speaker 1>author imagines Merlin how I became Merlin as a kid, basically,

1077
00:51:01.440 --> 00:51:03.800
<v Speaker 1>And so i'll paste this in here. But it's a

1078
00:51:03.840 --> 00:51:07.800
<v Speaker 1>really fantastic series or whatever. I remember I read this.

1079
00:51:08.440 --> 00:51:11.400
<v Speaker 1>It's been a long time now, but it's like, I

1080
00:51:11.480 --> 00:51:15.159
<v Speaker 1>don't know, I have a handful of like ten to

1081
00:51:15.199 --> 00:51:17.480
<v Speaker 1>twenty like books series that like, I'm just like, these

1082
00:51:17.519 --> 00:51:20.239
<v Speaker 1>are awesome, everyone should read them, and it's on that list.

1083
00:51:20.280 --> 00:51:22.519
<v Speaker 3>So it's pretty sweet. And I'll paste it.

1084
00:51:22.480 --> 00:51:24.440
<v Speaker 1>In here in just a second once I actually find

1085
00:51:24.519 --> 00:51:27.360
<v Speaker 1>a link to it on Amazon. So yeah, that was

1086
00:51:27.400 --> 00:51:29.679
<v Speaker 1>super cool. I just really liked that it gave him

1087
00:51:30.119 --> 00:51:32.599
<v Speaker 1>a lot of motivations and I mean, if you think

1088
00:51:32.639 --> 00:51:35.880
<v Speaker 1>about it, I think one of my favorite things here is,

1089
00:51:36.039 --> 00:51:38.559
<v Speaker 1>you know, Morgan la Fez always liked the evil bad guy,

1090
00:51:38.639 --> 00:51:41.639
<v Speaker 1>right so, and not a lot of people explain why

1091
00:51:41.679 --> 00:51:44.880
<v Speaker 1>she's like evil and bad. It's like, oh, she hates Merlin?

1092
00:51:44.960 --> 00:51:49.199
<v Speaker 1>Why because I don't know? So, And yeah, that was

1093
00:51:49.239 --> 00:51:51.800
<v Speaker 1>one of my favorite parts about it. But Richard, did

1094
00:51:51.800 --> 00:51:52.719
<v Speaker 1>you have anything maybe?

1095
00:51:52.880 --> 00:51:53.159
<v Speaker 3>Yes?

1096
00:51:53.519 --> 00:51:56.199
<v Speaker 4>I got a couple. Okay, First one, I realized that

1097
00:51:56.239 --> 00:51:58.960
<v Speaker 4>I'm extremely late to the party here. But Battle Star

1098
00:51:59.039 --> 00:52:04.159
<v Speaker 4>Galactica good. I never watched it when everybody else watched it,

1099
00:52:04.159 --> 00:52:06.679
<v Speaker 4>when it was like actually a new thing, but it

1100
00:52:06.719 --> 00:52:08.480
<v Speaker 4>was always kind of on my back burn and be like, oh, yeah,

1101
00:52:08.480 --> 00:52:10.440
<v Speaker 4>I should try that at some point, And yeah, it

1102
00:52:10.480 --> 00:52:13.239
<v Speaker 4>really holds up. It feels like watching a brand new

1103
00:52:13.320 --> 00:52:15.360
<v Speaker 4>series that just came out, except that I know it's

1104
00:52:15.559 --> 00:52:19.280
<v Speaker 4>all the episodes are available miraculously. So if anyone hasn't

1105
00:52:19.320 --> 00:52:22.000
<v Speaker 4>checked that out and you like, you know, sci fi

1106
00:52:22.079 --> 00:52:25.920
<v Speaker 4>type stuff, definitely recommend it. Second pick front End Masters.

1107
00:52:26.440 --> 00:52:28.719
<v Speaker 4>So I did an ELM course for them as well,

1108
00:52:28.800 --> 00:52:31.039
<v Speaker 4>so if you'll like more of a workshop style format.

1109
00:52:31.159 --> 00:52:33.639
<v Speaker 4>It covers a lot. There's a lot of overlap with

1110
00:52:33.679 --> 00:52:35.599
<v Speaker 4>the intro to ELM workshop that I did for them

1111
00:52:35.639 --> 00:52:38.480
<v Speaker 4>and the book. I also did an Advanced ELM workshop

1112
00:52:38.519 --> 00:52:40.599
<v Speaker 4>for them, which is sort of more for like once

1113
00:52:40.639 --> 00:52:43.320
<v Speaker 4>you've been into ELM for several months. So if you're

1114
00:52:43.320 --> 00:52:45.840
<v Speaker 4>interested in either of those, check them out front endmasters

1115
00:52:45.880 --> 00:52:48.599
<v Speaker 4>dot com. I'm also doing a RUST workshop for them,

1116
00:52:48.800 --> 00:52:51.119
<v Speaker 4>which will hopefully be out in April twenty twenty one.

1117
00:52:51.599 --> 00:52:53.559
<v Speaker 4>We will see. It's still a work in progress, but

1118
00:52:53.679 --> 00:52:58.199
<v Speaker 4>that's the goal. Third pick is this is this is

1119
00:52:58.199 --> 00:53:01.840
<v Speaker 4>gonna be a weird one BARB Medicine dot com. So

1120
00:53:02.320 --> 00:53:07.840
<v Speaker 4>this is basically two doctors, like MD doctors medical doctors

1121
00:53:08.360 --> 00:53:12.639
<v Speaker 4>are both really into strength training like lifting heavyweights and

1122
00:53:12.719 --> 00:53:14.480
<v Speaker 4>as you know, for health. And then also I mean,

1123
00:53:14.519 --> 00:53:18.199
<v Speaker 4>I guess some people do it competitively, and I've just

1124
00:53:18.360 --> 00:53:21.119
<v Speaker 4>gotten really into their stuff. It's like they're really nerdy

1125
00:53:21.159 --> 00:53:23.559
<v Speaker 4>about it, and they get into all these like details

1126
00:53:23.599 --> 00:53:27.280
<v Speaker 4>of like protein muscle synthesis and stuff like that, and

1127
00:53:27.800 --> 00:53:30.039
<v Speaker 4>they have like videos on YouTube and you know, like

1128
00:53:30.119 --> 00:53:32.719
<v Speaker 4>guides on their website. And I don't know, I've never

1129
00:53:32.760 --> 00:53:35.760
<v Speaker 4>really been somebody who likes to exercise for its own right,

1130
00:53:35.840 --> 00:53:37.960
<v Speaker 4>but I definitely like nerding out about things and so

1131
00:53:38.000 --> 00:53:40.000
<v Speaker 4>it's it's been kind of cool to read their stuff,

1132
00:53:40.039 --> 00:53:43.519
<v Speaker 4>and it's it's like, maybe enjoy that aspect of.

1133
00:53:43.480 --> 00:53:45.760
<v Speaker 3>It more awesome.

1134
00:53:46.199 --> 00:53:49.199
<v Speaker 1>I totally I can totally sympathize with the being late

1135
00:53:49.280 --> 00:53:51.440
<v Speaker 1>to the game thing. My wife and I neither one

1136
00:53:51.480 --> 00:53:54.639
<v Speaker 1>of us had watched any Star Treker entire lives. A

1137
00:53:54.639 --> 00:53:57.000
<v Speaker 1>few years ago we embarked on a journey and watched

1138
00:53:57.039 --> 00:53:58.440
<v Speaker 1>all of it, so.

1139
00:53:58.840 --> 00:54:00.880
<v Speaker 3>Like every every series.

1140
00:54:01.480 --> 00:54:04.639
<v Speaker 1>Yeah, like we watched everything, so it happened. I totally

1141
00:54:04.679 --> 00:54:06.760
<v Speaker 1>understand that thing where you get to a thing like

1142
00:54:06.840 --> 00:54:08.960
<v Speaker 1>really late, it's got it nice?

1143
00:54:09.119 --> 00:54:09.440
<v Speaker 3>Cool?

1144
00:54:09.679 --> 00:54:12.920
<v Speaker 1>Well, thanks, Oh, one more thing before we get Oh, actually,

1145
00:54:13.079 --> 00:54:14.760
<v Speaker 1>if people want to reach out to you, you know,

1146
00:54:14.840 --> 00:54:17.880
<v Speaker 1>find out more information, how do they get a hold

1147
00:54:17.920 --> 00:54:18.079
<v Speaker 1>of you?

1148
00:54:18.119 --> 00:54:18.760
<v Speaker 3>What's the best way.

1149
00:54:18.840 --> 00:54:22.599
<v Speaker 4>Yeah, I'm on Twitter, ELM, Slack and GitHub as rtie

1150
00:54:22.639 --> 00:54:26.440
<v Speaker 4>Feldbin and yeah you can find all my ELM projects

1151
00:54:26.480 --> 00:54:27.239
<v Speaker 4>and stuff there.

1152
00:54:27.079 --> 00:54:28.280
<v Speaker 3>And my on GitHub.

1153
00:54:28.320 --> 00:54:32.400
<v Speaker 4>And I not super active on Twitter, but I used

1154
00:54:32.400 --> 00:54:35.239
<v Speaker 4>to be more active. I decided I should be less

1155
00:54:35.239 --> 00:54:38.639
<v Speaker 4>active on it, but definitely still, you know, I'm on

1156
00:54:38.679 --> 00:54:40.599
<v Speaker 4>there and if people at me, I generally respond to

1157
00:54:40.639 --> 00:54:41.880
<v Speaker 4>things so awesome.

1158
00:54:42.000 --> 00:54:45.000
<v Speaker 3>We can get those links in the show notes as well. Awesome.

1159
00:54:45.119 --> 00:54:48.760
<v Speaker 1>Thanks for listening everybody, and we'll see you next time. Thanks,

1160
00:54:48.960 --> 00:54:49.639
<v Speaker 1>thanks for coming.
