Elm Town 74 – The road to town with Jared M. Smith

MAY 14TH, 2024
|
56:45
Mario Rogic comes back to interview Jared about his road to Elm, from the Tandy to JavaScript fatigue, and the inevitable, relieving discovery of Elm. The love for Elm never stops.

Details
/
Transcript

[00:00:00] Jared: what I really wanted was this reliability.

[00:00:01] What I really wanted was the ability to fearlessly refactor. I wanted to be able to scale the team. I wanted to be able to try things. And if they failed, to be able to change them.

[00:00:13] Mario: Hey folks, welcome back to Elm Town. I am not your host, I'm Mario Rogic, but your host, Jared M Smith, is the guest today. But first, before we dive in, let's talk about our sponsor, Logistically, so I'll hand it over to you, Jared.

[00:00:28]

[00:00:28] Sponsored by Logistically

[00:00:29] Jared: At Logistically, we make intuitive software to help logistics teams make better decisions and improve efficiency. Logistically pays me to record Elm Town episodes, as well as pays for our production and hosting costs. We build the front end for all new features in Elm. If you're interested in our mission and enjoy writing Elm, please drop us a line, elmtown at logisticallyinc.

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

[00:00:53] Mario: Nice.

[00:00:54] The exclusive wrap

[00:00:54] Mario: Well, Jared. Welcome to Elm Town, officially, as a guest for the first time. Um, so yeah, like we were just chatting, I think, uh, this is the exclusive wrap on having Jared as a guest on an Elm related podcast. even though you've been doing, uh, yeah, Elm Town hosting for a little while now. So yeah, welcome.

[00:01:16] Jared: Yeah, thanks for having me on the show, I guess.

[00:01:21] Mario: Thanks for having yourself on the show. Um, But yeah, so for listeners, um, the last episode that I was on, at the end, Jared and I kind of chatted briefly, um, and I thought, well, it would be cool to do a reverse and actually, uh, get to know the host, of Elm Town a little bit better as well. So, uh, this episode, we're flipping things around and we're going to dive in, uh, with, with Jared and talk about, his Elm history and a bit more about himself.

[00:01:52] So I'm, uh, I'm super excited.

[00:01:54] Jared: Me too.

[00:01:55]

[00:01:55] Getting started in computing & programming

[00:01:55] Mario: I guess let's, uh, let's dive into a little bit about your guest history, given that you're now a guest. Um, so do you want to tell us a little bit about how you got started in computers and programming? What was your kind of entry point into this world?

[00:02:08] Jared: Sure. Yeah. So I actually, it's kind of funny when Jeroen was on. He made this joke about, you know, it started back in 1990 and then he was like, oh no, that's a joke. You know, I definitely wasn't. using computers then, uh, but mine actually does start around that time. I had a Tandy computer. It was one of these all in one keyboard.

[00:02:38] I think it plugged into the TV and there wasn't much that it could do. It came from Radio Shack and I remember I had maybe two game cartridges with it, but it had this book, this big book, really thick. Just filled with printed programs. And it would have a picture of what that program would look like when it ran.

[00:03:04] And there was this one that had this really cool visual on it. And I thought, ah, that's, that's it. I'm gonna, I'm gonna make that one go. And so, I remember trying to do that. And what it ended up was, my mom Bless her. She ended up typing out that entire program for me because I had no idea. You know, I'm sure I was making syntax errors left and right, and I don't know, I don't even remember if it really had an editor.

[00:03:37] It seemed like, at least when I was trying to do it, that if I messed up one line, I couldn't figure out how to go back to the previous line. So it had to be Perfect.

[00:03:47] Mario: And was your mom a programmer? Did she have computing experience or she just, she just got lumped with trying to fix up your, your mistakes?

[00:03:56] Jared: Yeah, that's a great question. So she had taken a Fortran class in college and I actually still have her college Fortran book Awesome. on the shelf. So she had a little bit of knowledge from that, and I'm guessing that was enough for her to be able to, to get through it. Now it's, Kind of related to that and going into the story of the Tandy, I think it helps to know that for me, this was a big deal because I would go into Radio Shack and we didn't have a lot of money when I was growing up.

[00:04:27] So for me to get this was kind of a big deal for the family. You know, it wasn't like a really expensive computer, but we didn't have running water for a while, you know, like, I mean, we were like really poor. So this was a big deal. And I think part of the reason for that was that back in the 1950s, my dad worked for IBM, and he was a computer technician.

[00:04:52] So this would have been computers that were in rooms, and they had a bunch of tubes, and you brought in your toolbox, and you would physically, you know, wrench on it, and work on it, and change things. So not exactly the kind of computer that I was working on then, the Tandy, but I think he saw enough of the change and saw how it was becoming more ubiquitous. Computers getting smaller and everywhere. And having been in that business in the past gave him some insight to say, okay, this is worth investing, you know, some of our precious money into. So, um, yeah, it really was both of my parents, uh, It took to, to get me kind of started with that, but

[00:05:40] Mario: Yeah, very nice. And did that early exposure lead directly into your programming career or what did the, what did the steps post that look like?

[00:05:49] Jared: not really, you know, it was, I messed around with that and it was enough to be intriguing, but then again, I didn't really do, I didn't have a whole lot of money, so I didn't do a whole lot more with other computers. Didn't, you know, upgrade. So. What ended up happening in high school, I got an HTML book and downloaded Macromedia Dreamweaver.

[00:06:19] I think it was back in the day was trying. Yeah trying to figure that out early 2000s and Maybe even late 90s. And so I Just didn't get very far other than I was reading and getting exposure to HTML and CSS. And then I'd also mention on a previous episode about the TI 86 being this sort of marker in my mind of, oh, okay, I can actually carry around something that can compute, you know, I can play games on that TI 86.

[00:06:58] And so I had this interest in computing in general. But it wasn't really until I was going to college that I really had to think, okay, you know, what am I going to do with my life? I had thought a little bit about, well, my dad, you know, messed around with computers back in the day. And I had asked my friend, you know, Hey, what are you going to do?

[00:07:24] And he said, I'm going to go to this school and do computer science. And I was like, okay, well, That might be cool. I kind of just didn't make a big choice, you know, just kind of let the sails take me wherever. And I ended up in college and undeclared and taking computer science classes and psychology classes. And, and then I, at some point realized after taking a few classes, I was learning Java. And I realized, okay, this is it. I really do enjoy doing this kind of stuff.

[00:08:05] Mario: Okay, very nice.

[00:08:07] Informing the path to Elm

[00:08:07] Mario: And, uh, then somewhere along the line comes, uh, the exposure to Elm. Um, and so what did that look like for you? What was the, the entry point into that world?

[00:08:19] Sure, yeah, so after, or actually during college I started a

[00:08:26] Jared: co op position. I was doing C sharp and JavaScript. My first use of JavaScript was not for a web app, it was Microsoft InfoPath. Really old technology that was mostly a WYSIWYG form builder. But, we had outsourced to some consultants some work for this custom workflow.

[00:08:54] And I was working at a company that made wheels for semis. And so we were doing basically IT business related applications. This one was engineering sign off workflows. So making sure that people reviewed these documents before they were sent on to be built I. had to work on this form and had to learn JavaScript in a kind of weird way because it wasn't directly in the browser and there wasn't a whole lot of documentation at the time.

[00:09:29] So I learned pretty quickly how to print out all of the properties on an object. and I actually did this when I was learning to do some web development as well. Because I remember I had been trying to figure out how to use jQuery. I think it was. And I was on Christmas break at my dad's and we did not have internet.

[00:09:59] So I had to figure out how to, Keep things moving. And so when I figured out I could inspect things that way, um, it was really neat, but anyway, this is not to Elm yet, but JavaScript was really my first love language for programming. And. That led me then to, I switched jobs from that company to working at a healthcare company, this was around 2010, doing more JavaScript.

[00:10:28] And I, hit this kind of hard with the JavaScript because it's important to understand why I was searching. So I really got into JavaScript, introduced it to the company where we were mostly using dotnet controls. So that was, Handling the front end through C Sharp, but you didn't have a whole lot of control over it.

[00:10:50] So I was like, Oh, okay. You know, I know some JavaScript. I started introducing that. We were using JavaScript on the front end. I was loving it because I could write code many different ways. I could write some functional code, some object oriented code. I could try things out. I could experiment. I could see my tight feedback loop in the browser. I could even debug in the browser. So that was really exciting. I wanted it on the backend. This was when Node. js was starting to hop, get hot. And so I ended up introducing that to the company as well and worked on a product with that for about a year. Ended up getting really burnt out. I ended up getting repetitive stress injury and I ended up taking two months off work, backpacked around Thailand a little bit. I know we've talked about that a little bit in the past, but that was all, I think, directly related to how much I wanted to create something that was quality and how much of a struggle I was having trying to get there. And a lot of this is, you know, hindsight 2020, right? But I I definitely was searching for something and I ended up working a couple more years after doing that with C Sharp, AngularJS. I became a product lead, ended up managing around 10 people. And then, so back, let me just step back. When I was looking at Node. js, the project, Or the tool that we used on that project was something called CompoundJS.

[00:12:39] It was kind of like a Rails tool for JavaScript. And the creator of that, his tag on GitHub is 1602, but his name is Anatoliy Chakkaev. And I happen to be, fast forward back now to 2016, and I'm trying to find something else, getting interested in functional programming in general. I see this little tag that says Elm on his GitHub profile.

[00:13:09] He's got some Elm files. I'm like, what is that? So I searched that up, find the Elm website and I see reliability, friendly compiler, enforced semantic versioning. I'm like, Oh, okay. Ooh, you know, I'm, I'm excited. I'm intrigued here. And over the next few months, I didn't really dive in and learn Elm. I just watched videos of Richard and Richard Feldman, Luke Westby, Evan Czaplicki, of course, Jessica Kerr. And then I ended up deciding to go to elm-conf 2017. really been using it much, but I figured this will really motivate me to, to dig in. And so I went, this was attached to Strange Loop, saw several great talks, met a lot of, of people. I watched a talk by Jeremy Fairbank called the Boolean Identity Crisis. And this really kind of blew my mind. I remember after Andrey Kuzmin gave his talk, I was sitting there and I really hadn't talked to a lot of people. And I thought, you know what, I'm just going to go up, just going to talk.

[00:14:28] And. Having a lot of social anxiety, but I ended up doing it and really having a great time realizing that people were really inviting, open to talk with me. And even if I didn't have much experience with Elm at all, mostly just as someone who was interested, right?

[00:14:51] Mario: Hmm.

[00:14:52] Jared: And so I, had just a phenomenal time there.

[00:14:57] I met Murphy Randle, met Dillon Kearns there. I think I mentioned this on the episode with Dillon, where we did this group, this mob programming session, and they allowed me to come in there and type on the keyboard with just, you know, really not knowing what I was doing, but they were so patient with me.

[00:15:20] So I just came away feeling really motivated. I ended up spending my off time learning Elm on the side and yeah, that was when I really got into Elm.

[00:15:34] Mario: I wanted to roll back just a little bit. So, um,

[00:15:37] JavaScript fatigue

[00:15:37] Mario: you were talking about this project where you kinda had the chance to take A young love of JavaScript on the front end, right, and extend that to the back end, and that, that inevitably, oh, maybe, maybe inevitably is a fair word.

[00:15:50] Inevitably now from our Elm perspective perhaps, but, uh, ostensibly it led to, to burn out for you. What was your perception at the time of, of the reasons for that? Like were you, Did you have a clear sense of being like, Oh, I've burnt out because of X, Y, Z. Did you have a thought or did, did it just feel like, uh, this is just what programming is and I've just done too much of it.

[00:16:18] And now I need to go and backpack in Thailand. And that's just the way life is. Like what, what were you, what was your thinking, I guess, in close proximity to that happening? And then obviously how did that develop in, in, in, uh, in a longer, um, hindsight timeframe?

[00:16:34] Jared: Yeah, so the initial understanding was just that second thing. Like you said, I thought I had just done too much. I overworked myself and I just needed to take a break. I'd come back, not really change the work I was doing other than, you know, maybe take more breaks, which I did, and I still do. But I didn't really Tie any causation, anything to the technology that I was using or anything like that. it wasn't until I spent the next couple of years using C sharp, AngularJS, still not feeling like I would, I had really found what, what was working for me. And I think probably it was finding Elm and then looking back. After having used Elm for a little bit, seeing that, okay, I realize now that, what I really wanted was this reliability.

[00:17:41] What I really wanted was the ability to fearlessly refactor. I wanted to be able to scale the team. I wanted to be able to try things. And if they failed, to be able to change them. I wanted to have some measure of control without super strict discipline in the tests that were being written.

[00:18:05] Mario: Hmm.

[00:18:06] Jared: And of course it was in healthcare, and perhaps I had added some additional weight to it with that.

[00:18:15] Mario: Sure.

[00:18:17] Jared: But yeah, I just had kind of backtracked from there and then figured out these things.

[00:18:24] Mario: Yeah, that's cool. I find that, I find it really fascinating, overall, in people's journeys through this, and my journey as well. something that's been a little bit of a bugbear of mine in our industry, and I don't know whether you had this as well at that phase of your life but, I know at least in my experience, there was always This phrase just kept getting Thrown around.

[00:18:48] And it was, use the right tool for the right job. And that kept getting thrown around, over and over and over again. I remember, like, you know, being on, I remember the, the, my first major exposure to JavaScript was, um, Working on a like a multimedia interface for LG TVs, and I think this was back in roundabout same time frame I think it was 2010 And yet the team and LG had their own kind of bespoke version of Firefox that ran physically on the TV and I and I remember it so clearly because our This was pre import systems being a thing with JavaScript, really.

[00:19:27] So the app was one 100, 000 line file that we, that was it. Everybody collaborated on this absolutely enormous file. Um, and I just, I remember having conversations about the right tool for the right job. And then simultaneously, like we were doing this stuff. And now in hindsight, I'm like, What were the measures that we imagined were that we were evaluating which tool was right for which job?

[00:19:58] You know, like we were just doing crazy [audio cut] and stuff, yet we had this, you know, we had this awareness of, you know, it felt like a thing of being like, yeah, yeah, yeah, right tool for the right job. Like we should say this, this feels like the right thing to say. But then I feel like that subsequent conversation of like, you know, everybody would burn out and we'd be like, Guess we've just worked too much.

[00:20:20] That must be, you know, no one was like, could it be our tools? Could it be the way that we're approaching, the programming that we're undertaking or, or the structures that we have in place? It just never seemed to come up. And I don't know there's been, you know, a good decade, since then, but yeah, that's why, that's why I'm so curious as that, how that develops in hindsight.

[00:20:41] Um, and especially, you know, something like Elm, where we have such a different paradigm, I suppose, if you haven't been exposed to the world of functional and purity and, you know, some of the other delights that Elm gives in terms of that also being a fast experience, right, like in a quick experience rather, you know, than in some other context where that might not be the same.

[00:21:03] But yeah, okay, awesome. So that Intro through, um, you know, childhood and messing around and kind of falling into CompSci Which I think is kind of similar for me, I fell in in other routes, but in a similar way that you did where has that led you to today?

[00:21:23] elm-pool

[00:21:23] Mario: So what are you working on today? And, um, yeah, where do you sink your time in these days?

[00:21:30] Jared: Sure. Yeah. So one of the things that came out of that experience at elm-conf was meeting Andrey Kuzmin. And this, you know, we didn't suddenly became, become best friends, but we kept in touch and then it was 2020. I'd already started using Elm full time at Logistically, but it was a, I'd say November around there, they were doing, they were doing a game jam and I thought it would be cool.

[00:22:10] I saw he had done an example program with some pool balls rolling around. And I thought it would be cool to make that more of a real game. And so that was something that was really exciting because I didn't have any 3D experience. And Andrey did, so he didn't have a lot of the knowledge of the rules of pool games.

[00:22:40] And so it was a great separation of concerns there where I could build in the game logic and he could build in the physical rendering of this and it just really surprised me how easy it was to build this project with a few hours, nights, weekends around my day job and have this 3D game built and so that was one thing that was a lot of fun and we've made a couple of tweaks here and there since then, recently worked on it again.

[00:23:20] So that's probably why it's, it's fresh in my mind.

[00:23:24] Mario: I believe that, that game, you took that a little further as well to make it networked? Is that right?

[00:23:31] Jared: Yeah, I've done some work on that as well. And it turned out that the initial design of that was that on one side, you would do all of this processing get some results, and then instead of sending the result to the other side, you would send the same inputs that happened on one client to the other client,

[00:23:57] Mario: Mm

[00:23:58] Jared: it would repeat that same physics calculation.

[00:24:01] Mario: hmm. Mm hmm.

[00:24:04] Jared: to differences in float computation in CPUs, but we ended up getting slightly different results. On different clients. And so really that, that design needs to be rethought. And, and so it was really cool because the, to get that working did not take a lot of work either, and it was built on Lamdera.

[00:24:29] So, you know, kudos to you for, for making that possible, but. It was just a, an assumption that was made that was incorrect on my part of that, that we could just re do these calculations and expect the same result.

[00:24:45] Mario: So, I think we can, uh, we can, uh,,just rebrand it as like Chaos Pool or something, right everybody slowly ends up with   a slightly different game. And then maybe you can all be winners if it diverges enough. Um, but yeah, I, uh, yeah, that, uh, I bring that up because every now and then, I think I may have mentioned this on our last episode together, every now and then I like to poke around and see what kind of cool stuff people are building.

[00:25:13] And I remember stumbling across the pool and just opening it up and being like, Whoa, hold on, hold on, and I opened a second tab and I was like, Whoa, it, it synchronized! I was so excited. Um, so I found out, I found that really awesome. That's a, that's a really cool game. Um, that'll be cool, cool to see if we can get to completion one day.

[00:25:32] Why did you choose to introduce Elm at work?

[00:25:32] Mario: Um, but yeah, I have a question. From, uh, Michael Owen, who you worked together with at IWT Health, um, where he says that you, well, you said that you first discovered Elm and introduced it at work. Um, and so yeah, going, going again back to this idea of, of, of, you know, having a way of working and discovering Elm and then learning a bunch of insights about it.

[00:25:57] Yeah, Michael says that, uh, basically back, uh, when he was working with you, uh, on a number of years for a project that was built back then in Angular 1, um, and he says, I know, gross, in his words, um, uh, so Angular 2. 0 had come out. And so basically it sounds like the gist of it was that you got either tasked or you took up looking into that and basically figuring out that was going to be a full rewrite in essence and then exploring other languages and frameworks again, looking for the right tool for the right job, right?

[00:26:32] And he said that, yeah, your investigation ultimately led you to champion Elm over everything else. Uh, he says that It took a lot of time for, for, um, him to be convinced and for others of the company to be convinced to give Elm a shot, but you won them over in the end. And Michael says that his love for Elm is solely due to your enthusiasm about it, which I thought was pretty awesome.

[00:26:56] Uh, but the question that he has, uh, for you was, what was it about Elm that won you over when compared with other frameworks and languages out there? Um, and what were some hurdles that you had to overcome to get others, that you worked with on board. So I guess there's really two questions there, right? What was it that really convicted you that, Oh man, I've got to push everybody in this direction?

[00:27:16] Um, and then what was it like actually having to go through that? Mm.

[00:27:21] Jared: Great question. Thanks, Michael. I. Was like I mentioned, I went to the website, the Elm Lang website and saw the reliability, the friendly compiler, the enforced semantic versioning. And it was really that third one, the enforced semantic versioning that I was like, what, this is possible. How do you, how is this even possible? And so I was super intrigued and I had previously, I mentioned the Node. js project. It was at that same company. I think it was before Michael had joined, but we had deployed a version of it and things suddenly broke and we couldn't figure out anything in our code that had changed to break. So we figured it must be some dependency.

[00:28:14] This was before there was a package lock.

[00:28:16] Mario: Mm hmm. Mm

[00:28:19] Jared: then we ended up spending, splitting up this list of Node. js dependencies and just going down through them one by one and looking and trying to figure out what was causing this error. And so that was something that left a bad taste in my mouth with JavaScript.

[00:28:39] And so that was when I saw that with Elm, I was definitely like, okay, that That is huge. Like, I know this is solving a problem that I've experienced in the past in a very rough way. So, um, that was one. And then I had been getting interested in functional programming already. So I had looked at other things.

[00:29:04] I looked at lodashfp. So this is a library that I could use with our Angular code base and give us some sense of sanity, if you will, in this world. So if you were using the regular Lodash project, sometimes it would cause mutations, sometimes not, but this Lodash FP library would not be causing any mutations,

[00:29:31] Mario: Mm hmm.

[00:29:32] Jared: uh, by design anyway.

[00:29:33] What, whether it was capable of doing that a hundred percent, right. It's, it's difficult to say without, you know, Lots and lots of tests to be certain, but I was looking into that. I was looking into F sharp. So we were using C sharp on the back end. So I was looking into that. And so I saw that there was something there and I think, you know, mostly around this reliability of this, just like wanting things to not fail without us knowing why and not having some more control over it.

[00:30:10] So.

[00:30:11] Failing to introduce functional programming at work

[00:30:11] Mario: And had you had, had you had a coding ex like a significant coding experience in Elm by this point? Was this at, was this at the intersection of your, your own personal journey with Elm? Or were you still kind of quite early on? Like, had you been to elm-conf, had you already experienced the community vibe and stuff like that?

[00:30:28] Jared: Right. No, I had not. So actually I had first introduced functional programming as a concept to the company and failed miserably. So this is something I want to point out of what not to do. And I have to thank Nduati Kuria. episode hasn't been released as we record this, but, uh, I was talking with him and just talking about different things. And one of the things he brought up is, you know, I could give this path of how, you know, I found Elm and it was just a, you know, this, this beautiful journey. And there were no hiccups, but the reality is when I first introduced functional programming as a concept to the company, I was like, okay, here is currying, here's immutability, you know, here's higher order functions.

[00:31:19] And my, Michael, was one of them that was like, okay, this, why? And another one, Jesse Moore, he made the intro music for Elm Town. He was, again, good at pushing back and asking, why would I care about any of this? So I really made the mistake of starting with the what instead of the why.

[00:31:48] Mario: Mm hmm.

[00:31:50] Jared: Just diving into these technical things that didn't really explain to anyone why they should care, right?

[00:31:58] Mario: Mm hmm.

[00:31:59] Jared: And so that's, that's where I was starting from. And then I kind of had to rebuild that trust, right, as I'm trying to explain it to the team. And so, yeah, I guess back to this question of what was it about Elm that initially brought me in. Well, it was so clear this message, I didn't have to do as much discovery to explain and find the words about how to convey this to the team,

[00:32:37] Mario: Mm hmm.

[00:32:37] Jared: it was right there on the Elm homepage.

[00:32:40] I believe there's a blog post that talked about it as well, about introducing Elm, talking about starting out. to start trying it in one place, which that's how I did it. You know what, the team was skeptical and I, rightly so, and, and so I ended up being able to convince them to at least, you know, let me write one small feature in Elm in our existing AngularJS code base and we will see how it goes and, and go from there.

[00:33:12] Mario: Yeah, nice. So I think that maybe the blog post you're referring to was by Evan in 2016, "How to use Elm at work". Perhaps that was one of the drivers for that. That's cool. Okay, so yeah, you've convinced yourself and you've had prior experience of trying to make change of hearts and minds and that didn't work out.

[00:33:35] So it sounds like the second time around with Elm, that did work out. How did that process feel? What do you think you did differently? How was that for you?

[00:33:46] Jared: Well, for one, I turned it into, starting with the explanation of the hook, why this would be interesting for us as a company, the problems we were facing and how this would solve it. And so by inverting and starting with that, I think helped a lot. And then also. After I did go to elm-conf and started using it on my own, I had more confidence.

[00:34:18] I had more personal experience saying, okay, I've used this here. I know it can be used for this, what we're doing. I know we can make it work.

[00:34:29] Elm at Logistically

[00:34:29] Mario: And then, now, obviously, with Logistically, well, since 2020, so, um, There's been a decent run there, four years now, um and how was Elm, I suppose, placed within Logistically? Was that something that you introduced again, having had that experience? Or did you move there because of Elm? And how has the last four years been there with Elm?

[00:34:56] Jared: So I moved to that company because there was already Elm in place there, and it happened to be that the code base was a combination of legacy AngularJS and Elm code. So I already had experience with this particular combination of code. So that was a good fit.

[00:35:17] I like that. If I'm writing Elm at work and I try something and it fails, I can back back out of it. I can try something else. I can make sure that the code is consistent at the end of the day instead of being some mishmash of different things. So yeah, it feels really good.

[00:35:44] I'm completely happy with using Elm and I've definitely added other Elm tools on top of just regular Elm. So, you know, elm-watch, uh, I've used elm-codegen for building out some of our things that we have Python on the backend. So that for me is a, a source of frustration for not having the, the types, but the type static type system.

[00:36:15] So I ended up adding in some code that will analyze and take the, what happens on the backend and then create Elm code out of that. So,

[00:36:28] Mario: Oh, nice. Okay. Mm

[00:36:30] Jared: so a lot of what Wolfgang Schuster's OpenAPI tool does, we kind of built an in house version of that to make sure that the API is consistent between the front end and the backend.

[00:36:45] That feels so nice. I wouldn't say that the generating of decoders was really as important as it might seem. If you're, if you haven't done it, that, that feels like that's the most important part. hmm. part to me was having that reliability, that consistency, that if something changed in the back end, it would propagate to the front end.

[00:37:13] Mario: Yeah, the integrity, right?

[00:37:15] Jared: Yes, yes. So the, the actual building of decoders, if I'm using IntelliJ or Atom plugins, I can have it generate a decoder for me. That's, it's really doesn't take as much time as it, as it seems like if you're not used to doing it. So,

[00:37:36] Mario: Absolutely. That makes sense. All right, cool.

[00:37:40] Meta Elm Town

[00:37:40] Mario: Well, I'd like to change gears a little bit. Um, so we've been talking about, about you and your background and how you've ended up here with Elm today and some of the Elm history, but we haven't yet talked about how you ended up as the host of Elm Town, I'm taking that over, so perhaps now a bit of a meta, like talking about Elm from the community, like building Elm community with Elm, I don't know.

[00:38:11] So yeah, you mentioned that you went to elm-conf back in 2017 And I think you said that you met with Murphy Randle, is that right? Or at least that was your first crossroads with him? And I'm not sure, I don't remember exactly now when Elm Town was running, but it probably would have been around that time that Murphy was running with Elm Town. And then, yeah, that's that stopped at some point and you since picked that up.

[00:38:35] So how did, how did that progress? And how did you end up being like, yeah, I want to, I want to run the Elm Town podcast.

[00:38:42] Jared: yeah, that's a good question. So back then when I went to elm-conf 2017, I listened to Murphy on the Elm Town podcast on the way there and met him there and Listened to it all the way home. So I was definitely a big fan of the show and I liked that it was telling me stories about the people. I've really got to feel like I understood motivations. And if you recall back to when we were talking about me trying to convince the team to do something right, choose Elm or choose functional programming, thinking about the motivation was an important part of that. So that's something that I think, you know, Murphy really brought in with the show that I thought was really fun and was enough to get me to listen to every episode sometimes multiple times so I liked that. And then I think it was probably 2018 2019 Kevin Yank took over as host of Elm Town and he ran that I think until 2020 And then it lay dormant until last year when I took it over.

[00:40:18] And so that happened because at work we were talking about hiring and about the process of finding people. And we, I talked about this with Erik Person a bit, but when you're trying to build a team, it's great to find people who are really into Elm because they are motivated to build Elm, but I don't solely rely on that.

[00:40:47] So a lot of the time we end up training people to write Elm, which is good. That's, that's a nice experience, but we thought, well, it'll be an opportunity for us to get the Logistically name out there. That we use Elm and as a way to give back. And then, for me personally, yeah, as being a fan of Elm, a fan of Elm Town specifically, and the format and telling stories about how people come to Elm and why they use it and stay here, felt like something that would be fun to do and would force me to be a better Speaker.

[00:41:33] Mario: Okay, nice. And in the time that you've been running, uh, the, the Elm Town podcast, how, how has that experience been compared to what you maybe thought it would be like? What do you feel like was surprisingly, like, easier than you thought it would be, and what things have ended up harder than you thought they would be?

[00:41:54] Jared: So the actual interview part is easier than I thought it would be. The editing and publication preparation part is a lot more work than I thought it would be. And maybe that's the process that I use, but it's, yeah, it's definitely a lot of work to get an episode ready to publish.

[00:42:20] Mario: So with the, um, with the selfish ambition that there should be more Elm podcasts in the universe, what would you say to somebody, you know, out there in the Elm community who maybe doesn't realize yet they might be a future Elm podcast host? Um, yeah, what would you, what would you say to, like, encourage them or inspire them, perhaps?

[00:42:41] Jared: I would say record a few episodes. Record at least three episodes. Let's say six episodes before you publish any episodes. Okay. the reason for that is it takes the pressure off of having to record. And if it doesn't go well, Well, you're out a little bit of time for the recording, but you don't have to go through the whole process of editing and, and publishing all of those episodes and have fun with it.

[00:43:20] just meet people.

[00:43:23] Mario: Yeah, definitely.

[00:43:24] Hit record vibe shift

[00:43:24] Mario: I also find it that there's one interesting thing. I'm not sure whether you've found this, but I've noticed it as well on the few times that I've been on other podcasts and especially with Elm Radio. There's almost this sense that there's a very significant kind of vibe shift between, you know, you jump on, you chat, you're getting prepped, and then the record button goes on, and then suddenly it's like, Oh crap, it's on.

[00:43:51] Like, there's, you know, like there's a bit of stage fright, and it's just, I've always found it, um, speaking in person. That doesn't seem as weird because there's usually a physical transition, like you physically move to the stage, you physically turn around and face the audience. You know, you're the one person facing the wrong direction.

[00:44:11] I've always found it so interesting that you can just press this button and get this synthetic vibe shift, you know, immediately. Um, so I've sometimes, yeah, I've sometimes thought about, you know, how you could Yeah, I think there's been a lot of situations in the Elm community where we've had conversations of things that haven't been recorded.

[00:44:28] You're like, damn it, I wish that there was a recording, like an ephemeral kind of recording happening somewhere and we could just pull that out. So yeah, I've always found that fascinating, trying to ease into that and kind of push that, that, um, the performance anxiety to the side and be like, nah, it's okay, we're just chatting and it's fine.

[00:44:49] And it's fun and enjoyable. But yeah, I don't know if you found the same.

[00:44:53] Jared: there's definitely a shift there and I think the change of What you're saying when you go on stage, then for one, you're on the spot the entire time. When you're having a conversation, of course there's a back and forth, and so you have an opportunity to get breaks in there.

[00:45:12] Mario: Yeah, for sure. we're coming to a point where we're wrapping up a few things nicely, but, um, was there anything in particular that you wanted to kind of chat about or kind of elude as a guest on the Elm Town podcast?

[00:45:29] Jared: Well, I guess the one thing that I've been doing most recently is working again with Andrey Kuzmin, This time we're working on the Elm language server integration with Zed. So if you haven't tried out the Zed editor, it is super fast. It allows you to do remote pairing and it actually works. At least when I've used it, it actually works. And so I'm really excited about that editor in general. It's some of the folks working on that also worked on Atom, which I mentioned a couple of times before, is still my daily driver after all

[00:46:14] Mario: your daily

[00:46:15] driver! I'm also a long time Atom user, but I found Atom mode in VS Code and then I kind of forced myself over to match the rest of the team. But, okay, yeah, that's cool. I did install Zed last week to just take a quick look. Um, is it your daily editor now? Like, is it at the point now where you can use Zed exclusively for your work?

[00:46:33] Jared: So the Elm language server integration was just. In production. And so there are some configuration options that a PR was just merged that Andrey and I were working on, and so that has not been deployed yet. So I've used it a little bit with the locally compiled version, but not all day, every day. And so I'm hoping that, yeah, once that's in the release build and out there.

[00:47:07] I will start using it more and more. I still have, there are some Vim finger bindings. I have like this Vim Mode Plus plugin that is super old that I just, the muscle memory is hard to get rid of, hard to recreate. So if whoever, I don't remember who made that, but if whoever made that wants to make that for Zed, if you're out there, that would be awesome.

[00:47:34] Yeah nice,

[00:47:35] Mario: Yeah, we've got a I feel like it's just One of those things where inevitably every two, three, maybe four years, you just have to be like, Alright, what's the next, uh, the next cycle of editor hype? We just gotta evaluate it and figure out if we're swapping and when we're swapping.

[00:47:54] Jared: yeah.

[00:47:55] Mario: But yeah, just the bane of our industry, I suppose.

[00:47:58] Um, alright, nice one.

[00:47:59] Picks

[00:47:59] Mario: Well, we might, uh, maybe we'll move to picks then, so I think that was, that was probably one pick, so checking out Zed. So we'll definitely dig into that a little bit more, especially with the Elm language server being available. Um, actually the time I moved to VS Code, I think the first time, I started using it just for the Elm projects, um, that I had, and then I slowly started to move some of the other things that I work on over as well.

[00:48:22] Um, but yeah, is there, are there any other picks that you've got?

[00:48:26] Jared: Yeah. There was one other one that I thought of as I was early on learning JavaScript and HTML, one of the resources that I had picked up after searching Stack Overflow, I started to learn that the Mozilla developer network MDN

[00:48:46] Mario: Mm hmm.

[00:48:47] Jared: documentation was really nice. And so if I have to Find out something with HTML reference or with JavaScript interop ports, flags, things like that. Then I go back to that MDN MDN documentation because it is still really nice after all these years.

[00:49:10] Mario: Okay. Very nice. Well, I also have a pick that isn't, I wouldn't say it's super Elm related, but I've been kind of digging into it lately, um, or at least trying it again, and that is Nix, the package manager, and NixOS, the, uh, Operating system built on top of Nix, the package manager. So I'm still, I'm still wrapping my head around it.

[00:49:35] Um, but for maybe for those of you that haven't been exposed, so Nix's kind of goal, well actually let's see, let's see what they say on their own front end website. So the, the pitch from Nix seems to be reproducible builds and deployments, which I think is maybe a bit, uh, a bit vague. But, um, Yeah, Nix is basically like a configuration language that's got some kind of functional principles in mind.

[00:50:02] But I think the tie in to Elm would be, you know, on the homepage they have Reproducible, Declarative, and Reliable, which I think are very similar shared goals with Elm, right? So, um, yeah, I've been looking into this along with some of the other guys on the Lamdera team for, our enterprise servers, right?

[00:50:20] Wanting to have, uh, A bit of a like a handle, a bit of handle and control on what I think is traditionally very mutable. You know this idea like you build a server and yeah you have like scripts and provisioning but it's like, you know, you have to like really kind of massage and move like things to be in the right state.

[00:50:38] Um, So yeah, I, this, this whole right tool for the right job thing, you know, I tried really hard to think about it, so I'm like, yeah, I can go write batch scripts, and I can probably do that pretty quickly, but, um, you know, what, what are the actual measures for the right tool for the right job? Um, so yeah, I've been really, I've been really enjoying kind of taking a look at it again.

[00:50:56] It seems, at least in my experience, I think I tried Nix maybe three, four years ago on Mac. Um, and I think it was primarily a Linux tool, but now I'm finding that actually it works quite well on Mac. Um, definitely it's working well on my M1 machine. not exactly sure how it will all go, but so far so good.

[00:51:13] We seem to have like, you know, a declarative config that we can apply. and you can, uh, with Nix you can quickly boot up. You know, say you want, I want a particular version of Node. js and Nix will boot up a shell with just that thing available, just that shell, and you quit out of the shell and it's, you know, it's not on your system or it's not in your shell anymore in any case.

[00:51:31] So I think that's, that's pretty cool and gives me some, some Elm philosophy vibes. Um, so maybe there's some, someone else out there that's pulling their hair out, um, with, uh, yeah, DevOps and stuff and wants to check it out. Yeah, that would be my pick.

[00:51:46] Jared: Um, Yeah, a good one. I was recently talking about that at work. So we have Docker images that we build and deploy out and those Docker image tags can be pushed multiple times. So those, those can change on you, your base. Yeah. Base image. And so Yeah, those things are frustrating.

[00:52:13] And then also with Python packages as well. So we've been exploring, just testing the waters with it as well. Are you using Nix with the channels or Nix Flakes? I don't completely know what I'm talking about yet, but

[00:52:27] Mario: Yep,

[00:52:28] me neither. different areas there.

[00:52:30] so definitely Leonardo is our, um, or you may know him as Minibill on, um, Uh, the Elm Slack and the Discord. But I think Leonardo is our kind of resident Nix expert, and so, yeah, I ask questions and he gives me answers and then inevitably I'm more confused than I was initially at this stage.

[00:52:48] Um, but yeah, my understanding of the difference between the channels and the flakes, um, is loosely the idea of the channels being something that can continue to change and be up to date. So for example, if you say, um, if you say you want to have Node on a particular channel, at least from my, my naive understanding so far, there, there are lock files as well, but my, my naive understanding is that if you rerun that from scratch, like on a new system, you would get the latest stable or whatever the version of that package is on the channel that you're, you're subscribed to.

[00:53:22] Um, whereas I believe with flakes, there's more of like a bespoke thing where you can mix and match, so you could have some things from channels or you can have some things where you're like, I want this very very specific version and I want it pinned and I don't want that to change. So yeah, we've got a flake setup for our kind of system provisioning because we want to be able to be like, okay well that's, you know, when you run this you will definitely get this very specific set of packages and systems set up together.

[00:53:51] But yeah, I imagine that, you know, if you were, if you were doing some tooling locally for yourself, you would be pretty happy to stay on a channel and just have that kind of bump up periodically. Um, yeah, which is another, I guess the talking about, you know, I've jumped into talking about the what. I've made the classic mistake, right?

[00:54:08] So what's the why? My why is that I have spent way too much time in the last couple of years dealing with, you know, upgrading things. Um, and I've dealt with this everywhere, I've dealt with this with, you know, the Elm compiler, um, or rather the Lamdera compiler, like upgrading GHC versions, I've dealt with it at work.

[00:54:27] You know, going through Postgres versions, we're going through Ruby version upgrades And it's kind of like, every time you bump one thing, some other thing breaks You know, uh, the amount of times I've compiled OpenSSL from scratch now I don't, I don't even know, and half the time I don't even know why I'm doing it. You know, I'm just, I'm copy pasting in desperation random commands from 400 comment GitHub threads You know, so I'm just like, I was like, there's this, this feels to me again like the 100, 000 line JavaScript file. You know, I feel like 10 years from now, we're going to be looking back and like, why, why were we doing that?

[00:55:03] Um, so yeah, that's kind of my why I'm looking for for a solution to that, that pain, I suppose.

[00:55:09] Jared: cool.

[00:55:11] Mario: Well, nice one, Jared. Um, maybe that's a point to, to taper this off, but this has been a pleasure. Thanks for, uh, having me on to take over and, uh, have you as a guest. It's been really cool getting to know more of your background story and your motivations, uh, as well, and running Elm Town. So, um, yeah, I hope that our listeners enjoy that as much as I did.

[00:55:33] Um, and yeah, I'm super stoked that Elm Town exists, that we, as a small community, have two significant and, in my opinion, very high quality podcasts. Um, so thank you for all the effort that you put in for that, um, and especially, you know, I know, uh, having to put my hand up as having a significant backlog of Elm Online Meetup editing still to complete, um, I do know the pain of how, how much effort it can be, um, to, yeah, to, um, Do all the little bits that I think aren't really visible, you know, like the cleanups and removing the ums and the, um, yeah, the inevitable mic disconnection that we have on this episode that no one will hear about because you're going to smooth it out.

[00:56:18] so yeah, I appreciate all of your work and everything you put in for the community. That's really awesome. So thank you for doing that.

[00:56:22] Jared: I appreciate that, Mario. Yeah, thanks for doing this interview.

[00:56:26] Mario: Nice one. And, uh, with that, I guess we'll leave it there. So thank you very much, Jared.

[00:56:32] Jared: Thank you, Mario.

[00:56:34]

© 2024 Jared M. Smith