Elm Town 57 – Brilliant ways to use Elm

MAY 30TH, 2023
|
01:07:40
Aaron Strick shares what it was like learning Elm at NoRedInk, and explains some of the "zany" (delightful) ways Elm is used at Brilliant.

Details
/
Transcript

[00:00:00] Jared: Hey folks. Welcome back to Elm Town. I'm your host, Jared Smith. We'll be visiting with Aaron Strick today.

[00:00:14] Sponsored by Logistically

[00:00:14] Jared: But first, let's talk about our sponsor. Logistically is the company where I work. At Logistically, we make transportation management software for third party logistics companies and shippers. I'm grateful that Logistically pays me to spend a bit of my time recording Elm Town podcast, as well as pays for our recurring production and hosting costs. We build the front end for all new features in Elm. We have over 100,000 lines of Elm code in production, and we're always eager to talk to folks who enjoy writing Elm. Please drop us a line, elmtown@logisticallyinc.com.

[00:00:47] I'll put a link in the show notes.

[00:00:50]

[00:00:55] Introducing Aaron Strick

[00:00:55] Jared: Now, let me introduce Aaron Strick. Aaron works at Brilliant writing Elm code and has, uh, formally worked at NoRedInk with such luminaries and Elm contributors as Richard Feldman. Uh, Tereza Sokol, even the creator of Elm, Evan Czaplicki, Tessa Kelly, Aaron VonderHaar, I could continue on and on, but we're now talking about Aaron.

[00:01:19] Aaron Strick also built his personal website with Elm pages and so we'll get into that and hopefully more. Aaron, welcome to Elm Town.

[00:01:28] Aaron: Thank you for having me. Yeah, there were, there were a lot of big Elm names at NoRedInk no, no question about it.

[00:01:35] Jared: Yeah, I thought about listing all of them out and I realized this is gonna take me all day. We're never going to actually have a conversation if I do that. So,

[00:01:43] Aaron: it end?

[00:01:44] Jared: yeah.

[00:01:47] An eclectic background

[00:01:47] Jared: So Aaron, from your LinkedIn profile, it says you have "an eclectic background that includes teaching kindergarten, linguistic field work in Kenya, segway tours and more."

[00:02:00] I wanna talk to you about how you got started in computing and programming, but this is a little too interesting to pass up. Could you tell us a little bit about this? Particularly I'm interested in linguistic field work in Kenya.

[00:02:12] Aaron: Sure. Yeah, most people usually actually, want to hear about the Segway tours, so I'm happy you asked about that to be honest. Um, but yeah, when I was in university, I studied linguistics, um, and I took a, a course on field work essentially, which is, you know, the study of like, how do you go out and like learn a language when there's no books about that language or anything like that.

[00:02:37] Um, and the professor was really great, um, and connected me to like a local town organization that was, um, a sister town to a small town in Kenya. Um, and they wanted to do, uh, one laptop per child. If you recall those, like, you know, the a hundred dollars laptop,

[00:02:58] Jared: Yeah, I

[00:02:59] Aaron: they wanted to do a deployment in an elementary school in their sister city in Kenya.

[00:03:04] And, um, they somehow knew the professor and they were looking for like a young, a young person, uh, who had some knowledge of computers, um, to, to sort of help them out. And I was able to get a little grant from my school if while I was out there, um, I did some field work. So, uh, the, the project that I did was sort of recording and transcribing, um, some like folk tales essentially from some of the local townspeople.

[00:03:35] Um, and then we took the transcriptions, um, which are in one of the like tribal languages of Kenya called Kidawida, um, which on the scale of languages, not particularly endangered. There's like, I think I, in the hundreds of thousands of speakers, which, you know, there's a lot of languages that have like, in the hundreds of speakers, so that's pretty healthy.

[00:03:58] Um, but there aren't many books. Um, and so we transcribed a lot of the stories and we put those, um, onto the laptops that we then deployed in the elementary school, um, so that the students could kind of read in their native, well, everyone in Kenya speaks three languages. Um, like their, their tribal language, English, and um, Swahili.

[00:04:21] I could be wrong about some of this. It was years ago, and that's a big statement, but you know, it's something like that. Um, uh, and so yeah, we put the stories onto the computer and that was kind of that project.

[00:04:33] Jared: Okay. So you said you had knowledge about computers. Did you have knowledge about different languages? Do you speak different languages? How, you know with this, how did this work?

[00:04:44] Aaron: Um, I spoke, uh, no, not really.

[00:04:48] Jared: Hmm.

[00:04:49] Aaron: as, as part of the requirement for the degree, you needed a certain proficiency in multiple languages. And so I had like medium college level Spanish and Hebrew. Um, but I, I couldn't really carry a conversation all that well with either of them these days.

[00:05:05] Jared: Sure. Sure. Okay. So then that's, that's really interesting.

[00:05:12] The impetus for Aaron's journey into computers

[00:05:12] Jared: But I guess we should probably get into computing and programming. How did you get started with that?

[00:05:16] Aaron: Uh, sure. So it's actually, it's funny you brought up my personal website, which is on Elm pages, cuz that was kind of the impetus for my entire journey into computers was like, when I was a teenager, I was like, I want to have. Aaron strick.com and for the first few years I used like a iWeb, which was like a, you know, WYSIWYG editor, uh, publisher.

[00:05:41] Um, but then I kind of moved to WordPress and I started tweaking the CSS and I started digging into the PHP a little bit. Um, and then I took a, like basically intro to computer science in college. Um, and always sort of with the end goal of kind of like doing some web development and, um, you know, maintaining my personal website.

[00:06:05] Um, that's always been kind of like the testing ground for, for stuff that I've, um, for like learning about computers. And when I, um, moved back to San Francisco where I grew up, um, you know, in like the mid 20 teens, um, I was kind of figuring out like my career and my jobs and all that. And I had always liked computers and there were people everywhere doing, you know, computer stuff.

[00:06:32] Um, so I was like, I should just make this my career. You can get paid more than what I'm doing. And I enjoy it. I clearly enjoy it. Um, I've been doing it just for fun. Um, so I sort of, I did, uh, one of the like coding bootcamps pretty early on, um, and just sort of transitioned that into my career.

[00:06:52] Jared: Okay. That's really neat. So, yeah, that makes sense too, because of where you're at in the Bay Area, right? I mean, it's just, it's everywhere, so it's hard not to, and if you were doing it on the side anyway, why not, right?

[00:07:06] Aaron: Yeah.

[00:07:06] Jared: Uh, . So, uh, that's really cool.

[00:07:10] Learning Elm at NoRedInk

[00:07:10] Jared: Um, you did a coding bootcamp. Did you learn Elm at that bootcamp or did that come later?

[00:07:16] Aaron: Um, that came later. Uh, so this, the, the, at the bootcamp I learned, um, Rails and Backbone. Um, I think about like six months after I left, they switched the curriculum to be React. Um, but when I was looking for jobs, um, after that, um, bootcamp, I found NoRedInk. And it was really, really small at the time. And it proved to be a really good match for me for a number of reasons.

[00:07:45] One being that I had spent some time in the classroom. Um, I also like had taught into kindergarten. Um, like it came up earlier and, uh, it just was kind of total luck that it ended up being like the Elm place. Um, when I started at NoRedInk. We, nobody had, Richard maybe had played with Elm, but we weren't using it, um, in the product at all.

[00:08:09] Um, . Uh, and then it was in my first year there that, you know, Richard got really excited about Elm and brought it into the actual code base and, um, went from there. So it was a really kind of lucky , uh, land. Um, and it was a really cool experience seeing all that happen because in that first year, um, Richard was so excited about it.

[00:08:34] I'm sure everyone listening to this podcast knows how sort of infectious his enthusiasm for things is. And um, at the time Evan was working for Prezi and the Prezi offices were just a few blocks from the NoRedInk offices or the San Francisco location anyway.

[00:08:52] So there kind of in that first year, I would go with Richard, sort of out of curiosity, you know, it was like I was a really young programmer. I'd go with him to the Elm meetups and, um, at that time it was Elm 0.16, I'm pretty sure. And Elm was, um, it was all like signals and I was so confused. I didn't get it at all.

[00:09:14] I was extremely lost. Um, and I remember Evan trying to explain, uh, the mailbox concept to me, um, when, when, when he was working through that. And I was, I was pretty confused. It was really hard for me to learn. Now I will admit , but um, but yeah, then yeah, that's how that kind of began.

[00:09:34] Jared: Okay. Yeah, I guess I lucked out in a way that I first discovered Elm in, uh, 0.18. So, yeah. Um, signals were no longer a thing and uh, I didn't have to worry about, I remember having read something, you know, there was some earlier documentation at that point, and I think this was 2017 or so, and, you know, it was right at that transition, but I realized quickly, oh, I don't have to figure that out.

[00:10:06] Aaron: Yeah.

[00:10:06] Jared: nice.

[00:10:07] Aaron: Yeah. It was, I mean, I also, I had world class support, you know what I mean? Like, um, you know, it was, I was there talking to Evan and Richard and, um, I think it's a testament to how much of an improvement, um, it was when they did away with signals and kind of landed on kind of the Elm architecture as like the way that the language gets presented.

[00:10:30] Jared: Right. And yeah.

[00:10:31] What Aaron likes about Elm

[00:10:31] Jared: And you've said a couple times now how lucky you are. So I take it that, uh, you're a fan of Elm. Tell me, what do you like about Elm?

[00:10:40] Aaron: I love that question. Um, I love how I, I love one way to do stuff for the most part, I love the stability, right? I, I started at Brilliant, um, over two and a half years ago, and there hasn't been an Elm release since, and that's kind of, you know, controversial.

[00:10:58] Like, you know, people are like, is the language dead? And all this stuff. But I see it as a massive boon. I haven't had to do an update, you know, in my entire time at Brilliant. I don't have to waste my time with that. We have some old stuff, um, written in like earlier React versions or, and using these old libraries and I had to kind of port them to like a new part of our product where they were getting rendered inside of a custom element and like, it broke all of these assumptions with these very old libraries and I trying to update them so that they'd work was crazy.

[00:11:32] One of the libraries we're using has been like, incorporated into a, um, you know, an a different repo and the original repo is like no longer online. Like it's just a complete and total mess. So I have, you maybe can hear the, in my tone very recently, you know, I've come to appreciate the, uh, stability of Elm.

[00:11:51] Um, and then it's just like, it's so elegant. It's small, it's elegant and it's stable. I would say those are the three things that I love about it.

[00:11:59] Jared: Yeah, that's great. Yeah, I can share that sentiment about, you know, not having to deal with, uh, changes all the time. Uh, and I can, I think about that in terms of like overload or overwhelm, um, because, uh, I had experienced a bit of JavaScript fatigue earlier on in my career when I was, uh, doing a lot of Node.js and, and also using Angular JS on the front end and, and then also comparing other frameworks and libraries and,

[00:12:29] Aaron: Yeah,

[00:12:30] Jared: know, and languages to, to work with them.

[00:12:33] And so trying to fit all those pieces together and, um, and so yeah, now I just, uh, don't, that's one less thing I have to think about, which is great.

[00:12:43] Aaron: I'd also add like, um, it's a really, it's, it's, I find it to be nice that Elm is, you know, pretty niche. Like it's a small community. Um, I keep seeing the same faces over and over again. It's nice to be in a small pond. I, I suppose

[00:13:01] Jared: right. You can make bigger waves if you want,

[00:13:04] Aaron: exactly.

[00:13:05] Jared: Yeah. Yeah, that's true. And everyone's really nice. I like that about the Elm community.

[00:13:12] Aaron: for sure.

[00:13:13] Jared: So did you have experience with functional programming when you were learning Elm, or were you kind of learning that along the way?

[00:13:20] Aaron: It was, Elm was definitely my introduction, um, to functional programming.

[00:13:27] Jared:

[00:13:27] Challenges when learning Elm as first functional language

[00:13:27] Jared: At that point when you were learning, of course, you know, you talked about signals being, uh, something that you were struggling with. Um, was there anything else that was a challenge with learning Elm or with, you know, how you were working?

[00:13:45] Aaron: It was at this. You know, six or seven years ago where I was like first learning about it. In some ways it's pretty classic things.

[00:13:55] Like you can't just do a for loop, right? Like a lot of times, especially when you're, when you're learning, you wanna kind of know, like you reach for like the, what's familiar, like when I learned Ruby and when I learned JavaScript, all of the problems that I worked on involved iterating through things. I think the curriculum, sort of programming sort of pushes you to work on those types of problems.

[00:14:23] And so I was like, I'm gonna learn Elm, I'm gonna try to do this problem like that I'm familiar with as like a little exercise. And a lot of times that stuff's harder in Elm, you gotta use your brain, do recursion. It's just kind of confusing folds, et cetera. And at this point, I'm so accustomed to it, it's hard to like put myself in the brain space of being really confused by it.

[00:14:45] But I, I do think that was hard and I still am actively involved in sort of like in my company, ramping people up on Elm or just, you know, I, I see people struggling with learning it quite a bit. And that's a, that's a challenge for sure.

[00:15:01] Jared: Right. Yeah, that makes sense. But you mentioned recursion as one of those challenges, and I've always found, I don't know if it was an early interest in recursion or what, but I, I learned classic object oriented programming in college. So it wasn't like I had this particular background, but I guess there was just something about this idea of recursion and the simplicity of, you know, a recursive Fibonacci sequence, you know, generating program.

[00:15:31] That, that was just really neat to me. So I would always try to solve those problems in whatever language I was learning. So I think by the time I got to Elm, those kinds of things, didn't feel so scary to me. And maybe it's because I had learned it later on in my career. So, yeah, I, I still, I do see those things when I'm teaching folks as well.

[00:15:55] It's, you know, it's kind of going back to, well, how do I change? I just, I just wanna call this thing, you know, I want to call this random thing. How do I, you know, how do I get a random number? Right? That's a classic one. And, uh, I was just talking to somebody about that yesterday, and so , that's funny. Um, just, uh, how, how, how few problems there are really in the, in the way that I like to look at it is, like you said earlier, it's a, it's a smaller language.

[00:16:21] Uh, overall, it's fairly simple. So this, you run into the same things because there's just not that many, you know, there's one way to do things, so, um, you're just gonna find them.

[00:16:31] Aaron: I, I sort of remembered in thinking about, um, the experience of working with someone recently who was new, um, to Elm. Um, it's like if you're trying to solve a problem, you want to just think about the problem, right? You want like syntax and like how the language works to sort of fall away.

[00:16:51] You don't want to think about that stuff. A common thing I see is as a programmer you come to a new language, you think, like, I can, I can reach for, I have all these tools in my tool belt about programming that I can reach for. And I don't have to think about the like language all that much, but because of how different Elm is, right?

[00:17:07] And for loops are just not there. A lot of your common like tools and things you lean on, like don't exist. Um, and you can't reach for them, and you can't even run the program until, um, until you've completely sorted it all out. Um, so that, that's what I see people struggling with, um, right now and I'm now assuming that that was a challenge for me years ago when I, when I learned.

[00:17:34] Jared: One of the things that worked out for me is that I really have to break down problems to understand them. My brain just does not hold very much in it at one time. So I've always been very much the kind of person that even when I was doing a for Loop, you know, I might have the for loop, but then still have a separate function that did all the things inside of that for Loop.

[00:17:56] So to me it was, oh, I can actually simplify this problem. I don't have to think about the off by one error. I just do this for one. Right. You know, if I'm trying to convert to something else, I think about I just get the function that I need inside of there. Worry about that first and then. Pass it to whatever function I want to use.

[00:18:17] Um, so I think it's, it's weird because that doesn't seem to be common. So what happened to me though was when I first saw Elm, the syntax was so much different that there was a, a moment where I thought, man, there are all these great things that I like, you know, there was this list of, of things that I loved about, uh, Elm that was on the website.

[00:18:44] And I thought, oh, but I don't know if I can get by this syntax. And that was, it was really just once I tried it, it was maybe a day, you know, where I was really confused and, and turned off by it. But then once I got over that, you know, I'd spent a couple weeks just playing around with things on my own, um, building my own kind of, uh, blog site in Elm.

[00:19:08] Very simple. And I thought, oh, okay, this. This really isn't all that bad. Well, now that I'm in it, you know, it's just that shock that you see it and it's just something you don't

[00:19:20] Aaron: Yeah, it's you, you're all of your brain scanning that you've learned to do with JavaScript. You, you can't scan quite the same way anymore.

[00:19:30] Jared: Yeah, exactly.

[00:19:33] Mentors at NoRedInk

[00:19:33] Jared: So when you were learning Elm at NoRedInk, you mentioned you went to, uh, meetups with Richard. Correct. And, and so was he kinda your primary mentor as you were learning Elm or were there other folks that you were getting advice from?

[00:19:52] Aaron: Um, yeah, Richard for sure. Um, I, after, after, after he had, we had, had a successful. With him sort of bringing it into the code base. And he was like, head of front end. And there was at this point, like seven engineers. So, you know, there, there wasn't like all this like red tape, you know, . It was like Richard was like, we, we should really use this.

[00:20:16] Um, and so once that decision had been made, um, it was like at that point almost company strategy to sort of get other people ramped up on it. Um, so he really kind of, I, I had some, um, like some early feature, um, and he kind of ramped me up on like, you know, I was like implementing it and I had him there supporting me and kind of holding my hand, uh, as I did it, so.

[00:20:42] Um, he, he was definitely the main, uh, support person. And then it's like, you know, just functional programming in general. Um Right. Is like a pretty long journey. Um, and it goes very, very deep. Um, and so actually I think I should, it's worth calling out. Um, Hardy Jones, um, who actually, I'm not sure if he still does, but he ran like a functional programming podcast for a long time.

[00:21:07] Um, he was at NoRedInk and anytime I had what's a Monad type question where I encountered some, you know, formalism or something. He was my go-to guy to sort of like, translate for me and kind of walk me through it. He was, he was big. And then there's just so many people sort of over the years came through NoRedInk.

[00:21:27] Um, and had an impact on sort of my programming. It was a, a pretty special place to be.

[00:21:32] Jared: Yeah, that's really cool. Hardy has been on Elm Town. Uh, he. Recorded an episode with the former host, the original host, Murphy Randall. Yeah. Um, but I, um, I'm thinking about this, you know, you brought up the concept m word monad. Um, and I'm thinking about that because I think by the time I had started learning Elm, there was enough documentation, there were enough blog posts, and I think Richard had already started on the early access version of his Elm in Action book.

[00:22:13] So there were were enough resources where I didn't have to learn that. In fact, I can only tell you that I, I point to functions and be like, that's apparently a monad. You or that's, you know, a, an applicative, you know, you know the a word now, so I'm not gonna

[00:22:29] Aaron: um, discouraged. That's why one of the reasons I went to Hardy, like if I, you know, if I went to someone else, they'd be like, don't worry about the terminology, let, like, focus on just how it works and get it done in Elm. So I had to sort of back channel a little bit and go to someone who is specifically enthusiastic about, uh, functional programming, you know, theory, I guess.

[00:22:52] Jared: Right, right. Yeah. Um, so be careful because if you start going down that route in our conversation, I will get really confused, um,

[00:23:01] Aaron: I, I will call out. Um, Tereza, um, has written some really awesome, like, here are the, some terms in Haskell. They're not that complicated. Here they are in Elm. Like now you get, now you should get it. Um, there it is a really good series of like three or four blog posts.

[00:23:20] Jared: All right. I'll have to get that link from you and we'll put it in the show.

[00:23:23] Aaron: Great. Yeah. Happy to.

[00:23:25] Jared: Okay,

[00:23:26] Richard gives us a memorable moment from NoRedInk

[00:23:26] Jared: so I had asked you for a contact of someone who could give me, you know, a story that we could talk about during this episode. And so I contacted Richard, Richard Feldman and he told me that, um, that you were involved with something kind of big at NoRedInk.

[00:23:45] And so, um, there was this tweet about it, and I'm gonna read this tweet and then kind of, uh, talk about your involvement with it. The tweet goes "After two years and 200,000 lines of production Elm code, we got our first production runtime exception. We wrote code that called Debug.crash and shipped it.

[00:24:04] That function does what it says on the tin. :sweaty smile: In that period, our legacy JS code has crashed a mere 60,000 times." And before we talk too much about, uh, the story behind this, uh, this particular tweet I've used in a talk before, because I think it really shows just how reliable Elm is, right? Two years, 200,000 lines of Elm code, 60,000 crashes of JS, right?

[00:24:36] I mean, it just, it, it says a lot. But now to your involvement, I've heard from Richard that you were the one that brought that to the attention of the company. You were the messenger. Is that correct?

[00:24:49] Aaron: Um, you know, it's so funny. I knew. In the email when you said that, like, Richard had a story, I was like, I know this is gonna be it. And I wanted, I was even gonna like, try to like look back through some like old resources and just like, things to remember better. And like, I remember the story better than the actual event.

[00:25:12] It's like when you have like a memory of when you're three and you don't know if it's like the, you actually remember your parents telling you or if you remember the actual thing. Um, um, and certainly like, it's pretty funny if you watch like Richard's talks in series, you know, he's like at NoRedInk this many lines of code, no runtime exceptions, this many lines of code, no runtime exceptions.

[00:25:34] And then there's like some talk where all of a sudden he goes, well he puts like an asterisk on it. Um, um, but I actually don't, like, I I I, the, my memory of it was basically being confused, right? Like being like, there's something going on here. And I kind of brought it. Like to Richard to help like debug, um, to help debug the situation.

[00:25:57] Uh, because, you know, things weren't going working as I expected and he kind of was like, oh my God, his, he had a huge reaction to it and I, I don't think I processed, um, in the moment, like the, the kind of core meaning of it or, or something. So I, I don't have anything that like juicy or fun to share, like, about that particular moment, except I think it's hilarious that it became sort of part of the, um, I don't know that it sort of has showed up all, all of this time over the years.

[00:26:25] Jared: Yeah. Yeah, that's, that is funny how we, we tend to do that. I've done that so many times, thought I, I have this memory, but it's kind of based on this picture, you know, I have and uh, or in this case a tweet. That's funny. Um, and.

[00:26:43] Aaron: zero. I I could not explain to you what the actually happened.

[00:26:49] Jared: Sure, sure. Yeah. And so when I, uh, talked about this, uh, the thing that I think is really cool is that in the next release of Elm, uh, Evan introduced the, uh, the optimized flag, right? Which then looks at your code to see if you have any Debug.todo is what it's called now, um, in your code base or Debug.log and, and will not compile successfully if it does.

[00:27:16] So it's funny that that was quickly, uh, removed as even an option in production and, and so it made it even more reliable. Really cool.

[00:27:24] Aaron: That was one of those things where, you know,

[00:27:27] Benefits of the holistic approach

[00:27:27] Aaron: Evan likes to work in batches, um, and kind of take a more holistic approach. And it was like that was one of those double wins where it both made, you know, made it safer so you couldn't sort of make mistakes. But also I think, if I recall, there was some pretty massive performance wins, um, when, when all of the debugging stuff was.

[00:27:50] Um, you know, uh, guaranteed to not be in the code.

[00:27:53] Jared: Yeah. Yeah, that's a, that's a great point. Huge win there. And, and I was recording another episode. I don't know the order that these will come out in, but I was recording an episode with Dwayne Crooks the other day, and he was talking about this in a discourse post at one point about the way that Evan works . Dwayne was talking about a book that he has read, or several books by Cal Newport about Digital Min Minimalism and, um, and just talking about, and then relating, uh, some quotes from Cal, uh, that, that seem to, you know, kind of point to how Evan works. And I've made that connection between them as well. So I thought, I thought it was really neat that, uh, Dwayne had made that connection and then, you know, kind of talking about this, you know, this way of working.

[00:28:42] I think it, it brings about some really interesting and really powerful, uh, ways of thinking that is not incremental, right? You can't do that by finding a thing, fixing that thing and moving on, right? You kind of have to be able to think in those large patches in order to get those, those level of, uh, changes done.

[00:29:04] Aaron: Yeah, I could never, I mean, I, I'm, I'm unfamiliar with the, the digital minimalism. I forget the name that you just said, but I'm, I'm unfamiliar with that work. But, the way Evan works is extremely impressive. I mean, it's his ability to sort of create a good working environment for himself and, um, reduce noise and batch things together.

[00:29:26] When I see complaints about Elm and the Elm community and kind of the way that he operates, um, I sort of, I have some sympathy for like, if you don't know, um, uh, but like having, you know, had lunches with him at work and conversations with Evan and just sort of seeing him in action. It's like I have, I have this such a faith in his like way of operating, um, That keeps me, like my faith in Elm alive that I, I sometimes worry other people don't have access to.

[00:29:58] Um, but yeah, he, he's amazing.

[00:30:01] Jared: Yeah. Yeah, I think, um, like you, you've put it, well when you said that, you know, maybe folks, you have sympathy for the folks who just aren't used to that, I think as a way of working. Um, and so yeah, it's, um, it's really neat though.

[00:30:17] Brilliant ways to use Elm

[00:30:17] Jared: And, um, I guess now I really wanted to talk about what you're up to at Brilliant.

[00:30:25] If, if you want to transition into that.

[00:30:28] Aaron: Yeah.

[00:30:29] Jared: To give a little bit of background, I know that, uh, Pontus Granström, did I pronounce that correctly?

[00:30:34] Aaron: Um,

[00:30:36] Jared: Pontus

[00:30:36] Aaron: you said it kind of how we all say it, but I'm sure that if you spoke Swedish, there'd be some nuance that , I can't detect.

[00:30:44] Jared: Yeah. Okay. So he, he gave a talk at Strange Loop, uh, in the fall last year. I was lucky enough to be there, um, about a tool that you all use at Brilliant called Diagrammar that allows you to build diagrams and, and use Elm to do that. Um, and so that's a bit of, uh, background about how, I know Elm is used it Brilliant.

[00:31:11] But I really want to get your insight, um, into how you use Elm.

[00:31:16] Aaron: We talk about how, um, Elm is used at Brilliant, kind of in like three domains. One of them is something that I've worked on a ton, which is basically just the core, um, lesson experience. So when you're using Brilliant, you know, you've got courses and you've got lessons inside of them, and you can open up a lesson and there's, it's about physics and you scroll through it and there's all this good content there that, like Core Lesson experience is just an Elm app.

[00:31:45] We built that in Elm. Okay, so then the way that those lessons are drafted, um, is we have a markup language that we developed in-house called Camperdown, which is like a Elm pun. I, which I didn't get for a while, but apparently a camperdown tree is a type of Elm tree, uh, and it's like markdown.

[00:32:07] Um, but so we have this internal, um, kind of markup language and. That we take that markup language, you know, uh, build an AST out of it, and then generate an Elm app. And the Elm app that we generate is the, um, the lesson that I was just describing that I really worked on, and the actual, um, like compiler that we use to turn camper down into the, uh, generated Elm code is also written in Elm.

[00:32:40] So it's a little bit, um, it's a little bit like zany, uh, or I don't know. It is what it is and it's, and it actually, it's kind of great. Um, and then the third sort of like domain in which we use Elm is this diagram thing that Pontus uh, presented at Strange Loop. And Diagrammar, it's actually pretty confusing even internally what, uh, constitutes, like, what, what diagram encompasses, because one, it's like a graphics library, like there are functions in it, like circle and square, and those take radius and then you pipe them to the fill.

[00:33:19] You know, it's just like a graphics library that we call Diagrammar. But then Diagrammar is also the authoring environment where the content authors can define, like write the code for these diagrams. And we basically expose to them, um, or like the contract essentially is you need to write these two functions.

[00:33:41] One is the diagram function, which is basically a function from the state of the inputs to the view to like the diagram. Um, and what I mean by the state of the inputs is, uh, will be made clear when I describe the other function that you as an author have to, um, sort of create, which is just a list of inputs,

[00:34:06] And so you can say, I want, I, you can define for example, um, a what what we call, um, a locator, which is basically a thing that you can drag and drop or we have also like a slider. Let's, let's use the slider as an example. And as an author, you basically, like declaratively say, here's a slider. And um, then by just filling out your list of inputs and the function from the state of the inputs to the diagram, we like take that Elm code, drop it in, like, um, a prelude, compile it with the library and like generate a sort of like Elm app from um, from that.

[00:34:50] So it's kind of like, I don't know.

[00:34:53] There, there's a, for the, um, Elm architecture, right, like you provide init, you provide update, you provide subscriptions and you provide a view. We have kind of like our own runtime that is Diagrammar that is like, you just give a list of inputs and this diagram function and then the authors then can use that to um, like create these diagrams that you see inside the lessons. Crucially, another one of the inputs is time , which means that they can make these really awesome animations. And we have, in addition to the content experts who are writing the courses, we have a team of creative technologists who basically have like art backgrounds and education backgrounds and code and are like really good at making these like beautiful animations to support the content.

[00:35:39] They are making the most amazing stuff,

[00:35:42] Jared: Yeah, I've seen a little bit of that and it is really cool, but the, the content creation is really cool too, because that is how you interact with it, right? The, if you mentioned a slider, right? And, and what inputs you can control. So because of how that is set up, it makes the experience of learning so much more like you would in the real world. You would, you know, you grab a hold of something and you mess with it Right. Until you understand it. And I think that by having those types of, you know, variation, those types of, of constrained control, I don't know if that's a good way of saying it, but, um, but you have that as a learner and I think that is really powerful.

[00:36:31] Aaron: Yeah. And one of the, one of the really exciting projects that, um, I've worked on is something we call internally, like intra lesson communication. Kind of a boring, I mean, it's kind of a self descriptive name, uh, but basically in, when you're writing this function from state of my inputs to a, to the view of the diagram, um, you can, you can kind of declaratively say, I also wanna receive input from this other diagram.

[00:37:02] And when we embed all of these, um, like mini applications into the core lesson experience, we then also, um, kind of wire them all up so that as one changes, if the other diagram or if the other, um, like mathematical input, um, component subscribes to it, it can, it can track the other one's state.

[00:37:25] And so we have some lessons with these really cool things like. you, um, can input, um, like a mathematical function in like a, um, you know, an input box, and then we will plot that equation on a diagram like next to it. Um, and so we've written kind of libraries for the, um, content authors to like, basically declaratively say, I want to track, um, track and decode that, um, that that math input box.

[00:37:56] And from the we, the way that we expose this to the author and Elm is we have kind of like an, an opaque type with a bunch of functions on it that they can kind of use, there's one function that's basically like called um, like function for, where you give it a string like X and then it returns a float to float.

[00:38:17] Um, so that they're able to use that, um, in like, and plot a diagram based on what the user has input. And there's a ton of really interesting problems that come with that. You know, what if, what if the math input is totally invalid math? Or what if they haven't entered anything yet? And so it, we have to return to maybe.

[00:38:36] And all of these things like that, that are like what makes it fun to sort of work on Elm projects.

[00:38:42] Jared: Yeah, this all sounds really neat. Where to start or where to, to dive deeper into this? Um, I guess I, I'm interested in the mathematical input box that you've been working on. Uh, you mentioned that on your website, uh, maybe you could tell us a little bit more, uh, about that, how that works.

[00:39:03] Aaron: Yeah, so that is built on another like, um, uh, it's built on top of a, like a JavaScript project called Math Live, um, which is written by, um, this really nice Frenchman, uh, who we, we have an ongoing working relationship with. Um, I actually have no idea how much other people are using Math Live, but Brilliant.

[00:39:27] We've built our math input box on top of it. Um, and it's a, that has become a pretty key feature in our sort of like, lesson experience. Um, but we basically, we, we render it, it's a, uh, we as a custom element, um, we sort of apply a bunch of our own styles to it. Um, and then we wire it up.

[00:39:51] Um, he, he's defined a, like a serialization format called math json, um, and we have a bunch of decoders and like, Um, type definitions for different like math input that we can get from that box. So by the time it makes it all the way through, by the time this data that the user enters makes it all the way through to our content authors who are gonna like, process it by, um, they can write like a validation function that goes from, you know, essentially float to, is it correct?

[00:40:26] Right, like float to bool. Is this, is this number correct? But what we do like internally, so what the content authors don't see, but what my team kind of worked on is we deserialize the math json, um, then we evaluate. Um, we evaluate, like if it's three plus nine, you know, the content author will see that as 12.

[00:40:50] Um, we actually will evaluate the math, turn it into a sort of like meaningful Elm type and sort of pass it along.

[00:40:57] Jared: Okay, cool. So you mentioned that this is sort of like how JSON decoders and encoders work, right? So you wanna tell us a little bit more, um, about that? About how you, you look

[00:41:14] Aaron: I'm, are you, you had mentioned something about this being on my website and I actually just can't quite remember what I

[00:41:20] Jared: Oh yeah, sure. Yeah. Let me, it was in your, uh, "Year End Review 2022".

[00:41:26] Aaron: about my favorite thing I worked on. Yeah.

[00:41:28] Jared: Yeah. Yeah. It says was working on a mathematical input box, and then there's a little gif of it where there's uh, like this 80, the number 80, and then a gray rectangular bar strip. And then as someone's typing in the input box below it, it says four T and then plus, and then open parenthesis, two times 10, close parenthesis equals 80.

[00:41:56] And, and then it, once

[00:41:57] Aaron: is worth a thousand words, huh?

[00:41:59] Jared: yeah. Right. Yeah. And so, um, and so then once this is all typed out, then it shows that rendered. And as it's typing, if it finds something that is meaningful, it will show that on there as well.

[00:42:12] Aaron: So the, the I, the thing that I think I was talking about that's like encoders and decoders is we have a library that the authors can use, um, to basically define expectations. So it's when you, when we have a a, a problem, that involves, um, these math fields that there might be, you can set up as an author.

[00:42:40] Here's a challenge. Plot three, give me three coordinates, um, that, that belong on this line. And each one of those coordinates is gonna be a separate input box. So the, the, the challenge is basically we need to first assert that the thing that got entered into the boxes, even a number, right? Like if it's a letter, it's clearly wrong.

[00:43:10] And we wanna be able to give feedback that is like, um, hey, that's a letter, not a number. We're expecting you to put a number in here. Second, we need to check that the new coordinates in the parentheses, which are in separate input boxes, are actually on the line. Those are valid x y coordinates on the line.

[00:43:28] That is part of the challenge. So we need a way to sort of, grab those two values, make sure they're both numbers, then run them through the function and like make sure that they, the equality holds true. Then we don't want someone to cheat and just put 1, 2, 1, 2, 1, 2. We want to enforce that all three of the coordinates that the user, um, sort of gives, or that the learner gives are, are unique from one another.

[00:43:59] So now all of a sudden we need to make sure that they're all numbers, they're all on the line, and that they're all unique. So we have essentially, um, an, uh, like a declarative API, I guess you could say. Or here's where we're gonna get run into some, uh, uh, you know, like functional programming terminology, right? I don't even know, to be honest. Um, Uh, like exactly what it translates to in terms of, you know, functional programming theory. But we, it is surely an applicative sort of API where you can say, like, expect, um, float, uh, then pipe that to, um, expect to and give, provide it two float expectations that you can then write a function that, um, makes run, uh, that runs the, sorry, kind of like map two, right?

[00:44:55] Or like,

[00:44:56] Jared: Yeah, that's what I

[00:44:57] Aaron: e E exactly. So you can take two of these, um, uh, expectations, pull out the values, run them against the expectation that you define, and then pass forward an expectation. Then you can basically do an expect three that says, I want this row and this row and this row, and then you can write a function from three rows to.

[00:45:21] uh, an expectation that each one of those is unique. So we sort of have built this library that authors can use internally to sort of build up these more and more complicated expectations about what they expect the users to give and on every step of the way, right? We, if we fail, we the, there's like feedback.

[00:45:43] So if you write expect Float, or if you ex, if you do expect int, which is one of the, like primitives or one of the ones that we have, we've give to the authors and the user enters 4.2, it will automatically, you know, dead end and will point to that field and say, we expect that this should have been an integer.

[00:46:03] And the user gets that feedback.

[00:46:06] Jared: Hmm. Yeah. That's really

[00:46:08] Aaron: I super encourage the, we have like intro to algebra basically, um, at Brilliant. And I'm. I'm, God, I'm, I'm pretty sure that that is like part of the freemium. Like you, you can, um, you can do it. You, you have to sign up, but you don't have to pay to do that. I super encourage you to try it out.

[00:46:26] It's really cool. And that's all written in. Um, um, the actual UI of the mathematical input is this project Math Live, um, by Arno, which is, it's an, it's an awesome tool to build things on top of. And he's really great to work with.

[00:46:41] Jared: Right. But then the, the language that you created in order to validate and parse, that is in Elm, correct?

[00:46:51] Aaron: Exactly. And all of the feedback and everything around it, it's, it's only the, uh, math input field that is, uh, written, uh, written in JavaScript or Pro I think type script and, um, you know, rendered as a custom element.

[00:47:06] Jared: Yeah. And that's a, a beautiful example of where you can get some, uh, you know, some inter-op there, um, in a, you know, in a nice way and, and then still use all the great things about Elm to, to do all this other stuff, right? That would, um, that maybe might not be as, as much fun and in a different, done in a different

[00:47:30] Aaron: and, and for my team, it's really nice, right? Cuz we can basically make this available to all the content authors. Um, who, and we have some contractors, we have people in-house, um, kind of using these tools and you get all of the safety guarantees, uh, that Elm provides. Um, so, you know, if it, if it compiles, it works.

[00:47:50] We don't have to worry about, you know, um, not, not, not that I, no knock on the content team, but like, as a human, you know, sometimes you, you mistype something or there's a, a million things that can go wrong with, um, um, You know, JavaScript code and we, um, get all of the safety guarantees from Elm. And I had mentioned the three ways we use it, right?

[00:48:15] We have the camper down to Elm compiler, we have the lesson experience, and then we have the like diagram and other authoring APIs for these like inter for the interactive content. And the first two, it's like great that they're written in Elm. I really like that they're written in Elm, but in terms of like long term company strategy or something like that, it's just normal benefit.

[00:48:38] But, um, for the, for the interactive content, it's like amazing that they're written in Elm because um, we get all of these safety guarantees.

[00:48:48] Jared: right? You can sort of extend the, the arm of Elm outside of where you might normally reach with it, with the way that you're using it. That's really cool. So how many people write Elm at Brilliant?

[00:49:04] Aaron: On the engineering part of the organization, um, there's probably, uh, five to 10 people who write it a ton, and then another five to 10 who, end up at it because, you know, it's in a quite a bit of our code base. And if they're doing a feature, you know, they're gonna have to sort of touch the Elm.

[00:49:25] Um, but then we have all of the, um, cr, the cts, the creative technologists who are creating these diagrams, which is another, like five people-ish who are writing tons and tons of Elm, but in a more kind of, specific, like tailored capacity. Um, and then we also have, um, I actually have no idea how many, you know, this big handful of content authors that are, um, that are writing Elm for some of the diagrams or for some of the math problems that they're defining.

[00:49:57] Or we also now have, um, or we've had this whole year pretty much like a, um, scratch type language, like a drag and drop like program evaluation. And the APIs for defining those problems are also written in Elm. So like a lot of our content, um, the auth, the content authors are like having to dive into some Elm in like a restricted capacity, right?

[00:50:19] They're not presented with the whole Elm architecture, they just are given these like limited APIs to fill out. But, um, that's like a, a handful of people. So quite a.

[00:50:29] Jared: Really neat. Really neat. Um, and so when you started at Brilliant, was Elm already in use?

[00:50:38] Aaron: It was, um, when I, when I started at Brilliant, I, I was at a different co company between NoRedInk. And Brilliant, which was in. outside of education and was all JavaScript Node, uh, and . When I left that job, I was like, I would like to be back in education and I would like to be using Elm again. Uh, and I found Brilliant.

[00:51:02] Um, and that was just perfect, um, , but they were already using Elm. Um, there was a very serendipitous, Strange Loop meeting also, um, between, uh, Ben Goldsmith, who is really the person who I think was the main driver of bringing Elm to Brilliant and, um, Rob Simmons who is presenting on something else. And they kind of, the story goes, I think they sort of found each other at Strange Loop and started talking about Elm and, uh, Rob ended up joining the team at, um, Brilliant.

[00:51:33] And brought, um, a lot of programming, language theory and the love of Elm. And, um, he, he wrote the camper down to Elm, um, compiler, um, . So those two were both there. Uh, and Pontus, who also kind of loved Elm and um, was working on Diagrammar the early, the early pieces of Diagrammar when I joined. So the three of them were kind of already there, loving Elm, starting to evangelize.

[00:52:02] And so I think they were excited to bring me on who had some expertise and was excited to be writing Elm also.

[00:52:08] Jared: Right. Okay. Very cool. Um, let's see. Is there anything else about writing Elm at Brilliant, that you think would be interesting to share?

[00:52:20] Aaron: There's a whole other really interesting work project that the, um, authoring team is working on with regards to like versioning, um, Elm. Like APIs for authors, essentially. Um, and that is like a really interesting set of problems that I haven't really touched, but I'm sure you could fill an hour hearing about that.

[00:52:42] Um, so I guess that's a teaser. or, or something. Um,

[00:52:48] Jared: Yeah. Maybe we'll have to have those folks who are working on that on

[00:52:52] Aaron: Totally

[00:52:53] Jared: it. So Cool. Cool.

[00:52:55] Using elm-pages to build aaronstrick.com

[00:52:55] Jared: So let's talk a little bit about your personal website, right? This was the catalyst for why you even, uh, became interested in programming, right? And I know that you used Elm pages to write it, or at least currently use Elm pages, uh, in the development of it.

[00:53:13] You wanna talk a little bit about that?

[00:53:14] Aaron: It's the latest in a whole series of iterations with my website. Um, um, and it's written in Elm pages. Um, . I, uh, what else is there to say? It's, it's, it's on Elm pages one, uh, Dillon has put out a beta, I'm pretty sure, maybe even a full release. Dillon, uh, the creator of Elm pages, uh, for number three, and I'm terrified to, um, see how different it is.

[00:53:42] Um, and Elm pages one actually does something kind of wild, which is for it, um, to like the, it, it generates, you know, static pages that actually have HTML and then it chips them, and then the Elm like takes over, you know, it's like, it's got the whole like, hydration thing. Um, but the

[00:54:05] initial, um, the initial render, um, is using, um, like chromium, like, or like using, uh, like a headless browser.

[00:54:14] Um, and I know that one day. , I'm not gonna be able to like build, it's not gonna work, you know? So I feel like I have like this looming ticking time bomb and Elm pages two and three, um, don't do that. They actually, you know, generate the html. So I have this kind of like looming fear about that. I gotta, I gotta do the update soon, but the changes are significant.

[00:54:38] Um, again, we talked earlier about my appreciation for stability, um, but it's really cool. I, I really enjoy, you know, that it's, it's written in Elm, so it's like kind of fun to work on and it's like, Got all this great performance stuff like it, it's render, it's delivered statically, but then the Elm takes over and it enables me, you know, I have a little jukebox on the bottom and you can listen to my music, um, and go navigate to another page.

[00:55:07] And because it's actually a single page application, right? The music keeps playing as you navigate between pages On my site, um, I've been fantasizing about putting like a little, like e like a little game discovery portion of it where you can like, find stuff on different pages and like accumulate an inventory.

[00:55:26] It's like a shower thought.

[00:55:27] Um, I haven't really begun that. I had a kid earlier this year, so I do a lot more like fantasizing about programming than I do programming outside of work. Um,

[00:55:37] Jared: Yeah, I understand that. Yeah.

[00:55:39] Aaron: but yeah, it's, it's fun to, it's fun to work on. It's a fun, it's just silly. I like, you know, I like when people I know have websites and I like, uh, I like maintaining mine.

[00:55:52] Jared: Cool. Yeah, my personal site is in Elm pages, v2, and I did the upgrade

[00:55:58] Aaron: Oh, how, how'd it go?

[00:55:59] Jared: I mean, it was, it wasn't too bad. I think there were some docs about it, and I probably looked at, uh, the diff that Dillon had for his, and you did a lot of, okay, this is what he did, you know, and this is what I'll, I'll do too,

[00:56:18] Aaron: Yeah.

[00:56:19] Jared: And so, um, and of course, you know, it's, it's Elm, so the compiler will tell me when I've, um, made a mistake. And so that helps. Um, So, yeah, we'll see. I haven't, uh, made the upgrade to V3 yet, like you said, I think it's still in beta, so, um, as of this recording, so I, um, haven't made the plunge yet, but I assume I, I will be doing that at some point in the near future, so, yeah.

[00:56:48] Um, that's pretty fun. Um, check out Aaron's website for sure, because there are some, some cool things on there. Um, folks, because here's the thing, uh, he mentions the little bar at the bottom that plays the music. You, you gotta listen to those songs. They are fun.

[00:57:05] Aaron: Thank you.

[00:57:07] Jared: yeah, uh, I'm trying to think of what else.

[00:57:10] Oh, when I was trying to describe that little input box, the little gif of what you built, the mathematical input box, um, that is on there as well. So, um, check that out. Aaron, do you have anything you wanna talk about before we get to picks?

[00:57:27] Aaron: I will say one thing, which is, um, one of the songs on my website is a cover. It's called Turtlehead Poo, and it's a cover, um, uh, of a guy named Matt Farley. Um, and he's a really interesting character to sort of discover on the internet.

[00:57:45] He's great. Um, but also there's a, um, he, if you were in, if you were at Elm conference and I think 2019, there was a song played, uh, that was about, um, the Elm programming language, and it was by the same guy. So I, I'm covering part of my love of Matt Farley is that he did the Elm song. Um, so I, uh, I I just wanna shout him out.

[00:58:10] Uh, . Yeah.

[00:58:13] Jared: Yeah, that's,

[00:58:14] Aaron: And to shout out also,

[00:58:15] Jared: The, song.

[00:58:16] Aaron: Glass, um, from who you may have met if you're in the Elm community, he's out in Berlin. He, he's the one who commissioned the Elm song and turned me on to Matt Farley. So

[00:58:24] Jared: Oh, that's cool. Yeah, I didn't know the origin of that. And so could we still hear that song today?

[00:58:31] Aaron: Um, I have an MP3 of it somewhere. Um, you

[00:58:36] Jared: Maybe you can, I don't know if you're allowed to host that, but if you can, you know, let's, let's get in a website

[00:58:42] Aaron: certainly. Um, certainly message me so you can find my contact on the website. I'll, I'll, I'll try to dig up the MP3 if I can.

[00:58:50] Jared: Yeah. Yeah, that would be really cool. Okay. Well, I, yeah, the, and the song that you covered, turtlehead poo, that's a jam for sure. So right on.

[00:59:02] Picks

[00:59:02] Jared: All right, so what picks do you have,

[00:59:03] Aaron: Okay. So I actually, I have a, a, I have a strong, uh, feeling about recommendations in general, which is I don't believe in generalized recommendations. I think a recommendation should be to someone in particular. So I actually, a friend of mine built like a prototype of, you know, good reads, um, like the Amazon book thing with, with a restriction that you could only recommend things to people.

[00:59:32] So, but I know that's not a very fun answer, , but I want,

[00:59:36] Jared: No, that is . Is that a recommendation? We need that website. You'll have to send me that link and we'll

[00:59:42] Aaron: it's, it's been shut down cuz the Heroku free tear is gone. Um, but the, um, I will say, I know that if you're listening to this podcast, you are probably, you know, a front end, uh, developer. You write Elm. So I feel comfortable, this is quality enough pick. But there's, um, a guy you maybe seen his blog posts around, Josh Comeau, I don't know how to pronounce it cuz it's like C O M E A U.

[01:00:09] Um, but he does a lot of writing about react and animation and front end, and he has a course called CSS for JavaScript developers. . Um, and I think last year, or like earlier, this, I forget my timeline, but I did that course and it completely changed sort of how I see CSS and how I sort of interact with the browser.

[01:00:29] It was like probably the biggest level up I've had, you know, um, from like, uh, external content, um, you know, be beyond what I'm just learning at work. So I, I, I think that chorus is just totally great and I, I wanted to shout it out, um, for the all the front end people who are listening.

[01:00:47] Jared: Excellent. Excellent. Do you have any others, any

[01:00:51] Aaron: Um, the only other sort of broadly applicable recommendation that I feel comfortable making, which is almost in violation of my principles. The movie, Everything Everywhere All at Once was just the

[01:01:04] Jared: Oh

[01:01:05] Aaron: I think everyone should see it.

[01:01:07] Jared: Yes, I agree. I, um, I went there with my, uh, life partner Brynn, and it was, uh, on our anniversary, uh, we went to that movie. Our kid was at the grandparents, and it just, it got to one point and I started bawling. I don't know what it was exactly, um, but I, I have, I'm having feelings right now, just, just actually bringing that up.

[01:01:35] But, um, yeah, it, it really was a powerful movie and I've, uh, I've written about it several times in my journal about my experience with that. So yeah. That's a awesome

[01:01:46] Aaron: Yeah. It's got it all and it's so original. It's just, yeah, the

[01:01:50] Jared: Yeah. Yeah. Be prepared. Strap in. You're going for a ride. Okay. All right. Is that

[01:02:00] Aaron: That's all I

[01:02:01] Jared: on the picks? Okay. Okay. I have two picks and I'll explain them. Neither one is related to development. Um, and I'll, I'll explain each pick and why I chose it for this particular podcast episode. Um, the first one is a musician from Australia, Courtney Barnett. Um, she, I first discovered her from a Grateful Dead cover of New Speedway Boogie.

[01:02:29] And the reason that is relevant, and, uh, for those who, uh, can see me right now, I have this, this long hair. You can clearly tell that I'm a hippie. Um, uh, . The, uh, the New Speedway, uh, Boogie song is about a concert that the Grateful Dead was supposed to play in 1969 at Altamont Speedway, um, in Livermore near the Bay Area.

[01:02:55] There. Um, and they ended up not playing because it was like a really dangerous, um, concert. They had the Hell's Angels, uh, do security at this concert. Um, and so it got really outta control. But this, this song, the cover song, uh, by Courtney Barnett that I've initially discovered, uh, it, it was by that. But she has lots of great, uh, original songs, great lyrics, um, very clever and uh, and so I recommend it just as if a person, if you like, um, interesting music.

[01:03:29] Uh, that's, that's all I can say

[01:03:30] Aaron: I'll, I'll add one thing, which is, um, for those who are listening, um, when Jared was saying, sort of describing how you, if you could see, you might be able to tell he is a hippie. He sort of is like tossing back this like gorgeous hair He was gonna flipping his like beautiful locks. So just a, just a, a visual for those on audio there.

[01:03:53] Jared: Yeah, just trying to pull them outta my beard. Yeah. . Um, and so the other pick is a book, it's a sci-fi book called Parable of the Sower, or Sour, I think it's Sower, uh, by Octavia E. Butler. Uh, first published in 1993. And the reason this one is relevant is, again, it's related to California. Um, the book is about a, uh, sort of post-apocalyptic, uh, California, where, you know, they're running out of water and people are living in these kind of walled up communities.

[01:04:33] Um, but it's,

[01:04:35] Aaron: California

[01:04:36] Jared: well see. So there's a couple things I want to mention about this. One is that I feel like, yeah, a lot of this was true as I was reading it. Well, let me, before I even started reading it, I bought it, um, at a bookstore on Haight and Ashbury in San Francisco this past summer when I went to visit my friend.

[01:04:55] Um, and one of the things I noticed while we were out there, we were taking the, the public transit, and so I'd be looking off, or sometimes he'd be driving somewhere and I'd be looking off and I would be like, oh, there's another fire. You know, and then I'd see a lot of, you know, no fireworks and those types of things.

[01:05:11] Um, and I live in this kind of, uh, luscious southern Indiana, um, world where everything's really green, so it was kind of surprising to see how, uh, dry it was at the time. Um, but, but yeah, so I, I picked up the book there. I started reading it there and on my way home. Um, and, and then I realized, you know, oh wow, this, this is actually set in California as this, you know, this young person is writing in their diary about, um, the.

[01:05:42] Through this and, and sort of is a bit of a sort of spiritual, um, journey and, and kind of a philosophical, um, discussion. But I, I think it's really neat and, um, it has a, a, a location specific, uh, relevance to us. So that's, that's why I picked that one, All right, well thanks Aaron for coming to Elm

[01:06:08] Aaron: having me.

[01:06:09] Elm. Town is nice. It's a nice place,

[01:06:12] Jared: awesome. Peace.

© 2024 Jared M. Smith